Enable testing repo on stable Debian 11
You want to keep a stable Debian 11 distro (install and upgrade all packages from stable by default), but there's a few packages you want to use that are in another repo (testing or unstable). Here's how to do it (probably correctly)
Enable testing in Debian
Adding backports is easy, it's just another line in /etc/apt/sources.list.
Unfortunately, it is not as simple as that with testing or unstable. For these to work properly (and not change all packages to unstable), we need to play a bit with repository priorities.
We will use something called Apt-Pinning, which you can read more about in the Debian Handbook.
Edit apt preferences file
Create apt preferences file (if it doesn't exist already) and open it with your favorite file editor.
$ sudo vi /etc/apt/preferences
Now add the following content into it:
Package: *
Pin: release a=stable
Pin-Priority: 900
Package: *
Pin: release o=Debian
Pin-Priority: -10
This should give the stable repository high enough priority that all packages will be installed and upgraded from stable by default. To install package from other repo (testing or unstable), it has to be explicitly specified with -t option of apt.
Replace bullseye with stable in sources.list
This is how my sources.list
in /etc/apt
looks like now:
# Generated by distrobuilder
deb http://deb.debian.org/debian bullseye main
deb http://security.debian.org/debian-security bullseye-security main
deb http://deb.debian.org/debian bullseye-updates main
# Official Nginx repo
deb https://nginx.org/packages/mainline/debian/ bullseye nginx
We can see that each line contains a reference to the release codename bullseye.
$ sudo vi /etc/apt/sources.list
Replace all references to bullseye with stable (except for Nginx) like this:
# Generated by distrobuilder
deb http://deb.debian.org/debian stable main
deb http://security.debian.org/debian-security stable-security main
deb http://deb.debian.org/debian stable-updates main
# Official Nginx repo
deb https://nginx.org/packages/mainline/debian/ bullseye nginx
WARNING – It is not recommended to use stable in the sources.list. Stable always refers to the stable repository of the current Debian version. Once the next Debian version is released in a few years and you upgrade your system, it will break stuff, because everything will suddenly update to the newest version. Keep that in mind.
Avoid using stable in your sources.list as that results in nasty surprises and broken systems when the next release is made; upgrading to a new release should be a deliberate, careful action and editing a file once every two years is not a burden.