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 (: