Wprowadzenie do repozytoriów w systemie GNU/Linux
Spis treści
- Chcę zainstalować program XYZ. Pobrałem paczkę xyz-1.2.3.tar.gz…
- Co to jest menedżer pakietów?
- Jak działa menedżer pakietów?
- Czym są zależności?
- Jaka jest różnica między pakietem a programem?
- Co to jest repozytorium?
- Czy używanie repozytorium jest bezpieczne?
- Czy mogę zainstalować program z pominięciem menedżera pakietów/repozytorium?
- Jakiego menedżera pakietów powinienem używać?
- Dlaczego powstał ten FAQ?
Chcę zainstalować program XYZ. Pobrałem paczkę xyz-1.2.3.tar.gz…
Wróć. W ten sposób instaluje się nowe programy w systemie MS Windows. Używając tego systemu należy pobrać plik instalacyjny (w formacie .exe) i zainstalować program poprzez uruchomienie pobranego pliku. Używając systemu GNU/Linux powinieneś skorzystać z menedżera pakietów.
Co to jest menedżer pakietów?
Menedżer pakietów to specjalny program, którego jedynym celem jest zarządzanie innymi programami (instalowanie ich, aktualizowanie i usuwanie).
To właśnie menedżer pakietów jest programem, którego powinieneś użyć, kiedy chcesz zainstalować nowy program lub usunąć już zainstalowany. Większość menedżerów pakietów oferuje również cały szereg dodatkowych funkcji, takich jak wyszukiwanie pakietów, wstrzymywanie ich (zapobieganie aktualizacji) a nawet podpowiadanie, dlaczego jakiś program jest zainstalowany (lub dlaczego nie może być zainstalowany). Oczywiście menedżer pakietów potrafi również zaktualizować już zainstalowane programy (aktualizacja programu to nic innego jak instalacja nowszej jego wersji w miejsce dotychczasowej). Ponieważ w świecie Linuksa system operacyjny to po prostu zbiór wszystkich zainstalowanych programów, menedżer pakietów potrafi także zaktualizować cały system do najnowszej wersji.
Jak działa menedżer pakietów?
Menedżer pakietów dysponuje dwoma bazami danych: w jednej przechowuje informacje o pakietach zainstalowanych w systemie, w drugiej zaś przechowuje informacje o pakietach dostępnych w repozytorium. Większość wykonywanych przez niego operacji sprowadza się do porównywania tych dwóch baz danych oraz określania relacji występujących pomiędzy poszczególnymi pakietami. Oczywiście menedżer pakietów musi również dbać o to, aby jego lokalna baza danych o stanie repozytorium była zgodna z tym, co rzeczywiście znajduje się w repozytorium.
Zapewne pomocne będzie tutaj podanie kilku przykładów.
Jeżeli chcesz zainstalować nowy program, menedżer pakietów najpierw sprawdza, czy ten program w ogóle jest dostępny w repozytorium; jeśli nie, to kończy pracę. Jeśli zaś jest, sprawdza dodatkowo, w jakiej wersji jest dostępny w repozytorium. Następnie sprawdza czy ten program jest zainstalowany, i jeśli tak, to w jakiej wersji. Jeżeli program jest zainstalowany w tej samej wersji, w jakiej jest dostępny w repozytorium, to menedżer pakietów kończy pracę. Jeżeli zaś program nie jest zainstalowany lub jest zainstalowany w wersji starszej niż dostępna w repozytorium, wtedy menedżer pakietów pobiera program z repozytorium i instaluje go w systemie.
Jeżeli chcesz usunąć jakiś program, menedżer pakietów sprawdza, czy jest on w ogóle zainstalowany. Jeżeli nie, to kończy pracę; w przeciwnym wypadku usuwa z systemu pliki danego programu.
Mówiąc zaś o relacjach między pakietami, chodzi tutaj przede wszystkim o rozwiązywanie zależności (o których niżej) oraz konfliktów między pakietami. Konflikty między pakietami to takie sytuacje, w których jeden program nie może być zainstalowany, kiedy zainstalowany jest inny.
Chociaż brzmi to dość prosto, menedżery pakietów to bardzo zaawansowane programy, których stworzenie wymaga dużej wiedzy i umiejętności.
Czym są zależności?
Odpowiedź na to pytanie wymaga odrobiny wiedzy z architektury programów komputerowych.
Wiele programów komputerowych jest w budowie podobnych do konstrukcji z klocków. Np. odtwarzacz muzyczny składa się między innymi z modułu do dekodowania plików muzycznych, modułu do odtwarzania dźwięków (przesyłania zdekodowanych plików do karty dźwiękowej komputera) oraz modułu do rysowania interfejsu graficznego. Sam odtwarzacz muzyczny jest tak naprawdę swoistym spoiwem łączącym wszystkie te moduły w jedną całość.
Pozostając w sferze muzyki, program komputerowy można porównać do dyrygenta w orkiestrze. Dyrygent nie komponuje muzyki ani nie gra na żadnym instrumencie. Jednak bez niego koncert nie mógłby się udać — dyrygent wyznacza takt i określa, w którym momencie mają odezwać się dane instrumenty. Tak samo programy komputerowe — często same nic nie robią, a jedynie określają, kiedy inne programy mają wykonywać jakieś określone czynności. Takie małe programy służące do wykonywania bardzo wyspecjalizowanych czynności w programowaniu nazywa się bibliotekami.
Większość programów do swojego działania wymaga przynajmniej kilku (czasem nawet kilkudziesięciu) bibliotek. Bez tych bibliotek po prostu nie będą działać. Całokształt programów niezbędnych do działania innemu programowi nazywamy jego zależnościami. Zależności czasem nazywa się wymaganiami.
Tak naprawdę zależności nie są czymś występującym tylko w Linuksie — istnieją one także w Windowsie. Wspomniany wyżej odtwarzacz muzyczny do swojego działania wymaga biblioteki dekodującej pliki MP3. Ponieważ twórca programu nie może mieć pewności, że taka biblioteka znajduje się już w systemie użytkownika, dołącza ją do pliku instalacyjnego swojego programu. Podejście takie zapewnia, że plik instalacyjny jest samowystarczalny, ale powoduje marnotrawstwo miejsca na dysku twardym oraz łącz internetowych. Jeżeli zainstalujemy w systemie trzy różne odtwarzacze muzyczne, wszystkie one będą miały własną bibliotekę do dekodowania plików MP3 — będziemy mieć więc na dysku twardym trzy biblioteki do odtwarzania MP3, chociaż w zupełności wystarczyłaby jedna. Z tego też powodu pliki instalacyjne nawet prostych programów przeznaczonych dla Windowsa zajmują często kilkanaście, a coraz częściej nawet kilkadziesiąt megabajtów.
Twórcy dystrybucji GNU/Linuksa przyjęli inne rozwiązanie problemu zależności. Dzięki wprowadzeniu menedżera pakietów nie ma potrzeby, aby każdy program zawierał w pliku instalacyjnym wszystkie swoje zależności. Program w pliku instalacyjnym zawiera tylko siebie, zaś menedżer pakietów dba o to, aby w systemie były zainstalowane wszystkie jego zależności. Obrazowo: przyjmijmy, że mamy zainstalowany program A, który do działania wymaga biblioteki B. Chcemy teraz zainstalować program C, który również do działania wymaga biblioteki B. Menedżer pakietów sprawdza, że biblioteka B jest już zainstalowana, więc pobiera i instaluje jedynie program C. Dzięki temu pliki instalacyjne programów na Linuksie często zajmują od kilkuset kilobajtów do kilku megabajtów.
(Na marginesie warto dodać, że rozwiązanie problemu zależności jest silnie uzależnione od licencji, na jakiej dystrybuowane jest dane oprogramowanie. Większość programów na Windowsie posiada restrykcyjną licencję i nie wolno ich nawet rozpowszechniać bez zgody producenta. Z tego powodu często programiści nie mogą wykorzystać już istniejących bibliotek, tylko muszą tworzyć własne. Z kolei w świecie Linuksa większość programów udostępnianych jest na wolnych licencjach, dzięki czemu każdy może te programy rozpowszechniać i modyfikować. Programiści mogą więc wykorzystywać już istniejące biblioteki bez obawy o proces sądowy).
Jaka jest różnica między pakietem a programem?
Menedżer pakietów, jak sama nazwa wskazuje, zarządza pakietami, a nie programami. Pakiet to po prostu archiwum zawierające pliki danego programu. Pakiet jest dodatkowo uzupełniony o informacje dla menedżera pakietów, określające przede wszystkim wersję danego pakietu oraz relacje między nim a innymi pakietami (czyli jakie pakiety są jego zależnościami, jakie są z nim w konflikcie, jakie są polecane itd.). Jeden pakiet może zawierać kilka małych programów. I, z drugiej strony, szczególnie skomplikowane programy (takie jak pakiet biurowy LibreOffice) mogą być podzielone na kilka albo wręcz kilkanaście mniejszych pakietów. Dzięki temu bardziej zaawansowani użytkownicy mogą zainstalować tylko pożądane przez siebie programy, oszczędzając tym samym miejsce na dysku twardym (i ciesząc się z dostosowania systemu do swoich potrzeb).
Dla uproszczenia, w tym artykule posługuję się głównie słowem „program”, nawet w tych sytuacjach, gdy mam na myśli „pakiet”.
Co to jest repozytorium?
Repozytorium (często stosuje się skróconą formę repo) to miejsce, w którym przechowywane są pakiety.
Repozytorium składa się z samych pakietów oraz bazy danych zawierającej informacje o pakietach znajdujących się w tymże repozytorium. Menedżer pakietów najpierw pobiera samą bazę danych z repozytorium, a dopiero potem — ewentualnie — pobiera konkretne pakiety. Dzięki temu oszczędza się łącza internetowe.
Repozytorium zazwyczaj znajduje się gdzieś w Sieci (w uproszczeniu można powiedzieć, że jest specjalnego typu stroną internetową). Nic jednak nie stoi na przeszkodzie, aby w roli repozytorium obsadzić jakiś katalog na dysku twardym komputera; mówi się wtedy o repozytorium lokalnym. Repozytorium może się również znajdować na jednej (lub więcej) płycie CD/DVD. Z technicznego punktu widzenia repozytorium na płycie właściwie niczym nie różni się od repozytorium lokalnego, ale większość menedżerów pakietów zawiera specjalne procedury ułatwiające instalację oprogramowania z płyty.
Ponadto repozytoria różnią się wielkością (niektóre zawierają tylko kilka pakietów, a inne dziesiątki gigabajtów danych) i statusem (szerzej na ten temat w odpowiedzi na następne pytanie).
Czy używanie repozytorium jest bezpieczne?
Najlepsza odpowiedź, jakiej można udzielić, brzmi: „to zależy”.
Większość menedżerów pakietów obsługuje dwa podstawowe mechanizmy bezpieczeństwa, zapewniające, że pakiet pobrany na dysk niczym nie różni się od tego, który znajduje się w repozytorium. Są to: porównywanie sum kontrolnych i podpisywanie pakietów kluczem kryptograficznym.
Szczegółowy opis działania tych metod wykracza daleko poza zakres tego artykułu. Co jednak warto podkreślić, żadna z tych metod nie gwarantuje, że oprogramowanie znajdujące się w repozytorium jest bezpieczne. Nawet pomimo zastosowania tych metod nie można mieć pewności, że w programie nie znajduje się szkodliwy kod, np. wysyłający poufne informacje do nieupoważnionych osób.
Z tego względu korzystne jest wprowadzenie kolejnego podziału repozytoriów: na oficjalne i nieoficjalne. Oficjalne to te, które są zarządzane przez twórców danej dystrybucji. W świecie Linuksa status twórcy dystrybucji (zwłaszcza takiej o ugruntowanej renomie) jest uznawany za duże wyróżnienie. M. in. z tego względu pakiety znajdujące się w oficjalnych repozytoriach można uznać za bezpieczne — uzasadnione jest założenie, że nie znajduje się w nich żaden celowo umieszczony tam szkodliwy kod.
Wszystkie inne repozytoria są repozytoriami nieoficjalnymi. Repozytoria takie są bardzo zróżnicowane pod względem tego, kto nimi zarządza. Niektóre z nich są zarządzane prywatnie przez wybranych twórców jakiejś dystrybucji (te czasami nazywa się półoficjalnymi); niektóre są zarządzane przez twórców danego programu (np. VirtualBox); niektóre są zarządzane przez osoby prywatne w żaden oficjalny sposób nie związane z daną dystrybucją.
Pytanie „czy to repozytorium jest bezpieczne?” można przeformułować na pytanie, które lepiej chwyta istotę rzeczy: „czy ufam opiekunowi tego repozytorium?”. Generalnie zdecydowana większość repozytoriów jest bezpieczna. Jednak zwykły użytkownik, który nie potrafi samodzielnie ocenić stopnia bezpieczeństwa danego repozytorium, może przyjąć trochę ostrożniejszy punkt widzenia i ograniczyć się jedynie do repozytoriów oficjalnych. W ten sposób zminimalizuje szansę złapania wirusa albo trojana (które, wbrew powszechnemu mniemaniu, zdarzają się również na Linuksie; są jednak znacznie mniej powszechne).
Czy mogę zainstalować program z pominięciem menedżera pakietów/repozytorium?
Jest to możliwe, jednak nie jest to zalecane, zwłaszcza dla początkujących użytkowników.
Wszystkie pakiety zainstalowane w systemie powinny być zainstalowane za pośrednictwem menedżera pakietów. Podstawowymi zaletami tego rozwiązania są: utrzymanie porządku w systemie oraz bezproblemowe aktualizacje.
Istnieją trzy wyjścia z sytuacji, w której chcesz zainstalować program, którego nie ma w repozytorium. Po pierwsze, można dodać nieoficjalne repozytorium zawierające dany pakiet, o ile takie istnieje. Po drugie, jeżeli dostępny jest pakiet dla danej dystrybucji, należy go pobrać i umieścić w lokalnym repozytorium, skąd następnie można go zainstalować przy pomocy menedżera pakietów. Wreszcie, jeżeli dostępny jest tylko kod źródłowy danego programu, należy stworzyć pakiet źródłowy, który zostanie umieszczony w lokalnym repozytorium źródłowym; menedżer pakietów zajmie się zbudowaniem i instalacją pakietu binarnego. Ewentualnie można zbudować pakiet binarny przy pomocy innych narzędzi a potem umieścić go w lokalnym repozytorium i stamtąd zainstalować przy pomocy menedżera pakietów.
Powyższe techniki uporządkowałem w kolejności od najprostszej do najtrudniejszej. Ostatnia wymaga sporej wiedzy i pewnych umiejętności, i właśnie z tego względu jest zarezerwowana głównie dla zaawansowanych użytkowników.
Jakiego menedżera pakietów powinienem używać?
Takiego, który jest oficjalnie zalecany przez twórców używanej dystrybucji.
Poniższa tabela zawiera zestawienie kilku najpopularniejszych dystrybucji i używanych w nich menedżerów pakietów. Dodatkowo jest uzupełniona o odnośniki do dokumentacji danego menedżera pakietów. Starałem się dobierać dokumentację w języku polskim, ale zazwyczaj jest ona tak niskiej jakości, że dla spokoju sumienia dodaję również odnośniki do rozsądnej dokumentacji w języku angielskim. Bez trudu można również znaleźć bardziej wyczerpujące opisy tych programów, jednak właściwie wyłącznie w języku angielskim.
| Dystrybucja | Menedżer pakietów |
|---|---|
| Mint | Software Manager [EN], Synaptic [PL] [EN], apt-get [PL] [EN], aptitude [PL] [EN] |
| Ubuntu | Software Center [PL] [EN], Synaptic [PL] [EN], apt-get [PL] [EN] |
| Fedora | PackageKit [EN], yum [PL] [EN], rpm [PL] [EN] |
| openSUSE | YaST [EN], Zypper [PL] [EN], rpm [PL] [EN] |
| Mandriva | drakrpm [PL] [EN], urpmi [PL] [EN], rpm [PL] [EN] |
| Debian | aptitude [PL] [EN], Synaptic [PL] [EN], apt-get [PL] [EN] |
Oczywiście powyższa tabela nie jest w żaden sposób wyczerpująca. Uwzględnione są w niej tylko te dystrybucje, po które najczęściej sięgają początkujący użytkownicy.
Ściągawkę zawierającą komendy dla większości menedżerów pakietów w wielu dystrybucjach można znaleźć na stronie DistroWatch (w języku angielskim).
Dlaczego powstał ten FAQ?
Od czasu do czasu na forach i grupach dyskusyjnych poświęconych Linuksowi spotykam się z postami, w których początkujący użytkownicy proszą o pomoc przy kompilacji jakiegoś programu. W większości nie wiedzą oni, że w ogóle nie powinni nic kompilować. W takich momentach mam ochotę odesłać ich do jakiegoś tekstu, który by w prosty i przystępny sposób tłumaczył, w jaki sposób instalować nowe programy na Linuksie. Niestety, dotychczas również z żadnym takim tekstem się nie spotkałem. Próbuję więc uzupełnić tę lukę.
Dokument ten jest więc stworzony z myślą o początkujących użytkownikach. Z tego względu starałem się ograniczyć do minimum kwestie techniczne, które nieinformatyków mogłyby jedynie odstraszać. Jeżeli jednak coś w tym artykule jest niezrozumiałe, koniecznie daj mi znać.