Manchmal gibt es mit einer neueren Version eines Paketes Probleme mit Software die es verwendet, so dass man gezwungen ist bei einer älteren Version zu bleiben. apt bietet dafür recht einfache Mechanismen.
Automatisches Downgrade
Natürlich stellt man die Probleme erst fest, wenn das neue Paket installiert ist, als muss erstmal die alte Version wieder her. Die alte Version findet man im Log von dpkg:
$ grep upgrade /var/log/dpkg.log
2014-05-30 10:27:28 upgrade mercurial 2.8.2-1ubuntu1 3.0-1ppa1~precise1
2014-05-30 10:27:28 upgrade mercurial-common 2.8.2-1ubuntu1 3.0-1ppa1~precise1
Hier wurde mercurial von Version 2.8.2 auf 3.0 aktualisiert. Mit etwas Glück kann man mit der alten Versionsnummer einfach auf die alte Version zurück:
sudo apt-get install mercurial=2.8.2-1ppa2~precise1
In dem speziellen Fall funktionierte das bei mir leider nicht:
E: Version '2.8.2-1ppa2~precise1' for 'mercurial' was not found
Manuelles Downgrade
Ein manuelles Downgrade ist eigentlich auch nicht viel Arbeit, eigentlich muss man nur die Pakete manuell herunterladen und direkt mit dpkg -i
installieren. Es kann nur etwas lästig sein Abhängigkeiten zu finden.
wget http://archive.ubuntu.com/ubuntu/pool/universe/m/mercurial/mercurial-common_2.8.2-1ubuntu1_all.deb
wget http://archive.ubuntu.com/ubuntu/pool/universe/m/mercurial/mercurial_2.8.2-1ubuntu1_amd64.deb
sudo dpkg -i mercurial_2.8.2-1ubuntu1_amd64.deb mercurial-common_2.8.2-1ubuntu1_all.deb
Zukünftige Upgrades verhindern
Damit Ubuntu das Paket auch bei zukünftigen Upgrades auf dieser Version hält müssen wir apt das noch mitteilen:
sudo echo "mercurial hold" | sudo dpkg --set-selections
Und schon werden für das Paket keine Updates mehr installiert. Natürlich ist das keine Dauerlösung, wenn man das eigentliche Problem behoben hat und das Update gefahrlos installiert werden kann muss man apt auch das wieder mitteilen:
sudo echo "mercurial install" | sudo dpkg --set-selections
Das ist alles.