After I updated a Debian Wheezy server to Debian Jessie, I was having some problems with VLC. I was using the cvlc to capture and record video streams, but the capture would fail after 2 seconds. A colleague suggested that I leave the OS version alone, but downgrade VLC to confirm that the new version of VLC was causing the problem. A sound idea, but how do you downgrade a Debian package?
I found a variety of helpful sites and came up with the following:
- Add the source for the downgraded package the apt config
- Specify the target release in the apt config
- Use “pinning” to tell apt to use the older versions for the package and its dependencies
- Use
apt-get install
to install the dependencies and the package
Details as follows:
Add the source for the downgraded package the apt config
In this case, I needed to add the
I left my /etc/apt/sources.list
as-is and added the following to /etc/apt/sources.list.d/vlc.list
:
deb http://mirror.cc.columbia.edu/debian/ wheezy main non-free contrib
deb-src http://mirror.cc.columbia.edu/debian/ wheezy main non-free contrib
deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free
deb http://mirror.cc.columbia.edu/debian/ wheezy-updates main contrib non-free
deb-src http://mirror.cc.columbia.edu/debian/ wheezy-updates main contrib non-free
I used Columbia’s mirror because it’s fast and geographically nearer than most of the other mirrors. I’m sure not all of those sources were necessary (there are no security-related packages in VLC) but it didn’t hurt anything to include them.
Specify the target release in the apt config
I added the following to /etc/apt/apt.conf.d/80targetrelease
to specify that I want Jessie to be the target/default release:
APT::Default-Release "jessie";
Use “pinning” to tell apt to use the older versions for package and its dependencies
I created the file /etc/apt/preferences.d/vlc
containing the following. I added to the list of packages as apt-get install
failed due to missing dependencies. The pin-priority 1001 was suggested by several sites to be used only in the case of downgrading a package.
Package: vlc
Pin: release n=wheezy
Pin-Priority: 1001
Package: vlc-data
Pin: release n=wheezy
Pin-Priority: 1001
Package: vlc-nox
Pin: release n=wheezy
Pin-Priority: 1001
Package: libvlc5
Pin: release n=wheezy
Pin-Priority: 1001
Package: libvlccore5
Pin: release n=wheezy
Pin-Priority: 1001
Package: vlc-plugin-notify
Pin: release n=wheezy
Pin-Priority: 1001
Package: vlc-plugin-pulse
Pin: release n=wheezy
Pin-Priority: 1001
Package: xdg-utils
Pin: release n=wheezy
Pin-Priority: 1001
Use apt-get install to install the dependencies and the package
I started by trying to apt-get install vlc
but it complained about missing dependencies. I added the dependencies to the preferences file as describe in the section above, and then was able to install the following packages from Debian Wheezy:
apt-get install libvlccore5
apt-get install vlc-data
apt-get install libvlc5
apt-get install vlc-nox
Alternatively, I believe I could have skipped the preferences file and setting the pin-priorities by specifying the target Debian version when running apt-get install:
apt-get install -t wheezy libvlccore5
apt-get install -t wheezy vlc-data
apt-get install -t wheezy libvlc5
apt-get install -t wheezy vlc-nox
However, I’m not sure that the desired package version would be preserved after running apt-get dist-upgrade
.
References
The following sites were helpful to me while I was figuring out how to do this, and if you are interested in pin-priority and the different values to use in different scenarios, I definitely recommend the first link:
The following list of pin priorities (from Table 2.18 on Chapter 2. Debian package management) may be helpful:
Pin-Priority: apt-pinning effects to the package
1001: install the package even if this constitutes a downgrade of the package
990: used as the default for the target release archive
500: used as the default for the normal archive
100: used as the default for the NotAutomatic and ButAutomaticUpgrades archive
100: used for the installed package
1: used as the default for the NotAutomatic archive
-1: never install the package even if recommended