4 votes

Puppet supprime des paquets lors de l'installation de "lsscsi".

Nous voulions installer le paquet "lsscsi" sur tous nos serveurs Linux et construire un manifeste pour celui-ci :

# pack_lsscsi.pp

class common::pack_lsscsi  {

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

Le paquet "lsscsi" n'a que "libc6" comme dépendance - donc pas de problème du tout. Tout s'est bien passé sur nos serveurs Red Hat et CentOS, mais certains systèmes Debian sont devenus fous. Puppet a supprimé entre 10 et 180 paquets, comme sur celui-ci :

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

Une idée de comment cela pourrait se produire ?

Thomas

1 votes

Quelle version de Debian utilisez-vous ? Il s'agit peut-être d'une ancienne version (comme Lenny) qui doit être mise à jour vers une version actuelle.

1 votes

Ou peut-être que les sources apt ou le pinning ont été configurés de manière incorrecte.

0 votes

Nous utilisons Debian Squeeze. /etc/apt/sources.list identique sur tous les serveurs, pointant vers notre propre miroir Debian. Cela s'est produit sur environ 1/10 de tous nos serveurs Debian. C'est ce qui m'intrigue.

0voto

asciiphil Points 2946

Cela se produit parce que aptitude aime supprimer les paquets qui lui semblent inutilisés. aptitude suit chaque programme qu'il installe et le classe comme "manuel" ou "automatique". Les paquets "manuels" sont ceux qui demandent explicitement à être installés. Les paquets "automatiques" sont ceux que vous n'avez pas spécifiquement demandés mais qui ont été installés en tant que dépendances. Par exemple, aptitude install irssi installera irssi, mais aussi une foule de bibliothèques dont libncurses, lbperl, lbtinfo, libval, et d'autres. Si à un moment donné vous supprimez irssi et que c'était le seul paquet installé qui avait besoin de certaines de ces bibliothèques, aptitude supprimera également les bibliothèques inutiles installées automatiquement.

Malheureusement, c'était autrefois le cas aptitude y apt-get n'ont pas bien joué ensemble et ont été installés par apt-get serait souvent considéré par aptitude comme étant installés automatiquement et donc susceptibles d'être supprimés. Les versions plus récentes de apt-get fonctionnent beaucoup mieux de concert avec aptitude mais ce problème s'est manifesté à une époque où ces problèmes existaient.

Si, pour une raison ou une autre, ce comportement persiste, vous avez deux possibilités. La plus simple est d'utiliser la fonction apt de Puppet package type. Cela éviterait toute confusion aptitude a sur les paquets qu'il doit supprimer.

Si vous devez continuer à utiliser le aptitude vous devrez réparer aptitude sur ce qui est utilisé. Exécuter aptitude dist-upgrade et regarder chaque paquet qu'il veut enlever. Pour chacun de ceux que vous voulez garder, exécutez aptitude unmarkauto <package-name> (par exemple aptitude unmarkauto apt-file curl ). Ensuite, assurez-vous que vous utilisez uniquement aptitude pour les installations de paquets à partir de ce moment-là.

D'après mon expérience, les seules choses qui aptitude fait mieux que les versions actuelles de apt-get sont interactifs : l'interface curses et la possibilité de modifier l'ensemble des installations/suppressions de paquets au milieu d'une session en ligne de commande. Puppet n'a besoin d'aucune de ces fonctionnalités interactives, et vous devriez donc pouvoir vous contenter d'utiliser la commande apt fournisseur.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X