Gentoo Linux 1. peatükk.

Viimati sai kirja pandud Gentoo Linuxi installeerimine vanal HP notebook arvutil. Vahepeal on kõvasti vett merre voolanud ning aeg edasi läinud. Seal kirjapandu ilmselt enam ei toimi ning kuna hetkel on just plaanis uuemal Dell Latitude D820 notebook arvutil Gentoo Linuxi uuesti installeerimine, siis panen selle siin ka kirja. Ehk on mõnel kodanikul sellest jutust ka mingit kasu. Antud juhend ei asenda Gentoo Linuxi ametlikku paigaldusjuhendit http://www.gentoo.org/doc/en/handbook/handbook-x86.xml.

Eelmine kord sai esitatud küsimus, et miks just Gentoo ning ka veidi lahatud põhjusi Gentoo Linuxi valikul. Eks need põhjused on samad ka nüüd ning lisaks ka 5-aastane kogemus Gentoo kasutamisel. Samuti on idling 1-3% faster than other distributions üheks põhjuseks.

Riistvara

Arvutiks seekord Dell Latitude D8200 läpakas 2 GHz Centrino Duo T2500 protsessori, 4 GB mälu ning 160 GB kõvakettaga.

CD Gentoo Linuxi paigaldamiseks.

CD tõmmise saab tõmmata Gentoo serverist või mõnest ametlikust peegeldusest. Soovitatav on kasutada kohalikku Eestis asuvat peegeldust ftp://ftp.linux.ee. Gentoo CD-de tõmmised leiab siit: http://ftp.linux.ee/pub/gentoo/distfiles/releases/x86/current/installcd.

Võrguühenduse olemasolul on Gentoo Linuxi paigaldamiseks vajalik ainult minimal CD tõmmise install-x86-minimal-2008.0.iso laadimine ning CD-le kirjutamine. Enne CD kirjutamist on soovitatav laadida ka fail install-x86-minimal-2008.0.iso.DIGEST ISO faili MD5 kontrollsummaga ning selle abil CD tõmmise kontrollimine.

$ md5sum -c install-x86-minimal-2008.0.iso.DIGEST

Alglaadimine CD-lt.

Gentoo Linuxi paigaldaja esmane käsurida tuleb ette peaaegu momentaalselt. F1 ja F2 klahvidega saab infot erinevate kernelite ning variantide kohta. Minul mingeid lisanõudeid ei ole, seega vajutan ENTER klahvi jätkamiseks. Klaviatuuripaigutus sellel läpakal on US ning ka klaviatuuripaigutuse küsimusele vastan ENTER klahvi vajutamisega.

Järgmiseks kontrollin, kas mu võrgu seaded tunti automaatselt ära. Koduvõrgus jagab mul server IP aadresses, seega peaks kõik olema juba paigas.

# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:15:C5:08:5E:CB
          inet addr:192.168.0.176  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::215:c5ff:fe08:5ecb/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:413 errors:0 dropped:0 overruns:0 frame:0
          TX packets:226 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:56897 (55.5 Kb)  TX bytes:33810 (33.0 Kb)
          Interrupt:18

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:30 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:540 (540.0 b)  TX bytes:540 (540.0 b)

Näitab, et eth0 on olemas ning ka IP aadress 192.168.0.176 eraldatud.

Proovin ka välisühenduse toimist pingi abil:

# ping -c 3 ftp.linux.ee
PING noa.linux.ee (195.222.16.154) 56(84) bytes of data.
64 bytes from noa.linux.ee (195.222.16.154): icmp_seq=1 ttl=55 time=30.0 ms
64 bytes from noa.linux.ee (195.222.16.154): icmp_seq=2 ttl=55 time=0.000 ms
64 bytes from noa.linux.ee (195.222.16.154): icmp_seq=3 ttl=55 time=0.000 ms

--- noa.linux.ee ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.000/10.000/30.001/14.142 ms

Ka välisühendusega on kõik korras.

Kõvaketta jaotamine.

Nagu eelnevalt sai mainitud, on mu läpakal 160 GB kõvaketas. Pool sellest, ehk siis 80 GB, on Windowsi kasutuses ning Gentoo Linuxi jaoks jääb teine 80 GB-ne pool. Vaja läheb vähemalt kolme osa: boot, swap ning root. Tegelikult on plaanis kasutada eraldi jaotisi ka /usr, /var, /opt ning /home tarvis.

Käivitan fdisk-i ning vaatan olemasolevaid kõvaketta jaotisi käsuga p. Hetkel on siin ainult Windowsi jaotis, mida ma ei näpi:

# fdisk /dev/hda
Command (m for help): p
Disk /dev/hda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0de90de8

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1        9728    78140128+   7  HPFS/NTFS

Loon oma esimese jaotise, milleks on boot jaotis. Sisestan n uue jaotise loomiseks, siis p primary jaotiseks, edasi 2. Kui fdisk küsib esimest silindrit, vajutan ENTER klahvi vaikimisi väärtuse kasutamiseks. Viimase silindri küsimuse kohal sisestan +32M 32 MB-se jaotise loomiseks:

Command (m for help): n
Command action
  e   extended
  p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (9729-19457, default 9729): (vajutan ENTER)
Using default value 9729
Last cylinder or +size or +sizeM or +sizeK (9729-19457, default 19457): +32M

Uuesti p käsku kasutades peaks nüüdd tabel näitama kahte jaotist:

Command (m for help): p
Disk /dev/hda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0de90de8

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1        9728    78140128+   7  HPFS/NTFS
/dev/hda2            9729        9733       40162+  83  Linux

Boot jaotis tuleb teha laaditavaks ning Windows jaotiselt see lipp maha võtta, seega sisestan a ning 1. Seejärel uuesti a ning 2. Uuesti p käsku kasutades peaks siin olema * ainult /dev/hda2 järel.

