[ << ]
[ < ]
[ Powrót ]
[ > ]
[ >> ]
1. Wprowadzenie do Portage
Spis treści:
1.a. Witamy w Portage
Portage to najlepszy istniejący program do zarządzania oprogramowaniem. Żadna
inna dystrybucja Linuksa nie może się pochwalić równie kompleksowym,
konfigurowalnym i użytecznym narzędziem jak to napisane przez deweloperów
Gentoo.
Portage zostało napisane w dwóch językach skryptowych, Pythonie i Bashu, dzięki czemu sposób jego
działania jest bardzo przejrzysty nawet dla niezbyt biegłych w programowaniu
użytkowników.
Większość użytkowników pracuje z Portage przy pomocy narzędzia emerge.
Aby uzyskać więcej informacji na temat tego programu, wystarczy wpisać:
Listing 1.1: Czytanie man emerge |
$ man emerge
|
1.b. Drzewo Portage
Ebuildy
Kiedy mówimy o pakietach to tak naprawdę mamy na myśli programy dostępne dla
użytkowników Gentoo w drzewie Portage. Drzewo to jest zbiorem ebuildów,
czyli plików zawierających wszelkie informacje, które są niezbędne do
zarządzania oprogramowaniem (instalacja, wyszukiwanie, inne zapytania...).
Domyślnie kolekcja ebuildów znajduje się w katalogu /usr/portage.
Za każdym razem gdy zażądamy od Portage wykonania jakiegoś zadania związanego z
naszym oprogramowaniem użyje ono jako podstawy swojego działania informacji
zawartych w kolekcji ebuildów. Stąd też warto w miarę często uaktualniać swoje
drzewo Portage tak, aby system wiedział o nowych wersjach programów, poprawkach
do nich, etc.
Uaktualnianie drzewa Portage
Drzewo Portage uaktualniamy zazwyczaj za pomocą narzędzia rsync. Uaktualnienie to wykonuje się w
stosunkowo prosty sposób dzięki jednemu z parametrów polecenia emerge, dzięki
któremu komenda ta zadziała jak nakładka na rsync:
Listing 2.1: Uaktualnianie drzewa Portage |
# emerge --sync
|
Jeśli nie jest możliwe użycie rsync w wyniku jakichś ograniczeń narzuconych
przez różnego rodzaju firewalle to możliwa jest aktualizacja drzewa Portage
przy użyciu jednego z generowanych codziennie snapshotów. Program
emerge-webrsync automatycznie pobierze odpowiednie pliki i zainstaluje
je w systemie.
Listing 2.2: Uruchamianie emerge-webrsync |
# emerge-webrsync
|
1.c. Zarządzanie oprogramowaniem
Wyszukiwanie oprogramowania
Do wyszukiwania w drzewie Portage konkretnych programów można użyć funkcji
wbudowanych w program emerge. Domyślnie emerge --search wypisze
wszystkie zawierające dane wyrażenie nazwy pakietów.
Na przykład poszukajmy wszystkich pakietów zawierających literki "pdf" w
nazwie:
Listing 3.1: Wyszukiwane pakietów z pdf w nazwie |
$ emerge --search pdf
|
By przeszukiwać pakiety również po opisie pakietu, nie tylko po jego nazwie
należy dopisać dodatkowo parametr --searchdesc (lub krócej -S).
Listing 3.2: Wyszukiwanie wszystkich związanych z pdf paczek |
$ emerge --searchdesc pdf
|
Kiedy przyjrzymy się wynikowi tego polecenia zauważymy, że dostarcza on wielu
ciekawych informacji. Zawartość i opisy poszczególnych pól są dość przejrzyste
i nie powinny przysporzyć nikomu problemów. Z tego względu nie będziemy ich tu
szerzej omawiać.
Listing 3.3: Przykładowy wynik polecenia emerge --search |
* net-print/cups-pdf
Latest version available: 1.5.2
Latest version installed: [ Not Installed ]
Size of downloaded files: 15 kB
Homepage: http://cip.physik.uni-wuerzburg.de/~vrbehr/cups-pdf/
Description: Provides a virtual printer for CUPS to produce PDF files.
License: GPL-2
|
Instalowanie oprogramowania
Instalacja znalezionych w ten sposób w Portage programów jest prosta i
sprowadza się do dodania do polecenia emerge nazwy programu do
zainstalowania. Dla przykładu zainstalujemy sobie gnumeric:
Listing 3.4: Instalacja gnumeric |
# emerge gnumeric
|
W związku z tym, że wiele aplikacji do prawidłowego działania potrzebuje innych
programów, instalacja którejś paczki może nieść ze sobą potrzebę zainstalowania
także jej zależności. Nie ma powodu do zmartwień, to nie RPM-y - Portage
doskonale radzi sobie z zależnościami. By dowiedzieć się, jakie zależności
zostaną zainstalowane z danym programem należy dodać przełącznik
--pretend do zwykłej komendy instalującej program. Na przykład:
Listing 3.5: Udajemy, że chcemy zainstalować gnumeric |
# emerge --pretend gnumeric
|
Kiedy zostanie wydane polecenie dla Portage by zainstalowało jakiś program, z
Internetu zostaną pobrane wszystkie niezbędne, nieznajdujące się na dysku pliki
zawierające kod źródłowy. Domyślnie są one przechowywane w katalogu
/usr/portage/distfiles. Następnie program zostanie rozpakowany,
skompilowany i zainstalowany. Aby Portage jedynie pobrało potrzebne pliki,
należy dodać opcję --fetchonly do komendy emerge:
Listing 3.6: Pobieranie kodu źródłowego gnumeric |
# emerge --fetchonly gnumeric
|
Wyszukiwanie dokumentacji do zainstalowanych pakietów
Wiele pakietów jest publikowanych jest wraz z dokumentacją. Czasem flaga USE
doc określa czy dokumentacja dla danego pakietu zostanie zainstalowana
czy nie. Informację o tym czy dany pakiet korzysta z flagi doc można
uzyskać za pomocą następującego polecenia: emerge -vp <nazwa
pakietu>.
Listing 3.7: Sprawdzenie czy pakiet używa flagi doc. |
# emerge -vp alsa-lib
[ebuild N ] media-libs/alsa-lib-1.0.14_rc1 -debug +doc 698 kB
|
Najlepszym sposobem uaktywnienia flagi USE doc jest wykonanie tego dla
jednego pakietu przy użyciu pliku /etc/portage/package.use tak,
aby pobrać dokumentację jedynie dla programu, którym jesteśmy zainteresowani.
Uaktywnienie tej flagi globalnie, może powodować błędy wywoływane przez
zapętlające się zależności. Aby dowiedzieć się więcej należy przeczytać
rozdział podręcznika dotyczący flag USE.
Dokumentacja do zainstalowanego już pakietu na ogół znajduje się w podkatalogu
o nazwie takiej samej jak pakiet, w katalogu /usr/share/doc. Można
wyświetlić listę wszystkich zainstalowanych plików za pomocą narzędzia
equery, które jest częścią pakietu app-portage/gentoolkit.
Listing 3.8: Lokalizowanie dokumentacji pakietu |
# ls -l /usr/share/doc/alsa-lib-1.0.14_rc1
total 28
-rw-r--r-- 1 root root 669 May 17 21:54 ChangeLog.gz
-rw-r--r-- 1 root root 9373 May 17 21:54 COPYING.gz
drwxr-xr-x 2 root root 8560 May 17 21:54 html
-rw-r--r-- 1 root root 196 May 17 21:54 TODO.gz
# equery files alsa-lib | less
media-libs/alsa-lib-1.0.14_rc1
* Contents of media-libs/alsa-lib-1.0.14_rc1:
/usr
/usr/bin
/usr/bin/alsalisp
|
Usuwanie oprogramowania
Do usuwania zainstalowanych programów służy polecenie emerge --unmerge.
Nakaże ono Portage usunięcie wszystkich plików dodanych w procesie instalacji
programu, z pominięciem jednak tych plików, które od instalacji programu
zostały zmienione. Najczęściej chodzi tu o pliki konfiguracyjne, a
pozostawienie ich na dysku umożliwia łatwe wznowienie pracy z programem w
przypadku, gdy w przyszłości program zostanie ponownie zainstalowany.
W tym dość przejrzystym procesie kryje się pewna pułapka: Portage nie
sprawdza czy pakiet, który ma być usunięty nie jest zależnością innego
zainstalowanego programu. Jeśli jednak jest to program niezbędny dla
prawidłowego działania systemu, pojawi się ostrzeżenie.
Listing 3.9: Usuwanie gnumeric z systemu |
# emerge --unmerge gnumeric
|
Gdy program zostanie usunięty, jego zależności nie są usuwane razem z nim, ale
pozostają na dysku. Aby odszukać i usunąć niepotrzebne w systemie zależności
używamy polecenia emerge --depclean. Omówimy je dokładniej nieco
później.
Uaktualnianie systemu
Aby utrzymać swój system w dobrej kondycji (nie wspominając już o instalacji
najnowszych poprawek związanych z bezpieczeństwem), należy dość często go
uaktualniać. W związku z tym, że w tym procesie Portage porównuje zainstalowane
oprogramowanie z ebuildami z drzewa Portage, należy najpierw pobrać jego
aktualną wersję. Kiedy już je zaktualizujemy przychodzi czas na właściwe
uaktualnienie systemu. Dokonujemy tego poleceniem emerge --update world.
W poniższym przykładzie skorzystamy także z opcji --ask, która spowoduje
wyświetlenie listy pakietów do aktualizacji, a następnie pytania czy na pewno
chcemy je zaktualizować.
Listing 3.10: Uaktualnianie systemu |
# emerge --update --ask world
|
Portage znajdzie wszystkie bezpośrednio zainstalowane przez użytkownika
aplikacje (znajdują się ona na liście w pliku
/var/lib/portage/world), ale pominie uaktualnienia ich zależności.
Aby uaktualnić całe oprogramowanie wraz z zależnościami, należy dodać
jeszcze argument --deep:
Listing 3.11: Uaktualnienie całego systemu |
# emerge --update --deep world
|
W związku z tym, że poprawki związane z bezpieczeństwem zdarzają się nie tylko
w programach zainstalowanych bezpośrednio, ale również w ich zależnościach
zalecamy częste uruchamianie tego polecenia.
Jeżeli ostatnio zmieniane były flagi USE,
polecamy również dodanie do całej tej linii poleceń argumentu --newuse.
Portage sprawdzi wtedy czy zmiany we flagach USE niosą ze sobą potrzebę
przekompilowania i przeinstalowania którychś z zainstalowanych programów:
Listing 3.12: Przeprowadzenie pełnego uaktualnienia |
# emerge --update --deep --newuse world
|
Metapakiety
Niektóre z pakietów w drzewie Portage nie mają żadnej zawartości, ale służą do
instalacji całych kolekcji innych pakietów. Doskonałym przykładem takiego
zestawu jest pakiet KDE, który służy do instalowania kompletnego
środowiska graficznego. Możemy dzięki jego istnieniu przy pomocy jednego
polecenia dodać do systemu wszystkie programy, biblioteki oraz zależności
związane z KDE.
Jeśli kiedykolwiek zdarzy nam się posiadać taki pakiety zainstalowany w
systemie, będziemy mieli pewien problem z jego odinstalowaniem. Zwykłe wpisanie
emerge --unmerge poczyni stosunkowo małe spustoszenie w niepotrzebnych
nam już plikach, ponieważ ogromna ilość zależności pozostanie w systemie.
Portage jest w stanie poradzić sobie z tego typu "osieroconymi" zależnościami,
ale najpierw należy w pełni uaktualnić swój system, uwzględniając przy tym
również zmiany we flagach USE. Następnie uruchamiamy wspomniane już wcześniej
polecenie emerge --depclean, aby usunąć "osierocone" zależności, a
kiedy już skończymy je odinstalowywać przebudowujemy wszystkie programy, które
wcześniej były dynamicznie z nimi zlinkowane, a teraz już ich nie potrzebują.
Cały proces sprowadza się do wpisania trzech prostych poleceń:
Listing 3.13: Usuwanie osieroconych zeleżności |
# emerge --update --deep --newuse world
# emerge --depclean
# revdep-rebuild
|
Program revdep-rebuild znajduje się w pakiecie gentoolkit wraz z
kilkoma innymi bardzo przydatnymi programami. Aby używać programu, należy
oczywiście najpierw zainstalować ten pakiet.
Listing 3.14: Instalacja pakietu gentoolkit |
# emerge gentoolkit
|
1.d. Kiedy Portage narzeka
...na sloty, virtuale, gałęzie, architektury i profile
Jak już wcześniej zaznaczaliśmy, Portage jest potężnym narzędziem i posiada
możliwości jakich nie ma żaden inny program do zarządzania oprogramowaniem.
Postaramy się teraz w skrócie przedstawić kilka aspektów pracy z Portage.
W Portage możliwe jest posiadanie kilku różnych wersji jednego programu.
Podczas gdy inne dystrybucje obchodzą problem nadając po prostu takim pakietom
różne numery porządkowe, jak np. freetype i freetype2 Portage
wykorzystuje tu technologię tzw. slotów. Każdy ebuild posiada osobny
slot dla wersji programu, którą reprezentuje, więc ebuildy różnych wersji
programu mogą koegzystować w jednym systemie. Na przykład paczka
freetype posiada ebuildy z ustawionymi wartościami SLOT="1" i
SLOT="2".
Są również pakiety, które wykonują te same czynności, ale w różny sposób.
Doskonałym przykładem takiego programu są loggery systemowe: metalogd,
sysklogd i syslog-ng. Aplikacje, które do prawidłowego działania
potrzebują loggera systemowego nie mogą posiadać w zależnościach jedynie np.
metalogd, ponieważ pozostałe programy z tej grupy również są w stanie
spełnić tę zależność. Do tego właśnie służą Virtuale. Każdy z loggerów
systemowych dostarcza po prostu virtual/syslog, który jest jednocześnie
zależnością dla innych programów.
Oprogramowanie znajdujące się w drzewie Portage jest podzielone na gałęzie.
Domyślnie używana jest gałąź stabilna dla danej architektury. Nowe i
nieprzetestowane programy są dodawane do gałęzi niestabilnej, czyli testowej.
Dopóki ich niezawodność nie zostanie potwierdzona i nie zostaną przeniesione do
gałęzi stabilnej, Portage nie zainstaluje ich, chociaż ebuildy nowszych wersji
będą się znajdowały w drzewie.
Niektóre programy są dostępne tylko dla określonych architektur. Czasem na
innych wcale nie działają, czasem potrzebują jeszcze nieco testów, może się też
zdarzyć, że deweloper danego programu nie ma po prostu czasu lub możliwości,
aby przetestować taki pakiet na różnych architekturach.
Każdej instalacji Gentoo przypisany jest określony profil, który zawiera
między innymi listę pakietów, które są niezbędne do prawidłowego działania
systemu.
Zablokowane pakiety
Listing 4.1: Ostrzeżenie przed blokadą pakietu w Portage (z opcją --pretend) |
[blocks B ] mail-mta/ssmtp (is blocking mail-mta/postfix-2.2.2-r1)
|
Listing 4.2: Ostrzeżenie Portage przed blokadą pakietu (bez opcji --pretend) |
!!! Error: the mail-mta/postfix package conflicts with another package.
!!! both can't be installed on the same system together.
!!! Please use 'emerge --pretend' to determine blockers.
|
W ebuildach znajdują się określone pola, które informują Portage na temat
zależności danego programu. Są dwa rodzaje takich zależności: Zależności
niezbędne do zbudowania programu - deklarowane przez DEPEND oraz
zależności niezbędne do jego uruchomienia - deklarowane jako RDEPEND.
Kiedy któraś z tych zależności jest niekompatybilna z jakimś virtualem lub
pakietem, jest włączana blokada.
Są dwie możliwości na pozbycie się blokady: Nie instalować programu lub usunąć
pakiet, który go blokuje. W podanym powyżej przykładzie mogliśmy wybrać
pomiędzy rezygnacją z instalacji postfix lub usunięciem ssmtp.
Możemy również zauważyć wzajemne blokowanie się pakietów, takich jak na
przykład <media-video/mplayer-bin-1.0_rc1-r2. W tym przypadku
należy zaktualizować pakiet do najnowszej wersji co pomoże usunąć blokadę.
Może również się zdarzyć, że blokują się pakiety, które nie są jeszcze
zainstalowane. W takim rzadkim przypadku należy się dokładnie zastanowić czemu
oba mają być zainstalowane. Zwykle można sobie poradzić tylko z jednym z tych
pakietów. Jeśli nie jest to możliwe prosimy o zgłoszenie błędu.
Zamaskowane pakiety
Listing 4.3: Ostrzeżenie Portage o zamaskowanych pakietach |
!!! all ebuilds that could satisfy "bootsplash" have been masked.
|
Listing 4.4: Ostrzeżenie Portage o zamaskowanych pakietach - z podaniem przyczyny |
!!! possible candidates are:
- gnome-base/gnome-2.8.0_pre1 (masked by: ~x86 keyword)
- lm-sensors/lm-sensors-2.8.7 (masked by: -sparc keyword)
- sys-libs/glibc-2.3.4.20040808 (masked by: -* keyword)
- dev-util/cvsd-1.0.2 (masked by: missing keyword)
- games-fps/unreal-tournament-451 (masked by: package.mask)
- sys-libs/glibc-2.3.2-r11 (masked by: profile)
|
Jeśli zechcemy zainstalować paczkę, która nie jest dostępna dla naszego systemu
dostaniemy właśnie taki komunikat. Możemy wtedy zainstalować inny spełniający
te same funkcje, ale dostępny dla naszego systemu program lub poczekać aż
pakiet zostanie odmaskowany. Maskowanie pakietów nie odbywa się bez przyczyny:
-
Słowo kluczowe ~arch oznacza, że aplikacja nie została jeszcze
dostatecznie sprawdzona na naszej architekturze, aby znaleźć się w gałęzi
stabilnej. Zwykle w takim przypadku wystarczy poczekać kilka dni (rzadziej
tygodni) i spróbować ponownej jej instalacji.
-
Słowo kluczowe -arch lub -* oznacza, że program nie działa na
naszej architekturze. Jeśli jednak aplikacja działa i są dowody na poparcie
tej tezy prosimy o zgłoszenie tego na naszą Bugzillę.
-
Komunikat missing keyword oznacza, że aplikacja nie została jeszcze
przetestowana na tej architekturze. W takim przypadku należy poprosić
któregoś z deweloperów zajmujących się tymi sprawami o przetestowanie
pakietu lub uczynić to własnoręcznie i zgłosić wyniki swoich badań na Bugzillę.
-
Komunikat package.mask oznacza, że pakiet jest uszkodzony,
niestabilny lub co gorsza w ogóle nie nadaje się do użytku.
-
Komunikat z tekstem profile oznacza, że pakiet nie pasuje do naszego
profilu systemowego i gdybyśmy go zainstalowali mógłby zepsuć nasz system.
Brakujące zależności
Listing 4.5: Komunikat Portage o brakujących zależnościach |
emerge: there are no ebuilds to satisfy ">=sys-devel/gcc-3.4.2-r4".
!!! Problem with ebuild sys-devel/gcc-3.4.2-r2
!!! Possibly a DEPEND/*DEPEND problem.
|
Aplikacja, którą próbujemy zainstalować jest zależna od pakietu, który nie jest
dostępny dla danej architektury. Należy sprawdzić na Bugzilli czy problem został już zgłoszony i
ewentualnie go zgłosić, jeśli nie zrobił tego ktoś inny. Jeśli nie są mieszane
różne typów gałęzi Portage w jednym systemie to problem ten nie powinien
wystąpić i zwykle oznacza błąd w drzewie.
Niejasna nazwa pakietu
Listing 4.6: Ostrzeżenie Portage dotyczące niejasnych nazw pakietów |
!!! The short ebuild name "aterm" is ambiguous. Please specify
!!! one of the following fully-qualified ebuild names instead:
dev-libs/aterm
x11-terms/aterm
|
Program, który próbujemy zainstalować ma nazwę, którą posiada więcej niż jeden
pakiet. Aby rozwiązać ten problem wystarczy dokładniej sprecyzować co chcemy
zainstalować dodając przed nazwę programu kategorię, do której on należy.
Wzajemnie od siebie zależne pakiety
Listing 4.7: Ostrzeżenie Portage na temat wzajemnie od siebie zależnych pakietów |
!!! Error: circular dependencies:
ebuild / net-print/cups-1.1.15-r2 depends on ebuild / app-text/ghostscript-7.05.3-r1
ebuild / app-text/ghostscript-7.05.3-r1 depends on ebuild / net-print/cups-1.1.15-r2
|
Sprawa jest prosta. Dwa pakiety (lub więcej), które próbujemy zainstalować są
od siebie wzajemnie zależne i w związku z tym nie mogą zostać zainstalowane.
Oznacza to błąd w drzewie Portage, który zostanie usunięty możliwie najszybciej
od momentu jak pierwszy użytkownik zgłosi ten problem na Bugzillę.
Nieudane pobieranie
Listing 4.8: Komunikat Portage o nieudanym pobieraniu |
!!! Fetch failed for sys-libs/ncurses-5.4-r5, continuing...
!!! Some fetch errors were encountered. Please see above for details.
|
Oznacza to, że Portage nie było w stanie pobrać źródeł żądanej aplikacji, w
związku z czym zostało zmuszone do zrezygnowania z jej instalacji i będzie
instalowało kolejne programy z listy. Błąd najczęściej jest spowodowany
wstawieniem złego adresu serwera w ebuildzie programu lub dlatego, że serwer
lustrzany nie zdążył jeszcze się zsynchronizować. Możliwa jest również
sytuacja, że serwer, na którym znajdują się źródła, z jakichś względów jest
nieczynny.
Należy odczekać około godziny i spróbować ponownie zainstalować program.
Ochrona profilu systemu
Listing 4.9: Ostrzeżenie Portage dotyczące pakietu chronionego profilem systemowym |
!!! Trying to unmerge package(s) in system profile. 'sys-apps/portage'
!!! This could be damaging to your system.
|
Taki komunikat oznacza, że pakiet, który próbujemy usunąć jest kluczowy dla
działania systemu. Znajduje się on na liście profilu systemowego jako niezbędny
i w związku z tym nie zostanie usunięty.
Błędy przy sprawdzaniu plików z sumami kontrolnymi
Czasami przy instalacji pakietu pojawia się następujący błąd:
Listing 4.10: Błąd sprawdzania sumy kontrolnej |
>>> checking ebuild checksums
!!! Digest verification failed:
|
Jest to znak nieprawidłowego działania Portage jednak częściej przyczyną jest
pomyłka dewelopera, który popełnił błąd przy dodawaniu pakietu do drzewa.
Kiedy zobaczymy taki błąd nie należy samemu tworzyć nowych sum
kontrolnych. Wydanie polecenia ebuild coś manifest nie naprawi problemu, a
może go nawet pogłębić!
Zamiast tego powinniśmy odczekać godzinę lub dwie, aż ktoś naprawi uszkodzony
plik. Jest wielce prawdopodobne, że błąd został już zgłoszony jednak musi
upłynąć kilka chwil, zanim prawidłowy plik pojawi się w drzewie Portage. W
czasie gdy będziemy czekać na rozwiązanie, powinniśmy sprawdzić Bugzille czy ktokolwiek już zgłosił problem
z danym pakietem. Jeżeli nie, powinniśmy sami wypełnić i wysłać raport.
Po rozwiązaniu problemu, należy ponownie przeprowadzić aktualizację drzewa
Portage, aby pobrać naprawiony plik z sumami kontrolnymi.
Ważne:
Nie znaczy to, że aktualizację trzeba przeprowadzać kilka razy! Zgodnie
z zapisem w polityce serwerów rsync (w czasie gdy uruchamiamy polecenie
emerge --sync) użytkownik, który zbyt często aktualizuje drzewo zostanie
zbanowany! Lepiej jest poczekać do następnej zaplanowanej aktualizacji niż
niepotrzebnie obciążać serwery rsync.
|
[ << ]
[ < ]
[ Powrót ]
[ > ]
[ >> ]
Materiał udostępniany na podstawie licencji Creative Commons -
Attribution / Share Alike.
|