I need to upgrade the Ubuntu Version on my servers, but I do not want to upgrade the installed packages. Is this possible?
Ubuntu Upgrade – How to Upgrade Ubuntu Version Without Upgrading Packages
linuxUbuntuupgrade
Related Solutions
Many people seem to be afraid of mixing stable with testing, but frankly, testing is fairly stable in its own right, and with proper preferences and solution checking, you can avoid the "stability drift" that puts your core packages on the unstable path.
"Testing is fairly stable??", you ask. Yes. In order for a package to migrate from unstable to testing, it has to have zero open bugs for 10 consecutive days. Chances are that, especially for the more popular packages, somebody is going to submit a bug report for an unstable version if something is wrong.
Even if you don't want to mix the environments, it's still nice to have the option there in case you run into something that requires a newer version than what is in stable.
Here's what I recommend for setting this up:
First, create the following files in /etc/apt/preferences.d
:
stable.pref
:
# 500 <= P < 990: causes a version to be installed unless there is a
# version available belonging to the target release or the installed
# version is more recent
Package: *
Pin: release a=stable
Pin-Priority: 900
testing.pref
:
# 100 <= P < 500: causes a version to be installed unless there is a
# version available belonging to some other distribution or the installed
# version is more recent
Package: *
Pin: release a=testing
Pin-Priority: 400
unstable.pref
:
# 0 < P < 100: causes a version to be installed only if there is no
# installed version of the package
Package: *
Pin: release a=unstable
Pin-Priority: 50
experimental.pref
:
# 0 < P < 100: causes a version to be installed only if there is no
# installed version of the package
Package: *
Pin: release a=experimental
Pin-Priority: 1
(Don't be afraid of the unstable/experimental stuff here. The priorities are low enough that it's never going to automatically install any of that stuff. Even the testing branch will behave, as it's only going to install the packages you want to be in testing.)
Now, creating a matching set for /etc/apt/sources.list.d
:
stable.list
: Copy from your original /etc/apt/sources.list
. Rename the old file to something like sources.list.orig
.
testing.list
: Same as stable.list
, except with testing
.
unstable.list
: Same as stable.list
, except with unstable
, and remove the security lists.
experimental.list
: Same as unstable.list
, except with experimental
.
You can also add a oldstable
in sources.lists.d
and preferences.d
(use a priority of 1), though this moniker will tend to expire and disappear before the next stable cycle. In cases like that, you can use http://archive.debian.org/debian/
and "hardcode" the Debian version (etch, lenny, etc.).
To install the testing version of a package, simply use aptitude install lib-foobar-package/testing
, or just jump into aptitude's GUI and select the version inside of the package details (hit enter on the package you're looking at).
If you get complaints of package conflicts, look at the solutions first. In most cases, the first one is going to be "don't install this version". Learn to use the per-package accept/reject resolver choices. For example, if you're installing foobar-package/testing, and the first solution is "don't install foobar-package/testing", then mark that choice as rejected, and the other solutions will never veer to that path again. In cases like these, you'll probably have to install a few other testing packages.
If it's getting too hairy (like it's trying to upgrade libc or the kernel or some other huge core system), then you can either reject those upgrade paths or just back out of the initial upgrade altogether. Remember that it's only going to upgrade stuff to testing/unstable if you allow it to.
EDIT: Fixed some priority pins, and updated the list.
The command apt-get upgrade will not add or remove packages. apt-get dist-upgrade will add or remove packages as required.
The command apt-get dist-upgrade will not automatically upgrade you from one release to another unless you have also updated your sources (/etc/apt/sources.list) to point at a newer release.
man apt-get
upgrade
upgrade is used to install the newest versions of all packages
currently installed on the system from the sources enumerated
in /etc/apt/sources.list.
dist-upgrade
dist-upgrade, in addition to performing the function of upgrade,
also intelligently handles changing dependencies with new versions
of packages;
Are there special concerns to be aware of when doing a dist-upgrade vs upgrade?
For the most part I always apt-get dist-upgrade to apply updates to a system. Of course pay attention to exactly what new packages are being added or removed. Frequently this happens when something is being added like a newer kernel that isn't compatible with the previous and you will have to recompile modules. If you have some kernel module you had to build on your own, then you may need to make sure you recompile it for the new kernel. I have a couple systems with network interfaces not supported by the stock kernel that I have to recompile the network driver after each kernel update.
Related Topic
- Linux Bash – How to Sort du -h Output by Size
- Ubuntu – View changelog of all packages to be upgraded before upgrading
- Ubuntu – How to use apt-get to only install critical security updates on ubuntu
- Reattach to do-release-upgrade Process – How to Guide
- Heartbleed – How to Reliably Check OpenSSL Version
- Ubuntu – debian packages version convention
- Ubuntu – “A new version of /boot/grub/menu.lst is available” when upgrading Ubuntu on an AWS server
Best Answer
Your question indicates a misunderstanding of what the release version of Ubuntu actually means.
‘21.04’ is not some random number, it’s a guarantee that:
In other words, the set of packages you have available and installed defines what version of Ubuntu you are using. That’s the whole point of the version number, it concisely defines the state of the platform so that users and developers can quickly verify compatibility.
This is no different with Windows, or macOS, or FreeBSD, or pretty much any Linux distribution that doesn’t use a rolling release model. It’s also no different from versions for any other type of software.