Назад | Перейти на главную страницу

Puppet удаляет пакеты при установке «lsscsi»

Мы хотели установить пакет 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 провайдер.