jueves, 17 de mayo de 2012

Acceso a una cabina de almacenamiento HP EVA 4100 con multipath

Disponemos de un servidor con dos tarjetas de Fiber Channel, cada una de estás tarjetas está conectada a un switch de fibra distinto y cada switch está conectado a los dos controladores de la EVA.
Vamos a ver como configurar el servidor con Ubuntu 10.04 para proporcionar acceso a la cabina en alta disponibilidad con multipath de forma que, desde el servidor, trabajaremos con un único dispositivo de almacenamiento por cada disco virtual que la EVA presente al servidor.
El esquema de conexión es el siguiente:



Comprobamos que el servidor dispone de las dos tarjetas conectadas:

# lspci| grep Fiber
01:08.0 Fibre Channel: Emulex Corporation Helios LightPulse Fibre Channel Host Adapter (rev 01)
02:09.0 Fibre Channel: Emulex Corporation Helios LightPulse Fibre Channel Host Adapter (rev 01)
El kernel cargará el módulo lpfc como driver para estás tarjetas:

root@Mercurio:/etc/modprobe.d# lsmod |grep lpfc
lpfc                  526920  24
scsi_transport_fc      52158  1 lpfc
En mi caso, en está versión de ubuntu no es necesario, pero si tenéis problemas con lpfc podéis crear el archivo /etc/modprobe.d/lpfc.conf para configurar su comportamiento:

# cat /etc/modprobe.d/lpfc.conf
#options lpfc lpfc_use_msi=0 lpfc_log_verbose=0xffff
options lpfc lpfc_use_msi=0
Para instalar multipath:

# aptitude install multipath-tools scsitools
Configuramos multipath con el siguiente fichero, tiene una sección específica para nuestra EVA 4100:
# cat /etc/multipath.conf
##
## This is a template multipath-tools configuration file
## Uncomment the lines relevent to your environment
##


## Use user friendly names, instead of using WWIDs as names.
defaults {
        user_friendly_names yes
}


blacklist {
root@Mercurio:~# cat /etc/multipath
multipath/      multipath.conf 
       devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st|eth|br)[0-9]*"
       devnode "^hd[a-z][[0-9]*]"
#       devnode "^sd[c-d][[0-9]*]"
       devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]"
}


devices {
        device {
                vendor "HP"
                product "HSV200"
                path_grouping_policy group_by_prio
                getuid_callout "/lib/udev/scsi_id -g -u /dev/%n"
                path_checker directio
                path_selector "round-robin 0"
                prio alua
                rr_weight uniform
                failback immediate
                hardware_handler "0"
                no_path_retry 12
                rr_min_io 100
       }
}
Podemos reiniciar el servidor o utilizar la utilidad rescan-scsi-bus para encontrar dispositivos y que los agrege al sistema. También debemos utilizar está utilidad si presentamos más discos virtuales desde la EVA al servidor.
Cuando "despresentamos" discos virtuales se pueden utilizar con la opción -r pero por mis pruebas el resultado no siempre es bueno y requiere reiniciar el servidor.