Järgmiseks loon swap jaotise. Sisestan n uue jaotise loomiseks, p primary jaotiseks, numbriks annan 3. Esimeseks silindriks kasutan vaikimisi väärtust ning viimase silindri küsimusele vastan +1G. Vaikimisi on kõik uued jaotised tüübinumbriga 83 ehk siis Linuxi jaotised. Swap jaotisel tuleb tüüp muuta, seega anna käsu t, sisestan 3 jaotise numbriks ning 82 jaotise tüübiks. Käsuga p saan ette sellise tabeli:

Command (m for help): p
Disk /dev/hda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0de90de8

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1        9728    78140128+   7  HPFS/NTFS
/dev/hda2   *        9729        9733       40162+  83  Linux
/dev/hda3            9734        9856      987997+  82  Linux swap / Solaris

Kõvakettal saab olla ainult 4 primary jaotist, millest 3 on nüüdseks juba kasutusel. Kuna mul on plaanis lisada veel vähemalt 3 jaotist, teen kogu ülejäänud vaba kettaruumi Extended jaotiseks. Sisestan n ning siis e Extended jaotise loomiseks. Nii esimese kui ka viimase silindri küsimusele vastan ENTER klahvi vajutusega. p käsuga peaks tabel nüüd välja nägema selline:

Command (m for help): p
Disk /dev/hda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0de90de8

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1        9728    78140128+   7  HPFS/NTFS
/dev/hda2   *        9729        9733       40162+  83  Linux
/dev/hda3            9734        9856      987997+  82  Linux swap / Solaris
/dev/hda4            9857       19457    77120032+   5  Extended

Järgmine jaotis on väike FAT32 jaotis, mille abil on lihtne jagada faile Windowsi ja Linuxi vahel. Selle loomiseks sisestan n. Esimeseks silindriks kasutan vaikimisi väärtust ning viimaseks silindriks +2G 2GB-se jaotise loomiseks. Käsuga t muudan selle jaotise tüübiks W95 FAT32 (tüüp b). Jaotiste tabel on nüüd järgmine:

Command (m for help): p
Disk /dev/hda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0de90de8

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1        9728    78140128+   7  HPFS/NTFS
/dev/hda2   *        9729        9733       40162+  83  Linux
/dev/hda3            9734        9856      987997+  82  Linux swap / Solaris
/dev/hda4            9857       19457    77120032+   5  Extended
/dev/hda5            9857       10100     1959898+   b  W95 FAT32

Järgnevalt loon väikese root jaotise. Kuna mul on plaanis kasutada eraldi loogilisi jaotisi /home, /usr, /var ning /opt jaoks, piisab root jaotisele täiesti 1 GB-st. n, ENTER esimeks silindriks ning +1G viimaseks silindriks.

Viimane jaotis võtab enda alla kogu allesjäänud ruumi kettal. Selleks sisestan n ning kasutan vaikimisi väärtusi nii esimesele kui viimasele silindrile. Jaotise tüübiks sisestan t käsuga 8e ehk Linux LVM. See jaotis jääb loogiliste jaotiste tarvis. p käsk peaks nüüd näitama lõplikku jaotiste tabelit:

Command (m for help): p
Disk /dev/hda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0de90de8

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1        9728    78140128+   7  HPFS/NTFS
/dev/hda2   *        9729        9733       40162+  83  Linux
/dev/hda3            9734        9856      987997+  82  Linux swap / Solaris
/dev/hda4            9857       19457    77120032+   5  Extended
/dev/hda5            9857       10100     1959898+   b  W95 FAT32
/dev/hda6           10101       10223      987966   83  Linux
/dev/hda7           10224       19457    74172073+  8e  Linux LVM

Füüsilised kõvaketta jaotised on sellega valmis ning kirjutan uue tabeli kettale käsuga w. NB! See on see hetk, mil kõvakettal olev info tegelikult muudetakse ja endine info kõvakettal läheb kaotsi. Mina kontrollisin mitu korda üle, et kõik vajalikud failid olid eelnevalt serverisse kopeeritud.

Loogilised jaotised (LVM2).

Loogilised jaotised on sarnased tegelikele kõvaketta jaotistele ning pesitsevad ühel või mitmel füüsilisel kõvaketta jaotisel. Seejuures võivad loogilised jaotised paikneda mitmel füüsilisel jaotisel või isegi mitmel kõvakettal. Nende suurust on võimalik hiljem vastavalt vajadusele muuta, kui näiteks /home jaotis jääb liiga väikseks. Läpaka puhul mitteoluline, aga suurel arvutil saab näiteks lisada teise kõvaketta ning loogilise jaotise laiendada uuele kettale. Õige failisüsteemi puhul on loogiliste jaotiste suuruse muutmine võimalik "kuumalt" ning isegi arvuti taaskäivitamine pole vajalik.

Esmalt muudan LVM konfiguratsioonifaili nii, et see kasutaks ainult neid kõvakettaid, mis mul loogiliste jaotiste jaoks on eraldatud:

# nano -w /etc/lvm/lvm.conf

Otsin üles rea filter = [ "a/.*/" ] ning muudan selle järgmiselt:

filter = [ "a|/dev/hda|", "r/.*/" ]

Muudetud faili salvestamiseks vajutan klaviatuuril CTRL+O, siis ENTER failinime kinnitamiseks ning lõpuks CTRL+X väljumiseks.

Järgnevad kaks käsku on vajaliku juhul, kui installeerimine jäi pooleli ning on vaja üles leida olemasolevad loogilised grupid:

# vgscan
  Reading all physical volumes.  This may take a while...
# vgchange -a y

Seejärel valmistan füüsilised jaotised ette:

# pvcreate /dev/hda7
  Physical volume "/dev/hda7" successfully created

