J'ai une question à propos de do-release-upgrade. J'ai un système avec le composant suivant installé (et quelques autres, mais ceux-ci ne sont pas pertinents pour la question, le but du serveur est d'être un serveur MySQL pour mon système de sauvegarde Bacula):
Puisqu'il s'agit d'un serveur, je n'ai pas spécifiquement installé bacula-traymonitor, ce qui résulterait de l'installation en cascade de paquets liés à X11. X11 n'est pas utile pour les environnements de serveur imho, bien que je sache que certaines bibliothèques X11 sont nécessaires pour certains démons comme opensshd, qui dépendent des bibliothèques X11 et qui explique pourquoi certaines de ces bibliothèques ont probablement fini par être installées de toute façon.
Je viens de publier do-release-upgrade -d (pour une raison quelconque, sans l'option -d, aucune mise à jour de version n'est encore affichée, même après le 24 juillet) et j'ai remarqué ce qui suit: bacula-traymonitor s'en va à installer, avec toute la cascade de choses X11 que je ne veux pas spécifiquement sur mon serveur. Le package n'est pas requis pour le bon fonctionnement du client bacula, il ne doit donc pas apparaître sur le radar de mise à niveau en tant que package à installer. Je classerais ceci comme bug.
Mis à part la méthode évidente, ai-je le moyen de demander à do-release-upgrade de NE PAS installer tous les éléments superflus comme bacula-traymonitor? La méthode évidente est de "laisser do-release-upgrade faire son travail, puis supprimer les paquets par la suite", ce qui laisse indubitablement des restes sur mon système, comme des bibliothèques X11 inutilisées qui ne sont pas supprimées automatiquement après avoir supprimé bacula-traymonitor. J'ai plusieurs autres systèmes que je souhaite mettre à niveau vers 14.04.1 LTS, et presque tous sont dotés de bacula-client, ce qui impliquerait donc beaucoup de travail inutile.
Détails ci-dessous:
Remove (was auto installed) libperl5.14 libsnmp15 xz-lzma
Install: aptitude-common bacula-traymonitor cpp-4.8 crda dh-python
fontconfig fontconfig-config fonts-dejavu-core g++-4.8 gawk gcc-4.8
gcc-4.8-base gcc-4.9-base hicolor-icon-theme init-system-helpers
iproute2 iw kmod libaio1 libapparmor1 libapt-inst1.5
libarchive-extract-Perl libasan0 libasprintf0c2 libatk1.0-0
libatk1.0-data libatm1 libatomic1 libaudit-common libaudit1
libavahi-client3 libavahi-common-data libavahi-common3 libbind9-90
libboost-iostreams1.54.0 libcairo2 libcap2-bin libcgmanager0
libck-connector0 libcloog-isl4 libcups2 libdatrie1 libdb5.3 libdbi1
libdebconfclient0 libdns100 libestr0 libfakeroot
libfile-fcntllock-Perl libfontconfig1 libgcc-4.8-dev libgck-1-0
libgcr-3-common libgcr-base-3-1 libgdk-pixbuf2.0-0
libgdk-pixbuf2.0-common libgnutls-openssl27 libgraphite2-3
libgssglue1 libgtk2.0-0 libgtk2.0-bin libgtk2.0-common
libharfbuzz0b libisc95 libisccc90 libisccfg90 libisl10 libitm1
libjasper1 libjbig0 libjpeg-turbo8 libjpeg8 libjson-c2 libjson0
libkmod2 libldb1 liblog-message-simple-Perl liblwres90
libmodule-pluggable-Perl libmpc3 libmpdec2 libntdb1 libnuma1
libpam-cap libpam-systemd libpango-1.0-0 libpangocairo-1.0-0
libpangoft2-1.0-0 libperl5.18 libpixman-1-0 libpod-latex-Perl
libpolkit-agent-1-0 libpolkit-backend-1-0 libprocps3
libpython-stdlib libpython2.7-minimal libpython2.7-stdlib
libpython3-stdlib libpython3.4-minimal libpython3.4-stdlib
libsasl2-modules-db libsemanage-common libsemanage1 libsepol1
libsigsegv2 libsmbclient libsnmp30 libssh2-1 libstdc++-4.8-dev
libsystemd-daemon0 libsystemd-login0 libtasn1-6 libterm-ui-Perl
libtevent0 libtext-soundex-Perl libthai-data libthai0 libtiff5
libtirpc1 libtsan0 libudev1 libustr-1.0-1 libxcb-render0
libxcb-shm0 libxcomposite1 libxcursor1 libxdamage1 libxfixes3
libxi6 libxinerama1 libxrandr2 libxrender1 libxtables10
linux-generic linux-headers-generic
linux-image-extra-3.13.0-32-generic linux-image-generic
nagios-plugins-common ncurses-term openssh-sftp-server policykit-1
python-configobj python-ldb python-ntdb python-requests
python-samba python-secretstorage python-six python-talloc
python-tdb python-urllib3 python3 python3-apport python3-apt
python3-commandnotfound python3-dbus python3-distupgrade
python3-gdbm python3-gi python3-minimal python3-problem-report
python3-update-manager python3.4 python3.4-minimal rpcbind run-one
samba-libs shared-mime-info systemd-services systemd-shim
ubuntu-release-upgrader-core wireless-regdb
Upgrade: accountsservice acpid adduser apport apport-symptoms apt
apt-transport-https apt-utils apt-xapian-index aptitude arj at
bacula-client bacula-common bacula-console bacula-doc bacula-fd
base-files base-passwd bash bash-completion bc bind9-Host binutils
bsdmainutils bsdutils build-essential busybox-initramfs
busybox-static byobu bzip2 ca-certificates command-not-found
command-not-found-data console-setup coreutils cpio cpp cpp-4.6
cron curl dash dbus debconf debconf-i18n debianutils diffutils dkms
dmidecode dmsetup dnsutils dosfstools dpkg dpkg-dev dstat e2fslibs
e2fsprogs ed eject fakeroot file findutils
fonts-ubuntu-font-family-console ftp Fuse g++ g++-4.6 gcc gcc-4.6
gcc-4.6-base geoip-database gettext-base gir1.2-glib-2.0 gnupg gpgv
grep groff-base grub-common grub-pc grub-pc-bin grub2-common gzip
hdparm hostname htop ifupdown info initramfs-tools
initramfs-tools-bin initscripts insserv install-info
installation-report iotop iproute iptables iputils-ping
iputils-tracepath irqbalance isc-dhcp-client isc-dhcp-common
iso-codes joe kbd keyboard-configuration klibc-utils krb5-locales
ksh landscape-common language-pack-en language-pack-en-base
language-selector-common less libaccountsservice0 libacl1
libalgorithm-diff-Perl libalgorithm-diff-xs-Perl libapt-pkg4.12
libasn1-8-heimdal libattr1 libblkid1 libbsd0 libbz2-1.0 libc-bin
libc-dev-bin libc6 libc6-dev libcap-ng0 libcap2 libclass-isa-Perl
libcomerr2 libcurl3 libcurl3-gnutls libcwidget3 libdb5.1
libdbd-mysql-Perl libdbi-Perl libdbus-1-3 libdbus-glib-1-2
libdevmapper-event1.02.1 libdevmapper1.02.1 libdpkg-Perl
libdrm-intel1 libdrm-radeon1 libdrm2 libedit2 libelf1 libept1.4.12
libevent-2.0-5 libexpat1 libffi6 libfreetype6 libfribidi0 libfuse2
libgc1c2 libgcc1 libgcrypt11 libgdbm3 libgeoip1
libgirepository-1.0-1 libglib2.0-0 libgmp10 libgnutls26 libgomp1
libgpg-error0 libgpm2 libgssapi-krb5-2 libgssapi3-heimdal
libhcrypto4-heimdal libheimbase1-heimdal libheimntlm0-heimdal
libhtml-template-Perl libhx509-5-heimdal libidn11 libio-string-Perl
libiw30 libjs-jquery libk5crypto3 libkeyutils1 libklibc
libkrb5-26-heimdal libkrb5-3 libkrb5support0 libldap-2.4-2
liblocale-gettext-Perl liblockfile-bin liblockfile1 liblzma5
liblzo2-2 libmagic1 libmount1 libmpfr4 libmysqlclient18 libncurses5
libncurses5-dev libncursesw5 libnewt0.52 libnfnetlink0 libnih-dbus1
libnih1 libnl-3-200 libnl-genl-3-200 libopts25 libp11-kit0
libpam-modules libpam-modules-bin libpam-runtime libpam0g
libparted0debian1 libpcap0.8 libpci3 libpciaccess0 libpcre3
libpcsclite1 libpipeline1 libplymouth2 libpng12-0
libpolkit-gobject-1-0 libpopt0 libpq5 libpython2.7 libquadmath0
libradius1 libreadline5 libreadline6 libroken18-heimdal librtmp0
libsasl2-2 libsasl2-modules libselinux1 libsensors4
libsigc++-2.0-0c2a libslang2 libsnmp-base libsqlite3-0 libss2
libssl1.0.0 libstdc++6 libstdc++6-4.6-dev libsub-name-Perl
libtalloc2 libtdb1 libterm-readkey-Perl libtext-charwidth-Perl
libtext-iconv-Perl libtimedate-Perl libtinfo-dev libtinfo5
libusb-0.1-4 libusb-1.0-0 libuuid1 libwbclient0 libwind0-heimdal
libwrap0 libx11-6 libx11-data libxapian22 libxau6 libxcb1 libxdmcp6
libxext6 libxml2 libxmuu1 linux-firmware linux-generic-lts-raring
linux-generic-lts-trusty linux-headers-3.13.0-32
linux-headers-3.13.0-32-generic linux-headers-generic-lts-raring
linux-headers-generic-lts-trusty linux-image-3.13.0-32-generic
linux-image-generic-lts-raring linux-image-generic-lts-trusty
linux-libc-dev locales lockfile-progs login logrotate lsb-base
lsb-release lshw lsof ltrace lvm2 m4 make makedev man-db manpages
manpages-dev mawk mc mc-data mdadm memtest86+ mime-support mlocate
module-init-tools mount mountall mtr-tiny multiarch-support
mysql-client-5.5 mysql-client-core-5.5 mysql-common mysql-server
mysql-server-5.5 mysql-server-core-5.5 mysqltuner
nagios-nrpe-server nagios-plugins nagios-plugins-basic
nagios-plugins-standard nano ncurses-base ncurses-bin ncurses-doc
net-tools netbase netcat-openbsd ntp ntp-doc ntpdate openssh-client
openssh-server openssl os-prober parted passwd patch pciutils Perl
Perl-base Perl-modules plymouth plymouth-theme-ubuntu-text
popularity-contest powermgmt-base ppp pppconfig procmail procps
psmisc python python-apport python-apt python-apt-common
python-chardet python-crypto python-dbus python-dbus-dev
python-debian python-gdbm python-gi python-httplib2 python-keyring
python-launchpadlib python-lazr.restfulclient python-lazr.uri
python-minimal python-newt python-oauth python-openssl python-pam
python-pkg-resources python-problem-report python-serial
python-simplejson python-twisted-bin python-twisted-core
python-wadllib python-xapian python-zope.interface python2.7
python2.7-minimal readline-common resolvconf rsync rsyslog
samba-common samba-common-bin screen sed sendmail sendmail-base
sendmail-bin sendmail-cf sendmail-doc sensible-mda sensible-utils
sgml-base smbclient snmp ssh-import-id strace Sudo sysstat sysv-rc
sysvinit-utils tar tasksel tasksel-data tcpd tcpdump telnet time
tmux tzdata ubuntu-keyring ubuntu-minimal ubuntu-standard ucf udev
ufw unzip update-manager-core update-notifier-common upstart
ureadahead usbutils util-linux uuid-runtime vim vim-common
vim-runtime vim-tiny w3m watershed wget whiptail whois
wireless-tools wpasupplicant xauth xfsprogs xkb-data xml-core
xz-utils zlib1g
Le problème est que do-release-upgrade
et apt-get dist-upgrade
installent tous les deux des packages avec les dépendances ainsi que les packages recommandés. Donc, ce que vous voulez, c'est installer uniquement les dépendances.
pour apt-get dist-upgrade:
Pour dist-upgrade
le processus est facile. Par défaut, apt-get installe également les paquetages recommandés (-s simule uniquement les changements):
$ Sudo apt-get -s install bacula-client
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
bacula-common bacula-console bacula-fd bacula-traymonitor
Suggested packages:
bacula-doc kde gnome-desktop-environment
The following NEW packages will be installed:
bacula-client bacula-common bacula-console bacula-fd bacula-traymonitor
alors que l'option --no-install-recommends
n'installe pas les packages recommandés:
$ Sudo apt-get -s --no-install-recommends install bacula-client
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
bacula-common bacula-console bacula-fd
Suggested packages:
bacula-doc
Recommended packages:
bacula-traymonitor
The following NEW packages will be installed:
bacula-client bacula-common bacula-console bacula-fd
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Donc, si vous utilisez apt-get dist-upgrade
, l'ajout de l'option --no-install-recommends
devrait suffire.
Pour do-release-upgrade:
Pour do-release-upgrade
, faire la même chose est un peu plus compliqué. Mais vous pouvez toujours le faire: vous devez utiliser le mode serveur conjointement avec l'édition du fichier /etc/apt/apt.conf
.
$ man do-release-upgrade
-m MODE, --mode=MODE
Run in a special upgrade mode. Currently "desktop" for regular upgrades of a desktop system and "server" for server systems are supported.
Bien que cette page de manuel ne soit pas très utile, utiliser -m server
devrait avoir pour résultat de ne pas installer les packages recommandés. La logique correspondante peut être trouvée dans /usr/lib/python3/dist-packages/DistUpgrade/DistUpgradeQuirks.py
à la ligne 677.
def ensure_recommends_are_installed_on_desktops(self):
""" ensure that on a desktop install recommends are installed
(LP: #759262)
"""
import apt
if not self.controller.serverMode:
if not apt.apt_pkg.config.find_b("Apt::Install-Recommends"):
msg = "Apt::Install-Recommends was disabled,"
msg += " enabling it just for the upgrade"
logging.warn(msg)
apt.apt_pkg.config.set("Apt::Install-Recommends", "1")
Il vous suffit donc de désactiver les packages recommandés. Vous pouvez le faire en ajoutant ou en modifiant un fichier /etc/apt/apt.conf
avec le contenu suivant
// Recommends are as of now still abused in many packages
APT::Install-Recommends "0";
APT::Install-Suggests "0";
Puis lancez apt-get update
juste pour être sûr.