我们想在我们所有的Linux服务器上安装“lsscsi”软件包,并为它build立一个清单:
# pack_lsscsi.pp class common::pack_lsscsi { case $operatingsystem { RedHat, CentOS, Debian: { package { 'lsscsi': ensure => 'installed', } } } }
“lsscsi”包只有“libc6”作为依赖关系,所以根本不用理会。 我们的Red Hat和CentOS服务器一切正常,但是一些Debian系统却疯狂了。 木偶之间的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安装的软件包往往被自动安装,因此被删除。 apt-get更新版本与aptitude一起工作要好得多,但这个问题在出现这些问题的时候就performance出来了。
如果出于某种原因,现在仍然有这种行为,那么有几个选项。 最简单的方法就是改变为使用Puppet packagetypes的apt提供package 。 这完全避免了它应该删除哪些软件包的困惑。
如果您需要继续使用aptitude provider,则需要修复aptitude关于正在使用的思路。 运行aptitude dist-upgrade并查看每个要删除的软件包。 对于每一个你知道你想保留,运行aptitude unmarkauto <package-name> (例如aptitude unmarkauto apt-file curl )。 然后确保你aptitude起只使用aptitude进行软件包安装。
根据我的经验, aptitude比apt-get当前版本更好的唯一的事情是交互式的:curses接口和能够在命令行会话中间修改软件包安装/删除的集合。 木偶不需要任何交互function,所以你真的应该只是使用apt提供者。