Con el siguiente comando comprobamos el estado del multipath:
# multipath -ll
mpath2 (3600508b40006c54300011000003f0000) dm-2 HP,HSV200
size=57G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=50 status=active
| |- 6:0:0:1 sdm 8:192 active ready running
| `- 5:0:0:1 sdc 8:32 active ready running
`-+- policy='round-robin 0' prio=10 status=enabled
|- 5:0:1:1 sdf 8:80 active ready running
`- 6:0:1:1 sdp 8:240 active ready running
mpath8 (3600508b40006c5430001100000520000) dm-0 HP,HSV200
size=100G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=50 status=active
| |- 5:0:1:3 sdh 8:112 active ready running
| `- 6:0:1:3 sdr 65:16 active ready running
`-+- policy='round-robin 0' prio=10 status=enabled
|- 6:0:0:3 sdo 8:224 active ready running
`- 5:0:0:3 sde 8:64 active ready running
mpath7 (36006048c0b49c13af746348067dac3bb) dm-7 EMC,Celerra
size=1.0T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 7:0:0:1 sdl 8:176 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
`- 8:0:0:1 sdk 8:160 active undef running
mpath6 (36006048c33fbd15cdb351637f9c6ab26) dm-5 EMC,Celerra
size=1.0T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=enabled
| `- 10:0:0:1 sdi 8:128 active undef running
`-+- policy='round-robin 0' prio=1 status=active
`- 9:0:0:1 sdj 8:144 active ready running
mpath5 (3600508b40006c54300011000004c0000) dm-1 HP,HSV200
size=20G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=50 status=active
| |- 6:0:0:2 sdn 8:208 active ready running
| `- 5:0:0:2 sdd 8:48 active ready running
`-+- policy='round-robin 0' prio=10 status=enabled
|- 5:0:1:2 sdg 8:96 active ready running
`- 6:0:1:2 sdq 65:0 active ready running
Como podéis ver hay otra cabina que dará para otro artículo, de momento no le hacemos caso.
Vemos el estado de los caminos posibles a cada disco y que todos están activos, sin encontrásemos alguno en fallo deberíamos revisar el hardware. (Os recomiendo revisar primero los latiguillos de fibra y comprobar los leds de las tarjetas para ver si alguno está apagada).

Listamos los discos y particiones:


# ll /dev/mapper/
crw------- 1 root root 10, 236 2012-05-14 15:35 control
lrwxrwxrwx 1 root root       7 2012-05-14 15:35 mpath2 -> ../dm-2
lrwxrwxrwx 1 root root       7 2012-05-14 15:35 mpath2-part1 -> ../dm-3
lrwxrwxrwx 1 root root       7 2012-05-14 15:35 mpath5 -> ../dm-1
lrwxrwxrwx 1 root root       7 2012-05-14 15:35 mpath5-part1 -> ../dm-6
lrwxrwxrwx 1 root root       7 2012-05-16 15:55 mpath6 -> ../dm-5
lrwxrwxrwx 1 root root       8 2012-05-16 15:55 mpath6-part1 -> ../dm-11
lrwxrwxrwx 1 root root       7 2012-05-16 15:54 mpath7 -> ../dm-7
lrwxrwxrwx 1 root root       7 2012-05-16 15:54 mpath7-part1 -> ../dm-8
lrwxrwxrwx 1 root root       7 2012-05-14 15:35 mpath8 -> ../dm-0
lrwxrwxrwx 1 root root       7 2012-05-14 15:35 mpath8-part1 -> ../dm-4
Aquí ya vemos particiones pero si es un disco nuevo utilizamos fdisk sobre, por ejemplo, /dev/mapper/mpath2 y generamos una partición /dev/mapper/mpath2-part1
Después creamos el sistema de ficheros y ya podemos motarla he incluirla en el /etc/fstab. Os recomiendo utilizar los UUID de los discos desde el fstab, para averiguarlos:
# ll /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root  9 2012-05-14 15:35 0059c482-d8b9-4d88-8d98-f15b71318077 -> ../../md3
lrwxrwxrwx 1 root root  9 2012-05-14 15:35 056f57cb-1b77-4df5-a023-1f20c41c21e7 -> ../../md4
lrwxrwxrwx 1 root root 10 2012-05-14 15:35 13776bb7-2242-4068-a41f-e919baff3a86 -> ../../dm-4
lrwxrwxrwx 1 root root 10 2012-05-14 15:35 156c04a8-199e-41f5-b974-3ba3a4b5e635 -> ../../sdb7
lrwxrwxrwx 1 root root  9 2012-05-14 15:35 2c0bdeca-617e-4e3a-b31a-31442ac63ff7 -> ../../md2
lrwxrwxrwx 1 root root 11 2012-05-17 02:07 2df684f9-1798-4e21-960b-304933b46637 -> ../../dm-11
lrwxrwxrwx 1 root root 10 2012-05-14 15:35 3b9a2cb0-32c3-4be9-a787-340e106041d5 -> ../../dm-3
lrwxrwxrwx 1 root root 10 2012-05-17 02:07 465081f7-2591-4456-a972-847d813e4d0c -> ../../dm-8
lrwxrwxrwx 1 root root 10 2012-05-14 15:35 510ed901-d0a3-4585-b594-002d9a78b61b -> ../../dm-6
lrwxrwxrwx 1 root root 10 2012-05-14 15:35 57bc797f-74f8-467e-9145-200cdcafe180 -> ../../sda7
lrwxrwxrwx 1 root root  9 2012-05-14 15:35 7c6e736b-9f82-4107-b127-62831384d9ce -> ../../md1
lrwxrwxrwx 1 root root  9 2012-05-14 15:35 a04ca2ee-97fc-4644-8dd3-3184fead0f2c -> ../../md0

Como podemos ver aquí tenemos montados nuestros sistemas de ficheros:

# mount
/dev/md0 on / type ext3 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
/dev/md4 on /tmp type ext3 (rw)
/dev/md1 on /boot type ext3 (rw)
/dev/mapper/mpath2-part1 on /media/admine type ext3 (rw,acl,user_xattr,errors=remount-ro)
/dev/mapper/mpath5-part1 on /media/faxing type ext3 (rw,acl,user_xattr,errors=remount-ro)
/dev/mapper/mpath6-part1 on /media/backup type ext4 (rw,acl,user_xattr,errors=remount-ro)/dev/mapper/mpath8-part1 on /media/F type ext4 (rw,acl,user_xattr,usrquota,errors=remount-ro)
/dev/md2 on /var type ext3 (rw)
/dev/md3 on /home type ext3 (rw)
Si después queréis utilizar acceso concurrente desde dos servidores ocfs2 funciona muy bien.

miércoles, 9 de mayo de 2012

Salt, libreoffice y ubuntu 12.04

He comprobado que con windows ya no hay problema para instalar salt4 (hay una nueva versión de marzo del 2012) con libreoffice versión 3.5.3. Simplemente he instalado libreoffice, el paquete de ayuda, después salt y funciona perfectamente.

De modo que vamos a intentar que nos funcione en linux, en concreto en Ubuntu 12.04 con libreoffice 3.5.2 instalado. (Al final del documento tendréis los enlaces a los ficheros modificados por mi directamente para no tener que hacer todos los pasos).
Ojo, solo funciona en sistemas de 32 bits, al final de artículo tenéis más información al respecto.
Ojo2, para desinstalar el paquete salt-ooo-addons hay problemas, te recomiendo que leas el artículo completo antes de hacer nada. Aunque es muy largo, gran parte del texto son las respuestas de los comandos que se "leen" muy rápido. Para facilitar la lectura los comando están en negrita como suelo hacer siempre en los artículos.
Actualización (16/05/2012): Solucionado el problema de la desinstalación, mirar al final del documento.
 
Para descargar el paquete debian con las extensiones: salt-ooo-addons.deb

Resumen de comandos necesarios para hacer la instalación sin más:
# wget http://www.cefe.gva.es/polin/docs/salt4U.zip
# unzip salt4U.zip

# dpkg -i salt-common_4.2.2_all.deb
# dpkg -i salt-data_4.2.0+201200312.1_all.deb 
# dpkg -i salt-server_4.2.2_i386.deb 
# dpkg -i salt-ooo-addons_4.2.3_i386.deb
# dpkg -i salt-help_4.2.2_all.deb 
# dpkg -i salt_4.2.2_all.deb 

Vamos a verlo en detalle...

Descargamos y descomprimimos la nueva versión de Salt:
# wget http://www.cefe.gva.es/polin/docs/salt4U.zip
# unzip salt4U.zip
Archive: salt4U.zip
inflating: nou_salt_20120312/INSTRUCCIONS.txt
inflating: nou_salt_20120312/munta_el_salt.sh
inflating: nou_salt_20120312/salt_4.2.2_all.deb
inflating: nou_salt_20120312/salt-common_4.2.2_all.deb
inflating: nou_salt_20120312/salt-data_4.2.0+201200312.1_all.deb
inflating: nou_salt_20120312/salt-help_4.2.2_all.deb
inflating: nou_salt_20120312/salt-ooo-addons_4.2.3_i386.deb
inflating: nou_salt_20120312/salt-server_4.2.2_i386.deb

Como podéis ver del nombre de la carpeta es de donde he sacado la fecha de la nueva versión de Salt.

Disponemos del lanzador munta_el_salt.sh par instalarlo directamente pero no funciona, nos fallará al instalar salt-ooo-addons, además depende de que utilices el gestor de paquetes de gnome, para los usuarios que preferimos kde también es un problema. Pero si nos proporciona información para saber que tenemos que hacer:
$ cat munta_el_salt.sh
#!/bin/bash

function error {
   zenity --error --title="Salt 4" --text="S'ha produït un error en instal·lar el paquet \n $1"
   exit 1
}

if [ $UID -ne 0 ]; then
        exec $(gksu $0 $@)
else
   gdebi-gtk --non-interactive --auto-close salt-common_4.2.2_all.deb || error "salt-common_4.2.2_all.deb"
   gdebi-gtk --non-interactive --auto-close salt-data_4.2.0+201200312.1_all.deb || error "salt-data_4.2.0+201200312.1_all.deb"                                         
   gdebi-gtk --non-interactive --auto-close salt-server_4.2.2_i386.deb || error "salt-server_4.2.2_i386.deb"                                                           
   gdebi-gtk --non-interactive --auto-close salt-ooo-addons_4.2.3_i386.deb || error "salt-ooo-addons_4.2.3_i386.deb"                                                   
   gdebi-gtk --non-interactive --auto-close salt-help_4.2.2_all.deb || error "salt-help_4.2.2_all.deb"                                                                 
   gdebi-gtk --non-interactive --auto-close salt_4.2.2_all.deb || error "salt_4.2.2_all.deb"
   zenity --info --title="Salt 4" --text="La instal·lació del Salt ha finalitzat correctament."
fi

exit 0

En negrita vemos la secuencia de instalación de los paquetes:

$ cd nou_salt_20120312/$ sudo dpkg -i salt-common_4.2.2_all.deb
[sudo] password for ruben:
Seleccionando paquete salt-common previamente no seleccionado
(Leyendo la base de datos ... 431421 ficheros o directorios instalados actualmente.)
Desempaquetando salt-common (de salt-common_4.2.2_all.deb) ...
Configurando salt-common (4.2.2) ...
$ sudo dpkg -i salt-data_4.2.0+201200312.1_all.deb
Seleccionando paquete salt-data previamente no seleccionado
(Leyendo la base de datos ... 431426 ficheros o directorios instalados actualmente.)
Desempaquetando salt-data (de salt-data_4.2.0+201200312.1_all.deb) ...
Configurando salt-data (4.2.0+201200312.1) ...
$ sudo dpkg -i salt-server_4.2.2_i386.deb
Seleccionando paquete salt-server previamente no seleccionado
(Leyendo la base de datos ... 431480 ficheros o directorios instalados actualmente.)                                                                                   
Desempaquetando salt-server (de salt-server_4.2.2_i386.deb) ...                                                                                                        
Configurando salt-server (4.2.2) ...                                                                                                                                   
update-rc.d: warning: /etc/init.d/salt-server missing LSB information                                                                                                  
update-rc.d: see
 System start/stop links for /etc/init.d/salt-server already exist.
Starting SaltServer: sltsrv.
Procesando disparadores para ureadahead ...
Procesando disparadores para man-db ...
$ sudo dpkg -i salt-ooo-addons_4.2.3_i386.deb
Seleccionando paquete salt-ooo-addons previamente no seleccionado
(Leyendo la base de datos ... 431512 ficheros o directorios instalados actualmente.)
Desempaquetando salt-ooo-addons (de salt-ooo-addons_4.2.3_i386.deb) ...
dpkg: problemas de dependencias impiden la configuración de salt-ooo-addons:
 salt-ooo-addons depende de openoffice.org-writer; sin embargo:
  El paquete `openoffice.org-writer' no está instalado.
