Kompajliranje UNIX softverskih paketa

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.

  • Lociranje i preuzimanje izvornog koda (koji je obicno kompresovan)
  • Raspakivanje izvornog koda
  • Kompajliranje koda
  • Instaliranje nastalog izvrsnog fajla
  • Postavljanje putanje do instalacionog direktorijuma

Od gore navedenih koraka, verovatno najteza je faza kompajliranja.

Kompajliranje Izvornog Koda

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.

make i Makefile

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.

configure

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:

  1. cd do direktorijuma koji sadrzi izvorni kod paketa.
  2. Kucajte ./configure da konfigurisete paket za vas sistem.
  3. Kucajte make da kompajlirate paket.
  4. Opcionalno, kucajte make check da pokrenete self-testove koji dolaze sa paketom.
  5. Kucajte make install da instalirate programe i data fajlove i dokumentaciju.
  6. Opciono, kucajte make clean da uklonite binarne pakete programa i objektne fajlove iz direktorijuma izvornog koda

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.

Preuzimanje izvornog koda

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.

Ekstraktovanje izvornog koda

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 

Konfigurisanje i kreiranje Makefile

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.

Build-ovanje paketa

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.

Pokretanje softvera

Sada ste spremni da pokrenete softver (pretpostavljajuci da je sve radilo).

% cd ~/units174

Ako izlistate sadrzaj units direktorijuma, videcete odredjeni broj pod-direktorijuma.

binBinarni izvrsni fajlovi
infoGNU info formirana dokumentacija
manMan stranice
shareSerovani 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

Oduzimanje nepotrebnog koda

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
 
sedmi_tutorijal.txt · Last modified: 2007/07/17 10:29 (external edit)
 
Recent changes RSS feed Creative Commons License Valid XHTML 1.0 Valid CSS Driven by DokuWiki