Poglavlje 18 Slackware upravitelj paketima Tabela sadržaja 18.1 Format paketa 18.2 Programi za rad s paketima 18.3 Izrada paketa 18.4 Postavljanje etiketa (tag) i datoteka sa etiketama (tagfile) Paket je skup srodnih programa spremnih za instalaciju. Kada imate arhivu sa izvornim kodom morate je podesiti (configure), kompilirati (make) i instalirati (make install) ručno. Kod softverskih paketa ova tri koraka su već urađena, sve što trebate je instalirati sam paket. Još jedna zgodna mogućnost kod korištenja paketa, je to što ih je lako ukloniti ili nadograditi na noviju inačicu, ukoliko to želite. Slackware dolazi sa aplikacijama za baratanje paketima. Možete ih instalirati, ukloniti, nadograditi, stvoriti, pregledati i ispitati. Postoji mit još od kako je RedHat izdao svoj RedHat upravitelj paketima (RPM), da Slackware nema svoj upravitelj paketima. To jednostavno nije istina. Slackware je uvijek uključivao i upravitelj paketima, čak prije nego je RedHat i postojao. Iako nema sve mogućnosti kao rpm (ili još bolje deb), pkgtool i njegovi pripadajući programi su jednako dobri za instaliranje paketa. Nije istina da pkgtool ne postoji, istina je da ne radi provjere ovisnosti među paketima, što rade dva alata prethodno navedena. Očito mnogi ljudi u Linux zajednici djele mišljenje da upravitelj paketima po definiciji mora uključivati i provjeru među ovisnosti paketa. To jednostavno nije slučaj, jer Slackware svakako to ne radi. Ne treba zaključiti da Slackware paketi nemaju među ovisnosti, već ih njihov upravitelj ne provjerava. Provjera među zavisnosti ostaje na administratoru sustava, i to je način kakav nam se sviđa. 18.1 Format paketa Prije nego se upoznate s alatima za baratanje paketima, trebate se upoznati s formatom samih paketa. Ovo je primjer jednog izmišljenog programa i njegovog paketa: ./ usr/ usr/bin/ usr/bin/makehejaz usr/doc/ usr/doc/makehejaz-1.0/ usr/doc/makehejaz-1.0/COPYING usr/doc/makehejaz-1.0/README usr/man/ usr/man/man1 usr/man/man1/makehejaz.1.gz install/ install/doinst.sh Paketni sustav će otpakirati ovu arhivu u korijenski direktorij i instalirati je. Unos će biti napravljen u bazi podataka instaliranih paketa koji će sadržavati popis svih instaliranih datoteka, tako da kasnije možete nadograditi ili ukloniti paket. Primjetite install/ direktorij. To je poseban direktorij koji može sadržavati skriptu koja će biti izvršena nakon instalacije paketa, nazvanu doinst.sh. U paket se mogu uključiti i druge skripte, ali više o njima možete naći nešto niže, Odjeljak 18.3.2. 18.2 Programi za rad s paketima Postoje četiri glavna programa za upravljanje paketima. Oni izvode instalaciju, uklanjanje i nadogradnju paketa. 18.2.1 pkgtool pkgtool(8) je program baziran na izbornicima s kojim možete instalirati i ukljanjati pakete. Glavni izbornik je prikazan na slici 18-1. Crtež 18-1 Glavni izbornik programa pkgtool Instalacija je ponuđena za (iz) trenutni direktorij, neki drugi direktorij ili sa disketne jedinice. Izaberite željeni način instalacije i pkgtool će pretražiti zadanu lokaciju za ispravnim paketima spremnim za instalaciju. Također možete vidjeti i popis instaliranih paketa, kao što je prikazano na slici 18-2. Crtež 18-2 Pkgtool prikaz instaliranih paketa Ako želite ukloniti neki paket, izaberite "remove" opciju i dobit će te popis svih instaliranih paketa. Označite one koje želite ukloniti i izaberite "OK", pkgtool će ih ukloniti. Neki korisnici preferiraju ovaj program pred alatima za naredbenu liniju. Iako treba naglasiti da ti alati nude mnogo više mogućnosti i opcija. Također mogućnost nadogradnje paketa je moguća samo s alatima za naredbenu liniju. 18.2.2 installpkg installpkg(8) upravlja instaliranjem novih paketa na sustav. Sintaksa je: # installpkg opcija ime_paketa Tri opcije su moguće sa installpkg naredbom, no samo se jedna može koristiti istovremeno. Tabela 18-1. installpkg opcije Opcija Ishod -m Izvršava makepkg naredbu u trenutnom direktoriju. -warn Pokazuje što bi se dogodilo ako instalirate dotičan paket. Ovo je korisno za neke sustave, jer možete vidjeti što bi se desilo prije nego instalirate sam paket. -r Rekurzivno instalira sve pakete u trenutnom direktoriju na niže. Ime paketa može sadržavati zamjenski znak (npr. *). Ako zadate ROOT varijablu okruženju prije pokretanja installpkg, ta putanja će biti korištena za instalaciju umjesto korijenskog (root) direktorija. Ovo je korisno ako npr. želite postaviti drugi disk za novi korijenski direktorij. Obično će biti montirani u direktoriju /mnt ili negdje drugdje a ne u samom korijenskom direktoriju /. Baza podataka svih instaliranih paketa nalazi se u /var/log/packages. Unos u bazi je zapravo obična tekstualna datoteka, po jedna za svaki paket. Ako je paket došao sa skriptom koja se izvršava nakon instalacije ona će biti smještena u /var/log/scripts direktorij. Možete zadati više paketa ili koristiti zamjenske znakove u imenu paketa. No, imajte na umu da vas installpkg neće obavijestiti ako prepisujete preko već instaliranog paketa. Jednostavno će instalirati novi paket preko postojećeg. Ako želite osigurati da su sve datoteke prijašnjeg paketa uredno uklonjene, koristite naredbu upgradepkg. 18.2.3 removepkg removepkg(8) naredba uklanja instalirane pakete sa sustava. Sintaksa je sljedeća: # removepkg opcija ime_paketa Četiri opcije su moguće sa removepkg naredbom, no samo se jedna može koristiti istovremeno. Tabela 18-2. removepkg opcije -copy Paket je kopiran i spremljen u direktoriju za pakete. Ova opcija stvara stablo inicijalnog paketa bez brisanja. -keep Zadržava privremene datoteke stvorene tijekom uklanjanja. Ovo se koristi samo u slučajevima kada tražimo grešku. -preserve Paket je uklonjen, ali njegova kopija pohranjena u paketni direktorij. -warn Simulira uklanjanje paketa. Ako zadate ROOT varijablu okruženju prije pokretanja removepkg, ta putanja će biti korištena za instalaciju umjesto korijenskog (root) direktorija. Ovo je korisno ako npr. želite postaviti drugi disk za novi korijenski direktorij. Obično će biti montirani u direktoriju /mnt ili negdje drugdje a ne u samom korijenskom direktoriju /. removepkg pregledava ostale instalirane pakete, i uklanja samo one datoteke koje su jedinstvene paketu kojeg ste mu zadali za brisanje. Ukoliko je postojala post instalacijaska skripta removepkg će i nju pregledati te ukloniti sve simboličke poveznice (symlink) koje su njome stvorene. Kao i kod installpkg, i ovdje možete zadati više paketa za brisanje ili koristiti zamjenske znakove. 18.2.4 upgradepkg upgradepkg(8) će nadograditi instalirani paket. Sintaksa je sljedeća: # upgradepkg ime_paketa ili # upgradepkg ime_starog_paketa%ime_novog_paketa upgradepkg radi tako što prvo instalira novi paket, a potom briše stari paket, tako osigurava da se na sistemu ne nađu stare datoteke. Ako se ime novog paketa razlikuje od starog, koristite znak postotka (%) da bi ste točno odredili stari paket (instalirani) i novi paket (onaj na koji nadograđujete). Ako zadate ROOT varijablu okruženju prije pokretanja upgradepkg, ta putanja će biti korištena za instalaciju umjesto korijenskog (root) direktorija. Ovo je korisno ako npr. želite postaviti drugi disk za novi korijenski direktorij. Obično će biti montirani u direktoriju /mnt ili negdje drugdje a ne u samom korijenskom direktoriju /. upgradepkg treba oprezno koristiti. Uvijek bi trebali imati sigurnosnu kopiju vaših konfiguracijskih datoteka, ako se desi da budu uklonjene ili prepisane, trebat će vam kopija za vraćanje u prethodno stanje. Kao i sa naredbama installpkg i removepkg i ovdje možete zadati više paketa ili koristiti zamjenske znakove. 18.2.5 rpm2tgz/rpm2targz RedHat upravitelj paketima (RPM) je vrlo popularan i raširen sistem upravljanja paketima. Mnogi distributeri softvera nude svoje proizvode u RPM formatu. Kako ovo nije naš izvorni format, ne preporučamo ljudima da se na njega oslanjaju. Ipak, neke stvari su dostupne samo kao RPM (ponekad čak i sam izvorni kod nekog programa). Slackware dolazi s aplikacijom koja pretvara RPM pakete u naš izvorni .tgz format. Ovo će vam omogućiti da otpakirate paket (npr. naredbom explodepkg) u privremeni direktorij te ispitate njegov sadržaj. rpm2tgz program će stvoriti Slackware paket sa ekstenzijom .tgz, dok će rpm2targz stvoriti arhivu sa .tar.gz ekstenzijom. 18.3.1 Izrada paketa Izrada Slackware paketa može biti laka, ali i teška. Ne postoji specifičan način izrade paketa. Jedini uvjet je da je to tar arhiva kompresirana programom gzip, i ako postoji post instalacijski skrpt, to mora biti /install/doinst.sh. Ako vas zanima izrada paketa za vaš sustav ili mrežu koju održavate, trebate pogledati razne skripte za izradu paketa koje se nalaze u Slackware izvornom stablu. Postoji nekoliko načina kojima se koristimo za izradu paketa. 18.3.1 explodepkg explodepkg(8) će otpakirati paket na isti način kao installpkg, ali neće ga instalirati niti zabilježiti u bazu instaliranih paketa, već samo otpakirati u trenutni direktorij. Ako pogledate Slackware izvorno stablo, vidjet će te kako se ova naredba koristi za pakete koji čine osnovicu onoga kako će završni paket izgledati. Sadrže sve potrebne datoteke (zero-length, nulti-bla?), ovlasti i vlasništva. Skripta za izradu paketa će povezati sve potrebne datoteke iz direktorija u kojem se nalazi izvorni kod sa direktorijem u kojem se izgrađuje paket. 18.3.2 makepkg makepkg(8) će spakirati trenutni direktorij u valjani Slackware paket. Pretražit će stablo direktorija u potrazi za simboličkim poveznicama te dodati "blok" kod-a u post instalacijski skript koji će biti zadužen za rekreiranje poveznica prilikom instalacije paketa. Također će vas upozoriti ako naiđe na prazne datoteke u trenutnom stablu direktorija. Ova naredba se obično pokreće nakon što se izgradili pravilno stablo i hijerarhiju direktorija za paket. 18.3.3 SlackBuild skripte Slackware paketi se izrađuju na više različitih načina, po potrebi. Nisu svi softverski paketi napravljeni od strane samih autora (programera) softvera da bi se kompilirali na isti način. Kod mnogih se mogu uključiti razne opcije prilikom kompiliranja, a te opcije ne moraju biti uključene u Slackware pakete. Možda vam zatreba neka od tih funkcionalnosti; morat će te izraditi vlastiti paket. Srećom većina Slackware paketa dolazi sa SlackBuild skriptom (paketi sa izvršnim kodom, nalaze se na CD 3 i CD 4). Što je dakle SlackBuild skripta? SlackBuild skripta je izvršna skripta školjke koju pokrećete kao root da biste: podesili, kompilirali i izradili Slackware paket. Slobodno možete raditi izmjene u skriptama i pokrenuti ih da bi ste stvorili vlastite verzije Slackware paketa, sa uključenom funkcionalnošću koja vam je potrebna. 18.4 Postavljanje etiketa (tag) i datoteka sa etiketama (tagfile) Program za instalaciju Slackware-a upravlja i instalacijom softverskih paketa na vaš sustav. Postoje datoteke koje kazuju "setup" programu koje pakete mora instalirati, koji su opcioni, i koji su unaprijed odabrani kao podrazumjevani izbor. Datoteka sa etiketama (tagfile) nalazi se u direktoriju sa prvom serijom softvera. Sadrži popis svih paketa u tom određenom "disk-set" i njihov status. Status može biti: Tabela 18-3 Tagfile moguće opcije Opcija Značenje ADD Paket je nužan za pravilno funkcioniranje sustava SKP Paket će biti preskočen (neće biti instaliran) REC Paket nije nužan, ali se njegova instalacija preporuča. OPT Paket je neobvezan, možete ga instalirati po volji. Format je jednostavan: ime_paketa:status Jedan paket po liniji. Izvorna datoteka sa etiketama za svaku seriju softvera se naziva tagfile.org. Tako da, ako upropastite svoju lako možete vratiti izvornu. Mnogi administratori preferiraju pisanje vlastitih tag datoteka i prilikom pokretanja instalacije izabiru opciju "full". Setup program će pročitati tag datoteke i izvršiti instalaciju sudeći po njihovom sadržaju. Ako koristite REC ili OPT tagove, instalacijski program će tražiti od korisnika potvrdu za instalaciju tog određenog paketa. Dakle, preporučljivo je držati se ADD i SKP tagova prilikom pisanja vlastitih datoteka s tagovima za automatske instalacije. Osigurajte da su vaše tag datoteke zapisane na isto mjesto kao i izvorne, ili možete navesti vlastitu putanju do njih.