Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2011-03-12 20:19:43

  ArnVaker - Kapelusznik

ArnVaker
Kapelusznik
Skąd: Midgard
Zarejestrowany: 2009-05-06

APT i pakiety dostępne w tych samych wersjach

To że wersja pakietu jest taka sama nie znaczy, że faktycznie jest to dokładnie ten sam pakiet. Dodatkowo sprawdzane są jeszcze sumy kontrolne (?), zatem APT odróżnia pakiety tylko mające tę samą wersję od pakietów rzeczywiście identycznych.

Przykład — ten sam pakiet unzip dostępny jest w gałęziach stable oraz testing Debiana:

Kod:

unzip:
  Zainstalowana: 6.0-4
  Kandydująca:   6.0-4
  Tabela wersji:
 *** 6.0-4 0
        500 http://ftp.de.debian.org/debian/ stable/main amd64 Packages
        990 http://ftp.de.debian.org/debian/ testing/main amd64 Packages
        100 /var/lib/dpkg/status

Utworzyłem własny pakiet unzip w takiej samej wersji jak dostępne w repozytorium i zainstalowałem go przez dpkg:

Kod:

unzip:
  Zainstalowana: 6.0-4
  Kandydująca:   6.0-4
  Tabela wersji:
     6.0-4 0
        500 http://ftp.de.debian.org/debian/ stable/main amd64 Packages
        990 http://ftp.de.debian.org/debian/ testing/main amd64 Packages
 *** 6.0-4 0
        100 /var/lib/dpkg/status

Jak widać źródła w których dostępny jest ten pakiet nie są już wymienione bezpośrednio pod sobą. Jest tak właśnie dlatego, że APT odróżnia pakiet dostępny w repozytoriach od tego mojego, który aktualnie zainstalowany jest w systemie.

======================

Pierwszeństwo ma pakiet mający wyższy priorytet. Zainstalowany już pakiet zawsze ma priorytet wynoszący 100, domyślnie priorytet pakietów dostępnych w repozytoriach wynosi 500. Zatem jeżeli pakiet z zewnętrznego źródła zainstalowany został ręcznie, a w repozytorium dostępny jest pakiet w tej samej wersji, standardowo APT będzie chciał go zaktualizować do wersji dostępnej w repozytorium (i to tym o wyższym priorytecie jeżeli dostępny jest w kilku).

Jeżeli pakiet dostępny jest w różnych repozytoriach w tej samej wersji, a nie jest pakietem dokładnie tym samym, ponadto te różne wersje mają taki sam priorytet, pierwszeństwo ma pakiet... No właśnie, który? ;) Z moich obserwacji wynika, że ten który jest wyżej w tabelce. Przykład — umieściłem swój pakiet unzip w lokalnym repozytorium, w sources.list zostawiłem jego repozytorium oraz repozytorium testing:

Kod:

deb http://ftp.de.debian.org/debian/ testing main
deb file:/usr/local/portage stuff/

Kod:

unzip:
  Zainstalowana: 6.0-4
  Kandydująca:   6.0-4
  Tabela wersji:
     6.0-4 0
        990 http://ftp.de.debian.org/debian/ testing/main amd64 Packages
 *** 6.0-4 0
        990 file:/usr/local/portage/ stuff/ Packages
        100 /var/lib/dpkg/status

Pakiet był przeznaczony do aktualizacji i go zaktualizowałem:

Kod:

amidala portage # safe
Następujące pakiety zostaną zaktualizowane:  
  unzip 
1 pakietów aktualizowanych, 0 instalowanych, 0 do usunięcia i 0 nie aktualizowanych.
Do pobrania 190 kB archiwów. Zajęte po rozpakowaniu: 381 kB.
Kontynuować? [T/n/?] 
Pobieranie:1 http://ftp.de.debian.org/debian/ testing/main unzip amd64 6.0-4 [190 kB]
Pobrano 190 kB w 0s (255 kB/s)
(Odczytywanie bazy danych ... 76795 files and directories currently installed.)
Przygotowanie do zastąpienia unzip 6.0-4 (wykorzystując .../archives/unzip_6.0-4_amd64.deb) ...
Rozpakowanie pakietu zastępującego unzip ...
Przetwarzanie wyzwalaczy dla man-db...
Konfigurowanie unzip (6.0-4) ...
                                             
Bieżący status: 0 aktualizacji [-1].

- wyłączam lokalne repozytorium w sources.list
- aptitude update
- włączam lokalne repozytorium w sources.list umieszczając jego wpis powyżej repozytorium Debiana:

Kod:

deb file:/usr/local/portage stuff/
deb http://ftp.de.debian.org/debian/ testing main

- aptitude update
- efekt:

Kod:

unzip:
  Zainstalowana: 6.0-4
  Kandydująca:   6.0-4
  Tabela wersji:
     6.0-4 0
        990 file:/usr/local/portage/ stuff/ Packages
 *** 6.0-4 0
        990 http://ftp.de.debian.org/debian/ testing/main amd64 Packages
        100 /var/lib/dpkg/status

Pakiet przeznaczony jest do aktualizacji:

Kod:

