Compiling Programs from Source

1

Compiling Programs from Source

offline
  • Pridružio: 20 Apr 2003
  • Poruke: 2416
  • Gde živiš: NS

Compiling Programs from Source


Sooner or later when using Linux you will hear the term "compile from source". This can be intimidating the first time you hear it, but once you understand what it is and how it works you will find it is actually quite simple. You may ask yourself why you would want to use source when there are package management systems like rpm and apt. While these tool do make things easy, there are a few drawbacks to using them. First you have to depend on someone to actually do the packaging. This means when a new version comes out you may not be able to install it until the package is updated. You can always go grab the source. Packages are also compiled to the lowest common denominator. Options that many people may need are enabled and all others are disabled. This means that if the feature you want isn't compiled into the package or you want things installed to fit your system exactly source is the only option.

To compile a program from source you do need a few things. Some distros call this the development package. Minimally you will need make, a compiler (usually gcc), the appropriate libraries and a few other basic programs. If you encounter any problems the error message should tell you what you are missing. After correcting the problem you may need to delete the file called config.cache before configure will recognize your changes.

We are now ready to install a basic program. The first thing you need to do is download the source. For this article the program we are installing will be called LinuxQuestions. You will want to download the source to the following directory: /usr/local/src (in this case the filename is linuxquestions.tar.gz). Once downloaded you want to do the following:

tar zxf linuxquestions.tar.gz
cd linuxquestions
./configure
make
make test (optional)
make install


The first command will unzip and untar the downloaded file. You will then need to change into the appropriate directory. Most standard packages will be installed using the ./configure && make && make install process. You should always read the packages instructions which will usually be found in either README or INSTALL. By running ./configure you are doing two basic things: 1) letting the program detect if you have everything it needs installed and where it is 2) telling the program what options you would like it compiled with. The options in questions can range from just a few to literally hundreds. Running

./configure --help | less

will allow you to see the available options. Once configure runs through and you have verified that there are no errors you can continue with make. This step does the actual compiling of the program. Depending on what program you are compiling and the machine you are on this can take anywhere from a few seconds to a few hours. The make test step is optional, but it is a good practice to get into. It will verify that everything is ok and the program operates properly. It should be noted that all steps up to now should be performed by a normal non-root user. The last step however needs to be executed with root permissions. It needs to be run as root as this step will actually copy the compiled programs to your system. If you made it this far you should be able to run the program just as any other program installed on your system. If you ever need to recompile a program you should do a make clean (or make distclean) before doing so. This will delete files created during the previous compile and give you a clean tree.

One notable exception to the previous instructions is perl programs. To install perl programs from source (you can also use CPAN) you need to do the following:

tar zxf linuxquestions-perl.tar.gz
cd linuxquestions-perl
perl Makefile.PL
make
make test (optional)
make install


You will notice that many of the steps are the same with the notable exception of ./configure vs. perl Makefile.PL.

If you ever encounter problems compiling from source the error should clearly state what you are missing or why it is failing. If you need to post to linuxquestions.org remember to post the complete error message you are getting and what steps you took.

http://www.linuxquestions.org/questions/answers/15



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Peca  Male
  • Glavni Administrator
  • Predrag Damnjanović
  • SysAdmin i programer
  • Pridružio: 17 Apr 2003
  • Poruke: 23211
  • Gde živiš: Niš

neko ce da otkuca i ovo (optional) kad kuca make test Smile



offline
  • Pridružio: 01 Okt 2004
  • Poruke: 351
  • Gde živiš: Qrshumliya

Evo u prilog jedan moj tekstic, sa jednog drugog foruma:

Softver na linuxu dolazi ili u obliku izvornog koda ili u obliku binarne arhive.

1. Instalacija programa iz izvornog koda

Prednosti ovakve distribucije programa su sledece: Imate citav kod aplikacije koji mozhete da menjate prema svojim afinitetima; Arhive sa izvornim kodom su obichno manje za download od binarnih kompajliranih verzija programa; Mozete ih kompajlirati na raznim sistemima; program je nakon kompajliranja na Vasoj masini optimizovaniji (citaj: brze radi) negoli program instaliran kao binarni paket. Mane su sledece: Za instalaciju je potreban odgovarajuci kompajler na sistemu na kom se program instalira (obicno je to gcc); Cesto su potrebne odgovarajuce biblioteke.

Izvorni kod programa se obichno nalazi u vidu neke arhive (tar.gz, tar.bz2, ...) Da bi se instaliralo program, potrebno je najpre raspakovati datu arhivu. To mozete uraditi iz X-a, koristeci neku aplikaciju za rad sa arhivama, obichno je to Ark ili FileRoller. One su dovoljno intuitivne da ce se svako ko je bar jednom video WinZip ili slichan program snaci u istom. Mozhete raspakovati arhivu i iz shell-a
Citat:$ tar xfvz ime_paketa

Nakon shto ste raspakovali arhivu, udjite u direktorijum u koji je raspakovana. Strogo je preporuchljivo u ovom trenutku prochitati sadrzhaj fajlova README i/ili INSTALL koji se obichno nalaze u tom direktorijumu. Tu su vishe-manje detaljno opisani nachini instalacije programa. Nadalje cemo se baviti samo 'standardnim' nacinom instalacije, tj. onom najceshcom varijantom za instaliranje softvera iz izvornog koda.

Nakon shto ste ushli u direktorijum u kom je raspakovana arhiva sa > $ cd /put/do/dira < ukucajte:
Citat:$ ./configure
'confirure' je shell skripta koja se obichno nalazi u direktorijumu u kom je raspakovana arhiva sa izvornim kodom. Shta ona radi? Ova skripta ima dva glavna zadatka: prvo, proverava da li su na sistemu instalirane sve potrebne biblioteke i kompajleri koji su potrebni za kompajliranje izvornog koda. Ukoliko nisu, program ne mozhete kompajlirati! Drugo, ukoliko skripta configure nadje da su uslovi za instalaciju zadovoljeni, napravice fajl 'Makefile', ili vishe takvih fajlova (obicno za svaki poddirektorijum po jedan).
Makefile je fajl koji sadrzhi u sebi spisak 'targeta' i komandi koje se izvrshavaju pozivom tog 'target-a'. Npr. ukoliko postoji 'target' sa imenom nesto, kucanjem "make nesto" pozvacete niz naredbi koje su povezane sa ovim 'targetom'. Primetite da komanda make proverava samo Makefile koji se nalazi u TEKUCEM direktorijumu. Znachi ako se nalazite u direktorijumu /home/ja/instalacija pozivom "make nesto" izvrsicete niz naredbi koje su asocirane sa 'targetom' 'nesto' fajla /home/ja/instalacija/Makefile. Ukoliko ukucate samo "make" pozvace se podrazumevani (default) target! Makefile ima izuzetno slozhenu i korisnu sintaksu. Pogledajte 'manual pages' ako vas zanima vishe o ovome!
Ok. Kompajliranje programa je upravo 'default target' nasheg makefile-a. Znachi ukucajte:
Citat:$ make
Ovim cete iskompajlitati program. Tu je gotovo ceo posao zavrshen. Potrebno je samo iskompajlirane fajlove prebaciti na neko 'logichnije' mesto. Npr. negde unutar /usr direktorijuma. Za ovo postoji 'target' install u Makefile-u. Medjutim, obichan user najcesce nema ovlascenja da pishe po direktorijumima /usr, /bin, /etc (...) pa ovo moramo da uradimo kao korisnik koji ima pravo pisanja po potrebnim direktorijumima. To je obichno root (mada se mozhe dozvoliti i drugim korisnicima ovakva privilegija). Dakle, logujemo se kao 'super user':
Citat:$ su root
Nakon unosa sifre imacemo pravo pisanja po navedenim direktorijumima. Pozivamo install iz Makefile-a:
Citat:# make install

I, to bi bilo to! Program je instaliran.... Uz put, u Makefile-u obichno postoje i 'target-i' clear i uninstal:

$ make clear --- uklanja binarne (kompajliranje fajlove iz direktorijuma u kom se nalazi source)
# make uninstall --- uklanja kompajlirane fajlove sa mesta na koje ih je kopirao 'make install'


2. Instalacija programa iz binarnih paketa

Binarni paketi su arhive iskompajliranih fajlova. Obichno sadrzhe neku skriptu za podeshavanje sistema prilikom instalacije. Sve shto treba uraditi prilikom instalacije je iskopirati odgovarajuce fajlove na odgovarajuce mesto. Medjutim, ovde mozhe doci do konflikta: moguce je da na sistemu ne postoje biblioteke koje su potrebne za rad programa koji zhelimo da instaliramo! Te biblioteke se obichno nalaze u nekom drugom binarnom paketu (koji je najceshce sastavni deo distroa Wink ). U ovom sluchaju se kaze da prvi paket zavisi od drugog (za zavisnost se obichno koristi termin 'depedencies' shto ce Vas stalno pratiti ako instalirate binarne pakete, a narochito rpm Wink ). Znachi ne mozete instalirati prvi paket ukoliko nije instaliran drugi. (To je odprilike ono shto proverava ./configure skripta na pochetku instalacije iz source-a)
Prednost instalacije binarnog paketa je u lakoci instalacije. Mane su sledece: obichno jedan binarni paket mozhete instalirati samo na jednoj distribuciji (chesto samo na jednoj verziji neke distibucije ili samo na odgovarajucoj verziji kernela!), gubi se na performansama u odnosu na instalaciju iz source-a.
Za instalaciju vecine paketa postoje grafichki front-endovi (npr. rpmdrake ili YaST), ali ce mo se mi zadrzhati na shellu. Postoji vishe vrsta binarnih paketa, a ovde cemo se osvrnuti na tri najrasprostranjenije: rpm, tgz i deb.

RPM Nekada skracenica od Red hat Package Mandatory, danas ih se Red Hat 'odrekao' pa je skracenica RPM Package Mandatory. Verovatno su najrasprostranjeniji i po broju distroa koji ih koriste i po broju paketa. Koriste se u Red Hatu i svim distroima koji su nastali iz njega (Mandrake, SuSE, Fedora, PCLinuxOS, ProtOS, Linuxo Live.....) Tehnichki su dosta slabi: programi instalirani iz rpm-a i iz source-a se ochigledno razlikuju po brzini, chesta je pojava 'broken dependencies' tj. deshava se da ne mogu da 'otkriju' od kojih paketa zavise. Tada je obichno na korisniku da sam ponadje zavisnosti, inache ne mozhe instalirati iste. Ova pojava je poznata kao 'rpm hell', i stvarno ume da izludi... Okusio sam Wink
Instaliraju se sa:
Citat:# rpm -ivh ime_paketa.rpm
Primetite da je dovoljno ukucati "rpm -i ime_paketa.rpm" ali gornja sintaksa sa switch-evima i, v i h omogucava ispisivanje vishe podataka tokom instalacije. Instalirani programi se uklanjaju sa:
Citat:# rpm -e ime_paketa
Za vishe informacija "rpm --help" i "man rpm".

TGZ su paketi koje koristi Slackware i distroi bazirani na njemu. Tehnichki to je samo arhiva kompajliranog softvera sa skriptom za instalaciju. NE PROVERAVAJU zavisnosti, tako da ce se uvek instalirati, ali nece raditi ukoliko zavisnosti nisu ispunjene Wink Programi su optimizovani, i vrlo je mala razlika izmedju programa instaliranog iz tgz-a i sourcea.
Instaliraju se komandom
Citat:# installpkg ime_paketa.tgz
Najjednostavnije se brishu korishcenjem alata 'pkgtool', koji je, iako radi u text-modu, dovoljno intuitivan za upotrebu, ili komandom
Citat:#removepkg ime_paketa.tgz

DEB su paketi koji koristi Debian i distroi bazirani na njemu (Xandros, Linspire[ex Lindows], Mepis, Knoppix, LibraNet, ....) Tehnichni su najsavrsheniji. Programi instalirani iz njih imaju gotovo iste performanse kao i instalirani iz izvornog koda, a zavisnosti odlichno proveravaju. Velika prednost za korisnike Debiana je centralizovana baza skoro svih zhivih .deb paketa na netu, i apt-get sistem kojim se mogu oni downloadovati i instalirati.
Instalacija .deb paketa mozhe se izvrshiti komandom
Citat:# dpkg -i ime_paketa.deb
Za sklanjanje instaliranih paketa je najlakshe koristiti alatku 'dselect' koja omogucava lako manipulisanje .deb paketima iz shella.

offline
  • Pridružio: 02 Apr 2005
  • Poruke: 1516
  • Gde živiš: # :(){ :|:& };:

a jooojjjj textaaaaaaaaaaa..
ovo je definicija onoga shto sam hteo da znam..
thnxx dude:)

offline
  • Dark 
  • Zaslužni građanin
  • Pridružio: 03 Dec 2003
  • Poruke: 677
  • Gde živiš: Beograd

Samo mali dodatak na dekompresovanje iz shell-a: tar zxvf ime_paketa.tar.gz odnosno tar xvjf ime_paketa.tar.bz2
Source paketi mogu biti kompresovani gzip odnosno bzip2 kompresijom (bzip2 je jacha kompresija od gzip-a) tako da se samo switch za dekompresovanje razlikuje u zavisnosti od ekstenzije..

offline
  • gamzzy 
  • Legendarni građanin
  • Pridružio: 24 Apr 2003
  • Poruke: 10725
  • Gde živiš: Novi Sad

govori tiho i koristi mc za raspakivanje Wink

offline
  • Pridružio: 06 Apr 2005
  • Poruke: 403
  • Gde živiš: Beograd

I Krusader tu pomaze,ali nekako je lepse to raditi iz konzole komandom tar...

offline
  • gamzzy 
  • Legendarni građanin
  • Pridružio: 24 Apr 2003
  • Poruke: 10725
  • Gde živiš: Novi Sad

mc me nikada nije izneverio... nekako me mrzi da pamtim nešto bez čega se može Wink

offline
  • Pridružio: 20 Mar 2004
  • Poruke: 28
  • Gde živiš: Novi Sad

To sto nam je pegazeka tu prezentirala je savrsen proces. Purple je sad dobio sa time puno odgovora.
inace i ja radim sa mc Wink

offline
  • bocke  Male
  • Moderator foruma
  • Glavni moderator Linux foruma
  • Veliki Pingvin
  • Guru
  • Pridružio: 16 Dec 2005
  • Poruke: 12485
  • Gde živiš: Južni pol

Odlično, ali imam osećaj da nešto nedostaje. Wink

recimo Checkinstall skript:
http://asic-linux.com.mx/~izto/checkinstall/

Ovaj skript omogućava kreiranje nativnih paketa za distribuciju koju koristiš (RPM, TGZ, DEB)... Zašto je ovo korisno? Omogućava laku deinstalaciju paketa korišćenjem standardnih alata za pakete koji dolaze uz distribuciju.

Kako se koristi... Tako što pri kompajliranji iz sourcea umesto "make install", ukucaš checkinstall i zatim odgovoriš na nekoliko jednostavnih pitanja koje ti skript postavi. Napr:

./configure
make
checkinstall


Još jedna od mogućih upotreba dobijenih paketa je backup (radi lakše instalacije u slučaju ponovne instalacije sistema), priprema za dalju distribuciju, prenos softvera na istu distribuciju kod poznanika ili prijatelja, itd...

A šta ako već imate paket za program koji želite da koristite, ali nije u nativnom formatu vaše distribucije? Recimo, uz Slack već dolazi alat rpm2tgz... Tako da paketi pakovani u RPMu (OpenOffice.org 2.0, Opera, itd...) mogu biti konvertovani u tgz i lako instalirani pod Slackom.

Što se tiče konverzije paketa iz deb u tgz i obrnuto, kao i konverzije deb i tgz paketa za rpm bazirane distribucije (i obrnuto) tu je perl skript koji se zove Alien:

http://www.kitenet.net/programs/alien/

Citat:Alien is a program that converts between the rpm, dpkg, stampede slp, and slackware tgz file formats. If you want to use a package from another distribution than the one you have installed on your system, you can use alien to convert it to your preferred package format and install it.

I na kraju upozorenje u vezi Aliena: ne koristite alien za konvertovanje sistemskih paketa. Ne instalirajte sistemske pakete iz drugih distribucija. Preporučujem korišćenje aliena za konvertovanje paketa softvera koji je statički linkovan (Opera, OpenOffice.org 2.0, itd...) Kod paketa preuzetih iz drugih distribucija može doći do problema pri instalaciji (zavisnosti itd...)

Dopuna: 01 Feb 2006 2:11

[quote:6a617ade62="centaur"]I Krusader tu pomaze,ali nekako je lepse to raditi iz konzole komandom tar...

Naravno. Nema ništa lepše od kuckanja tar xvfz imepaketa.tar.gz (ili tar xvfj imepaketa.tar.bz2)... MC je za piliće. Laughing Šala. Wink Vrlo retko koristim MC. Mnogo više volim kuckanje po konzoli...

Ko je trenutno na forumu
 

Ukupno su 834 korisnika na forumu :: 36 registrovanih, 11 sakrivenih i 787 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 357magnum, A.R.Chafee.Jr., Apok, BORUTUS, BraneS, ccoogg123, darkangel, Duh sa sekirom, FileFinder, galerija, Georgius, goxin, Kubovac, kybonacci, ljuba, maiden6657, milimoj, Milos ZA, moldway, Nikola00, Panonsky, pein, pera bager, procesor, raptorsi, robert1979, sasa87, simazr, Srle993, stegonosa, Trpe Grozni, voja64, W123, x9, ZetaMan, |_MeD_|