dpkg: error al procesar salt-ooo-addons (--install):
 problemas de dependencias - se deja sin configurar
Se encontraron errores al procesar:
 salt-ooo-addons
Como podéis ver tenemos problemas para instalar este paquete. De modo que lo llevamos a una carpeta aparte para poder trabajar con su contenido:
$ mkdir modificados
$ cd modificados
$ mv ../salt-ooo-addons_4.2.3_i386.deb .
$ ar x salt-ooo-addons_4.2.3_i386.deb
$ ll
total 112
-rw-r--r-- 1 ruben ruben 1359 may 8 02:49 control.tar.gz
-rw-r--r-- 1 ruben ruben 50911 may 8 02:49 data.tar.gz
-rw-r--r-- 1 ruben ruben 4 may 8 02:49 debian-binary
-rw-rw-r-- 1 ruben ruben 52464 mar 9 10:25 salt-ooo-addons_4.2.3_i386.deb
$ tar xvzf control.tar.gz
./
./control
./prerm
./md5sums
./postinst
$ ll
total 128
-rw-r--r-- 1 ruben ruben 753 mar 9 10:25 control
-rw-r--r-- 1 ruben ruben 1359 may 8 02:49 control.tar.gz
-rw-r--r-- 1 ruben ruben 50911 may 8 02:49 data.tar.gz
-rw-r--r-- 1 ruben ruben 4 may 8 02:49 debian-binary
-rw-r--r-- 1 ruben ruben 293 mar 9 10:25 md5sums
-rwxr-xr-x 1 ruben ruben 1136 mar 9 10:25 postinst*
-rwxr-xr-x 1 ruben ruben 1009 mar 9 10:25 prerm*
-rw-rw-r-- 1 ruben ruben 52464 mar 9 10:25 salt-ooo-addons_4.2.3_i386.deb

Vamos a editar el fichero control que incluye que las dependencias necesarias para poder instalar este paquete (el error que nos daba más arriba es que no teníamos instalado el paquete openoffice-writer), de modo que cambiamos la línea Depends:
Depends: libreoffice-writer, salt-server
Editamos también los ficheros prerm y postinst, estos ficheros utilizan la utilidad unopkg pero la ruta a la que intentan acceder es de openoffice y no de libreoffice, así que hacemos los siguientes cambios:

En el fichero prerm:
case "$1" in
    remove|upgrade|deconfigure)
        /usr/lib/openoffice/program/unopkg remove -v --shared salt.zip
        /usr/lib/openoffice/program/unopkg remove -v --shared saltutil.zip
Lo cambiamos por:
case "$1" in
    remove|upgrade|deconfigure)
        /usr/lib/libreoffice/program/unopkg remove -v --shared salt.zip
        /usr/lib/libreoffice/program/unopkg remove -v --shared saltutil.zip
En el fichero postinst:
case "$1" in
    configure)
        /usr/lib/openoffice/program/unopkg add -v --shared /usr/share/salt-ooo-addons/salt.zip
        /usr/lib/openoffice/program/unopkg add -v --shared /usr/share/salt-ooo-addons/saltutil.zip
    ;;
Lo cambiamos por:
case "$1" in
    configure)
        /usr/lib/libreoffice/program/unopkg add -v --shared /usr/share/salt-ooo-addons/salt.zip
        /usr/lib/libreoffice/program/unopkg add -v --shared /usr/share/salt-ooo-addons/saltutil.zip
    ;;
 Hemos terminado con la parte referente a control.tar.gz así que "reconstruimos" esta parte:
$ tar cvzf control.tar.gz control prerm md5sums postinst
control
prerm
md5sums
postinst

