Мы хотели установить пакет lsscsi на все наши серверы Linux и создать для него манифест:
# pack_lsscsi.pp
class common::pack_lsscsi {
case $operatingsystem {
RedHat, CentOS, Debian: {
package { 'lsscsi':
ensure => 'installed',
}
}
}
}
Пакет "lsscsi" имеет только "libc6" в качестве зависимости - так что это совсем не проблема. Все шло нормально на наших серверах Red Hat и CentOS, но некоторые системы Debian сходили с ума. Puppet удалил от 10 до 180 пакетов, как в этом:
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
Есть идеи, как это могло случиться?
Томас
Это происходит потому, что aptitude
любит удалять пакеты, которые, по его мнению, не используются. aptitude
отслеживает каждую программу, которую он устанавливает, и классифицирует как «ручную» или «автоматическую». «Ручные» пакеты - это пакеты, которые явно запрашивают установку. «Автоматические» пакеты - это пакеты, которые вы специально не запрашивали, но которые были установлены как зависимости. Например, aptitude install irssi
установит irssi, а также множество библиотек, включая libncurses, lbperl, lbtinfo, libval и другие. Если в какой-то момент вы удалите irssi, и это был единственный установленный пакет, для которого потребовались некоторые из этих библиотек, aptitude
также удалит ненужные автоматически установленные библиотеки.
К сожалению, раньше было так, что aptitude
и apt-get
не работали вместе и были установлены apt-get
часто рассматривается aptitude
как автоматически устанавливаемые и, следовательно, кандидаты на удаление. Более новые версии apt-get
работать намного лучше вместе с aptitude
, но эта проблема проявилась в то время, когда эти проблемы существовали.
Если по какой-то причине вы все еще наблюдаете такое поведение, есть несколько вариантов. Самым простым было бы просто перейти на использование apt
поставщик для Puppet's package
тип. Это позволит полностью избежать путаницы aptitude
содержит информацию о том, какие пакеты следует удалить.
Если вам нужно продолжать использовать aptitude
провайдер, вам нужно исправить aptitude
идеи о том, что используется. Бегать aptitude dist-upgrade
и посмотрите на каждый пакет, который он хочет удалить. Для каждого, кого вы знаете, что хотите сохранить, бегите aptitude unmarkauto <package-name>
(например. aptitude unmarkauto apt-file curl
). Тогда убедитесь, что вы используете только aptitude
для установки пакетов с этого момента.
По моему опыту, единственное, что aptitude
работает лучше, чем текущие версии apt-get
интерактивны: интерфейс curses и возможность изменять набор установок / удалений пакетов в середине сеанса командной строки. Puppet не нуждается в каких-либо интерактивных функциях, поэтому вы действительно должны быть в порядке, просто используя apt
провайдер.