Swego czasu prowadziłem prezentację z zakresu użytkowania Debianowego systemu zarządzania pakietami jakim jest apt-get. Oto ona.
W poniższej prezentacji postaram się przybliżyć działanie programu apt – jednego z najpopularniejszych managerów pakietów jakim dysponuje środowisko OpenSource. apt (z ang. Advanced Packaging Tool) jest domyślnym zarządcą pakietów w systemie Ubuntu Linux. Dzięki niemu, wydajac jedną komendę jesteśmy w stanie zainstalować każdy z 20 tysięcy(!) programów dostępnych w repozytoriach Ubuntu.
Spis treści |
Wstęp
Apt jest nakładką na zarządce pakietów dpkg, do korzystania z którego ze względu na szerokie zastosowania apt`a nie jesteśmy praktycznie wcale zobowiązani korzystać. Dzięki repozytoriom, w którym znajduje się jak wspomniałem wyżej ok. 20 000 różnych programów możemy założyć z dużą dozą prawdopodobieństwa, że program jaki nas interesuje będzie się znajdował w jedym z nich.
Pakiety (paczki)
Najprościej rzecz ujmując pakiet to skompilowany i spakowany program, którego instalacja trwa kilka sekund. Zasadniczo cała opracja polega na pobraniu źródeł programu przez danego developera, skonfigurowaniu go, skompilowaniu (które jest procesem o wiele dłuzszym) na własnym komputerze oraz spakowaniu tak przygotowanego programu w paczkę. Tak przygotowany pakiet jest oczywiście sprawdzany przez opiekunów danego projektu, dzięki czemu jest wolny od błędów.
Większość systemów korzysta (jeśli w ogóle) z jednego z dwóch typów pakietów:
- deb – pakiety opracowane przez twórów Debiana. Wykorzystuje je m.in. Ubuntu.
- rpm – system paczek opracowany dla RedHata. Wykorzystywany przez Fedorę, Mandrivę, Auroksa i wiele innych.
- tgz –
Repozytoria
Repozytoria to serwery, na których gromadzone są pakiety. Dodanie danego repozytorium do pliku sources.list pozwala nam ściągnąć każdy ze znajdujących się w nim programów. Do czynienia mamy z repozytoriami oficjalnymi (markowanymi przez Ubuntu), oraz nieoficjalnymi (repozytoria poszczególnych programów bądź grup developerskich, jak również osób które mają dostęp do szybkich i pojemnych serwerów na których udostępniają wybrane programy).
Ponadto w jednym repozytorium mogą (i często właśnie tak jest) znajdować się pakiety dla różnych wersji danej dystrybucji. I tak dla Ubuntu mamy w oficjalnych repozytoriach pakiety oznaczone “horay”, “breezy”, oraz “dapper” – odpowiednio dla wersji 5.04, 5.10 oraz 6.06.
Trzecia “zmienna” jaka jest istotna do zdefiniowania repozytorium przez plik sources.list to sekcje. Pakiety zostały posortowane w pewne działy, dzięki którym łatwiej jest je zidentyfikować. Dla Debiana są to m. in. stable, main, contrib oraz non-free (z zaznaczeniem, że non-free oznacza niewolne a nie jak mogłoby się zdawać niedarmowe – znajdują się tam takie programy jak np. wirtualna maszyna Java),a w Ubuntu main, restricted, universe oraz multiverse To od nas zależy które sekcje wybierzemy. Więcej informacji n/t sekcji znajduje się poniżej, w rozdziale sources.list.
Zależności
W programach pisanych na systemy rodziny Windows® każdy stanowi jednolitą całość. Program to nie jeden plik, ale cały zestaw plików, bibliotek i modułów. Takie biblioteki. Każda firma musi rzecz jasna napisać własne, bo źródła innych nie są wolne, nie ma do nich dostępu. 3 firmy piszą 3 biblioteki. W każdej z nich programiści popełniają błędy, bo nikt nie jest idealny. Ale każdy skupia się na swojej bibliotece i bez pomocy innych, obiektywnych programistów czy testerów nie jest w stanie odkryć wszystkich błędów jakie popełnił podczas pisania. W środowisku OpenSource jest odwrotnie. Programiści, pisząc swoje programy wykorzystują biblioteki które są wolnodostępne. Te biblioteki są współdzielone między równymi programami. Takie biblioteki czy nawet programy które wykorzystuje konkretna aplikacja, są nazywane zależnościami. Dzięki temu np. program Gimp (linuksowy odpowiednik Adobe® Photoshop™) zajmuje… 2,7 MiB!
Każda biblioteka jest współtworzona przez wielu programistów, którzy dodają własne poprawki i ulepszenia z każdą kolejną wersja.
Dzięki temu biblioteki takie są coraz szybsze, sprawniejsze, pozbawione błędów i bardziej funkcjonalne.
dpkg
Jak nadmieniłem – apt, który jest nakładką na program dpkg jest na tyle funkcjonalny, że praktycznie uwalnia nas od korzystania z samego dpkg. Jeśli zajdzie taka potrzeba – opiszę szczegółowo wykorzystanie tego programu.
apt a apt-get
apt sam w sobie jest nadal w fazie rozwoju i implementacji. Równolegle rozpoczęto rozwój modułu apt oznaczonego apt-get. Nim też będziemy się zajmować, ponieważ podręcznik programu apt wygląda tak:
NAME apt - Advanced Package Tool SYNOPSIS apt DESCRIPTION APT is a management system for software packages. It is still under development; the snazzy front ends are not yet available. In the mean‐ time, please see apt-get(8). OPTIONS None. FILES None. SEE ALSO apt-cache(8), apt-get(8), apt.conf(5), sources.list(5)
Konfiguracja apt’a
Konfiguracja programu odbywa się za pomocą pliku /etc/apt/sources.list o którym wspomniałem na początku. To jedyny plik który musimy wyedytować aby zmienić konfigurację apt
sources.list
Na początek chciałbym przedstawić swój plik sources.list. Można go śmiało zapisać w katalogu /ect/apt (pakiety dotyczą ubuntu oraz kubuntu). Do tego można użyć komendy:
sudo mv ~/sources.list /etc/apt/sources.list
Z założeniem, że zapisaliśmy nowy plik o treści, która znajduje się poniżej w katalogu domowym.
deb http://pl.archive.ubuntu.com/ubuntu dapper main restricted deb-src http://pl.archive.ubuntu.com/ubuntu dapper main restricted deb http://pl.archive.ubuntu.com/ubuntu dapper-updates main restricted deb-src http://pl.archive.ubuntu.com/ubuntu dapper-updates main restricted deb http://security.ubuntu.com/ubuntu dapper-security main restricted deb-src http://security.ubuntu.com/ubuntu dapper-security main restricted deb http://security.ubuntu.com/ubuntu dapper-security universe deb-src http://security.ubuntu.com/ubuntu dapper-security universe deb http://archive.ubuntu.com/ubuntu dapper universe multiverse deb-src http://archive.ubuntu.com/ubuntu dapper universe multiverse deb http://archive.ubuntu.com/ubuntu dapper-backports main restricted universe multiverse deb-src http://archive.ubuntu.com/ubuntu dapper-backports main restricted universe multiverse deb http://kubuntu.org/packages/kde-latest dapper main deb http://kubuntu.org/packages/amarok-latest dapper main deb http://kubuntu.org/packages/koffice-latest dapper main deb http://packages.freecontrib.org/ubuntu/plf dapper free non-free deb-src http://packages.freecontrib.org/ubuntu/plf dapper free non-free deb http://wine.budgetdedicated.com/apt dapper main deb-src http://wine.budgetdedicated.com/apt dapper main deb http://xgl.compiz.info/ dapper main deb-src http://xgl.compiz.info/ dapper main deb http://www.beerorkid.com/compiz/ dapper main deb http://mirror2.ubuntulinux.nl/ dapper-seveas all deb http://antesis.freecontrib.org/mirrors/ubuntu/plf/ dapper free non-free deb http://www.kadu.net/download/binary/ubuntu/repo dapper main deb-src http://www.kadu.net/download/binary/ubuntu/repo dapper main deb http://morgoth.free.fr/ubuntu dapper-backports main deb-src http://morgoth.free.fr/ubuntu dapper-backports main deb http://deb.svx.pl dapper main universe multiverse deb-src http://deb.svx.pl dapper main universe multiverse
Plik zamieściłem również na serwerze – jest dostępny do pobrania pod adresem http://files.ludwikc.net/trash/linux/sources.list. Więcej repozytoriów można znaleźć w tym wątku na forum ubuntu.pl.
W powyższym przykładzie podane są jedynie repozytoria oparte o protokół http. Należy jednak pamiętać, że program apt-get świetnie radzi sobie również z protokołami ftp czy ssh!
Wprawdzie więcej na temat tego pliku wiedzieć nam nie trzeba, ale należy się słowo komentarza. Pierwsza “kolumna” zaznacza jakiego typu jest pakiet. deb to paczki skompilowane, a deb-src to źródła tychże. Po adresie serwera repozytoriów należy koniecznie podać wersję systemu (p. niżej), a następnie sekcję poprzez sekcję należy rozumieć grupy pakietów, które są dobierane wg tabeli:
Wolne oprogramowanie | Zamknięte oprogramowanie | |
Wspierane | main | restricted |
Niewspierane | universe | multiverse |
Dzięki takiemu podziałowi możemy dokładnie wybrać pakiety z których będziemy korzystać. Przykładowo ograniczając plikowi sources.list dostęp do repozytoriów do sekcji main i universe mamy 100% pewność, że nasz system jest w 100% OpenSource i w 100% legalny.
Przyjęto następującą metodę podawania wersji systemu:
Wersja | Nazwa | Tłumaczenie | Skrót |
---|---|---|---|
4.10 | Warty Warthog | Piegowaty Guziec | warthog |
5.04 | Hoary Hedgehog | Sędziwy Jeż | horay |
5.10 | Breezy Badger | Serdeczny Borsuk | breezy |
6.06 | Dapper Drake | Wytworny Kaczor | dapper |
6.10 | Edgy Eft | Przebiegła Traszka | edgy |
Owy skrót jest bardzo ważny, ponieważ wraz z kolejnymi wersjami systemu mogą np. zmienić się pewne elementy systemu lub ich położenie, którego podanie jest wymagane do prawidłowego przeprowadzenia procesu instalacji.
Użytkowanie
Polecenie apt-get jest dostępne jedynie z konta roota lub dla uprawnionych użytkowników poprzez sudo. Zdecydowanie najczęściej wykorzystywanymi poleceniami programu jest komenda install, remove oraz update.
Aktualizacja
Polecenie służy do aktualizacji repozytoriów, po zamianie zawartości pliku sources.list. . Sprawdzana jest lista repozytoriów, możliwość połączenia się z nimi oraz klucze gpg.
Instalacja
Instalacja oprogramowania w systemie Ubuntu jest najprostszą z możliwych. Sprowadza się ona do wydania jednego polecenia:
apt-get install nazwa_pakietu
W ten sposób mamy dostęp do wspomnianych wyżej dwudziestu tysięcy pakietów.
apt-get za każdym razem wyświetla informację o pakietach jakie są wymagane, aktualizowane oraz sugerowane (te ostatnie nie zostaną pobrane jednak twórcy programu lub paczki zaznaczyli, że te są pomocne w użytkowaniu, choć nie są wymagane do prawidłowego funkcjonowania aplikacji).
root@ludwikc-desktop:/home/ludwikc# apt-get install gaim Czytanie list pakietów... Gotowe Budowanie drzewa zależności... Gotowe Zostaną zainstalowane następujące dodatkowe pakiety: gaim-data libgtkspell0 liblaunchpad-integration0 Sugerowane pakiety: gnome-panel evolution-data-server libzephyr3 Zostaną zainstalowane następujące NOWE pakiety: gaim gaim-data libgtkspell0 liblaunchpad-integration0 0 aktualizowanych, 4 nowo instalowanych, 0 usuwanych i 45 nieaktualizowanych. Konieczne pobranie 1473kB archiwów. Po rozpakowaniu zostanie dodatkowo użyte 13,0MB miejsca na dysku. Czy chcesz kontynuować [T/n]? n Przerwane. root@ludwikc-desktop:/home/ludwikc#
Na koniec podsumowania zostaje wyświetlone potwierdzenie chęci przeprowadzenia instalacji, na które trzeba odpowiedzieć klawiszem t lub n. Pytanie to jest wyświetlane jednak tylko w przypadku, gdy oprócz żądanego pakietu wymagane jest pobranie zależności badź aktualizacji innych pakietów. W momencie gdy wybieramy aplikację, która takowych nie wymaga instalacja przebiega automatycznie do samego końca.
root@ludwikc-desktop:/home/ludwikc# apt-get install wmfishtime Czytanie list pakietów... Gotowe Budowanie drzewa zależności... Gotowe Zostaną zainstalowane następujące NOWE pakiety: wmfishtime 0 aktualizowanych, 1 nowo instalowanych, 0 usuwanych i 45 nieaktualizowanych. Konieczne pobranie 16,5kB archiwów. Po rozpakowaniu zostanie dodatkowo użyte 102kB miejsca na dysku. Pob: 1 http://archive.ubuntu.com dapper/universe wmfishtime 1:1.24-4 [16,5kB] Pobrano 16,5kB w 5s (2941B/s) Zaznaczenie poprzednio niezaznaczonego pakietu wmfishtime. (Odczytywanie bazy danych ... 85526 plików i katalogów obecnie zainstalowanych.) Rozpakowanie wmfishtime (z .../wmfishtime_1%3a1.24-4_i386.deb) ... Konfigurowanie wmfishtime (1.24-4) ... root@ludwikc-desktop:/home/ludwikc#
Od tego momentu program wmfishtime jest dostępny w systemie. Bardzo proszę o przyznanie racji osobom, które utrzymują, że instalacja oprogramowania pod linuksem jest trudna 🙂
Usuwanie
Proszę też takim osobom zaznaczyć, że odinstalowywanie jest jeszcze trudniejsze. Oto przykład:
root@ludwikc-desktop:/home/ludwikc# apt-get remove wmfishtime Czytanie list pakietów... Gotowe Budowanie drzewa zależności... Gotowe Następujące pakiety zostaną USUNIĘTE: wmfishtime 0 aktualizowanych, 0 nowo instalowanych, 1 usuwanych i 45 nieaktualizowanych. Konieczne pobranie 0B archiwów. Po rozpakowaniu zostanie zwolnione 102kB miejsca na dysku. Czy chcesz kontynuować [T/n]? T (Odczytywanie bazy danych ... 85536 plików i katalogów obecnie zainstalowanych.) Usuwanie wmfishtime ... root@ludwikc-desktop:/home/ludwikc#
I po pakiecie…
Ważna informacja: zależności nie są usuwane wraz z pakietem, nawet jeśli są wykorzystywane tylko przez usuwany pakiet! Jeśli chcemy usunąć zależności, musimy byc pewni, że nie są one wykorzystywane przez inne pakiety. Do usunięcia takich pakietów (a właściwie ich odnalezienia) przydaje sie narzędzie deborphan. Jak je znaleźć? Patrz apt-cache 🙂
Dodatkowe opcje
Każde z poleceń ma dodatkowe opcje. np.
- -d – tylko pobranie pliku, bez instalacji
root@ludwikc-desktop:/home/ludwikc# apt-get -d install wmfishtime Czytanie list pakietów... Gotowe Budowanie drzewa zależności... Gotowe Zostaną zainstalowane następujące NOWE pakiety: wmfishtime 0 aktualizowanych, 1 nowo instalowanych, 0 usuwanych i 45 nieaktualizowanych. Konieczne pobranie 16,5kB archiwów. Po rozpakowaniu zostanie dodatkowo użyte 102kB miejsca na dysku. Ukończono pobieranie w trybie samego pobierania root@ludwikc-desktop:/home/ludwikc#
- -s – symulacja instalacji
root@ludwikc-desktop:/home/ludwikc# apt-get -s install wmfishtime Czytanie list pakietów... Gotowe Budowanie drzewa zależności... Gotowe Zostaną zainstalowane następujące NOWE pakiety: wmfishtime 0 aktualizowanych, 1 nowo instalowanych, 0 usuwanych i 45 nieaktualizowanych. Inst wmfishtime (1:1.24-4 Ubuntu:6.06/dapper) Conf wmfishtime (1:1.24-4 Ubuntu:6.06/dapper) root@ludwikc-desktop:/home/ludwikc#
Dwie ostatnie linijki (Inst – instalacja, Conf – konfiguracja) potwierdzają, że instalacja przebiegnie bez błędów.
- –reinstall – usunięcie i ponowna instalacja pakietu znajdującego się juz w systemie.
Inne możliwości
apt-cache
Oprócz apt-get program apt posiada więcej wbudowanych funkcji, jaknp. bardzo przydatne apt-cache (czyt. apt-kesz), ktore na podstawie wykonanego wcześniej apt-gaet update pozwala na odczytywanie z pamięci takich informacji jak np. podsumowanie pakietu lub wyszukiwanie go spośród listy repozytoriów.
Informacje o pakiecie
Na przykładzie programu GRUB:
root@ludwikc-desktop:/home/ludwikc# apt-cache show grub Package: grub Priority: optional Section: admin Installed-Size: 748 Maintainer: Grub Maintainers <pkg-grub-devel@lists.alioth.debian.org> Architecture: i386 Version: 0.97-1ubuntu9 Depends: libc6 (>= 2.3.4-1), libncurses5 (>= 5.4-5) Suggests: grub-doc, grubconf Filename: pool/main/g/grub/grub_0.97-1ubuntu9_i386.deb Size: 362200 MD5sum: b331cdd615a96933db0dc34042cb0964 Description: GRand Unified Bootloader GRUB is a GPLed bootloader intended to unify bootloading across x86 operating systems. In addition to loading the Linux kernel, it implements the Multiboot standard, which allows for flexible loading of multiple boot images (needed for modular kernels such as the GNU Hurd). Bugs: mailto:ubuntu-users@lists.ubuntu.com Origin: Ubuntu root@ludwikc-desktop:/home/ludwikc#
W kolejności wiersze oznaczają:
- nazwę pakietu
- priorytet
- sekcję
- rozmiar po zainstalowaniu
- właściciela pakietu
- architekurę pod jaką został zoptymalizowany
- wersję
- zależności
- pliki zalecane do instalacji
- ścieżkę na serwerze repozytorium
- rozmiar paczki
- sumę MD5
- opis pakietu
- adres pod którym można zgłaszać błędy
- system, pod jaki został przygotowany dany pakiet
Statystyki repozytoriów
Pocecenie apt-cache stats pozwala na przejrzenie statystyk naszych repozytoriów:
root@ludwikc-desktop:/home/ludwikc# apt-cache stats Liczba nazw pakietów : 24259 (970k) Zwykłych pakietów: 18854 Czysto wirtualnych pakietów: 358 Pojedynczych pakietów wirtualnych: 1047 Mieszanych pakietów wirtualnych: 201 Brakujących: 3799 W sumie różnych wersji: 20974 (1007k) W sumie zależności: 149842 (4196k) W sumie zależności wersja/plik: 22137 (354k) W sumie mapowań zapewnień: 3543 (70,9k) W sumie dopasowanych napisów: 174 (2246) Sumaryczny rozmiar obszaru zależności od wersji: 679k Sumaryczny rozmiar niewykorzystanego miejsca: 92,2k Całkowity rozmiar: 6692k root@ludwikc-desktop:/home/ludwikc#
W nawiasach podano podano liczbę tzw. pakietów wirtualnych. Ich powstanie wiązało się z tym, że dany pakiet był znany pod różnymi nazwami, więc aby uniknąć problemów z ich wyszukiwaniem postanowiono utworzyć “aliasy”, które są dzisiaj pakietami wirtualnymi.
Podsumowanie
Możemy przejrzeć krótkie podsumowanie plików znajdujących się w repozytoriach. Służy do tego polecenie
apt-cache dump
(czyt. damp).
Uwaga: Wcześniej wyświetliliśmy ilość pakietów znajdujacych się w repozytoriach. Wykonanie polecenia dump może być czasochłonne, a do tego nie bedziemy w stanie wszystkoiego odczytać. W związku z tym trzy podpowiedzi:
Jeśli chcemy wyświetlać listę “stronami” (lista jest bardzo długa!) należy polecenie dump wpuścić w potok less
apt-cache dump | less
Zapisanie listy w pliku odbywa się poprzez polecenie
apt-cache dump >> mojalista.txt
Możemy też w dowolnym momencie przerwać wykonywanie polecenia poprzez uzycie skrótu klawiaturowego
Ctrl+C
(Skrót ten działa zawsze w konsoli, niezależnie od wykonywanego polecenia!)
Zależności
Sprawdzenie zależności umożliwia polecenie depends
apt-cache depends nazwa pakietu
Wyszukiwanie
apt-cache ma dwie funkcje wyszukiwania. Pierwszą jest poszukiwanie wyrażenia w całości podsumowania pliku, a druga to sprawdzanie początków nazw paczek
apt-cache search wyrażenie
Należy jednak zwrocić uwagę, że to polecenie poszukuje ciągu znaków “wyrażenie” we wszystkich polach informacji o danym pakiecie, dlatego w komunikacie zwrotnym mogą znaleźć się paczki pozornie zupełnie z poszukiwanym ciągiem znaków nie związane. Daje nam ono jednak szanse na odnalezie programów związanych z danym tematem, np: usenet (czyt. juznet) – czyli grupami dyskusyjnymi.
apt-cache pkgnames począt
To polecenie wyszukuje nazwy pakietów wg ciągu znaków podanego jako argument polecenia. Przykładowe począt może stanowić ciąg dla wyszukiwania początek-nazwy-pakietu lub początkowe-nauczanie ale nie nauczanie-początkowe!
Aktualizacja systemu UbuntuLinux
Dzięki programowi apt możemy bezboleśnie, w kilku krokach przeprowadzić aktualizacje całego systemu. Sprowadza się to do wydania kolejno komend:
apt-get update apt-get upgrade apt-get dist-upgrade
Całość trwa jakiś czas, ponieważ z reguły potrzebne jest pobranie bardzo wielu pakietów. Mój rekord aktualizacji Ubunutu (z wersji breezy do dapper) to 10 godzin, bez używania płytki CD. Przy używaniu płyty czas ten skraca się do godziny.
Ze wszystkim można sobie poradzić i do wszystkiego mamy wolny dostęp – możemy aktualizować system przez godzinę lub 10. Wszystko zależy od nas.
A jak mówi dewiza jednego z linuksowych portali: Przywróć radość użytkowaniu komputerów. Używaj Linuksa!
[tags]ubuntu, linux, apt, howto[/tags]
Dobre. Przydałoby się jeszcze tylko pokrótce opisać bardzo wygodne ustrojstwo, jakim jest apt-file oraz funkcję autoremove, która pojawiła się całkiem niedawno 😉
Przydalby sie opis jak zapuscic aktualizacje z plyty CD z nowym ubuntu
bo samo wpisanie plytki do list zrodel nic nie daje
W twoim howto przydałoby się jeszcze opisać apt-cdrom, aptitude (lepiej sprawdza zależności niż apt), oraz wajig (nakładka na apta i dpkg – wygodniejsza bo łatwiej zapamiętać komendy).
PS: zmieniłem adres bloga więc przydałoby się żebyś go uaktualnił w swoim blogrollu
PS2: spamkarma nie generuje ci obrazków dla captchy
Dzięki za uwagi. Uaktualnie wkrótce oryginalny wpis w wiki, prezentację tutaj zamieszczoną pozostawię jednak bez zmian, żeby w przyszłości wiedzieć co pominąłem 😉
Zastanawiam się nad analogicznym opisaniem pacmana, bo z apt’em juz nie mam do czynienia na codzien.
[…] Originally posted here: Ludwik C. Siadlak :: blog » Blog Archive » Zarządzanie pakietami … […]
article…
Ludwik C. Siadlak :: blog » Blog Archive » ZarzÄ dzanie pakietami (apt i pochodne)…
cliquez ici…
Ludwik C. Siadlak :: blog » Blog Archive » ZarzÄ dzanie pakietami (apt i pochodne)…
lire la suite…
Ludwik C. Siadlak :: blog » Blog Archive » ZarzÄ dzanie pakietami (apt i pochodne)…