Loon loogiliste jaotiste grupi. Loogiliste jaotiste grupp on mitme füüsilise jaotise baasil loodud grupp:

# vgcreate vg /dev/hda7
  Volume group "vg" successfully created

Siin vg on uue loogiliste jaotiste grupi nimi. Kasutades seda gruppi loon eelpool mainitud loogilised jaotised:

# lvcreate -L15G -nusr vg
  Logical volume "usr" created
# lvcreate -L10G -nvar vg
  Logical volume "var" created
# lvcreate -L5G -nopt vg
  Logical volume "opt" created
# lvcreate -L25G -nhome vg
  Logical volume "home" created

Need uued jaotised peaksid nüüd /dev/vg all olema nähtavad:

# ls /dev/vg
home  opt  usr  var

Failisüsteemide loomine.

Järgmiseks loon oma uutel kõvaketta jaotistel failisüsteemid. Mul on kõvakettal kaheksa jaotist:

boot    /dev/hda2
swap    /dev/hda3
shared  /dev/hda5
root    /dev/hda6
usr     /dev/vg/usr
var     /dev/vg/var
opt     /dev/vg/opt
home    /dev/vg/home

Boot ja root jaotistele teen ext2 failisüsteemi, kuna neid ma hiljem peaaegu et ei puutu ning zhurnaaliga failisüsteem nagu ext3 ei annaks midagi juurde:

# mke2fs /dev/hda2
# mke2fs /dev/hda6

Shared jaotis on failide jagamiseks Windowsi ning Linuxi vahel ning selleks kasutan FAT32 failisüsteemi:

# mkdosfs -vF 32 /dev/hda5

Vormistan swap jaotise ning võtan selle kasutusse:

# mkswap /dev/hda3
Setting up swapspace version 1, size = 1011703 kB
no label, UUID=76c6e683-a0be-49a9-a50e-6848892db628
# swapon /dev/hda3

Ülejäänud jaotiste puhul kasutan xfs failisüsteemi, mis on minu praeguseks lemmikuks number 1. Oluliseks põhjuseks on see, et xfs failisüsteemi suurust on võimalik "kuumalt" muuta.

# mkfs.xfs /dev/vg/usr
# mkfs.xfs /dev/vg/var
# mkfs.xfs /dev/vg/opt
# mkfs.xfs /dev/vg/home

Jaotiste monteerimine.

Kuna jaotised ning failisüsteemid on loodud, on aeg need külge monteerida:

# mount /dev/hda6 /mnt/gentoo
# mkdir /mnt/gentoo/{boot,var,usr,opt,home}
# mount /dev/hda2 /mnt/gentoo/boot
# mount /dev/vg/usr /mnt/gentoo/usr
# mount /dev/vg/var /mnt/gentoo/var
# mount /dev/vg/opt /mnt/gentoo/opt
# mount /dev/vg/home /mnt/gentoo/home

Kella sättimine.

Kell peab olema õige enne, kui paigaldamisega saab jätkata. Mul on mitu korda tulnud ette vigu paigaldamisel, mis olid just valest kellaajast tingitud.

Kui Windows seab arvuti kella kohaliku aja järgi, siis Linuxis on soovitatav seada arvuti kell Greenwichi ajale (tänapäeval nimetatakse ka UTC ajaks). Ehk siis talvel tuleks kell sättida -2 ja suvel -3 tundi Eesti ajaga võrreldes.

Kellaaeg tuleb anda kujul MMDDhhmmYYYY (kuu, päev, tunnid, minutid, aasta). 6. märtsil 2009 kell 17:00 (15:00 UTC) :

# date 030615002009

Gentoo paigaldusfailide allalaadimine.

Järgmiseks laadin kohalikust ftp.linux.ee serverist alla Gentoo paigaldusfaili stage3-i686-2008.0.tar.bz2. Esmalt liigun külgemonteeritud kõvaketta root jaotisele:

# cd /mnt/gentoo

Ning siis laadin nii paigaldusfaili kui ka MD5 kontrollsumma koos sisufailiga. Paigaldusfail on 112 MB, nii et aeglase internetiühenduse korral kulub selleks veidi aega:

# wget http://ftp.linux.ee/pub/gentoo/distfiles/releases/x86/current/stages/stage3-i686-2008.0.tar.bz2
# wget http://ftp.linux.ee/pub/gentoo/distfiles/releases/x86/current/stages/stage3-i686-2008.0.tar.bz2.CONTENTS
# wget http://ftp.linux.ee/pub/gentoo/distfiles/releases/x86/current/stages/stage3-i686-2008.0.tar.bz2.DIGESTS

Kontrollin, et allalaaditud failid oleksis vigadeta:

# md5sum -c stage3-i686-2008.0.tar.bz2.DIGEST
./stage3-i686-2008.0.tar.bz2: OK
./stage3-i686-2008.0.tar.bz2.CONTENTS: OK

Ning seejärel pakin selle lahti. Lahtipakkimine võtab ka veidi aega:

# tar -xvjpf stage3-i686-2008.0.tar.bz2

Kuna mul on root jaotis väga väike (1 GB), kustutan need allalaaditud failid peale lahtipakkimist ära:

# rm stage3-i686-2008.0.tar.bz2*

Portage paigaldamine.

http://ftp.linux.ee/pub/gentoo/distfiles/snapshots/ kataloogis on terve hulk viimaseid portage faile. Need uuenevad iga päev ja nende hulgast tuleks leida see kõige uuem.

Veendun, et olen ikka /mnt/gentoo kataloogis:

# pwd
/mnt/gentoo>

Seejärel laadin alla portage faili (34 MB) koos MD5 kontrollsummaga:

# wget http://ftp.linux.ee/pub/gentoo/distfiles/snapshots/portage-latest.tar.bz2
# wget http://ftp.linux.ee/pub/gentoo/distfiles/snapshots/portage-latest.tar.bz2.md5sum