amidala portage # safe -Vs
Następujące pakiety zostaną zaktualizowane:  
  unzip [6.0-4 -> 6.0-4]  
1 pakietów aktualizowanych, 0 instalowanych, 0 do usunięcia i 0 nie aktualizowanych.
Do pobrania 0 B/2334 B archiwów. Zwolnione po rozpakowaniu: 381 kB.
Kontynuować? [T/n/?]

Sama zamiana miejscami wpisów repozytoriów w sources.list nie powoduje ich zamiany w wyniku apt-cache policy, nie powoduje tego też sama kolejność dodawania repozytoriów. Wychodzi mi na to, że znaczenie ma pozycja (poniżej/powyżej) na której został dodany wpis repozytorium przed pierwszym pobieraniem z niego listy pakietów (gdy w systemie nie ma list z niego pochodzących). Faktycznie tak jest czy po prostu za długo nad tym siedzę? ;) A jeśli jest inaczej, to jak?

======================

Mam jeszcze drugie pytanie. Jak wynika z tego posta, APT rozróżnia nieidentyczne pakiety dostępne w tych samych wersjach. Wracając do wątku który kiedyś założyłem: http://forum.dug.net.pl/viewtopic.php?id=18155...

Kod:

pcmanfm:
  Zainstalowana: (brak)
  Kandydująca:   0.9.7-1
  Tabela wersji:
     0.9.9-0~frickel.1 0
        400 http://frickelplatz.de/debian/ sid/main amd64 Packages
     0.9.8-1 0
        200 http://pl.archive.ubuntu.com/ubuntu/ natty/universe amd64 Packages
     0.9.8-1 0
        980 http://ftp.pl.debian.org/debian/ unstable/main amd64 Packages
     0.9.7-1 0
        990 http://ftp.pl.debian.org/debian/ testing/main amd64 Packages
     0.5-3 0
        500 http://ftp.pl.debian.org/debian/ stable/main amd64 Packages

Ładnie pokazuje, że wersja 0.9.8-1 z repozytorium Debiana to nie ten sam pakiet co to sama wersja z repozytorium Ubuntu.

Kod:

lxmenu-data:
  Zainstalowana: (brak)
  Kandydująca:   0.1.1-1
  Tabela wersji:
     0.1.1-1 0
        200 http://pl.archive.ubuntu.com/ubuntu/ natty/universe amd64 Packages
        990 http://ftp.pl.debian.org/debian/ testing/main amd64 Packages
        980 http://ftp.pl.debian.org/debian/ unstable/main amd64 Packages
     0.1.1-1~bpo50+1 0
        102 http://backports.debian.org/debian-backports/ lenny-backports/main amd64 Packages

Tutaj natomiast twierdzi, że zarówno w repozytorium Debiana jak i Ubuntu znajduje się dokładnie ten sam pakiet. Ja jednak wiem, że w rzeczywistości tak nie jest. Wystarczy sprawdzić ich rozmiar — różnią się. Dlaczego APT o tym nie wie i na jakiej dokładnie podstawie on to określa?

PS Wątek oczywiście zainspirowany przez Tomeku. :)

Offline

 

#2  2011-03-12 22:10:01

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: APT i pakiety dostępne w tych samych wersjach

ArnVaker napisał(-a):

Jeżeli pakiet dostępny jest w różnych repozytoriach w tej samej wersji, a nie jest pakietem dokładnie tym samym, ponadto te różne wersje mają taki sam priorytet, pierwszeństwo ma pakiet... No właśnie, który? ;)

If two or more versions have the same priority and version number but either the packages differ in some of their metadata or the --reinstall option is given, install the uninstalled one.

Offline

 

#3  2011-03-12 23:37:43

  ArnVaker - Kapelusznik

ArnVaker
Kapelusznik
Skąd: Midgard
Zarejestrowany: 2009-05-06

Re: APT i pakiety dostępne w tych samych wersjach

Nie kumam tego zdania (wiem że to z man apt_preferences :)).

If two or more versions have the same priority and version number

Zgadza się...

but either the packages differ in some of their metadata or the --reinstall option is given

Zakładając, że to właśnie to odróżnianie tych samych wersji pakietów przez APT-a, to jak najbardziej...

install the uninstalled one

Gdyby tak faktycznie było, to chyba przy każdym dist-upgrade zmieniałby te wersje pakietów. Jednak nie robi tego, zmienia tylko wtedy gdy w wyniku apt-cache policy pakiet niezainstalowana wersja jest wyżej. Sprawdzałem to kilka razy.

======================

Jeszcze odnośnie tego, które repozytorium jest wyżej w sources.list — to nie tylko mój pomysł.

http://wiki.debian.org/AptPreferences#NotesfromZugSchlus

In case of several packages with the same version, apt-get picks the one from the distro listed first in sources.list

W ogóle plik /etc/apt/preferences działa na takiej zasadzie — wpis znajdujący się wyżej nadpisuje te znajdujące się niżej, kolejność ma znaczenie. Tylko w tym przypadku to jest jakieś strasznie pokręcone, ale to co napisałem wcześniej wydaje się potwierdzać u mnie za każdym razem.

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)