19 de setembro de 2011

Resetando a contagem de alocação (alloc_count) no NIM

Muitas vezes já me deparei com este "problema" ao usar o NIM: um recurso aloca um lpp_source e por algum motivo não consegue desalocar este lpp_source, deixando o mesmo com alloc_count=1.

root@xcat01 # lsnim -l aix6106_lpp_source
aix6106_lpp_source:
   class       = resources
   type        = lpp_source
   arch        = power
   Rstate      = ready for use
   prev_state  = verification is being performed
   location    = /install/nim/lpp_source/aix6106_lpp_source
   simages     = yes
   alloc_count = 1
   server      = master

Uma vez que isso acontece, e tenta-se fazer alguma operação neste lpp_source, por exemplo adicionar novos pacotes, um erro é retornado dizendo que o recurso já está alocado para outro cliente.

xcat01@root # nim -o update -a packages=rsync-3.0.6-1.aix5.3.ppc.rpm -a source=/opt/media/xcat-dep/6.1 aix6106_lpp_source

0042-001 nim: processing error encountered on "master":
   0042-061 m_update: the "aix6106_lpp_source" resource is currently
        allocated for client use


Enquanto este erro acontecer não será possível, por exemplo, adicionar novos pacotes ao seu lpp_source. Uma alternativa que se pode usar para resolver este problema é tentar achar o recurso que está usando este lpp_source e desalocar o lpp_source deste recurso. Para isso basta fazer:

lsnim -l $CLIENT

onde $CLIENT é o nome do cliente que você suspeita que está alocando o recurso, e ver se ele está alocando o recurso (para analisar todos os seus clientes, sugiro criar um script para recursivamente analisar todos).

Ao verificar qual cliente está alocando o lpp_source pode-se desalocar o recurso da seguinte maneira:

nim -o deallocate -a force=yes $CLIENT

E com isso podemos voltar a fazer operações no lpp_source.

Outra maneira é forçar o reset do alloc_count para zero. Para isso precisamos usar um comando que é pouco conhecido (m_chattr):

#  /usr/lpp/bos.sysmgt/nim/methods/m_chattr -a alloc_count=0 aix6106_lpp_source

E com isso teremos forçado o reset do contador e agora podemos voltar a fazer operações em cima deste recurso.

root@xcat01 # lsnim -l aix6106_lpp_source
aix6106_lpp_source:
   class       = resources
   type        = lpp_source
   arch        = power
   Rstate      = ready for use
   prev_state  = verification is being performed
   location    = /install/nim/lpp_source/aix6106_lpp_source
   simages     = yes
   alloc_count = 0
   server      = master

xcat01@root # nim -o update -a packages=rsync-3.0.6-1.aix5.3.ppc.rpm -a source=/opt/media/xcat->

/install/nim/lpp_source/aix6106_lpp_source/RPMS/ppc/rsync-3.0.6-1.aix5.3.ppc.rpm

O NIM é um recurso muito interessante e útil do ambiente AIX, então espero que esta dica ajude-os a se tornar um pouco mais "expert" nessa ferramenta :)