Kontrollin, et fail ei oleks katkine:

# md5sum -c portage-latest.tar.bz2.md5sum

Ning siis pakin lahti. Kuigi see arhiivifail ise on väiksem, on siin palju pisikesi faile ning nende lahtipakkimine ei lähe kiiresti:

# tar -xvf portage-latest.tar.bz2 -C /mnt/gentoo/usr

Lahtipakkimise järel kustutan arhiivifaili:

# portage-latest.tar.bz2*

Kompilaatori võtmete seadmine.

Nüüd on aeg panna paika kompilaatori võtmed, mis teevad sellest Gentoo Linuxist just selle ainukese ja õige Linuxi antud arvutile. Selleks tuleb muuta make.conf nimelist faili /mnt/gentoo/etc kataloogis. Baassüsteem paigaldamisel piirdun ainult nende võtmetega, mis selleks hädavajalikud ning võtan põhjalikuma võtmete seadmise graafilise liidese paigaldamisel.

# nano -w /mnt/gentoo/etc/make.conf
USE="-X"
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"
MAKEOPTS="-j3"
GENTOO_MIRRORS="http://ftp.linux.ee/pub/gentoo/distfiles/"
AUTOCLEAN="yes"

Esmalt muutuja nimega USE. Selle abil pannakse paika, millised omadused programmidel saavad olema, nagu näiteks DVD lugeja tugi, graafiline kasutajaliides jne. Selle muutuja abil saab palju huvitavaid asju ära teha ning kahjuks ka oma süsteemi edukalt tuksi keerata. USE võtmete täieliku kirjelduse leiab siit: http://www.gentoo.org/dyn/use-index.xml.

USE="-X"

Teine oluline muutuja on CHOST. See määrab ära süsteemi arhitektuuri ning peaks vaikimisi make.conf failis olema juba õige.

CHOST="i686-pc-linux-gnu"

Kolmas muutuja antud failis on CFLAGS. Selle rolliks on anda kompilaatorile ette õiged võtmed ja just need võtmed optimiseerivad kompileerimise protsessi just antud protessori tarvis. Kui kompileerimine ei õnnestu ja Gentoo loobib kummalisi vigu, on põhjust need võtmed uuesti üle vaadata ning otsida vigu ning näpukaid. GNU kompilaatori GCC võtmete kirjeldused leiab GNU koduleheküljelt http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/.

-march=prescottoptimeerib koodi uutele Pentium4 protsessoritele MMX, SSE, SSE2 ja SSE3 käskudega.
-O2lülitab siise 2. taseme optimiseerimise.
-pipepeaks kompileerimise protsessi mõningal määral kiirendama.
-fomit-frame-pointerei kasuta frame pointerit juhul, kui seda pole vaja.

CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer"

Edasi, CXXFLAGS on soovitav panna võrduma CFLAGS muutujaga. CXXFLAGS defineerib võtmed C++ kompilaatorile.

CXXFLAGS="${CFLAGS}"

MAKEOPTS muutuja võimaldab anda ette võtmeid make programmile ning "-j3" võtmega luban kuni kolm paralleelset kompileerimise protsessi. Soovitatakse kasutada väärtust, mis on ühe võrra suurem tuumade arvust.

Järgmine muutuja on GENTOO_MIRRORS, mis näitab, kust Gentoo oma komponendid ning nende uued versiooni laadib. Siin on kasulik näidata kohalikku Eestis asuvat serverit:

GENTOO_MIRRORS="http://ftp.linux.ee/pub/gentoo/distfiles/"

AUTOCLEAN="yes"

Uue versiooni installeerimisel kustutatakse vanad versiooni.

Uude keskkonda sisenemine.

Enne uude keskkonda sisenemist tuleb kopeerida olemasolevad nimeserveri seaded:

# cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf

Siis monteerida /proc ning /dev failisüsteemid:

# mount -t proc none /mnt/gentoo/proc
# mount -o bind /dev /mnt/gentoo/dev

Ja lõpuks uude keskkonda sisenemine:

# chroot /mnt/gentoo /bin/bash
# env-update
>>> Regenerating /etc/ld.so.cache...
# source /etc/profile

Portage uuendamine.

Järgnevalt sünkroniseerin portage andmebaasi. Viimane portage fail sai küll eelnevalt alla laaditud ja lahti pakitud, aga andmebaasid võivad olla vahepeal uuenenud ja ma tahan ju neid kõige uuemaid ning värskemaid versioone:

# emerge --sync

See protsess võib üsna palju aega võtta. Kuna ma sain hoiatuse, et portage vajab uuendamist, teen seda nüüd:

# emerge --oneshot portage

Kataloogis /etc uuendamist vajavad konfiguratsioonifailid uuendan käsuga etc-update:

# etc-update
Scanning Configuration files...
Automerging trivial changes in: /etc/logrotate.d/elog-save-summary
Exiting: Nothing left to do; exiting. :)

Lokaliseerimine.

Mul on plaanis kasutada ainult inglise ning eesti keelt, mille määran ära failis /etc/locale.gen:

# nano -w /etc/locale.gen

en_US ISO-8859-1
en_US.UTF-8 UTF-8
et_EE ISO-8859-15
et_EE.UTF-8 UTF-8

# locale-gen
 * Generating 4 locales (this might take a while) with 1 jobs
 *  (1/4) Generating en_US.ISO-8859-1 ...                                                      [ ok ]
 *  (2/4) Generating en_US.UTF-8 ...                                                           [ ok ]
 *  (3/4) Generating et_EE.ISO-8859-15 ...                                                     [ ok ]
 *  (4/4) Generating et_EE.UTF-8 ...                                                           [ ok ]
 * Generation complete

Süsteemi kompileerimine.

