#987907 ganeti: fails to upgrade from buster: ganeti-2.16 is still needed, but scheduled for removal

Package:
ganeti
Source:
ganeti
Submitter:
Andreas Beckmann
Date:
2021-09-08 07:03:03 UTC
Severity:
important
Tags:
#987907#5
Date:
2021-05-01 21:15:21 UTC
From:
To:
Hi,

during a test with piuparts I noticed your package fails to upgrade from
'buster'.
It installed fine in 'buster', then the upgrade to 'bullseye' fails.

In order to run 'gnt-cluster upgrade' both ganeti-3.0 and ganeti-2.16
need to be installed, but the package from buster needs to be removed
due to the removal of unversioned python and the Python 2 modules
(python-*) before the local admin could run 'gnt-cluster upgrade'

I'm not sure how a clean upgrade is intended to be performed in this
case. This may also be an interesting question for DSA.

From the attached log (scroll to the bottom...):

  The following packages were automatically installed and are no longer required:
    ganeti-haskell-2.16 ganeti-htools-2.16 libprocps7 libpython2-stdlib
    libpython2.7-minimal libpython2.7-stdlib libreadline5 libreadline7
    python-six python2 python2-minimal python2.7 python2.7-minimal
  Use 'sudo apt autoremove' to remove them.
  The following packages will be REMOVED:
    ganeti-2.16 libpython-stdlib python python-asn1crypto python-bcrypt
    python-bitarray python-cffi-backend python-cryptography python-enum34
    python-fdsend python-ipaddr python-ipaddress python-minimal python-nacl
    python-openssl python-paramiko python-psutil python-pyasn1 python-pycurl
    python-pyinotify python-pyparsing python-simplejson
  The following NEW packages will be installed:
    ganeti-3.0 ganeti-haskell-3.0 ganeti-htools-3.0 gcc-10-base libapt-pkg6.0
    libbpf0 libbrotli1 libcbor0 libcrypt1 libffi7 libfido2-1 libgcc-s1
    libgdbm-compat4 libgdbm6 libhogweed6 libmd0 libmpdec3 libnettle8 libnsl2
    libpcre2-8-0 libperl5.32 libprocps8 libpython3-stdlib libpython3.9-minimal
    libpython3.9-stdlib libreadline8 libtirpc-common libtirpc3 libxxhash0
    logsave mailcap media-types perl perl-modules-5.32 python3 python3-bcrypt
    python3-bitarray python3-cffi-backend python3-cryptography python3-minimal
    python3-nacl python3-openssl python3-paramiko python3-psutil python3-pycurl
    python3-pyinotify python3-pyparsing python3-simplejson python3-six python3.9
    python3.9-minimal runit-helper tzdata
  The following packages will be upgraded:
    [...]
  135 upgraded, 53 newly installed, 22 to remove and 0 not upgraded.
[...]
  Selecting previously unselected package ganeti-3.0.
  Preparing to unpack .../44-ganeti-3.0_3.0.1-2_all.deb ...
  Adding 'diversion of /usr/share/ganeti/2.16/ganeti/utils/version.py to /usr/share/ganeti/2.16/ganeti/utils/version.py.orig by ganeti-3.0'
  Unpacking ganeti-3.0 (3.0.1-2) ...
  Preparing to unpack .../45-libcurl4_7.74.0-1.2_amd64.deb ...
  Unpacking libcurl4:amd64 (7.74.0-1.2) over (7.64.0-4+deb10u2) ...
  Preparing to unpack .../46-libpcre3_2%3a8.39-13_amd64.deb ...
  Unpacking libpcre3:amd64 (2:8.39-13) over (2:8.39-12) ...
  Setting up libpcre3:amd64 (2:8.39-13) ...
  Selecting previously unselected package ganeti-haskell-3.0.
  Preparing to unpack .../ganeti-haskell-3.0_3.0.1-2_amd64.deb ...
  Unpacking ganeti-haskell-3.0 (3.0.1-2) ...
  Selecting previously unselected package ganeti-htools-3.0.
  Preparing to unpack .../ganeti-htools-3.0_3.0.1-2_amd64.deb ...
  Unpacking ganeti-htools-3.0 (3.0.1-2) ...
  Preparing to unpack .../ganeti_3.0.1-2_all.deb ...
  Unpacking ganeti (3.0.1-2) over (2.16.0-5) ...
  Removing ganeti-2.16 (2.16.0-5) ...
  dpkg: error processing package ganeti-2.16 (--remove):
   installed ganeti-2.16 package pre-removal script subprocess returned error exit status 30
  dpkg: python-simplejson: dependency problems, but removing anyway as you requested:
   ganeti-2.16 depends on python-simplejson.

  Removing python-simplejson (3.16.0-1) ...
  dpkg: python-fdsend: dependency problems, but removing anyway as you requested:
   ganeti-2.16 depends on python-fdsend.

  Removing python-fdsend (0.2.1-2) ...
  dpkg: python-paramiko: dependency problems, but removing anyway as you requested:
   ganeti-2.16 depends on python-paramiko.

  Removing python-paramiko (2.4.2-0.1) ...
  dpkg: python-openssl: dependency problems, but removing anyway as you requested:
   ganeti-2.16 depends on python-openssl.

  Removing python-openssl (19.0.0-1) ...
  Removing python-cryptography (2.6.1-3+deb10u2) ...
  Removing python-asn1crypto (0.24.0-1) ...
  Errors were encountered while processing:
   ganeti-2.16


cheers,

Andreas

#987907#10
Date:
2021-05-20 08:28:12 UTC
From:
To:
Hi Andreas

Thanks for the report.

Andreas Beckmann <anbe@debian.org> writes:

Yes, the removal of unversioned python makes things more complicated. I
was hoping that ganeti-2.16's dependencies would be enough to keep the
Python 2 modules around until gnt-cluster upgrade could run.

That said, I think the best way forward is to upgrade buster clusters
to 3.0 using the packages from buster-backports, before attempting to
dist-upgrade to bullseye. This should probably be documented in the
release notes.

Since there's really not much else we can do about it now, I'm
downgrading to important and tagging it as wontfix. Please let me know
what you think.

Regards,
Apollon

#987907#19
Date:
2021-05-20 09:07:51 UTC
From:
To:
Do we know what specifically causes old python to be removed?

Cheers,
Julien

#987907#24
Date:
2021-05-20 10:29:03 UTC
From:
To:
Hi Julien,

Julien Cristau <jcristau@debian.org> writes:

  Broken python2.7:amd64 Breaks on libpython-stdlib:amd64 < 2.7.16-1 @ii mK Ib > (<
 2.7.18)
    Considering libpython-stdlib:amd64 11 as a solution to python2.7:amd64 23
    Added libpython-stdlib:amd64 to the remove list
  Broken python2.7:amd64 Breaks on python:amd64 < 2.7.16-1 @ii mK Ib > (< 2.7.18)
    Considering python:amd64 15 as a solution to python2.7:amd64 23
    Added python:amd64 to the remove list
  Broken python2.7:amd64 Breaks on python-minimal:amd64 < 2.7.16-1 @ii mK Ib > (< 2.7.18)
    Considering python-minimal:amd64 11 as a solution to python2.7:amd64 23
    Added python-minimal:amd64 to the remove list
    Fixing python2.7:amd64 via remove of libpython-stdlib:amd64
    Fixing python2.7:amd64 via remove of python:amd64
    Fixing python2.7:amd64 via remove of python-minimal:amd64

python2.7 in Bullseye explicitly Breaks: python (<< 2.7.18),
python-minimal (<< 2.7.18). This causes the removal of all packages that
Depend on python (including ganeti-2.16, python-simplejson etc).

Cheers,
Apollon

#987907#29
Date:
2021-05-20 11:47:42 UTC
From:
To:
Apollon Oikonomopoulos <apoikos@debian.org> writes:

This was added in

python2.7 (2.7.18-7) unstable; urgency=medium

  [ Andreas Beckmann ]
  * python2.7, libpython2.7-minimal: Add Breaks: python (<< 2.7.18) to ensure
    removal of the unversioned python packages on upgrades from buster. The
    previously added (transitive) Breaks are not sufficient in a few upgrade
    scenarios. Closes: #987661.

#987907#34
Date:
2021-05-20 12:26:36 UTC
From:
To:
Can one upgrade ganeti, keeping the old python2.7 and ganeti-2.16, then
do the cluster upgrade, then finish the dist-upgrade?

Cheers,
Julien

#987907#39
Date:
2021-05-20 12:28:46 UTC
From:
To:
Package: python
Source: python-defaults
Version: 2.7.16-1
Depends: python2.7 (>= 2.7.16-1~), libpython-stdlib (= 2.7.16-1), python2 (= 2.7.16-1)
Pre-Depends: python-minimal (= 2.7.16-1)

bullseye:

Package: python2
Source: python-defaults
Version: 2.7.18-2
Depends: python2.7 (>= 2.7.18~), libpython2-stdlib (= 2.7.18-2)
Pre-Depends: python2-minimal (= 2.7.18-2)

==> python/buster is not co-installable with python2/bullseye
==> python/buster must be removed to upgrade python2

Package: python2.7
Version: 2.7.18-7
Depends: python2.7-minimal (= 2.7.18-7), libpython2.7-stdlib (= 2.7.18-7), mime-support
Breaks: libpython-stdlib (<< 2.7.18), python (<< 2.7.18), python-minimal (<< 2.7.18), python-virtualenv (<< 1.7.1.2-2~), vim-athena (<< 2:7.3.547-4), vim-gnome (<< 2:7.3.547-4), vim-gtk (<< 2:7.3.547-4), vim-nox (<< 2:7.3.547-4)

The explicit versioned Breaks in python2.7 against unversioned
python packages are there to help apt making the right decision:
remove unversioned python and upgrade python2 to bullseye
(otherwise it would try to not upgrade python2/buster in order
to keep python/buster installed in quite a bunch of upgrade
scenarios)

@apollon:
Would it be possible to build ganeti-2.16 in bullseye (with
reduced dependencies?) s.t. it depends on python2 instead of
python? Then it could be reintroduced into bullseye like buster
had ganeti-2.15 in addition to ganeti (2.16).

Andreas

#987907#44
Date:
2021-05-20 12:36:17 UTC
From:
To:
I'd argue that keeping python/buster installed would be a better
decision...

Cheers,
Julien

#987907#49
Date:
2021-05-20 12:58:59 UTC
From:
To:
Andreas Beckmann <anbe@debian.org> writes:

It would be possible, but that would also have to be done for at least
python-simplejson, python-fdsend and possibly others. To be honest, I'd
much prefer promoting upgrades via buster-backports for Ganeti, it's
much more straightforward.

Regards,
Apollon

#987907#56
Date:
2021-09-08 06:54:23 UTC
From:
To:
Hi!

I wrote a mail to ganeti at packages.debian.org which I don't know if you
guys got, on it I commented over this problem and some others I had found
while upgrading.

The thing is that I also got this problem and the solution I found was to do
a:

apt install python-is-python2

And then magically everything fitted, I could install both ganeti versions
and do the upgrade, after upgrading everything I removed all python 2 stuff
and that's it.

Hope it helps.

Regards.