$ rm control prerm md5sums postinst
$ ar r salt-ooo-addons_4.2.3_i386.deb control.tar.gz
Continuemos con data.tar.gz:
$ tar xvzf data.tar.gz
./
./usr/
./usr/share/
./usr/share/doc/
./usr/share/doc/salt-ooo-addons/
./usr/share/doc/salt-ooo-addons/copyright
./usr/share/doc/salt-ooo-addons/changelog.gz
./usr/share/salt-ooo-addons/
./usr/share/salt-ooo-addons/salt.zip
./usr/share/salt-ooo-addons/saltutil.zip
$ cd usr/share/salt-ooo-addons/
$ ll
total 56
-rw-r--r-- 1 ruben ruben 14415 mar  9 10:25 saltutil.zip
-rw-r--r-- 1 ruben ruben 38815 mar  9 10:25 salt.zip
$ unzip salt.zip
Archive:  salt.zip
  inflating: addon.xcu              
  inflating: ferram_ajuda_16.bmp    
  inflating: ferram_ajuda_26.bmp    
  inflating: ferram_config_16.bmp   
  inflating: ferram_config_26.bmp   
  inflating: ferram_corregir_16.bmp 
  inflating: ferram_corregir_26.bmp 
  inflating: ferram_revisar_16.bmp  
  inflating: ferram_revisar_26.bmp  
  inflating: ferram_stop_16.bmp     
  inflating: ferram_stop_26.bmp     
  inflating: ferram_traduir_16.bmp  
  inflating: ferram_traduir_26.bmp  
  inflating: ferram_traduir_i_16.bmp 
  inflating: ferram_traduir_i_26.bmp 
  inflating: sltooo.py              
Editamos addon.xcu:
$ nano addon.xcu
Cambiamos oor:node por:
oor:component-data
 Además gracias la comentario de Paco de un artículo anterior vamos a cambiar la codificación, de este modo solucionaremos el error: "Cannot convert to UTF-8".
$ iconv -f iso-8859-15 -t utf-8 addon.xcu > addon.xcu.utf8
$ mv addon.xcu.utf8 addon.xcu
$ iconv -f iso-8859-15 -t utf-8 sltooo.py > sltooo.py.utf8
$ mv sltooo.py.utf8 sltooo.py
$ zip -r salt.zip addon.xcu sltooo.py
$ rm addon.xcu ferram_* sltooo.py
Tenemos que repetir el mismo proceso para saltutil.zip y hacer exactamente los mismos cambios, la única diferencia es que el fichero sltooo.py en este caso es sltuooo.py

Tras estos cambios reconstruimos el paquete debian con todos los cambios:
$ cd ../../..
$ rm data.tar.gz
$ tar cvzf data.tar.gz usr/
usr/
usr/share/
usr/share/doc/
usr/share/doc/salt-ooo-addons/
usr/share/doc/salt-ooo-addons/copyright
usr/share/doc/salt-ooo-addons/changelog.gz
usr/share/salt-ooo-addons/
usr/share/salt-ooo-addons/salt.zip
usr/share/salt-ooo-addons/saltutil.zip
$ ll
total 116
-rw-r--r-- 1 ruben ruben  1378 may  8 02:57 control.tar.gz
-rw-rw-r-- 1 ruben ruben 50924 may  8 03:37 data.tar.gz
-rw-r--r-- 1 ruben ruben     4 may  8 02:49 debian-binary
-rw-rw-r-- 1 ruben ruben 52482 may  8 03:01 salt-ooo-addons_4.2.3_i386.deb
drwxr-xr-x 3 ruben ruben  4096 mar  9 10:25 usr/
Ojo3: Mucho cuidado con el siguiente comando, sino estás en el sitio y estás ejecutando estos comandos como root puedes corroper tu sistema:
$ rm -rf usr/
$ ar r salt-ooo-addons_4.2.3_i386.deb data.tar.gz
Terminamos la instalación:
$ sudo dpkg -i salt-ooo-addons_4.2.3_i386.deb
[sudo] password for ruben:
(Leyendo la base de datos ... 431518 ficheros o directorios instalados actualmente.)
Preparando para reemplazar salt-ooo-addons 4.2.3 (usando salt-ooo-addons_4.2.3_i386.deb) ...
Desempaquetando el reemplazo de salt-ooo-addons ...
Configurando salt-ooo-addons (4.2.3) ...
Synchronizing repository for shared extensions

Synchronizing repository for bundled extensions
 
  Enabling: Script provider for Python
   Enabling: components.rdb

unopkg done.
Synchronizing repository for shared extensions

 Synchronizing repository for bundled extensions

  Enabling: salt.zip
   Enabling: addon.xcu

unopkg done.

$ sudo dpkg -i salt-help_4.2.2_all.deb
[sudo] password for ruben:
Seleccionando paquete salt-help previamente no seleccionado
(Leyendo la base de datos ... 431518 ficheros o directorios instalados actualmente.)
Desempaquetando salt-help (de salt-help_4.2.2_all.deb) ...
Configurando salt-help (4.2.2) ...

$ sudo dpkg -i salt_4.2.2_all.deb
Seleccionando paquete salt previamente no seleccionado
(Leyendo la base de datos ... 433239 ficheros o directorios instalados actualmente.)
Desempaquetando salt (de salt_4.2.2_all.deb) ...
Configurando salt (4.2.2) ...
 

Accedemos a libreoffice y comprobamos el administrador de extensiones.


Como podemos comprobar no aparecen las extensiones, así que el modo shared no funciona muy fino, no hay problema las añadimos, pulsamos sobre Añadir y vamos al directorio: /usr/share/salt-ooo-addons:


Repetimos el proceso para salt.zip primero y después para saltultil.zip y veremos que ya nos aparecen en el administrador de extensiones:


Cerramos libreoffice y al volverlo a abrir vemos que disponemos de la funcionalidad completa:



Otros problemas:

1. La eliminación del paquete salt-ooo-addons:

Hay problemas al intentar desinstalar este paquete, nos aparece el siguiente error:
ERROR: Error while adding: vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE/uno_packages/ludpt97i.tmp_/salt.zip
       Cause: (com.sun.star.lang.IllegalArgumentException) { { Message = "Cannot detect media-type: file:///var/spool/libreoffice/uno_packages/cache/uno_packages/ludpt97i.tmp_/salt.zip", Context = (com.sun.star.uno.XInterface) @9db7080 }, ArgumentPosition = (short) -1 }

unopkg failed.
No he conseguido solucionarlo de una forma "elegante".
Lo que he hecho ha sido volver a editar el fichero prerm del control.tar.gz para comentar las líneas que borran las extensiones (así es como lo tenéis para descargar en este artículo):
$ nano prerm
case "$1" in
    remove|upgrade|deconfigure)
#        /usr/lib/libreoffice/program/unopkg remove -v --shared salt.zip
#        /usr/lib/libreoffice/program/unopkg remove -v --shared saltutil.zip
Y los borramos manualmente:
# ll /var/spool/libreoffice/uno_packages/cache/uno_packages/ -R
/var/spool/libreoffice/uno_packages/cache/uno_packages/:
total 8
-rw------- 1 root root    0 may  9 14:25 ludr1mw8.tmp
drwxr-xr-x 3 root root 4096 may  9 14:25 ludr1mw8.tmp_/
-rw------- 1 root root    0 may  9 14:25 ludr1pp4.tmp
drwxr-xr-x 3 root root 4096 may  9 14:25 ludr1pp4.tmp_/

/var/spool/libreoffice/uno_packages/cache/uno_packages/ludr1mw8.tmp_:
total 8
drwxr-xr-x 2 root root 4096 may  9 14:25 salt.zip/
-rw-r--r-- 1 root root   18 may  9 14:25 salt.zipproperties

/var/spool/libreoffice/uno_packages/cache/uno_packages/ludr1pp4.tmp_:
total 8
drwxr-xr-x 2 root root 4096 may  9 14:25 saltutil.zip/
-rw-r--r-- 1 root root   18 may  9 14:25 saltutil.zipproperties
Cuidado porque podrías tener algo más en ese directorio, sino teneís nada más:
# rm -rf /var/spool/libreoffice/uno_packages/cache/uno_packages/*
Sino borrar el fichero .tmp y su directorio asociado que os aparezca a cada uno.

Ya había dicho que no era muy elegante ;-)

2. Solo funciona en sistemas de 32 bits, olvidaros de sistemas de 64 bits sin los fuentes. En sistemas de 64 bits da el siguiente error:
$ sudo dpkg -i salt-common_4.2.2_all.deb
[sudo] password for ruben:
Seleccionando paquete salt-common previamente no seleccionado
(Leyendo la base de datos ... 184992 ficheros o directorios instalados actualmente.)
Desempaquetando salt-common (de salt-common_4.2.2_all.deb) ...
Configurando salt-common (4.2.2) ...
ruben@cpv1174:~/salt/nou_salt_20120312$ sudo dpkg -i salt-data_4.2.0+201200312.1_all.deb
Seleccionando paquete salt-data previamente no seleccionado
(Leyendo la base de datos ... 184999 ficheros o directorios instalados actualmente.)
Desempaquetando salt-data (de salt-data_4.2.0+201200312.1_all.deb) ...
Configurando salt-data (4.2.0+201200312.1) ...
ruben@cpv1174:~/salt/nou_salt_20120312$ sudo dpkg -i salt-server_4.2.2_i386.deb
Seleccionando paquete salt-server:i386 previamente no seleccionado
(Leyendo la base de datos ... 185053 ficheros o directorios instalados actualmente.)
Desempaquetando salt-server:i386 (de salt-server_4.2.2_i386.deb) ...
dpkg: problemas de dependencias impiden la configuración de salt-server:i386:
 salt-server:i386 depende de python (>= 2.5).
 salt-server:i386 depende de salt-common.
 salt-server:i386 depende de salt-data.
dpkg: error al procesar salt-server:i386 (--install):
 problemas de dependencias - se deja sin configurar
Procesando disparadores para ureadahead ...
ureadahead will be reprofiled on next reboot
Procesando disparadores para man-db ...
Se encontraron errores al procesar:
 salt-server:i386
 Eliminando del fichero control las dependencias para probar:
