web-dev-qa-db-fra.com

Ubuntu do-release-upgrade

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):

  • Client 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
2
pleomousie

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.

4
jmiserez