Upgrading openSUSE with zypper
Updates
The following updates have been applied:
- 2022-01-29:
- General improvements
With no doubt, an installation from scratch allows to get rid of all misconfigurations, packages installed once and never used, and broken or unneeded dependencies that most of the times we accumulate from time to time while playing new applications or system settings, upgrading openSUSE Leap through zypper instead, might perform enough well and, at the same time, avoiding to repeat the standard, several, boring configuration steps, to save time.
The procedure I am going to illustrate is inspired by the System Upgrade strategy described in the official documentation, what I introduced is the use of the zypper-upgraderepo plugin that I wrote to make things easier and added some personal considerations to overcome common problems.
Zypper or not
The usual installation process consists on
- Download and write the ISO;
- reboot from the USB key/CD/DVD support;
- prepare the disk and configure the option needed to start the installation;
- select and install the packages (only for the DVD version);
- apply other configurations and install other software (only for live CD version) post installation.
Upgrading through the zypper command line requires:
- Fix the repo’s URLs references;
- download the newer version of all and only already installed packages without select them again, at least in most cases;
- execute the upgrade;
- reboot.
Every time an upgrade doesn’t bring too many radical changes and the system itself is pretty stable to don’t require a cleanup, there is no reason to don’t give a try to zypper.
Update the system
Before to start upgrading it’s always a good practice to update the system.
Those who feel confused should be aware of that difference:
- Upgrade
- This is the complete procedure which allows to switch a versioned distribution from the actual to the newer version (i.e. from openSUSE 42.3 to openSUSE 15.0, from openSUSE 15.0 to openSUSE 15.1, and so on…).
- Update
- This is the regular action performed almost daily to keep the packages updated with their latest versions.
Keeping a system updated is always recommended, some of these updates might be important for a smoother upgrade later:
$ sudo zypper update
Warning!!!
When some error raises complaining about a repository suddenly missing, use zypper-upgraderepo to understand if it is available at least for the next version, in that case you can ignore any error from that repository and keep it enabled, its packages will be upgraded anyway.
Update the repo’s URLs
The first step is to check whether or not all the repositories currently used are enabled for the new version, this operation can be achieved either:
- Checking and updating hand by hand all the repositories;
- Using the zypper-upgradrepo gem or zypper plugin.
When the number of repositories is low, the first option is acceptable, otherwise the second is the best choice. The plugin version is only an interface for the gem itself.
To install the plugin a couple of commands are needed (please check the proper version of your distribution first):
$ sudo zypper addrepo https://download.opensuse.org/repositories/home:/FabioMux/openSUSE_Leap_15.0/home:FabioMux.repo
$ sudo zypper install zypper-upgraderepo-plugin
Then let’s check how many repositories are ready to be upgraded:
$ zypper upgraderepo --check-next

zypper upgraderepo --check-next
As the picture shows, some repository is not yet available, thus we have two options:
- Waiting for all the repositories to be available;
- disable the unavailable repositories and go on.
The second option is feasible only when:
- The repository to disable is no longer used,
- the packages installed are few in number or rarely used that a further reinstall it’s not a problem.
To know which packages are installed from a specific repository:
$ zypper packages -i -r REPO_NUMBER
To disable a repository:
$ sudo zypper mr --disable REPO_NUMBER
Sometimes an alternative URL is suggested, in that case we can override the URL with:
$ zypper upgraderepo --check-next --override-url REPO_NUMBER,URL

zypper upgraderepo --check-next with suggestions

zypper upgraderepo --check-next and URL overrides

zypper upgraderepo --check-next all the repos ready!
Once the list is ready we proceed with a backup:
$ zypper upgraderepo --backup ~
And then the upgrade:
$ sudo zypper upgraderpo --upgrade
Of course when some URL override is needed, we can append one or more -–override-url option as seen before for the –check-next command:
$ sudo zypper upgraderepo --upgrade --override-url REPO_NUMBER,URL [--override-url REPO_NUMBER2,URL2 …]
The zypper-upgraderepo wiki page
illustrate more options available by this tool that might come in handy.
Upgrade the system
The next step is to gather all the packages needed to upgrade our system, technically we are switching the vendor of our repos from the current version to the newer, adjusting all the dependencies.
I prefer to split this process into two steps:
- Download all the packages on the cache,
- apply the upgrade from the cached packages.
That way we can store all the packages on our disk and be sure that all them satisfy the required dependencies although we plan to execute the real upgrade hours later. Otherwise nothing stop them to be updated in their repositories also during the upgrade process, making it fail.
To download all the packages:
$ sudo zypper dup --download-only
Conflicts with new and obsolete packages will be solved now and in case of an unresolvable situation, zypper will ask how to proceed.
Once all the packages are downloaded let’s close our KDE/Gnome session, switch to the terminal console pressing CTRL+ALT+F1 and login as root user.
At this point switching to the runlevel 3 will reduce the risk of instability for a large number of binaries that will be substituted:
# init 3
Finally, we can upgrade using all the downloaded packages without connect again to remote servers:
# zypper --no-refresh dup
Last but not least a reboot to clean the memory from old applications loaded:
# reboot now
Final thoughts
Most of the times, after an upgrade, there is nothing else to do than enjoy the new distribution, but often with new features come also little glitches due to configuration changes in user space, packages not correctly upgraded, tweaks to apply again.
A summary of all the problem I met and how I fixed them will be matter of next articles! This article covers a personal project, further info is provided at the Zypper-Upgraderepo project page.
This work is licensed under a Creative Commons Attribution-NoCommercial-ShareAlike 4.0 International License
Leave a Comment