2

I have a question about do-release-upgrade. I have a system with the following component installed (and some more, but these are not relevant to the question, the server's purpose is to be a MySQL server for my Bacula backup system):

  • Bacula client

Since it is a server, I specifically did not install bacula-traymonitor, which would have result of a cascade of packages being installed that are related to X11. X11 is not useful for server environments imho, although I do understand some of the X11 libraries being necessary for some daemons like opensshd, which depend on the X11 libraries and which is why some of those X11 libraries have probably ended up on my installation anyway.

I just issued do-release-upgrade -d (for some reason without the -d option, it still does not show any release upgrades, even though it's after the 24th of July), and I noticed the following: bacula-traymonitor is going to be installed, along with the whole cascade of X11 stuff that I specifically do not want on my server. The package is not required for the proper operation of bacula client, so it should not show up on the upgrade radar as a package to be installed. I would classify this as a bug.

Aside from the obvious method, is there any way for me to instruct do-release-upgrade NOT to install all the superfluous stuff like bacula-traymonitor? The obvious method being "let do-release-upgrade do its thing and then remove the packages afterward", which indubitably leaves remnants on my system, like unused X11 libraries that are not autoremoved after I removed bacula-traymonitor. I have several other systems I wish to upgrade to 14.04.1 LTS, and nearly all of them have bacula-client installed, so this would mean a lot of unnecessary work.

Details below:

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
6
  • 1
    Could you shorten the question to include only essential stuff? Aug 3, 2014 at 8:19
  • I'm adding an answer right now, the question is fine as is.
    – jmiserez
    Aug 3, 2014 at 8:22
  • It is fine, but it would be helpful to not have the unnecessary stuff to read through to find the actual problem.
    – Tim
    Aug 3, 2014 at 8:24
  • I tend to be a bit longwinded. My apologies. I'll try to be more brief next time.
    – pleomousie
    Aug 3, 2014 at 8:26
  • I edited my answer, be sure to also edit the /etc/apt/apt.conf file!
    – jmiserez
    Aug 3, 2014 at 8:54

1 Answer 1

5

The problem is that do-release-upgrade and apt-get dist-upgrade both install packages with the dependencies as well as the recommended packages. So what you want is to install only the dependencies.


For apt-get dist-upgrade:

For dist-upgrade the process is easy. By default apt-get installs the recommended packages as well (-s only simulates changes):

$ 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

whereas the option --no-install-recommends does not install recommended packages:

$ 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.

So if you are using apt-get dist-upgrade, adding the --no-install-recommends option should be enough.


For do-release-upgrade:

For do-release-upgrade, doing the same thing is a bit tricker. But you can still do it: You need to use the server mode, in conjunction with editing the /etc/apt/apt.conf file.

$ 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.

While this manpage is not very helpful, using -m server should result in not installing recommended packages. The corresponding logic can be found in /usr/lib/python3/dist-packages/DistUpgrade/DistUpgradeQuirks.py on line 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")

So all you need to do is disable recommended packages. You can do this by adding or editing a file /etc/apt/apt.conf with the following contents

// Recommends are as of now still abused in many packages
APT::Install-Recommends "0";
APT::Install-Suggests "0";

Then run apt-get update just to be sure.

5
  • That seems to do the trick. Thanks a lot! Running the do-release-upgrade -d -m server now. Let's see what happens...
    – pleomousie
    Aug 3, 2014 at 9:11
  • Did you need to edit the apt.conf file at all?
    – jmiserez
    Aug 3, 2014 at 9:12
  • 1
    Yup. Without it, the "do-release-upgrade -d -m server" was still going to install bacula-traymonitor.
    – pleomousie
    Aug 3, 2014 at 9:19
  • To confirm the file /etc/apt/apt.conf did not exist on my system, adding the 3 lines in above allowed me to update from 14.04, without the x11 depends etc
    – Laice
    Jan 10, 2016 at 0:04
  • in newer releases the file is /etc/apt/apt.conf.d/99synaptic instead of /etc/apt/apt.conf
    – allanlaal
    Feb 6, 2020 at 17:59

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .