Puppet remove pacotes durante a instalação de “lsscsi”

4

Queríamos instalar o pacote "lsscsi" em todos os nossos servidores Linux e criar um manifesto para ele:

# pack_lsscsi.pp

class common::pack_lsscsi  {

        case $operatingsystem {
                RedHat, CentOS, Debian: {
                        package { 'lsscsi':
                                ensure  => 'installed',
                        }
                }
        }
}

O pacote "lsscsi" tem apenas "libc6" como uma dependência - portanto, não é nada complicado. Tudo correu bem em nossos servidores Red Hat e CentOS, mas alguns sistemas Debian ficaram loucos. Puppet removido entre 10 e 180 pacotes, como este aqui:

Sep 17 10:46:06 cacti01 puppet-agent[28008]
(/Stage[main]/Common::Pack_lsscsi/Package[lsscsi]/ensure) change from purged
to present failed: Execution of '/usr/bin/aptitude -y -o
DPkg::Options::=--force-confold install lsscsi' returned 255: Reading package
lists...#012Building dependency tree...#012Reading state information...#012Reading
extended state information...#012Initializing package states...#012Writing extended
state information...#012The following NEW packages will be installed:#012  lsscsi
#012The following packages will be REMOVED:#012  alien{u} apt-file{u} ash{u} at{u}
autopoint{u} biff{u} bin86{u} bison{u} #012  bwidget{u} checkpolicy{u} cramfsprogs{u}
curl{u} dbus{u} debhelper{u} #012  deborphan{u} dhcp-client{u} doc-linux-de{u}
dosfstools{u} dselect{u} #012  ethtool{u} fdutils{u} finger{u} flex{u} flip{u}
gcc-3.4-base{u} gdb{u} #012  gdbserver{u} gettext{u} gnu-efi{u} gnupg-doc{u}
hicolor-icon-theme{u} #012  html2text{u} hwdata{u} ifenslave{u} ifenslave-2.6{u}
intltool-debian{u} #012  iptraf{u} joe{u} kernel-package{u} language-env{u}
lgtoclnt{u} #012  libappconfig-perl{u} libapt-pkg-perl{u} libatk1.0-0{u}
libatk1.0-data{u} #012  libaudit0{u} libavahi-client3{u} libavahi-common-data{u}
#012  libavahi-common3{u} libbeecrypt6{u} libbind9-50{u} #012  libcompress-raw-zlib-
perl{u} libcompress-zlib-perl{u} #012  libconfig-file-perl{u} libcroco3{u} libcrypt-
ssleay-perl{u} libcups2{u} #012  libcurl3{u} libdb1-compat{u} libdb4.2{u} libdbus-1-
3{u} #012  libdigest-hmac-perl{u} libdigest-sha1-perl{u} libdirectfb-1.0-0{u} #012
libdns58{u} libdrm-intel1{u} libdrm-radeon1{u} libdrm2{u} libelf1{u} #012  libfam0{u}
libfam0c102{u} libfile-remove-perl{u} libfont-afm-perl{u} #012  libfs6{u} libgl1-mesa-
dri{u} libgl1-mesa-glx{u} libglade2-0{u} #012  libglu1-mesa{u} libgtk2.0-0{u}
libgtk2.0-bin{u} libgtk2.0-common{u} #012  libhtml-format-perl{u} libhtml-parser-
perl{u} libhtml-tagset-perl{u} #012  libhtml-tree-perl{u} libice6{u} libident{u}
libio-compress-base-perl{u} #012  libio-compress-zlib-perl{u} libio-stringy-perl{u}
Sep 17 10:46:09 cacti01 puppet-agent[28008]: Finished catalog run in 54.68 seconds

Alguma ideia de como isso pode acontecer?

Thomas

    
por user190307 17.09.2013 / 15:53

1 resposta

0

Isso está acontecendo porque aptitude gosta de remover pacotes que acha que não estão sendo usados. aptitude acompanha cada programa que instala e classifica como "manual" ou "automático". Pacotes "manuais" são aqueles que solicitam explicitamente a instalação. Pacotes "automáticos" são aqueles que você não solicitou especificamente, mas que foram instalados como dependências. Por exemplo, aptitude install irssi instalará o irssi, mas também um host de bibliotecas, incluindo libncurses, lbperl, lbtinfo, libval e outras. Se em algum momento você remover o irssi e for o único pacote instalado que precisou de algumas dessas bibliotecas, aptitude também removerá as bibliotecas desnecessárias instaladas automaticamente.

Infelizmente, costumava ser o caso que aptitude e apt-get não funcionavam bem juntos e empacotados instalados por apt-get seriam frequentemente considerados por aptitude como instalados automaticamente e, portanto, candidatos a eliminação. As versões mais recentes de apt-get funcionam muito melhor em conjunto com aptitude , mas esse problema se manifestou em um momento em que esses problemas existiam.

Se, por algum motivo, você ainda estiver tendo esse comportamento agora, há algumas opções. O mais simples seria simplesmente usar o provedor apt do tipo package do Puppet. Isso evitaria completamente qualquer confusão aptitude sobre quais pacotes devem ser removidos.

Se você precisar continuar usando o provedor aptitude , precisará corrigir as ideias de aptitude sobre o que está sendo usado. Execute aptitude dist-upgrade e observe todos os pacotes que deseja remover. Para cada um que você sabe que deseja manter, execute aptitude unmarkauto <package-name> (por exemplo, aptitude unmarkauto apt-file curl ). Em seguida, certifique-se de usar somente aptitude para instalações de pacotes a partir desse momento.

Na minha experiência, as únicas coisas que aptitude faz melhor do que as versões atuais de apt-get são interativas: a interface curses e a capacidade de modificar o conjunto de instalações / remoções de pacotes no meio de uma sessão de linha de comando. O Puppet não precisa de nenhum dos recursos interativos, então você deve estar bem apenas usando o provedor apt .

    
por 20.12.2015 / 14:38