$ sudo dpkg -i salt-server_4.2.2_i386.deb
(Leyendo la base de datos ... 185086 ficheros o directorios instalados actualmente.)
Preparando para reemplazar salt-server:i386 4.2.2 (usando salt-server_4.2.2_i386.deb) ...
Desempaquetando el reemplazo de salt-server:i386 ...
Configurando salt-server:i386 (4.2.2) ...
update-rc.d: warning: /etc/init.d/salt-server missing LSB information
update-rc.d: see
 Adding system startup for /etc/init.d/salt-server ...
   /etc/rc1.d/K00salt-server -> ../init.d/salt-server
   /etc/rc6.d/K00salt-server -> ../init.d/salt-server
   /etc/rc1.d/S20salt-server -> ../init.d/salt-server
   /etc/rc2.d/S20salt-server -> ../init.d/salt-server
   /etc/rc3.d/S20salt-server -> ../init.d/salt-server
   /etc/rc4.d/S20salt-server -> ../init.d/salt-server
   /etc/rc5.d/S20salt-server -> ../init.d/salt-server
Starting SaltServer: sltsrv.
Traceback (most recent call last):
  File "/usr/bin/sltsrv", line 40, in
    import sltgl
  File "/usr/share/salt-server/sltgl.py", line 241, in
    import sltgen
ImportError: /usr/lib/sltgen.so: wrong ELF class: ELFCLASS32
Procesando disparadores para ureadahead ...
Procesando disparadores para man-db ...

Vamos que ocurre lo normal, quizás se pueda hacer algo utilizando la librería ia32-libs, pero sin los fuentes es poco probable que se pueda hacer algo con librerías que ya han sido compiladas ;-)
Algo más de información sobre le soporte multiarch en debian: http://wiki.debian.org/Multiarch/Implementation

3. Problemas que puedes tener si te pones a hacer tus propias pruebas:
No consigues abrir libreoffice. Después de varias pruebas se queda deteriorado y no puedes ni abrirlo, con mensajes como (ejecutando desde terminal para poder verlos):
$ soffice
terminate called after throwing an instance of 'com::sun::star::uno::RuntimeException'
Borramos las configuración específica  del usuario:
$ rm -rf ~/.config/libreoffice
Si aún así no te funciona podemos purgar la instalación de libreoffice y volver a instalar:
$ aptitude purge libreoffice-base-core libreoffice-core
$ aptitude install libreoffice
4. Si el paquete salt-ooo-addons se queda en un estado inestable y no consigues elimiarlo porque dice que necesita una reinstalación:
# dpkg -r --force-remove-reinstreq salt-ooo-addonsdpkg: aviso: sobreseyendo el problema porque está activa la opción --force:

 El paquete está en un estado muy malo e inconsistente - debe reinstalarlo
 antes de intentar desinstalarlo.
(Leyendo la base de datos ... 431516 ficheros o directorios instalados actualmente.)
Desinstalando salt-ooo-addons ...
5. Comandos útiles.
Para las pruebas con las extensiones no vale la pena estar instalando y desinstalando paquetes directamente utilizamos comandos:
# /usr/lib/libreoffice/program/unopkg add -v --shared /usr/share/salt-ooo-addons/salt.zip
# /usr/lib/libreoffice/program/unopkg remove -v --shared /usr/share/salt-ooo-addons/salt.zip
 # /usr/lib/libreoffice/program/unopkg list --shared
All deployed shared extensions:

Identifier: org.openoffice.legacy.salt.zip
  URL: vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE/uno_packages/lucfzww3.tmp_/salt.zip
  is registered: yes
  Media-Type: application/vnd.sun.star.legacy-package-bundle
  Description:
  bundled Packages: {
      URL: vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE/uno_packages/lucfzww3.tmp_/salt.zip/addon.xcu
      is registered: yes
      Media-Type: application/vnd.sun.star.configuration-data
      Description:

      URL: vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE/uno_packages/lucfzww3.tmp_/salt.zip/sltooo.py
      is registered: yes
      Media-Type: application/vnd.sun.star.uno-component;type=Python
      Description:

  }

Identifier: org.openoffice.legacy.saltutil.zip
  URL: vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE/uno_packages/lucfzzp5.tmp_/saltutil.zip
  is registered: yes
  Media-Type: application/vnd.sun.star.legacy-package-bundle
  Description:
  bundled Packages: {
      URL: vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE/uno_packages/lucfzzp5.tmp_/saltutil.zip/sltuooo.py
      is registered: yes
      Media-Type: application/vnd.sun.star.uno-component;type=Python
      Description:

      URL: vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE/uno_packages/lucfzzp5.tmp_/saltutil.zip/addon.xcu
      is registered: yes
      Media-Type: application/vnd.sun.star.configuration-data
      Description:

  }
Y para rematar si queremos ver una traza:
# strace /usr/lib/libreoffice/program/unopkg remove -v --shared -f saltutil.zip


