--allow-downgrade does nothing?

Hello,

i enabled PackMan/Essentials repo, gave it a higher priority and updated my system from it with a lot of packages changing vendor. Then I disabled the repo but packages are not downgrading to those from standard repos even when explicitly allowed to downgrade:

david@atronach-opensuse:~> LANG=en_US sudo  zypper up --allow-downgrade
Loading repository data...
Reading installed packages...

The following 2 package updates will NOT be installed:
  mpv mpv-bash-completion
Nothing to do.

Note that vendor stickiness is disabled in zypp.conf:

solver.allowVendorChange = true

zypper will downgrade them only with the dist-upgrade command:

david@atronach-opensuse:~> LANG=en_US sudo  zypper dup
Loading repository data...
Reading installed packages...
Warning: You are about to do a distribution upgrade with all enabled repositories. Make sure these repositories are compatible before
 you continue. See 'man zypper' for more information about this command.
Computing distribution upgrade...

The following 36 packages are going to be downgraded:
  ffmpeg-3 gstreamer-plugins-bad gstreamer-plugins-bad-lang gstreamer-plugins-libav gstreamer-plugins-ugly
  gstreamer-plugins-ugly-lang libavcodec57 libavcodec58 libavdevice57 libavdevice58 libavfilter6 libavfilter7 libavformat57
  libavformat58 libavresample3 libavresample4 libavutil55 libavutil56 libgstadaptivedemux-1_0-0 libgstbadaudio-1_0-0
  libgstbasecamerabinsrc-1_0-0 libgstcodecparsers-1_0-0 libgstisoff-1_0-0 libgstmpegts-1_0-0 libgstphotography-1_0-0 libgstsctp-1_0-0
  libgsturidownloader-1_0-0 libgstwayland-1_0-0 libgstwebrtc-1_0-0 libpostproc54 libpostproc55 librasqal3 libswresample2
  libswresample3 libswscale4 libswscale5

The following 36 packages are going to change vendor:
  ffmpeg-3                      http://packman.links2linux.de -> openSUSE
  gstreamer-plugins-bad         http://packman.links2linux.de -> openSUSE
  gstreamer-plugins-bad-lang    http://packman.links2linux.de -> openSUSE
  gstreamer-plugins-libav       http://packman.links2linux.de -> openSUSE
  gstreamer-plugins-ugly        http://packman.links2linux.de -> openSUSE
  gstreamer-plugins-ugly-lang   http://packman.links2linux.de -> openSUSE
  libavcodec57                  http://packman.links2linux.de -> openSUSE
  libavcodec58                  http://packman.links2linux.de -> openSUSE
  libavdevice57                 http://packman.links2linux.de -> openSUSE
  libavdevice58                 http://packman.links2linux.de -> openSUSE
  libavfilter6                  http://packman.links2linux.de -> openSUSE
  libavfilter7                  http://packman.links2linux.de -> openSUSE
  libavformat57                 http://packman.links2linux.de -> openSUSE
  libavformat58                 http://packman.links2linux.de -> openSUSE
  libavresample3                http://packman.links2linux.de -> openSUSE
  libavresample4                http://packman.links2linux.de -> openSUSE
  libavutil55                   http://packman.links2linux.de -> openSUSE
  libavutil56                   http://packman.links2linux.de -> openSUSE
  libgstadaptivedemux-1_0-0     http://packman.links2linux.de -> openSUSE
  libgstbadaudio-1_0-0          http://packman.links2linux.de -> openSUSE
  libgstbasecamerabinsrc-1_0-0  http://packman.links2linux.de -> openSUSE
  libgstcodecparsers-1_0-0      http://packman.links2linux.de -> openSUSE
  libgstisoff-1_0-0             http://packman.links2linux.de -> openSUSE
  libgstmpegts-1_0-0            http://packman.links2linux.de -> openSUSE
  libgstphotography-1_0-0       http://packman.links2linux.de -> openSUSE
  libgstsctp-1_0-0              http://packman.links2linux.de -> openSUSE
  libgsturidownloader-1_0-0     http://packman.links2linux.de -> openSUSE
  libgstwayland-1_0-0           http://packman.links2linux.de -> openSUSE
  libgstwebrtc-1_0-0            http://packman.links2linux.de -> openSUSE
  libpostproc54                 http://packman.links2linux.de -> openSUSE
  libpostproc55                 http://packman.links2linux.de -> openSUSE
  librasqal3                    openSUSE -> obs://build.opensuse.org/multimedia
  libswresample2                http://packman.links2linux.de -> openSUSE
  libswresample3                http://packman.links2linux.de -> openSUSE
  libswscale4                   http://packman.links2linux.de -> openSUSE
  libswscale5                   http://packman.links2linux.de -> openSUSE