Esmane süsteem on pärit stage3 arhiivifailist, mis on tunduvalt vanem, kui hetkel kasutuses olevad versioonid. Seetõttu värskendan kogu süsteemi praegu, kus pakkide arv on veel väike ning ajakulu kõige väiksem. Samuti ei pea ma praegu eriti hoolima konfliktidest ning konfiguratsioonifailide muudatustest.

Enne tegelikku uuendamist teesklen uuendamist nägemaks, millised pakid uuendatatakse ning samuti heidan pilgu peale USE lippudele:

# emerge -pv --emptytree world
...
[blocks b     ] <sys-fs/e2fsprogs-1.41 ("<sys-fs/e2fsprogs-1.41" is blocking sys-libs/e2fsprogs-libs-1.41.3-r1)
[uninstall    ] sys-libs/com_err-1.40.8  USE="nls"
[blocks b     ] sys-libs/com_err ("sys-libs/com_err" is blocking sys-libs/e2fsprogs-libs-1.41.3-r1)
[uninstall    ] sys-libs/ss-1.40.8  USE="nls"
[blocks b     ] sys-libs/ss ("sys-libs/ss" is blocking sys-libs/e2fsprogs-libs-1.41.3-r1)

Esimese asjana jäävad silma mõned pakid, mis blokeerivad uute versioonide paigaldamist. Praeguses etapis on suht turvaline need lihtsalt eemaldada ning siis uuesti proovida:

# emerge -C sys-fs/e2fsprogs sys-libs/com_err sys-libs/ss
# emerge -pv --emptytree world
...
[ebuild   R   ] sys-apps/tcp-wrappers-7.6-r8  USE="ipv6" 113 kB
...
[ebuild   R   ] sys-devel/gcc-4.1.2  USE="fortran mudflap nls (-altivec) -bootstrap -build -d -doc -gcj -gtk (-hardened)
-ip28 -ip32r10k -libffi% (-multilib) -multislot (-n32) (-n64) -nocxx -objc -objc++ -objc-gc -test -vanilla" 38,848 kB
...

USE lippudest ei meeldi mulle ipv6 ning fortran. Avan oma make.conf faili ning keelan seal need lipud. Samas lisan xattr ning xinetd lipud. Kõikide USE lippude kirjeldusteks ava http://www.gentoo.org/dyn/use-index.xml.

# nano -w /etc/make.conf
USE="-X -fortran -ipv6 xattr xinetd"

Juhul, kui gcc või libc versioonid peaksid olema muutunud, tuleks enne süsteemi kompileerimist eraldi kompileerida gcc ning glibc. Selle kohta on palju erinevaid arvamusi, kuidas gcc ning glibc uuendamine peaks käima ning kui mitu korda neid kompileerida tuleks. Minule on siiani piisanud ühest korrast, aga kes soovib, võib ka kaks või rohkem kordi kompileerida.

# emerge -v gcc glibc

Kui kõik blokeeringud on likvideeritud ning USE lipud paigas, alustan pikka ning vaevarikast süsteemi kompileerimist. Leidke endale sobiv tegevus selleks ajaks, mina lähen Tehnika Maailma lugema.

# emerge -v --emptytree world

Paar tundi hiljem on kompileerimine lõpetatud. Osad konfiguratsioonifailid vajavad uuendamist ning teen seda käsuga etc-update. Antud hetkel ei hooli me vanadest failidest ning -5 asendab kõik vanad failid pikemalt lobisemata uute versioonidega. Uuendame ka keskkonna muutujad ning võtame need kasutusse:

# etc-update
Scanning Configuration files...
Automerging trivial changes in: /etc/security/limits.conf
Automerging trivial changes in: /etc/nanorc
Automerging trivial changes in: /etc/ssh/ssh_config
Automerging trivial changes in: /etc/ssh/sshd_config
The following is the list of files which need updating, each
configuration file is followed by a list of possible replacement files.
 1) /etc/bash/bashrc (1)
 2) /etc/ca-certificates.conf (1)
 3) /etc/init.d/crypto-loop (1)
 4) /etc/pam.d/login (1)
 5) /etc/login.defs (1)
 6) /etc/man.conf (1)
 7) /etc/ssh/moduli (1)
 8) /etc/security/namespace.init (1)
 9) /etc/pam.d/sshd (1)
10) /etc/udev/udev.conf (1)
11) /etc/wgetrc (1)
Please select a file to edit by entering the corresponding number.
              (don't use -3, -5, -7 or -9 if you're unsure what to do)
              (-1 to exit) (-3 to auto merge all remaining files)
                           (-5 to auto-merge AND not use 'mv -i')
                           (-7 to discard all updates)
                           (-9 to discard all updates AND not use 'rm -i'): -5
# env-update
>>> Regenerating /etc/ld.so.cache...
# source /etc/profile

Kerneli allalaadimine.

Kui eelnevalt sai arvuti kell pandud UTC aja peale, siis nüüd sätin ajatsooni paika näitamaks Eesti kohalikku aega:

# cp /usr/share/zoneinfo/Europe/Tallinn /etc/localtime

Kuna sellel masinal kasutan ma ka Windowsi, tuleb kell panna kohaliku aja peale:

# nano -w /etc/conf.d/clock
CLOCK="local"
TIMEZONE="Europe/Tallinn"

Järgnevalt laadin alla kerneli lähtekoodid:

# USE="symlink" emerge -v gentoo-sources

symlink võtme kasutamine tekitab automaatselt sümboolse lingi /usr/src/linux sellele kerneli versioonile. Soovi korral võib selle võtme ka make.conf faili lisada.

Kerneli konfigureerimine.

Nüüd asun oma kernelit konfigureerima. Kernelisse tuleb lisada tugi kõikidele vajaminevatele teenustele ning rauale, mis mu läpakas on. Teenuste ning raua tugi võib olla kompileeritud otse kernelisse või siis moodulitena, mis laaditakse kernelisse alglaadimiel.

Enne kerneli konfigureerimist heidan pilgu peale oma läpaka rauale. Selles on abiks lspci nimeline käsk. Süsteemi kompileerimisel seda automaatselt ei paigaldatud ning selle kasutamiseks pean paigaldama pciutils nimelise paki:

# emerge -v pciutils
# lspci
00:00.0 Host bridge: Intel Corporation Mobile 945GM/PM/GMS, 943/940GML and 945GT Express Memory Controller Hub (rev 03)
00:01.0 PCI bridge: Intel Corporation Mobile 945GM/PM/GMS, 943/940GML and 945GT Express PCI Express Root Port (rev 03)
00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 01)
00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 01)
00:1c.1 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 2 (rev 01)
00:1c.2 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 3 (rev 01)
00:1c.3 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 4 (rev 01)
00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #1 (rev 01)
00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #2 (rev 01)
00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 (rev 01)
00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #4 (rev 01)
00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e1)
00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 01)
00:1f.2 IDE interface: Intel Corporation 82801GBM/GHM (ICH7 Family) SATA IDE Controller (rev 01)
00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 01)
01:00.0 VGA compatible controller: nVidia Corporation G72M [Quadro NVS 110M/GeForce Go 7300] (rev a1)
03:01.0 CardBus bridge: O2 Micro, Inc. Cardbus bridge (rev 21)
03:01.4 FireWire (IEEE 1394): O2 Micro, Inc. Firewire (IEEE 1394) (rev 02)
09:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5752 Gigabit Ethernet PCI Express (rev 02)
0c:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG Network Connection (rev 02)

Mul on sellele masinale sobiv kerneli konfiguratsioon varasemast ajast juba olemas ning aja kokkuhoiuks kasutan selle ära kopeerides vana konfiguratsioonifaili /usr/src/linux kataloogi nimega .config. Kes soovib, võib seda sama konfiguratsioonifaili alustuseks kasutada. Kes aga soovib alustada puhtalt lehelt, jätku järgmine samm vahele. Hoiatus! See kerneli konfiguratsioon on minu läpaka jaoks ning teistsuguse riistvara puhul ei toimi.

# wget https://www.vaikene.ee/enar/config-20090307
# cp config-20090307 /usr/src/linux/.config
# cd /usr/src/linux
# make oldconfig

make oldconfig laadib vana konfiguratsioonifaili ning küsib kinnitust nende võtmete puhul, mis on kas muutunud või värskelt kernelile lisatud. Alati tasub ? abi kasutada ning lugeda, mis kerneli progejad nende võtmete kohta kirjutavad. Kui tundub, et antud võtit pole vaja ning abiinfos on kah kirjas "If unsure, say N", siis on antud võtme keelamine üldjuhul turvaline. Kui aga on kirjas "If unsure, say Y", siis soovitan antud võtme ikka lubada. Osade teenuste või seadmemoodulite puhul on väljapääsuks ka moodulina (m) kompileerimine.

Uus konfiguratsioonifail valmis, vaatan kerneli konfiguratsiooni üle:

# make menuconfig

Help, Help ning veelkord Help. Võib ka ? klahvi kasutada. Kerneli progejad on iga võtme kohta midagi kirjutanud, sealhulgas ka soovitused mida teha, kui ei suuda otsustada. Tasub kõik võtmed läbi jalutada, vajutada ? klahvil abiinfo lugemiseks ning siis otsustada, kas see lubada, keelata või hoopis moodulina kompileerida.

General setup --->
(-20090307) Local version - append to kernel release

Mul on kombeks lisada kernelile oma versiooninumber, milleks on kompileerimise kuupäev, antud juhul siis 7. märts 2009. Nii on mul lihtne eristada sama kerneli mitut versiooni.

General setup --->
<*> Kernel .config support
[*]   Enable access to .config through /proc/config.gz

Võimaldab mul näha hetkel jooksva kerneli konfiguratsiooni.

Processor type and features --->
Processor family (Core 2/newer Xeon)

Valin oma läpaka protsesori.

Processor type and features --->
Preemption Model (Voluntary Kernel Preemption (Desktop))

Selle võtmega loovutab kernel protsessori tihedamalt kasutajaprogrammidele, mis mulle läpaka puhul sobib rohkem. Vastasel juhul töötaks kernel küll kiiremini, kuid koormuse korral tunduks arvuti mulle kui kasutajale uimasem.

Power management options --->
[*]  ACPI (Advanced Configuration and Power Interface) Support --->)
<M>   AC Adapter
<M>   Battery
<M>   Button
<M>   Video
<M>   Fan
<M>   Processor
<M>     Thermal Zone

Kõik ACPI komponendid kompileerin moodulitena.

Power management options --->
  CPU Frequency scaling --->
[*] CPU Frequency scaling
<M> 'powersave' governor
<M> 'userspace' governor for userspace frequency scaling
<M> 'ondemand' cpufreq policy governor
<M> 'conservative' cpufreq governor
<M> ACPI Processor P-States driver
<M> Intel Speedstep on ICH-M chipsets (ioport interface)

Luban protsessori töökiiruse muutmise ning lisan kõik moodulid. Eks hiljem näe, millised neist just vajalikuks osutuvad. Läpakal on protsessori töökiiruse muutmine vastavalt vajadusele abiks aku kasutamise optimiseerimiseks. Protsessor pannakse väiksema sagedusega tiksuma ning alles koormuse kasvades suurendatakse sagedust.

Bus options (PCI etc.) --->
  PCCARD (PCMCIA/CardBus) support --->
<*> PCCard (PCMCIA/CardBus) spport
<*> CardBus yenta-compatible bridge support

Kompileerin PCMCIA toe otse kernelisse sisse, kuna läpakad kasutavad PCMCIA-d. Samuti kompileerin kernelisse siise CardBus yenta-compatible bridge toe.

[*] Networking support --->
     Networking options --->
[*] Packet socket
<*> Unix domain sockets
[*] TCP/IP networking

Ilma võrguta on tänapäeval raske hakkama saada. Unix domain sockets on hädavajalik isegi juhul, kui masinat mitte kunagi võrku ei ühendata.

Device Drivers --->
  Block devices --->
<*> Loopback device support
<M>   Cryptoloop Support

Need kaks moodulit võimaldavad mul luua krüpteeritud failisüsteemi, milles on hea hoida andmeid nagu pangakaartide koodid ja muu selline tundlik informatsioon. Kõik selles failisüsteemis olevad andmed on krüpteeritud ning ligipääs neile kaitstud parooliga (koera nimi ei ole hea ja turvaline parool :-).

Device Drivers --->
<*> Serial ATA (prod) and Parallel ATA (experimental) drivers --->
[*] ATA ACPI Support
<*> AHCI SATA support
[*] ATA SFF support
<*>   Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support

Kompileerin oma SATA ketta toe kernelisse.

[*] Multiple devices driver support (RAID and LVM) --->
<*> Device mapper support

Vajalik, kuna osad jaotised said tehtud LVM2 abil.

[*] Network device support --->
[*]   Ethernet (1000 Mbit) --->
<M>     Broadcom Tigon3 support

Võrgukaardi toe kompileerin moodulina.

Device Drivers --->
  Input device support --->
<M> Event interface

Event interface on alternatiivne moodus hiirtega töötamisel. Läpakatel on tavaliselt nn. touchpad hiir, mille seadistamiseks on event interface vajalik. Kompileerin selle siiski moodulina ning laadin kui vaja.

Device Drivers --->
<*  Sound card support --->
<M>    Advanced Linux Sound Architecture --->
      PCI devices --->
<M> Intel HD Audio

Kompileerin oma häälekaardi toe kerneli moodulina.

Device Drivers --->
[*] HID Devices --->
<* USB Human Interface Device (full HID) support

Enamus tänapäeva hiirtest ning klaveritest kasutab USB-d.

Device Drivers --->
[*]  USB support --->
<*>    EHCI HCD (USB 2.0) support
<*>    UHCI HCD (most Intel and VIA) support

Ei saa me tänapäeval ilma USB-ta hakkama.

File systems --->
<*> Second extended fs support
<*> Ext3 journaling file system support
<*> XFS filesystem support

Mulle olulised failisüsteemid kompileerin otse kernelisse. Moodulitena võib lisada nende failisüsteemide toetuse, millele ei ole vaja ligi pääseda alglaadimise ajal.

Kerneli kompileerimine.

Sellega ongi kerneli konfigureerimine tehtud. Väljun konfiguratsioonist salvestades muudetud parameetrid ning siis kompileerin kerneli käsuga make ning siis paigaldan kerneli moodulid käsiga make modules_install:

# make
# make modules_install

Nüüd paigaldan kerneli boot jaotisesse ning kopeerin ka konfiguratsioonifaili sinna:

# cp arch/i386/boot/bzImage /boot/kernel-2.6.27-r8-20090307
# cp System.map /boot/System.map-2.6.27-r8-20090307
# cp .config /boot/config-2.6.27-r8-20090307

See tehtud, tuleb veel lisada kerneli moodulid, mida tahan igal käivitamisel laadida, vastavasse konfiguratsioonifaili. Eelnevalt manan endale ette nimekirja kõikide moodulite nimedest, et vajalikud üles leida:

# find /lib/modules/2.6.27-gentoo-r8-20090307/ -type f -iname *.o -or -iname *.ko

Käivitamisel laaditavate moodulite nimekiri tuleb sisestada kataloogis /etc/modules.autoload.d olevasse faili kernel-2.6:

# nano -w /etc/modules.autoload.d/kernel-2.6
ac
battery
button
processor
thermal
acpi-cpufreq
cpufreq-conservative
cpufreq-ondemand
cpufreq-powersave
bluetooth
aes
cryptoloop
usbserial

Peale selle faili muutmist tuleb ka moodulite andmebaas uuendada:

# update-modules

Failisüsteemi informatsioon.

Järgnevalt loon /etc/fstab konfiguratsioonifaili, kus on ära määratud failisüsteemi ühenduspunktid. Antud kirjutise alguses said tehtud kõvaketta jaotised /dev/hda2 jne. Paraku ei pruugi need uue kerneliga jääda samaks ning tegelikult tean ma ette, et minu SATA kõvaketta jaotised uued kerneliga laadides on hoopis /dev/sda2 jne.

# nano -w /etc/fstab
/dev/sda2               /boot           ext2            noauto,noatime       1 1
/dev/sda6               /               ext2            noatime              0 1
/dev/vg/usr             /usr            xfs             noatime              0 2
/dev/vg/var             /var            xfs             noatime              0 2
/dev/vg/opt             /opt            xfs             noatime              0 2
/dev/vg/home            /home           xfs             noatime              0 2
/dev/sda3               none            swap            sw                   0 0
tmpfs                   /tmp            tmpfs           defaults,nosuid,size=1024M,mode=1777    0 0

Esialgses näitefailis asendan BOOT, ROOT ning SWAP tegelike kõvaketta jaotistega: BOOT jaotiseks /dev/sda2, ROOT jaotiseks /dev/sda5 ning SWAP jaotiseks /dev/sda3. Lisan ka kõik teised jaotises, nagu /usr, /var, /opt ning /home. /tmp kataloogi jaoks kasutan tmpfs failisüsteemi suurusega kuni 1 GB, mis luuakse mälus ning kiirendab ajutiste failide töötlemist.

Arvutivõrgu seadistamine.

Järgmiseks annan oma arvutile võrgus kasutatava nime ning määran ka domeeni. Maksuametil on kuuldavasti masinad nimedega "maasikas" ning "vaarikas". Arvan, et "mustikas" oleks sobiv nimi minu masinale:

# nano -w /etc/conf.d/hostname
HOSTNAME="mustikas"

# nano -w /etc/conf.d/net
nis_domain_lo="vaikene.net"

Antud masinal saab olema kaks võrguühendust: traadiga võrguadapter ning traadita adapter. Hetkel jätan traadita võrgu kõrvale ning sean ainult traadiga võrguadapteri kasutama koduvõrgu DHCP serverit IP aadressi saamiseks:

# nano -w /etc/conf.d/net
config_eth0=( "dhcp" )

Lõpuks muudan faili /etc/hosts ning lisan sinna oma arvuti täieliku võrgunime ning lühinime. Nimed antud real peavad olema just sellises järjekorras:

# nano -w /etc/hosts
127.0.0.1   mustikas.vaikene.net mustikas localhost

Süsteemi informatsioon.

Nüüd määran root kasutaja parooli. Kasutage ikka keerulisi paroole, kus on väikesed ning suured tähed segamini numbritega:

# passwd
New UNIX password:********
Retype new UNIX password:********
passwd: password updated successfully

Süsteemne tarkvara.

Paigaldan veel mõned tarvilikud süsteemse tarkvara paketid. Esmalt süsteemne logija, milleks mina kasutan syslog-ng nimelist:

# emerge -v syslog-ng
# rc-update add syslog-ng default

Siis Cron-i deemon vixie-cron, mis käivitab regulaarseid planeeritud töid:

# emerge -v vixie-cron
# rc-update add vixie-cron default

Vältimaks süsteemsete logide liiga suureks kasvamist, paigaldan logrotate:

# emerge -v logrotate

XFS failisüsteemi tarbeks paigaldan xfsprogs:

# emerge -v xfsprogs

Kuna ma kasutan loogilisi kettajaotisi ning LVM2-te, siis paigaldan ka LVM2:

# emerge -v lvm2

Ning võrguühenduse toimimiseks ning dünaamilise IP aadressi kasutamiseks DHCP kliendi:

# emerge -v dhcpcd

Alglaadija.

Linuxi kerneli laadimiseks on vaja alglaadijat ehk bootloader-t. Minu valikuks on grub, mille ka paigaldan:

# emerge -v grub

Seejärel loon alglaadija konfiguratsioonifaili /boot/grub/grub.conf:

# nano -w /boot/grub/grub.conf
default 1
timeout 10

title=Windows XP
rootnoverify (hd0,0)
makeactive
chainloader +1

title=Linux 2.6.27-r8 (7-MAR-2009)
root (hd0,1)
kernel /boot/kernel-2.6.27-r8-20090307 root=/dev/sda6 pci=assign-busses vga=0x31B

Siin default 1 näitab, et vaikimisi laaditakse teine valik (indeksi väärtus 0). Edasi timeout 10 tähendab, et vaikimisi valik laaditakse 10 sekundi järel.

Linuxi valik algab reaga title=Linux 2.6.27-r8 (7-MAR-2009). Seda rida näidatakse alglaadija menüüs ning võin siia kirjutada mida iganes. Edasi, root (hd0,1) tähendab, et kernel on esimese kõvaketta teisel jaotisel (minu boot jaotis), kernel /boot/kernel-2.6.27-r8-20090307 root=/dev/sda6 pci=assign-busses vga=0x31B aga täpsustab laaditava kerneli ning annab sellele ette parameetrid. Oluline on root=/dev/sda6 õieti paika saada, vastasel juhul ei leia kernel root jaotist üles.

Lõpuks paigaldan alglaadija boot jaotisele:

# grub
grub> root (hd0,1)
grub> setup (hd0)
grub> quit

Süsteemi taaskäivitamine.

Sellega peaks kõik vajalikud sammud olema tehtud ning on aeg proovida, kas mu läpakas ka käivitub:

# exit
# cd
# umount /mnt/gentoo/{boot,usr,var,opt,home,proc,dev,}
# vgchange -a n
# reboot

Kui esmane laadimine ei õnnestu, näiteks seetõttu et failis /boot/grub/grub.conf sai tehtud viga, siis pole katki veel midagi. Tuleb aga CD-lt uuesti laadida, käivitada CD-l olev süsteem, monteerida kõvaketta jaotised külge ning teha parandused:

# swapon /dev/hda3
# vgscan
# vgchange -a y
# mount /dev/hda6 /mnt/gentoo
# mount /dev/hda2 /mnt/gentoo/boot
# mount /dev/vg/usr /mnt/gentoo/usr
# mount /dev/vg/var /mnt/gentoo/var
# mount /dev/vg/opt /mnt/gentoo/opt
# mount /dev/vg/home /mnt/gentoo/home
# mount -t proc none /mnt/gentoo/proc
# mount -o bind /dev /mnt/gentoo/dev
# chroot /mnt/gentoo /bin/bash
# env-update
# source /etc/profile

Kasutaja loomine.

Kui lõpuks on arvuti võimeline ennast ise laadima, login root kasutajana sisse ning loon endale igapäevaseks kasutamiseks kasutajatunnuse:

Login: root
Password: ********

# useradd -m -G users,wheel,audio,cdrom,floppy,usb,video -s /bin/bash enar
# passwd enar
Password: ********
Re-enter password: ********

Käivitan ka sshd deemoni selleks, et masinale üle võrgu ssh abil ligi pääseda:

# /etc/init.d/sshd start
# rc-update add sshd default

Ja ongi mul toimiv Gentoo Linux läpakas. Graafilise kasutajaliidese paigaldame järgmisena.