Jak naprawdę działa apt-get?


34

Ok, rozumiem, w jaki sposób mogę używać apt-get {install|upgrade|remove} mypackagesdo instalowania, uaktualniania lub usuwania plików binarnych, a także ich plików danych konfiguracyjnych i zależności (w rzeczywistości removeusuwam pliki binarne, chyba że zostaną dostarczone dodatkowe flagi).

Nie szukam sposobu, w jaki jest on używany, jak to manopisuje, ale wysoki poziom tego, co robi. Moim celem końcowym jest stworzenie sposobu na zainstalowanie i zarządzanie niestandardowym oprogramowaniem (utworzonym przez plik make) na wielu zdalnych komputerach i muszę dowiedzieć się więcej o tym procesie. Jeśli odpowiedzi na to pytanie są oparte na używanej dystrybucji, prosimy o dostosowanie do Debiana.

Oprócz ogólnego sposobu działania mam następujące szczegółowe pytania:

  1. W jaki sposób klient uzyskujący dostęp do repozytorium apt śledzi pliki?
  2. Czy repozytorium musi być hostowane w tym samym systemie operacyjnym (tzn. Czy repozytorium apt może być hostowane na serwerze redhat)?
  3. W jaki sposób określa się lokalizacje do zainstalowania plików? Czy jest to określone w .debpliku?
  4. W jaki sposób zdalny komputer uzyskuje dostęp do repozytorium? Czy to tylko ftp (y) czy http (s)?
  5. Czy na komputerze, na którym znajduje się repozytorium, działa specjalne oprogramowanie (takie jak gitlab dla repozytorium git), czy może to tylko jakiś ustrukturyzowany system plików?

Odpowiedzi:


47

Musisz rzucić okiem na https://wiki.debian.org/Packaging - tam samouczek dotyczący pakowania bardzo ci pomoże, a także fragmenty przewodnika dla nowego opiekuna.

