109
ZAVOD ZA ELEKTRONIKU, MIKROELEKTRONIKU, RAČUNALNE I INTELIGENTNE SUSTAVE FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA SVEUČILIŠTE U ZAGREBU Napredno korištenje operacijskog sustava Linux Zagreb, 2005.

Marko Salkic - Linux - Napredni Tecaj

Embed Size (px)

Citation preview

Page 1: Marko Salkic - Linux - Napredni Tecaj

ZAVOD ZA ELEKTRONIKU, MIKROELEKTRONIKU, RAČUNALNE I INTELIGENTNE SUSTAVEFAKULTET ELEKTROTEHNIKE I RAČUNARSTVA

SVEUČILIŠTE U ZAGREBU

Napredno korištenjeoperacijskog sustava Linux

Zagreb, 2005.

Page 2: Marko Salkic - Linux - Napredni Tecaj
Page 3: Marko Salkic - Linux - Napredni Tecaj

Sadržaj1. Uvod...................................................................................................................... .........1

2. Izrada i korištenje skripti........................................................................................ .......22.1. Prenošenje parametara u skripte.............................................................................................42.2. Funkcije....................................................................................................................................72.3. Složene naredbe......................................................................................................................7

2.3.1. Grupiranje jednostavnih naredbi................................................................................................ .....72.3.2. Složene naredbe bash ljuske.................................................................................... .....................8

3. Jezgra operacijskog sustava Linux i sklopovlje........................................ ..................93.1. Parametri jezgre operacijskog sustava....................................................................................93.2. Moduli.......................................................................................................................................93.3. device........................................................................................................................................93.4. Virtualni datotečni sustavi........................................................................................................9

3.4.1. kernelVFS............................................................................................................................. .........93.4.2. procfs............................................................................................................................................ .93.4.3. sysfs - TODO.......................................................................................................................... .......93.4.4. devmapper - TODO............................................................................................... ........................93.4.5. tmpfs - TODO............................................................................................................. ...................9

3.5. Prvođenje jezgre operacijskog sutava.....................................................................................9

4. Upravljanje diskovima na Linux sustavu.................................................................. ..104.1. Vrste particija..........................................................................................................................124.2. Imena particija Linux sustava.................................................................................................124.3. Spajanje Linux particija na stablo direktorija ........................................................................134.4. Kako su ugrađene u sustav...................................................................................................134.5. Kreiranje particijske tablice....................................................................................................144.6. Datotečni sustavi....................................................................................................................18

4.6.1. Ext3............................................................................................................................ .................184.6.2. XFS........................................................................................................................ .....................194.6.3. JFS.................................................................................................................................... ..........194.6.4. ReiserFS................................................................................................................................... ...194.6.5. Swap.................................................................................................................... .......................19

4.7. fajlsustavi................................................................................................................................194.8. Kreiranje datotečnog sustava na particiji...............................................................................204.9. filesystem popravak................................................................................................................214.10. imagiranje particije...............................................................................................................224.11. LVM ......................................................................................................................................24

4.11.1. Zašto LVM ?......................................................................................................... .....................244.12. LVM......................................................................................................................................25

5. Programski paketi...................................................................... .................................275.1. Debian paketni sustav............................................................................................................285.2. Korištenje dpkg alata..............................................................................................................28

5.2.1. Dohvat informacija o paketima............................................................................... ......................285.2.2. Instalacija, deinstalacija i osvježavanje paketa........................................................... ..................31

5.3. Korištenje apt alata.................................................................................................................32Postavljanje lokacija za dohvaćanje paketa................................................................. ..........................33Osvježivanje baze informacija o paketima............................................................................................ ..33Pretraživanje paketa................................................................................................................. .............33Instaliranje paketa....................................................................................................... ..........................34Nadogradnja paketa....................................................................................................... .......................345.3.1. Uklanjanje paketa............................................................................................. ...........................34Ispis informacija o paketu............................................................................................. .........................35

5.4. Korištenje debsums i md5sum alata za verifikaciju paketa..................................................365.6. RedHat paketni sustav...........................................................................................................38

Page 4: Marko Salkic - Linux - Napredni Tecaj

5.6.1. Korištenje rpm alata.................................................................................................... .................38Dohvat informacija o paketima...........................................................................................................................38Instalacija, deinstalacija i osvježavanje paketa.................................................................................................42Verifikacija paketa...................................................................................................................................... ........43Verifikacija neinstaliranog paketa.................................................................................................... ..................44

5.6.2. Korištenje yum alata......................................................................................... ...........................44Konfiguriranje yum alata.................................................................................................................. ..................45Imena paketa u yum alatu......................................................................................................... ........................46Instaliranje novih paketa..................................................................................................................... ...............46Uklanjanje paketa........................................................................................................................ ......................47Nadogradnja paketa...................................................................................................................................... .....48Pretraživanje paketa........................................................................................................................ ..................48Informacije o paketu.......................................................................................................................................... .49

5.6.3. Kreiranje lokalnog repozitorija paketa............................................................................ ...............505.7. Literatura.................................................................................................................................51

6. Korisnici i grupe..................................................................................... .....................526.1. Upravljanje korisnicima..........................................................................................................52

6.1.1. Dodavanje korisnika............................................................................................................. ........526.1.2. Brisanje korisnika.............................................................................................................. ...........536.1.3. Promjena podataka o korisnicima............................................................................................ .....536.1.4. Datoteke s informacijama o korisnicima..................................................................................... ...55

6.2. Upravljanje grupama..............................................................................................................566.2.1. Dodavanje grupe....................................................................................................................... ...566.2.2. Brisanje grupe........................................................................................................................ ......566.2.3. Promjena podataka o grupama........................................................................... ........................566.2.4. Datoteka s podacima o grupama............................................................................................ ......57

6.3. Kvote.......................................................................................................................................576.4. Zadaci za vježbu....................................................................................................................596.5. Autentifikacija i autorizacija....................................................................................................60

6.5.1. Prednosti korištenja kriptiranih zaporki................................................................ .........................606.5.2. Nedostaci pri korištenju kriptiranih zaporki............................................................................ ........616.5.3. Izgled datotke kriptiranih zaporki............................................................................... ...................61

6.6. PAM........................................................................................................................................616.6.1. Prednosti koje pruža PAM.................................................................................................... ........616.6.2. PAM konfiguracijske datoteke................................................................................. .....................626.6.3. Trag modula.................................................................................................... ............................646.6.4. Argumenti modula................................................................................................................ ........646.6.5. PAM logovi........................................................................................................ ..........................64

6.7. Literatura.................................................................................................................................64

7. Inicijalizacija sustava.................................................................. ................................657.1. Boot loader.............................................................................................................................65

7.1.1. GRUB............................................................................................................................ ..............657.1.2. LILO................................................................................................................. ...........................68

7.2. runlevel...................................................................................................................................717.3. daemoni..................................................................................................................................75

8. Instalacija GNU/Linux sustava............................................................... .....................768.1. Fedora Core............................................................................................................................778.2. Debian.....................................................................................................................................79

8.2.1. Podešavanje lokalnih postavki sustava i konfiguracije sklopovlja...................................... ............808.2.2. Particioniranje diska i određivanje točaka montiranja particija............................................ ...........808.2.3. Instalacija baznog Debian GNU/Linux sustava.......................................................... ...................818.2.4. Instalacija boot loadera........................................................................................... .....................818.2.5. Drugi stupanj instalacije....................................................................................... ........................81

8.3. Zadaci za vježbu....................................................................................................................81

9. Grafičko sučelje......................................................................................................... ..839.1. 9.2 Window manageri, desktop okruženja.............................................................................849.2. 9.2.1 Instalacija desktop okruženja GNOME.........................................................................85

Page 5: Marko Salkic - Linux - Napredni Tecaj

9.3. 9.2.2 Instalacija desktop okruženja KDE...............................................................................859.4. Literatura.................................................................................................................................85

10. Praćenje rada sustava............................................................................ ...................8710.1. Praćenje sistemskih resursa................................................................................................87

10.1.1. Praćenje sistemske i swap memorije.................................................................................... ......8710.1.2. Procesor............................................................................................................. .......................8910.1.3. Datotečni sustav................................................................................................... .....................90

10.2. Praćenje rada sistemskih servisa........................................................................................9010.3. Praćenje rada programa.......................................................................................................9110.4. Praćenje logova....................................................................................................................94

11. Administracija..................................................................................................... .......9511.1. Instalacija mreže..................................................................................................................9511.2. Printanje................................................................................................................................95

11.2.1. LPD.................................................................................................................. .........................9611.3. Suid, sgid..............................................................................................................................9711.4. Periodičko izvršavanje zadataka..........................................................................................98

11.4.1. cron................................................................................................................. ..........................9811.4.2. at............................................................................................................................ ...................99

12. Osnove mreže u operacijskom sustavu Linux................................. ......................101

13. Literatura............................................................................................................ ......102

Page 6: Marko Salkic - Linux - Napredni Tecaj
Page 7: Marko Salkic - Linux - Napredni Tecaj

1. Uvod

1. UvodOvaj dokument nastavlja se na dokument Osnove operacijskog sustava Linux. Njegov cilj je produbljivanje znanja stečenog u prethodnom dokumentu kako bi se čitatelj osposobio za instaliranje, nadogradnju i održavanju računala s operacijskim sustavom Linux. U tom smislu, jedino pretpostavljeno znanje je poznavanje osnovnog rada u komandnoj liniji.

Iako se u ovom tečaju koriste dvije vrlo popularne distribucije, nije cilj njihovo detaljno svladavanje, već svladavanje koncepata koji će omogućiti čitatelju lakšu prilagodbu bilo kojoj sličnoj distribuciji.

1

Page 8: Marko Salkic - Linux - Napredni Tecaj

2. Izrada i korištenje skriptiKorištenje skripti vrlo je popularno u operacijskom sustavu Linux, ali i općenito na cijeloj Unix porodici operacijskih sustava. Pojam skripte je vrlo širok, ali u ovom kontekstu to je datoteka koja sadrži niz naredbi koje neki program, koji nazivamo interpreter, čita i izvršava. Skripte se ponašaju i pozivaju kao i svi drugi izvršni programi pod operacijskim sustavom Linux. Ovisno o interpreteru govorimo o perl skriptama, bash skriptama, python skriptama i nizu drugih različitih skripti. Ovdje ćemo se prvenstveno pozabaviti skriptama za bash ljusku.

Primarna namjena skripte je automatizacija često obavljanih radnji. Primjerice, ako odmah po prijavi na sustav moramo otkucati pet naredbi kako bi okolinu prilagodili svojim potrebama (postavljanje terminala, jezika, predefiniranje tipki i slično) daleko jednostavnije je te naredbe staviti u skriptu i potom pozvati tu skriptu. Čak štoviše, kompletna inicijalizacija operacijskog sustava Linux obavlja se upotrebom skripti. Dakle, vrlo je bitno upoznati se sa skriptama te naučiti kako ih koristiti.

Uzmimo primjer vrlo jednostavne bash skripte koja se zove hello_world.sh i koja ima sljedeći sadržaj:

$ cat hello_world.shecho “Hello world”$

Tu skriptu možemo izvršiti na više različitih načina, prvi je upotrebom ključne riječi source:

$ source hello_world1.shHello world$

Umjesto ključne riječi source možemo koristiti i točku. Međutim, u ta dva slučaja skripta se ne ponaša kao izvršna datoteka budući da ju moramo pozivati na poseban način. Da bi se ponašala kao izvršna datoteka moramo omogućiti njeno izvršavanje postavljanjem x bita, a potom možemo skriptu zvati kao da se radi o binarnom programu, tj. na sljedeći način:

$ chmod +x hello_world1.sh$ ./hello_world1.shHello world$

Još je jedan detalj potrebno razjasniti prije nego što detaljnije obradimo skripte za bash ljusku. Već je rečeno kako postoje skripte za raziličite interpretere, tj. programske jezike. Pitanje je, na koji način se odlučuje koji interpreter je potrebno pozvati kada skriptu pokrećemo kao izvršni program?

U prethodnom primjeru koristili smo ekstenziju .sh koja označava skriptu za ljusku tipa sh ili bash. Ekvivalentno tome, pojavljuju se ekstenzije .csh za skripte koje se izvršavaju upotrebom csh i tcsh ljuski, zatim .pl za Perl skripte, .py za Python skripte i slično. Međutim, te ekstenzije služe samo kao indikacija korisniku za koji interpreter je sskripta napisana. Operacijski sustav u općem slučaju ne koristi ekstenzije kako bi raspoznao tip datoteke pa tako ne raspoznaje ni skripte na osnovu ekstenzije! Tip datoteke raspoznaje se na osnovu sadržaja datoteke. Skripte, dakle, kao prva dva znaka moraju imati #! a potom mora doći ime interpretera koji treba pozvati i parametre koje mu treba proslijediti. Treba primjetiti kako znak # služi za komentiranje pa će prema tome, tijekom izvođenja skripte, ljuska ignorirati taj red!

Uzmimo kao primjer skriptu sljedećeg sadržaja koja sadrži konstrukte specifične za tcsh ljusku:

2

Page 9: Marko Salkic - Linux - Napredni Tecaj

2. Izrada i korištenje skripti

$ cat hello_world2.csh#!/bin/tcshforeach i (1 2 3)

echo $iend$

Pokretanjem navedene skripte iz komandne linije korištenjem ključne riječi source (ili, što je ekvivalentno točkom) neće uspijeti, tj. dobit ćemo sljedeću poruku o grešci:

$ source hello_world2.cshbash: hello_world2.csh: line 2: syntax error near unexpected token `('bash: hello_world2.csh: line 2: `foreach i (1 2 3)'$

Iz navedenog primjera možemo zaključiti kako je bash ljuska pokušala izvršiti drugu liniju u datoteci. Budući da naredba ima drugačiju sintaksu od očekivane, prijavljena je greška. Također, vidljivo je da ekstenzija .csh za bash ljusku nema nikakvog značenja, jer da ima, tada bi se pokrenula tcsh ljuska i skripta bi bila uspješno izvršena.

Ako pokušamo pokrenuti navedenu skriptu kao izvršni program, tada će sve biti u redu:

$ chmod +x hello_world2.csh$ ./hello_world2.csh123$

Iz navedenog primjera možemo izvesti još jedan zaključak. Prilikom korištenja ključne riječi source ljuska kojoj smo zadali tu naredbu čita navedenu skriptu i izvršava ju. Međutim, kada pokrećemo ljusku kao izvršni program, pokreće se kopija ljuske koja potom izvršava zadane naredbe. Posljedica takvog načina rada je vrlo bitna! Naime, kada koristimo naredbu source sve promjene u varijablama okruženja koje obavi skripta bit će sačuvane i nakon što se skripta izvrši. Kada pokrećemo skriptu kao izvršni program, sve eventualne promjene bit će izbrisane. To možemo provjeriti na jednostavan način. Pretpostavimo skriptu sljedećeg sadržaja:

$ cat shell.sh#!/bin/bashexport A=1echo $A$

U osnovi, radi se o vrlo jednostavnoj skripti koja kreira novu varijablu okruženja, A, te potom ispiše njenu vrijednost. U sljedećem primjeru ćemo prvo provjeriti da varijabla A nije definirana u okruženju, a potom ćemo pokrenuti navedenu skriptu na različite načine te nakon svakog pokretanja provjeravati da li navedena varijabla okruženja postoji ili ne.

$ echo $A

$ ./shell.sh 1$ echo $A

$ source shell.sh1$ echo $A1$

3

Page 10: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

Dakle, provjera da li postoji varijabla A obavljenja je njenim ispisivanjem. Budući da ne postoji, ništa nije ispisano (prva echo naredba). Nakon toga pokrenuta je skripta i to kao zaseban proces. Tijekom izvršavanja skripta je ispisala vrijednost varijable okruženja A koju je postavila. Međutim, nakon što je skripta završila izvršavanje, pokušaj ispisivanja varijable A nije dao nikakav izlaz! Razlog je vrlo jednostavan, naime, skripta je postavila varijablu okruženja u kopiji ljuske, a ta kopija ljuske je prekinula izvršavanje u trenutku kada je skripta bila izvršena do kraja. Konačno, pokretanjem skripte uz pomoć naredbe source obavilo je sve u tekućoj ljusci kojoj je skripta promijenila okruženje i dodala varijablu A, a u to smo se uvjerili i naknadnim ispisivanjem vrijednosti varijable A.

Ta razlika u izvršavanju i posljedicama izvršavanja skripte vrlo je bitna budući da se na osnovu željenih efekata odlučuje za jednu ili drugu varijantu. Primjerice, ponekad ne želimo da skripta išta promijeni u tekućoj ljusci i tada ćemo eksplicitno pokretati skriptu u kopiji ljuske. Nekada to nije bitno i tada je efikasnije izvršavati skriptu u tekućoj ljusci. Konačno, ponekad želimo da nam skripta mijenja sadržaj okruženja i tada moramo skriptu pokretati upotrebom source naredbe.

Kao što je već rečeno, skripte su vrlo bitne u operacijskim sustavima Unix budući da one obavljaju velik dio inicijalizacije operacijskog sustava. Zbog toga ćemo se u nastavku ovog poglavlja pozabaviti još nekim često korištenim mogućnostima ljuski koje vrlo dobro dođu prilikom izrade skripti.

2.1. Prenošenje parametara u skripte

Prenošenje parametara u skripte moguće je obaviti na dva načina. Prvi je upotrebom varijabli okruženja, a drugi je upotrebom parametara u komandnom liniji.

U FIXME već je opisano kako skripte imaju varijable te posebnu grupu varijabli koje nazivamo varijable okruženja. Razlika između varijabli i varijabli okruženja je u tome da se varijable okruženja prenose svakom novom programu koji ljuska pokrene, dok varijable nisu vidljive drugim programima. Dakle, definiranjem varijable okruženja i pokretanjem skripte moguće je dohvatiti parametre koji onda mogu uticati na rad skripte. Ako se skripte pokreću unutar trenutne ljuske (dakle, upotrebom naredbe source) tada je moguće koristiti i varijable koje ne pripadaju varijablama okruženja.

Drugi način prenošenja parametara skriptama je putem argumenata u komandnoj liniji. Argumenti u komandnoj liniji se pridružuju brojčanim varijablama, dakle 1, 2, 3, 4, itd. Pri tome je redni broj 0 rezerviran za ime skripte. Pokušajmo izvršiti skriptu koja ispisuje nulti argument:

$ cat s1.sh#!/bin/bashecho $0$ ./s1.sh./s1.sh$

Kao što se vidi iz navedenog primjera, varijabla 0, sadrži ime skripte. Međutim, ako pokušamo pokrenuti skriptu korištenjem rezervirane riječi source, tada ćemo dobiti sljedeći ispis:

$ source s1.shbash$

Očito je kako na osnovu varijable 0 možemo razlikovati da li je skripta pokrenuta u zasebnoj ljusci ili je pokrenuta uz pomoć naredbe source. Pogledajmo sada sljedeću skriptu:

4

Page 11: Marko Salkic - Linux - Napredni Tecaj

2. Izrada i korištenje skripti

$ cat s2.sh#!/bin/bashecho "Nulti argument: $0"echo "Prvi argument: $1"echo "Drugi argument: $2"echo "Treci argument: $3"$

Navedena skripta ispisuje prva četiri argumenta, uključivši i samo ime skripte. Pokušajmo tu skriptu pokrenuti samo s jednim argumentom:

$ ./s2.sh jedanNulti argument: ./s2.shPrvi argument: jedanDrugi argument: Treci argument: $

Primjećujemo kako je skripta ispisala nulti i prvi argument, međutim, drugi i treći argument ne postoje prema tome ništa nije ispisano. Ako pokušamo s 5 argumenata pozvati skriptu, tada ćemo dobiti sljedeći ispis:

$ ./s2.sh 1 drugi treci 4 petiNulti argument: ./s2.shPrvi argument: 1Drugi argument: drugiTreci argument: treci$

Očito, ispisana su samo prva tri argumenta zajedno s imenom skripte. Pokušajmo sada pozvati skriptu tako da sve argumente grupiramo između dvostrukih navodnika:

$ ./s2.sh "1 drugi treci 4 peti"Nulti argument: ./s2.shPrvi argument: 1 drugi treci 4 petiDrugi argument: Treci argument: $

U ovom slučaju sve unutar navodnika tretira se kao jedan argument. To je i razumljivo, budući da ljuska prilikom parsiranja argumenata razdvaja riječi između kojih se nalazi razmak ili tabulator. U slučaju da se koriste navodnici tada se sve unutar navodnika tretira kao jedan argument! To je posljedica parsiranja komandne linije koju obavlja ljuska. Ona tretira kao argument svaki niz znakova koji počinje nakon praznine te završava novom prazninom ili krajem reda. Iznimka su parametri koji se nalaze unutar jednostrukih ili dvostrukih navodnika. Ti parametri se ne dijele na razmacima. Prvi niz znakova u liniji se tretira kao ime naredbe ili funkcije.

U ovom trenutku netko se može zapitati što ako imamo više od 9 argumenata, da li onda nastavljamo s argumentom 10, tj. $10 i tako dalje? U slučajevima kada očekujemo više od 9 argumenata moramo koristiti znakove {} koji se inače koriste za grupiranje imena varijabli. Tako ćemo, primjerice, 10 argument označavati s nizom ${10}. Drugi način pristupa varijablama je korištenjem naredbe shift. Taj način je prikladniji kada prihvaćamo varijabilan broj parametara. Na primjeru sljedeće skripte ćemo pokazati kako radi ta naredba:

5

Page 12: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

$ cat s3.sh#!/bin/bashecho "Nulti: $0"echo "Prvi: $1"echo "Drugi: $2"shiftecho "Nulti: $0"echo "Prvi: $1"echo "Drugi: $2"shiftecho "Nulti: $0"echo "Prvi: $1"echo "Drugi: $2"shiftecho "Nulti: $0"echo "Prvi: $1"echo "Drugi: $2"$

Navedena skripta ispiše prva tri argumenta, potom pozove naredbu shift, ponovo ispiše prva tri argumenta, zatim pozove naredbu shift i tako nekoliko puta. Pogledajmo što će se desiti nakon što pozovemo skriptu s nekoliko parametara:

$ ./s3.sh a b c d eNulti: ./s3.shPrvi: aDrugi: bNulti: ./s3.shPrvi: bDrugi: cNulti: ./s3.shPrvi: cDrugi: dNulti: ./s3.shPrvi: dDrugi: e$

Prvo što možemo primjetiti je da 0. parametar uvijek sadrži ime skripte! Zatim, nakon svakog poziva naredbe shift obavlja se posmak svih parametara za jedno mjesto niže. Dakle, ono što je bio 2. parametar postaje prvi, 3 postaje drugi i tako redom.

Što se tiče parametara, izdvojit ćemo još dvije često korištene varijable. To su varijable $@, i $#. Varijabla $@ sadrži sve argumente, dok varijabla $# sadrži broj argumenata.

Zadaci:

Proučiti kako se ponaša varijabla $# s obzirom na naredbu shift.

Proučiti koja je razlika između $@ i “$@”.

Za kraj, spomet ćemo i varijablu ?, tj. $?. Naime, ta varijabla sadrži izlaznu vrijednost zadnje izvršene naredbe ili skripte. Svaki program i/ili skripta vraćaju statusni kod koji se potom koristi za izradu drugih skripti. Statusni kod se vraća upotrebom naredbe exit u ljusci, dok se u C programskom jeziku koristi funkcija exit() ili naredba return u main funkciji. U svim tim slučajevima argument je brojčana vrijednost koja će biti vraćena. Kako bi vidjeli način na koji to funkcionira koristit ćemo sljedeću skriptu:

$ cat s5.sh#!/bin/bashexit 1$

6

Page 13: Marko Salkic - Linux - Napredni Tecaj

2. Izrada i korištenje skripti

Navedena skripta vrati brojčanu vrijednost 1 korištenjem naredbe exit. Treba primjetiti da se u bash ljusci povratna vrijednost 0 tretira kao točno, dok se vrijednost različita od nule tretira kao netočno. To se može pokazati i na primjerima jednostavnih naredbi true i false:

$ true$ echo $?0$ false$ echo $?1$

Osim navedenih varijabli postoji još i čitav niz drugih koje su detaljno opisane u man stranici za ljusku bash.

2.2. Funkcije

bash ljuska podržava i funkcije. Funkcije se deklariraju na sljedeći način:

2.3. Složene naredbe

U bash ljusci postoji dosta složenih naredbi koje su sve detaljno opisane u man stranici. U ovom poglavlju pozabavit ćemo se s dvije grupe složenih naredbi. Prvu grupu čine operatori koji omogućavaju spajanje više jednostavnih naredbi u jednu cjelinu upotrebom operatora && i ||. Osim ta dva operatora, javlja se i operator ! koji mijenja izlaznu vrijednost programa, te zagrade koje omogućavaju izvršavanje naredbi unutar podljuske. Drugu grupu čine složene naredbe bash ljuske koje omogućavaju upravljanje tokom u skriptama.

2.3.1. Grupiranje jednostavnih naredbi

Za grupiranje jednostavnih naredbi koriste se operatori && i ||. Pogledajmo kako djeluje ti operatori na jednostavnim primjerima:

$ true && echo OKOK$ false && echo OK$ true || echo OK$ false || echo OKOK$

Dakle, ako neka naredba (ili ljuska) vrate vrijednost točno, tada se izvršava naredba nakon operatora &&. U suprotnom, ako naredba vraća logičku vrijednost netočno tada se ne izvršava naredba nakon operatora &&. Analogno, ali suprotno, vrijedi za operator ||. Naime, ako je povratna vrijednost naredbe točno, tada se ne izvršava naredba nakon tog operatora, a ako je povratna vrijednost netočno tada se izvršava.

Vrlo je lako zapamtiti u kojim slučajevima se izvršava naredba iza operatora, a kada ne. Naime, kod evaluacije aritemtičkog izraza A AND B, ako je a netočno, tada nije bitno koja je izlazna vrijednost operatora B pa se prema tome B ne mora uopće izvršiti! Ako je A točno, tada konačna vrijednost izraza ovisi o B te se B mora izvršiti, tj. evaluirati. Analogno je za operator OR. Ako je u izrazu A OR B, vrijednost A točno, tada je ukupni rezultat točno bez obzira koja je vrijednost izraza B te se izraz B u tom slučaju ne izvršava. Obratno, ako je vrijednost izraza A netočna, tada se mora izvršiti izraz B kako bi se odredila konačna vrijednost cjelokupnog izraza.

7

Page 14: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

Osim navedena dva operatora spomenut ćemo još i operator negacije, !, te zagrade. Njihovo djelovanje je najbolje vidjeti na primjerima:

$ true$ echo $?0$ ! true$ echo $?1$

Djelovanje zagrada je nešto složenije. Naime, izraz u zagradama se izvršava u posebnoj podljusci, što je relativno skupa operacija. Povratna vrijednost pohranjena u varijabli $? je identična zadnjoj naredbi u zagradi. Sljedeći primjer to ilustrira:

$ (true; false)$ echo $?1$ (false; true)$ echo $?0$

U navedenom primjeru koristili smo još jedan poseban znak, a to je točka-zarez (;). Naime, taj znak služi za odvajanje naredbi te se može koristiti umjesto tipke ENTER.

2.3.2. Složene naredbe bash ljuske

Složene naredbe koje ćemo obraditi omogućavaju kontrolu toka u skriptama. To su for petlja te uvjetna grananja koja se ostvaruju case i if naredbama.

for petlja služi za ponavljanje određenog bloka naredbi pri čemu se varira određena varijabla. Iako asocira na petlje dostupne u različitim programskim jezicima ta petlja je dosta drugačija. Krenimo s jednostavnim primjerom koji će ispisati prvih deset znamenki:

$ for i in 0 1 2 3 4 5 6 7 8 9> do> echo $i> done

U ovom slučaju se prvi puta susrećemo s višelinijskim naredbama bash ljuske. Prilikom upisivanja višelinijske naredbe pojavljuje se novi prompt, >. Naime, upisivanjem samo jednog dijela naredbe ljuska traži da se unese i ostatak naredbe te to označava ispisivanjem navedenog prompta. U trenutku kada je naredba kompletna ljuska izvršava naredbu. Prethodnu naredbu bilo je moguće upisati i u samo jednoj liniji na sljedeći način:

$ for i in 0 1 2 3 4 5 6 7 8 9; do echo $i; done

U općem slučaju, navedena varijabla for ima sljedeću sintaksu

$ for <varijabla> in <lista elementa>> do> <blok naredbi>> done

8

Page 15: Marko Salkic - Linux - Napredni Tecaj

3. Jezgra operacijskog sustava Linux i sklopovlje

3.1. Parametri jezgre operacijskog sustava

3.2. Moduli

3.3. device

3.4. Virtualni datotečni sustavi

3.4.1. kernelVFS

3.4.2. procfs

3.4.3. sysfs - TODO

3.4.4. devmapper - TODO

3.4.5. tmpfs - TODO

3.5. Prvođenje jezgre operacijskog sutava

Literatura

http://reactivated.net/writing_udev_rules.html

9

Page 16: Marko Salkic - Linux - Napredni Tecaj

4. Upravljanje diskovima na Linux sustavuJedna od osnovnih zadaća svakog operacijskog sustava je upravljanje diskovima i drugim medijima za masovnu pohranu podataka. Zato se u ovom poglavlju detaljnije bavimo upravljanjem diskova. Prije no što objasnimo detaljnije na koji način se u Linuxu upravlja s diskovima ukratko ćemo izložiti nešto osnovne teorije o samim diskovima koja je nevezana uz Linux, tj. vrijedi bez obzira koji operacijski sustav se upotrebljava.

Diskove možemo podijeliti na osnovu niza parametara. Neki od bitnijih navedeni su u tablici 1.

Tablica 1. Parametri po kojima se razlikuju čvrsti diskovi

Parametar Tipična vrijednost Moguće vrijednosti

Kapacitet

Broj okretaja 7200 o/min 5400, 7200, 10000, 150000

Način spajanja na računalo PATA, SATA, SCSI, FireWire, USB

Objašnjenje pojedinih parametara (broj okretaja, sučelja)

Objašnjenje cilindara, sektora, traka, LBA način adresiranja na disku.

Još od dana MS DOS operacijskog sustava moguće je podijeliti jedan fizički čvrsti disk na više logičkih diskova. Prvotni razlog uvođenja te mogućnosti bilo je ograničenje FAT datotečnog sustava radi postizanja efikasnijeg korištenja raspoloživog prostora. No, i nakon uvođenja nešto naprednijeg FAT32 datotečnog sustava ostala je mogućnost podjele diska na logičke diskove. Treba napomenuti kako se u ovom tečaju bavimo načinom podjele koji je specifičan za PC kompatibilna računala. Druge arhitekture i drugi operacijski sustavi imaju svoj specifičan način podjele diskova koji se u većoj ili manjoj mjeri razlikuje od ovdje opisanog.

Particija je kontinuirani dio fizičkog diska koji se ponaša kao jedan zaseban disk. Budući da taj disk ne postoji kao fizički uređaj nazivamo ga logičkim diskom. U nastavku teksta potpuno ravnopravno će se koristiti pojmovi particija i logički disk. Na fizičkom disku može biti više logičkih diskova koji se međusobno ne smiju preklapati. Svi podaci o logičkim diskovima zapisani su na početku fizičkog diska, u dijelu koji se naziva Mater Boot Record, ili skraćeno, MBR. U MBR-u je rezervirana određena količina prostora koja omogućava definiranje do maksimalno do četiri particije. Budući da je u određenim slučajevima potrebno imati i više od toga onda je definirana tzv. proširena particija (extended partition) u kojoj je moguće imati do 16 particija. Kako bi se razlikovale te nove particije od četiri osnovne za njih je uveden naziv primarne particije. Bitno je primjetiti kako proširena particija koristi jedno mjesto za primarnu particiju, tj. kada se definira proširena particija, moguće je definirati još maksimalno 3 primarne particije.

Ubaciti slike i odgovarajući tekst koji grafički prikazuju mogućnosti podjele diskova na particije.

Već je spomenuto kako se particije ne smiju preklapati. Također, između susjednih particija ne bi smjelo biti ni praznog prostora. Takva situacija nije štetna, ali na taj način na disku ostaje prostor koji se ne može iskoristiti.

Objasniti kako se vide diskovi i particije u Linux-u (hd[abcd], sd[abcde...]

Objasniti kako pronaći disk u logu

10

Page 17: Marko Salkic - Linux - Napredni Tecaj

4. Upravljanje diskovima na Linux sustavu

Sada uvesti naredbu fdisk, prvo kako vidjeti disk, potom kako kreirati particiju, obrisati particiju, uvesti tip particije, spremiti particije...

Zatim uvesti druge alate za uređivanje particijske tablice (cfdisk, ...)

Sada uvesti datotečni sustav koji se stavlja na particiju (layering)

Osnovno o datotečnim sustavima i vrste (često upotrebljavane). Journaling.

Rad s ext3 datotečnim sustavom. Kreiranje, provjera.

Sada mount naredba i umount naredbe.

Nakon toga fstab datoteka.

Objasniti LVM

Disk ne mora biti potpuno particioniran, te je ponekad dobro ostaviti nešto prostora na kraju diska koji još nije dodijeljen nijednom instaliranom operacijskom sustavu. Poslije, kad shvatite koju instalaciju najviše koristite, na taj preostali prostor možete staviti datotečni sustav.

Particije se ne mogu micati niti povećavati ili smanjivati bez uništavanja datotečnog sustava koji sadrže. Zato ponovno particioniranje obično uključuje backup i vraćanje svih datotečnih sustava o kojim se radi. U stvari, prilično je uobičajeno da potpuno poremetite stvari, pa treba spremiti na sigurno sve podatke sa svih diskova tog računala prije nego što i dirnete stvari tipa fdisk.

Međutim, neke particije s određenim vrstama datotečnih sustava zapravo se mogu podijeliti bez gubljenja podataka (uz malo sreće). Na primjer, pomoću programa parted moguće je stvoriti, uništiti, promjeniti veličinu, provjeriti ispravnost ili kopirati particiju kako bi oslobodili prostora za instaliranje Linuxa bez potrebe za izradom backup-a i bez gubitaka podataka. Ipak se uvijek preporuća da ne dirati takve stvari bez pažljivog backupa svega na stroju.

Particioniranje znači podjelu jednog tvrdog diska na više logičkih diskova. Svaki taj logički dio predstavlja jednu particiju. Drugim riječima, particija je niz uzastopnih blokova na tvrdom disku.

Podaci o particijama se nalaze u particijskoj tablici, koja se nalazi na početku tvrdog diska.

Tvrdi disk je treba particionirati zbog slijedećih prednosti:

1. Enkapsulacija podataka. Ponekad, greška korisnika će rezultirati gubitkom podataka samo na jednoj particiji, a ne na cijelom tvrdom disku.

2. Povećavanje efikasnosti diska. Puno je lakše nalaziti podatke na malim diskovima, nego na većim, pa se nalaženje podataka ubrzava.

3. Ograničavanje rasta podataka. Neke podatke možemo snimati na jednu particiju i snimljeni podaci sigurno neće moći prijeći veličinu particije. To je posebno bitno na serverima, gdje bi se inače moglo dogoditi da neki korisnik popuni cijeli tvrdi disk te da dođe do pada servera.

Particioniranje se obavlja preko posebnih alata. Najpoznatiji su fdisk, sfdisk, cfdisk, parted, Partition Magic, DiskDrake, DiskDruid.

11

Page 18: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

4.1. Vrste particija

Broj particija na Intel sustavu ograničen je od početka: izvorna particijska tablica zapisuje se kao dio boot sektora i sadržavala prostora za samo 4 particije. Ove particije sada se nazivaju primarne particije. Kad je potreba za više particija na sustavu postala očigledna, izmišljene su logičke particije. Broj logičkih particija nije ograničen: svaka logička particija sadrži pokazivač na slijedeću logičku particiju, pa teoretski možete imati neograničen lanac particija.

Iz razloga kompatibilnosti moralo se označiti prostor koji koriste sve logičke particije. Ako koristite logičke particije, jedna je primarna particija označena kao extended (proširena), a njen početak i kraj pokazuju na prostor koji zauzimaju logičke particije. Naravno, prostor svih logičkih particija mora biti neprekinut. Može postojati samo jedna proširena particija: nijedan fdisk neće stvoriti više od jedne. Jedna particija se najčešće koristi kao virtualna memorija. To je swap particija.

Linux radi s ograničenim brojem particija po disku. Pod Linuxom možete koristiti 4 primarne particije (3 korisne, ako koristite logičke particije zbog korištenja jedne extended particije ) i najviše 15 particija na SCSI disku (na IDE disku sve skupa 63).

Primarne su particije 1, 2, 3 i 4. Dakle, /dev/hda1 je prva primarna particija na prvom IDE disku itd. Logičke particije imaju brojeve iznad 5, pa je /dev/sdb5 prva logička particija na drugom SCSI disku.

Svaka particija ima adresu početnog i završnog bloka i vrstu. Vrsta je numerički kod (jedan bajt) koji dotičnu particiju pripisuje određenoj vrsti operacijskog sustava. Na sreću računalnih konzultanata kodovi za vrste particija nisu baš jedinstveni, pa uvijek postoji mogućnost da dva operacijska sustava koriste isti kod vrste.

Linux koristi kod 0x82 za swap particije i 0x83 za "urođene" datotečne sustave (za većinu vas to je ext2 ili njegovo journaling proširenje ext3). Nekad popularan, sad zastarjeli Linux/Minix datotečni sustav koristio je kod 0x81. OS/2 svoje particije označava s 0x07, kao i NTFS Windowsa NT. MS DOS koristi nekoliko kodova za razne varijante FAT datotečnog sustava: poznate su 0x01, 0x04 i 0x06. DR-DOS je koristio 0x81 za zaštićene FAT particije, tako se sudarajući s Linux/Minix-om, no ni Linux/Minix ni DR-DOS više nisu u širokoj primjeni. Usput, proširena particija koja se koristi kao sadržavatelj logičkih ima kod 0x05.

4.2. Imena particija Linux sustava

Za razliku od operacijski sustav iz Microsoft Windows porodice u Linuxu postoji vrlo različito označavanje particija. Linux particija je reprezentirana sa svojom datotekom u direktoriju /dev.

O imenima uređaja postoje konvencije na koje se oslanjaju mnogi alati sustava. Očekuju da se vaši IDE diskovi zovu /dev/hda/;, a SCSI diskovi /dev/sda/;. Diskovi su označeni s a, b, c, ..., pa je /dev/hda vaš prvi IDE disk, a /dev/sda vaš prvi SCSI disk. Oba uređaja predstavljaju cijele diskove, od prvog bloka. Pisanje na ove uređaje krivim alatima uništit će njihov master boot loader i particijsku tabelu, čineći sve podatke na tom disku ili vaš sustav nedostupnim. Pazite što radite, i, opet, backup prije toga.

IDE tvrdi diskovi su reprezentirani datotekama /dev/hda, /dev/hdb, /dev/hdc i /dev/hdd. Prva datoteka odgovara primarnom disku na prvom IDE kanalu, a posljednja odgovara sekundarnom disku na drugom IDE kanalu.

SCSI diskovi se označavaju oznakama /dev/sda, /dev/sdb, itd.

12

Page 19: Marko Salkic - Linux - Napredni Tecaj

4. Upravljanje diskovima na Linux sustavu

Particije imaju slijedeća imena: /dev/hdb2 i /dev/sdb1. Prva datoteka označava drugu particiju na sekundarnom disku na prvom IDE kanalu. Druga datoteka označava prvu particiju na drugom SCSI uređaju.

Svaka particija se procesom spajanja (engl. mount) spaja na određeni direktorij u stablu direktorija. Ulaskom u pojedini direktorij se zapravo odlazi na pojedinu particiju. Sve particije se dodaju u datoteku /etc/fstab koja omogućuje lakše spajanje pojedinih particija.

4.3. Spajanje Linux particija na stablo direktorija

Da bi se postiglo jednostavnije održavanje Linux operacijskog sustava preporuča se pojedine direktorije držati na posebnim particijama. U Linuxu se najčešće slijedeći direktoriji stavljaju na posebne particije:

1. /var. Ovaj direktorij sadrži email sandučiće, datoteke za praćenje rada sustava i slično. Serverska računala moraju imati ovaj direktorij na posebnoj particiji od /, kako bi se ograničio njegov rast.

2. /usr. U ovaj direktorij se spremaju izvšne verzije svih aplikacija instaliranih na računalu. Najčešće, ovo je jedna dosta velika particija.

3. /tmp. Ovaj direktorij sadrži privremene podatke od korisnika koje im najčešće zbog veličine ne stanu u kućni direktorij. Ovaj direktorij se isto stavlja na posebnu particiju, kako bi se ograničio njegov rast te prilikom pohrane podataka (engl. backup) ne bi pohranjivali nepotrebni podaci.

4. /home. Ovdje se nalaze kućni direktoriji svih korisnika na sustavu. Ako nisu postavljna ograničenja na veličinu direktorija, onda ovo mora biti posebna particija.

5. /boot. Ovo je najčešće primarna particija vrlo male veličine. Dobro je imati ovu particiju, jer nas može spasiti u slučaju gubitka podataka.

6. /etc. Sadrži konfiguracijske datoteke. Najčešće nije prevelik.

Ovaj način particioniranja je jako pogodan za pohranu podataka. Naime, na vrlo jednostavan način se može raditi pohrana jedne particije. Particije kao što su /home i /var se moraju vrlo često pohranjivati, dok se npr. /etc ne mora, jer su izmjene u njemu relativno rijetke,

4.4. Kako su ugrađene u sustav

– kao i svi deviceovi pomocu /dev/uredjaja

– mount

Fstab je datoteka koja je dio sistemske konfiguracije te se nalazi u /etc/fstab. Ona sadrži listu svih korištenih diskova i particija i u njoj su zapisani podaci o tome kako se particije integriraju u sam datotečni sustav. Fstab datoteka zamišljena je da se ručno uređuje te da ju sustav čita, danas postoje grafički alati koji služe za jednostavniju administraciju, te neki mogu i sami izvršit izgradnju fstab(većina njih je vezana uz pojedinu distribuciju te ih ovdje nećemo opisivati), a jedan od alata za grafičko editiranje je Kfstab.

Primjer fstab datoteke:

13

Page 20: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

# device_name mount_point fs-type options dump-freq pass-numLABEL=/ / ext3 defaults 1 1none /dev/pts devpts gid=5,mode=620 0 0none /proc proc defaults 0 0none /dev/shm tmpfs defaults 0 0

# my removable media/dev/cdrom /mnt/cdrom udf,iso9660 noauto,owner,ro 0 0/dev/fd0 /mnt/floppy auto noauto,owner 0 0

# my NTFS Windows XP partition/dev/hda1 /mnt/WinXP ntfs ro,defaults 0 0

/dev/hda6 swap swap defaults 0 0

# my files partition shared by windows and linux/dev/hda7 /mnt/shared vfat umask=000 0 0

U fstab datoteci svi reci koji počinju s # su komentari. Sam sadržaj fstab datoteke podijeljeni je u šest kolona koja su razdvojene prazninama (razmak ili tab).

• Prvo polje: označava ime uređaja ili označava neku vrstu podatkovnog izvora (npr /dev/hda1, /dev/sda1, /dev/hdc7 ).

• Drugo polje: označava mjesto/putanju u datotečnom sustavu gdje se podaci moraju smjestit(npr /mnt/Documents/, /mnt/media/, /windows/C)

• Treće polje označava vrstu datotečnog sustava koji će se koristit, tj ovim poljem se određuju koji će se algoritmi korsiti za tumačenje pristupanje podacima na particiji (npr ext2, ext3, vfat, ntfs, udf, iso9660, auto)

• Četvrto polje određuje parametre datotečnog sustava te se ovdje definiraju dodatni parametri za čitanje/pisanje po vrsti datotečnog sustava navedenoga u polju tri. Ovdje možemo definirati želimo li mount-at kod boot (auto) ili ne želimo (noauto). Većina opcija ovog polja ovisi o korištenom podatkovnom sustavu i pa je za određeni datotečni sustav potrebno pogledati man mount.

• Peto polje služi za one datotečne sustave koji imaju mogućnost arhiviranja i podešavanje dump-a

• Šesto polje označava redosljed kojim će se vršiti provjera grešaka s fsck kod boot-a. Ovim se može odredit koje particije mogu biti istovremeno provjeravane, preporuča se da particije na istom fizičkom disku nisu provjeravane istovremeno već jedna po jedna.

Za detaljnije informacije pogledati man stranice od fstab i mount-

4.5. Kreiranje particijske tablice

Particije se stvaraju i brišu programom fdisk. Svaki operacijski sustav s malo samopoštovanja dolazi s fdiskom i koji se tradicionalno čak i zove fdisk (ili FDISK.EXE) u skoro svim OS-evima. Neki fdiskovi, kao što je DOS-ov, ponešto su ograničeni u radu s particijama drugih operacijskih sustava. Takva ograničenja uključuju potpunu nesposobnost rada s bilo čime što ima nepoznat kod, nesposobnost rada s brojevima cilindara većim od 1024 i nesposobnost stvaranja ili čak razumijevanja particija koje ne završavaju na granici cilindra. Na primjer, MS-DOS fdisk ne može brisati NTFS particije; OS/2 fdisk poznat je po tihom "ispravljanju" particija stvorenih u Linux fdisku koje ne završavaju na granici cilindra; obojica, DOS i OS/2 fdisk, imaju problema s diskovima koji imaju više od 1024 cilindra.

– particioniranje na linuxu

14

Page 21: Marko Salkic - Linux - Napredni Tecaj

4. Upravljanje diskovima na Linux sustavu

Particioniranje tvrdog diska ključan je dio svake instalacije Linux-a. Najzastupljeniji alat za manipuliranje particijama je fdsik. Treba napomenuti da za Windows operacijske sustave postoji alat isto imena, no drugih sličnosti osim imena nema pa je samo korštenje fdisk alata na linuxu drugačije u odnosu na windows. Za fdisk većina distribucija nudi ljepša front-end sučelja od kojih su neka čak grafička, no kako fdisk postoji na svim distribucijama zato poznavanje ovog alata omogućuje korištenje ostalih sučelja.

Fdisk se pokreće nardebom fdisk iza koje moramo navesti uređaj kojem želimo promijeniti tablicu particija.

Npr ako žeilimo promijeniti stanje glavnog diska na prvom kanalu onda u naredbeni redak unosimo:

# fdisk /dev/hda

Nakon toga dočekat će nas naredbena linija, gdje su naredbe za upravljanje samim programom ASCII znakovi. Za ispis svih naredbi potrebno je upisati “m”.Važnije naredbe i njihova uporaba će ovdje bit opisane i to logičkim slijedom njihova korištenja.

Prva naredba s kojom se susrećemo jest “p”, pomoću nje dobivamo ispis particikjske tablice na disku te ostale podatke o disku kao što su veličina, broj cilindara, sektora, koja particija je označena kao bootabilna, na kojem cilindru počinje koja particija i slično.

Disk /dev/hda: 255 heads, 63 sectors, 4963 cylindersUnits = cylinders of 16065 * 512 bytes

Device Boot Start End Blocks Id System/dev/hda1 * 1 262 2104483+ 83 Linux/dev/hda2 263 785 4200997+ 83 Linux/dev/hda3 786 1308 4200997+ 83 Linux/dev/hda4 1309 4963 29358787+ 5 Extended/dev/hda5 1309 2583 10241406 8e Linux LVM/dev/hda6 2584 3858 10241406 8e Linux LVM/dev/hda7 3859 3924 530113+ 82 Linux swap

Sljedeće bitna naredba je “n”, pomoću nje stvaramo nove particije. Nakon unošenja naredbe moramo odabrati da li želimo napraviti primarnu ili proširenu particiju. Možemo imati 4 primarne praticije ili 3 primarne i 1 proširenu. Na proširenoj particiji moguće je tada napravit proizvoljan broj logičkih particija. Primarne particje imati će brojku 1-4, dok će logičke počet s 5 na više.

Pokretanjem naredbe n dobivamo odabir želimo li primarnu (p) ili proširenu particiju(e)

Command action e extended p primary partition (1-4)

odabiraom p bit ćemo pitani za broj te se preporuča odabrati prvi slobdni broj :

Partition number (1-4): 1First cylinder (1-4161, default 1):

Zatim ćemo bit pitani od kojeg cilindra na disku želimo da počne naša particija te s ovdje isto preporuča uzeti prvo slobodno mjesto koje nam piše na zaslonu (1 u našem primjeru) osim ako ne želimo ostavit slobodnog prostora za kasnije. Ako želimo uzeti predefiniranu opciju dovoljno je pritisnuti enter za dalje.

Using default value 1

15

Page 22: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

Last cylinder or +size or +sizeM or +sizeK (1-4161, default 4161):

Sad moramo odabrati završni cilindar predefinirani nam je zadnji, tj. cijeli prostor. Ako želimo zadati veličinu možemo napisati +velicnaM u MB il +velicanK u KB, npr zazuzet čemo 500MB:

Using default value 1Last cylinder or +size or +sizeM or +sizeK (1-4161, default 4161): +500M

Da bi vidjeli strukturu do sad kreitranu pritisnuti p:

Disk /dev/hda: 2147 MB, 2147483648 bytes16 heads, 63 sectors/track, 4161 cylindersUnits = cylinders of 1008 * 512 = 516096 bytes

Device Boot Start End Blocks Id System/dev/hda1 1 970 488848+ 83 Linux

Vidimo sad da je stvorena particija /dev/hda1 s Id 83 što znači da je pripremljena za ext2/ext3 particiju, što isto vidimo u System polju u kojem piše Linux. Da bi vidjeli popis svih Id-ova treba unjet komandu l:

Command (m for help): l

0 Empty 1e Hidden W95 FAT1 80 Old Minix be Solaris boot 1 FAT12 24 NEC DOS 81 Minix / old Lin bf Solaris 2 XENIX root 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT- 3 XENIX usr 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT- 4 FAT16 <32M 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT- 5 Extended 41 PPC PReP Boot 85 Linux extended c7 Syrinx 6 FAT16 42 SFS 86 NTFS volume set da Non-FS data 7 HPFS/NTFS 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / . 8 AIX 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility 9 AIX bootable 4f QNX4.x 3rd part 8e Linux LVM df BootIt a OS/2 Boot Manag 50 OnTrack DM 93 Amoeba e1 DOS access b W95 FAT32 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS e4 SpeedStor e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs f W95 Ext'd (LBA) 54 OnTrackDM6 a5 FreeBSD ee EFI GPT10 OPUS 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/11 Hidden FAT12 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b12 Compaq diagnost 5c Priam Edisk a8 Darwin UFS f1 SpeedStor14 Hidden FAT16 <3 61 SpeedStor a9 NetBSD f4 SpeedStor16 Hidden FAT16 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fd Linux raid auto18 AST SmartSleep 65 Novell Netware b8 BSDI swap fe LANstep1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid ff BBT1c Hidden W95 FAT3 75 PC/IX

Ako odlučimo promjenit tip particije to možemo komandom t, te ćemo ju promijeniti u Linux swap Id 82, ako želimo vidjet listu i sad možemo pritisnut l i vidjet ju ponovno:

Command (m for help): tSelected partition 1Hex code (type L to list codes): 82Changed system type of partition 1 to 82 (Linux swap / Solaris)

Zadatak:

Na preostali dio diska stvorit Linux particiju.

Fdiskom možemo odredit koja particja će bit označena boot zastavicom, to radimo komandom a, te ćemo označit hda2 kao onu s koje će se boot-a, hda1 će bit swap:

16

Page 23: Marko Salkic - Linux - Napredni Tecaj

4. Upravljanje diskovima na Linux sustavu

Command (m for help): aPartition number (1-4): 2

Command (m for help): p

Disk /dev/hda: 2147 MB, 2147483648 bytes16 heads, 63 sectors/track, 4161 cylindersUnits = cylinders of 1008 * 512 = 516096 bytes

Device Boot Start End Blocks Id System/dev/hda1 1 970 488848+ 82 Linux swap / Solaris/dev/hda2 * 971 4161 1608264 83 Linux

Napomena u fdisku je moguće postavit boot zastavicu na više particija, ali tad sustav neće bit bootabilan te je zbog toga potrebno pazit da se ne postavi boot zastavica na više particija. Ako želimo promjenit boot zastavicu ponovimo postupak kao i kod postavljanja.

Ukoliko smo negdje u postupku pogriješili ili želimo neku od već postojećih particija obristati to možemo s naredbom d npr želimo izbrisati /dev/hda2:

Command (m for help): dPartition number (1-4): 2

Command (m for help): p

Disk /dev/hda: 2147 MB, 2147483648 bytes16 heads, 63 sectors/track, 4161 cylindersUnits = cylinders of 1008 * 512 = 516096 bytes

Device Boot Start End Blocks Id System/dev/hda1 1 970 488848+ 82 Linux swap / Solaris

Sve što radimo još uvijek nije zapisano na disk, nakon što s p provjerimo da je sve onako kak smo željeli, i nakon što smo učinili sve izmjene koje su potrebne možemo te izmjene izvršit i promjene zapisat na disk, nakon ovoga više nije moguće poništit izmjene zato oprez. Da bi do sad napravljene promjene zapisali na disk potrebno je pozvat naredbu w:

Command (m for help): wThe partition table has been altered!

Calling ioctl() to re-read partition table.Syncing disks.

Nakon toga će fdsik završit sve operacije i izaći u komandnu liniju.

Cfdisk je drugi alat kojim možemo izvesti particioniranje diska. Funkcionalnost mu je jednaka kao i fdisk-a a razlika je u sučelju u kojem se ne unose nardebe već se u konzolnom sučelju micanje krusrorskih tipki mijenja odabir što želimo napravit i imamo stalni prikaza onog što radimo. Izgled cfdiska :

17

Page 24: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

cfdisk 2.12r Disk Drive: /dev/hda Size: 2147483648 bytes, 2147 MB Heads: 16 Sectors per Track: 63 Cylinders: 4161

Name Flags Part Type FS Type [Label] Size (MB)----------------------------------------------------------------------------hda1 Primary Linux swap / Solaris 500.62hda2 Boot Primary Linux 1646.87

[Bootable] [ Delete ] [ Help ] [Maximize] [ Print ] [ Quit ] [ Type ] [ Units ] [ Write ]

Print help screen

Pošto je funkcionalnost cfdiska i fdiska ista neće biti detaljno opisivana uporaba cfdisk-a.

– zadatak: ???

4.6. Datotečni sustavi

Linux u svojoj jezgri podržava više različiti datotečni sustava, svaki od njih ima svoje specifičnosti, ali možemo ih podijeliti u dvije kategorije, u obične datotečne sustave i dnevničke datotečne sustave (engl. journaling file system).

Dnevnički datotečni sustava bilježi promjene u dnevnik( obično je to kružni zapis na posebno alociranom prostoru) prije nego se stvarno promjene zapišu u glavni datotečni sustav.

Datotečni sustavi su velike podatkovne strukture, njihovo osvježavanje da bi se prikazale promjene nad datotekama i direktorijima zahtjeva mnogobrojne operacije pisanja. Proces pisanja mora bit izvršen jako brzo, jer u slučaju nekog prekida (npr. nestanak električne energije ili rušenje samog operacijskog sustava) može ostaviti te podatkovne strukture u nekom neispravnom međustanju.

4.6.1. Ext3

Ext3 je datotečni sustav s journall-ingom, proširenje je Ext2 datotečnog sustava i razlika među njima je da ext3 ima jurnall-ing a ex2 nema. Dolazi kao predefinirani datotečni sustava na najpopularnijim distribucijama Red Hat Linux, Fedora Core, Debian i Ubuntu Linux.

Iako se ne ističe preformansama i skalibilnošću za razliku od ReiserFS i XFS, njegova prednost je da dozvoljava da se postojeći ext2 datotečni sustav transformira u ext3 bez podrebe spremanja i obnove podataka s ext2 paritcije.

Ex3 proširuje ext2 s:

• dnevnikom (engl. Journal)

• H-tree (hashed tree) indeksomm direktorija

• Online filesystem resizing

Bez ovih opcija svaki ext3 datotečni sustava valjani je ext2 datotečni sustav, te je zbog toga moguće koristit već postojeće alate za održavanje dototečnog sustava (ex3 koristi iste alate kao i ext2), kao što je naprimjer fsck . Isto tako konverzija ovih datotečnih sustava iz ext2 u ext3 i obrnuto jednostavna je i moguće ju je izvesti bez opasnosti na gubitak podataka koji se nalaze na tom datotečnom sustavu.

18

Page 25: Marko Salkic - Linux - Napredni Tecaj

4. Upravljanje diskovima na Linux sustavu

4.6.2. XFS

XFS is a high-performance journaling file system created by Silicon Graphics for their IRIX operating system. In May 2000, Silicon Graphics released XFS under the GNU General Public License.

XFS has been merged into the mainline Linux 2.4 (as of 2.4.25, when Marcelo Tosatti judged it stable enough) and 2.6 kernels, making it almost universally available on Linux systems. Installation programs for the SuSE, Gentoo, Mandrake, Fedora, Slackware and Debian Linux distributions all offer XFS as a choice of filesystem. There are also moves to port the filesystem to FreeBSD.

Features

It offers the following features:

Metadata-only journaling

Online resizing (growth only)

Striped allocation (maximizes throughput by aligning I/O with stripes on RAID devices)

Online defragmentation

A real-time I/O API (for hard or soft real-time applications, such as video streaming)

Allocate-on-flush (a scheme to reduce fragmentation by batching together allocations for slowly growing files)

Disadvantages

There is no known way to shrink an XFS filesystem in-place.

XFS suffers from out-of-order write hazards.

4.6.3. JFS

JFS is a journaling filesystem created by IBM. It is available under an open source license. There are versions for AIX, eComStation, OS/2 and Linux.

4.6.4. ReiserFS

ReiserFS je opće namjenski datotečni sustav razvijen od tima u tvrtki Namesys pod vodstvom Hans Reiser-a. Trenutno je podržan od Linux-a a u budućnosti postoji mogućnost podrške za ostale operacijske sustave. ReiserFS je uključen u Linux kernel od verzije 2.4.1, te je bio prvi jurnall datotečni sustav uključen u kernel, danas dolazi kao preddefinirani datotečni sustav na Slackware, SuSE, Xandros, Yoper, Linspire, Kurumin Linux, FTOSX i Libranet Linux distribucijama.

4.6.5. Swap

4.7. fajlsustavi

– sto su, zasto postoje, razlika journaling i obicnih

– ext3

– xfs

– jfs

– reiser

19

Page 26: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

– swap

4.8. Kreiranje datotečnog sustava na particiji

Nakon što je kreirana particija na tvrdom disku na njoj ne postoji datotečni sustav. Da bi kreirali datotečni sustav na particiji potrebno je na particiji izgraditi strukturu datotečnog sustava. Tome služi alata mkfs koji je zapravo forntend za skup programa mkfs.fstype gdje je fstype tip datotečnog sustava (npr . ext2,vfat, ext3, xfs ).

Sintaksa mkfs jest :

mkfs [ -V ] [ -t fstype ] [ fs-options ] filesys [ blocks ]

parametri u uglatim zagradam nisu potrebni.

-V daje detaljnji opis onog što radi mkfs

-t fstype određuje tip datotečnog sustava koji će bit korišten, npr -t ext3, ako se ne navede ovaj parametara tada se koristi predefinirani koji je ext2

filesys određuje gdje će se izgraditi datotečni sustav, to može biti unaprijed kreirana particija npr /dev/hda1 ili neka datoteka /tmp/disk.dat pošto Linux vidi particije kao datoteke.

Primjer:

Na particji /dev/hda2 kreiraj ext3 datotečni sustav.

20

Page 27: Marko Salkic - Linux - Napredni Tecaj

4. Upravljanje diskovima na Linux sustavu

# mkfs -t ext3 /dev/hda2

mke2fs 1.39-WIP (31-Dec-2005)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

201344 inodes, 402066 blocks

20103 blocks (5.00%) reserved for the super user

First data block=0

13 block groups

32768 blocks per group, 32768 fragments per group

15488 inodes per group

Superblock backups stored on blocks:

32768, 98304, 163840, 229376, 294912

Writing inode tables: done

Creating journal (8192 blocks): done

Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 25 mounts or

180 days, whichever comes first. Use tune2fs -c or -i to override.

The exit code returned by mkfs is 0 on success and 1 on failure.

In actuality, mkfs is simply a front-end for the various file system builders (mkfs.fstype) available under Linux. The file system-specific builder is searched for in a number of directories like perhaps /sbin, /sbin/fs, /sbin/fs.d, /etc/fs, /etc (the precise list is defined at compile time but at least contains /sbin and /sbin/fs), and finally in the directories listed in the PATH enviroment variable. Please see the file system-specific builder manual pages for

– mkfs

– kreiranje fs-a na obicnom fajlu velicine X (opet linuxVFS) i montiranje doticnog

– zadatak: dodati particiju /dev/hda7 tipa ext3 u /etc/fstab, mountpoint je /data, svi korisnici imaju pravo montiranja, particija je read only.

4.9. filesystem popravak

– zasto se fs trga

– kako ga pokusati popraviti

21

Page 28: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

4.10. imagiranje particije

– objasnjenje da iz razloga sto particiju “vidimo” kao fajl mozemo doticnu spremiti negdje na disk veceg kapaciteta, i opet zapisati natrag na particiju

– cat, d.d.

– zadatak: stvoriti datoteku velicine 100 mb u /tmp, kreirati na njoj ext3 datotecni sustav, montirati ju u /bla direktorij, spremiti na nju sadrzaj /etc direktorija, odmontirati ju, podesiti sustav da kod ponovnog bootanja montira doticnu datoteku, kao particiju u kojoj je /etc direktorij, takodjer je potrebno u menu boot loader dodati mogucnost da se sustav boota normalno (sa normalnim /etc om, ukoliko dodje do nepredvidjenih problema),rebootati sustav, provjeriti uspjesnost operacije, vratiti sustav u prvobitno stanje.

– dobivanje iso imagea cd-a sa cat-om

Pošto linux svaku particiju, fizički uređaj vidi kao običnu datoteku moguće je njima manipulirati kao da su datoteke. Za tu primjenu ćemo koristiti naredbe dd i cat. Cat je program koji spaja sadržaj iz liste datoteka i/ ili standardnoga ulaz, i vraća spojeni sadržaj na standardni izlaz. Ideja korištenja ove naredbe je da se izlaz preusmjeri u neku datoteku. Npr koprianje Cd -a u iso image:

# cat /dev/cdrom >image.iso

dd je alata za binarno kopiranje i konvertiranje datoteka, kako Linux svaku particiju vidi kao binarnu datoteku dd je moguće koristi za kopiranje cijelih particija u neku datoteku te tada možemo premjestit na neku drugu fizičku lokaciju radi backupa. d.d. Omogućuje kopiranje fiksnog broja bytova ili blokova, vršeći konverziju u letu byte-order ili egzotične pretvorebe kao što su EBCDIC u ASCII. Danas se najviše korsti za kopranje cijelih ili dijelova raw uređaja radi backupa, ili za stvaranje datoteka određene veličine koje sadrže samo nule (čitanje s /dev/null) ili slučajnog sadržaja /dev/random. Pošto dd čita binarno često se koristi u forenzičkim analizama kako bi se napravila kopija nad kojom se može vršit ispitivanja. d.d. ima drugačiju sintaksu u odnosu na većinu unix naredbi, korsiti “option=value” sintaksu za razliku od standardne “-option value” sintakse. Sintaksa je:

dd [opcije]

A opcije su :

• if=file – ulazna datoteka : čita se s file umjesto s standardnog ulaza

• of=file – izlazna datoteka : piše se u file umjesto u standardni izlaz

• ibs=bytes – veličana bloka podataka koji se čita odjednom

• obs=bytes – veličina bloka podataka koji se odjednom zapisuje, ako se ne navade ništa predodređena vrijednost je 512 byta

• count =blocks – količina podataka koje treba kopirati

• skip=blocks – kad se čita s ulaza, preskoči blocks broj blokova veličine ibs

• seek=blocks – kad se piše na izlaz, , preskoči blocks broj blokova veličine obs

• conv=keywords - konvertiraj prema listi ključnih riječi keywords odvojenih točkom-zarezom

• cbs=bytes – Konvertiraj bytes bytova odjednom

conv opcije su :ascii, ebcdic, ibm, block, unblock, lcase, ucase, notrunc, swab, noerror, sync.

22

Page 29: Marko Salkic - Linux - Napredni Tecaj

4. Upravljanje diskovima na Linux sustavu

Primjeri:

stvaranje image s diskete :

dd if=/dev/fd0 of=floppy.img

snimanje image diskete na disketu:

dd if=floppy.img of=/dev/fd0

Koprianje cijele particije i image:

dd if=/dev/hda1 of=mywindowspartition.image

Primjer koprianje CD u iso image :

dd if=/dev/cdrom of=image.iso

Zadatak:stvori datoteku od 128 MB, stvori na njoj ext2 particiju i mount-aj ju na /mnt/podaci/

Stvori datoteku:

# dd if=/dev/zero of=linux.ex2 bs=1024 count=131072

131072 je točno 128 MB, zatim stvaramo datotečni sustav

mkfs -t ext2 podaci.dat

Bit ćete pitani dali želite nastaviti jer podaci nisu blokovska jedinica, na što odgorite s Yes. Nakon što je datotečni sustav uspješno stvoren mount-ajte ga u /mnt/podaci, ali prije provjertie dali postoji direktorij /mnt/podaci/, ako ne postoji stvorite ga.

mount podaci.dat /mnt/podaci -o loop=/dev/loop0

I to je to.

Antiprimjeri ili što nebi trebali radit( ili možda bi?):

Prepisati disk nulama, onemogućava vračanje podataka

dd if=/dev/zero of=/dev/hda

Na početak primarnog diska zapisat neku mp3 pjesmu, uništava particijsku tablicu

dd if=funnysong.mp3 of=/dev/hda

Prepisivanje primarnog diska s podacima s mikrofona, uništava podatke na disku

dd if=/dev/dsp of=/dev/hda

Prepisivanje primarnog diska s pseudo slučajnim podacim, uništava podatke na disku

dd if=/dev/urandom of=/dev/hda

Ovi primjeri pokazuju da s naredbom d.d. treba bit oprezan jer nepažnjom možemo uništiti sve podatke na disku.

23

Page 30: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

4.11. LVM

LVM odnosno Logical volume management je proširenje Linux kernel-a, koje omogućuje pogled s više razine apstrakcije na diskovlje, u odnosu na tradicionalne pogled diskova i particija. Samim time administratoru sustava omogućena je veću fleksibilnost kod dodjeljivanja diskovnog prostora za aplikacije i korisnike.

Dijelovi diskovnog prostora kreirani pod kontrolom LVM može se mstorage volumesjenjati veličina, pomicati iako je za to potreban nadogranja sustava i alata za upravljanjem datotečnih sustava

LVM isto dozvoljava upravljanje storage volumes koji se mogu grupirat, tako da administrator upravalja imenovanim grupama npr. “development” i “release”, bolje nego s imenima fizičkih uređaja kao što su “sda” i “sdb”.

4.11.1. Zašto LVM ?

Iako je LVM prvotno namijenjen velikim sustavima s više diskova, njegovo korištenje jednako je pogodno i na malim računalnim sustavima s jednim diskom. Evo na jednom primjeru ću ilustrirat zašto koristi LVM na malom sustavu.

Ako korisnik A instalira Linux prvi put bez LVM , jedan od glavnih koraka je particioniranje diska što uključuje i procjena veličine pojedinih pariticja npr. koliko je potrebno za /home, a koliko za /usr ili / pa većina korisnika početnika dodjeli cjeli prostor samo jednoj / particiji. Nakon određenog vremena obično jedna paritcija postane premala, dok na drugoj postoji neiskorišteni prostor. Da riješi taj problem nema dobrog rješenja, on što korisnik A može učiniti jest :

• reforamtirati disk, i promjeniti raspored particija i reinstalirati sustav.

• kupiti novi disk i na njemu napravit nov raspored particija koji će zahtjevat najmanje pomicanje podataka

• postaviti simbolički link na / koji pokazuje na /home i

• Set up a symlink farm on / pointing to /home and install the new software on /home

Uzmimo istu situaciju samo što korisnik B korisit LVM, tada se cjeli disk zauzima za jednu volume grupu i na logički volume se stavljaju particije /, /usr, i /home. Kad se korisniku B npr. napuni /home logička particija, a na /usr ima slobodnog prostora koji je neiskorišten, onda je moguće realocirat taj prostor s /usr na //home. Druga mogućnost je da se zauzme minimalni prostor za svaki logički volume a ostatak ostavi nezauzet, tako kad se pojedina particija napuni moguće ju je proširiti prema potrebi.

Prednosti LVM su očiglednije na računalnim sustavima s više diskova. U sustavima s više diskova administrator može zauzeti volume groups i logical volumes. Kao i u sustavu s jednim diskom administrator može zauzeti

User groups can be allocated to volume groups and logical volumes and these can be grown as required. It is possible for the system administrator to "hold back" disk storage until it is required. It can then be added to the volume(user) group that has the most pressing need.

When new drives are added to the system, it is no longer necessary to move users files around to make the best use of the new storage; simply add the new disk into an existing volume group or groups and extend the logical volumes as necessary.

24

Page 31: Marko Salkic - Linux - Napredni Tecaj

4. Upravljanje diskovima na Linux sustavu

It is also easy to take old drives out of service by moving the data from them onto newer drives - this can be done online, without disrupting user service.

– sto je lvm, zasto

– kako

– prednosti, nedostatci

Korištenje LVM-a se preporuča samo naprednijim korisnicima

4.12. LVM

– sto je lvm, zasto

– kako

– prednosti, nedostatci

Literatura

http://www.tldp.org/HOWTO/Partition/

http://www.tldp.org/HOWTO/Filesystems-HOWTO.html

http://www.tldp.org/HOWTO/LVM-HOWTO/

http://www.ibiblio.org/pub/Linux/docs/HOWTO/translations/hr/mini/html/Particije.html.gz

http://en.wikipedia.org/wiki/Comparison_of_file_systems

http://en.wikipedia.org/wiki/Journalled_filesystem

http://www.humbug.org.au/talks/fstab/fstab_options.html

http://en.wikipedia.org/wiki/Dd_(Unix)

Hard disc literatura

http://www.pcguide.com/ref/hdd/index.htm

RAID literatura

http://www.ecs.umass.edu/ece/koren/architecture/Raid/raidhome.html

http://en.wikipedia.org/wiki/Redundant_array_of_independent_disks

http://www.acnc.com/04_01_00.html

25

Page 32: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

RAID na linuxu

http://tldp.org/HOWTO/Software-RAID-HOWTO.html

http://www.redhat.com/magazine/021jul06/departments/tips_tricks/

http://www.linuxjournal.com/article/5653

LVM na linuxu

http://www.linuxdevcenter.com/pub/a/linux/2006/04/27/managing-disk-space-with-lvm.html?page=1

http://episteme.arstechnica.com/eve/forums/a/tpc/f/96509133/m/435008610831

26

Page 33: Marko Salkic - Linux - Napredni Tecaj

5. Programski paketiOsnovni način instalacije programa na neku Linux distribuciju sastoji se od dohvaćanja datoteke s izvornim kodom programa, njenim raspakiravanjem, kompajliranjem i potom instalacijom. Instalacijom programa nije sve gotovo, budući da većina programa zahtijeva dodatna podešavanja. Ipak, u većini slučajeva potrebno je prije instalacije željenog programa, doinstalirati i neke dodatne biblioteke ili programe o kojima program ovisi. Dodatni problemi nastaju kada je potrebno program nadograditi, a to može povući i prevođenje svih zavisnih programa i biblioteka. Deinstalacija je također otežana, naime, nije rijetkost da se pojedini programi sastoje od tisuća datoteka te nije lako naći sve datoteke. Nije rijetkost da se na Linux distribucijama nalaze stotine tisuća datoteka razmještenih po različitim direktorijima. Navedeni problemi rješavaju se uvođenjem koncepta paketa.

Paket je skup međusobno zavisnih datoteka. U paketu se obično nalazi nekakav program ili niz programa, ali ne nužno, primjerice, paket može sadržavati samo dokumentaciju, izvorni kod i slično. Osim programa paket sadrži i metapodatke te eventualno skripte. Metapodaci opisuju paket, primjerice, gdje se instalira, koje programe i biblioteke je potrebno imati predinstalirano, s kojim paketima je u konfliktu, itd. Skripte se pokreću neposredno prije ili nakon instalacije te vrše bolju integraciju paketa u ciljni sustav.

Radi lakšeg upravljanja paketima, paketi se u linux distribucijama obično smještaju unutar grupa. Svaki paket nalazi se u točno jednoj i samo jednoj grupi zavisno od funkiconalnosti koju obavlja. Neke od grupa paketa jesu: osnovni alati, administracijski alati, alati za razvoj, dokumentacija, biblioteke, grafički alati, igre, itd.

Dva najčešća paketna sustava su Debian paketni sustav i Red Hat paketni sustav. Debian paketi imaju ekstenziju deb, dok Red Hat paketi imaju ekstenziju rpm. Općenito, na distribucijama baziranim na Debianu (primjerice, Debian, Ubuntu, Kanotix) koriste se deb paketi, a na distribucijama baziranim na Red Hat-u (primjerice, Red Hat, Fedora, SuSE, CentOS) koriste se rpm paketi.

Svi paketi, u općem slučaju, imaju sljedeći oblik:

<ime aplikacije>-<verzija aplikacije>-<verzija paketa>.<arhitektura>.<tip paketa>

Ime aplikacije preuzima se od aplikacije koja je upakirana u paket. Kao što je već rečeno, treba pripaziti kako ne mora nužno biti aplikacija u paketu, može biti primjerice i biblioteka, nekakva dokumentacija, i slično. No, jednostavnosti radi, pisati ćemo samo aplikacija. Pod verzijom aplikacije nalazi se zapisana verzija koja je upakirana, dok pod verzijom paketa piše koji je to paket u slijedu za istu verziju aplikacije. Primjerice, ako promjenimo neki detalj tijekom izrade paketa, dok verzija same aplikacije ostaje ista, u tom slučaju povećavamo verziju paketa kako bi se cijeli paket razlikovao u odnosu na prethodne pakete. Time se olakšava posao programu koji je u stanju razlučiti novije od starijih verzija programa. Na mjestu arhitekture nalazi se upisana arhitektura za koju je paket pripremljen. Na tom mjestu može se naći i386, i486 i slično za Intel kompatibilne procesore, potom može se naći x86_64 za 64-bitne AMD procesore, noarch ako je paket neovisan o arhitekturi, i slično. Tip paketa ovisno o distribuciji biti će rpm odnosno deb.

Za primjer je uzet paket za sam rpm program:

rpm-4.4.2-20.x86_64.rpm

Dakle, ime aplikacije je u ovom slučaju rpm, verzija aplikacije, tj. RPM programa, je 4.4.2, verzija paketa je 20, a paket je pripremljen za AMD procesor, tj. za arhitekturu x86_64.

27

Page 34: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

5.1. Debian paketni sustav

Za upravljanje paketima u distribucijama baziranim na Debianu koriste se dva glavna alata:

● apt – Advanced Package Tool, glavni alat za upravljanje paketima

● dpkg – prethodnik apt-u ali se još danas koristi za određene funkcije

apt i dpkg su vrlo korisni, međutim, njihovo korištenje je dosta problematično onima koji se prvi puta upoznaju s Debian paketnim sustavom. Kao što je prethodno rečeno, apt je primarni alat vrlo naprednih mogućnosti, dok je dpkg primitivniji alat i koristi se za instaliranje pojedinačnih paketa.

5.2. Korištenje dpkg alata

dpkg alat najčešće se koristi za instaliranje pojedinačnih paketa. Za razliku od apt-a, dpkg neće automatizirano instalirati i sve zavisne pakete već će samo upozoriti ukoliko zavisnosti nisu zadovoljene. Stoga se prednost instaliranja paketa uvijek daje apt-u koji je daleko sofisticiraniji alat.

U nastavku su opisane neke češće operacije nad paketima korištenjem programa dpkg. Sve operacije mogu se podijeliti u nekoliko grupa. Početi ćemo s funkcijama koje se odnose na dohvat informacija o paketima, bilo da su oni instalirani ili ne. Nakon toga ćemo vidjeti kako se paketi instaliraju i nadograđuju. Konačno, vidjeti ćemo kako se paketi uklanjaju.

5.2.1. Dohvat informacija o paketima

Informacije o paketima dohvaćaju se upotrebom opcije -l ili u duljoj varijanti --list. Nakon opcije -l opcionalno se može navestu uzorak prema kojem se dohvaćaju paketi. Ukoliko se uzorak ne navede biti će ispisani samo instalirani paketi. Za ispis svih paketa, bilo instaliranih ili ne, potrebno je za uzorak koristiti '*'.

Kao primjer prikazan je ispis svih paketa koji u svom nazivu započinju uzorkom gcc.

$ dpkg -l 'gcc*'Desired=Unknown/Install/Remove/Purge/HoldStatus=Not/Installed/Config-files/Unpacked/Failed-config/./ Err?=(none)/Hold/Reinst-required/X=both-problems/ Name Version Description+++-===============-==============-========================ii gcc 3.3.5-3 The GNU C compilerpn gcc-2.95 <none> (no description available)pn gcc-2.95-doc <none> (no description available)un gcc-3.0 <none> (no description available)un gcc-3.2 <none> (no description available)ii gcc-3.3 3.3.5-13 The GNU C compilerii gcc-3.3-base 3.3.5-13 The GNU Compiler Collection (base package)...$

Za svaki od paketa navedeno je njegovo stanje, ime, verzija te kratki opis.

28

Page 35: Marko Salkic - Linux - Napredni Tecaj

5. Programski paketi

Ponekad je potrebno saznati neke detaljnije informacije o nekom paketu, bilo da je on već instaliran ili ne. Pogledajmo prvi paket naveden u prethodnom ispisu. Ako želimo saznati detaljnije stanje paketa koristiti ćemo opciju -s, ili u duljoj varijanti --status, i naredbi dpkg dodat ćemo kao argument ime paketa koji nas zanima.

$ dpkg -s gccPackage: gccStatus: install ok installedPriority: standardSection: develInstalled-Size: 28Maintainer: Debian GCC maintainers <[email protected]>Architecture: i386Source: gcc-defaults (1.21)Version: 4:3.3.5-3Provides: c-compilerDepends: cpp (>= 4:3.3.5-3), gcc-3.3 (>= 1:3.3.5-1), cpp-3.3 (>= 1:3.3.5-1)Recommends: libc-devSuggests: make, manpages-dev, autoconf, automake, libtool, flex, bison, gdb, gcc-docConflicts: gcc-doc (<< 1:2.95.3)Description: The GNU C compiler This is the GNU C compiler, a fairly portable optimizing compiler for C. . This is a dependency package providing the default GNU C compiler.$

Iz dobivenog ispisa, iz linije Description, vidimo kako se radi o C kompajleru. No, dobili smo i čitav niz drugih korisnih informacija o paketu, status paketa, sekciju kojoj paket pripada, arhitekturu za koju je paket prilagođen, verziju paketa, listu zavisnih paketa, itd.

Osim dohvata informacija o instaliranim paketima, možemo postavljati upite i na paketima koji još nisu instalirani. Uzmimo primjerice paket čiji je naziv zip_2.31-1_i386.deb te pretpostavimo kako nas zanima namjena tog paketa. U takvim slučajevima moramo upotrijebiti opciju -I, ili u duljoj varijanti --info, uz pomoć koje kažemo dpkg pogramu kako je argument datoteka u kojoj se nalazi paket, a ne već instalirani paket.

$ dpkg -I zip-2.31-1_i386.deb new debian package, version 2.0. size 99556 bytes: control archive= 863 bytes. 575 bytes, 18 lines control 575 bytes, 10 lines md5sums Package: zip Version: 2.31-1 Section: utils Priority: optional Architecture: i386 Depends: libc6 (>= 2.3.2.ds1-4) Recommends: unzip Conflicts: zip-crypt (<= 2.30-2) Replaces: zip-crypt (<= 2.30-2) Installed-Size: 244 Maintainer: Santiago Vila <[email protected]> Description: Archiver for .zip files This is InfoZIP's zip program. It produces files that are fully compatible with the popular PKZIP program; however, the command line options are not identical. In other words, the end result is the same, but the methods differ. :-) . This version supports encryption.$

29

Page 36: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

Za sada je samo rečeno kako možemo dobiti osnovne informacije o paketu. No, možemo dobiti i niz drugih informacija. Za ispis sadržaja paketa, odnosno datoteka koje se nalaze u njemu koristi se opcija -L, ili u duljoj varijanti --listfiles, za instalirane pakete, odnosno -c, ili u duljoj varijanti --contents, za neinstalirane pakete. Kako bi dobili popis datoteka koje pripadaju već instaliranom paketu gcc, upotrijebit ćemo sljedeći oblik naredbe dpkg:

$ dpkg -L gcc/usr/usr/bin/usr/bin/c89/usr/bin/c99/usr/share/usr/share/man/usr/share/man/man1/usr/share/man/man1/c89.1.gz/usr/share/man/man1/c99.1.gz/usr/share/doc/usr/share/doc/cpp/usr/bin/gcov/usr/bin/gccbug/usr/bin/i386-linux-gcc/usr/bin/gcc...$

Idući upit koji se dosta često postavlja je upit uz pomoć kojega saznajemo kojem paketu pripada neka datoteka u datotečnom sustavu. Recimo da želimo saznati koji paket je instalirao /bin/ls program. To ćemo saznati upotrebom opcije -S čiji argument je datoteka koja nas zanima:

$ dpkg -S /bin/lscoreutils: /bin/ls$

Dakle, saznali smo kako je navedeni program dio coreutils paketa.

Zadnje upite koje ćemo obraditi omogućavaju nam da saznamo međuzavisnosti između pojedinih paketa. Kako bi saznali što neki paket zahtijeva upotrijebiti ćemo opciju -s. Ovom opcijom se ispisuju detaljnije informacije o paketu. Iz takvog ispisa izdvojit ćemo liniju Depends, odnosno popis zahtjevanih biblioteka i paketa. Pogledajmo što zahtijeva paket gcc kako bi se mogao uspješno instalirati:

$ dpkg -s gcc | grep DependsDepends: cpp (>= 4:3.3.5-3), gcc-3.3 (>= 1:3.3.5-1), cpp-3.3 (>= 1:3.3.5-1)$

Za svaki paket u zagradama je navedena minimalna verzija koja mora biti instalirana. Dakle, na ovaj način saznali smo sve o čemu zavisi paket gcc. Kako bi saznali što sve neki paket nudi drugim instaliranim paketima, upotrijebiti ćemo ponovo opciju -s s tim da ćemo iz njenog izlaza izdvojiti liniju Provides. Dakle, paket gcc pruža sljedeće ostalim paketima:

# dpkg -s gcc | grep ProvidesProvides: c-compiler#

30

Page 37: Marko Salkic - Linux - Napredni Tecaj

5. Programski paketi

Također za svaki od paketa možemo upotrebom opcije -r --no-act dobiti popis paketa koji ga zahtjevaju za njihovo ispravno funkcioniranje. Ovom opcijom se ustvari simulira naredba uklanjanja paketa. Paket neće biti uklonjen sve dok postoje instalirani drugi paketi koji zahtjevaju njegovo postojanje. Ovi parametri se koriste jer na taj način naredba ispisuje zavisne pakete. Primjerice, kako bi saznali koji sve paketi ovise o paketu gcc možemo postaviti sljedeći upit:

# dpkg -r --no-act gccdpkg: dependency problems prevent removal of gcc: g++ depends on gcc (>= 4:3.3.5-3).dpkg: error processing gcc (--remove): dependency problems - not removingErrors were encountered while processing: gcc#

Iz ispisa vidimo da paket g++ zahtjeva postojanje paketa gcc.

5.2.2. Instalacija, deinstalacija i osvježavanje paketa

Idući bitan mod rada dpkg naredbe je instalacija paketa. Instalirati se mogu paketi koji su pohranjeni lokalno. Opcija koja odabire mod instalacije je -i, ili u duljoj verziji, --install.

Recimo, želimo li instalirati već navedeni paket zip_2.31-1_i386.deb to bi obavili na sljedeći način:

# dpkg -i zip-2.31-1_i386.dpkgSelecting previously deselected package zip.(Reading database ... 23963 files and directories currently installed.)Unpacking zip (from zip_2.31-1_i386.deb) ...Setting up zip (2.31-1) ...#

Treba primjetiti da se kao argument za instalaciju mora navesti puno ime paketa, zajedno s ekstenzijom. Želimo li s druge strane ukloniti neki paket, dovoljno je napisati samo ime paketa. Dakle, da bi obrisali već navedeni paket treba izvršiti sljedeću naredbu:

# dpkg -r zip(Reading database ... 23978 files and directories currently installed.)Removing zip ...#

Opcijom -r , ili u dužem obliku --remove, bira se iduća funkcija naredbe dpkg, uklanjanje već instaliranih paketa.

Prilikom uklanjanja paketa može se pojaviti problem s ovisnostima između paketa. Primjerice, ako paket A zahtijeva paket B tada nije moguće ukloniti samo paket B budući da bi u tom slučaju paket A mogao prestati raditi. U takvim slučajevima, naredba dpkg će ispisati upozorenje o međuovisnostima te neće ukloniti zahtijevani paket. Pokušajmo ukloniti paket file:

31

Page 38: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

# dpkg -r filedpkg: dependency problems prevent removal of file: defoma depends on file.dpkg: error processing file (--remove): dependency problems - not removingErrors were encountered while processing: file#

U navedenom ispisu naredbe dpkg primjećujemo kako paket defoma ovisi o paketu file te taj paket nije moguće ukloniti. Ukoliko ipak želimo obrisati neki paket bez obzira na rušenje zavisnosti s drugim paketima koristi se opcija --force-depends kao na sljedećem primjeru.

# dpkg -r --force-depends gccdpkg: gcc: dependency problems, but removing anyway as you request: g++ depends on gcc (>= 4:3.3.5-3).(Reading database ... 23963 files and directories currently installed.)Removing gcc ...#

Kod instalacije paketa, analogno kao i kod brisanja, ukoliko paket zavisi o nekim drugim paketima, neće biti instaliran sve dok se ne zadovolje sve zavisnosti. Odlučimo li instalirati paket bez obzira na te konflikte koristit ćemo opciju --force-depends. Ovaj pothvat se ne preporuča bez prethodnog razumijevanja nastale situacije.

Nakon što je paket instaliran, potrebno je vršiti periodične nadogradnje koje donose odgovarajuća poboljšanja ili ispravljaju otkrivene pogreške u paketu i aplikaciji. Da bi se pojednostavila nadogradnja paketa, tj. da se izbjegne najprije pokretanje deinstalacije postojećeg paketa te zatim instalacije novog, dpkg nudi mogućnost nadogradnje korištenjem jedne naredbe uz opciju -i, odnosno --install. Opcija -i koristi se također za instalaciju paketa. Funkcionalnost dpkg naredbe uz ovu opciju je takva da ukoliko prethodno ne postoji instalirani paket obavlja se njegova instalacija. Inače, ukoliko postoji već instalirana neka od prethodnih verzija paketa, dpkg će umjesto instaliranja obje verzije napraviti nadogradnju paketa. Točnije, uklonit će trenutni paket, a nakon toga obavit će se instalacija paketa koji je naveden kao argument naredbe, neovisno o tome radi li se o verziji koja je novija ili starija od trenutne. Ukoliko se ukaže potreba za nadogradnjom paketa starijom verzijom sam dpkg će dakle dozvoliti takvu akciju ali uz upozorenje. Ova akcija biti će spriječena jedino u slučaju nezadovoljenih zavisnosti paketa.

Kao primjer nadogradit ćemo prethodno instalirani paket zip_2.31-1_i386.deb novijim paketom zip_2.31-3_i386.deb

# dpkg -i zip_2.31-3_i386.deb(Reading database ... 23978 files and directories currently installed.)Preparing to replace zip 2.31-1 (using zip_2.31-3_i386.deb) ...Unpacking replacement zip ...Setting up zip (2.31-3) ...#

5.3. Korištenje apt alata

apt je skup alata koji se koristi u komandnoj liniji i koji služi za upravljanje paketima. Čini ga nekoliko naredbi kao što su apt-get, apt-cache, apt-show itd. Za razliku od dpkg alata, apt znatno pojednostavljuje proces instaliranja i uklanjanja paketa budući da omogućava automatizirano dohvaćanje paketa s udaljenih lokacija (Internet, lokalna mreža) i s različitih medija (primjerice, CD).

32

Page 39: Marko Salkic - Linux - Napredni Tecaj

5. Programski paketi

Postavljanje lokacija za dohvaćanje paketa

Da bi apt mogao dohvaćati pakete potrebno je najprije namjestiti lokacije gdje se paketi nalaze. Lokacije s kojih apt dohvaća pakete zapisane su u datoteci /etc/apt/sources.list. Sadržaj datoteke sources.list sljedećeg je izgleda:

deb uri distribution [component1] [component2] [...]deb-src uri distribution [component1] [component2] [...]

Oznaka deb, odnosno deb-src označava tip arhive. deb predstavlja binarni, odnosno već kompajlirani paket, dok deb-src označava izvorni kod programa s Debian kontrolnim datotekama .dsc i diff.gz koji sadrže promjene koje su potrebne da bi program bio “debianiziran”. Oznaka uri predstavlja lokaciju s koje će se paketi dohvaćati. Najčešće se koriste http, ftp, file i cdrom. Distribution označava distribuciju Debiana. Moguće opcije za distribuciju su stable, testing i unstable. Polja s oznakom component označavaju jednu od grupacija paketa unutar distribucije. Tako oznaka main ozačava pakete koje sadrži službena distribucija Debiana. Moguće su još oznake contrib koja obuhvaća pakete koji imaju slobodnu licencu, ali ovise o nekim drugim paketima koji nisu slobodni. Non-free sadrži pakete koji su pod nekom od ograničavajućih licenca. Non-US/main obuhvaća slobodne pakete koji nisu dozvoljeni za Ameriku. Non-US/non-free su paketi pod nekom od ograničavajućih licenci ali nisu dozvoljeni za Ameriku.

Primjer datoteke sources.list:

deb http://www.debian.org/archive stable main contribdeb ftp://ftp.debian.org/debian unstable main contrib non-freedeb file:/home/vincent/debian stable main contrib non-free

Osvježivanje baze informacija o paketima

Prije svake instalacije nekog od paketa poželjno je obnoviti bazu, odnosno sinkronizirati informacije o paketima. Sinkronizacija se obavlja preko lokacija koje su definirane u datoteci sources.list. Osvježivanje baze poželjno je kako bi instalirali najnovije pakete, odnosno nadogradili postojeće sigurnijima. Za osježivanje baze potrebno je pokrenuti:

# apt-get update

Pretraživanje paketa

Za pretraživanje paketa koristi se naredba

$ apt-cache search regex [regex...]

regex predstavlja regularni izraz prema kojem se obavlja pretraživanje paketa među imenima paketa te među opisima paketa. Također je moguće navesti više regularnih izraza između kojih se tada primjenjuje operacija konjunkcije (AND).

33

Page 40: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

ZAD. Pretražiti da li je dostupan paket apt. Pretraživanje napraviti samo među imenu paketa. Za pretraživanje po imenima koristiti opciju --names-only.

$ apt-cache search --names-only aptapt - Advanced front-end for dpkgapt-build - frontend to apt to build, optimize and install packagesapt-cacher - caching system for Debian package and source files...$

Instaliranje paketa

apt naredba koja se koristi za instaliranje paketa sljedećeg je oblika:

# apt-get install pkg [pkg...]

pkg je ime jednog ili više paketa koje želimo instalirati. Ime paketa je zapravo ime koje dobijemo prilikom pretraživanja. Npr. libc6, a ne libc6_1.9.6-2.deb. Naredbom apt-get install pkg također će se biti instalirani i svi paketi o kojima instalirani paket ovisi.

ZAD. Instalirati paket centericq

# apt-get install centericqReading Package Lists... DoneBuilding Dependency Tree... DoneRecommended packages: soxThe following NEW packages will be installed: centericq0 upgraded, 1 newly installed, 0 to remove and 3 not upgraded.Need to get 0B/1349kB of archives.After unpacking 3445kB of additional disk space will be used.Selecting previously deselected package centericq.(Reading database ... 23953 files and directories currently installed.)Unpacking centericq (from .../centericq_4.20.0-1sarge4_i386.deb) ...Setting up centericq (4.20.0-1sarge4) ...#

Nadogradnja paketa

Za nadogradnju svih instaliranih paketa novijim dostupnim verzijama potrebno je pokrenuti:

# apt-get upgrade

Ovom naredbom nadogradit će se svi paketi za koje postoje njihove novije verzije u repozitorijima iz kojih apt dohvaća pakete.

5.3.1. Uklanjanje paketa

Uklanjanje paketa obavlja se naredbom:

# apt-get remove pkg [pkg...]

pkg označava ime paketa ili više njih koje želimo ukloniti. Ovom naredbom bit će uklonjeni i svi paketi koji ovise o navedenom paketu pkg, ukoliko takvi postoje.

34

Page 41: Marko Salkic - Linux - Napredni Tecaj

5. Programski paketi

ZAD. Potrebno je potpuno ukloniti paket centericq kao i njegove konfiguracijske datoteke. Za uklanjanje konfiguracijskih datoteka koristiti opciju --purge.

# apt-get remove --purge centericqReading Package Lists... DoneBuilding Dependency Tree... DoneThe following packages will be REMOVED: centericq*0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.Need to get 0B of archives.After unpacking 3445kB disk space will be freed.Do you want to continue? [Y/n](Reading database ... 23963 files and directories currently installed.)Removing centericq ...#

Ispis informacija o paketu

Za prikaz informacija o određenom paketu koristi se naredba:

$ apt-cache show pkg

pkg označava ime paketa čije informacije tražimo.

ZAD. Ispisati informacije o paketu centericq. Koja je verzija centericq paketa dostupna? O kojim paketima centericq ovisi?

$ apt-cache show centericqPackage: centericqPriority: optionalSection: netInstalled-Size: 3364Maintainer: Julien LEMOINE <[email protected]>Architecture: i386Version: 4.20.0-1sarge4Depends: libc6 (>= 2.3.2.ds1-21), libcurl3 (>= 7.13.1-1), libgcc1 (>= 1:3.4.1-3), libgnutls11 (>= 1.0.16), libgpg-error0 (>= 1.0), libgpgme11 (>= 1.0.1), libidn11 (>= 0.5.13), libncurses5 (>= 5.4-1), libssl0.9.7, libstdc++5 (>= 1:3.3.4-1), zlib1g (>= 1:1.2.1), centericq-commonRecommends: www-browser, soxFilename: pool/updates/main/c/centericq/centericq_4.20.0-1sarge4_i386.debSize: 1348826MD5sum: 1f8a99153aa93509805a95eedfb1e493SHA1: 1ec8b106241edde5dd6902ca9257072231f9646aSHA256: 3811ed5f901254e615e0cff03302482c306a1281cd8a758e0bb76e493c7b3dbdDescription: A text-mode multi-protocol instant messenger client Centericq is a text mode menu- and window-driven IM client program that supports the ICQ2000, Yahoo!, AIM, MSN, IRC and Jabber protocols. . A full list of its features is available at http://konst.org.ua/centericq/.$

Verzija centericq paketa koja je trenutno dostupna je 4.20.0-lsarge4. Paket centericq ovisi o paketu libc6 verzije veće ili jednake 2.3.2.ds1-21, o paketu libcurl3 verzije veće ili jednake 7.13.1.1 itd.

35

Page 42: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

Ispis paketa o kojima centericq ovisi moguć je i pomoću naredbe apt-cache uz parametar depends.

$ apt-cache depends centericqcentericq Depends: libc6 Depends: libcurl3 Depends: libgcc1 Depends: libgnutls11 Depends: libgpg-error0 Depends: libgpgme11 Depends: libidn11 Depends: libncurses5 ...$

Često puta potrebno je također korisno saznati koji instalirani paketi ovise o dotičnom paketu. Primjerice, da bi saznali koji instalirani paketi zahtjevaju paket centericq za njihov ispravan rad pokrenut ćemo naredbu apt-cache uz parametar rdepends.

$ apt-cache rdepends centericqcentericqReverse Depends: centericq-common$

Iz ispisa možemo uočiti kako patket centericq-common ovisi o paketu centericq, odnosno da bi paket centericq-common bio uspješno instaliran potrebno je da postoji instalran i paket centericq.

5.4. Korištenje debsums i md5sum alata za verifikaciju paketa

S vremena na vrijeme potrebno je provjeriti ispravnost paketa na računalu. Potrebno je provjeriti da li su paketi ispravno konfigurirani ili su možda nastale neke promjene ili šteta za koju nismo svjesni.

Za verifikaciju paketa koristi se debsums alat. Ukoliko želimo verificirati sve pakete kao i njihove konfiguracijske datoteke koristi se opcija -a. No, ovo još nije pouzdan način na koji možemo tvrditi da su instalirani paket ispravni.

Za ispravnu verifikaciju potrebno je pakete verificirati pomoću njihovih .deb datoteka. Primjerice, zip paket verificirat ćemo pomoću zip_2.31-1_i386.deb datoteke.

# debsums zip_2.31-1_i386.deb/usr/share/doc/zip/copyright OK/usr/share/doc/zip/CHANGES.gz OK/usr/share/doc/zip/TODO OK/usr/share/doc/zip/WHATSNEW OK/usr/share/doc/zip/changelog.Debian.gz OK/usr/share/man/man1/zip.1.gz OK/usr/bin/zip OK/usr/bin/zipnote OK/usr/bin/zipsplit OK/usr/bin/zipcloak OK

Prema ispisu paket zip je ispravno instaliran, tj. zadovoljene su sve zavisnosti za paket, a također niti jedna od datoteka koju čini taj paket nije modificirana. No, čak i ako pakete verificiramo pomoću njihovih .deb datoteka ne možemo sa sigurnošću tvrditi da su takvi paketi potpuno ispravni. Ne možemo biti sigurni da njihove .deb datoteke ne sadrži primjerice neki trojan.

36

Page 43: Marko Salkic - Linux - Napredni Tecaj

5. Programski paketi

Stoga prije verifikacije instaliranog paketa treba provjeriti ispravnost .deb datoteke. Ispravnost se provjerava generiranjem sažetka pomoću md5sum alata, te njegovom usporedbom sa sažetkom kojeg obično možemo pronaći na stranicama s kojih smo dohvatili tu .deb datoteku. Naime, MD5 funkcija je jednosmjerna funkcija, pa ukoliko su sažeci jednaki instalirani paket kojeg verificiramo možemo proglasiti ispravnim.

Primjerice, pretpostavimo da smo datoteku zip_2.31-1_i386.deb dohvatili s nekog udaljenog repozitorija, te da je vrijednost njezinog sažetak objavljenog u tom repozitoriju 73349326dd50e9a132d3c4f8301a4e6e. Nakon toga lokalno je pokrenut md5sum alat za generiranje sažetka.

$ md5sum zip_2.31-1_i386.deb73349326dd50e9a132d3c4f8301a4e6e zip_2.31-1_i386.deb$

Usporedbom dobivenih sažetaka, na temelju njihovih istovrijednosti, očito je da je datoteka zip_2.31-1_i386.deb ispravna. Tek sada možemo korištenjem debsums alata instalirani zip paket sigurno verificirati ispravnom .deb datotekom.

5.5.

37

Page 44: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

5.6. RedHat paketni sustav

Alat koji se koristi za upravljanje paketima na Red Hat baziranim distribucijama, kao što su primjerice RedHat, Fedora, CentOS, SuSE ili Mandrake, je rpm. No, rpm je dosta nezgodan za korištenje u situacijama kada je potrebno voditi računa o velikoj količini paketa i njihovim međuzavisnostima te je svaka distribucija načinila nadogradnju koja olakšava posao administratorima. Primjerce, na RedHat distribuciji ta nadogradnja se naziva up2date, na Mandrake distribuciji to je urpmi, dok je na SuSE distribuciji to yast. dok ćemo se u ovom poglavlju pozabaviti alatom, yum koji se koristi na Fedora i CentOS distribucijama.

5.6.1. Korištenje rpm alata

U nastavku su opisane neke češće operacije nad paketima korištenjem programa rpm(8). Sve operacije mogu se podijeliti u nekoliko grupa. Početi ćemo s funkcijama koje se odnose na dohvat informacija o paketima, bilo da su oni instalirani ili ne. Dohvat podataka se postiže upotrebom opcije -q, ili u duljoj varijanti --query, nakon koje dolaze podopcije koje određuju što se traži i argumenti tih opcija. Nakon toga ćemo vidjeti kako se paketi instaliraju i nadograđuju. To se postiže opcijom -i, odnosno, --install. za instalaciju, odnosno, -u i --update za nadogradnju. Konačno, vidjeti ćemo kako se paketi uklanjaju upotrebom opcije -e, odnosno --erase.

Dohvat informacija o paketima

Kao što je već rečeno, informacije o paketima dohvaćaju se upotrebom opcije -q. Nakon te opcije dolaze podopcije uz pomoć kojih pobliže definiramo koje informacije želimo dobiti i o čemu. Primjerice, ako želimo saznati popis svih paketa koji su instalirani na sustavu to ćemo postići upotrebom podopcije -a.

# rpm -qaoro-2.0.8-1jpp_4fciso-codes-0.49-1libICE-1.0.0-2.2libjpeg-6b-36.2.1libtermcap-2.0.8-45desktop-file-utils-0.10-6.1elfutils-libelf-0.119-1.2.1libart_lgpl-2.3.17-2.2.1...#

Za svaki od instaliranih paketa navedeno je njegovo ime, verzija aplikacije i verzija paketa.

U prethodnom ispisu nije navedeno što pojedini paket sadrži. Dosta često potrebno je saznati neke osnovne informacije o nekom paketu, bilo da je on već instaliran ili ne. Pogledajmo prvi paket naveden u prethodnom ispisu. Ako želimo saznati čemu on služi koristiti ćemo opciju -i i naredbi rpm dodat ćemo kao argument ime paketa koji nas zanima.

38

Page 45: Marko Salkic - Linux - Napredni Tecaj

5. Programski paketi

# rpm -q -i oroName : oro Relocations: (not relocatable)Version : 2.0.8 Vendor: Red Hat, Inc.Release : 1jpp_4fc Build Date: Thu 22 Dec 2005 07:09:12 AM CETInstall Date: Tue 16 May 2006 04:47:18 PM CEST Build Host: hs20-bc2-3.build.redhat.comGroup : Development/Java Source RPM: oro-2.0.8-1jpp_4fc.src.rpmSize : 89910 License: Apache LicenseSignature : DSA/SHA1, Tue 07 Mar 2006 12:26:58 AM CET, Key ID b44269d04f2a6fd2Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>URL : http://jakarta.apache.org/oroSummary : Full regular expressions APIDescription :The Jakarta-ORO Java classes are a set of text-processing Java classesthat provide Perl5 compatible regular expressions, AWK-like regularexpressions, glob expressions, and utility classes for performingsubstitutions, splits, filtering filenames, etc. This library is thesuccessor to the OROMatcher, AwkTools, PerlTools, and TextToolslibraries from ORO, Inc. (www.oroinc.com). They have been donated to theJakarta Project by Daniel Savarese (www.savarese.org), the copyrightholder of the ORO libraries. Daniel will continue to participate intheir development under the Jakarta Project.#

Iz dobivenog ispisa, iz linije Summary, vidimo kako se radi o biblioteci za regularne izraze. Osim tog skraćenog opisa možemo pročitati i detaljniji opis paketa (polje Description). No, dobili smo i čitav niz drugih informacija o paketu, datum kada je paket stvoren, kada je instaliran, licenca pod kojom se distribuira, grupa paketa kojoj pripada, itd.

Osim dohvata informacija o instaliranim paketima, možemo postavljati upite i na paketima koji još nisu instalirani. Uzmimo primjerice paket čiji je naziv zip-2.31-1.2.1.x86_64.rpm te pretpostavimo kako nas zanima što taj paket sadrži. U takvim slučajevima moramo upotrijebiti opciju -p uz pomoć koje kažemo rpm pogramu kako je argument datoteka u kojoj se nalazi paket, a ne već instalirani paket.

$ rpm -qip zip-2.31-1.2.1.x86_64.rpmName : zip Relocations: (not relocatable)Version : 2.31 Vendor: Red Hat, Inc.Release : 1.2.1 Build Date: Sun 12 Feb 2006 08:33:19 PM CETInstall Date: (not installed) Build Host: ls20-bc1-13.build.redhat.comGroup : Applications/Archiving Source RPM: zip-2.31-1.2.1.src.rpmSize : 319064 License: distributableSignature : DSA/SHA1, Mon 06 Mar 2006 10:22:59 PM CET, Key ID b44269d04f2a6fd2Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>URL : http://www.info-zip.org/pub/infozip/Zip.htmlSummary : A file compression and packaging utility compatible with PKZIP.Description :The zip program is a compression and file packaging utility. Zip isanalogous to a combination of the UNIX tar and compress commands andis compatible with PKZIP (a compression and file packaging utility forMS-DOS systems).

Install the zip package if you need to compress files using the zipprogram.

Opcije -a, -p te navođenje imena instaliranog paketa naziva se selektorima. Uz pomoć selektora određujemo paket ili grupu paketa nad kojima program rpm obavlja svoju operaciju.

Za sada je samo rečeno kako možemo dobiti osnovne informacije o paketu. No, možemo dobiti i niz drugih informacija. Za ispis sadržaja paketa, odnosno datoteka koje se nalaze u njemu korista se opcija -l umjesto -i. I u ovom slučaju, ako ne navedemo opciju -p rpm naredba pretpostavlja kako se radi o već instaliranom paketu. Kako bi dobili popis datoteka koje pripadaju već navedenom paketu oro, upotrijebit ćemo sljedeći oblik naredbe rpm:

39

Page 46: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

$ rpm -ql oro/usr/share/doc/oro-2.0.8/usr/share/doc/oro-2.0.8/CHANGES/usr/share/doc/oro-2.0.8/COMPILE/usr/share/doc/oro-2.0.8/CONTRIBUTORS/usr/share/doc/oro-2.0.8/ISSUES/usr/share/doc/oro-2.0.8/LICENSE/usr/share/doc/oro-2.0.8/README/usr/share/doc/oro-2.0.8/STYLE/usr/share/doc/oro-2.0.8/TODO/usr/share/java/oro-2.0.8.jar/usr/share/java/oro.jar$

Idući upit koji se dosta često postavlja je upit uz pomoć kojega saznajemo kojem paketu pripada neka datoteka u datotečnom sustavu. Recimo kako želimo saznati koji paket je instalirao /bin/ls program. To ćemo saznati upotrebom podopcije -f čiji argument je datoteka koja nas zanima:

$ rpm -qf /bin/lscoreutils-5.93-7.2$

Dakle, saznali smo kako je navedeni program dio coreutils paketa.

Svaki paket sadrži dnevnik promjena gdje su navedene sve promjene koje su na njemu učinjene iz verzije u verziju. Ta informacija je vrlo korisna prilikom nadogradnji paketa, o čemu će biti riječi kasnije. Kako bi saznali dnevnik promjena nekog paketa koristimo opciju --changelog. Primjerice, za paket coreutils dnevnik promjena ima sljedeći oblik:

$ rpm -q --changelog coreutils* Fri Feb 10 2006 Jesse Keating <[email protected]> - 5.93-7.2- bump again for double-long bug on ppc(64)

* Tue Feb 07 2006 Jesse Keating <[email protected]> - 5.93-7.1- rebuilt for new gcc4.1 snapshot and glibc changes

* Mon Jan 23 2006 Tim Waugh <[email protected]>- Fixed chcon(1) bug reporting address (bug #178523).

* Thu Jan 05 2006 Tim Waugh <[email protected]> 5.93-7- Don't suppress chown/chgrp errors in install(1) (bug #176708).

* Mon Jan 02 2006 Dan Walsh <[email protected]> 5.93-6- Remove pam_selinux.so from su.pamd, not needed for targeted and Strict/MLS will have to newrole before using.

* Fri Dec 23 2005 Tim Waugh <[email protected]> 5.93-5- Fix "sort -n" (bug #176468).$

U navedenom primjeru skraćen je ispis promjena radi čitljivosti. Dnevnik promjena sastoji se od grupa zapisa. Svaka grupa zapisa započinje sa zvjezdicom, datumom kada je promjena izvršena te mail adresom i imenom autora promjene. Nakon toga dolazi jedan ili više zapisa koji pobliže određuju što je promjenjeno. Svaki od tih zapisa započinje s crticom. Iduća grupa zapisa odvojena je praznom linijom.

Zadnje upite koje ćemo obraditi omogućavaju nam da saznamo međuzavisnosti između pojedinih paketa. Kako bi saznali što neki paket zahtijeva upotrijebiti ćemo opciju --requires. Pogledajmo što zahtijeva paket coreutils kako bi se mogao uspješno instalirati:

40

Page 47: Marko Salkic - Linux - Napredni Tecaj

5. Programski paketi

$ rpm -q --requires coreutils/bin/sh/bin/sh/bin/sh/bin/sh/sbin/install-infoconfig(coreutils) = 5.93-7.2findutilsgreplibacl.so.1()(64bit)libacl.so.1(ACL_1.0)(64bit)libc.so.6()(64bit)libc.so.6(GLIBC_2.2.5)(64bit)libc.so.6(GLIBC_2.3)(64bit)libc.so.6(GLIBC_2.3.4)(64bit)libc.so.6(GLIBC_2.4)(64bit)libcrypt.so.1()(64bit)libdl.so.2()(64bit)libm.so.6()(64bit)libm.so.6(GLIBC_2.2.5)(64bit)libpam.so.0()(64bit)libpam.so.0(LIBPAM_1.0)(64bit)libpam_misc.so.0()(64bit)libpam_misc.so.0(LIBPAM_MISC_1.0)(64bit)librt.so.1()(64bit)librt.so.1(GLIBC_2.2.5)(64bit)libselinux >= 1.25.6-1libselinux.so.1()(64bit)pam >= 0.66-12rpmlib(CompressedFileNames) <= 3.0.4-1rpmlib(PayloadFilesHavePrefix) <= 4.0-1rpmlib(VersionedDependencies) <= 3.0.3-1$

Iz navedenog primjera može se vidjeti kako se u ispisu nalaze isprepleteni paket, biblioteke i programi. Za svaki paket moguće je navesti koja verzija mora biti instalirana, ili koja minimalna verzija mora biti instalirana. Za biblioteke verzija se nalazi upisana u imenu dok se u zagradama nalazi navedena arhitektura. Dakle, uz pomoć opcije --requires saznali smo sve o čemu zavisi paket coreutils. Kako bi saznali što sve neki paket nudi drugim instaliranim paketima, upotrijebiti ćemo opciju --provides. Dakle, paket coreutils pruža sljedeće ostalim paketima:

$ rpm -q --provides coreutilsconfig(coreutils) = 5.93-7.2fileutils = 5.93sh-utils = 5.93stattextutils = 5.93coreutils = 5.93-7.2$

Također za svaki od paketa možemo upotrebom opcije --whatrequires dobiti popis paketa koji o dotičnom paketu ovise. Primjerice, kako bi saznali koji sve paketi ovise o sh-utils možemo postaviti sljedeći upit:

41

Page 48: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

$ rpm -q --whatrequires sh-utilssgml-common-0.6.3-17.1module-init-tools-3.2-0.pre9.2.2.1krb5-libs-1.4.3-4.1xml-common-0.6.3-17.1krb5-libs-1.4.3-4.1httpd-2.2.0-5.1.2krb5-workstation-1.4.3-4.1a2ps-4.13b-49initscripts-8.31.1-1logwatch-7.2.1-1.fc5nscd-2.4-8xsane-gimp-0.99-2.2.fc5.4postfix-2.2.8-1.2mysql-server-5.0.21-2.FC5.1$

U ovom dijelu prošli smo tek dio mogućnosti što ih nudi program rpm za dohvat podataka o paketima.

Instalacija, deinstalacija i osvježavanje paketa

Idući bitan mod rada rpm naredbe je instalacija paketa. Instalirati se mogu paketi koji su pohranjeni lokalno, ili udaljeno, putem računalne mreže. Opcija koja odabire mod instalacije je -i, ili u duljoj verziji, --install.

Recimo, želimo li instalirati već navedeni paket zip-2.31-1.2.1.x86_64.rpm to bi obavili na sljedeći način:

# rpm -i zip-2.31-1.2.1.x86_64.rpm#

U ovom slučaju, naredba je uspješno obavila instalaciju jer nije ništa ispisala. Treba primjetiti da se kao argument za instalaciju mora navesti puno ime paketa, zajedno s ekstenzijom. Želimo li s druge strane ukloniti neki paket, dovoljno je napisati samo ime paketa. Dakle, da bi obrisali već navedeni paket treba izvršiti sljedeću naredbu:

# rpm -e zip#

Opcijom -e bira se iduća funkcija naredbe rpm, uklanjanje već instaliranih paketa. I u ovom slučaju naredba rpm nije ništa ispisala što se može protumačiti kao uspješno izvršavanje te naredbe.

Prilikom uklanjanja paketa može se pojaviti problem s ovisnostima između paketa. Primjerice, ako paket A zahtijeva paket B tada nije moguće ukloniti samo paket B budući da bi u tom slučaju paket A mogao prestati raditi. U takvim slučajevima, naredba rpm će ispisati upozorenje o međuovisnostima te neće ukloniti zahtijevani paket. Pokušajmo ukloniti paket file:

# rpm -e fileerror: Failed dependencies: file is needed by (installed) rpm-build-4.4.2-15.2.x86_64 /usr/bin/file is needed by (installed) redhat-lsb-3.0-9.2.i386 /usr/bin/file is needed by (installed) redhat-lsb-3.0-9.2.x86_64 /usr/share/magic.mime is needed by (installed) httpd-2.2.0-5.1.2.x86_64#

U navedenom ispisu naredbe rpm primjećujemo kako nekoliko paketa ovisi o paketu file te taj paket nije moguće ukloniti. Ukoliko ipak želimo obrisati neki paket bez obzira na rušenje zavisnosti s drugim paketima koristi se opcija --nodeps kao na sljedećem primjeru.

42

Page 49: Marko Salkic - Linux - Napredni Tecaj

5. Programski paketi

# rpm -e --nodeps bother#

Pokušajmo sada obaviti instalaciju paketa ali tako da nam naredba rpm ispisuje napredak tijekom instalacije. Za to ćemo iskoristiti opcije -h i -v. Upotrebom tih opcija izlaz naredbe rpm tijekom instalacije ima sljedeći oblik:

# rpm -ivh zip-2.31-1.2.1.x86_64.rpmPreparing... ########################################### [100%] 1:zip ########################################### [100%]

Ukoliko paket zavisi o nekim drugim paketima, neće biti instaliran sve dok se ne zadovolje sve zavisnosti. Odlučimo li instalirati paket bez obzira na te konflikte koristit ćemo opciju --force. Ovaj pothvat se ne preporuča bez prethodnog razumijevanja nastale situacije.

Osim paketa na lokalnom računalu također možemo istalirati i pakete s udaljenih računala tako da umjesto imena datoteke navedemo URL do samog paketa (http ili ftp). Navest ćemo primjer instalacije s ftp poslužitelja koji zahtjeva prethodnu autorizaciju.

# rpm -i ftp://[email protected]/pub/rpms/apmd-2.4-1.i386.rpmPassword for [email protected]: lozinka (not echoed)#

Nakon što je paket instaliran, potrebno je vršiti periodične nadogradnje koje donose odgovarajuća poboljšanja ili ispravljaju otkrivene pogreške u paketu i aplikaciji. Da bi se pojednostavila nadogradnja paketa, tj. da se izbjegne najprije pokretanje deinstalacije postojećeg paketa te zatim instalacije novog, rpm nudi mogućnost nadogradnje korištenjem jedne naredbe uz opciju -U, odnosno --upgrade. Ovom naredbom najprije će se ukloniti starija verzija paketa, ukoliko takva postoji, a nakon toga obavit će se instalacija novog paketa.

Kako bi dobili detaljnije informacije o tijeku nadogradnje paketa mogu se koristiti opcije -v i -h na sljedeći način:

# rpm -Uvh mysql-server-3.23.58-9.i386.rpmPreparing... ####################### [100%] 1:mysql-server ####################### [100%]#

Ukoliko se ukaže potreba za nadogradnjom paketa starijom verzijom sam rpm neće dozvoliti takvu akciju ukoliko, uz opciju -U, ne navedemo i opciju --force. Ova akcija uz opciju --force biti će spriječena jedino u slučaju nezadovoljenih zavisnosti paketa.

Verifikacija paketa

S vremena na vrijeme potrebno je provjeriti ispravnost paketa na računalu. Potrebno je provjeriti da li su paketi ispravno konfigurirani ili su možda nastale neke promjene ili šteta za koju nismo svjesni.

Da bismo verificirali neki paket koristi se opcija -V. Primjerice,

$ rpm -V file$

U ovom primjeru paket file je ispravno instaliran, tj. zadovoljene su sve zavisnosti za paket, a također niti jedna od datoteka koju čini taj paket nije modificirana. Za ispis više detalja prilikom verifikacije, bez obzira na ispravnost ili neispravnost paketa, potrebno je dodati opciju -v. Dakle, ponovimo li prethodni primjer dobiti ćemo sljedeći izlaz:

43

Page 50: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

$ rpm -V -v file......... /usr/bin/file......... /usr/include/magic.h......... /usr/lib64/libmagic.a......... /usr/lib64/libmagic.so......... /usr/lib64/libmagic.so.1......... /usr/lib64/libmagic.so.1.0.0......... /usr/share/doc/file-4.17......... d /usr/share/doc/file-4.17/LEGAL.NOTICE......... d /usr/share/doc/file-4.17/README......... /usr/share/file/magic......... /usr/share/file/magic.mgc......... /usr/share/file/magic.mime......... /usr/share/file/magic.mime.mgc......... /usr/share/magic......... /usr/share/magic.mime......... d /usr/share/man/man1/file.1.gz......... d /usr/share/man/man3/libmagic.3.gz......... d /usr/share/man/man5/magic.5.gz......... /usr/share/misc/magic$

Verifikacija neinstaliranog paketa

Da bi se napravila verifikacija neinstaliranog paketa koristi se opcija -V i -p. Opcija -V poziva funkciju za verifikaciju, dok opcija -p označava da se verifikacija radi za paket naveden kao argument naredbe.

$ rpm -Vp /mnt/cdrom/RedHat/RPMS/i386/ElectricFence-2.2.2-20.2.i386.rpmmissing /usr/bin/efmissing /usr/lib/libefence.amissing /usr/lib/libefence.so...missing d /usr/share/man/man3/efence.3.gzmissing d /usr/share/man/man3/libefence.3.gz

5.6.2. Korištenje yum alata

rpm, iako dosta sofisticiran alat, ima dosta mana. Jedna od temeljnih mana tog alata je nedostatak evidencije o zavisnostima između paketa. Primjerice, ako administrator pokušava instalirati paket P1 koji ovisi o neinstaliranom paketu P2, rpm će prekinuti instalaciju i zahtijevati od administratora da prvo instalira P2. To može postati dosta komplicirano budući da su zavisnosti između paketa složene, a i u dosta situacija rpm ne javlja ime paketa P2 već neku datoteku iz P2 koja je neophodna za P1. Drugim riječima, administrator mora sam otkriti kojem paketu potrebna datoteka pripada, instalirati navedeni paket i potom pokušati ponovo instalirati P1. Stvari mogu postati još kompliciranije s nadogradnjama.

Kako bi se riješili navedeni problemi nastao je yum. Funkcija tog programa je prikrivanje kompleksnosti upravljanja paketima i vođenje evidencije o mnoštvu detalja, dijelom opisanih u prethodnom paragrafu.

44

Page 51: Marko Salkic - Linux - Napredni Tecaj

5. Programski paketi

Kako bi yum mogao uspješno izvršavati svoju funkciju porebno je imati repozitorij koji se nalazi na lokalnom disku, ili se može dohvatiti putem računalne mreže. Repozitoriji su korisni iz razloga što pomoću njih yum alat automatski locira traženi paket te nas oslobađa mukotrpnog traženja paketa. Mrežni poslužitelji paketa za RedHat distribucije sadrže obično tri glavna repozitorija: base, updates i extras. U base repozitoriju nalaze se paketi službene distribucije koji su dostupni i na instalacijskom CD-u. Updates repozitorij sadrži pakete koji su nadogradnja paketima iz base repozitorija, dok extras repozitorij sadrži velik broj programskih pakete koje ne nalazimo u base repozitoriju.

Konfiguriranje yum alata

Da bi yum mogao dohvaćati pakete iz repozitorija potrebno ga je prethodno konfigurirati. Glavna konfiguracijska datoteka alata nalazi se u direktoriju /etc a zove se yum.conf. Primjer konfiguracijske datoteke yum.conf dan je u nastavku.

$ cat /etc/yum.conf[main]cachedir=/var/cache/yumdebuglevel=2logfile=/var/log/yum.logpkgpolicy=newestdistroverpkg=redhat-releasetolerant=1exactarch=1retries=20gpgcheck=1$

yum.conf definira globalne konfiguracijske opcije yum alata unutar main sekcije. Main sekcija je nužna za sam rad yum alata. Općenito se svaka sekcija definira u uglatim zagradama, a nakon toga sljede postavke koje pripadaju toj sekciji. Neke od postavki main sekcije jesu:

• cachedir – direktorij u kojem yum sprema privremene datoteke i bazu informacija o paketima.

• debuglevel – razina za količinu informacija koje će yum ispisivati.

• logfile – putanja do datoteke u koju će yum spremati dnevnik.

• pkgpolicy – politika na kojoj će yum odabirati koji će od paketa instalirati ukoliko naiđe na više različitih verzija.

• discoverypkg – paket na temelju kojeg će yum prepoznati verziju distribucije

• exactarch – uključenjem ove opcije yum će nadograđivati pakete jedino paketima koji su namjenjeni za istu arhitekturu računala.

• retries – broj pokušaja dohvata paketa prije javljanja greške

• gpgcheck – uključenjem opcije yum će za pakete koje instalira provjeravati GPG potpis.

Osim glavne sekcije potrebno je navesti i sekcije koje definiraju postavke repozitorija. U starijim verzijama RedHat distribucija postavke za repozitorije smještale su se unutar glavne konfiguracijske datoteke, dok se u novijim verzijama teži odvajanju postavka repozitorija u zasebne datoteke. Te datoteke smještaju se u direktorij /etc/yum.repos.d. Imena su im proizvoljna (obično ime repozitorija) no moraju nužno završavati sa .repo. Uzet ćemo primjer datoteke fedora.repo.

45

Page 52: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

$ cat /etc/yum.repos.d/fedora.repo[base]name=Fedora Core $releasever - $basearch – Basebaseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/$releasever/$basearch/os/enabled=1gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora$

Datoteka fedora.repo definira sekciju imena base koja sadrži parametre za dohvat paketa iz osnovnog (base) repozitorija. Neki od parametara ove sekcije jesu:

• name – kratki opis repozitorija

• baseurl – URL do direktorija repozitorija. Može biti http://, ftp:// ili file://

• mirrorlist – slično kao baseurl samo što se ovdje navodi URL do datoteke koja sadrži putanju do direktorija repozitorija.

• enabled – opcija kojom se uključuje, odnosno isključuje dozvola za dohvaćanje paketa iz repozitorija kojeg definira sekcija

• gpgcheck – uključenjem opcije yum će za pakete koje instalira provjeravati GPG potpis

• gpgkey – URL do GPG ključa

Imena paketa u yum alatu

Sve pakete koje želite instalirati, nadograditi, ukloniti, pretraživati yum alatu mogu se kao argument zadati u sljedećim oblicima:

• name

• name.arch

• name-ver

• name-ver-rel

• name-ver-rel.arch

• name-epoch:ver-rel.arch

• epoch:name-ver-rel.arch

Parametar name označava ime aplikacije, arch arhitekturu za koju je aplikacija pisana, ver verziju aplikacije, rel verziju paketa, te epoch označava redni broj epohe nastanka paketa. Epoch se obično koristi ukoliko sama verzija aplikacije i paketa nisu dovoljne za razlikovanje koji od dva paketa iste aplikacije je noviji.

Instaliranje novih paketa

Za instaliranje novih paketa pomoću yum alata koristi se opcija install na sljedeći način:

# yum install pkg [pkg...]

pkg je ime jednog ili više paketa koje želimo instalirati.

46

Page 53: Marko Salkic - Linux - Napredni Tecaj

5. Programski paketi

ZAD. Potrebno je instalirati paket tsclient pomoću yum alata.

# yum install tsclientLoading "installonlyn" pluginSetting up Install ProcessSetting up repositoriescore [1/3]core 100% |=========================| 1.1 kB 00:00

...

Resolving Dependencies

...

============================================================================= Package Arch Version Repository Size=============================================================================Installing: tsclient i386 0.140-1.2.1 core 304 kInstalling for dependencies: rdesktop i386 1.4.1-3.2.1 core 117 k

Transaction Summary=============================================================================Install 2 Package(s)Update 0 Package(s)Remove 0 Package(s)Total download size: 421 kIs this ok [y/N]: y

Downloading Packages:

...

Installed: tsclient.i386 0:0.140-1.2.1Dependency Installed: rdesktop.i386 0:1.4.1-3.2.1Complete!

Uklanjanje paketa

Da bi uklonili neki od instaliranih paketa koristi se opcija remove:

# yum remove pkg

Na ovaj način uklonit će se paket pkg te svi paketi koji ovise o njemu.

ZAD.Potrebno je ukloniti paket tsclient pomoću yum alata.

# yum remove tsclientLoading "installonlyn" pluginSetting up Remove ProcessResolving Dependencies

...

============================================================================= Package Arch Version Repository Size=============================================================================Removing: tsclient i386 0.140-1.2.1 installed 492 k

Transaction Summary=============================================================================

...

Removed: tsclient.i386 0:0.140-1.2.1Complete!

47

Page 54: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

Nadogradnja paketa

Za nadogradnju paketa najnovijom dostupnom verzijom koristi se opcija update:

# yum update [pkg]

pkg je ime paketa kojeg nadograđujemo. Pkg argument je opcionalan. Ukoliko se izostavi izvršit će se nadogradnja svih instaliranih paketa na sustavu za koje postoje novije verzije.

ZAD. Potrebno je nadograditi paket tar pomoću yum alata.

# yum update tarLoading "installonlyn" pluginSetting up Update ProcessSetting up repositories

...

Resolving Dependencies

...

============================================================================= Package Arch Version Repository Size=============================================================================Updating: tar i386 1.15.90-1.FC5 updates 648 k

Transaction Summary=============================================================================Install 0 Package(s)Update 1 Package(s)Remove 0 Package(s)Total download size: 648 kIs this ok [y/N]: y

...

Updated: tar.i386 0:1.15.90-1.FC5Complete!

Pretraživanje paketa

Za pretraživanje raspoloživih paketa po imenu koristi se opcija list.

$ yum list [regex...]

regex predstavlja regularni izraz prema kojem se obavlja pretraživanje paketa po imenima paketa.

ZAD. Potrebno je provjeriti da li je raspoloživ paket tsclient. Da li je paket tsclient već instaliran?

$ yum list tsclientSetting up repositoriesReading repository metadata in from local filesAvailable Packagestsclient.i386 0.132-6 base

Paket tsclient nije instaliran. Dostupan je u repozitoriju base.

Za naprednije pretraživanje koje se ne bazira samo na pretraživanju prema imenu paketa već i drugim mogućnostima kao što su opisi paketa, koristi se opcija search na sljedeći način:

$ yum search [regex...]

48

Page 55: Marko Salkic - Linux - Napredni Tecaj

5. Programski paketi

ZAD. Potrebno je pronaći sve raspoložive pakete koji su vezani uz pojam PalmPilot.

$ yum search PalmPilotSearching Packages:Setting up repositoriesReading repository metadata in from local files

gnome-pilot.i386 2.0.13-2 baseMatched from:gnome-pilot is a collection of programs and daemon for integratingGNOME and the PalmPilot<tm> or other PalmOS<tm> devices.

gnome-pilot-conduits.i386 2.0.13-1 baseMatched from:gnome-pilot is a collection of programs and daemon for integratingGNOME and the PalmPilot<tm>.

...

pilot-link-devel.i386 1:0.12.0-0.pre4.0.fc4. InstalledMatched from:PalmPilot development header files.This package contains the development headers that are used to buildthe pilot-link package. It also includes the static librariesnecessary to build static pilot applications.

If you want to develop PalmPilot synchronizing applications, you willneed to install pilot-link-devel.

Informacije o paketu

Opcija info se koristi za ispis informacija o navedenom paketu:

$ yum info pkg

pkg je ime paketa čije informacije tražimo.

ZAD. Potrebno je ispisati informacije o paketu tsclient.

$ yum info tsclientSetting up repositoriesReading repository metadata in from local filesAvailable PackagesName : tsclientArch : i386Version: 0.132Release: 6Size : 247 kRepo : baseSummary: Client for VNC and Windows Terminal ServerDescription: tsclient is a frontend that makes it easy to use rdesktop and vncviewer.You will need to install rdesktop or vnc in addition to tsclient.

49

Page 56: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

5.6.3. Kreiranje lokalnog repozitorija paketa

Ukoliko nemate stalan pristup repozitorijima na internetu ili pa želite učiniti nadogradnju paketa novijima koje posjedujete na nekom mediju kao CD bit će korisno prethodno kreirati lokalni repozitorij. Najprije se kreira direktorij za repozitorij:

# mkdir /home/fedora

Nakon toga potrebno je u taj direktorij kopirati sve rpm pakete s medija. Npr. ako se radi o CD-u to ćete obaviti na sljedeći način:

# cp /media/cdrecorder/Fedora/RPMS/* /home/fedora

Zatim je potrebno kreirati zaglavlje repozitorija pomoću naredbe createrepo.

# createrepo /home/fedora

Na kraju je potrebno kreirani repozitorij dodati yum alatu u konfiguraciju, odnosno u /etc/yum.repos.d dodati datoteku local_repository.repo sljedećeg sadržaja:

[Fedora local repository]name=Fedora Core $releasever - $basearch – Local repositorybaseurl=file:/home/fedora/

50

Page 57: Marko Salkic - Linux - Napredni Tecaj

5. Programski paketi

5.7. Literatura

1. http://www.debian.org/doc/manuals/apt-howto/ch-basico.en.html

2. http://www.linuxjournal.com/article/8878

3. http://www.aboutdebian.com/packages.htm

4. http://www-128.ibm.com/developerworks/linux/library/l-debpkg.html

5. http://www.newlinuxuser.com/howto-install-deb-rpm-and-source-code-files/

6. http://fedora.redhat.com/docs/yum/index.html

7. http://en.wikipedia.org/wiki/RPM_Package_Manager

8. http://en.wikipedia.org/wiki/Dpkg

9. http://en.wikipedia.org/wiki/Advanced_Packaging_Tool

10. http://www.rpm.org/

11. http://fedora.redhat.com/

12. http://www.charlescurley.com/yum/index.html

13. http://fedora.redhat.com/docs/mirror/sn-server-config.html

14. http://www.cyberciti.biz/howto/question/linux/dpkg-cheat-sheet.php

15. http://xtronics.com/reference/rpm2apt-dpkg.htm

16. http://www.gnoppix.org/pages/rute/node27.html#SECTION002726000000000000000

51

Page 58: Marko Salkic - Linux - Napredni Tecaj

6. Korisnici i grupeLinux je višekorisnički operacijski sustav. To drugim riječima znači kako više različitih korisnika može upotrebljavati i dijeliti računalo i njegove resurse. Kako bi to bilo moguće operacijski sustav, u svom temelju, podržava koncept korisnika. Koncept korisnika znači da operacijski sustav za sve resurse vodi evidenciju o korisniku kojemu taj resurs pripada te upravlja pristupom resursima na osnovu vlasnika resursa i korisnika koji pokušava resursu pristupiti. Kako bi se spriječila zloupotreba resursa svaki korisnik, uz korisničko ime (username) koje je javno, dobija i lozinku (password) koja je tajna. Kada korisnik želi pristupiti računalnim resursima prvo se mora prijaviti na sustav. Prijava započinje navođenjem korisničkog imena. Potom, da bi dokazao kako je on doista taj za kojega se predstavlja, mora unijeti lozinku koja je poznata isključivo njemu. Nakon prijave na sustav, korisnik može koristiti resurse za koje ima dozvolu korištenja.

Očito je iz navedenog teksta kako je potrebno naučiti administrirati korisnike. U to spada izrada korisničkih računa, mijenjanje postavki, dodijeljivanje i brisanje prava na sustavu i slično. Radi lakše organizacije sustava, posebice u slučaju da se njime koristi velik broj korisnika, moguće je korisnike podijeliti u grupe. Grupe su, prilično je jasno, skupine korisnika s istim ovlastima na sustavu.

Tijekom instalacije operacijskog sustava Linux na računalo, u jednom trenutku potrebno je unijeti lozinku za administratora računala. Korisničko ime adminstratora je root. Svaki Linux sustav ima administratorsko korisničko ime kojemu je dozvoljen pristup svim servisima, funkcijama i kontrolama sustava. Koristeći navedeni administratorski račun može se učiniti gotovo bilo što na sustavu, namjerno, ali i slučajno. Uz ovlasti koje pruža pristup administratora, javlja se i opasnost od slučajnog brisanja važnih konfiguracijskih datoteka i drugih potrebnih informacija, pogrešno konfiguriranje sustava i sličnih nezgoda. Može se odmah vidjeti kako davanje dozvole administratorskog pristupa svim korisnicima nije dobrar princip upravljanja i korištenja računala. Zbog toga, administratorske ovlasti najbolje je ograničiti isključivo na korištenje dovoljno stručnim osobama, te, sigurnosti radi, ograničiti pristup tom korisničkom imenu s drugih računala.

6.1. Upravljanje korisnicima

Upravljanje korisnicima podrazumijeva sljedeće operacije:

● Dodavanje novog korisnika

● Brisanje postojećeg korisnika

● Promjena podataka korisnika

Za svakog korisnika sustav vodi informacije o korisničkom imenu, zaporci, identifikacijskom broju korisnika (UID - User ID), njegovom kućnom direktoriju, ljusci koju koristi, stanju njegovog računa, kao i informaciji kojim grupama korisnik pripada. Osim toga, bilježe se i podaci o dodatnim informacijama kao što su puno ime i prezime, adresa i slično. Dva posebno bitna podatka su već spomenuti UID koji predstavlja identifikacijski broj korisnika, kao i GID (Group ID) koji predstavlja identifikacijski broj grupe. Svaki novi korisnik pri stvaranju dobiva prvi slobodan UID, ukoliko nije posebno zadan od administratora. Jednako tome, GID se dodjeljuje svakoj novostvorenoj grupi. Potrebno je istaknuti da UID jednak nuli (0) predstavlja root korisnika, tj. administratora računala, što i slijedi iz prije navedenog jer se pri instalaciji prvo stvara račun administratora.

6.1.1. Dodavanje korisnika

Ukoliko se želi jednostavniji način dodavanja novog korisnika od ručnog mijenjanja datoteke /etc/passwd, može se koristiti naredba adduser. Ova naredba odrađuje sav posao stvaranja novog korisnika. Sintaksa glasi:

52

Page 59: Marko Salkic - Linux - Napredni Tecaj

6. Korisnici i grupe

adduser [opcije] korisnik [grupa]

Naredbu se može koristiti samo navodeći ime korisnika, no moguće je i korištenje opcija da bi se izmjenile neke defaultne postavke. Te postavke zapisane su u datoteci /etc/adduser.conf. Spomenuta datoteka se također može ručno mijenjati. Slijedi primjer stvaranja novog korisnika:

# adduser ivicaAdding user ivica...Adding new group ivica (1004).Adding new user ivica (1004) with group ivica.Creating home directory /home/ivica.Copying files from /etc/skelEnter new UNIX password:Retype new UNIX password:passwd: password updated successfullyChanging the user information for ivicaEnter the new value, or press return for the defaultFull Name []: ivica ivicRoom Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [y/n] y#

Naredba adduser uzima korisničko ime, te mu dodjeljuje sljedeći slobodan identifikacijski broj korisnika (UID). Ukoliko nije navedeno ime grupe kojoj korisnik treba pripasti, stvara se nova grupa imena jednakog korisničkom imenu, te se korisnik dodaje u tu grupu. Slijedi stvaranje korisničkog kućnog direktorija imenovanog kao i korisničko ime, te se kopiraju osnovne datoteke iz /etc/skel direktorija. Zatim adduser traži postavljanje zaporke za novog korisnika, te na kraju i unos dodatnih informacija o korisniku, ukoliko su potrebne.

Pri postavljanju zaporke, traži se i njena potvrda ponovnim unosom, a ako se upisane zaporke ne poklapaju, program briše sve stvorene datoteke i direktorije.

Osim ove naredbe, postoji i naredba useradd koja je jednaka, osim što pri stvaranju ne traži unos zaporke i drugih informacija o korisniku koji se stvara, već se one mogu po želji zadati kao opcije same naredbe.

6.1.2. Brisanje korisnika

Kao što se pri održavanju sustava stvaraju novi korisnici, javlja se i potreba za brisanjem korisnika. Za brisanje korisnika koji više ne koriste svoj račun, koristi se naredba userdel kao u primjeru:

# userdel -r ivica

Opcija -r briše sve tragove korisnika, uključujući i korisnikov kućni direktorij i mailbox. Ukoliko se ova opcija ne odabere, direktorij ostaje na sustavu. Treba napomenuti da korisnik treba biti odjavljen sa sustava, te svi procesi koje je korisnik pokrenuo ugašeni da bi se mogao izbrisati sa sustava. Za oprez, dobro je pospremiti backup korisnikovog kućnog direktorija prije brisanja korisnika i njegovih podataka.

6.1.3. Promjena podataka o korisnicima

Korisnički podaci se mogu mijenjati koristeći naredbu usermod sintakse:

usermod [opcije] LOGIN

53

Page 60: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

Same opcije su jednake kao i kod useradd naredbe, a navedene su u tablici 1.

Tablica 1: Opcije usermod naredbe

-c komentar Vrijednost polja komentara u datoteci zaporke

-d kućni_direktorij Kućni direktorij pri loginu na sustav

-e datum_isteka Datum isteka korisničkog računa

-f neaktivni_dani Broj dana nakon isteka zaporke nakon kojih dolazi do gašenja računa

-g inicijalna_grupa Ime ili broj grupe kojoj korisnik inicijalno pripada

-G grupa1[ ,grupa2,..., [grupaN]]]

Lista ostalih grupa kojima korisnik pripada

-l naziv_logina Ime korisnika na sustavu (login)

-L Zaključavanje korisničkog računa

-o U kombinaciji s -u omogućava promjenu UID-a na nejedinstvenu vrijednost

-p password Zaporka

-s ljuska Postavka korisničke ljuske

-u uid Jedinstveni broj koji predstavlja UID

-U Otključavanje korisničkog računa

Lozinku korisnika moguće je mijenjati naredbom passwd. Naredba se koristi tako da se kao argument proslijedi korisničko ime korisnika kojem želimo promijeniti lozinku. To može napraviti isključivo root. Svaki korisnik može mijenjati samo svoju lozinku sa istom naredbom (bez argumenata). Opcija -d ove naredbe omogućava pojedinom korisniku da se prijaviti na sustav bez lozinke.

# passwd markoChanging password for user marko.New UNIX password:1m2a3r4kRetype new UNIX password:1m2a3r4kpasswd: all authentication tokens updated successfully.#

Ukoliko se želi privremeno zaključati korisnički račun, to se može učiniti dodavanjem zvjezdice (*) ispred odgovarajućeg zapisa o korisniku unutar /etc/passwd datoteke. Dakle, umijesto npr.

ivan:x:500:500:ivan ivankovic:/home/ivan:/bin/bash

imamo zapis

*ivan:x:500:500:ivan ivankovic:/home/ivan:/bin/bash

Sustav nakon ove izmjene ne prihvaća login korisničkog imena ivan, jer nema zapis o postojanju takvog korisnika te vraća

Unknown id: ivan

54

Page 61: Marko Salkic - Linux - Napredni Tecaj

6. Korisnici i grupe

Čak i u slučaju da lockani korisnik pokuša napraviti login poznavajući primjenjenu metodu lockanja korisničkog računa i pokuša se logirati kao *ivan, sustav neće pronaći zapis o zaporci za spomenuto korisničko ime te će vratiti

Authentication service cannot retrieve authentication info. (Ignored)

jer, trenutno sustav ima zapis o postojanju korisnika *ivan i zaporke za korisnika ivan, koje za sustav ne predstavljaju istog korisnika.

Zaključavanje korisničkog računa može se vršiti i naredbom passwd uz korištenje opcije -l.

6.1.4. Datoteke s informacijama o korisnicima

Datoteka /etc/passwd sadrži sve podatke o korisnicima, točnije skoro sve. Ovoj datoteci pristupa se pri loginu, tj. autentifikaciji na sustav, te se njome potvrđuje korisničko ime i zaporka, te određuje kućni direktorij i postavljena ljuska sustava. Također, datoteka može sadržavati osobne podatke o korisniku, kao što su puno ime korisnika, adresa, te drugi podaci koji pomažu identifikaciji korisnika od strane administratora. Slijedi primjer izgleda /etc/passwd datoteke.

# cat /etc/passwdroot:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/bin/shbin:x:2:2:bin:/bin:/bin/shsys:x:3:3:sys:/dev:/bin/sh...ivica:x:1003:1003:ivica,101,555-1234,555-4321,radnik:/home/ivica:/bin/bash#

Da bi smo shvatili što ovdje zapravo piše, koristimo slijedeći format:

Korisničko_ime:Kriptirana_zaporka:Identifikacijski_broj_korisnika:Identifikacijski_broj_grupe:Osobni_podaci,komentari, i/ili Opis:Postavljen_home_direktorij:Postavljena_ljuska

Ova se datoteka može izmijeniti ručno, bilo kojim tekst-editorom. Pri tome, ostavlja se područje zaporke prazno, te postavlja zaporku za korisnika nakon što su završene izmjene /etc/passwd datoteke korištenjem naredbe passwd.

Ponekad se javlja potreba za stvaranjem računa (korisnika) isključivo za neki proces, dakle račun na koji se niti jedan korisnik neće prijavljivati, te će račun pripadati samo procesu za koji je stvoren. Da bi se onemogućilo da se netko prijavljuje na sustav koristeći taj račun, potrebno je postaviti /bin/false za ljusku (umijesto npr. /bin/bash). Ovo sprečava aktiviranje ljuske pri prijavi korisnika, pa time i korištenje samog računa.

Možemo primjetiti da se u /etc/passwd datoteci ne nalaze zaporke nego x na mjestu koje je za njih predviđeno. To je iz razloga da netko ne bi mogao jednostavno pogledati /etc/passwd datoteku i dobiti pristup stvarnim zaporkama svih korisnika. Zaporke se zapravo nalaze u posebnoj datoteci /etc/shadow u kriptiranom obliku (ukoliko je pri instalaciji sustava dozvoljeno korištenje shadow zaporki).

Da bi se olakšalo dodavanje novog korisnika na sustav, stvoren je /etc/skel direktorij. U slučaju da postoje posebne postavke za korisnike na sustavu ili aplikacije koje se pokreću pri prijavi na sustav, one se postavljaju u /etc/skel direktorij koji služi kao kostur za svakog novog korisnika.

Defaultni /etc/skel na Debian distribuciji sadrži slijedeće datoteke:

55

Page 62: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

# ls -al /etc/skel/total 56drwxr-xr-x 2 root root 4096 O\u017eu 21 13:12 .drwxr-xr-x 94 root root 12288 Svi 17 04:45 ..-rw-r--r-- 1 root root 24 Vel 11 01:14 .bash_logout-rw-r--r-- 1 root root 191 Vel 11 01:14 .bash_profile-rw-r--r-- 1 root root 124 Vel 11 01:14 .bashrc-rw-r--r-- 1 root root 120 Vel 28 23:40 .gtkrc#

Postoji mogućnosti mijenjanja ovih datoteka s postavkama, ili pak dodavanja novih, no potrebno je obratiti pozornost na to da sve što se nalazi u ovom direktoriju dobiva svaki novi korisnik stvoren naredbom adduser.

U nekim slučajevima, npr. kad računalo radi isključivo kao server, ne bi trebalo omogućiti pristup računalu lokalno ili udaljeno, osim za administratorskog korisnika. Dodavanjem tekstualne datoteke nologin u /etc/ direktorij, omogućava se prijava na sustav jedino za administratora. Ukoliko se na sustav pokuša prijaviti netko drugi, sustav mu prikaže sadržaj datoteke nologin, te se prekida veza korisnika i sustava. Mogući problem kod ovakve postavke jest da sustav ne dozvoljava udaljenu prijavu na server koristeći administratorski račun, te je potrebno da administrator bude fizički prisutan na računalu.

6.2. Upravljanje grupama

6.2.1. Dodavanje grupe

Grupu je moguće dodati naredbom groupadd. Naredba

# groupadd -g 1000 radnici

će dodati grupu imena radnici sa brojčanom oznakom (ID) 1000.

Promotrimo slijedeći niz naredbi:

# groupadd prodaja# useradd ivica -G prodaja# useradd marko -G prodaja# groupadd ing# useradd stjepan -G ing# useradd vesna -G ing# useradd sef -G prodaja,ing

Ovaj niz naredbi će napraviti dvije grupe: prodaja i ing. Unutar grupe prodaja su napravljeni korisnici ivica i marko. Unutar grupe ing su napravljeni korisnici stjepan i vesna. Korisnik sef je član obje grupe.

6.2.2. Brisanje grupe

Vrlo slično kao i kod upravljanja korisnicima, za brisanje grupe koristi se naredba groupdel.

# groupdel prodaja

6.2.3. Promjena podataka o grupama

Ponovno kao i kod upravljanja korisnicima, za izmjenu podataka o grupi, koristi se naredba groupmod. Njome se može izmijeniti ime postojeće grupe, ili pak njen GID (Group ID).

56

Page 63: Marko Salkic - Linux - Napredni Tecaj

6. Korisnici i grupe

# groupmod -n grupa ing

Za izmjenu zaporke grupe, koristimo naredbu gpasswd koja je istovjetna naredbi za izmjenu zaporke korisnika.

# gpasswd ing

Dakle, slijedi zaključak da čak i grupe mogu imati zaporku. Korištenjem -g opcije s naredbom passwd, također je moguće postaviti zaporku grupe.

6.2.4. Datoteka s podacima o grupama

Datoteka /etc/group sadrži podatke o grupama korisnika. Ove informacije se mogu odnositi na jednog ili više korisnika. Općenito, svaki korisnik pripada najmanje jednoj grupi, ponekad grupi nazvanoj po korisničkom imenu. Slijedi primjer sadržaja datoteke /etc/group:

# cat /etc/grouproot:x:0:daemon:x:1:bin:x:2:sys:x:3:adm:x:4:tty:x:5:disk:x:6:...users:x:100:user1,user2ivica:x:1003:ivica#

Sadržaj datoteke određen je ovom sintaksom:

Ime_grupe:Zaporka:Identifikacijski_broj_grupe:Korisnik2,Korisnik2,..

Kada korisnik postane član grupe, dobiva pristup datotekama grupe, kao što dobiva pristup svojim datotekama. Svaki korisnik bi trebao pripadati nekoj grupi, pa čak i u slučaju da svi korisnici pripadaju istoj grupi.

Korisnika možemo dodati u grupu dodvanjem njegovog korisničkog imena na kraj linije koja određuje pojedinu grupu u /etc/group datoteci koristeći bilo koji tekst-editor.

Stvaranje nove grupe za svakog novog korisnika može dovesti do velikih problema pri održavanju sustava. Međutim, postavljanje svih korisnika u istu grupu također nije praktično. Ukoliko se očekuje održavanje velikog broja korisničkih računa, preporučeno je stvaranje funkcionalnih grupa. Na primjer, svi korisnici odjela prodaje pripadaju grupi prodaja, dok svi korisnici iz inženjerskog odjela pripadaju ing grupi. Odmah je jasno da korisnici različitih grupa ne bi trebali imati ista prava na svim dijelovima sustava.

6.3. Kvote

Quota je izraz koji označava maksimalnu količinu podataka na disku. U slučaju da sustav koristi manji broj korisnika, moguće je da administratora neće zabrinjavati prostor na disku. S druge strane, povećanim brojem korisnika, povećava se i količina zauzetog prostora na disku. Dodavanje novih diskova je rješenje koje će svakako biti korisno u budućnosti, no ponekad i nije najbolje rješenje, posebice jer će se nekontrolirani rast zauzeća prostora na diskovima nastaviti. Zauzeće diskova od strane korisnika može se jednostavno kontrolirati postavljanjem kvota.

57

Page 64: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

Većina današnjih Linux distribucija u jezgri ima omogućeno korištenje kvota, kao i instaliran paket programa za njihovu kontrolu.

Konfiguracija sustava je jednostavna. Bilo kojim tekst-editorom može se izmjeniti datoteku /etc/fstab tako da sadrži ili usrquota ili grpquota opciju s postavkama za svaki datotečni sustav koji se želi kontrolirati. Te su opcije ignorirane pri mountanju, pa ponovno pokretanje sustava nije potrebno. Evo primjera /etc/fstab datoteke:

# <file <mount system> point> <type> <options> <dump> <pass>/dev/hdb1 / ext2 defaults,errors=remount-ro,usrquota 0 1

Podaci o ograničenjima se najčešće snimaju u datoteke aquota.user i aquota.group koju je potrebno staviti u glavni direktorij odgovarajuće particije. Datoteku mora posjedovati root s pravima čitanja i pisanja što se može postaviti naredbom chmod.

Da bi se pokrenula kontrola kvota diska potrebno je pokrenuti daemon naredbom:

# /etc/init.d/quota start

Time je započeto praćenje potrošnje prostora na diskovima, te kada korisnik dođe do granice, sustav ga obavijesti. Također, ako korisnike zanima njihov trenutni status, informacije mogu dobiti zadavanjem naredbe quota.

Zaustavljanje praćenja kvota vrši se naredbom:

# /etc/init.d/quota stop

Postavljanje ili mijenjanje postavki kvota za svakog korisnika ili grupu, vrši se naredbom edquota sintakse:

edquota [-ug] name..

Opcije -u i -g specificiraju da li se vrijednosti mijenjaju za grupu ili korisnika. Izvođenjem naredbe, pokreće se defaultni tekst-editor, u kojem se otvara privremena datoteka u kojoj su prikazane trenutno postavljene vrijednosti, npr:

/dev/hdb1: blocks in use: 44, limits (soft = 1000, hard = 1500)inodes in use: 12, limits (soft = 500, hard = 550)

Ovaj primjer pokazuje da korisnik ima postavljene kvote na uređaju hdb1 (prvom hard disku). Postavljeno je ograničenje broja blokova koje može koristiti. Svaki blok ima 1024 bajta. Soft označava granicu nakon koje će sustav početi obavještavati korisnika da se približio prelasku kvote, dok hard označava krajnju vrijednost. Kada se dostigne vrijednost broja blokova definirana pod hard, korisnik više ne može vršiti pohranu podataka, pa mora ili obrisati dio podataka, ili od administratora zatražiti povećanje svoje kvote. Druga pak linija određuje broj inod-ova (objekata) koje korisnik ima na raspolaganju. Ovdje objektima smatramo svaku datoteku i svaki direktorij. Dakle, korisnik u primjeru ima na raspolaganju oko 1MB prostora do upozorenja, tj. 1,5MB do popunjenja prostora. Isto vrijedi i za drugu liniju, te moguće je stvoriti ukupno 550 objakata (datoteka i direktorija).

Kada korisnik prijeđe soft vrijednost, ima određeno vrijeme vratiti se unutrar prihvatljivih okvira ili će se ovaj prijelaz shvatiti kao prijelaz hard vrijednosti, iako to još nije. Ovo se smatra periodom za preorganizaciju i obično je postavljena vrijednost od sedam dana. Vremensko ograničenje se može izmijeniti korištenjem naredbe

58

Page 65: Marko Salkic - Linux - Napredni Tecaj

6. Korisnici i grupe

# edquota -t

slično kao i pri postavljanju qouta.

Postavljanje kvota može se vršiti odmah pri stvaranju korisničkog računa izmjenom /etc/adduser.conf datoteke gdje se na dnu datoteke nalazi linija QUOTAUSER=””. Unutar navodnika dodajte željenu vrijednost kvote.

Informacije o stanju kvota na sustavu mogu se dobiti naredbom sintakse:

quota [-gv | q] [name]

gdje su opcije prikazane u tablici 2.

Tablica 2: Opcije naredbe quota

-g Informacije o postavkama za grupu čiji je korisnik član

-v Informacije o korisnicima koji trenutno ne koriste sustav

-q Skraćen ispis koji pokazuje samo informacije o tome gdje je prijeđena kvota

Drugi način dobivanja informacija je naredba repqouta koja daje potpunije informacije, a koristi se sintaksom:

repquota [ -vug] -a|filesystem

gdje su opcije navedene u tablici 3.

Tablica 3: Opcije naredbe repquota

-a Prikazuje sve datotečne sustave koji se prema /etc/fstab datoteci kontroliraju

-v Prikazuje sve kvote, bez obzira na njihovo korištenjem

-g Prikazuje informacije o kvotama svih grupa

-u Prikazuje informacije o kvotama svih korisnika

U primjeru dijela ispisa koji slijedi je postavljena kvota samo za jednog korisnika (ivan), i to samo za objekte, tj. datoteke:

$ repquota -aBlock limits File limitsUser used soft hard grace used soft hard graceroot -- 548440 0 0 54337 0 0daemon -- 8 0 0 3 0 0mail -- 80 0 0 19 0 0news -- 4 0 0 1 0 0www-data -- 24 0 0 11 0 0identd -- 4 0 0 1 0 0ivan -- 44 0 0 12 500 550

6.4. Zadaci za vježbu

1. Dodati korisnika josko u grupu majstori.

59

Page 66: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

2. Postaviti korisniku josko kvotu od 3MB na kućni direktorij.

3. Zaključati korisnički račun josko, pokušati se logirati kao korisnik josko, te otključati račun.

6.5. Autentifikacija i autorizacija

6.5.1. Prednosti korištenja kriptiranih zaporki

Na Linux sustavima na kojima nije omogućena podrška za shadow zaporke, svi korisnički podaci, uključujući i zaporke, spremljeni su u /etc/passwd datoteci. Zaporka je zapisana u kriptiranom obliku, točnije, zapravo je kodirana. Algoritam korišten za kodiranje zaporke je tzv. jednosmjerna hash funkcija. To je algoritam koji je lako izračunljiv u jednom smijeru, ali teško računljiv u drugom smijeru. Više o samom algoritmu možete saznati na crypt(3) stranicama sistemskog manuala.

Kada korisnik odabere zaporku, ona je kodirana nasumično izabranim vrijednostima zvanim salt, što omogućuje da se svaka zaporka pospremi na 4096 različitih načina, a vrijednost salt se sprema s kodiranom zaporkom. Kada se korisnik prijavljuje na sustav, prvo se dohvaća salt za tog korisnika, zaporka kojom se korisnik pokušao autorizirati se kodira korištenjem dohvaćenog salt-a, te se uspoređuje s kodiranom zaporkom. Ukoliko su jednake, korisnik je autentificiran.

Teško je, ali ne i nemoguće, uzeti nasumično kodirane zaporke i otkriti stvarnu zaporku. Međutim, na velikim sustavima, bar neke zaporke će biti često korištene riječi ili njihove jednostavne varijacije. To omogućuje napadačima na sustav da kodiraju riječnik često korištenih riječi i uobičajenih zaporaka koristeći svih 4096 mogučnosti salt vrijednosti. Nakon toga princip je jednostavan, usporedbom kodiranih zaporki u /etc/passwd datoteci s bazom mogućih kodiranih zaporki mogu doći do valjane zaporke. Ova metoda naziva se dictionary attack, tj. napad riječnikom, te je jedan od čestih napada u svrhu dobivanja ili širenja neautoriziranog pristupa sustavu.

Također, ukoliko je napadač u posjedu /etc/passwd datoteke, riječnik treba kodirati samo onim salt vrijednostima koje se nalaze i u /etc/passwd datoteci. Ova metoda probijanja sustava danas je dostupna apsolutno svakome, posebice iz razloga što je pristup do /etc/passwd dozvoljen svim korisnicima i aplikacijama zbog ostalih podataka koji se u spomenutoj datoteci nalaze.

Jednostavno rješenje problema je Shadow Suite koji premješta zaporke u drugu datoteku (obično /etc/shadow). Dozvole za čitanje i pisanje u tu datoteku ima samo administrator.

Osim što premještanjem zaporki u /etc/shadow datoteku držimo napadača dalje od kodiranih zaporki i sprečavamo izvođenje dictionary attack-a, Shadow Suite donosi još nekoliko mogućnosti:

• Konfiguracijska datoteka za postavljanje defaultnih vrijednosti pri prijavi na sustav (/etc/login.defs)

• Programi za dodavanje, izmjenu i brisanje korisnika i korisničkih grupa

• Starenje i istek zaporke

• Istek i zaključavanje korisničkog računa

• Shadow zaporki za grupe (opcionalno)

• Zaporke dvostruke duljine (16 znakova)

• Bolja kontrola odabira zaporke od strane korisnika

Instaliranje Shadow Suite-a doprinosi sigurnosti sustava, ali postoje i druge mogućnosti poboljšanja sigurnosti Linux sustava.

60

Page 67: Marko Salkic - Linux - Napredni Tecaj

6. Korisnici i grupe

6.5.2. Nedostaci pri korištenju kriptiranih zaporki

Postoje neke okolnosti u kojima korištenje Shadow Suite-a i nije tako dobra ideja:

• Računalo ne sadrži korisničke račune

• Računalo se nalazi u lokalnoj mreži i koristi NIS (Network Information Services) da bi dohvatila ili dostavila korisnička imena i zaporke ostalim računalima u mreži (ovo se zapravo može implementirati, ali izlazi iz okvira ovog dokumenta, te ne donosi puno poboljšanja sigurnosti sustava)

• Računalo koristi druge programe kojima autorizira korisnike

6.5.3. Izgled datotke kriptiranih zaporki

O formatu /etc/passwd datoteke već smo govorili, pa pogledajmo i format /etc/shadow datoteke:

Korisničko_ime:Zaporka:last:may:must:warn:expire:disable:reserved

pri čemu opcije određene prema tablici 4.

Tablica 4: Opcije /etc/passwd datoteke

last Broj dana od 1. siječnja 1970, kada je zaporka zadnji puta promijenjena

may Broj dana preostalih do mogućnosti ponovne izmjene zaporke

must Broj dana nakon kojih zaporka mora biti promjenjena

warn Broj dana prije isteka zaporke kada će korisnik biti upozoren

expire Broj dana nakon isteka zaporke kad će korisnički račun biti zatvoren

disable Broj dana od 1. siječnja 1970, kada je korisnički račun zatvoren

reserved Rezervirano polje

6.6. PAM

PAM (Pluggable Authentication Modules) su jezgra korisničke autentifikacije na modernoj Linux distribuciji.

6.6.1. Prednosti koje pruža PAM

PAM eliminira sve prije navedene probleme omogućujući programima da transparentno autentificiraju korisnike bez obzira na način na koji su informacije spremljene.

Pri korištenju PAM-a nije bitno da li su zaporke spremljene u /etc/passwd datoteku ili se nalaze na udaljenom serveru. Kada program treba autentificirati korisnika, PAM daje skupinu funkcija za ispravnu autentifikacijsku shemu. Zbog toga što se skupina funkcija (library) učitava dinamički, promjena autentifikacijske sheme moguća je jednostavnom izmjenom konfiguracijske datototeke.

Fleksibilnost je jedna od najvećih snaga PAM-a. Moguće ga je konfigurirati da onemogući pojedinim programima autentifikaciju korisnika, omogući autentifikaciju samo pojedinim korisnicima, da upozori kad pojedini programi pokušavaju izvršiti autentifikaciju, ili pak onemogućiti prijavu na

61

Page 68: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

sustav svim korisnicima. PAM-ov modularan dizajn daje potpuno upravljanje načina na koji će se korisnici autentificirati.

6.6.2. PAM konfiguracijske datoteke

PAM konfiguracijske datoteke su spremljene u /etc/pam.d/ direktoriju koji izgleda ovako:

# ls /etc/pam.d/atd passwd sudoauthconfig pirut system-authauthconfig-gtk pm-hibernate system-auth-acauthconfig-tui pm-powersave system-config-authenticationchfn pm-suspend system-config-datechsh poweroff system-config-displayconfig-util ppp system-config-keyboardcpufreq-selector printconf system-config-languagecrond printconf-gui system-config-lvmcups printconf-tui system-config-networkdateconfig printtool system-config-network-cmdgdm pup system-config-printergdm-autologin reboot system-config-printer-guigdmsetup remote system-config-printer-tuignome-screensaver run_init system-config-rootpasswordgnome-system-log runuser system-config-securitylevelhalt serviceconf system-config-serviceskbdrate setup system-config-soundcardlogin smtp system-config-timeneat smtp.sendmail system-config-usersnewrole sshd system-install-packagesother su#

Ukoliko znate da vaša distribucija koristi PAM, a gore spomenuti direktorij ne postoji, tada je PAM konfiguracija spremljena u /etc/pam.conf (konfiguracije su spremljene u jednoj datoteci umijesto da su raširene kroz nekoliko datoteka).

Vaš sustav može imati koju datoteku više ili manje, ovisno što je instalirano na sustavu. Ne gledajući u detalje, vjerojatno vidite datoteku za svaki program koji je instaliran na sustavu, a koristi autentifikaciju. Svaka od tih datoteka sadrži PAM autentifikacijsku konfiguraciju za program po kojem je imenovana (osim other datoteke). Pogledajmo izgled PAM konfiguracijske datoteke za login (ispis je smanjen radi jednostavnosti):

# cat /etc/pam.d/login#%PAM-1.0auth required pam_securetty.soauth include system-authaccount required pam_nologin.soaccount include system-authpassword include system-auth# pam_selinux.so close should be the first session rulesession required pam_selinux.so closesession include system-authsession required pam_loginuid.sosession optional pam_console.so# pam_selinux.so open should be the last session rulesession required pam_selinux.so open#

Sintaksa koja objašnjava ispis izgleda ovako:

type control module-path module-arguments

• type – tip autentifikacije koja se koristi u ovom modulu, čije su mogućnosti navedene u tablici 5

62

Page 69: Marko Salkic - Linux - Napredni Tecaj

6. Korisnici i grupe

Tablica 5: Mogućnosti tipa PAM autentifikacije

account Da li je korisniku omogućen pristup usluzi, da li je zaporka istekla,...

auth Da li je korisnik onaj kojim se predstavlja (autentifikacija)

passwd Mehanizam za izmjenu zaporke (ili drugog sredstva autentifikacije)

session Stvari koje treba obaviti prije i/ili nakon autentifikacije korisnika (može uključivati mountanje/unmountanje korisnikovog kućnog direktorija, praćenja prijave/odjave na sustavu, zabranjivanje/dozvoljavanje usluga za korisnika)

U login konfiguracijskoj datoteci vidimo bar jedan unos svakog od navedenih tipova. S obzirom da ovaj program omogućuje prijavu korisnika na sustav, jasno je da mora imati pristup različitim tipovima autentifikacije.

• control – određuje postupak ukoliko autentifikacija ovim modulom ne uspije, mogućnosti su opisane u tablici 6

Tablica 6: Opcije kontrole PAM autentifikacije

requisite Odmah proglašava neuspjeh autentifikacije

required Slično kao iznad, no PAM će prije proglašenja neuspjeha pozvati i druge module za ovu uslugu

sufficient Ako je autentifikacija uspjela, autentifikacija će biti odobrena, čak i u slučaju da u prethodnom modulu nije bila uspješna

optional Uspjeh ili neuspjeh ovog modula određuje ponašanje jedino u slučaju da je jedini modul tog tipa usluge

U konfiguracijskoj datoteci login, vidimo skoro sve različite kontrolne tipove. Većina zahtjevanih modula su pam_unix.so (glavni autentifikacijski modul), jedini nužan modul je pam_securetty.so (osigurava da se korisnik logira preko sigurne konzole), te jedini opcionalni modul pam_lastlog.so (modul koji dohvaća informacije o zadnjem loginu korisnika).

Ako je vaša PAM konfiguracija pohranjena u /etc/pam.conf datoteci, PAM konfiguracijske linije su malo drugačije. Umijesto da svaka usluga ima svoju konfiguracijsku datoteku, sve su konfguracije pohranjene u /etc/pam.conf, sa imenom usluge kao prvim zapisom u svakoj liniji konfguracije. Na primjer, linija koja se nalazi u /etc/pam.d/login datoteci:

auth required pam_unix.so nulok

u /etc/pam.conf datoteci izgleda ovako:

login auth required pam_unix.so nulok

Osim ove razlike, ostatak sintakse je jednak u oba tipa konfguracije.

63

Page 70: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

6.6.3. Trag modula

Trag modula (module-path) govori PAM-u koji modul koristiti i (opcionalno) gdje da ga nađe. Većina konfiguracija sadrži samo ime modula, kao u našoj login konfiguracijskoj datoteci. U tom slučaju, PAM traži module u defaultnom direktoriju PAM modula, obično /usr/lib/security, no ako se distribucija pridržava Filesystem Hierarchy Standarda (FHS), PAM moduli se nalaze u /lib/security direktoriju.

6.6.4. Argumenti modula

Argumenti modula (module-arguments) su argumenti koji se prosljeđuju modulu. Svaki modul ima svoje argumente. Na primjer, u našoj login konfiguraciji, nulok (null ok) jest argument poslan pam_unix.so modulu, koji mu govori da je prazna (null) zaporka prihvatljiva (ok).

6.6.5. PAM logovi

Pri korištenju, PAM moduli zapisuju podatke u datoteku /etc/log/auth.log koristeći osnovnu struktura zapisa

Datum Vrijeme Računalo Proces[PID]: modul poruka

Primjer ove datoteke je :

# cat /var/log/auth.logNov 29 17:42:21 localhost gdm[17354]: (pam_unix) session opened for user ivan by (uid=0)Nov 29 17:42:24 localhost login[17756]: (pam_unix) session opened for user ivan by (uid=0)Nov 29 17:42:24 localhost login[17757]: (pam_unix) session opened for user ivan by (uid=0)Nov 29 17:42:24 localhost login[17760]: (pam_unix) session opened for user ivan by (uid=0)Nov 29 17:42:25 localhost login[17761]: (pam_unix) session opened for user ivan by (uid=0)Nov 29 17:42:25 localhost login[17775]: (pam_unix) session opened for user ivan by (uid=0)Nov 29 17:42:25 localhost login[17762]: (pam_unix) session opened for user ivan by (uid=0)Nov 29 18:05:34 localhost su[18326]: (pam_unix) authentication failure; logname ivan uid=1000 euid=0 tty=pts/0 ruser=ivan rhost= user=rootNov 29 18:05:36 localhost su[18326]: pam_authenticate: Authentication failureNov 29 18:05:36 localhost su[18326]: -pts/0 system:root#

Prvi dio daje podatke o prijavi korisnika ivan na sustav, dok na drugom dijelu vidimo neuspjeli pokušaj prebacivanja korisnika ivan na administratorski način rada.

6.7. Literatura

1. 1. O'Reilly – Learning Debian GNU Linux

2. Hungry Minds – Debian GNU Linux Bible

3. 3. http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/pam.html

64

Page 71: Marko Salkic - Linux - Napredni Tecaj

7. Inicijalizacija sustavaLinkovi

http://linuxdevices.com/articles/AT6664588064.html

http://www.gnu.org/software/grub/manual/html_node/index.html

http://users.rsise.anu.edu.au/~okeefe/p2b/

http://en.wikipedia.org/wiki/Booting

http://www.pcguide.com/ref/mbsys/bios/bootSequence-c.html

http://www.gnu.org/software/grub/manual/multiboot/index.html#dir

http://www-128.ibm.com/developerworks/linux/library/l-initrd.html

Kada korisnik uključi računalo, ono izvršava niz radnji koje se moraju uspješno izvršiti kako bi se sustav mogao koristiti. Korisno je poznavati sve korake incijalizacijske procedure, tj. što se zapravo događa u pozadini prilikom inicijalizacije sustava. Poznavanje ovih koraka omogućuje što bolje podešavanje sustava i/ili otklanjanje eventualnih problema koji se mogu dogoditi prilikom podizanja sustava. Upoznat ćemo se sa pojmovima boot loadera, inicijalizcije, init procesa, daemona, runlevela, te dati pregled onoga što se događa od trenutka kada se računalo uključi pa do trenutka kada korisnik može koristiti aplikacije. Nadalje biti će objašnjeno kako podesiti da se sustav učitava na način na koji to korisnik želi.

Opišimo sada ukratko sam proces inicijalizacije. Možemo ga podijeliti u nekoliko osnovnih faza:

1. BIOS faza: BIOS (eng. Basic Input Output System) provjerava sustav (POST system board, memoriju, tvrdi disk, CD ROM...) i pokreće prvu fazu boot loadera (u našem slučaju LILO ili GRUB)

2. Boot loader faza: faza u kojoj boot loader daje korisniku različite mogućnosti učitavanja sustava: različite jezgre, korisničke načine (eng. user mode), pa čak i različite OS-ove. Boot loader zatim pokreće slijedeći korak – učitavanje jezgre u memoriju

3. Kernel faza: jezgra je učitana u memoriju, učitavaju se neophodni moduli i mounta root particija samo za čitanje (eng. read only)

4. Init faza: init proces učitava sve servise i korisničke pakete i mounta particije koje se nalaze u /etc/fstab. Kada se izvrši, korisniku se prikaže prompt i od tog trenutka korisnik može započeti s radom.

7.1. Boot loader

Boot loader je program kojeg pokreće BIOS. Boot loader omogućava korisnicima odabir različitih inicijalizacijskih mogućnosti: pokretanje različitih ljuski, korisničkih načina (eng. user mode), a ponajprije različitih operacijskih sustava.

Poznatiji bootloaderi su: LILO (eng. LInux LOader), GRUB (eng. GRand Unified Bootloader), LOADLIN (MS-DOS boot loader), System Comander, SYSLINUX... Najčešće se koriste GRUB i LILO pa ćemo ih u nastavku podrobnije objasniti.

7.1.1. GRUB

GRUB (GRand Unified Bootloader) je napredniji boot loader od LILO-a. Dobra odlika GRUB-a je fleksibilnost. Očituje se prvenstveno u prepoznavanju datotečnog sustava i izvršnih datoteka jezgre,

65

Page 72: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

pa za njeno učitavanje nije potrebno znati fizičku lokaciju jezgre nego samo njezin logički smještaj. To znači da je za učitavanje jezgre potrebno navesti ime jezgre, uređaj i particiju na kojoj se nalazi (root particija).

GRUB nudi dva načina izbora sustava. Prvi način je preko komandne linije. To znači da korisnik mora sam unijeti logički smještaj jezgre. Drugi način je izborničko sučelje u kojem se odabire jedna od navedenih slika. Izbornik je kreiran prema konfiguracijskoj datoteci koju ćemo objasniti u nastavku.

Instalacija:

Da bi instalirali GRUB potrebno je instalirati GRUB sustav i uslužne programe na Unixoidni operacijski sustav. To je moguće učiniti peko source tarball-a (arhiva datoteka kreirana s UNIX tar programom npr. grub-1.90.tar.gz) ili iz paketa koji se nalazi u samoj distribuciji (npr. grub-i386.rpm). Nakon toga potrebno je instalirati boot loader na uređaj (floppy ili tvrdi disk). Postoje dva načina na koje se to može napraviti. Jedan od njih je korištenje uslužnog programa grub-install ako instalirate iz Linux-a, a drugi je pokretanje GRUB-a sa diskete. Oba načina su vrlo slična ali ponekad se može dogoditi da grub-install usmjeri na krivi disk.

Prođimo sada korake instalacije. Nakon što je kreirana boot disketa, potrebno je ponovno pokreneuti računalo pomoću diskete. Na zaslonu računala pojavit će se komandna linija. Prvo je potrebno navesti uređaj na kojem se nalazi root koji sadrži boot direktorij.

grub> root (hd0,0)

Ako niste sigurni na kojoj se particiji nalazi boot direktorij koristite naredbu find na sljedeći način:

grub> find /boot/grub/stage1

Naredba find traži lokaciju na kojoj se nalazi zadana datoteka i ispisuje je. Nakon što je podešen boot uređaj potrebno je unijeti naredbu:

setup grub> setup (hd0)

koja će instalirati GRUB u MBR. Ako pak želite staviti GRU u neki drugi boot sektor particije, a ne u MBR potrebno je to naznačiti sa naredbom:

grub> setup (hd0,0)

Ako je odabrana ova mogućnost potrebno je GRUB pokrenuti nekim drugi boot loaderom. Kada se izvrši naredba setup moguće je pokrenuti GRUB bez floppy diska.

Slijedi opis GRUB konfiguracijske datoteke. Da bi shvatili način na koji GRU učitava jezgru promotrimo redak po redak njegovu konfiguracijsku datoteku

# Boot automatically after 30 secs.Timeout 30

GRUB će se pokretati automatski nakon 30 sekundi, osim ako učitavanje ne bude prekinuto unosom sa tipkovnice

# By default, boot the first entry.Default 0

prvi ulaz (primjetite da brojanje počinje s nulom a ne jedinicom) je standardni.

66

Page 73: Marko Salkic - Linux - Napredni Tecaj

7. Inicijalizacija sustava

# Fallback to the second entry.Fallback 1

Ako iz bilo kojeg razloga standardni ulaz ne radi, prijeći će na sljedeći.

# For booting GNU/Hurdtitle GNU/Hurdroot (hd0,0)kernel /boot/gnumach.gz root=hd0s1module /boot/serverboot.gz

# For booting GNU/Linuxtitle GNU/Linuxroot (hd1,0)kernel /vmlinuz root=/dev/hdb1#initrd /initrd.img

Navedeni su primjeri definiranja inicializacijskih opcija različitih operacijskih suatava. Na početku je navedeno ime- title sustava/imagea. Prema imenima kreira se izborni meni koji se je prikazan pri inicializaciji sustava.

Iz ostalih parametara možemo saznati da se GNU/Hurd pokreće sa prvog tvrdog diska, a GNU/Linux sa drugog.

# For booting GNU/kFreeBSDtitle GNU/kFreeBSDroot (hd0,2,a)kernel /boot/loader.gz

# For booting GNU/kNetBSDtitle GNU/kNetBSDroot (hd0,2,a)kernel --type=netbsd /boot/knetbsd.gz

# For booting Mach (getting kernel from floppy)title Utah Mach4 multibootroot (hd0,2)pause Insert the diskette now!!kernel (fd0)/boot/kernel root=hd0s3module (fd0)/boot/bootstrap

Mach jezgra se pokreće sa diskete, a root datotečni sustav se nalazi na hd0s3

67

Page 74: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

# For booting FreeBSDtitle FreeBSDroot (hd0,2,a)kernel /boot/loader

# For booting NetBSDtitle NetBSDroot (hd0,2,a)kernel --type=netbsd /netbsd

# For booting OpenBSDtitle OpenBSDroot (hd0,2,a)kernel --type=netbsd /bsd

# For booting OS/2title OS/2root (hd0,1)makeactive# chainload OS/2 bootloader from the first sectorchainloader +1# This is similar to "chainload", but loads a specific file#chainloader /boot/chain.os2Učitava OS/2 koristeći ulančano lodanje # For booting Windows NT or Windows95title Windows NT / Windows 95 boot menurootnoverify (hd0,0)makeactivechainloader +1# For loading DOS if Windows NT is installed# chainload /bootsect.dos

# For installing GRUB into the hard disktitle Install GRUB into the hard diskroot (hd0,0)setup (hd0)

Ovo će (re)instalirati GRUB na hard disk

# Change the colors.title Change the colorscolor light-green/brown blink-red/blue

Zadaci:

1. instalirati GRU boot loader u MBR, podesiti ga da ispravno pokreće inicijalizaciju sustava te zada jezgri neki parametar (npr. quiet)

2. u izbornik GRU boot loadera dodati opciju za pokretanje sustava u init 1 modu, te odrediti timeout na 10 sekundi.

7.1.2. LILO

LILO je jedan od najčešće korištenih Linux boot loadera. Ne ovisi o točno određenom datotečnom sustavu (enf. filesystem), može pokretati slike jezgre (eng. kernel image) sa diskete, tvrdog diska i može služiti čak i kao boot loader drugim operacijskim sustavima (PC/MS-DOS, DR DOS, OS/2, Windows 95, Windows NT, 386BSD, SCO UNIX, Unixware)

U boot izborniku može imati 1 - 16 različitih slika. Različiti parametri kao što su korijenski uređaj (eng. root device) mogu biti neovisni za pojedinu jezgru. LILO se može koristiti čak i kao MBR (eng. Master boot record).

LILO se sastoji od nekoliko programa i datoteka:

68

Page 75: Marko Salkic - Linux - Napredni Tecaj

7. Inicijalizacija sustava

Map instaler- program unutar Linuxa koji sve datoteke vezane za LILO stavlja na određeno mjesto i koji dobavlja informacije o lokaciji podataka koji su potrebni u procesu inicijalizacije. Najčešće se nalazi u /sbin/lilo. Mora se pokrenuti kada god se nešto promijeni na sustavu, a kada LILO mora imati spoznaje o tome (pr. instaliranje novog kernela).

Različite datoteke sadrže podatke koje su potrebne LILO-u u procesu inicijalizacije. Te datoteke se nalaze u /boot direktoriju. Najvažnije datoteke su sami boot loader i map file (/boot/map). U /boot/map map instaler sprema lokaciju jezgre. Još jedna važna datoteka je konfiguracijska datoteka /etc/lilo.conf koju ćemo kasnije detaljnije opisati.

U nastavku slijedi primjer onoga sto se nalazi u /boot:

# ls -latotal 5808drwxr-xr-x 3 root root 4096 Oct 21 18:23 .drwxr-xr-x 25 root root 4096 Oct 9 12:43 ..-rw-r--r-- 1 root root 539139 Sep 3 2004 System.map-2.4.27-1-386-rw-r--r-- 1 root root 512 Apr 6 2005 boot.0300-rw-r--r-- 1 root root 308326 Apr 5 2005 coffee.bmp-rw-r--r-- 1 root root 44680 Sep 3 2004 config-2.4.27-1-386lrwxrwxrwx 1 root root 15 Apr 5 2005 debian.bmp -> /boot/sarge.bmp-rw-r--r-- 1 root root 153720 Apr 5 2005 debianlilo.bmpdrwxr-xr-x 2 root root 4096 Apr 5 2005 grub-rw-r--r-- 1 root root 3878912 Apr 5 2005 initrd.img-2.4.27-1-386-rw------- 1 root root 109056 Oct 21 18:23 map-rw-r--r-- 1 root root 23662 Apr 5 2005 sarge.bmp-rw-r--r-- 1 root root 24116 Apr 5 2005 sid.bmp-rw-r--r-- 1 root root 812691 Sep 3 2004 vmlinuz-2.4.27-1-386#

Boot loader je dio LILO-a kojeg pokreće BIOS i koji pokreće kernel ili boot sector drugog operacijskog sustava. LILO ne može pročitati o kojem se datotečnom sustavu radi. Pronalaženje lokacije obavlja Map installer koji dobavlja od jezgre fizičku lokaciju datoteke slike i sprema tu informaciju. Ovdje treba obratiti pažnju na to da se radi o fizičkoj lokaciji na disku koja je potrebna LILO-u da bi mogao učitati sustav. To može biti prednost jer omogućava rad s većinom file sistema koji podržavaju Linux.

Vrlo je važno znati na kojim adresama se LILO smije nalaziti:

● boot sector na Linux floppy disku. (npr. /dev/fd0)

● MBR-u prvog tvrdog diska. (npr /dev/hda ili /dev/sda)

● boot sektor - primarne Linux particije prvog tvdog diska. (npr. /dev/hda1)

● particijski boot sektor proširene particije prvog tvrdog diska (npr. /dev/hda)

Ne može se nalaziti na sljedećim lokacijama

● boot sektor na floppy disku koji nije Linux bootabilan ili istoj takvoj primarnoj particiji.

● na Linux swap particiji.boot sektoru logičke particije koja se nalazi unutar proširene pariticije.

● na drugom tvrdom disku (osim za backup instalacije ako je potrebno izbrisati trenutni primarni disk, ili ako se na primarnom disku nalazi neki drugi bootloader.)

Objasnimo sada ukratko proces pokretanja pomoću LILO-a. Nakon što je korisnik uključio računalo, firmware (softver ugrađen u sklopovlje od strane proizvođača hardvera) učitava LILO boot sektor i izvršava ga. LILO zatim učitava map datoteku koristeći BIOS pozive, pronalazi lokaciju boot poruke koja se ispisuje u konzoli. Nakon toga slijedi odabir jezgre koja će se učitati (ako postoji više njih). LILO dalje učitava jezgru koristeći BIOS. Zadnji korak je pokretanje jezgre, indicirajući gdje se nalazi root datotečni sustav i inicijalni RAM disk.

69

Page 76: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

Da bi bolje proučili što se dogadja s računalom za vrijeme inicijalizacije koristimo naredbu dmesg. Sam ispis naredbe nećemo ovdje navesti u cjelini jer je prevelik, ali možete se time sami dodatno zabaviti. Više o samoj naredbi moguće je saznati u odgovarajućoj manual stranici dmesg(8).

Faze u instaIaciji LILO-a:

● pokretanje Linuxa

● pravljenje backupa MBR-a (dd if=/dev/hda of=/fd/MBR bs=512 count=1)

● instalacija LILO-a kao MBR-a

● ponovno pokretanje sustava

Faze u deinstalaciji LILO-a

● pokretanje Linuxa

● vraćanje starog MBR-a (dd if=/fd/MBR of=/dev/hda bs=446 count=1)

● ponovno pokretanje sutava

Različite mogućnosti korištenja LILO-a omogućuje naredba lilo koja može imati uz sebe različite parametre od kojih ćemo navesti neke:

-b bootdev određuje uređaj sa kojeg će se pokretati. Kada ste instalirali LILO naredba -b /dev/hda označava MBR

-d delay određuje čekanje u desetinkama sekunde prije automatskog učitavanja prve podešene (default) slike

-f disk-tab određuje datoteku u kojoj se nalaze parametri geometrije diska /etc/disk-tab

-i boot-loader određuje datoteku koja će se koristiti kao novi bootloader /boot/boot.b.

-m map-file koristi točno određeni map file umjesto uobičajenog

-M master-device [mbr|ext] instalirati će MBR na uređaj koji se naziva Master device.

Slijedi primjer konfiguracijske datoteke programa LILO:

lba32boot=/dev/hdainstall=/boot/boot-menu.bmap=/boot/maptimeout=30vga=normaldefault=linux

image=/boot/vmlinuz-2.4.27-1-386 label=linux initrd=/boot/initrd.img-2.4.27-1-386 root=/dev/hda1 read-only

image=/boot/vmlinuz-2.4.27-1-386 label=linux-recovery initrd=/boot/initrd.img-2.4.27-1-386 root=/dev/hda1 read-only append="single"

U prvom dijelu LILO konfiguracijske datoteke saznajemo osnovne informacije o načinu na koji se učitava sustav. U parametru boot navedeno je ime uređaja koji sadrži boot sektor (u ovom slučaju

70

Page 77: Marko Salkic - Linux - Napredni Tecaj

7. Inicijalizacija sustava

tvrdi disk). Ako je ime izostavljeno boot sector se učitava s uređaja koji je mountan kao korijenski uređaj. Boot sektor može biti smješten na Linux floppy disku (/dev/fd0), na MBR-u tvrdog diska (/dev/hda), boot sektoru prve primarne particije na kojoj je Linux (/dev/hda1 ), a ne može biti smješten na floppy disku ili primarnoj particiji na kojoj se ne nalazi Linux, na Linux swap particiji, na drugom tvrdom disku (osim za backup instalacije)

Parametar install postavlja korisničko sučelje koje će biti prikazano prilikom podizanja sustava. Moguće su tri opcije (text, menu ili bmp), uobičajni je menu (tekstualni meni s boot izbornikom). Map određuje lokaciju map datoteke, ako je opcija map izostavljena lokacija će biti /boot/map. Timeout postavlja čekanje u desetinkama sekunde. Timeout je vrijeme u kojem korisnik preko tipkovnice može unijeti podatke prije nego se sustav počne podizati. Ako korisnik ne pritisne odgovarajuću tipku uobičajena slika će se početi pokretati. U ovom slučaju je uobičajeni sustav koji se pokreće Linux

U drugom dijelu konfiguracijske datoteke navedeni su imagei koji se pokreću. Kod nas je to image:

image=/boot/vmlinuz-2.4.27-1-386.

U parametru label navedena su imena slika bez njihove staze prema kojem se identificira slika. Ta će imena biti prikazana tijekom podizanja sutava, točnije biti će prikazana u onome trenutku kada se korisniku ponudi odabir sustava koji treba podići.

Zadaci za vježbu:

1. instalirati lilo boot loader u MBR, podesiti ga da ispravno pokreće inicijalizaciju sustava te zada jezgri neki jednostavan parametar (npr framebuffer mod preko opcije VGA).

2. u lilo izborni dodati opciju za pokretanje sustava u init 1 modu, te odrediti timeout na 5 sekundi.

7.2. runlevel

Da bi shvatili koncepciju kako se izvršavaju procesi i kako se oni kontroliraju vrlo je važno razumijeti koncepciju runlevela. Runlevel je broj koji nam govori u kojem se stanju nalazi sustav. Postoji 7 različitih runlevela: (0 -6) + alias runlevel “s”/ “S”. U danoj tablici navedeni su runleveli i u kojem se direktoriju nalaze.

Runlevel rc.d direktorij Opis

0 /etc/rc.d/rc0.d Gašenje sistema

1/etc/rc.d/rc1.d Single user mode- ne konfigurira mrežno sučelje i ne

pokreće daemone

2 /etc/rc.d/rc2.d neiskorišteno(korisnik moze sam definirati)

3/etc/rc.d/rc3.d Full mult-user mode- pokreće sustav na način na koji

smo navikli

4 /etc/rc.d/rc4.d neiskorišteno

5 /etc/rc.d/rc.5.d Full muti-user mode

6 /etc/rc.d/rc.6.d RebootUzmimo na primjer da je podešen runlevel 5. Sve naredbe u datoteci /etc/inittab koji sadrže 5 bit će izvršene. Runlevel je koristan način grupiranja naredbi u /etc/inittab datoteci.

71

Page 78: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

Ako pogledamo možemo vidjeti da runleve l izvršava samo minimalne konfiguracijske skripte, runlevel 2 sve skripte u runlevel 1 i jos dodatno mrežne skripte, itd.

Kada se sustav pokreće, pokreće se i defaultni runlevel. Najveći dio vremena koristi se višekorisnički način – korisnici se mogu logirati. Osim njega postoji poseban način koji se zove single user mode koji se pokreće bez prompta za logiranje. U single user načinu ste odmah super korisnik. Ponekad ćete morati raditi u single user modu za vrijeme instalacije ako nešto pođe po krivu ili kod preopterećenja datotečnog sustava. Pod single user modom je sustav praktički beskoristan, sadrži najmanju potrebnu konfiguraciju i datotečni sustavi nisu mountani.

Nakon što je jezgra Linuxa učitana init čita /etc/inittab datoteku da bi sazna ponašanje svakog pojedinog runlevela. Ako korisnik ne odredi drugu vrijednost kao parametar jezgri, pokrenut će se defaultni runlevel.

Kada su driveri uređaja inicijalizirani, jezgra izvršava program init. Init je program koji stvara nove procese. Pojasnimo to na primjeru virtualnih konzola. Svaka konzola ima getty proces kojeg je pokrenuo init. Nakon što se korisnik logirao getty proces je zamijenjen nekim drugim, a nakon odlogiranja, init ponovno pokreće novi getty proces i omogućava ponovno logiranje.

Init je odgovoran za pokretanje i izvršavanje programa i skripti dok se sistem pokreće. Sve što init radi kontrolira datoteka /etc/inittab, no prije njenog opisa objasnimo najprije koncept rc-datoteka.

Linux sprema startup naredbe u direktorije s imenima koji sadrže rc u sebi. Komande izvršavaju sve što je potrebno za potpuno funkcionalan sistem (pokretanje servera, daemona). Zahvaljujući tim naredbama moguće je korisitit sustav u potpunosti (logiranje, mail, web serveri,...).

Za svaki pojedini runlevel postoje /etc/rc.d/rcN.d gdje je N runlevel koji je pokrenut. Uzmimo na primjer /etc/rc5.d/ i pogledamo što se u njemu nalazi. Ispisat će nam se nekoliko imena datoteke od kojih neke počinju sa Snnxxxx, a neke Kssxxxx. One koje počinju sa “K” izvršavaju se u /etc/rc.d/rc prvo da bi se ubili postojeći servis, a skripte koje počinju sa “S” da bi pokrenuli novi servis.

Skripte sa manjim brojevima izvršavaju se prije skripti s većim brojevima (nn). xxxx je ime koje pomaže krajnjem korisniku da bi znao o kojoj se skripti radi. Poznavanje lokacije skripti za pokretanje i gašenje vrlo je korisno u slučaju ako ne želite u potpunosti rebootati sustav ili cijeli runlevel, a trebate pokrenuti neki servis. To možete napraviti tako da pogledate u /etc/init.d direktoriju skriptu i pokrenite je koristeći parametre start, stop, restart. (npr /etc/init.d/apache2_default start )

$ ls /etc/rc5.d/K01yum K35winbind K86nfslock S26apmdK02cups-config-daemon K50netdump K87portmap S28autofsK02NetworkManager K50xinetd K89netplugd S40smartdK03rhnsd K61ldap K90bluetooth S44acpidK05saslauthd K66mDNSResponder K91isdn S55sshdK10cups K67nifd K94diskdump S85gpmK10lircd K68rpcidmapd K95kudzu S90crondK10psacct K69rpcgssd K96pcmcia S90xfsK20nfs K69rpcsvcgssd K99microcode_ctl S95anacronK24irda K73ypbind S04readahead_early S95atd...

Init je proces koji upravlja svim drugim procesima. Pokreće programe i skripte prilikom inicijalizacije. Sve što se odvija kontrolira se preko /etc/inittab datoteke. To je datoteka koja opisuje koji se procesi pokreću na početku inicijalizacije i tijekom cijelog procesa. (npr. /etc/init.d/boot, /etc/init.d/rc, gettys...).

Promotrimo sada datoteku /etc/inittab – to je skripta koja sadrži komande koje održavaju osnovnu inicializaciju (omogućavaju swaping, provjereavaju filsisteme i mounta ih, sinkronizira sistemski sat,..)

72

Page 79: Marko Salkic - Linux - Napredni Tecaj

7. Inicijalizacija sustava

Vidimo da su naredbe odvojene znakom “/ ”. prvo polje je “arbitary identifier”, drugo koji je runlevel potreban da bi se komanda izvršila, treći govori initu kako da se ponaša prema zadanoj naredbi (npr. kako i gdje se treba izvršiti).

Primjetimo da sistem izvršava /etc/rc.d/rc skriptu kada se pokreće bilo koji od 6 runlevela . To je generička skripta koja izvršava sve ostale skripte odgovarajuće za određene runlevele.

# /etc/inittab: init(8) configuration.# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $

# The default runlevel.id:2:initdefault:

Postavljen je runlevel na defaultni

# Boot-time system configuration/initialization script.# This is run first except when booting in emergency (-b) mode.si::sysinit:/etc/init.d/rcS

# What to do in single-user mode.~~:S:wait:/sbin/sulogin

Wait govori initu da pričeka dok se ne obavi jedan proces prije nego nastavi s nekim drugim.

73

Page 80: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

# /etc/init.d executes the S and K scripts upon change# of runlevel.## Runlevel 0 is halt.# Runlevel 1 is single-user.# Runlevels 2-5 are multi-user.# Runlevel 6 is reboot.

l0:0:wait:/etc/init.d/rc 0l1:1:wait:/etc/init.d/rc 1l2:2:wait:/etc/init.d/rc 2l3:3:wait:/etc/init.d/rc 3l4:4:wait:/etc/init.d/rc 4l5:5:wait:/etc/init.d/rc 5l6:6:wait:/etc/init.d/rc 6# Normally not reached, but fallthrough in case of emergency.z6:6:respawn:/sbin/sulogin

# What to do when CTRL-ALT-DEL is pressed.ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

# Action on special keypress (ALT-UpArrow).#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let thiswork."

# What to do when the power fails/returns.pf::powerwait:/etc/init.d/powerfail startpn::powerfailnow:/etc/init.d/powerfail nowpo::powerokwait:/etc/init.d/powerfail stop

# /sbin/getty invocations for the runlevels.## The "id" field MUST be the same as the last# characters of the device (after "tty").## Format:# <id>:<runlevels>:<action>:<process>## Note that on most Debian systems tty7 is used by the X Window System,# so if you want to add more getty's go ahead but skip tty7 if you run X.#1:2345:respawn:/sbin/getty 38400 tty12:23:respawn:/sbin/getty 38400 tty23:23:respawn:/sbin/getty 38400 tty34:23:respawn:/sbin/getty 38400 tty45:23:respawn:/sbin/getty 38400 tty56:23:respawn:/sbin/getty 38400 tty6

# Example how to put a getty on a serial line (for a terminal)##T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100

# Example how to put a getty on a modem line.##T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3

Zadatak: odrediti u kojem se runlevelu trenutno nalazimo

Na kraju inittab datoteka sadrži naredbu koja izvršava /sbin/mgetty za prvih 6 virtualnih konzola. Mgetty je samo jedna od getty varijanti. Oni učitavaju terminalski uređaj, postavljaju paramete i izvršavaju /sbin/login da bi se mogli logirati. Akcija respawn znači da će init restartati komandu svaki put kada mgetty umre (svaki puta kada se korisnik odlogira).

Runlevel u kojem se trenutno nalazimo saznat ćemo naredbom runlevel ili naredbom who -r

74

Page 81: Marko Salkic - Linux - Napredni Tecaj

7. Inicijalizacija sustava

djuro:/# runlevelN 2$ who rrunlevel 5  Nov 14 11:14                   last=S

Naredbom runlevel ispisuje se prijašnji runlevel i trenutni runlevel. Ako ne postoji prijašnji runlevel ispisat ce oznaku N. Dakle, trenutno se nalazimo u 2 runlevelu,a prijašnjeg runlevela nema.(napomena: korisnik se mora logirati kao root - super korisnik)Zadaci:

1. prebaciti se u runlevel 1, te provjeriti koji su servisi na sustavu aktivni. Nakon toga se ponovno prebaciti u runlevel u kojem smo bili.

2. restartati sustav prebacivanjem u primjereni runlevela, primjerenom naredbom.

7.3. daemoni

– sto su, zasto

– pokretanje, zaustavljanje, reload

– stanje daemona

– shutdown daemona

– zadatak: provjeriti stanje ??? daemona

– zadatak: ugasiti ??? daemon

– zadatak: pokrenuti ??? daemon

– sto se desava kada pokrenemo /sbin/halt – pocinje runlevel 0, gasivanje daemona

75

Page 82: Marko Salkic - Linux - Napredni Tecaj

8. Instalacija GNU/Linux sustavaU ovom poglavlju ćemo se pozabaviti načinom instaliranja Linux operacijskog sustava na računalo. Na početku će biti dane kratke zajedničke upute koje vrijede za sve distribucije, a nakon toga ćemo opisati neke specifičnosti distribucija Fedora Core (http://fedora.redhat.com) i Debian (http://www.debian.org).

Za početak, treba naglasiti da na jednom računalu može biti instalirano jako puno operacijskih sustava. Ipak, u jednom trenutku može biti pokrenut samo jedan od njih.

Kako je već ranije opisano, tvrdi disk se dijeli u particije. Najčešće svaki operacijski sustav instaliran na jednom računalu zahtjeva najmanje jednu particiju tvrdog diska. Zapravo, particije možemo shvaćati kao dodatne diskovne pogone na kojima je instaliran po jedan operativni sustav. Prilikom podizanja računala, putem nekog specijaliziranog programa, trebat ćemo odabrati koji operacijski sustav želimo pokrenuti. Takav program se zove boot loader.

Prije pokretanja same instalacijske procedure potrebno je razmisliti o particijama na tvrdom disku. Ako na istom računalu želimo imati još operacijskih sustava, njih je potrebno instalirati prije instalacije Linux sustava. Općenito, pravilo je da se Linux, ako je to moguće, instalira zadnji. Na taj način će se izbjeći kasniji problemi (brisanje MBRa sa tvrdog diska). Ako se to ne napravi na taj način, biti će potrebno ponovno pokrenuti dio instalacijske procedure Linux operacijskog sustava. Ovo vrijedi ukoliko želimo kao boot loader koristiti programe koji dolaze zajedno sa Linux distribucijom (to se najčešće i koristi). Prilikom instalacije prethodnih operacijskih sustava, treba paziti da dio prostora na tvrdom disku, koji želimo dati Linuxu, ne bude alociran, odnosno da ne bude sadržan niti u jednoj particiji. Ako trenutno imate tvrdi disk koji je u cijelosti particioniran, a ipak želite instalirati još jedan operacijski sustav biti će potrebno trenutnu particiju smanjiti. Postoji nekoliko programa koji to rade bez gubitka podataka. Najpoznatiji komercijalni program za tu svrhu je PowerQuest PartitionMagic, a slobodni fips.

Sada je vrijeme za pokretanje instalacijske procedure Linux operacijskog sustava. Instalacija se najčešće pokreće tako da se operacijski sustav podigne sa CD medija na kojem se nalaze instalacijske datoteke. Prije toga je potrebno konfigurirati računalo da podigne operacijski sustav sa CD medija. Kod većine novijih distribucija instalacija se provodi u grafičkom sučelju te je sam postupak instalacije prilično user friendly. Nekada to nije bilo tako, a tada je instalacija Linuxa spadala u područje “crne magije”.

Načelno, instalaciju Linuxa možemo podijeliti u slijedeće korake:

1. pokretanje instalacijske procedure,

2. prepoznavanje i konfiguracija sklopovlja,

3. particioniranje tvrdog diska,

4. odabir programa koji će se instalirati zajedno sa operacijskim sustavom,

5. konfiguracija operacijskog sustava, i

6. instalacija boot loadera.

O prvom koraku je sve već rečeno. Što se tiče prepoznavanja sklopovlja, ta se procedura obavlja više manje automatski. Najveći dio popularnog sklopovlja će nove distribucije potpuno uspješno prepoznati. Nakon uspješnog prepoznavanja npr. mrežne kartice pojavit će se prozor za upisivanje mrežnih postavki. Isto tako, nakon prepoznavanja grafičke kartice biti će potrebno odabrati rezoluciju prikaza slike.

76

Page 83: Marko Salkic - Linux - Napredni Tecaj

8. Instalacija GNU/Linux sustava

Sada je na redu particioniranje tvrdog diska. Većina instalacija nudi više programa pomoću kojih je to moguće napraviti. Najuniverzalniji program je fdisk. Potrebno je alocirati dio nealociranog prostora na tvrdom disku te napraviti najčešće dvije particije. Jednu treba spojiti na glavno (root, /) kazalo i formatirati je u datotečni sustav ext, a drugu treba prikazati kao virtualnu memoriju (swap). Često se radi i posebna particija za /home kazalo. Treba napomenuti da se, ako na računalu imate više Linux operacijskih sustava, particija sa virtualnom memorijom može dijeliti između svih njih.

Sada je na redu odabir programa, odnosno paketa, koji će se instalirati. Paket je skupina datoteka koja je potrebna za obavljanje neke zadaće. Paketi se najčešće isporučuju u dva formata, rpm i deb formatu. RPM (eng. Redhat Package Manager) se koristi na Redhat i Fedora Core distribuciji i svim onima koji su nastali iz tih distribucija. DEB se koristi na Debian distrubiji. Novije distribucije imaju mogućnost da se umjesto točno određenih paketa odabiru aplikacije koje se žele instalirati, što dodatno olakšava postupak instalacije. Većina instalacijskih procedura podržava instaliranje paketa sa lokalnog CD čitača, mreže, FTPa i slično.

Prilikom konfiguracije operacijskog sustava postavljaju se pitanja tipa koja je vremenska zona, koji se jezik koristi, koji je raspored tipki na tipkovnici, kakav je miš i slično. Potrebno je upisati i lozinku za korisnika root.

Na kraju instalacije se obavlja postavljanje boot loadera pomoću kojeg ćemo birati koji operacijski sustav želimo podignuti. Najpoznatiji su LILO (eng. Linux Loader) i GRUB. Potrebno je definirati sve operacijske sustave na računalu i na kojim se particijama oni nalaze. Boot loader se sprema u MBR (eng. main boot record) tvrdog diska. Na taj način, prilikom podizanja računala pojavit će se odabir željenog operacijskog sustava.

Time proces instalacije završava. Treba napomenuti da se sve konfiguracije i instalacije paketa mogu napraviti i nakon instalacije, ali je to ponekad malo teže.

Novije distribucije imaju mogućnost popravljanja neuspješnih instalacija i slično, ali to ovdje neće biti detaljno opisano.

8.1. Fedora Core

Instalacija ove distribucije se najčešće isporučuje na četiri CD medija ili jednom DVD mediju. Moguće ih je slobodno skinuti u ISO formatu sa Interneta.

Instalacija se pokreće na standardan način. Prvi dio instalacije je u tekstualnom sučelju. Nudi se mogućnost ubacivanja dodatnih medija za upravljačke programe za uređaje i mogućnost testiranja

77

Slika 8.1: Početak instalacije

Page 84: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

instalacijskih medija. Nakon prepoznavanja sklopovlja, instalacija se prebacuje u grafičko sučelje. Instalacijski program se zove anaconda. Nakon pozdravnog zaslona u grafičkom sučelju, treba odabrati jezik i vrstu tipkovnice i miša. Nakon toga slijedi općenita konfiguracija mreže, grafike, lozinke za glavnog korisnika i slično.

Sada je na redu particioniranje tvrdog diska. Na raspolaganju su dva programa, DiskDruid i fdisk. DiskDruid se pokreće u grafičkom sučelju i vrlo je jednostavan za korištenje, dok se fdisk pokreće u tekstualnom načinu i preporučuje se proučavanje dokumentacije za bilo kakav rad s njim. Postoji i mogućnost automatskog particioniranja tvrdog diska ali to nije preporučljivo. Fedora Core zahtjeva najmanje tri particije: jednu podatkovnu za / kazalo, jednu podatkovnu za /boot kazalo i jednu swap particiju za virtualnu memoriju.

Sada je na redu obabir aplikacija koje želimo instalirati. U najnovijoj inačici, više nije moguće birati direktno pakete, nego samo koje aplikacije će biti instalirane. Također postoje i tri instalacijska tipa sa već definiranim aplikacijama za instalaciju (ukoliko ne želimo sve birati ručno). To su Personal Dekstop (kućno računalo), Workstation (radna stanica; alati za razvoj softvera i sistemsku administraciju) i Server (poslužitelj). Custom tip omogućuje pojedinačan odabir aplikacija. Unutar Custom tipa može se odabrati minimalna instalacija koja je pogodna npr. vatrozide. Nakon odabira slijedi proces snimanja potrebnih datoteka, koji može trajati dosta dugo, ovisno o broju odabranih aplikacija. Treba napomenuti da se do ovoga trenutka, kada počinje proces instalacije paketa, instalacijska procedura može bez problema prekinuti tipkama Ctrl+Alt+Del ili ručnim resetiranjem/gašenjem računala.

78

Slika 8.2: DiskDruid

Slika 8.3: Instalacijski tipovi

Page 85: Marko Salkic - Linux - Napredni Tecaj

8. Instalacija GNU/Linux sustava

Na samom kraju instalacije ostaje instalacija boot loadera. Fedora Core koristi GRUB kao podrazumijevani boot loader. Fedora Core automatski konfigurira GRUB za rad sa svim pronađenim operacijskim sustavima na računalu. Ovo se može i ručno uraditi ukoliko kasnije instaliramo neki novi operacijski sustav ili neki postojeći maknemo sa računala.

Nakon instalacije GRUB boot loadera dobije se izvješće instalacije te se omogućuje zadnje konfiguriranje sklopovlja i ostalih postavki prije završetka instalacijskog postupka. Kako se iz navedenoga može zaključiti, instalacija ove distribucije je vrlo jednostavna i za početnike u Linux operacijskom sustavu.

8.2. Debian

Instalaciju ove distribucije moguće je obaviti na nekoliko načina, no u nastavku će biti opisana instalacija pomoću seta instalacijskih CD ili DVD medija.

Debian GNU/Linux 3.1 (sarge) distribucija se standardno nalazi na 15 CD ili 2 DVD medija sa preko 15000 različitih paketa. Za baznu instalaciju sustava potreban je samo prvi CD ili DVD medij. Softverski paketi su na medije arhivirani prioritetnim poretkom stoga je za standardnu instalaciju dovoljno samo prvih četiri CD medija, odnosno prvi DVD medij.

Instalaciju je potrebno započeti ubacivanjem prvog instalacijskog medija u CD ili DVD uređaj računala te postaviti BIOS računala da inicijalizaciju računala pokreće sa tog uređaja. Nakon inicijalizacije sustava koji se nalazi na mediju pokreće se instalacijska procedura - “Debian installer”.

Debian instalacijska procedura se sastoji od nekoliko komponenata koje zajedno čine instalaciju Debian GNU/Linux sustava:

– prvi stupanj instalacije (instalacije baznog sustava)

– podešavanje lokalnih postavki sustava i konfiguracije sklopovlja

– particioniranje diska i određivanje točaka montiranja particija

– instalacija baznog Debian GNU/Linux sustava

– instalacija boot loadera

– drugi stupanj instalacije

79

Slika 8.4: Početak instalacije

Page 86: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

Svaka komponenta instalacijske procedure komunicira sa osobom koja vrši instalaciju putem interaktivnih izbornika i polja u koje je potrebno unositi neke informacije. Nakon završetka rada pojedine komponente instalacijska procedura automatski pokreće slijedeću komponentu instalacije sustava. Ukoliko se u bilo kojoj fazi instalacije odabere “otkaz”, instalacijska procedura pokazuje interaktivni izbornik iz kojega se može ručno vratiti na pojedinu komponentu instalacije ili jednostavno otkazati instalaciju. U prvi stupanj instalacije nije moguć povratak iz drugog bez ponovne instalacije baznog sustava.

8.2.1. Podešavanje lokalnih postavki sustava i konfiguracije sklopovlja

Instalacijska procedura će prvo postaviti nekoliko pitanja vezanih uz jezike, lokaciju na kojoj živimo i raspored tipkovnice te nekoliko pitanja vezana uz sklopovlje kako bi postavila ispravan rad računala i omogućila nastavak postupka instalacije.

Prvo je potrebno odabrati jezik instalacijske procedure. Nakon toga regiju u kojoj živimo, isključivo iz razloga kako bi instalacijska procedura automatski mogla prilagoditi pojedine postavke sustava toj regiji. Slijedeće što je potrebno odabrati je raspored tipki na tipkovnici. Nakon toga procedura vrši automatsku detekciju sklopovlja u računalu te nakon toga treba odgovoriti na nekoliko pitanja vezanih uz sklopovlje računala (podešavanje mrežne kartice te mrežnih parametara (hostname, domain name), itd.).

8.2.2. Particioniranje diska i određivanje točaka montiranja particija

Minimalna konfiguracija zahtjeva 2 particije – jednu podatkovnu (točka montiranja je kazalo /) i jednu swap particiju. Particioniranje diska i određivanje točaka montiranja je moguće na dva načina: ručno ili automatski. Ukoliko je odabran automatski način particioniranja, instalacijska procedura će automatski napraviti particije i odrediti točke montiranja. Ukoliko je odabran ručni način particioniranja i određivanja točaka montiranja, pojavljuje se interaktivni izbornik sa popisom particija i opcionalno slobodnog prostora na disku. Iz tog izbornika moguće je brisanje i kreiranje particija, određivanje formata datotečnog sustava pojedine particije i točka montiranja pojedine particije.

Nakon odabranog željenog rasporeda particija diska, instalacijska procedura još jednom pita za odobrenje zapisivanja tih promjena na disk jer nakon zapisivanja nije moguć povratak na prijašnje stanje i gube se svi podaci sa particija na koje promjene utječu. Na slici 1.5 prikazan je primjer particioniranja tvrdog diska sa 4.7 GB prostora, pri čemu se 4.4 GB odvaja za podatkovnu particiju, a ostatak od 231.2 MB za swap particiju.

80

Slika 8.5: Particioniranje tvrdog diska

Page 87: Marko Salkic - Linux - Napredni Tecaj

8. Instalacija GNU/Linux sustava

8.2.3. Instalacija baznog Debian GNU/Linux sustava

Prilikom instalacije baznog Debian GNU/Linux sustava nema interakcije sa osobom koja vrši instalaciju sustava te se ona vrši automatski, raspakiravanjem arhiva sa instalacijskog medija i kopiranjem njihovog sadržaja na disk računala.

8.2.4. Instalacija boot loadera

Nakon sto je instaliran bazni sustav, instalacijska procedura traži ima li već instaliranih boot loadera drugih sustava u MBR-u tvrdog diska, te ovisno o tome nudi instalaciju GRUB boot loadera u MBR ili na lokalnu particiju diska.

Nakon uspješne instalacije boot loadera, bazni sustav je spreman za inicijalizaciju te nastavak instalacije potrebne programske podrške, ovisno o namjeni računala. Potrebno je izvaditi instalacijski medij iz CD ili DVD uređaja te odabrati ponovno pokretanje, sada baznog Debian GNU/Linux sustava.

8.2.5. Drugi stupanj instalacije

Drugi stupanj instalacije nastavlja se nakon uspješne inicijalizacije Debian GNU/Linux baznog sustava. Instalacijska procedura prvo postavlja nekoliko pitanja vezana uz lokalno vrijeme i vremensku zonu. Nakon toga procedura inicijalizira lozinku korisnika root te stvara profil korisnika koji će koristiti računalo. Slijedeće što treba odabrati je izvor paketa kojeg će koristiti APT sustav (ovo je sustav koji Debian koristi za rukovanje i instalaciju softvera). U slučaju instalacije pomoću seta CD ili DVD medija, potrebno je odabrati “cdrom” (za npr. net instalaciju odabere “http”). Nakon toga je potrebno upisati koji uređaj će se koristiti prilikom pristupa izvoru arhive paketa. Zatim treba, na zahtjev procedure, stavljati jedan za drugim instalacijske medije u uređaj da bi procedura stvorila bazu dostupnih Debian paketa na disku računala.

Nakon što je stvorena baza dostupnih instalacisjkih paketa, instalacijska procedura nudi ručni izbor paketa i nekoliko predefiniranih kolekcija softvera koje je moguće odabrati (slično instalaciji Fedore). Nakon izabrane kolekcije softvera započinje instalacija dotičnih, te se kod instalacije pojedinih softverskih paketa pojavljuju interaktivni izbornici pomoću kojih se podešavaju postavke dotičnog softverskog paketa. Ponovna konfiguracija pojedinog paketa moguća je kasnije upotrebom alata “dpkg-reconfigure”. Nakon instalacije kolekcije softvera instalacija završava, te se pojavljuje login prompt, odnosno grafički pozdravni ekran ukoliko je dotični instaliran. Tada je moguće započeti rad na novo instaliranom Debian GNU/Linux sustavu.

8.3. Zadaci za vježbu

1. Instalirati operacijski sustav u zadanim uvjetima.

81

Slika 8.6: Odabir paketa za instalaciju

Page 88: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

2. Proučiti kako je nakon instalacije moguće mijenjati opcije boot loadera. Promijeniti podrazumijevani operacijski sustav i promijeniti vrijeme dozvoljeno za izbor operacijskog sustava.

3. Obrisati boot loader iz MBRa. Resetirati računalo. Popraviti učinjeno.

Literatura

1. Fawcett, Tom, The Linux Bootdisk HOWTO, v4.5, The Linux Documentation Project, January 2002.

2. Gortmaker, Paul, The Linux BootPrompt – HowTo, v1.4, The Linux Documentation Project, March, 2002.

3. Wang, Feiyun, Linux i386 Boot Code HOWTO, v1.0, The Linux Documentation Project, January, 2004.

82

Page 89: Marko Salkic - Linux - Napredni Tecaj

9. Grafičko sučelje

Konfiguracija X poslužitelja

X Windov System je norma, projekt razvijen od Konzorcija X (engl. X Consortium), a čiji je nastanak započeo nastavkom rada na sustavu prozora W (1983.god., Massachusetts Institute of Technology -MIT). To je raspodijeljeni, prozorski orijentirani sustav u kojem se korisnici usluga i poslužitelji nalaze negdje na mreži, a pritom je omogućeno da se na svakom prozoru prikazuje rezultat aplikacije s bilo kojeg stroja u mreži. Također je omogućena neovisnost operacijskih sustava i različitost arhitektura strojeva u mreži. Namijenjen je računalima s bitovno orijentiranim zaslonima (engl. bitmap displays).

Program koji kontrolira grafičko sučelje i ulazne “uređaje” (tipkovnicu, miša) naziva se X poslužitelj (engl. X server). Ostali se programi zovu korisnici ili klijenti i oni “koriste” X poslužitelj. Broj klijenata na jednom X serveru može biti jako velik. Program korisnik (klijent) se izvodi na mreži i šalje rezultate X poslužitelju (terminalu) da ih obradi i prikaže na zaslonu računala (korisnika). Dakle, sve grafičke aplikacije kao što su: internet preglednik (engl. Web browser), e-mail program, tekst editori, programi za crtanje itd., su korisnici X poslužitelja.

Skoro svaka Linux distribucija sadrži program koji se zove XFree86. To je program koji sadrži sve datoteke, biblioteke i ostalu programsku podršku potrebnu za instalaciju tj. pokretanje X poslužitelja na Unix/Linux operacijskim sustavima. Da bi se pravilno instalirao gore navedeni program, potrebno je poznavati karakteristike hardware-a računala (RAM). Također, bitne su i karakteristike tipkovnice, miša, monitora tj. da li dotične podržava program XFree86. Tako se primjerice, pri konfiguraciji X poslužitelja naredbama XF86Config ili Xconfigurator, vrsta monitora može izabrati iz ponuđene liste. Ako među ponuđenim imenima monitora na listi nema onog kojeg se traži, potrebno je poznavati karakteristike traženog monitora (rezoluciju).

Kao što je u gore navedenom tekstu spomenuto za konfiguraciju X poslužitelja se može koristiti Xconfigurator (već podržan u Red Hat distribuciji) ili xf86config . Također je omogućeno i ručno podešavanje tj. konfiguriranje X poslužitelja i to podešavanjem datoteke XF86Config (u /etc/X11). Nakon konfiguriranja, X poslužitelj se pokreće naredbom startx.

Postoji veliki broj programa koji koriste X normu tj. X Window System. Neki programi koje sadrži X Konzorcij tj. podržani su u X normi su:

xterm terminal (engl. terminal emulator)twm window managerxdm a display managerxconsole a console redirect programxmh a mail interfacebitmap a bitmap editorxfs a font server

Svaki X poslužitelj ima, zapisano u varijabli okoline DISPLAY, ime sljedećeg je oblika:

ime_stroja:broj_servera.broj_zaslona

pri čemu ime_stroja (engl. Hostname) određuje ime računala klijenta, s čijim je ekranom (monitorom) fizički povezan. Broj_servera (engl.displaynumber) se najčešće postavlja na 1, jer najčešće računala imaju samo jedan ekran, a broj_zaslona (engl. Screennumber) je broj pojedinog zaslona na ekranu (monitoru). S obzirom da na jednom monitoru može biti više zaslona, svaki zaslon dobiva svoj broj, počevši od 0. Ako nije zadan broj zaslona, koristi se zaslon s brojem 0. Pri

83

Page 90: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

pokretanju X poslužitelja ova je varijabla okoline automatski namještena (namješta ju xterm), no ukoliko ju treba mijenjati, to se radi na sljedeći način:

$ setenv DISPLAY mojwindowsystem:0

Postoje dva načina pokretanja X poslužitelja:

• xdm (the X DesktopManager)Ovaj se program pokreće zajedno sa pokretanjem cijelog operacijskog sustava (prilikom ”bootanja”). Da bi se pokrenuo xdm u datoteku /etc/inittab naredba: id:5:initdefault - što će prilikom “bootanja” operacijskog sustava pokrenuti 5. level (koji pokreće xdm). Nakon pokretanja, slijedi logiranje tj. program pita korisnika za korisničko ime (engl. login) te za lozinku (engl. password). Nakon logiranja xdm pokreće X okruženje.

• xinitXinit je naredba za pokretanje X poslužitelja iz komandne linije tj. “ručno” pokretanje iz ljuske. Pri zadavanju ove naredbe pokreće se X poslužitelj i jedan klijent – xterm.

X poslužitelj je instaliran u kazalu /usr/X11, a izlistavanjem tog kazala dobije se sljedeće:

$ lsbin games kerberos libexec sbin src X11R6etc include lib local share tmp

Pozicioniranjem u kazalo X11R6 te izlistavanjem tog kazala dobije se sljedeći ispis:

$ pwd/usr/X11R6$ lsbin include lib man share

Ulaskom u kazalo lib te izlistavanjem tog kazala dolazi se do datoteke rgb.txt, u kojoj se nalaze definicije boja. U ovu se datoteku mogu zadavati nova imena i definicije boja i na taj način se X poslužitelj prilagođava željama korisnika (podešavaju se boja pozadine itd.). Također postoji i kazalo fonts(/usr/share/fonts), u kojem se nalaze datoteke s različitim fontovima. Korisnicima je na raspolaganju i mogućnost dodavanja datoteka s novim fontovima. Dodavanje novih datoteka u kazalo s fontovima (/etc/X11/fs/config), omogućuje se s font serverima, kao što su xfstt i xfs izvodi se naredbom Xset.

9.1. 9.2 Window manageri, desktop okruženja

Window manager kontrolira prozore prikazane na zaslonu ekrana (monitora) računala. S obzirom da se na zaslonu ekrana može nalaziti više prozora, tj. prozora različitih klijenata, oni se otvaraju/zatvaraju ovisno o klijentu koji se pokreće/završava s radom. Tako je korisiku omogućeno da određuje veličinu i položaj na zaslonu pojedinog prozora te koji će se prozori prekrivati. Distribucije X Konzorcija sadrže twm window manager, ali korisnici najčešće koriste “otmjenije”, ukoliko im sustav to dopušta. Jedni od najpoznatijih window managera su Sawfish i Enlightenment. Oni korisnicima dopuštaju uređenje po njihovoj želji i ukusu.

Desktop okruženja (engl. display manager) grafički uređuju desktop ekrana računala. To podrazumijeva izbornike (engl. Menubars), padajuće izbornike (engl.drop-down menus), sat, ikone, applete itd. Jedni od najpoznatijih desktop okruženja su Gnome i KDE.

84

Page 91: Marko Salkic - Linux - Napredni Tecaj

9. Grafičko sučelje

Iz gore navedenih objašnjenja Window managera i desktop okruženja, može se zaključiti kako je window manager, samo mali dio cijelog desktop okruženja. Dokaz takvog zaključka slijedi u idućem odjeljku, u opisu instalacije desktop okruženja GNOME.

9.2. 9.2.1 Instalacija desktop okruženja GNOME

Instalacija GNOME (GNU Network Object Environment) desktop okruženja započinje instalacijom GNOME paketa u RPM formatu, naredbom (zadanom “iz root-a”):

$ rpm -Uvh gtk*.rpm *.rpm

Gornjom su se naredbom instalirale GTK biblioteke. GNOME nije Window manager, te da bi se instalirao potrebno je napraviti datoteku .xinitrc, koja “sadrži” desktop okruženje i pokreće GNOME. To će se napraviti sljedećom naredbom tj. tekstom zapisanim u prije navedenoj datoteci:

sawfish &exec gnome – session

Gornjim naredbama se Sawfish “proglašava” window managerom, a iznad toga se pokreće tj. kao desktop okruženje postavlja GNOME. Time je pokazano da je GNOME desktop okruženje, koje kao window manager koristi Sawfish.

Time je instalacija GNOME-a završena.

9.3. 9.2.2 Instalacija desktop okruženja KDE

KDE (K Desktop Package) desktop okruženje zahtijeva više memorije nego GNOME, tako da se prije instalacije tog desktop okruženja treba poznavati količina memorije i ukoliko je ona manja od ??????????instalirati neko drugo desktop okruženje.Instalacija započinje instaliranjem KDE paketa tj. arhive u kojoj su sve (KDE) RPM datoteke:

$ rpm -Uvh qt*.rpm$install-kde-1.1-base

Time se instaliraju svi qt i kde paketi. Zatim se potrebno odlogirati i ponovno ulogirati, te ukucati naredbu za instalaciju aplikacijskih programa:

$ install-kde-1.1-apps

Ostalo je još samo postaviti KDE kao “defaultni” window manager (kako se ne bi svaki put ukucavala naredba startx) – to se postavlja na sljedeći način:

/opt/kde/bin/usekde idkorisnika

Time je instalacija, a djelomično i konfiguracija KDE desktop okruženja završena.

9.4. Literatura

1. Žagar M., Unix i kako ga iskoristiti, Zagraf tisak, Zagreb 1995. god.

2. http://en.wikipedia.org/wiki/X_Window_System

3. http://tldp.org/LDP/lame/LAME/linux-admin-made-easy/index.html

85

Page 92: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

4. http://www.xfree86.org/current/X.7.html

http://www.hackinglinuxexposed.com/articles/20040513.html

http://www.hackinglinuxexposed.com/articles/20040608.html

http://www.freesoftwaremagazine.com/articles/what_is_x/

http://developer.gnome.org/feature/archive/xconcepts/x-concepts.html

http://www.ezdefinition.com/cgi-bin/showsubject.cgi?sid=901

http://necrotic.deadbeast.net/xsf/XFree86/trunk/debian/local/FAQ.xhtml

http://www.answers.com/topic/x-protocol

86

Page 93: Marko Salkic - Linux - Napredni Tecaj

10. Praćenje rada sustavaNakon što je sustav instaliran i podešen za rad potrebno ga je stalno nadgledati. Od ključne je važnosti u svakome trenutku imati uvid u točno stanje pojedinih djelova sustava kako bi se pravovremeno otkrili eventualni problemi i pogreške te na vrijeme ispravili. U nastavku su opisani alati koji omogućavaju praćenje pojedinih dijelova sustava. Za sve alate navedena je namjena, primjeri korištenja te interpretacija njihova izlaza. Potrebno je primjetiti kako točan izlaz svih tih alata ovisi o konkretnom računalu, tj. njegovoj primjeni, te ono što je kod jednoga sasvim ispravno kod drugog može značiti da nešto ne radi ispravno. Kako bi se znalo razlučiti slučajeve normalnog on neuobičajnog rada, potrebno je redovito koristiti te alate i upoznati se sa njihovim izlazima na svakom pojedinom računalu.

10.1. Praćenje sistemskih resursa

FIXME: Ovo treba ići u poglavlje o kernelu i sklopovlju!

Većina GNU/Linux alata za nadziranje sistemskih resursa čita podatke iz raznih datoteka koje se nalaze u /proc direktoriju. O sadržaju /proc direktorija brine se Linux jezgra, a važno je napomenuti kako se ovaj direktorij ne nalazi fizički na tvrdom disku nego se njegov sadržaj dinamički generira tijekom čitanja i/ili pisanja (proc filesystem). Gledajući sadržaj različitih datoteka unutar /proc direktorija može se saznati puno informacija o sustavu. Primjerice, kako bi saznali koji procesor(i) se koriste na nekom računalu možemo pogledati sadržaj datoteke /proc/cpuinfo. Na jednoprocesorskom sustavu, s AMD procesorom, dobili bi sljedeći izlaz:

$ cat /proc/cpuinfoprocessor : 0vendor_id : AuthenticAMDcpu family : 15model : 36model name : AMD Turion(tm) 64 Mobile ML-34stepping : 2cpu MHz : 800.000cache size : 1024 KBfpu : yesfpu_exception : yescpuid level : 1wp : yesflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt lm 3dnowext 3dnow pni lahf_lmbogomips : 1599.48TLB size : 1024 4K pagesclflush size : 64cache_alignment : 64address sizes : 40 bits physical, 48 bits virtualpower management: ts fid vid ttp tm stc$

Nadziranje sustava na ovakav način dosta je neproduktivno i zahtjeva točno poznavanje u kojoj se datoteci nalaze podaci o specifičnom dijelu sustava koji nadziremo. Dodatni problem predstavlja činjenica kako je sadržaj i format svih tih datoteka podložan promjenama. Dakle, umjesto direktnog čitanja sadržaja datoteka iz /proc direktorija, puno je lakše koristiti skup standardnih alata koji se mogu naći na svakom GNU/Linux sustavu. Slijedi pregled takvih alata po pojedinim kategorijama sistemskih resursa.

10.1.1. Praćenje sistemske i swap memorije

Podatke o raspoloživoj i zauzetoj memoriji možemo vidjeti s naredbom free(1).

87

Page 94: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

$ free total used free shared buffers cachedMem: 190408 183896 6512 0 4232 92196-/+ buffers/cache: 87468 102940Swap: 248968 16708 232260

Naredba free(1) po definiciji daje veličine u ispisu preračunate u kilobajte. Moguće je promijeniti ponašanje naredbe s odgovarajućim opcijama tako se ispis u bajtovima dobija korištenjem opcije -b, dok se ispis u megabajtima dobija korištenjem opcije -m.

U navedenom primjeru vidimo da ispis sadrži četiri retka. Prvi redak je zaglavlje koje sadrži nazive pojedinih kolona, osim prve. Tako se u drugoj koloni nalazi ispisana ukupna količina memorije (total), potom dolazi količina memorije koja se koristi (used), slobodna količina (free), dijeljena memorija (shared) te privremeni spremnici (buffers i cached kolone).

U preostalim retcima nalaze se grupirane pojedine vrste memorije te podaci za svaku vrstu memorije u već navedenim kolonama. Tako se u drugom retku, koji započinje s rječju Mem nalaze podaci o sistemskoj memoriji (RAM-u), dok se u četvrtom retku, koji započinje s rječju Swap, nalaze podaci o tzv. swap memoriji. Možemo zaključiti kako nam gornji ispis kaže da je od ukupno 190408kB radne memorije (RAM-a), zauzeto 183896kB te slobodno 6512kB. Nadalje, od ukupno 248968kB proširene memorije (swap) koristi se 16708kB a ostatak je slobodan.

U gornjem primjeru izgleda kao da je zauzeto čak 183896 od 190408 kB memorije, a da je dostupno samo 6512 kB memorije. Međutim, treba uzeti u obzir da se u ukupnu količinu zauzete memorije računa i takozvana priručna memorija (eng. cache). Ovaj dio memorije zauzima Linux jezgra te u nju pohranjuje podatke za koje pretpostavlja da bi se mogli ponovo koristiti ili će se tek koristiti.

Primjerice, prilikom čitanja podataka s diska, pročitani podaci mogu se proslijediti aplikaciji koja ih je tražila, ali se istovremeno mogu sačuvati u privremenim spremnicima unutar jezgre operacijskog sustava. Ako ta, ili neka druga, aplikacija zatraži ponovo te podatke oni će se dohvatiti iz privremenog spremika i neće ih biti potrebno ponovo pročitati s diska. Također, kada aplikacija traži nekakve podatke s diska, jezgra može odlučiti da pročita više podataka no što je zatraženo. U slučaju da aplikacija traži nastavak čitanja podataka, opet će zahtijev biti ranije ispunjen zbog toga što su podaci već dostupni u memoriji. Međutim ukoliko ponestane slobodne memorije dostupne programima ova memorije se smatra kao slobodna – iz ovoga se može zaključiti da je ukupna količina slobodne memorije dostupne programima zapravo jednaka količini koja se dobije zbrajanjem slobodne memorije (free) te količine koju zauzimaju privremeni spremnici (buffer i cache kolone). Dakle, prave veličine nalaze se ispisane u trećem retku!

Sažetak opisanih opcija naredbe free naveden je u tablici

Table 1. Sažetak opisanih opcija naredbe free

Opcija Opis

-b Ispis svih memorijskih podataka u bajtovima

-k Ispis svih memorijskih podataka u kilobajtima

-m Ispis svih memorijskih podataka u megabajtima

-o Ne ispisuje liniju koja podešava veličinu priručne memorije

Nešto detaljnije podatke o korištenju memorije možemo dobiti naredbom vmstat(8). Izvršavanjem te naredbe dobijamo sljedeće informacije:

88

Page 95: Marko Salkic - Linux - Napredni Tecaj

10. Praćenje rada sustava

$ vmstatprocs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 16764 86248 424752 0 0 46 29 368 677 9 2 86 3 0$

Naredba vmstat(8) osim podataka o memoriji, ispisuje i podatke o IO operacijama, te procesoru. Ovdje ćemo nešto detaljnije objasniti ispis koji se odnosi na memoriju, dok će preostali dijelovi ispisa biti pojašnjeni kasnije u poglavlju.

Slijedi detaljan opis navedenog ispisa, te drugih varijanti vmstat naredbe.

Konačno, jedan od vrlo korisnih programa za nadziranje stanja memorije, ali i za nadziranje mnogih drugih djelova sutava, je naredba top. Za razliku od naredbe free(1), naredba top je interaktiva i osvježava prikaz informacija o sustavu u određenom vremenskom periodu. Podaci o memoriji se nalaze u vrhu ispisa naredbe.

Mem: 190408k total, 185964k used, 4444k free, 4320k buffersSwap: 248968k total, 19580k used, 229388k free, 101192k cached

Ti podaci slični su podacima naredbe free(1) jedino su formatirani na nešto drugačiji način.

Zadaci:

1. Ustanoviti ukupnu količinu radne memorije na sustavu

2. Odrediti koliko je radne memorije zauzeto te koliko od toga iznosa otpada na sistemske međuspremnike i keširanu memoriju

3. Odrediti ukupnu veličinu swapa na sustavu

10.1.2. Procesor

Podaci koji se odnose na procesor je zauzeće procesora u korisničkom i sistemskom načinu rada, prosječno opterećenje u vremenskim intervalima od 1, 5 i 15 minuta te procesi koji se izvršavaju na sustavu.

Važne informacije o zauzeću procesora može nam dati i podatak o prosječnom opterećenju (load average). Prosječno opterećenje se mjeri kao broj procesa koji čekaju na izvođenje – što je sustav pod većim opterećenjem (pri malim opterećenjima ova vrijednost će biti malo veća od nule ili čak nula) to će i prosječno opterećenje biti veće. Važno je napomenuti da visoka vrijednost prosječnog opterećenja može biti i posljedica nećeg drugog osim velikog opterećenja procesora, na primjer intenzivan pristup disku ili swapanje. Ovaj podatak također možemo vidjeti u ispisu naredbe top(1) ili pozivom naredbe uptime(1), na primjer:

$ uptime22:44:08 up 3:27, 3 users, load average: 0.30, 0.39, 0.64

Uz informacije o prosječnom opterećenju, naredba uptime(1) daje i informacije kada i koliko dugo sustav neprekidno radi te koliko je korisnika trenutno prijavljeno. Za prosječno operećenje ispisane su tri vrijednosti (isto kao i u naredbi top). Prva vrijednost predstavlja prosječno opterećenje tijekom prošle minute, druga tijekom zadnjih pet minuta, a treća za zadnjih petnaest minuta.

vmstat

89

Page 96: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

Već spomenutom naredbom top možemo saznati i niz informacija o zauzeću procesora. Informacije o zauzeću procesora nalaze se u vrhu ispisa naredbe top. Dostupne informacije su koliko u postotcima procesor vremena provodi izvršavajući sistemske pozive i funkcije (system), korisničke programe (user), reniceane procese, te koliko je procesorskog vremena neiskorišteno (idle).

Zadaci:

1. Odrediti prosječno opterećenje sutava

2. Odrediti koliko u postotcima procesor provodi vremena izvođeći korisničke programe

10.1.3. Datotečni sustav

Informacija koja nas najčešće zanima u radu sa datotečnim sustavom je trenutno stanje zauzetosti pojedinih particija. Ovu informaciju možemo saznati sa naredbom df(1), kojoj ćemo radi preglednosti dodati i opciju -h kako bi veličine, umjesto u blokovima, vidjeli u vrijednostima poput megabajta ili gigabajta:

$ df -hFilesystem Size Used Avail Use% Mounted on/dev/hda5 5.0G 2.3G 2.5G 48% /tmpfs 93M 0 93M 0% /dev/shm

Ispis naredbe daje podatke o ukupnom, zauzetom i slobodnom mjestu na pojedinoj particiji. Treba primjetiti kako zbrajanjem zauzete i slobodne količine na particiji nećemo dobiti ukupnu veličinu particije. Naime, taj prostor može koristiti isključivo administrator sustava te se koristi u slučajevima kada se particija popuni. Kada ne bi bilo tog rezerviranog prostora moglo bi se desiti da se niti administrator ne može prijaviti na sustav jer se ne mogu zapisati nikakve informacije. Dakle, rezerviranjem određenog prostora za administratora, izbjegava se ta mogućnost. Da bi smo saznali detalje o načinu na koji je svaka od navedenih particija mountana možemo se poslužiti naredbom mount(8) bez ikakvih argumenata:

$ mount/dev/hda5 on / type ext3 (rw,errors=remount-ro)proc on /proc type proc (rw)devpts on /dev/pts type devpts (rw,gid=5,mode=620)tmpfs on /dev/shm type tmpfs (rw)

Naredba  mount(8)  nam   daje   informacije   o   tome   na   koji   je   direktorij   montiran   (mountan) određeni uređaj te sa kojim je to dozvolama učinjeno.

Zadaci:

1. Saznati veličinu svih particija koje koristi Linux

2. Saznati količinu preostalog slobodnog mjesta na disku

10.2. Praćenje rada sistemskih servisa

Sistemskim servisima se na Linux distribucijama upravlja putem init skripti. Init skripte se nalaze u direktoriju /etc/init.d. Koje od ovih skripti će biti izvedene tijekom podizanja sustava ovisi o odabranom runlevelu sustava. Svaki runlevel je odredjen direktorijem

/etc/rcX.d

90

Page 97: Marko Salkic - Linux - Napredni Tecaj

10. Praćenje rada sustava

gdje slovo X predstavlja odabrani runlevel. Primjerice, ako se sustav podiže u runlevel 3, sustav će tijekom inicijalizacije izvršiti sve skripte koje se nalaze unutar direktorija /etc/rc3.d. Važno je napomenuti da se u ovim direktorijima ne nalaze stvarne skripte koje se izvršavaju nego samo simboličke veze na skripte koje se nalaze u direktoriju /etc/init.d.

Simboličke veze unutar /etc/rcX.d direktorija su imenovane poštivajući određena pravila. Skripte počinju ili slovom 'K' ili slovom 'S' iza slijedi broj te ime servisa. Ovo je važno zato što to određuje kojim redosljedom će se skripte izvoditi – prvo se izvode skripte sa manjim brojem. Skripte koje počinju slovom S (start) se izvršavaju tijekom podizanja, a skripte koje počinju sa K (kill) se izvršavaju kod zaustavljanja sustava. Ovakav način upravljanja init skriptama se zove SYSV init i nasljeđen je od SYSV Unixa. *BSD Osevi i neke Linux distribucije (na primjer Slackware) imaju drukčiji način upravljanja init skriptama.

Vrlo često želimo pokretati ili zaustavljati servise dok je sustav već podignut. Ove operacije možemo napraviti direktno putem init skripti u /etc/init.d. Servisima se upravlja pozivanjem njihove upravljačke skripte iz /etc/init.d direktorija sa jednim od sljedećih parametara:

start Pokretanje servisa

stop Zaustavljanje servisa

restart Zaustavljanje i pokretanje servisa

status Ispisivanje statusa servisa

Ovisno o specifičnosti servisa moguće je da skripta nema sve od navedenih opcija ili da ima neke dodatne opcije. Uzmimo na primjer situaciju gdje želimo vidjeti status ssh servera:

# /etc/init.d/sshd status

sshd (pid 1234) is running

Neke distribucije imaju posebne alate za upravljanje init skriptama. Tako je primjerice na RedHat-u moguće koristiti naredbu service. Naredba service prima dva parametra, prvi je ime servisa (tj. ime init skripte) a drugi je naredba koje smo prosljeđivali i direktno init skriptama. Na primjer, radimo na RedHat-u i želimo provjeriti da li je pokrenut web server te ga po potrebi pokrenuti:

# service httpd status

httpd is stoped

# service httpd start

starting httpd... done

Još jedna korisna naredba na RedHat sustavima je chkconfig. Ova naredb a služi da bi vidjeli trenutno stanje rc.d direktorija, tj. u kojem runlevelu će biti pokrenuti koji servisi. Prikazivanje ovih informacija za sve runlevele dobijamo naredbom:

# chkconfig -–list

Naredba chkconfig služi i za dodavanje linkova na init skripte unutar rcX.d direktorija, na primjer:

# chkconfig –-level 3 sshd on

10.3. Praćenje rada programa

Možda ipak ovdje pojasniti samo strace, ltrace, a ostalo prebaciti u praćenje procesora?

91

Page 98: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

Popis postojećih procesa na sustavu možemo dobiti narebom ps. Naredba ps na GNU/Linux sustavima prima dva formata korisničkih opcija: BSD opcije (opcije bez znaka -, ovakve opcije prima i naredba ps na BSD inačicama Unixa) i SYSV opcije (opcije sa znakom -, prima ih i naredba ps na SYSV inačicama Unixa). Ako se pozove bez ikakvih dodatnih opcija, naredba ps daje popis procesa koje korisnik ima pokrenute, njihov identifikator procesa (PID), oznaku termnala (TTY) na kojem se izvode te vrijeme izvodjenja (TIME). Na primjer:

$ ps PID TTY TIME CMD 3994 pts/0 00:00:00 zsh 4041 pts/0 00:00:00 ps

Možemo vidjeti da ovo daje ispis samo procesa koji su u stanju izvođenja. Da bi smo dobili popis svih procesa možemo koristiti opciju -e. Ispis koji daje naredba ps -e identičan je prethodnom ispisu sa razlikom što će biti ispisani svi procesi koji se izvode na sustavu. Često nas zanima detaljniji ispis informacija o procesima, a možemo ga dobiti na dva načina. Prvi je način korištenjem SYSV opcija -f i -l:

$ ps -fUID PID PPID C STIME TTY TIME CMDipozgaj 3994 3993 0 19:10 pts/0 00:00:00 zshipozgaj 4049 3994 0 19:36 pts/0 00:00:00 ps -f

$ ps -lF S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD0 S 1001 3994 3993 0 75 0 - 881 rt_sig pts/0 00:00:00 zsh0 R 1001 4052 3994 0 76 0 - 581 - pts/0 00:00:00 ps

a drugi je način korištenjem BSD opcije l:

$ ps lF UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND0 1001 3994 3993 15 0 3524 1868 rt_sig Ss pts/0 0:00 zsh0 1001 4059 3994 16 0 2324 680 - R+ pts/0 0:00 ps l

Naravno, ukoliko želimo dobiti detaljan popis svih procesa, kombinirat ćemo opcije -e i -f, a ukoliko želimo dobiti procese samo pojedinog korisnika možemo koristiti opciju -u:

$ ps -fu daemonUID PID PPID C STIME TTY TIME CMDdaemon 2914 1 0 19:05 ? 00:00:00 /sbin/portmapdaemon 3566 1 0 19:05 ? 00:00:00 /usr/sbin/atd

Ukoliko želimo dobiti popis svih procesa od trenutnog korisnika to jest korisnika koji izvodi naredbu, mogli smo upotrebiti varijablu ljuske $USER:

$ ps -fu $USER

Naredba ps ima veliki broj drugih opcija, a sve su detaljno opisane u manual stranicama naredbe.

Nakon što smo saznali koji procesi se izvode i dijagnosticirali potencijalne probleme, možemo koristiti naredbe za mjenjanje prioriteta izvođenja ili slanje signala procesima. Proces se može zaustaviti tako da primi određeni signal. Signali se šalju procesu naredbom kill. Sintaksa naredbe je sljedeća:

kill [signal] PID

92

Page 99: Marko Salkic - Linux - Napredni Tecaj

10. Praćenje rada sustava

Signal je pozitivan broj (ili mnemonička oznaka) i o njemu ovisi akcija koju će procesor izvesti kada primi taj signal. Slijedi popis najčešće korištenih signala:

Signal Numerički Akcija

HUP 1 Šalje se svim procesima pri zatvaranju terminala kao i pri zaustavljanju sustava, podrazumjevana akcija je izlazak iz procesa

INT 2 Šalje se pritiskom na tipke CTRL+C, proces ga može ignorirati, podrazumjevana akcija je izlazak iz procesa

QUIT 3 Šalje se pritiskom na tipke CTRL+\ (na tipkovnicama sa hrvatskim keymapom CTRL+ALTGR+Q), proces ga može ignorirati, podrazumjevana akcija je izlazak iz procesa i core dump

KILL 9 Bezuvjetno završavanje izvođenja procesa, ne može se ignorirati

TERM 15 Podrazumjevani signal koji se šalje naredbom kill kada nisu navedeni drukčiji argumenti, proces ga može ignorirati, podrazumjevana akcija je izlazak iz procesa

Kompletni popis signala može se vidjeti u manual stranici signal(7)

Svi procesi se pokreću sa podrazumjevanim prioritetom. Prioritet je broj u rasponu od -20 (najveći prioritet) do 19 (najmanji prioritet), a može se zadati kod pokretanja programa naredbom nice. Prioritete manje od nule može zadati samo korisnik root. Sintaksa naredbe je sljedeća:

nice PRIORITET naredba

Ukoliko je prioritet negativan, potrebno je koristiti dvije crtice, na primjer:

nice --10 ls

Na ovaj način možemo zadati prioritet procesu pri pokretanju, međutim češće želimo promjeniti prioritet procesa kada se već izvodi. To možemo postići naredbom renice. Sintaksa je slična naredbi nice sa sljedećim iznimkama: pozitivni prioritet zadaje sa znakom +, a negativni sa znakom -, na primjer:

$ renice +5 1234

$ renice -5 1234

Alternativni i možda bolji način nadziranja i upravljanja procesima je upotrebom već nekoliko puta prethodno spomenute naredbe top. Popis procesa u ispisu naredbe top zauzima najveći dio ispisa. Ako nije podešeno drukčije, naredba top prikazuje sljedeće informacije o procesima

PID Identifikator procesa (broj koji jedinstveno predstavlja svaki proces)

PR Prioritet procesa

NI Nice vrijednost procesa (manji broj daje veći prioritet procesu)

VIRT Veličina virtualne memorije koju proces zauzima

RES Veličina fizičke memorije koju proces zauzima

SHR Veličina memorije koju proces može dijeliti sa drugim procesima

S Status procesa (running, sleeping, traced...)

%CPU Postotak procesorskog vremena kojeg proces zauzima

%MEM Postotak fizičke memorije koju proces zauzima

93

Page 100: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

PID Identifikator procesa (broj koji jedinstveno predstavlja svaki proces)

TIME+ Vrijeme izvođenja procesa

COMMAND Naredba koju proces izvodi

Uz ove standardne informacije, moguće je dobiti i druge načine ispisa. Na primjer, jedan od korisnijih načina ispisa je onaj koji se dobije pritiskom na veliko slovo A. Pri ovome načinu prikaza naredba top prikazuje četiri odvojena dijela prikaza, svaki sa drugim informacijama o procesima.

Naredba top je interaktivna i ne služi samo za pregled informacija o procesima već je moguće i napraviti niz drugih operacija pritiskom na određene tipke:

u Prikaz procesa od samo određenog korisnika

k Slanje signala procesu

r Mjenjanje nice vrijednosti procesa

n Biranje broja prikazanih procesa

d Biranje intervala u kojem se osvježuje prikaz informacija o procesima

t Prikazuje/sakriva sumarne informacije o broju procesa na sustavu

q Izlazak iz programa

Linux jezgra pruža niz naprednijih načina nadgledanja izvođenja procesa kao što je BSD process accounting. BSD process accounting je mogućnost koja može biti ukompajlirana u Linux jezgru i koja služi tome da bi jezgra mogla spremati razne informacije o procesima u posebne datoteke koje sadržavaju informacije poput korisnika koji je pokrenuo proces, vremenu i prioritetu izvođenja, potrošnji memorije i procesora, statistikama o ulazno/izlaznim operacijama, naredbi koja se izvodila itd. Ove podatke čita niz korisničkih programa (npr. programi acct i sar) koji mogu poslužiti da bi dobili detaljan uvid u stanje sustava u određenom trenutku.

Zadaci:

1. Saznati ukupan broj procesa koji su u stanju running

2. Pokrenuti program top sa prioritetom 10, zatim ga povećati na novi prioritet 5

10.4. Praćenje logova

Logovi su datoteke u kojima se evidentiraju sva događanja na računalu. Svaki program koji se izvršava zapisuje informacije o svom radu putem syslog sučelja. Detaljnost logiranja ovisi o postavkama svakog programa i može varirati od nikakvog do izuzetno detaljnog logiranja za potrebe otkrivanja grešaka u sustavu ili u samim aplikacijama. Te informacije završavaju u datotekama koje se nalaze u direktoriju /var/log. Logovi su tematski grupirani u datoteke. Neke od log datoteka na Fedora Core distribuciji linux-a su:

messages

Datoteka u koju se zapisuju sva događanja koja nisu unaprijed razvrstana u neki drugi log. Ovo ovisi o konfiguraciji syslog daemona koja se može naći u datoteci /etc/syslog.conf

maillog

94

Page 101: Marko Salkic - Linux - Napredni Tecaj

10. Praćenje rada sustava

Datoteka u koju se zapisuju sva događanja vezana uz elektroničku poštu na sustavu. Primjerice, za svaku primljenu poruku elektroničke pošte bit će stavljen zapis, isto kao i spajanje korisnika putem POP/IMAP protokola bit će zabilježen u ovom logu.

secure

Poruke vezane uz autentifikaciju na sustav. Primjerice, sva neuspješna logiranja putem ssh programa prijavljuju se u ovaj log.

Osim navedenih logova postoji još čitav niz drugih od kojih su neki detaljnije pojašnjeni u sklopu administracije pojedinih podsustava u nastavku.

Literatura

http://perso.orange.fr/sebastien.godard/tutorial.html

http://www.linuxjournal.com/article/2396

http://souptonuts.sourceforge.net/performance_tutorial.html

http://www-128.ibm.com/developerworks/eserver/articles/analyze_aix/index.html

http://www.psc.edu/networking/projects/tcptune/#Linux

95

Page 102: Marko Salkic - Linux - Napredni Tecaj

11. AdministracijaSvako računalo, bez obzira na instalirani operacijski sustav, trebalo bi imati osobu koja je zadužena za njegovo održavanje, upravljanje i nadogradnju. Tu osobu nazivamo administratorom računala. Neke od zadaća koje svakodnevno obavlja administrator su: upravljanje novim korisnicima, podešavanje uređaja, izrada sigurnosnih kopija podataka, sigurnost sustava, isključivanje sustava, savjetovanje korisnika. Administratorova nadležnost varira od sustava do sustava. U velikim sustavima te su zadaće podijeljene na više ljudi, dok kod malih sustava ulogu administratora preuzima vlasnik ili korisnika računala. Administrativni poslovi obavljaju se za samim računalom, i u tom slučaju kažemo da administrator radi za konzolom. Konzola je riječ koja potiče iz vremena velikih računala, a danas se odnosi na tipkovnicu i monitor koji su spojeni direktno na samo računalu. U slučaju kada je računalo spojeno na mrežu administrator može održavati sustav i putem mreže.

Svaki Linux sustav ima jednog posebnog korisnika kojemu je dozvoljeno obavljanje gotovo svih zadaća. Taj se korisnik naziva superkorisnik, njegovo korisničko ime je root. Polazni direktorij tog korisnika je obično /root. Dakle, kako bi obavio administratorske zadaće, koje obično zahtijevaju posebne dozvole, administrator se prijavljuje na sustav kao root. Ipak, dobra praksa je spajanje na računalo kao običan korisnik, a tek potom prebacivanje na superkorisnika korištenjem naredbe su. To se posebno odnosi na slučaj kada se administracija obavlja putem računalne mreže budući da je iz sigurnosnih razloga dozvoljeno logiranje superkorisnika isključivo na konzoli računala.

U nastavku poglavlja obratiti ćemo nešto veću pažnju na pojedine zadatke koje obavlja administrator računala.

11.1. Instalacija mreže

Hm, da li je ovo potrebno budući da imamo osnovni mrežni tečaj?

– osnovni dijagram (laicki): racunalo, gateway, nameserver, ostatak mreze(oblak)

– objasnjenje mreznih sucelja (ethX, nisu predstavljeni uobicajnim /dev/bla fajlom)

– osnove konfiguracije mreznog sucelja ifconfig-om

– route

– /etc/reslov.conf , usepeerdns

– zadatak: procitati koja su mrezna sucelja trenutno aktivna, procitati default gateway.

– zadatak: podesiti mrezno sucelje eth0 na ip ???, dodati default gateway za ???, te nameserver za ???, ispitati ispravnost tako podesenog mreznog sucelja.

– zadatak: podesiti mrezno sucelje eth0 da dinamicki primi postavke za ip, gateway te dns. Pokrenuti takvo sucelje, ispitati ispravnost tako podesenog mreznog sucelja.

11.2. Printanje

Pisač je u Linuxu je samo još jedna datoteka. Kada hoćemo na linuxu ispisati neki dokument dovoljno je preusmjeriti izlaz u datateku gdje se nalazi printer:

$ ls > dev/lp0

Gornjom naredbom smo standardni izlaz naredbe ls poslali na ispis pisač na prvom paralelnom portu. Ovaj način je prilično primitivan i nije dobar zato što će za dovršenje ove naredbe trebati onoliko vremena koliko je pisaču potrebno da stvarno te podatke ispiše, što može predstavljati problem ako je

96

Page 103: Marko Salkic - Linux - Napredni Tecaj

11. Administracija

pisač spor ili ugašen. Bolji način je postupni ispis podataka. Podaci se za ispis se sakupe u datoteku i zatim se pokrene pozadinski proces za slanje podataka na pisač. Ovaj metoda se zove spooling.

Privremeno spremanje datoteka za kasniji ispis je suštinski način rada Linuxa. Za svaki pisač je određeno spool područje (direktorij s datotekama koje čekaju u redu za ispis). Podaci se za svaki pisač sakupljaju u taj privremeni direktorij, po jedna datoteka na jedan zadatak za printanje. Pozadinski proces (nazvan printer daemon) neprestano pretražuje spool područja u potrazi za novih datotekama za ispis. Kada se neka pojavi, podaci se šalju u odgovarajući pisač i uklanjaju iz reda čekanja koji je organiziran po FIFO principu (prva unutra, prva van). Spool direktorij je zapravo red čekanja i poslovi koji čekaju na ispis su u redu čekanja (queued ili in the print queue).

U slučaju ispisa na udaljenom uređaju podaci su najprije spremljeni lokalno kao za svaki drugi ispisni zadatak, ali je pozadinskom procesu rečeno da podatke pošalje u određeni pisač na određenom udaljenom stroju.

Neophodni podaci koje spool daemon treba znati su: fizička naprava koju treba korisiti, spool direktorij, udaljeni stroj i pisač za daljinski ispis, itd. Ti podaci su pohranjeni u datoteci /etc/printcap.

11.2.1. LPD

LPD je kratica od engl. Line Printer Daemon i to je osnovni proces za printanje na Linuxu. Ako već nije, možemo ga pokrenuti sa parametrom -l koji stvara log datoteku koja može biti korisna pri otkrivanju grešaka kod printanja.

$ lpd -l

Naredbom lpr šaljemo datoteku na ispis (u spool direktoriji). Ako ne navedemo datoteku lpr koristi standardni ulaz.

$ lpr datoteka_za_printanje

Naredbom lpq prikazujemo sadržaj spool direktorija.

$ lpq

lp is ready and printing

Rank Owner Job Files Total Size

active mwf 31 thesis.txt 682048 bytes

Naredbom lprm id_posla možemo poništiti zahtjev za printanje.

$ lprm 31

Ako želimo poništiti zahtjev koji smo prethodno dodali koristimo:

$ lprm -

Naredbom lcp možemo upravljati pisačem, pokrenuti ili zaustaviti slanje podataka u pisač, omogućiti ili onemogućiti pisač, uređivati redoslijed zahtjeva za printanje u redu čekanja, ispisati status printera. Sintaksa naredbe je:

$ lcp naredba ime_pisaca

97

Page 104: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

– upotreba klijent server modela na printanje

– cups

11.3. Suid, sgid

Hm, da li je ovo potrebno, to bi se možda trebalo nalaziti u osnovnom tečaju?

Suid (engl. set user ID) i sgid (engl. set group ID) su dvije dodatne dozvole pristupa koje se mogu postaviti datotekama i direktorijima. Ovi programi se obično koriste kada neki program zahtijeva posebnu dozvolu da bi ga pokrenuli (npr. dozvolu superkorisnika). Kada pokrenete neki program sa suid dozvolom, naredbe i procese koje on sadrži, izvode se kao da ih je pokrenuo vlasnik (engl. owner) tog programa. Slično tome, kada pokrenete program sa sgid dozvolom, on se izvodi sa privilegijama grupe.

Ako su suid i sgid dozvole postavljene nad direktorijem Proba tada će se svim datotekama i poddirektorijima kreiranim u tom direktoriju, vlasnik tj. grupa biti ista kao i od direktorija Proba, neovisno o tome tko ih zapravo kreira.

Primjer:

Želimo pronaći sve suid programe na računalu:

$ find / -perm +04000

Primjer:

Želimo pronaći sve sgid programe na računalu:

$ find / -perm +02000

Suid/sgid programe treba izbjegavati jer neoprezno napisani mogu omogućiti napadaču superkorisničke privilegije. Najveća opasnost nastaje kada suid programi izvode naredbe koje su zadane u retku za unos naredbi, aktiviraju ljusku ili otvaraju datoteke koje korisnik može mijenjati i u njih upisivati vlastite naredbe. No ponekad su suid/sgid dozvole nužne i korisne u normalnom radu sustava.

Primjer:

Kada korisnik želi promijeniti lozinku bez posredstva administratora tada pokreće program passwd koji ima posebne suid dozvole koje mu omogućuju da kao superkorisnik mijenja datoteku u kojoj su pohranjene lozinke.

$ ls -l /usr/bin/passwd-r-sr-sr-x 1 root sys 23500 Jul 19 2005 /usr/bin/passwd

– napomene (ne radi za shell skripte, ...)

– zadatak: program /bin/bla premjestiti u /opt/bin direktorij, podesiti ga tako da kada je pokrenut ima ovlasti grupe “majstori”, ispitati funkcionalnost.

– zadatak: podesiti /proba direktorij da ima ovlasti grupe ???, ispitati funkcionalnost.

98

Page 105: Marko Salkic - Linux - Napredni Tecaj

11. Administracija

11.4. Periodičko izvršavanje zadataka

Neke naredbe u linuxu omogućuju da odredite vrijeme kada želite pokretanje nekog procesa. Ovdje ćemo opisati dvije takve naredbe: cron i at.

11.4.1. cron

Cron koristimo za periodičko raspoređivanje procesa ili naredbi. Program cron se pokreće samo jedanput, prilikom podizanja sustava. Kad je pokrenut cron provjerava redove čekanja za izvršavanje at poslova i također provjerava da li su korisnici rasporedili poslove uporabom crontab datoteka.

Crontab datoteka je datoteka sa vašim korisničkim imenom koja se nalazi /var/spool/cron/crontabs/. Svaki korisnik ima samo jednu datoteku. Ona sadrži niz naredbi sa zadanim vremenima koje cron daemon treba periodički pokrenuti, a njezina struktura je sljedeća:

* * * * * naredba_koja_ce_se_izvesti

- - - - -| | | | || | | | ----- dan u tjednu (1 - 7) (ponedjeljak=1)| | | ------- mjesec (1 - 12)| | --------- dan u mjesecu (1 - 31)| ----------- sat (0 - 23)------------- minuta (0 - 59)

Prilikom specifikacije vremena možete koristiti:

– “,” za navođenje liste (pr. “1,2,3,4”)

– “-” za raspon (pr. “1-6” što je isto kao i “1,2,3,4,5,6”)

– “*” označava svaku valjanu vrijednost.

Naredba crontab barata sa tim datotekama. Možete zadati već prethodno stvorenu datoteku (nekim tekst editorom) ili je parametrom -e direktno uređujete:

$ crontab ime_datoteke$ crontab -e

Za ispis sadržaja vaše crontab datoteke koristite parametar -l:

Za uklanjane crontab datoteke koristite parametar -r:

Primjer:

Želimo svakog ponedjeljka ujutro u 7.30h sortirati datoteku /home/mcavka/place.txt i rezultat poslati e-mailom sefu sa korisničkim imenom grga.

Kreiramo datoteku mojcrontab sa redom koji ovako izgleda:

30 07 * * 01 sort /home/mcavka/place.txt ¦ mail -s”Place” grga

I pozovemo naredbu crontab:

99

Page 106: Marko Salkic - Linux - Napredni Tecaj

Napredno korištenje operacijskog sustava Linux

$ crontab mojcrontab $ crontab -l30 07 * * 01 sort /home/mcavka/place.txt ¦ mail -s”Place” grga$ crontab -r$ crontab -lno crontab for mcavka

– napomene (pitanje sigurnosti – podvala)

– zadatak: potrebno je stvoriti i podesiti “bla” skriptu da periodicki izvrsava zadacu ???

11.4.2. at

At koristimo kada želimo jednu ili više naredbi pokrenuti u točno određeno vrijeme. Moguće je odrediti vrijeme i datum pokretanja.

Primjer:

Želimo u 14:55h poslati mail korisniku Sef sa porukom posao je gotov.

$ at 14:55warning: commands will be executed using /bin/shat> echo “Posao je gotov!” ¦ mail -s”Obavijest” Sefat> <EOT>job 5 at 2006-04-28 14:55

Znači pozivamo:

at hh:mm month day year

Zatim unosimo nizove naredaba koje želimo da se izvrše, svaku naredbu potvrđujemo sa return, a na kraju za izlaz koristimo kombinaciju ctrl-d. Ako želimo izvesti veći broj naredbi, onda ih je najbolje staviti u neku datoteku.

Primjer:

$ at 12:00 < datoteka_sa_popisom_naredbi

Ako želimo ispis svih poslova koje smo zadali naredbi at koristimo parametar -l.

Primjer:

$ at -l5 2006-04-28 14:55 a mcavka

Za brisanje posla koristimo parametar -d id_posla

Primjer:

$ at -d 5

Poslovi čiji raspored napravite s at stavljaju se u red čekanja koji operativni sustav periodično provjerava. Korisnik ne treba biti prijavljen da bi posao bio izvršen. Naredba at se uvijek izvršava u pozadini. Svaki se izlaz koji je proizveden s naredbama koje at izvršava, automatski se e-poštom šalje korisniku.

Administrator određuje koji korisnici mogu korisiti naredbu at. Datoteke /etc/at.allow i /etc/at.deny određuju dopuštenje za uporabu ove naredbe. Ako /etc/at.allow postoji,

100

Page 107: Marko Salkic - Linux - Napredni Tecaj

11. Administracija

uporaba naredbe at se dopušta samo korisničkim imenima koja su popisana u toj datoteci. Ako datoteka /etc/at.allow ne postoji, sustav provjerava /etc/at.deny i svim korisnicima navedenim u toj datoteci nije dopuštena uporaba at. Ako niti jedna od tih dviju datoteka ne postoji, samo root korisnik može koristiti at. Ako je /etc/at.deny prazna, svaki korisnik može koristiti at.

http://souptonuts.sourceforge.net/how_to_linux_and_open_source.htm

101

Page 108: Marko Salkic - Linux - Napredni Tecaj

12. Osnove mreže u operacijskom sustavu Linux

102

Page 109: Marko Salkic - Linux - Napredni Tecaj

13. Literatura– www.tldp.org

103