36 packages to downgrade, 36  to change vendor.
Overall download size: 12.9 MiB. Already cached: 0 B. After the operation, 12.9 MiB will be freed.
**Continue? [y/n/v/...? shows all options] (y):**

How come zypper up --allow-downgrade doesn’t work in this case? What’s the point of the –allow-downgrade switch then? I’d like to avoid using dist-upgrade on Leap because it does more changes to the packages and should be used only for the actual distribution upgrade according to the man page.

My repos:

david@atronach-opensuse:~> LANG=en_US sudo zypper lr -p
#  | Alias                     | Name                                             | Enabled | GPG Check | Refresh | Priority
---+---------------------------+--------------------------------------------------+---------+-----------+---------+---------
 1 | kde-extra                 | KDE extra balíčky                              | Yes     | (r ) Yes  | Yes     |   98
 2 | kwin-lowlatency           | Vylepšený KWin                                 | Yes     | (r ) Yes  | Yes     |   98
 3 | multimedia-apps           | Multimedia Applications                          | Yes     | (r ) Yes  | Yes     |   98
 4 | packman-essentials        | PackMan/Essentials                               | No      | ----      | ----    |   98
 5 | repo-debug                | Debug Repository                                 | No      | ----      | ----    |   99
 6 | repo-debug-non-oss        | Debug Repository (Non-OSS)                       | No      | ----      | ----    |   99
 7 | repo-debug-update         | Update Repository (Debug)                        | No      | ----      | ----    |   99
 8 | repo-debug-update-non-oss | Update Repository (Debug, Non-OSS)               | No      | ----      | ----    |   99
 9 | repo-non-oss              | Non-OSS repozitář                              | Yes     | (r ) Yes  | Yes     |   99
10 | repo-oss                  | Hlavní repozitář                              | Yes     | (r ) Yes  | Yes     |   99
11 | repo-source               | Source Repository                                | No      | ----      | ----    |   99
12 | repo-source-non-oss       | Source Repository (Non-OSS)                      | No      | ----      | ----    |   99
13 | repo-update               | Hlavní aktualizační repozitář               | Yes     | (r ) Yes  | Yes     |   99
14 | repo-update-non-oss       | Aktualizační repozitář (uzavřený software) | Yes     | (r ) Yes  | Yes     |   99
15 | vivaldi                   | Prohlížeč Vivaldi                             | Yes     | (r ) Yes  | Yes     |   98

Thanks.

I did not check what the version are in this case for you, but the version from packages from the Packman repo are not by definition higher (or lower) then those from standard OSS repo. They are numbered by their maintainers independent from each other.

Also “Switching Vendor”, as done e.g. to use Packman versions of packages instead of OSS versions, is done by doing a

zypper dup --from <id-of-the-repo>

and not because the priority is higher (that priority is only used when installing a new package that is available on both repos, independent of version) and also not because the version numbering of any package is “higher” then the one already there. A package is then switched simply because it is there.

When you disable the Packman repo, all the packages you have installed from it are now orphans (regardless of their version). but hat does not mean that they will be replaced doing a zypper up, because of the vendor stickyness. Again this has nothing to do with version numbering (and thus allowing downgrading will not change anything), but with vendor stickyness.

Only a zypper dup will change vendors and in this case install those packages that are orphans and are available on OSS will be switched to OSS (which means that any packages that were installed extra from Packman will still stay as orphans).

You need


LANG=C zypper lr -d

for showing full info.

Like I said, I have disabled vendor stickiness in zypp.conf so even zypper up (not just dup) automatically switched vendor of packages to those in PackMan repo because it has a slightly higher priority.

Regarding package versions, you can see in my zypper dup output all those packages switching vendor back from PackMan to openSUSE are to be downgraded: *“The following 36 packages are going to be downgraded:”.*Which bring us to my question how come zypper up --allow-downgrade doesn’t do the downgrading too like zypper dup does?

I didn’t list the repositories with the detailed output intentionally because the lines would otherwise got broken in the message post thus making it poorly readable. But there you go:

david@atronach-opensuse:~> LANG=c zypper lr -d      
#  | Alias                     | Name                                       | Enabled | GPG Check | Refresh | Priority | Type   | URI                                                                                        | Service
---+---------------------------+--------------------------------------------+---------+-----------+---------+----------+--------+--------------------------------------------------------------------------------------------+--------
 1 | kde-extra                 | KDE extra balíčky                          | Yes     | (r ) Yes  | Yes     |   98     | rpm-md | https://download.opensuse.org/repositories/KDE:/Extra/openSUSE_Leap_15.2/                  |  
 2 | kwin-lowlatency           | Vylepšený KWin                             | Yes     | (r ) Yes  | Yes     |   98     | rpm-md | https://download.opensuse.org/repositories/home:DarkWav:kwin-lowlatency/openSUSE_Leap_15.2 |  
 3 | multimedia-apps           | Multimedia Applications                    | Yes     | (r ) Yes  | Yes     |   98     | rpm-md | https://download.opensuse.org/repositories/multimedia:/apps/openSUSE_Leap_15.2/            |  
 4 | packman-essentials        | PackMan/Essentials                         | No      | ----      | ----    |   98     | NONE   | http://mirror.karneval.cz/pub/linux/packman/suse/openSUSE_Leap_15.2/Essentials/            |  
 5 | repo-debug                | Debug Repository                           | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/debug/distribution/leap/15.2/repo/oss/                        |  
 6 | repo-debug-non-oss        | Debug Repository (Non-OSS)                 | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/debug/distribution/leap/15.2/repo/non-oss/                    |  
 7 | repo-debug-update         | Update Repository (Debug)                  | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/debug/update/leap/15.2/oss/                                   |  
 8 | repo-debug-update-non-oss | Update Repository (Debug, Non-OSS)         | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/debug/update/leap/15.2/non-oss/                               |  
 9 | repo-non-oss              | Non-OSS repozitář                          | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://download.opensuse.org/distribution/leap/15.2/repo/non-oss/                          |  
10 | repo-oss                  | Hlavní repozitář                           | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://download.opensuse.org/distribution/leap/15.2/repo/oss/                              |  
11 | repo-source               | Source Repository                          | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/source/distribution/leap/15.2/repo/oss/                       |  
12 | repo-source-non-oss       | Source Repository (Non-OSS)                | No      | ----      | ----    |   99     | NONE   | http://download.opensuse.org/source/distribution/leap/15.2/repo/non-oss/                   |  
13 | repo-update               | Hlavní aktualizační repozitář              | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://download.opensuse.org/update/leap/15.2/oss                                          |  
14 | repo-update-non-oss       | Aktualizační repozitář (uzavřený software) | Yes     | (r ) Yes  | Yes     |   99     | rpm-md | http://download.opensuse.org/update/leap/15.2/non-oss/                                     |  
15 | vivaldi                   | Prohlížeč Vivaldi                          | Yes     | (r ) Yes  | Yes     |   98     | rpm-md | https://repo.vivaldi.com/archive/rpm/x86_64                                                | 

Without the URIs shown, such a list is useless, because who knows which repositories are behind the aliases and names used on your system?

I do not know why you disabled vendor-stickiness, but are you sure that is a wise thing to do on Leap?

You now seem to install packages that are both on OSS and on Packman based on version numbers and those, at least for the build numbers, are based on the whim of the maintainers. who are not required to coordinate these. Tricky IMHO.

In any case, you are now handling things different from the average Leap user, thus they will have not much experience which such a set-up.

I find the vendor stickiness concept annoying - changing the vendor all the time. I think I can control adequately what goes to install and what doesn’t based on different priorities of repos. Plus so far, my installation of openSUSE is just a testing bed for experiments. It’s not my daily driver nor does it run on a production machine.

But for those running the system for their day-to-day work (and not for experimenting), vendor stickiness is perfect. Because when you have switched to Packman and then an update on OSS gets a higher version number (and that is something you seem to think as impossible, but it isn’t) that package will be switched back on a normal update session. And gone is some of your multi-media support.

Most people prefer the Packman packages, so the instructions to use Packman generally is something like the following

zypper dup --from packman

To undo that so your packages generally are from the oss repository, you would generally run the following

zypper dup --from repo-oss

The other commands used don’t do what is needed exactly, resulting in some confusion.
Skimming the attempt “zypper dup --allow-downgrade” and zypper up --allow downgrade appear to list a number of packages that downgraded but don’t necessarily do what you want completely.

TSU