Poldek i multilib

Jacek Konieczny jajcus w jajcus.net
Pon, 15 Maj 2006, 19:32:41 CEST


Poldek z opcją "multilib" w systemie z podwójną architekturą ma
drobny problem polegający na tym, że do usunięcia zaznaczane są pakiety
wszystkich architektur, a nie tylko tej, której dotyczy operacja. Sam RPM
zachowuje się lepiej, bo nie rusza pakietów z innej architektury. Wydaje mi się,
że poprawka do Poldka byłaby banalna, niestety nie umiem znaleźć fragmentu kodu
odpowiedzialnego za wybranie pakietów do odinstalowania. Mógłby się temu
przyjrzeć ktoś lepiej znający Poldka?

Na razie radzę sobie z "just-install" i "uninstall --nodeps --nofollow", ale to
ani wygodne, ani eleganckie.

Poniżej fragmenty sesji z poldkiem i rpmem, z komentarzami:


  poldek:/all-avail> ls -I poldek
  poldek-0.20-6.amd64
  poldek-0.20-6.i686
  2 packages

(aktywne jest tylko amd64, więc i686 mogę usunąć)

  poldek:/all-avail> uninstall poldek-0.20-6.i686
  mark poldek-0.20-6.i686
  mark poldek-0.20-6.amd64
  Processing dependencies...
  There are 2 packages to remove:
  R poldek-0.20-6.i686, poldek-0.20-6.amd64
  Proceed? [y/N]

(... a poldek chce usuwać oba :-()

RPM nie widzi problemu:

  # rpm -e poldek-0.20-6.i686
  #
  
  poldek:/all-avail> ls -I poldek
  poldek-0.20-6.amd64
  1 package

Druga sprawa, to wszelkie upgrade'y w przypadku gdy pakiet (zwykle biblioteka) jest zainstalowany
dla dwóch architektur:

  poldek:/all-avail> ls -I libselinux
  libselinux-1.26-1.i686
  libselinux-1.28-2.amd64
  2 packages
  poldek:/all-avail> upgrade libselinux-1.28-2.i686
  Processing dependencies...
  libselinux-1.26-1.i686 obsoleted by libselinux-1.28-2.i686
  libselinux-1.28-2.amd64 obsoleted by libselinux-1.28-2.i686
    greedy upgrade libselinux-devel-1.26-1.i686 to 1.28-2 (unresolved libselinux = 1.26-1)
      libselinux-devel-1.26-1.i686 obsoleted by libselinux-devel-1.28-2.i686
  error: libselinux.so.1()(64bit) is required by rpm-lib-4.4.2-31.amd64
  error: libselinux.so.1()(64bit) is required by rpm-4.4.2-31.amd64
  error: libselinux.so.1()(64bit) is required by poldek-libs-0.20-6.amd64
  error: libselinux.so.1()(64bit) is required by poldek-0.20-6.amd64
  error: libselinux.so.1()(64bit) is required by pam-libs-0.80.1-9.amd64
  libselinux-1.28-2.i686 marks libsepol-1.10-2.i686 (cap libsepol.so.1)
    libsepol-1.10-2.amd64 obsoleted by libsepol-1.10-2.i686
  There are 3 packages to install (2 marked by dependencies), 4 to uninstall:
  I libselinux-1.28-2.i686
  D libselinux-devel-1.28-2.i686, libsepol-1.10-2.i686
  R libselinux-devel-1.26-1.i686, libselinux-1.26-1.i686, libselinux-1.28-2.amd64, libsepol-1.10-2.amd64 
                                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
  Need to get 184.6KB of archives (184.6KB to download).
  After unpacking 395.8KB will be used.
  error: 5 unresolved dependencies
  There were errors

Sam upgrade robi już RPM, a on taki głupi nie jest. Wystarczy, że dodam --nodeps, żbey poldek olał zależności:

...
  Preparing...                ########################################### [100%]
     1:libselinux-devel       ########################################### [ 33%]
     2:libsepol               ########################################### [ 67%]
     3:libselinux             ########################################### [100%]
  poldek:/all-avail> ls -I libselinux
  libselinux-1.28-2.i686
  1 package

Poldek twierdzi, że usunął pakiet amd64... ale...

  # rpm -q libselinux --queryformat '%{name} %{arch}\n'
  libselinux amd64
  libselinux i686

Po "touch /var/lib/rpm/*" i restarcie poldka:

  poldek:/all-avail> ls -I libselinux
  libselinux-1.28-2.amd64
  libselinux-1.28-2.i686
  2 packages



Pozdrowienia,
        Jacek


Więcej informacji o liście dyskusyjnej pld-devel-pl