Mi imamo dosta javnih domena i komercijalnih softverskih paketa instaliranih na nasim sistemima, koji su dostupni svim korisnicima. Ipak, studentima je dozvoljeno preuzimanje i instaliranje malih softverskih paketa u njihovom licnom home direktorijumu, softver koji je obicno koristan samo njima.
Postoji nekoliko koraka koji su potrebni za instaliranje softvera.
Od gore navedenih koraka, verovatno najteza je faza kompajliranja.
Sav kod jezika visokog nivoa se mora konvertovati u formu koju kompjuter razume. Na primer, izvorni kod C jezika se konvertuje u jezik nizeg nivoa koji se naziva assembly jezik. Kod assembly jezika nastalog u predhodnoj fazi se onda konvertuje u objektni kod cije delove koda kompjuter direktno razume. Krajnja faza u kompajliranju programa ukljucuje linkovanje objektnog koda u biblioteke koda koje sadrze odredjene ugradjene funkcije. Ova krajnja faza daje izvrsni program.
Rucno pokretanje svih ovih koraka je komplikovano i izvan mogucnosti preosecnog korisnika. Razvijeno je nekoliko korisnih alata za programere i krajnje korisnike da bi se ovi koraci pojednostavili.
Komanda make omogucava programerima da upravljaju velikim programima ili grupom programa. Pomaze u razvoju velikih programa tako sto vodi racuna o tome koji delovi celog programa su se promenili, kompajlirajuci samo one delove programa koji su se promenili od zadnjeg kompajliranja.
Program make dobija svoj set pravila kompajliranja od tekstualnog fajla koji se naziva Makefile koji se nalazi u istom direktorijumu sa izvornim fajlovima. Sadrzi informacije o tome kako kompajlirati softver, tj. nivo optimizacije, dali da ukljuci debugging informacije u izvrsnom fajlu. Isto tako sadrzi i infrormacije o tome gde da instalira kompajlirane binarne pakete (izvrsne fajlove), man stranice, podatke, zavisne biblioteke, konfiguracione fajlove, itd.
Neki paketi zahtevaju od vas da rucno uredite Makefile da podesite krajnji instalacioni direktorijum i ostale parametre. Ipak, mnogi paketi se sada distribuiraju sa GNU konfiguracionim alatima.
Kako se broj UNIX varijacija povecao, postalo je teze pisati programe koji bi se mogli pokretati na svim varijacijama. Razvojni timovi cesto nisu imali pristup svakom sistemu, i karakteristike nekih sistema su se menjale od verzije do verzije. GNU configure i build sistem pojednostavljuje gradjenje programa koji se distribuiraju u izvornom kodu. Svi programi se grade koristeci jednostavni, standardizovani, proces u dva koraka. Programski builder ne zahteva instaliranje nikakvih specijalnih alata da bi izgradio program.
Shell skripta configure pokusava da pogodi tacne vrednosti za razlicite varijable koje sistem zahteva koje se koriste tokom kompajliranja. Koristi te vrednosti da kreira Makefile u svakom direktorijumu paketa.
Najjednostavniji nacin za kompajliranje paketa je:
Configure alatka podrzava sirok dijapazon opcija. Obicno mozete koristiti opciju –help da dobijete listu interesantnih opcija za odredjenu konfiguracionu skriptu.
Jedine genericke opcije koje ce te verovatno koristiti su –prefix i –exec-prefix opcije. Ove opcije se koriste za odredjivanje instalacionih direktorijuma.
Direktorijum imenovan sa –prefix opcijom ce sadrzati nezavisne fjalove u odnosu na masinu kao sto su dokumentacija, podaci i konfiguracioni fajlovi.
Direktorijum imenovan sa –exec-prefix opcijom, (koja je normalno pod-direktorijum –prefix direktorijuma), sadrzace zavisne fajlove u odnosu na masinu kao sto su izvrsni fajlovi.
Za ovaj primer, preuzecemo jedan slobodan sftver koji konvertuje razlicite dimenzione jedinice.
Prvo kreirajte download direktorijum
% mkdir download
Preuzmite softver ovde i sacuvajte ga u vas novi download direktorijum.
Idite u vas download direktorijum i izlistajte sadrzaj.
% cd download % ls -l
Kao sto mozete videti, ime fajla se zavrsava sa tar.gz. Komanda tar stavlja nekoliko fajlova i direktorijuma u jedan jedini tar fajl. Ovo se onda kompresuje koristeci gzip komandu (kreirajuci tar.gz fajl).
Prvo unzip-ujte fajl koristeci gunzip komandu. Ovo ce kreirati .tar fajl.
% gunzip units-1.74.tar.gz
Onda ekstraktujte sadrzaj tar fajla.
% tar -xvf units-1.74.tar
Jos jednom, izlistajte sadrzaj download direktorijuma, onda idite do units-1.74 pod-direktorijuma.
% cd units-1.74
Prva stvar koju trebate uraditi je da pazljivo procitate README i INSTALL tekstualne fajlove (koristite less komandu). Oni sadrze vazne informacije o tome kako kompajlirati i pokrenuti softver.
Units paket koristi GNU configure sistem da kompajlira izvorni kod. Moracemo da odredimo instalacioni direktorijum, posto ce to podrazumevano biti glavna sistemska oblast za koju necete imati prava upisa. Trebamo da kreiramo instalacioni direktorijum u vasem home direktorijumu.
% mkdir ~/units174
Onda pokrenite configure alatku podesavajuci instalacionu putanju na njega.
% ./configure --prefix=$HOME/units174
| BELESKA $HOME varijabla je primer environment varijable. Vrednost za $HOME je putanja do vaseg home direktorijuma. Samo kucajte % echo $HOME da prikazete sadrzaj ove varijable. Vise cemo uciti o environment varijablama u kasnijem poglavlju. |
Ako je configure pravilno zavrsio, onda je kreirao Makefile sa svim neophodnim opcijama. Mozete pregledati Makefile ako zelite (koristite less komandu), ali nemojte menjati njen sadrzaj.
Sada mozete nastaviti i build-ovati paket tako sto cete pokrenuti make komandu.
% make
Nakon par minuta (u zavisnosti od brzine kompjutera), izvrsni fajlovi ce biti kreirani. Mozete proveriti dali se sve uspesno kompajliralo tako sto cete kucati
% make check
Ako je sve u redu, sada mozete instalirati paket.
% make install
Ovo ce instalirati fajlove u ~/units174 direktrijum koji ste ranije kreirali.
Sada ste spremni da pokrenete softver (pretpostavljajuci da je sve radilo).
% cd ~/units174
Ako izlistate sadrzaj units direktorijuma, videcete odredjeni broj pod-direktorijuma.
| bin | Binarni izvrsni fajlovi |
| info | GNU info formirana dokumentacija |
| man | Man stranice |
| share | Serovani data fajlovi |
Da pokrenete program, idite u bin direktorijum i kucajte
% ./units
Kao primer, konvertujte 6 fita u metre.
You have: 6 feet You want: metres * 1.8288
Ako dobijete odgovor 1.8288, cestitamo, radi.
Da vidite koje jedinice se mogu konvertovati, pogledajte data fajl u share direktorijumu (lista je veoma opsirna).
Da procitate punu dokumentaciju, postavite se u info direktorijum i kucajte
% info --file=units.info
Kada se jedan softver razvija, za programera je korisno da ukljuci debugging informacije u krajnji izvrsni fajl. Na ovaj nacin, ako postoje problemi kada se pokrene izvrsni fajl, programer moze da ucita izvrsni fajl u debugging softverski paket i pronadje softverske bug-ove.
Ovo je korisno za programera, ali nepotrebno za korisnika. Mozemo pretpostaviti da je paket, kada bude zavrsen i dostupan za preuzimanje vec testiran i debugg-ovan. Ipak, kada smo kompajlirali softver gore, debugging informacija je jos uvek kompajlirana u krajnji izvrsni fajl. Posto je malo verovatno da ce nam trebati ove debugging informacije, mozemo ih odvojiti od krajnjeg izvrsnog fajla. Jedna od prednosti ovoga je dosta manji izvrsni fajl, koji bi trebalo da radi malo brze.
Ono sto cemo uraditi sada je da pogledamo velicine binarnog fajla pre i posle. Prvo idite u bin direktorijum units instalacionog direktorijuma.
% cd ~/units174/bin % ls -l
Kao sto mozete videti, fajl tezi preko 100 kbajta. Mozete dobiti vise informacije o tipu fajla koristeci komandu file.
% file units units: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), not stripped
Da odvojite sve debug i informacije o broju linija iz binarnog fajla, koristite komandu strip
% strip units % ls -l
Kao sto mozete videti, fajl sada ima 36 kbajta - trecina njegove originalne velicine. Dve trecine binarnog fajla je bio debug kod !!!
Pogledajte opet informacije o fajlu.
% file units units: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), stripped
| SAVET: Mozete koristiti make komandu da instalirate pre-stripped kopije svih binarnih fajlova kada instalirate paket. Umesto da kucate make install, jednostavno kucajte make install-strip |