Segmentation fault con el comando zoneadm

Page last edited hace 2148 días 22 horas
De Solaris-ES
Saltar a: navegación, buscar

Descripción del problema[editar]

Al lanzar el comando zoneadm se produce un segmentation fault. Posiblementa tras instalar o desinstalar algún paquete.

Si hacemos un truss del comando zoneadm se ve que las primeras librerias que carga son las de /usr/local/lib y /usr/sfw/lib:

# truss  zoneadm list
...
stat64("/usr/local/lib/libc.so.1", 0x08047230)  Err#2 ENOENT
stat64("/usr/local/ssl/lib/libc.so.1", 0x08047230) Err#2 ENOENT
stat64("/usr/sfw/lib/libc.so.1", 0x08047230)    Err#2 ENOENT
stat64("/usr/local/lib/libsocket.so.1", 0x08047230) Err#2 ENOENT
stat64("/usr/local/ssl/lib/libsocket.so.1", 0x08047230) Err#2 ENOENT
stat64("/usr/sfw/lib/libsocket.so.1", 0x08047230) Err#2 ENOENT
stat64("/usr/local/lib/libnsl.so.1", 0x08047230) Err#2 ENOENT
stat64("/usr/local/ssl/lib/libnsl.so.1", 0x08047230) Err#2 ENOENT
stat64("/usr/sfw/lib/libnsl.so.1", 0x08047230)  Err#2 ENOENT
stat64("/usr/local/lib/libc.so.1", 0x08047230)  Err#2 ENOENT
stat64("/usr/local/ssl/lib/libc.so.1", 0x08047230) Err#2 ENOENT
stat64("/usr/sfw/lib/libc.so.1", 0x08047230)    Err#2 ENOENT
stat64("/usr/local/lib/libc.so.1", 0x08047230)  Err#2 ENOENT
stat64("/usr/local/ssl/lib/libc.so.1", 0x08047230) Err#2 ENOENT
stat64("/usr/sfw/lib/libc.so.1", 0x08047230)    Err#2 ENOENT
stat64("/usr/local/lib/libxml2.so.2", 0x08047230) Err#2 ENOENT
stat64("/usr/local/ssl/lib/libxml2.so.2", 0x08047230) Err#2 ENOENT
stat64("/usr/sfw/lib/libxml2.so.2", 0x08047230) Err#2 ENOENT
stat64("/usr/local/lib/libc.so.1", 0x08047230)  Err#2 ENOENT
stat64("/usr/local/ssl/lib/libc.so.1", 0x08047230) Err#2 ENOENT
stat64("/usr/sfw/lib/libc.so.1", 0x08047230)    Err#2 ENOENT
stat64("/usr/local/lib/libc.so.1", 0x08047230)  Err#2 ENOENT
stat64("/usr/local/ssl/lib/libc.so.1", 0x08047230) Err#2 ENOENT
stat64("/usr/sfw/lib/libc.so.1", 0x08047230)    Err#2 ENOENT
stat64("/usr/local/lib/libnsl.so.1", 0x08047230) Err#2 ENOENT
stat64("/usr/local/ssl/lib/libnsl.so.1", 0x08047230) Err#2 ENOENT

Con un ldd podemos ver si existe alguna libreria que falte:

root@gsispre02 # ldd /usr/sbin/zoneadm 
       libzonecfg.so.1 =>       /usr/lib/libzonecfg.so.1
       libdoor.so.1 =>  /usr/lib/libdoor.so.1
       libsocket.so.1 =>        /usr/lib/libsocket.so.1
       libgen.so.1 =>   /usr/lib/libgen.so.1
       libpool.so.1 =>  /usr/lib/libpool.so.1
       libbsm.so.1 =>   /usr/lib/libbsm.so.1
       libzfs.so.2 =>   /usr/lib/libzfs.so.2
       libuuid.so.1 =>  /usr/lib/libuuid.so.1
       libbrand.so.1 =>         /usr/lib/libbrand.so.1
       libuutil.so.1 =>         /usr/lib/libuutil.so.1
       libnvpair.so.1 =>        /usr/lib/libnvpair.so.1
       libc.so.1 =>     /usr/lib/libc.so.1
       libnsl.so.1 =>   /usr/lib/libnsl.so.1
       libsysevent.so.1 =>      /usr/lib/libsysevent.so.1
       libsec.so.1 =>   /usr/lib/libsec.so.1
       libscf.so.1 =>   /usr/lib/libscf.so.1
       libproc.so.1 =>  /usr/lib/libproc.so.1
       libxml2.so.2 =>  /usr/lib/libxml2.so.2
       libexacct.so.1 =>        /usr/lib/libexacct.so.1
       libmd.so.1 =>    /usr/lib/libmd.so.1
       libsecdb.so.1 =>         /usr/lib/libsecdb.so.1
       libtsol.so.2 =>  /usr/lib/libtsol.so.2
       libm.so.2 =>     /usr/lib/libm.so.2
       libdevinfo.so.1 =>       /usr/lib/libdevinfo.so.1
       libdevid.so.1 =>         /usr/lib/libdevid.so.1
       libavl.so.1 =>   /usr/lib/libavl.so.1
       libefi.so.1 =>   /usr/lib/libefi.so.1
       libadm.so.1 =>   /usr/lib/libadm.so.1
       libumem.so.1 =>  /usr/lib/libumem.so.1
       libmp.so.2 =>    /usr/lib/libmp.so.2
       librtld_db.so.1 =>       /usr/lib/librtld_db.so.1
       libelf.so.1 =>   /usr/lib/libelf.so.1
       libctf.so.1 =>   /usr/lib/libctf.so.1
       libpthread.so.1 =>       /usr/lib/libpthread.so.1
       libz.so.1 =>     /usr/local/lib/libz.so.1
       libz.so.1 (SUNW_1.1) =>  (version not found)
       libcmd.so.1 =>   /usr/lib/libcmd.so.1
       libgcc_s.so.1 =>         /usr/sfw/lib/libgcc_s.so.1

Se ve que hay una que no encuentra. Mirando en el archivo /var/sadm/install/contents podemos ver que ficheros están instalados en el sistema con ese nombre:

root@gsispre02 # grep libz.so.1 /var/sadm/install/contents | grep " f "
/usr/lib/amd64/libz.so.1 f none 0755 root bin 96712 65522 1170183700 SUNWzlib
/usr/lib/libz.so.1 f none 0755 root bin 66692 13880 1170183700 SUNWzlib
/usr/local/lib/libz.so.1.2.5 f none 0755 bin bin 84168 27371 1273269484 SMCzlib

En el LD_LIBRARY_PATH vemos que la libreria que carga no es la de solaris si no la de SFW:

root@gsispre02 # echo $LD_LIBRARY_PATH
/usr/local/lib:/usr/local/ssl/lib:/usr/sfw/lib:/usr/lib::/usr/openwin/lib

Solución[editar]

Modificar el LD_LIBRARY_PATH para que carge primero las librerias de /usr/lib

# export LD_LIBRARY_PATH=/usr/lib/:/usr/local/lib:/usr/openwin/lib:/usr/local/lib:/usr/openwin/lib

Modificarlo también en el profile para hacer el cambio permanente.

Fuente