readlink("/usr/lib/libreoffice/ure-link", "../ure", 4095) = 6
lstat64("/usr/lib/ure", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/usr", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/usr/lib", {st_mode=S_IFDIR|0755, st_size=122880, ...}) = 0
lstat64("/usr/lib/ure", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/usr/lib/ure/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/usr", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/usr/lib", {st_mode=S_IFDIR|0755, st_size=122880, ...}) = 0
lstat64("/usr/lib/ure", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/usr/lib/ure/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/usr/lib/ure/lib/libuno_cppu.so.3", {st_mode=S_IFREG|0644, st_size=227236, ...}) = 0
gettimeofday({1336505315, 837259}, NULL) = 0
write(2, "\nERROR: Error while adding: vnd."..., 115
ERROR: Error while adding: vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE/uno_packages/lucfzzp5.tmp_/saltutil.zip
) = 115
write(2, "       Cause: (com.sun.star.lang"..., 275       Cause: (com.sun.star.lang.IllegalArgumentException) { { Message = "Cannot detect media-type: file:///var/spool/libreoffice/uno_packages/cache/uno_packages/lucfzzp5.tmp_/saltutil.zip", Context = (com.sun.star.uno.XInterface) @9ff38b8 }, ArgumentPosition = (short) -1 }
) = 275
close(10)                               = 0
munmap(0xb11b6000, 192512)              = 0
write(2, "\nunopkg failed.\n", 16
unopkg failed.
)      = 16


¿Por cierto alguien por ahí con lliurex y que me diga si le funciona? ;-)



Actualización (16/05/2012): He estado mirando el estado de salt en lliurex y tienen solucionado el problema del borrado como podemos ver aquí.
De modo que he cambiado los scripts postinst y prerm para que utilicen su solución para el borrado que es lo mismo que hacíamos manualmente en la explicación de este artículo pero de forma automática.
Añadimos esta sección de código a los scripts:

postinst:
clean_old_salts()
{
    FILES_TO_FURGATE="salt.zip saltutil.zip"
    DIRECTORY_IS="/var/spool/libreoffice/uno_packages/cache/uno_packages/"
   
    # Workaround to solve some upgrade problems
    # test if directory exists and contains some files.
   
    if [ -d "$DIRECTORY_IS"    ] ; then

        # If the files and directory exists:
        for f in $FILES_TO_FURGATE ; do
                AUX=$(find $DIRECTORY_IS -xtype d -name "$f")
            if [ -n "$AUX" ] ; then
                    DIRTY_FILE="$(dirname "$AUX" | sed "s%_$%%")"
                    rm -rf "$DIRTY_FILE" "$(dirname "$AUX"/)"
            fi
                echo "$f is cleaning"
        done
    fi
}


case "$1" in
    configure)
    clean_old_salts
    /usr/lib/libreoffice/program/unopkg add -v --shared /usr/share/salt-ooo-addons/salt.zip
    /usr/lib/libreoffice/program/unopkg add -v --shared /usr/share/salt-ooo-addons/saltutil.zip
    ;;
    abort-remove)
    clean_old_salts
    ;;
prerm:
clean_old_salts()
{
    FILES_TO_FURGATE="salt.zip saltutil.zip"
    DIRECTORY_IS="/var/spool/libreoffice/uno_packages/cache/uno_packages/"
   
    # Workaround to solve some upgrade problems
    # test if directory exists and contains some files.
   
    if [ -d "$DIRECTORY_IS"    ] ; then

        # If the files and directory exists:
        for f in $FILES_TO_FURGATE ; do
                AUX=$(find $DIRECTORY_IS -xtype d -name "$f")
            if [ -n "$AUX" ] ; then
                    DIRTY_FILE="$(dirname "$AUX" | sed "s%_$%%")"
                    rm -rf "$DIRTY_FILE" "$(dirname "$AUX"/)"
            fi
                echo "$f is cleaning"
        done
    fi
}

case "$1" in
    remove|upgrade|deconfigure)
    clean_old_salts
#    /usr/lib/libreoffice/program/unopkg remove -v --shared salt.zip
#    /usr/lib/libreoffice/program/unopkg remove -v --shared saltutil.zip
    ;;

Por lo que he visto de lliurex en la próxima versión funcionará con lliurex como podemos ver en el fichero control cambia la dependencia de openoffice a libreoffice:

Depends: salt-server, libreoffice-common

Al desacargar el fichero salt-ooo-addons.deb desde este enlace o el del inicio del artículo ya tenéis actualizados estos cambios.


martes, 8 de mayo de 2012

dfc: Display File System Space

La utilidad dfc es una alternativa al comando estándar df.
Ambos comandos muestran el espacio de disco disponible de un sistema pero dfc lo hace más amigable:

Salida estándar de df:



De una forma un poco más amigable:



El comando dfc lo muestra de este modo visualmente más informativo:



Incluye colores que informan de la cantidad de espacio libre, y una barra mostrando gráficamente la ocupación de la partición. Además incluye por defecto la opción human-readable del comando df.

Para instalar dfc en ubuntu (también en debian):
# wget http://ftp.es.debian.org/debian/pool/main/d/dfc/dfc_2.5.0-1_i386.deb
# dpkg -i dfc_2.5.0-1_i386.deb

Para versiones de 64 bits podéis encontrar el paquete necesario en los repositorios de debian: http://packages.debian.org/wheezy/dfc

Más información:
http://www.linux-magazine.com/Online/Blogs/Productivity-Sauce/Display-File-System-Space-Usage-with-dfc