W pierwszej odsłonie pokazałem jak można wykorzystać dpkg-buildpackage w praktyce w przypadku konfliktów zależności. Jak sam tytuł mówi, dziś będzie o tym samym, tylko z wykorzystaniem innych narzędzi i sposobów. Do dzieła (:
Przy niedawnej aktualizacji systemu, otrzymałem następujący komunikat:
The following packages will be REMOVED:
deluge-torrent gedit libwnck18 notification-daemon python-gnome2-desktop
The following NEW packages will be installed:
libwnck22
The following packages will be upgraded:
libwnck-common libwnck-dev
2 upgraded, 1 newly installed, 5 to remove and 0 not upgraded.
Nie spodobało mi się to z kilku względów:
1) wywala mi gEdita;
2) wywala mi Deluge;
3) nie wiem dlaczego.
Puściłem aktualizację i postanowiłem się temu lepiej przyjrzeć.
Na sam początek, chciałem się dowiedzieć co blokuje instalację gedita:
sudo apt-get install gedit
The following packages have unmet dependencies:
gedit: Depends: python-gnome2-desktop (>= 2.15.90) but it is not going to be installed
E: Broken packages
No dobrze, więc co blokuje instalację python-gnome2-desktop?
sudo apt-get install python-gnome2-desktop
The following packages have unmet dependencies:
python-gnome2-desktop: Depends: libwnck18 (>= 2.18.2) but it is not going to be installed
E: Broken packages
Ach, więc w tym problem. libwnck22 zastąpiło libwnck18 i pojawiły się komplikacje. Zerknijmy na konkrety:
sudo apt-get install libwnck18
The following packages have unmet dependencies:
libwnck18: Depends: libwnck-common (< 2.19) but 2.20.0-1 is to be installed
E: Broken packages
W sumie wszystko jasne. To, czego potrzebuje python-gnome2-desktop, to starsza wersja libwnck, mając python-gnome2-desktop, można zainstalować gedita i deluge, na których to mi zależy. Co więc należy zrobić? Na sam początek, sprawdzić jakie wersje są zainstalowane w systemie:
dpkg -l |grep ii |grep libwnck
ii libwnck-common 2.20.0-1 Window Navigator Construction Kit - common f
ii libwnck-dev 2.20.0-1 Window Navigator Construction Kit - developm
ii libwnck22 2.20.0-1 Window Navigator Construction Kit - runtime
OK, wypadałoby jeszcze sprawdzić “układ” paczek:
apt-cache policy libwnck18
libwnck18:
Installed: (none)
Candidate: 2.18.3-1
Version table:
2.18.3-1 0
500 ftp://ftp.de.debian.org testing/main Packages
100 /var/lib/dpkg/status
Oraz:
apt-cache policy libwnck-common
libwnck-common:
Installed: 2.20.0-1
Candidate: 2.20.0-1
Version table:
*** 2.20.0-1 0
500 ftp://ftp.de.debian.org sid/main Packages
100 /var/lib/dpkg/status
2.18.3-1 0
500 ftp://ftp.de.debian.org testing/main Packages
Czas zacząć działać. Na dobry początek, trzeba usunąć posiadane w systemie libwnck:
sudo apt-get remove libwnck22 libwnck-common libwnck-dev
Teraz trzeba zainstalować tę starszą wersję, libwnck18. Wiadomo, że znajduje się w repozytorium testing, a APT domyślnie instaluje najnowszą możliwą wersję (czyli libwnck22 z unstable). Dlatego “apt-get install” musi zostać napisane z odpowiednim “uzpełnieniem”:
sudo apt-get install libwnck18 --target-release=testing
Teraz swobodnie można by zainstalować paczki gedit i deluge, ale zaraz przy następnej aktualizacji znów zostaną usunięte wymagane paczki i cała operacja pójdzie na marne. Tu z pomocą przychodzi “przypinanie” danych wersji w systemie. W celu zachowania pewnych paczek/bibliotek w danych wersjach w systemie, należy utworzyć i odpowiednio wypełnić plik /etc/apt/preferences:
sudo gedit /etc/apt/preferences
Package: libwnck18
Pin: version 2.18*
Pin-Priority: 1001
Package: libwnck-common
Pin: version 2.18*
Pin-Priority: 1001
Od tego momentu bez obaw można przeprowadzać aktualizację systemu. Należy tylko pamiętać, że wcześniej czy później paczki takie jak python-gnome2-desktop etc. zostaną zaktualizowane do używania libwnck22. Wtedy swobodnie można usunąć plik /etc/apt/preferences (: