Pakiety w systemie Linux to obecnie podstawowa jednostka w tym systemie. Przygotowanie takiej paczki nie należy do zadań łatwych. Dużo czasu należy poświęcić, aby działała w sposób identyczny na różnych architekturach. A przy tym spełniono by wszystkie zależności. U niejednego twórcy powoduje to zawrót głowy. Jednak pomimo tak negatywnego wstępu, gdy się już wdrożymy w sposób konstruowania wymienionych, nabierzemy praktyki, jest o wiele łatwiej. To jak w życiu, gdy nabieramy wprawy w czynnościach, które wykonujemy na co dzień, wykonujemy je z łatwością. Wspominam o tym ponieważ swojego czasu krążyły o tym różne plotki. Przez nie odradzano korzystanie z systemu Linux. Określano go jako bardzo skomplikowanego w administrowaniu.
Jednak prawda jest taka, że jako użytkownik i w wielu przypadkach administrator nie musisz się o to martwić. W większych dystrybucjach Linux wszystkie paczki są porozkładane po repozytoriach i Ty te repozytoria musisz tylko dodać. Następnie możesz przystąpić do instalacji. W wielu wypadkach to nawet takich repozytoriów nie musisz dodawać. Wystarczy, że skorzystasz z wbudowanego menadżera pakietów, gdzie przy użyciu jednego lub dwóch poleceń zainstalujesz potrzebny Ci program.
Ten materiał ma wyjaśnia czym są paczki, czyli inaczej pakiety w systemie Linux. Zobaczysz także, w jaki sposób są one w systemach Linux.
Ostatni webinar w tym roku!
Zapraszamy na bezpłatny webinar poświęcony roli sztucznej inteligencji w zarządzaniu infrastrukturą IT, zarówno w dużych serwerowniach, jak i w środowiskach homelab.
W trakcie wydarzenia dowiesz się, jak AI może wspierać codzienną pracę administratora, pomagając w automatyzacji procesów, monitorowaniu zasobów, analizie danych oraz zwiększaniu efektywności operacyjnej.
Zapisy na: https://asdevops.pl/warsztaty/
Czym jest pakiet / paczka?
Jak wspomniałem na wstępie pakiet jest to paczka i odwrotnie. W języku systemów Linux przyjęły się obie nazwy i oznaczają to samo. Dlatego czy będziesz korzystał z pierwszego, czy z drugiego określenia każdy kto choć trochę zna system zrozumie, o co dokładnie Ci chodzi.
Wspomniany pakiet ma określony zakres czynności. Dlatego można go rozumieć jako program wykonujący wyznaczone działania. Mając określoną liczbę zadań jakie wykonuje zdarza się, aby poprawnie działał potrzebuje innego pakietu. Takie powiązanie zależności jest niezwykle wygodne, ponieważ nie trzeba zawrzeć w kodzie jednego programu wszystkich niezbędnych funkcji. Rozdzielany jest on na mniejsze części. Dzięki temu wiele czynności rozbija się na mniejsze pakiety z zadaniami. Zyskujemy możliwość wykorzystania paczek w innych programach. Oznacza to, że nie musimy wprowadzać do danej paczki niektórych funkcji, ponieważ idealnie zostały one zaprojektowane w już istniejącej.
Początkowo taki schemat może przerażać. Dzięki takiemu podziałowi same paczki zabierają mniej miejsca, przez co wymagają mniejszych zasobów. Dlatego też repozytoria systemów Linux z reguły zawierają ogromną ilość oprogramowania.
Pakiety w systemie Linux – rodzaje
W systemach Linux posiadamy dwa rodzaje pakietów:
- pakiety źródłowe;
- pakiety binarne;
W tej części artykuły chciałbym skupić się nad tymi dwoma zagadnieniami. Chcę, abyś potrafił odróżnić te dwa rodzaje pakietów od siebie oraz zrozumiał, czym się różnią.
Pakiet źródłowy
Pakietem źródłowym nazywamy paczkę, która posiada tylko i wyłącznie pliki z kodem. Aby można było z nich korzystać, należy je najpierw skompilować do postaci pakietu binarnego.
Tego typu rozwiązania nie występuje w systemach Windows. Kod systemowy jest zamknięty, niedostępny dla użytkowników. Natomiast w systemach Linux cały kod jest dostępny i mamy możliwość jego modyfikacji. Rozwiązanie tego typu ma ogromny plus. Jeżeli jesteś programistą, to masz możliwość dostosowania pakietu do własnych potrzeb. Możesz w dowolny sposób ingerować w kod, a następnie skompilować go do postaci programu. Takie rozwiązanie otwiera przed Tobą ogromne możliwości. Nie musisz pisać już tego, co ktoś wcześniej napisał. Możesz skorzystać z jakiejś części takiego kodu, dopisać swoją część, skompilować i masz już dostosowany do własnych potrzeb program.
Jednak pomimo prezentowanego pozytywnego nastawienia do tego rozwiązania, ma ono również swoje minusy. Jednym z nich jest to, że jeżeli w danym pakiecie dokonamy zmian, to możemy doprowadzić do sytuacji, w której program lub system nie będzie funkcjonował w wyznaczony sposób. Dlatego ingerencja w kod wiąże się również z przeprowadzeniem wielu testów.
Jednak powiedz mi jeżeli jesteś programistą, czy jak tworzysz skrypt, program lub też jakbyś to inaczej nie określił to nie wykonujesz testów?
Myślę, że tak. Dlatego nim taka paczka ze zmodyfikowanym kodem wejdzie w ogólny obieg, musi przejść wiele testów. W szczególności paczki, które są odpowiedzialne za samo działanie systemu czy też sprzętu. W związku z tym większość dystrybucji Linux posiada swój zbiór zasad, jakie musi spełnić taka paczka, by oficjalnie można byłoby ją dodać do repozytorium systemowego. Dlatego zagrożenie związane z modyfikacją kodu w większości przypadków dotyczy systemów / środowisk deweloperskich.
Natomiast jeżeli jesteś początkującym użytkownikiem systemu Linux, zawsze możesz skorzystać z rozwiązań jakie oferuje wirtualizacja. Korzystając z systemu wirtualnego mamy taki plus, że dzięki migawce w łatwy sposób jesteśmy w stanie wrócić do poprzedniej funkcjonalności. Dlatego, jeżeli zamierzasz zmodyfikować jakiś pakiet pamiętaj, aby zawsze przed ingerencją w kod programu taką wykonać.
Pakiet binarny
Pakietem binarnym nazywamy paczkę, która jest już gotowa do instalacji. Powstała z kodu źródłowego i jesteśmy w stanie przystąpić do jej instalacji. Dodaje się ją do repozytorium systemowego, jeżeli spełni określone wymagania. Lub jeżeli autor tego nie chce udostępnia ją w dowolny inny sposób. Czyli pakiet binarny jest to wygenerowany program z kodu źródłowego.
Tak naprawdę, w ten sam sposób jest napisany każdy program niezależnie od systemu. Oczywiście są spore różnice między pisaniem oprogramowania na poszczególne systemy operacyjne, ale idea jest taka sama.
Oprogramowanie
Na pierwszy rzut oka można przypuszczać, że takie rozwiązanie bardzo utrudnia pracę z oprogramowaniem. Jednak twórcy bardzo dobrze dopracowali hierarchię podziału paczek oraz co ważniejsze, zarządzania nimi.
Instalacja oprogramowania jest jedną z kluczowych umiejętności w systemach niezależnie jakiego typu. Jeżeli powstałby system, który w standardzie posiadałby zainstalowane wszystkie z możliwych narzędzi, byłby bardzo niewygodny w zarządzaniu. Nie wspominając już o miejscu, jakiego by wymagał. Oczywiście taki system nie powstanie, a raczej nie ma sensu by powstał.
Zaspokojenie wszystkich potrzeb użytkowników jest niemożliwe, dlatego najczęściej po instalacji systemu mamy otrzymujemy tylko podstawowe oprogramowanie. W tym wypadku należy się zastanowić do czego komputer będzie nam służył.
Mam nadzieję, że się mocno nie narażę, ale osobiście uważam, że system Linux nie za dobrze radzi sobie z grami. Przyczyn możemy szukać wiele, jednak jedną z głównych będzie to, że producenci gier, rzadko wydają wersję na system Linux. Od lat przyjęło się, że służy on do wszystkiego oprócz tego. Ma to też związek z kilkoma innymi aspektami, których nie chcę tutaj poruszać. Jednak w związku z tym, nie jestem w stanie zaproponować dystrybucji, która służyłaby do tego celu. Nigdy takiej nie szukałem. Dlatego jeżeli chcesz, musisz skorzystać z google. Z tego co się orientuje, powstało kilka nastawionych na gaming. Nigdy z nich nie korzystałem, dlatego nie chcę się w jakiś sposób na ich temat wypowiedzieć, czy też którąś zaproponować.
Natomiast dążę do tego, że dystrybucji Linux jest bardzo dużo. Każda z nich posiada oprogramowanie, które umieszczono w repozytorium systemowym. W tych repozytoriach nie znajduje się wszystko. Dlatego niektóre z nich mają dane, konkretne zastosowanie.
Dla przykładu:
- dla użytkowników korzystających z komputera w domu najczęściej polecane są dystrybucje takie jak Ubuntu, Linux Mint, Fedora;
- dla użytkowników korzystających z komputerach w biurach polecane są dystrybucje takie jak Debian, Red Hat Enterprise Linux;
- dla serwerów są specjalnie dostosowane wersje systemów Linux jak na przykład Ubuntu Serwer;
Natomiast wymienione dystrybucje możemy podzielić na dwie kategorie. Pierwsza z nich to Debian i systemy oparte o niego, jak na przykład wspomniany Ubuntu i Linux Mint. Drugi jest to system Red Hat Enterprise Linux i systemy oparte o niego, jak na przykład wspomniana Fedora. Może i nie byłoby, żadnego problemu gdyby nie obsługa różnych pakietów oprogramowania.
Otóż w systemie Linux wspomniane dwie główne dystrybucje korzystają z różnych typów pakietów.
W systemie Windows korzystamy z pakietów .exe.
W systemie Debian i z nim spokrewnionych z pakietów .deb.
Natomiast w systemie Red Hat Enterprise Linux i z nim spokrewnionych z pakietów .rpm.
Rodzaj pakietów w systemie Windows podałem, by lepiej zobrazować o co mi chodzi dla użytkowników, którzy korzystają tylko z tego systemu.
Sam podział tych pakietów powoduje to, że nie istnieje jedno ogólne miejsce, z którego każdy system korzysta. W wielu przypadkach jeżeli korzystasz przykładowo z systemu Debian, to możesz używać pakietów przeznaczonych dla Ubuntu i odwrotnie. Jednak jeżeli w którymś z systemów brakuje zależności, czyli paczki lub wersji paczki, z której musi dany pakiet skorzystać, by działał poprawnie, to wtedy powstanie konflikt zależności. Ty oczywiście dostaniesz o tym informację. O tych zależnościach rozmawialiśmy. Jeżeli instalujesz pakiet znajdujący się w repozytorium systemowym i instalujesz ten pakiet w systemie, do którego to repozytorium jest przeznaczone, to szansa braku spełnienia tych zależności jest minimalna. Natomiast jeżeli dodajesz repozytorium do systemu, dla którego nie jest ono przeznaczone, to mogą wystąpić komplikacje. Szczególnie te z zależnościami.
W związku z powyższym zaleca się korzystanie z repozytoriów i pakietów przeznaczonych dla danych dystrybucji lub próba zbudowania własnej paczki z kodu źródłowego.
Repozytorium
Dużo pisaliśmy o repozytorium. Teraz wyjaśnijmy sobie czym ono tak naprawdę jest. W systemie Windows w większej mierze musimy przeszukiwać zasoby stron internetowych by znaleźć jakiś program. Następnie ściągnąć go i zainstalować. Ten tak zwany sklep nie przyjął się wśród użytkowników tego systemu. W Linuksie jest inaczej. Oczywiście opcja ręcznego pobierania programów jest również dostępna, ale w większości przypadków zbędna. Każda dystrybucja Linuksa posiada swoje repozytorium czyli bibliotekę pakietów, z której korzysta.
Do każdego z systemów przydzielono odpowiedni menedżer pakietów, dzięki któremu jesteśmy w stanie zainstalować każdą z dostępnych paczek z dodanych repozytoriów. W tym wypadku nie musimy martwić się o wspomniane zależności, bo to on zainstaluje wszystko automatycznie i zadba o nie. Dlatego też na wstępie tego artykułu wspomniałem, że w dużej mierze użytkownik nie musi się o to martwić. Dla przykładu w dystrybucjach Debian dostępnych jest kilka menedżerów pakietów, jak na przykład apt, apt-get, aptitude. W przypadku Red Hat Enterprise Linux najczęściej stosuje się yum, dnf i zypper.
Dla każdej dystrybucji Linux nie istnieje tylko jedno repozytorium. Może się zdarzyć, że program, który nas interesuje będzie posiadał własne, przeznaczone dla naszej dystrybucji. Niestety przy takiej ilości dystrybucji ciężko jest mi pokazać wszystko. Dlatego w ramach przykładu dla systemu Debian 11 Bullseye zbiór oficjalnych repozytoriów znajduje się pod adresem https://wiki.debian.org/SourcesList. Natomiast przykładem pojedynczego programu posiadającego własne repozytorium jest VirtualBox – https://www.virtualbox.org/wiki/Linux_Downloads
Podsumowanie – pakiety w systemie Linux
Oprogramowanie w systemach Linux skonstruowano w bardzo przemyślany sposób co starałem się zaprezentować w tym materiale. Pakiety w systemie Linux – z początku wydaje się trochę zagmatwane jednak po zapoznaniu się z kilkoma szczegółami możesz dojść do wniosku, że taka konstrukcja stwarza niezliczoną ilość możliwości.