Poglavlje 4 Konfiguracija Sustava Tablica Sadržaja: 4.1 Pregled sustava 4.2 Odabir Kernela Prije konfiguracije naprednijih dijelova sustava, dobra je idea naučiti kako je sustav organiziran i koje se naredbe mogu koristiti za traženje datoteka i programa. Ujedno je dobro i znato trebate li kompilirati koristnički podešen kernel te koji su koraci potrebni za to. Ovo poglavlje će vas upoznati sa organizacijom sustava i konfiguracijskih datoteka. Tada možete nastaviti dalje sa konfiguracijom naprednijih dijelova sustava. 4.1 Pregled Sustava Važno je shvatiti kako je Linux sustav sastavljen prije nego se zaroni u različite aspekte konfiguracije. Linux sustav je bitno drugačiji od DOS, Windows ili Macintosh sustava (uz iznimku Unix-temeljenog MacOSX-a), ali ovi dijelovi poglavlja će vam pomoći da se upoznate sa rasporedom kako bi lakše mogli konfigurirati sustav da radi ono što je vama potrebno. 4.1.1 Raspored Datotečnog Sustava Prva primjetna razlika između Slackware Linux i DOS ili Windows sustava je datotečni sustav. Za početak, ne koristimo slova pogona za označavanje raznih particija. Pod Linuxom postoji jedna glavna mapa. Možete to usporediti sa C: pogonom pod DOSom. Svaka particija na vašem sustavu je montirana u mapu pod glavnom mapom. Na neki način je to tvrdi disk koji se stalno širi. Glavnu mapu nazivamo root mapom, i označena je sa kosom crtom u desno (/). Ovaj koncept se može isprva činiti neobičnim, ali zapravo čini život lakšim kada želite dodati još prostora. Primjerice, recimo da vam ponestane prostora na disku koji sadrži /home. Većina ljudi Slackware instalira i naprave jedan veliki root. Pošto se particije mogu montirati u bilo koju mapu, možete jednostavno otići u trgovinu i kupiti novi tvrdi disk i montirati ga u /home. Na taj način ste dodali još prostora svom sustavu. I to sve bez potrebe za micanjem puno stvari. Niže će te pronaći opise većih mapa višeg nivoa pod Slackwareom. bin Ovdje se pohranjuju osnovni korisnički programi. Ovo predstavlja osnovni minimum programa potrebnih da bi korisnik koristio sustav. Ovdje su pohranjene stvari poput ljuske i naredbi za datotečni sustav (ls, cp, itd). Mapa /bin obično ne doživljava promjene nakon instalacije. Ako i da, onda je to obično u obliku nadogradnji paketa koje pružamo. dev Sve pod Linuxom se tretira kao datoteka, čak i hardverski uređaji poput serijskih portova, tvrdih diskova i skenera. Kako bi se pristupilo tim uređajima mora postojati posebna datoteka zvana čvor uređaja. Svi čvorovi uređaja pohranjuju se u /dev mapi. Ovo ćete vidjeti da vrijeti za mnogo Unixoidnih operativnih sustava. etc Ova mapa sadrži konfiguracijske dodateke. Sve od X Window konfiguracijske datoteke, baze korisnika, do skripti za podizanje sustava. Administrator sustava će se kroz vrijeme prilično dobro upoznati sa ovom mapom. home Linux je višekorisnički operativni sustav. Svaki korisnik na sustavu dobiva račun i jedinstvenu mapu za osobne datoteke. Ova mapa se naziva korisnikova home (domaća) mapa. Mapa /home se pruža kao pretpostavljeno mjesto za korisničke home mape. lib Ovdje su pohranjene sistemske knjižnice koje su potrebne za osnovni rad sustava. Knjižnica za C, dinamički učitavač, ncurses knjižnica i kernel moduli su među ovdje pohranjeni stvarima. mnt Ova mapa sadrži privremene točke montiranja za rad na tvrdim diskovima ili sa izmjenjivim pogonima. Ovdje ćete pronaći točke montiranja za CD-ROM i floppy pogone. opt Paketi opcionalnog softvera. Ideja iza /opt mape je da se svaki paket softvera instalira u /opt/ime-softvera mapu, što čini kasnije uklanjanje lakšim. Slackware distribuira neke stvari u /opt (kao primjerice KDE u /opt/kde), ali slobodni ste dodavati u /opt sve što želite. proc Ovo je jedinstvena mapa. Ona zapravo nije dio datotečnog sustava, već virtualnog datotečnog sustava koji pruža pristup informacijama kernela. Različiti djelovi informacija koje kernel želi da znate nude vam se kroz datoteke u /proc mapi. Isto tako kroz neke od datoteka možete kernelu slati informacije. Probajte napraviti cat /proc/cpuinfo. root Administrator sustava je poznat kao root na sustavu. Njegova home mapa se čuva u /root mapi, umjesto /home/root mapi. Razlog je jednostavan. Što ako je /home drugačija particija od / i nije ju moguće montirati? Tada bi se root naravno htio prijaviti i popraviti problem. Ako je njegova home mapa na oštećenom datotečnom sustavu, otežava mu se prijava. sbin Osnovni programi rezervirani za root korisnika i proces podizanja sustava čuvaju se upravo ovdje. Obični korisnici neće pokretati programe koji su ovdje čuvani. tmp Privremeno mjesto pohrane. Svi korinici imaju pristup čitanja/pisanja u ovoj mapi. usr Ovo je velika mapa u Linux sustavu. Sve ostalo više manje ide ovdje, programi, dokumentacija, izvorni kod kernela, i X Window sustav. Ovo je mapa u koju ćete najvjerojatnije instaliravati programe. var Datoteke dnevnika sustava, podaci cache memorije i datoteke zaključavanja programa se pohranjuju ovdje. Ovo je mapa za često mjenjane podatke. Sada biste trebali imati dobar osjećaj za to što koja mapa na datotečnom sustavu sadrži. Detaljnije informacije o rasporedu datotečnog sustava možete pronaći na hier(7) stranici man-a. Sljedeći dio će vam pomoći u pronalaženju određenih datoteka, kako to nebiste morali raditi ručno. 4.1.2 Pronalaženje Datoteka Znate što koja od većih mapa sadrži, ali to vam još uvijek zapravo ne pomaže u pronalaženju svari. Mislim, možete krenuti sa potragom kroz različite mape, ali postoje brži načini. U Slackwareu postoje četiri glavne naredbe za pronalaženje datoteka. 4.1.2.1 which Prva je which(1) naredba. which se obično koristi za brzo lociranje programa. Ona samo pretraži vaš PATH i vraća prvu instancu koju pronađe i putanju mapa do nje. Uzmimo ovaj primjer: % which bash /bin/bash Iz onoga što vidite bash je u /bin mapi. Ovo je vrlo ograničena komanda za pretragu, jer pretražuje samo vaš PATH. 4.1.2.2 whereis Naredba whereis(1) radi slično kao which, ali ujedno pretražuje i za man stranice i datoteke izvornog koda. Tako bi whereis pretraga za bash vratila ovo: % whereis bash BLABLABLA Ova naredba nam nije samo rekla gdje je sam program, već i gdje je pohranjena njegova dokumentacija. Ipak, i ova naredba je ograničena. Što ako ste željeli pronaći određenu konfiguracijsku datoteku? Za to ne možete koristiti which ili whereis. 4.1.2.3 find Naredba find(1) omogućuje korisniku pretragu datotečnog sustava sa bogatom kolekcijom predikata pretrage. Korisnici mogu specificirati pretragu sa wildcard znakovima u imenu datoteka, raspon vremena modifikacije ili stvaranja ili druge napredne karakteristike. Primjerice, za pretragu za pretpostavljenu xinitrc datoteku na sustavu, mogla bi se koristiti sljedeća naredba: % find / -name xinitrc /var/X11R6/lib/xinit/xinitrc Naredbi find će trebati neko vrijeme za izvršavanje zadatka, pošto mora proći kroz kompletno drvo root mape. I ukoliko naredbu pokrene običan korisnik pojavljivati će se greške o zabrani pristupa datotekama i mapama kojima samo root ima pristup. No find je pronašao našu datoteku, i to je dobro. Kada bi bar moglo biti malo brže... 4.1.2.4 slocate Naredba slocate(1) pretražuje kompletan datotečni sustav, kao i find naredba, ali pretražuje bazu podataka umjesto samog sustava. Baza podataka je podešena da se osvježava svako justro, kako bi imali donekle svježu listu datoteka na svom sustavu. Možete i ručno pokrenuti updatedb(1) kako biste osvježili slocate bazu podataka (prije ručnog pokretanja updatedb naredbe morate prvo postati root sa su naredbom). Evo primjera slocate naredbe u akciji: PRIMJER Dobili smo i više no što smo tražili, i puno brže. Sa ovim naredbama morali biste moći pronaći što god tražite na svom Linux sustavu. 4.1.3 Mapa /etc/rc.d Datoteke potrebne za inicijalizaciju sustava spremljene su u /etc/rc.d mapu. Slackware koristi raspored BSD stila za svoje inicijalizacijske datoteke, nasuprot System V inicijalizacijskih skripti, koje čine konfiguraciju puno težom bez korištenja posebnog programa dizajniranog za tu namjenu. U BSD-init skriptama, svaki runlevel dobiva svoju rc datoteku. Kod System V organizacije, svaki runlevel dobiva svoju vlastitu mapu gdje svaka sadrži brojne init skripte. Ovo pruža organiziranu trukturu koja se lako održava. Ima više kategorija inicijalizacijskih datoteka. To su pokretanje sustava, runleveli, inicijalizacija mreže i System V kompatibilnost. Prema tradiciji, sve ostalo ćemo svrstati u drugu kategoriju. 4.1.3.1 Pokretanje Sustava Prvi program koji se pokreće pod Slackwareom, pokraj Linux kernela, je init(8). Ovaj program čita /etc/inittab(5) datoteku kako bi vidio kako pokretati sustav. Pokreće /etc/rc.d/rc.S skriptu kako bi pripremio sustav prije ulaska u željeni runlevel. Datotka rc.S omogućuje vašu virtualnu memoriju, montira datotečne sustave, čisti određene mape dnevnika, inicijalizira Plug and Play uređaje, učitava kernel modul, konfigurira PCMCIA uređaje, postavlja serijske portove i pokreće System V init skripte (ukoliko ih nađe). Očito je da rc.S ima puno posla, ali evo nekih skripti u /etc/rc.d koje rc.S poziva kako bi završio svoj posao: rc.S Ovo je sama skripta za inicijalizaciju sustava rc.modules Učitava kernel module. Stvari poput vaše mrežne kartice, podrška za PPP i ostale stvari učitavaju se ovdje. Ako ova skripta pronađe rc.netdevice, pokrenuti će i to. rc.pcmcia Provjerava za postojanje i konfigurira PCMCIA uređaje koje možete imati u svom sustavu. Ovo je najkorisnije za korisnike prijenosnih računala, koji najvjerojatnije imaju PCMCIA modem ili mrežnu karticu. rc.serial Konfigurira serijske portove pokretanjem odgovarajućih setserial naredbi. rc.sysvinit Provjerava postoje li System V init skripte za željeni runlevel i pokreće ih. Više o tome pričati ćemo niže. 4.1.3.2 Runlevel Incijalizacijske Skripte Nakon što je završena inicijalizacija samog sustava, init kreće na inicijalizaciju runlevela. On (runlevel) opisuje stanje u kojem će vaš stroj biti pokrenut. Čini se suvišnim? Pa eto, runlevel će initu reći da li ćete primati prijave više korisnika ili samo jednoga, da li želite koristiti mrežne servise, i da li ćete koristiti X Window Sustav ili agetty(8) za rukovanje prijavama. Datoteke napisane niže određuju različite runlevele u Slackware Linuxu: rc.0 Zaustavljanje sustava (runlevel 0). Po pretpostavljenom, ovo je symlink na rc.6. rc.4 Pokretanje višekorisničkog moda (runlevel 4), ali u X11 sa KDM, GDM, ili XDM kao upraviteljem prijava. rc. 6 Ponovo pokretanje sustava (runlevel 6). rc.K Podizanje u modu za jednog korisnika (runlevel 1) rc.M Pokretanje višekorisničkog moda (runleveli 2 i 3), ali sa standardnom tekstualnom prijavom. Ovo je pretpostavljeni runlevel u Slackwareu. 4.1.3.3 Inicijalizacija Mreže Runleveli 2,3 i 4 pokrenuti će mrežne servise. Sljedeće datoteke odgovorne su za inicijalizaciju mreže: rc.inet1 Stvorena netconfig-om, ova datoteka je odgovorna za kongfiguraciju samog mrežnog sučelja. rc.inet2 Pokreće se rc.inet1 i pokreće osnovne mrežne servise. rc.atalk Pokreće AppleTalk servise. rc.httpd Pokreće Apache mrežni poslužitelj. Kao i nekoliko drugih rc skripti, ova se može koristiti za pokretanje, zaustavljanje i ponovo pokretanje servisa. rc.httpd prima argumente stop, start ili restart. rc.news Pokreće news poslužitelj. 4.1.3.4 System V Kompatibilnost System V init kompatibilnost je predstavljena u Slackware 7. Mnoge druge Linux distribucije koriste ovaj stil nasuprot BSD stila. U osnovi, svakom runlevelu dana je vlastita mapa za init skripte, dok BSD daje jednu skriptu za svaki runlevel. Skripta rc.sysvinit će tražiti za bilo kakve System V init skripte koje držite u /etc/rc.d i pokrenuti ih, ako je prikladan runlevel. Ovo je korisno za neke komercijalne softverske pakete koji instaliraju System V init skripte. 4.1.3.5 Ostale Datoteke Datoteke koje su niže opisane spadaju među ostale inicijalizacijske datoteke sustava. Obično se pokreću iz jedne od većih skripti gore, pa sve što trebate je izmjeniti sadržaj. rc.gpm Pokreće servis opće namjene za miša. Omogućava vam da kopirate i lijepite u Linux konzoli. Ponekad će gpm raditi probleme sa mišem kada se koristi pod X windowsima. Ako primjetite probleme sa mišem pod Xima, probajte zaustaviti gpm servis i maknite izvršne dozvole sa ove datoteke. rc.font Učitava korisnički podešen font za konzolu. rc.local Sadrži posebne komande za pokretanje sustava. Ova datoteka je prazna nakon svježe instalacije, jer je rezervirana za lokalne administratore. Ova skripta se pokreće nakon što je sva inicijalizacija završena. Za omogućavanje skripte sve što trebate učiniti je dodati izvršne dozvole sa chmod naredbom. Za onemogućavanje skripte uklonite izvršne dozvole. Za više informacija o chmod naredbi, pogledajte Odjeljak 9.2. 4.2 Odabir Kernela Kernel je dio operativnog sustava koji pruža pristup hardveru, kontrolu procesa i općenitu kontrolu sustava. Kernel sadrži podršku za vaše hardver uređaje, zato je odabir kernela za vaš sustav važan korak postave. Slackware pruža više od tucet prekompiliranih kernela koje možete odabrati, svaki sa standardnim setom upravljačkih programa i dodatnim specifičnim upravljačkim programima. Možete pokretati jedan od prekompiliranih krenela ili možete izgraditi sami svoj iz izvornog koda. Kako god, morate se uvjeriti da vaš kernel ima podršku za hardver koju vaš sustav treba. 4.2.1 Mapa /kernels na Slackware CD-ROM-u Prekompilirani Slackware kerneli su dostupni u /kernels mapi na Slackware CD-ROM-u ili na FTP stranici u glavnoj Slackware mapi. Dostupni kerneli se mjenjaju sa svakim izdanjem, pa je dokumentacija u toj mapi uvijek reprezentativni izvor. Mapa /kernels ima podmape za svaki dostupan kernel. Podmape imaju isto ime kao njihov pridružen bootdisk. U svakoj podmapi naći ćete sljedeće datoteke: (lista fajlova) Kako biste koristili kernel, kopirajte System.map i config datoteke u vašu /boot mapu i kopirajte sliku kernela u /boot/vmlinuz. Pokrenit /sbin/lilo(8) kako biste instalirali LILO za novi kernel, i nakon toga ponovo pokrenite vaš sustav. To je sve što je potrebno za instalaciju novog kernela. Keneli koji završavaju na .i su IDE kerneli. Dakle, oni ne uključuju SCSI podršku u osnovnom kernelu. Kerneli koji završavaju na .s su SCSI kerneli. Oni uključuju svu IDE podršku iz .i kernela, plus SCSI podršku. 4.2.2 Kompilacija Kernela iz Izvornog Koda Pitanje "Trebam li kompilirati kernel za svoj sustav?" je često postavljeno od strane novih korisnika. Odgovor je definitivno možda. Ima nekoliko situacija u kojima je potrebno kompilirati kernel specifičan za vaš sustav. Većina korisnika može koristiti prekompilirane kernele i kernel module za postizanje sustava koji je u potpunosti funkcionalan. Željeti ćete sami kompilirati kernel za svoj sustav ukoliko želite nadograditi verziju kernela na neku koju mi trenutnone nudimo u Slackwareu, ili ako ste zakrpali izvorni kod kernela kako biste dobili podršku za neki poseban uređaj koji nativno nije u kernelu. Svako sa SMP sustavom će definitivno željeti kompilirati kernel sa SMP podrškom. Ujedno, mnogo korisnika primjećuje ubrzanje ručno kompiliranih kernela na njihovim strojevima. Možda vam bude korisno kompilirati kernel sa optimizacijama za specifilni procesor u vašem stroju. Izrada svog vlastitog kernela nije toliko teška. Prvi korak je osiguranje da imate instaliran izvorni kod kernela na svom sustavu. Potvrdite da ste instalirali pakete iz K serije tijekom instalacije. Ujedno morate provjeriti da imate instalirane pakete D serije, posebno C kompilator, GNU make, i GNU binutils. U globalu, dobra je ideja imati instaliranu kompletnu D seriju ako planirate raditi bilo kakav razvoj. Isto tako možete skinuti i posljednju verziju izvornog koda kernela sa http://www.kernel.org/mirrors. 4.2.2.1 Kompilacija Linux Kernela verzije 2.4.x % su - Password: #cd /usr/src/linux Prvi korak je dovesti izvorni kod kernela u svoje osnovno stanje. Dajemo sljedeću naredbu kako bismo to postigli (napomena: kako postupak briše .config datoteku bez upozorenja, moguće je da biste željeli napraviti sigurnosnu kopiju iste): # make mrproper Sada možete konfigurirati kernel za vaš sustav. Trenutni kernel nudi tri načina konfiguracije. Prvi je izvorni tekstualni pitanje-odgovor sustav. Pita vas puno pitanja i iz odgovora napravi konfiguracijsku datoteku. Problem ovog pristupa je to što greška znači da morate krenuti iznova. Metoda koju najviše ljudi koristi je bazirana na izbornicima. Posljednja, tu je i konfiguracijski alat zasnovan na Xima. Odaberite koju metodu želite i izdajte odgovarajuću naredbu: # make config (tekstualno pitanje-odgovor) # make menuconfig (izbornici, bazirano na tekstualnom) # make xconfig (bazirano na Xima, morate biti u Xima) Slika 4-1. Izbornik Konfiguracije Kernela [[[SLIKA]]] Novim korisnicima će menuconfig najvjerojatnije biti najjednostavniji za korištenje. Pruženi su i ekrani pomoći sa objašnjenjima pojedinih dijelova kernela. Nakon konfiguracije kernela izađite iz konfiguracijskog programa. Zapisati će potrebne konfiguracijske datoteke. Sada možemo pripremiti drvo izvornog koda za gradnju: # make dep # make clean Sljedeći korak je kompilacija kernela. Prvo probajte sa izdavanjem bzImage naredbe niže: # make bzImage Ovo može potrajati, ovisni o brzini procesora. Tijekom procesa izgradnje vijeti ćete poruke kompilatora. Nakon izgradnje slike kernela, željeti ćete izgraditi dijelove kernela koje ste označili kao modularne: # make modules Sada možemo instalirati kernel i module koje ste kompilirali. Za instalaciju kernela na Slackware sustavu, potrebno je izdati sljedeće naredbe: (brdo naredbi) Željeti ćete izmjeniti /etc/lilo.conf i dodati dio za pokretanje vašeg starog kernela u slučaju da vaš novi ne radi. Nakon toga pokrenite /sbin/lilo za instalaciju novog bloka za pokretanje. Sada možete ponovo pokrenuti računalo sa novim kernelom. 4.2.2.2 Linux Kernel Verzije 2.6.x Kompilacija 2.6 kernela je samo malo drugačija od 2.4 ili 2.2 kernela, ali je važno razumjeti razlike prije pokušaja. Više nije potrebno pokretati make dep i make clean. Ujedno, nove verzije kernela više nisu toliko obavještajne. Rezultat je proces izgradnje koji je lakši za razumijevanje, ali ima i neke nedostatke. Ako imate problema sa izgradnjom kernela više je nego preporučeno da povećate nivo obavještavanja. To se jednostavno rješava sa dodavanjem V=1 izgradnji. Na taj način ćete zabilježiti više informacija koje mogu pomoći developeru kernela ili prijateljskom šmokljanu da vam pomognu u rješavanju problema. # make bzImage V=1 4.2.3 Korištenje Kernel Modula Kernel moduli je drugo ime za upravljačke programe koji se mogu ubaciti u trenutno pokrenuti kernel. Oni vam omogućavaju da proširite podršku hardvera vašeg kernela bez potrebe za biranjem drugog kernela ili ručne kompilacije. Moduli mogu biti učitani ili uklonjeni u bilo koje vrijeme, čak i kada je sustav u pogonu. Ovo olakšava administratorima nadogradnju i osvježavanje specifičnih upravljačkih programa. Novi modul se može kompilirati, stari ukloniti, te novi učitan bez potrebe za ponovnim pokretanjem stroja. Moduli su pohranjeni u /lib/modules/inačica_kernela mapi na vašem sustavu. Mogu biti učitani pri podizanju sustava preko rc.modules datoteke. Ta datoteka ima mnogo komentara i nudi primjere za veće hardverske komponente. Kako biste vidjeli listu trenutno aktivnih modula, koristite lsmod(1) naredbu: (lsmod primjer) Kao što ovdje vidite, imam učitan samo modul za paralelni port. Za uklanjanje modula koristite rmmod(1) naredbu. Moduli mogu biti učitani sa modprobe(1) ili insmod(1) naredbama. modprobe je obično sigurnija metoda jer će učitati sve module o kojima onaj kojega želite učitati ovisi. Mnogo korisnika nemora ručno učitavati niti uklanjati module. Oni koriste autoloader kernela za upravljanje modulima. Po pretpostavljenom, Slackware uključuje kmod u svojim kernelima. kmod je kernel opcija koja omogućava kernelu automatsko učitavanje modula na zahtjev. Za više informacija o kmod-u i kako se konfigurira, pogledajte /usr/src/linux/Documentation/kmod.txt. Morati ćete imati paket sa izvornim kodom kernela, ili skinuti izvorni kod kernela sa http://kernel.org. Više informacija može se pronaći na man stranicama svake od ovih naredbi, kao i u rc.modules datoteci.