Co do twoich pytań, w kolejności:

  1. Repozytorium zawiera pliki „listy”. Np. Http://http.us.debian.org/debian/dists/stretch/main/binary-amd64/Packages.xz . apt-get updatepobiera te pliki list i przechowuje je w /var/lib/apt/lists. Pliki listy zawierają wszystkie pakiety, w tym kilka metadanych i względny adres URL, na którym można znaleźć plik .deb. (Są to pliki tekstowe czytelne dla człowieka, więc możesz po prostu na nie spojrzeć).

  2. System operacyjny nie ma znaczenia. Możesz go hostować w systemie Windows, jeśli chcesz. (Cóż, może masz problemy z nazwami plików, których Windows nie lubi.) (Zobacz także # 4 i # 5).

  3. Tak, jest w pliku deb. Plik deb jest tak naprawdę archiwum (używa ar). Wewnątrz są niektóre pliki tar; jeden z nich jest (zasadniczo) wyodrębniony do /.

  4. To tylko HTTP (lub HTTPS, FTP, lub ... apt-get obsługuje wiele protokołów). Jednak nic specjalnego. Pamiętaj, że istnieją pliki Release podpisane przy pomocy gpg, które gwarantują integralność nawet bez HTTPS. Zwierciadła Debiana najczęściej używają HTTP, a nie HTTP. (Kilka obsługuje również HTTPS dla zachowania poufności).

  5. To tylko uporządkowany system plików.

Szybki przegląd wysokiego poziomu interakcji apt-get ze źródłem pakietu:

  1. Konfigurujesz źródła, które chcesz przeglądać w pliku sources.list. Rozważ linię taką jak:

    deb http://http.us.debian.org/debian/ stretch main
    

    debmówi, że jest to źródło plików .deb (binarnych) gettings; następnie jest prefiks URL, pakiet / wydanie („stretch”) i komponent („main”).

  2. apt-get ma listę architektur, pobiera ją z dpkg. Powiedzmy, że dpkg --print-architecturejest amd64. apt-get może teraz budować adresy URL, z których faktycznie zamierza pobierać, łącząc prefiks URL, słowo „dists”, pakiet, komponent i architekturę. Następnie dodaje do kilku ustalonych nazw plików, takich jak „Packages.xz”. To daje powyższy adres URL (w punkcie 1). Istnieje jeszcze kilka plików o określonych nazwach / ścieżkach, takich jak plik Release http://http.us.debian.org/debian/dists/stretch/Release i jego podpis (to samo, z dołączonym plikiem .gpg). Są to wszystkie (ewentualnie skompresowane) pliki tekstowe. Plik wydania zawiera sumy kontrolne dla innych plików, które apt-get ma pobrać, takich jak Packages.xz.

  3. Plik Packages.xz zawiera listę wszystkich pakietów w tym pakiecie / nazwa kodowa / architektura. Podaje także ścieżkę do tego pliku; na przykład pool/main/0/0ad/0ad_0.0.21-2_amd64.deb.

  4. Gdy poprosisz apt-get o pobranie pakietu, używa tej lokalizacji + podstawowego adresu URL, aby pobrać pakiet, więc pakiet znajduje się na stronie http://http.us.debian.org/debian/pool/main/0/0ad /0ad_0.0.21-2_amd64.deb

  5. Drugi interesujący katalog jest sourcezamiast binary-amd64. To jest używane do twoich deb-srcwpisów; zawiera informacje o pakietach źródłowych (i poza tym jest dość podobny).

  6. Są inne rzeczy (uważam, że wszystkie są opcjonalne), które mogą być częścią repozytorium (tj. Dostępne przez HTTP): różnice między różnymi wersjami pliku Packages.xz; tłumaczenia opisów pakietów, pełną listę każdego instalowalnego pliku i do którego pakietu należy (Contents-amd64.gz, używany np. przez apt-file, a nie przez apt-get) itp. Prawdopodobnie nie są one odpowiednie dla ciebie, ale możesz zobaczyć je wszystkie, przeglądając http://http.us.debian.org/debian/dists/stretch/ ; większość z nich to pliki zwykłego tekstu.

Wszystkie te pliki są zwykłym tekstem. Teoretycznie można je tworzyć ręcznie. W praktyce każdy korzysta z jednego z tych narzędzi do generowania repozytorium . Tutaj - i ostrzegam, że był to wybór dokonany dawno temu, więc może być nieaktualny - używamy mini-deinstalacji. Dane wyjściowe tych narzędzi to zwykłe pliki lub, w najgorszym przypadku, dowiązania symboliczne. Możesz zsynchronizować je z dowolnym serwerem WWW.


Pobij mnie do tego ;-). unix.stackexchange.com/q/285635/86440 obejmuje aspekt integralności rzeczy (punkt 4). Obsługa FTP po stronie lustrzanej została niedawno wyłączona IIRC.
Stephen Kitt,

Odnośnie # 2, debian.org/doc/manuals/distribute-deb/… stwierdza inaczej. Dzięki
użytkownik1032531,

Jeśli chodzi o # 5, jaki jest sens wiki.debian.org/DebianRepository/...
user1032531

1
@ user1032531 # 2. Tworzenie pakietów najlepiej wykonywać na Debianie. Ale twój serwer może być czymkolwiek. (Zazwyczaj tworzysz pakiet na hoście kompilacji, być może nawet całą strukturę repozytorium, a następnie przesyłasz go na serwer WWW.) # 5. Narzędzia te pomagają zbudować ustrukturyzowany system plików, w tym wszystkie pliki list, podpisane pliki wydań itp. (Prawdopodobnie najłatwiej je również uruchomić na Debianie).
derobert

2
Pakiety @FaheemMitha (o pewnej kompresji, współczesne apt woli .xz) są zdecydowanie pobierane, kończy się w /var/lib/apt/lists/. Zawartość jest pobierana przez apt-file i auto-apt.
derobert
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.