5. Instaliranje programa iz paketa (Package Managment System)Instaliranje binarnih paketa je daleko lakse i brze od instaliranja programa iz arhive izvornog koda. Jedan od najboljih, i na GNU/Linux sistemima najkoriscenijih, nacina za ovo je sledeci. Program u binarnom formatu spakujemo u jednu arhivu. Uz program, obicno se tu upisu i nekoliko skripti, kao i dodatne informacije o programu (naziv, verzija, ko je prepakovako, za koju arhitekturu je kompajliran,...). Ovakva arhiva se naziva paketom. Paketi imaju standardnu strukturu i njima se moze baratati specijalizovanim softverom. Taj softver omogucuje instaliranje i uklanjanje paketa i jos neke dodatne funkcionalnosti.
Postoji vise tipova paketa, a najrasprostranjeniji su rpm i deb paketi, pa cemo najvise paznjeobratiti na njih.
Kako izgleda implementacija programa za upravljanje paketima?
Na ovo pitanje cemo odgovoriti samo povrsno, ne upustajuci se dublje u to kako ovi programi rade.
Generalno, paket mozemo posmatrati kako kompresovanu arhivu (obicno je to neka posebna arhiva koja se definse pri projektovanju i implementaciji paketa ili je to neka 'standarda' arhiva kao sto su .tar.gz ili .tar.bz2 arhiva). U toj arhivi se, pre svega, nalaze fajlovi koji se prilikom instaliranja kopiraju na sistem. Distributer softvera planira gde ce se instalirati ovi fajlovi. Korisnik moze da promeni lokaciju na kojoj ce se instalirati fajlovi paketa, ali se ovo, obicno, jako retko radi. Osim ovih fajlova, tu se nalazi i nekoliko skripti. Nakon kopiranja fajlova, pokrece se neka od skripti. Njen zadatak je da napravi inicijalna podesavanja za program koji instaliramo.
Zatim, u paketu se nalaze oznake njegovog imena i verzije. Odmah napravite razliku izmedju imena fajla paketa i imena samog paketa! Softver za rad sa paketima ima jednu internu bazu podataka u kojoj cuva podatke o paketima. U toj bazi paketi se referenciraju po njihovim imenima.
Recimo, naziv fajla naseg paketa moze da bude "gnomebaker_0.6.0-1_i386.deb" dok je naziv ovog paketa "gnomebaker". Naziv fajla paketa se obicno pise tako da sadrzi naziv paketa i njegovu verziju. Kada jednom skinemo ovaj paket sa interneta (ili ga dobavimo na neki drugi nacin), mozemo ga instalirati. Softver za upravljanje paketima ce ovaj paket zapisati u svoju bazu pod nazivom 'gnomebaker'. Ukoliko zatim zelimo da preduzmemo neku akciju nad ovim paketom, recimo da ga uklonimo sa sistema, moramo koristiti njegovo ime zapisano u bazi.
Softver za upravljanje paketima ume da prepozna zavisnosti izmedju paketa. Prepostavimo da je sav softver na nasem sistemu instaliran koriscenjem paketa. Uzmimo primer programa Firefox i biblioteke GTK2: Firefox zavisi od ove biblioteke. Neka se firefox nalazi u paketu firefox.deb a GTK2 biblioteka u libgtk2.deb. Dovoljno je nekako objasniti softveru za upravljanje paketima da pri instaliranju paketa firefox.deb treba da instalira i paket libgtk2.deb. Ovo se radi belezenjem zavisnosti uz ostale podatke o paketu. Znaci, u svakom paketu je zapisano od kojih paketa zavisi. Citanjem tih zapisa i uporedjivanjem sa beleskama o instaliranim paketima koje softver za upravljanje paketima cuva u svojoj internoj bazi, ovaj softver moze zakljuciti da li su zadovoljene sve zavisnosti za instaliranje paketa. Najcesce je zavisnost nesto komplikovanija. Obicno jedan paket zavisi od tacno jdne verzije drugog paketa, ili od verzije drugog paketa koja je "veca ili jednaka" nekoj. Evo kako moze da izgleda lista zavisnosti za jedan paket:

Osim zavisnosti, paketi mogu biti i u nekom drugom odnosu. Najbitnije je istaci da paketi mogu biti u konfliktu. To znaci da ne mogu istovremeno biti instalirati na sistem. Informacije o tome sa kojim paketom je konfliktan su, obicno, zapisane u paketu.
Evo kako mogu da izgledaju sve informacije vezane za jedan paket
Package: nano
Priority: important
Section: editors
Installed-Size: 1624
Maintainer: Jordi Mallach <jordi@debian.org>
Architecture: i386
Version: 2.0.2-1
Replaces: pico
Provides: editor
Depends: libc6 (>= 2.3.6-6), libncursesw5 (>= 5.4-5)
Suggests: spell
Conflicts: nano-tiny (<= 1.0.0-1), pico
Size: 546858
Description: free Pico clone with some new features
GNU nano is a free replacement for Pico, the default Pine editor. Pine is
copyrighted under a restrictive licence, that makes it unsuitable for
Debian's main section. GNU nano is an effort to provide a Pico-like
editor, but also includes some features that were missing in the original,
such as 'search and replace', 'goto line' or internationalization support.
5.1. Paketi tipa .deb (Debian package)Razvoj ovih paketa i menadzera za rukovanje njima je poceo kao jedan od pod-projekata Debiana. Kako je veliki broj distribucija zasnovan (posredno ili neposredno) na Debianu, ova vrsta paketa se prosirila i na brojne druge distribucije. Debianovi paketi imaju vrlo dobru strukturu, a menazder paketa ima brojne komande koje mozete upotrebiti za manipulisanje ovim paketima. Nikako necemo preispitivati sve mogucnosti ovog menadzera paketa, vec cemo se zadrzati na najosnovnijim.
Uz distribucije koje koriste ovaj menzadzer paketa (Debian, sve iz Ubuntu familije, SymplyMepis i jos mnoge) dolazi nekoliko alata za rad za .deb paketima. Pogledajmo prvo program koji zauzima "centralno" mesto medju ovim alatima: dpkg.
dpkg je konzolna aplikacija. Kao argumente ovom programu prenosicemo ime paketa ili ime fajla u kom je paket sacuvan i oznaku neke od radnji koje dpkg treba da obavi nad ovim paketom. Za instaliranje paketa koristicemo opciju -i, odnosno u "dugom obliku" --install. Dakle, .deb paket instaliramo na sistem sa
dpkg -i ime_fajla.deb
ili sa
dpkg --install ime_fajla.deb
Kod ovih komandi je sa ime_fajla.deb oznaceno ime fajla paketa koji zelimo da instaliramo. Ukoliko kmandu ne pozivao iz direktorijuma u kom se ovaj fajl nalazi, moramo navesti potpunu putanju (apsolutnu ili relativnu).
Za uklanjanje paketa sa sistema mozemo koristiti opciju -r, odnosno --remove. Paket sa sistema uklanjamo sa
dpkg -r ime_paketa
ili sa
dpkg --remove ime_paketa
Obratite paznju na to da je ovde sa ime_paketa oznacen naziv samog paketa, ne ime fajla iz kog je instaliran.
Informacije o paketu koji je instaliran mozete dobiti koriscenjem opcije -s, odnosno u "dugom formatu" --status. Pri ovome komanda dpkg, naravno, koristi ime paketa a ne ime fajla. Oblik komande je
dpkg -s ime_paketa
ili
dpkg --status ime_paketa
.
Slicno, informacije o .deb fajlu koji ne mora da bude instaliran na sistem dobijamo pomocu opcije --info. Njoj se prosledjuje ime fajla, odnosno putanja do .deb fajla.
dpkg --info ime_fajla.deb
Prilikom instaliranja .deb paketa na sistem pokrecu se izvesne skripte koje imaju za cilj da izvrse odredjene promene na sisemu koje su neophodne, ili bar pozeljne, za rad upravo instaliranog programa. Tako, na primer, ako instliramo X server, logicno je izvrsiti konfiguraciju fajla xorg.conf i prilagoditi ga konkretnom sistemu (hardveru i instaliranom softveru koji je usko vezan za X server).
Ponekad je potrebno pokrenuti takvu skriptu ponovo. To se moze uraditi komandom `dpkg-reconfigure`. Prenosenjem imena paketa kao argumenta ove komande, ponovo se izvrsavaju skripte za njegovo kofigurisanje. Dakle, komandu pozivamo u obliku
dpkg-reconfigure ime_paketa
Lista konzolnih programa koje sluze za rukovanje .deb paketima je pozamasna. Evo, na primer koji su programi instalirani na mom sistemu a pocinju sa dpkg
dpkg dpkg-genchanges dpkg-scanpackages
dpkg-architecture dpkg-gencontrol dpkg-scansources
dpkg-buildpackage dpkg-name dpkg-shlibdeps
dpkg-checkbuilddeps dpkg-parsechangelog dpkg-source
dpkg-deb dpkg-preconfigure dpkg-split
dpkg-distaddfile dpkg-query dpkg-statoverride
dpkg-divert dpkg-reconfigure
Vecinu ovih alata necete koristiti u svakodnevnom radu. Narocito ne sve mogucnosti koje oni pruzaju. Instaliranje, uklanjanje i rekonfiguracija paketa su najcesce operacije koje cete obavljati nad .deb paketima, i mislim da je za pocetak sasvim dovoljno znati kako se koriste ovih par komandi koje smo prodiskutovali. Ukoliko imate potrebu da obavite neku drugu (ne tako cestu) operaciju nad .deb paketom, pogledajte `man` stranice gore izlistanih komandi i pretrazite internet.
btw: Primetite da je .deb paket obicna .tar.gz arhiva. Mozete ga otvoriti softverom za rad sa regularnim arhivama. Evo kako izgleda jedan paket u Arku:

Osim konzolnih alata, za rad sa paketima postoje i GUI alati. Ukoliko imate neku distribuciju prilagodjenu desktopu i lakoci koriscenja, verovatno cete dvoklikom na .deb paket iz vaseg menadzera datoteka pokrenuti ovakav softver. Ja nikada nisam koristio ovakve programe, tako da ne mogu reci nesto posebno na tu temu. Umesto reci, pokazacu Vam sliku programa KPackage. To je KDE-orijentisana aplikacija i sluzi za rad sa pakerima (.deb, .rpm, ...).

Ovaj alat je vise nego intuitivan, i mislim da cete se lako snaci bilo u ovom bilo u nekom slicnom programu.
5.2. Paketi tipa RPM (Red Hat Package Mandatory)RPM pakete i alate za rad sa njima je razvio Red Hat za potrebe svoje distribucije. Veliko broj distribucija je (neposredno ili posredno) zasnvan na Red Hatu, tako da RPM pakete osim Crvenkape koristi jos mnogo distroa (Mandriva, PC Linux OS, Suse, Fedora, CentOS, ...). Ovo je, verovatno, najpopularniji format paketa.
Kao i za .deb pakete, i za .rpm pakete postoje konzolni alati kojima ovi mogu da se instaliraju, uklone, ... Osnovna alatka se zove `rpm`. Izlaz komande `rpm --help` daje kratak opis fantasticno velikog broja akcija koje mozete izvrsiti koriscenjem ovog alata. Zadrzacemo se samo na instaliranju i uklanjanju ovih paketa.
RPM paket mozete instalirati na sistem sa
rpm -i ime_fajla
odnosno
rpm --install ime_fajla
Opet Vam skrecem paznju da se navodi ime *fajla* a ne ime paketa. Za ukalanjanje paketa koristi se opcija -e ili u dugom obliku --erase. Paket uklanjamo sa sistema komandom oblika
rpm -e ime_paketa
ili u "dugom" obliku
rpm --erase ime_paketa
Promenu verzije paketa na noviju ('upgrade') se moze izvrsiti uz upotrebu opcije -U odnosno --update. Ovo je ekvivalentno uklanjanju strijeg paketa i zatim instaliranju novog. Komanda ima oblik
rpm -U ime_fajla
odnosno
rpm --upgrade ime_fajla
Jos jednom: Obratite paznju kada se navodi ime fajla a kada ime paketa kao argument naredbe `rpm`.
RPM pakete koristi mnogo distribucija sto je dovelo do stvaranja razlicitih GUI alata za rad za ovim paketima. Na zalost, ja ne koristim ove distribucije pa nemam takve alate, ali mogu otvoriti RPM paket programom KPackage.

RPM paket se, takodje, moze otvoriti kao obicna arhiva. Evo kako izgleda jedan paket otvoren aplikacijom "File roller":

Ukoliko zelite da saznate vise stvari o RPM paketima i radu sa njima procitajte prirucnik `man rpm` i pretrazite internet.
5.3. Jos nesto o paketimaPrica o paketima je ovim tek naceta. Raznovrsnost distribucija i menadzera paketa koje dolaze uz njih je velika. Naporno bi bilo i pobrojati sve, a kamoli reci po nesto o njima. Sledi par reci o jos nekim formatima i konceptima vezanih za pakete.
Nikako ne smemo zaobici Slackware i njegov menadzer paketa. Ovo je najstarija ziva distribucija i uz nju dolaze paketi koji imaju prilicno primitivan format. Ekstrnzija ovih paketa je .tgz. Ovi paketi nemaju mogucnost pracenja zavisnosti. Osim alata koji dolaze uz instalaciju Slackware-a, postoje i drugi alati koje je razvila zajednica korisnika. Ti programi su nesto bogatiji mogucnostima. Izmedju ostalog, umeju da razresavaju zavisnosti. Meni ovakav menadzer paketa smeta i to je glavni razlog zbog kog sam odustao od Slackware-a pre nekoliko godina. Ipak, mnogi su odusevljeni ovakvim ponasanjem menadzera paketa.
Postoji dosta distribucija koje su zasnovane na Slackwareu. Veliki broj njih je uneo neke promene u menadzer paketa. Primeri su Zenwalk i KateOS.
Jedna, po menadzeru paketa vrlo specificna, distribucija je Arch. Za potrebe ove distribucije je razvijen mali ali mocan menadzer `pacman`. Ovaj menadzer je prihvatilo jos nekoliko distribucija (npr. Frugalware). Za "Pacman" postoji nekoliko GUI aplikacija koje predstavljaju njegov front-end, i ma koliko Pacman bio dobar, ovi programi su prilicno lose odradjeni.
Sve do sada smo precutno prelazili preko jedne stvari. Razmatrali smo pakete koji predstavljaju binarne programe. Medjutim, postoji jos jedan koncept. Ovaj koncept je predstavljen paketima koji sadrze izvorne kodove programa. Prilikom instaliranja ovakvih paketa, oni se kompajliraju "u pozadini". Ideja je napraviti mehanizam koji kombinuje dobre osobine instaliranja programa iz izvornog koda i instaliranja paketa. Ovakva mogucnost je ostavljena kod sistema koji se zasnivaju na deb ili rpm paketima. Postoje arhive izvornih kodova (obicno sa ekstenzijama .debs i .src.rpm) koje se mogu instalirati na sistem jednom komandom, a nadalje ponasati kao da je instliran odgovarajuci binarni paket. Za razliku od ovog pristupa, postoje distribucije koje forsiraju pakete sa izvornim kodom. Daleko najpopularnija medju njima je distribucija Gentoo. Uz Gentoo dolazi izuzetno dobar menadzer paketa "Portage" koji donosi alate za manipulaciju ovim paketima.
Rad sa ovakvim paketima je nesto sto prevazilazi nivo pocetnika, te se necemo zadrzavati na ovoj temi.
5.4. Tips & tricks(1) Svaka distribucija koristi odredjenu vrstu paketa. Moguce je instalirati i pakete drugog formata, ali je ovo krajnje nepozeljno. Ovim se, na primer, stvaraju problemi pri odredjivanju zavisnosti.
Postoje alati koji mogu da konvertuju pakete iz jednog formata u drugi (npr. alien), ali ovakvi alati obicno ne eliminisu probleme koje donosi instaliranje paketa "stranog" formata.
Instalirajte paket koji nije u formatu "prirodnom" za vasu distribuciju samo ukoliko nemate drugog izbora!
(2) Primetite da se paketi stvaraju za odredjenu distribuciju, cak sta vise za odredjenu verziju te distribucije. Instaliranje paketa koji odgovara drugoj distribuciji (ili drugoj verziji Vase distribucije) moze da se zavrsi neupotrebljivim programom.