jueves, 18 de julio de 2013

AIX: bos.rte.install BROKEN [solved]

En ocasiones nos encontramos con que, tras una actualización de software aparentemente correcta, algún fileset se queda en estado BROKEN. En mi caso se trataba del paquete bos.rte.install.

Versión de AIX 6.1 TL7 (anteriormente TL3)

Para corregir este tipo de problemas he recopilado información de distintos lugares, entre ellos PMRs de IBM en los que el soporte de nivel 2 da opciones complejas que en mi caso fueron las que nos llevaron a corregir el problema.

- Problema:

# lppchk -v
lppchk:  The following filesets need to be installed or corrected to bring
         the system to a consistent state:

  bos.rte.install 6.1.7.17                (usr: APPLIED, root: BROKEN)

 

- Soluciones (conjunto de procedimientos que se deberían probar en orden)

1) Descargar el paquete de IBM FIX CENTRAL u obtenerlo de algún repositorio del administrador. Sobreescribir:
# installp -acgN -d . bos.rte.install.6.1.7.1


2) Reinstalar el fileset completo, es decir, la versión base más el update correspondiente. Forzar la instalación (-F):
# installp -acFNXYd /SOFTWARE/inst bos.rte.install


NOTA: conseguir el paquete base en ocasiones es muy difícil.

3) Desinstalar el fileset completo ("Remove Software Products": -u), si éste lo permite (los bos.rte.* no lo permiten), y reinstalarlo.
# installp -u bos.net.tcp.server


Si nada de esto funciona, es posible que el problema sea que la Trusted Signature Database (TSD) esté corrupta.

“The TSD is a database of security attributes of the trusted files that are present on the system. The TSD is in the /etc/security/tsd/tsd.dat file. This database gets populated at installation time. It stores the security attributes of the trusted files that are present on the system.”
[Read more:   http://pic.dhe.ibm.com/infocenter/aix/v6r1/index.jsp?topic=%2Fcom.ibm.aix.security%2Fdoc%2Fsecurity%2Fbos_tsd.htm]


Esto se puede ver:

a) El chequeo de la TSD falla:
# trustchk -q ALL
Error while processing tsd.


b) Si en un debug de la instalación del paquete encontramos algo parecido a lo siguiente:
# instsecattr -a -f bos.rte.install.sec  
  Error while processing stanzas  


Es decir, el comando depende de la TSD y ha fallado al leer sus stanzas.


Cuando hay corrupción de la TSD no hay forma soportada de corregir el problema salvo restaurar la máquina. Pero se pueden probar dos procedimientos no oficiales:

1) Eliminar el paquete de la ODM y después rehacer el upgrade.
NOTA: en este ejemplo el bos.rte.install es versión 6.1.7.17 por ello mod=7 y fix=17. Sustituir por los valores correctos.
    
Primero hacemos un backup  
# mkdir /tmp/backup_odm  
# odmget -q "lpp_name=bos.rte.install AND mod=7 AND fix=17" product >  /tmp/backup_odm/file1  
# odmget -q "lpp_id=13 AND mod=7 AND fix=17" history > /tmp/backup_odm/file2  
# ODMDIR=/usr/lib/objrepos odmget -q "lpp_name=bos.rte.install AND mod=7 AND fix=17"  product > tmp/backup_odm/file3  
# ODMDIR=/usr/lib/objrepos odmget -q "lpp_id=13 AND mod=7 AND fix=17" history > /tmp/backup_odm/file4  

  
Eliminar el fileset de la ODM  
# odmdelete -q "lpp_name=bos.rte.install AND mod=7 AND fix=17" -o product  
# odmdelete -q "lpp_id=13 AND mod=7 AND fix=17" -o history  
# ODMDIR=/usr/lib/objrepos odmdelete -q "lpp_name=bos.rte.install AND mod=7 AND fix=17" -o product  
# ODMDIR=/usr/lib/objrepos odmdelete -q "lpp_id=13 AND mod=7 AND fix=17" -o history
 

Ejecutar lppchk -v que debería salir limpio.  

Primero probar a instalar sólo el fileset: bos.rte.install
#smitty installp
  
Si no funciona, intentar 
#smitty update_all

2) Si ésto no funciona, intentarlo trayendo un tsd.dat de otra máquina con igual versión de bos.rte.security

Primero, llevar a cabo el procedimiento anterior para limpiar la ODM del paquete en estado BROKEN.

Después, hacer backup del tsd.dat
#mv /etc/security/tsd/tsd.dat /etc/security/tsd/tsd.dat.old  


Copiar el tsd.dat de otra máquina con igual versión de bos.rte.security
#scp x.x.x.x:/etc/security/tsd/tsd.dat .

Instalar de nuevo el bos.rte.install