Boken Om Linux/Kapittel 21

21: Linux – overvåking og kjerne rediger

I dette kapitlet skal jeg ta for oss kommandoer som gjør det mulig for deg å overvåke brukere, brukernes prosesser og tilstanden til Linux-operativsystemet ditt. Det finnes flere forskjellige kommandoer for dette formålet, men her skal jeg konsentrere meg om et fåtall. Jeg skal også se på hvordan du enkelt kan lage din egen Linux-kjerne.

Meldinger fra systemet rediger

 

For å se de siste system-meldingene kan du kjøre følgende kommando:

[root@nittedal /root]# dmesg | less

Boot-meldinger og systemfeilmeldinger som blir sendt til systemkonsollet, blir også plassert i filen /var/log/messages.

[root@nittedal /root]# less /var/log/messages

Nov 14 22:13:57 nittedal kernel: Swansea University Computer Society TCP/IP for

Nov 14 22:13:54 nittedal syslogd 1.4.1#13: restart.

Nov 14 22:13:56 nittedal kernel: klogd 1.4.1#13, log source = /proc/kmsg started.

Nov 14 22:13:56 nittedal kernel: Cannot find map file.

Nov 14 22:13:56 nittedal kernel: No module symbols loaded.

Nov 14 22:13:56 nittedal kernel: Console: colour VGA+ 80x25

Systemadministrator kan se på denne filen ved hjelp av kommandoer som less, more, tail og cat, eller bruke vi-editoren. Når maskinen har kjørt lenge, kan filen etter hvert bli stor. Det kan derfor være lurt å slette innholdet av denne filen med jevne mellomrom. Hvis du har installert pakken Linux-logrotate, vil logfilen automatisk bli redusert i størrelse

Aktive systemparametere rediger

Det mest sentrale i en Linux-distribusjon er Linux-kjernen. Ønsker du å vite hvordan kjernen er definert med hensyn til aktive systemparametere, er det virtuelle filsystemet /proc sentralt. I 2.6-kjernen har man også implementert et annet virtuelt filsystem, /sys, der trestrukturen beskriver hvordan kjernen ser og kommuniserer med alle maskinens enheter. Via /proc og /sys i 2.6-kjernen kan du finne ut alt om systemet, for eksempel hvor mye minne og swap du har. I filsystemet /proc finner du spesifikk informasjon om hvordan kjernen oppfører seg og håndterer ulike operasjoner, for eksempel i forbindelse med nettverk og scsi-enheter. I /sys får man en detaljert oversikt over hvordan kjernen kommuniserer med maskinens enheter. Et nettverkskort vil typisk være å finne i /sys, mens håndteringen av TCP/IP er å finne i /proc.

[root@nittedal /root]# cd /sys

Oversikt over hvilke hovedgrupper av enheter som kjernen har kontakt med vises som kataloger. Tilkoblede enheter finner man ved å gå videre ut i trestrukturen.

[root@nittedal /sys]# cd bus/pci

[root@nittedal /pci]# ls devices/

Slik finner man ut hvilke drivere som blir brukt av PCI-enheter. Ved å bruke kommandoen lspci får du en grei oversikt hvilke chipsett som brukes:

suselap:~ # lspci

00:00.0 Host bridge: Intel Corp. 82815 815 Chipset Host Bridge and Memory Controller Hub (rev 04)

00:01.0 PCI bridge: Intel Corp. 82815 815 Chipset AGP Bridge (rev 04)

00:1e.0 PCI bridge: Intel Corp. 82801BAM/CAM PCI Bridge (rev 03)

00:1f.0 ISA bridge: Intel Corp. 82801BAM ISA Bridge (LPC) (rev 03)

00:1f.1 IDE interface: Intel Corp. 82801BAM IDE U100 (rev 03)

00:1f.2 USB Controller: Intel Corp. 82801BA/BAM USB (Hub #1) (rev 03)

01:00.0 VGA compatible controller: nVidia Corporation NV11GL [Quadro2 MXR/EX] (rev b2)

02:03.0 Multimedia audio controller: ESS Technology ES1983S Maestro-3i PCI Audio Accelerator (rev 10)

02:06.0 Ethernet controller: 3Com Corporation 3c556 Hurricane CardBus (rev 10)

02:06.1 Communication controller: 3Com Corporation Mini PCI 56k Winmodem (rev 10)

02:0f.0 CardBus bridge: Texas Instruments PCI4451 PC card Cardbus Controller

02:0f.1 CardBus bridge: Texas Instruments PCI4451 PC card Cardbus Controller

02:0f.2 FireWire (IEEE 1394): Texas Instruments PCI4451 IEEE-1394 Controller

suselap:~ #

For å se hvilke enheter som bruker driveren kan man gå enda lenger ned i trestrukturen.

[root@nittedal /pci]# cd drivers/eepro100/ && ls -l

Man kan enkelt finne status for enhetene, som for eksempel statistikk for nettverkskort.

[root@nittedal /sys]# cd /sys/class/net/eth0/statistics/

[root@nittedal /statistics]# cat rx_bytes

[root@nittedal /statistics]# cat tx_bytes

Vi ser da en systemfil kalt new_id som brukes av kjernen for å knytte nye enheter opp mot driveren, og en liste over referanser til maskinvare som bruker driveren.

For visse kategorier av enheter i /sys er det også mulig å gi kjernen enkle kommandoer.

Man kan for eksempel eksplisitt be kjernen om å lete etter nye FireWire enheter.

[root@nittedal /statistics]# cd /sys/bus/ieee1394 && cat rescan

[root@nittedal /ieee1394]# echo 1 > rescan

VFS /proc :

[root@nittedal /root]# cd /proc

[root@nittedal /proc]#

Oversikt over CPU som brukes i maskinen din, som CPU-type, hastighet og CPU-familie, finner du ved å se på filen lscpu. Fra sysfs (/proc/cpuinfo).

[root@nittedal /home]# lscpu

Oversikt over aktive blokk- og karakterstyreenheter finner du ved å se på lsblk.

[root@nittedal /home]# lsblk

Oversikt over usb finner du ved å se på filen lsusb.

[root@nittedal /home]# lsusb

Oversikt over PCI-enheter finner du ved å se på filen lspci tool.

[root@nittedal /proc]# lspci

Oversikt over partisjonene finner du ved å se på filen fdisk.

[root@nittedal /proc]# sudo fdisk -l

Oversikt over systemets minne finner du ved å se på filen meminfo.

[root@nittedal /proc]# lshw -short

Oversikt over alle modulene som er installert i øyeblikket, finner du ved å se på filen modules.

[root@nittedal /proc]# less modules

Oversikt over alle filsystemene som i øyeblikket er montert opp, finner du ved å se på filen mounts.

[root@nittedal /proc]# less mounts

Oversikt over alle dine aktive nettverksgrensesnitt finner du ved å se på filene under /net/dev. Nedenfor har jeg et eksempel.

[root@nittedal /proc]# cd net

[root@nittedal /net]# less raw

Oversikt over informasjon som er relatert til debugging (debug), enheter (dev), filsystemer (fs), kjernen (kernel), nettverk (net) og prosesser (proc) finner du under katalogen sys/*. Nedenfor har jeg et eksempel.

[root@nittedal /proc]# cd sys/net/ipv4

[root@nittedal /ipv4]# less tcp_keepalive_time

I dette siste eksemplet ser jeg om tcp_keepalive pakken er satt eller ikke. Du kan nå bruke Linux-kommandoene cat, more eller less og se på alle de andre systemfilene i katalogen /proc. I det virtuelle filsystemet /proc kan man også gi kjernen enkle regler for hvordan du ønsker at den skal oppføre seg. I /proc/sys/net/ipv4 ligger det for eksempel en fil kalt ip_forward. Denne beskriver om kjernen vil videresende en IP-pakke eller ikke. Er denne filen satt til 0, blir ingen IP-pakker videresendt. Er den derimot satt til 1, vil IP-pakker kunne rutes videre til andre maskiner på nettet. Dette er blant annet nødvendig dersom man skal sette opp en ruter. I eksemplet under ser vi på status på ip_forward:

[root@nittedal /ipv4]# cat ip_forward

For å sette denne kjernefunksjonen til enten av(0) eller på(1), kan man gjøre dette med echo-kommandoen. Denne type endring av kjernens oppsett kan gjøres flere steder i /proc, men vær forsiktig! Hvis man ikke vet hva man gjør, kan man risikere å gjøre stor skade ved å endre disse verdiene.

[root@nittedal /ipv4]# echo 1 > ip_forward

I tillegg til dette finner du i /proc en katalog for hver kjørende prosess på maskinen. Disse katalogene har samme navn som prosessens id og de inneholder informasjon om hvilke oppstartsvariabler prosessen hadde da den startet, hvilken kommando den ble startet med, hvilke filer den leser og skrver til, hvilke minneområder den bruker, osv.

Mer om /proc finner du også i kapittel 7.

Overvåke brukere – accton rediger

Som systemadministrator kan du overvåke Linux-systemets brukere og prosesser ved å starte opp programmet accton manuelt eller automatisk. Automatisk oppstart får du ved å sette opp accton i en oppstartfil (katalogen /etc/init.d). Neste gang du starter systemet, går accton-programmet automatisk. Skriver du accton uten filargument, slås overvåkingsprogrammet av.

Kommandoen accton overvåke brukere og prosesser
Kommando: accton [argument] eller acct [argument]
Funksjon: Starter overvåkingsprogrammet (accton/acct)
Argumenter: Filnavn (loggovervåkingsfil). Dataene som accton-programmet samler opp. Hvis ingen fil er spesifisert, blir dataene sendt til filen /var/log/pacct (under Unix V.4 brukes filen /usr/adm/pacct).
Opsjoner: Ingen opsjoner

Accton gir deg for eksempel hvilke kommandoer vedkommende bruker har kjørt, og hvilke belastinger dette har ført til med hensyn til prosessor og minneforbruk. Du kan også få analysert hvor stor belasting brukerens bevegelser har vært på en TCP/IP-port, terminalport eller parallellport.

Eksempler:

[root@nittedal /root]# accton /var/rapport/fil01

Starter overvåkingsprogrammet accton. En loggovervåkingsfil blir lagret på /var/rapport/fil01. Skriver du less /var/rapport/fil01, vil du se at filen vokser etter hvert som brukere logger seg inn og starter forskjellige programmer eller Linux-kommandoer.

[root@nittedal /root]# accton off

I dette siste eksemplet slår jeg av overvåkingsprogrammet.

Hvilke parametere du kan få ut, ser du ved å bruke sa-kommandoen. Du kan som et alternativ sjekke overvåkingsfilen /var/log/pacct og se hvilke data som ligger der.

Summere loggdata – sa rediger

Har du kjørt accton-programmet en stund, har du muligheten til å kjøre ut forskjellige statistikkdata. Du kan for eksempel finne ut hva slags kommandoer en bruker har brukt over tid, samt belastning på CPU og internminne. Du kan også se på I/U-enheter og for eksempel finne ut hvem som har brukt en terminal, hvilke programmer som har vært kjørt fra denne terminalen, CPU-belastningen og de forskjellige minnebelastningene.

Kommandoen sa leser fra en spesifisert fil eller fra /var/log/pacct hvis ingen ting er spesifisert. En utskrift fra sa-programmet består av blant annet: COMMAND, NAME, USER, TTYNAME, START TIME, END TIME, REAL (SEC), CPU (SEC) og MEAN SIZE (K)

Kommandoen sa summere loggdata
Kommando: sa [opsjon] [bruker-id]
Funksjon: Viser deg en statistikk over data som er samlet inn av accton-programmet
Argumenter: Login-id
Opsjoner: Ingen opsjoner
-a Lister opp alle navn
-b Oversikt over system/bruker

Eksempler:

[root@nittedal /root]# sa -a

Lister opp alle brukernavn.

Innloggingstid for bruker – ac rediger

Som systemadministrator kan du overvåke Linux-systemet med hensyn til når brukere har logget seg inn, hvor lenge de var innlogget i dag, totalt for året eller bare totalt. Kommandoen ac er ikke avhengig av at det startes et eget bakgrunnsprogram, da ac bare leser /var/log/wtmp-filen.

Kommandoen ac statistikk over brukerinnloggingstid
Kommando: ac [opsjon] [bruker-id]
Funksjon: Viser deg en statistikk over innloggingstid for de enkelte brukerne. Resultatene skrives ut i timer, basert på /var/log/wtmp.
Argumenter: Login-id
Opsjoner: Se også Linux-man-sidene.
-d Totalt forbruk per dag
-y Totalt forbruk i år
-p Totalt forbruk per bruker

Eksempler:

[root@nittedal /root]# ac -d root

Nov 15 total 20.45

Nov 21 total 7.24

Nov 22 total 6.49

Nov 24 total 0.21

Nov 26 total 13.69

Viser roots totalforbruk i timer per dag.

[root@nittedal /root]# ac -y david

total 225.67

[root@nittedal /root]#

Viser davids totalforbruk i timer i år.

Status på CPU-prosesser – top rediger

Som systemadministrator kan du ved å bruke Linux-kommandoen top, enkelt få en oversikt over hvilke prosesser som er i aktivitet i øyeblikket. Med top-kommandoen kan du enkelt sortere prosessene med hensyn til bruk av CPU, minne og status, du kan også få en oversikt over de mest prosessorintensive programmene som går på systemet ditt.

Kommandoen top Hvor går maskinressursene?
Kommando: top [-dX] [-q] [-c] [-s] [-S] [-i]
Funksjon: Gir informasjon om prosesser på systemet
Argumenter: Ingen
Opsjoner: Se også Linux-man-sidene.
-dX Her spesifiseres hvor ofte top skal oppdateres.
-q Realtime oppdatering av top. Hvis brukeren har administratorrettigheter (root), har top høyeste prioritet.
-c Viser full bane til programmene, ikke bare filnavnet.
-s Får top til å kjøre i sikkerhetsmodus, noe som begrenser mulighetene til å styre prosessene i programmet.
-u <bruker> Viser bare prosesser eid av en gitt bruker.
-p <pid,...> Viser bare prosesser med gitt process id.
-b Kjører i batch-mode dvs, skriver en liste til stdout fortløpende, i motsetning til å starte tops GUI.
-S Top viser total prosessortid brukt av programmet, inkl. underprosesser, i stedet for bare prosessorkraft brukt i øyeblikket.
-i Top ignorer programmer som ikke er aktive eller som er døde.

Kommandoen top kan for eksempel gi følgende resultat:

55 processes, 53 sleeping, 2 running, 0 zombie, 0 stopped

CPU states: 10.2% user, 4.2% system, 0.0% nice, 85.7% idle

Mem: 30684K av, 29996K used, 688K free, 12172K shrd, 308K buff

Swap: 130748K av, 29348K, 101400K free

Pid User Pri Ni Size Rss Share Stat Lib %cpu %mem Time Command
141 Root 19 0 10936 8236 696 R 0 9.6 26.8 82.24 X
7635 cschal 5 0 1416 1108 800 S 0 2.3 3.6 10.23 Wterm
126 Squid 0 0 60 0 0 SW 0 0.0 0.1 0:00 Dnsserver

Her ser du et lite utdrag av listen med prosesser. PID er system-id til prosessen. Dette kan være nyttig å kjenne til hvis et program du forsøker å avslutte har hengt seg opp og legger beslag på systemressurser. Ved hjelp av kill-kommandoen og PID-nummeret kan du få Linux til å tvinge programmet ned.

Eksempel:

[root@nittedal /root]# top

top - 21:07:31 up 122 days, 2:56, 2 users, load average: 0.19, 0.11, 0.10

Tasks: 108 total, 1 running, 104 sleeping, 0 stopped, 3 zombie

Cpu(s): 6.4% us, 2.2% sy, 0.0% ni, 90.6% id, 0.8% wa, 0.0% hi, 0.0% si

Mem: 386460k total, 358348k used, 28112k free, 20040k buffers

Swap: 489932k total, 33372k used, 456560k free, 156488k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

Skriver du bare h når top har startet, får du en hjelpeliste. Nedenfor har jeg en tabelloversikt:

Kommando Beskrivelse
uptime Beskriver hvor lenge systemet har vært oppe
processes Totalt antall prosesser som kjører i øyeblikket
CPU states CPU-belasting i bruker- og systemmodus. I praksis forteller den deg hvor stor andel av prosessoren programmet legger beslag på.
PID Prosess-id for hver prosess
PPID Foreldreprosess-id
UID Id-nummer til programeier
USER Brukernavnet til program/prosess-eier; det er viktig å huske at selv om det er du som har startet programmet, så er det ikke sikkert at du blir oppført som bruker.
PRI Prioriteten på programmet
NI NICE-verdi (prioriteten) på programmet (-20 er høyeste prioritering og 19 er den laveste prioriteringen)
TSIZE Kodestørrelsen på programmet
DSIZE Programmets data- og stakkstørrelse
TRS Resident størrelse på tekstkode
SWAP Størrelsen på programkode som swappes ut
D Pakker som er merket (minnepakker)
LIB Size Størrelsen på biblioteksidene som brukes
RSS Totalt antall fysisk minne programmet bruker
SHARE Fordeling av kode
STAT Status på programmet (S=sleeping, R=running, Z=zombies, T=stoppet, N=NICE>0, W=swappet ut program)
WCHAN Hvilken kernelfunksjon programmet får tilgang til
TIME Total CPU-tid programmet har brukt siden det startet
%CPU CPU-del programmet tar i øyeblikket
%MEM Programmets del av det fysiske minnet
COMMAND Navnet på programmet/prosessen

Se også : uptime, free, ps, vmstat, kill, pkill, pgrep og killall

Lag din egen Linux-kjerne

Programmer som du installerer på din Linux-maskin, kan deles i to kategorier; de som gjør endringer på Linux-kjernen, og de som ikke gjør det. Vanlige applikasjoner som OpenOffice, StarOffice, Acrobat Reader, Evolution, Gimp, Mozilla firefox, WordPerfect Office, Applixware, DBMaker og LinuxMail, krever ikke at Linux-kjernen genereres på nytt.

Applikasjoner som krever at ny maskinvare plasseres i Linux-maskinen, for eksempel videoredigeringskort, harddisk, intelligente I/U osv., kan kreve at Linux-kjernen genereres på nytt. Det kan også være behov for å lage en ny Linux-kjerne i forbindelse med endringer eller tuning av operativsystemet.

Du finner mer informasjon om Linux-kjerner på siden:

http://www.kernel.org/.

Har du alle de riktige komponentene installert?

Før vi starter å legge inn en ny Linux-kjerne eller endre på eksisterende Linux-kjerne, er det fornuftig å finne ut hva slags kjerne man bruker i øyeblikket. Kjør følgende kommando:

[root@nittedal /root]# uname -r

4.4.6-i686

For å lage en ny Linux-kjerne må du ha følgende installert:

   Programpakkene med Linux-kjerne-headers (kernel-headers)
   Programpakkene med Linux-kildekoden (kernel-source) 

Kommandoen nedenfor lister opp hva som er installert på din Fedora/Red Hat Linux:

[root@nittedal /root]# rpm -q kernel kernel-headers kernel-ibcs kernel-pcmcia-cs kernel-source | more

Hvis kildekoden til kjernen allerede er installert på ditt Linux-system vil du finne den plassert under /usr/src som for eksempel /usr/src/linux-4.4.6. Du finner kildekoden til Linux-kjernen på ulike Cder, på de ulike distribusjonenes websider eller du kan laste det ned direkte fra http://www.kernel.org. Ny SuSE Linux-kjerne finner du på ftp-tjeneren:

ftp://ftp.gwdg.de/pub/linux/suse/Y.X_update/kernel/

Hvor Y:X er kernel versjon. Ønsker du støtte for andre arkitekturer enn Intel for eksempel PPC, IA64, etc. Finner du også disse lenger ned i samme trestruktur. Oppdaterte kjerner for Fedora finner du på linken under:

https://archives.fedoraproject.org/pub/archive/fedora/linux/core/updates/

Kjører du Fedora eller Red Hat Linux finner du alltid Linux-kildekoden plassert i katalogen RPMS eller SRMPS.

I Debian kan man kjøre apt-get install kernel-image-4.4.6 for å automatisk installere ny, ferdig kompilert kjerne. Kjør apt-get source linux-image-$(uname -r) for å laste ned kildekoden. Som eksemplene under:

[root@nittedal /root]# sudo apt-get install linux-image-uname -r [root@nittedal /root]# sudo apt-get install linux-headers-uname -r`

[root@nittedal /root]# apt-get source linux-image-$(uname -r)

Ønsker du bare en oppdatert kjerne uten å tune den, kan du i SuSE gjøre følgende:

a) Last ned ny kjernen (ferdige RPM-pakker) fra SuSE.

Vi starter med å laste ned en ny kjerne fra SuSE sin ftp-tjener.

ftp://ftp.gwdg.de/pub/linux/suse/suse_update/Y.X/kernel/

b) Ta backup av kjerne og opplaster (ligger i /boot/)

Vi tar kopi av gammel kjerne og tilhørende opplaster.

[root@nittedal /root]# cp /boot/vmlinuz /boot/vmlinuz.old

[root@nittedal /root]# cp /boot/initrd /boot/initrd.old

c) Installer ny kjerne fra ferdige RPM

Deretter er det bare kjøre rpm-kommandoen:

[root@nittedal /root]# rpm -Uvh k_deflt-2.6.xxxxxx.rpm

Her kan versjonsnummeret (xxxxxx) variere. Endel distribusjoner bruker en RAM disk(initrd) til å starte. Dette gjør de for å sikre at alle nødvendige drivere til for eksempel SCSI-kontrollere blir lastet før kjernen trenger tilgang til harddisker og lignende. Til dette filsystemet brukes det en RAM disk. Vi får skrevet til initrd med kommandoen:

[root@nittedal /root]# mk_initrd

Nå trenger du bare å oppdatere LILO.

d) Oppdatere oppstartsprogram ditt (dette kan for eksempel være e-lilo eller grub2)

[root@nittedal /root]# /sbin/lilo

Nå er du klar til å restarte ditt SuSE-system. Kommer maskinen opp igjen uten feilmeldinger har du klart det!

e) Start maskinen opp på nytt (reboot)

[root@nittedal /root]# /sbin/shutdown -r

Hvilken Linux-kjerne du kjører i øyeblikket, ser du med uname-kommandoen.

[root@nittedal /root]# uname -s

Ta gjerne en lokal sikkerhetskopi av kjernen og kildekoden også.

Laste ned opensuse kernel. openSUSE Tumbleweed https://software.opensuse.org/package/xen

Direkte installasjon: https://software.opensuse.org/ymp/openSUSE:Leap:42.1:Update/standard/xen.ymp?base=openSUSE%3ALeap%3A42.1&query=xen

Her kopierer jeg ut den nye Linux-kjernen. I dette tilfellet er det en linux-4.6-kjerne jeg har lastet ned fra nettet. Jeg er nå klar for å konfigurere min nye kjerne. Ønsker du alternativt en oppdatert Linux-kjerne fra Fedora, Red Hat SuSE eller Debian, kommer disse i standard pakkeformat (RPM/DEB) og kan lastes ned fra de enkelte distribusjoners hjemmesider. Komplett kildekode av Fedora, Red Hat eller SuSE (bare Linux-kjernen) tar i størrelsesorden 130-300 MB. Alle de 3 distribusjonene leverer oppdaterte Linux-kjerner i rpm-formatet. Debian bruker sitt eget deb-format og ligger på ca 300 MB kildekode for kjernen. Grunnen til at ulike distribusjoner har sine egne standardkjerner som er litt ulike er at de satser på ulike felt. Noen vil være 110% stabile og velger bare de funksjoner som de vet er kritiske for distribusjonen, mens andre distribusjoner vil ha den nyeste funksjonaliteten, selv om den av og til viser seg å være for fersk til å være stabil.

Fedora:

[root@nittedal /home]# curl -s https://repos.fedorapeople.org/repos/thl/kernel-vanilla.repo | sudo tee /etc/yum.repos.d/kernel-vanilla.repo

Aktiver nyeste repo kernel vanilla:

[root@nittedal david]$ sudo dnf --enablerepo=kernel-vanilla-mainline update

Etter installasjonen må du restarte maskinen også:

[root@nittedal david]$ uname -r

Da burde du få: 4.6.0-0.rc1.git0.1.vanilla.knurd.1.fc23.x86_64.

Hvis du har problemet med den nyeste\ eller vil deaktivere denne:

[root@nittedal david]$ sudo dnf --enablerepo=kernel-vanilla-stable update

4) Konfigurering av din nye kjerne

   Figur 21.1: Hovedmenyen fra make menuconfig 

Du må installere f.eks [root@nittedal david]$ yum groupinstall 'C Development Tools and Libraries

Reinstallere grub2 grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

mkinitrd /boot/initramfs-3.16.1.img 3.16.1

Det andre alternativet, make menuconfig, er et tegn-grafisk program som ligner på Red Hat Linux' tegnbaserte installasjonsprogram. Her merker du menyalternativene som du ønsker med: Y (yes), N (no) eller M (module). Det tredje alternativet, make oldconfig, brukes for å sette opp en standard kjerne. Med make xconfig får man et X Windows-program der man kan konfigurere kjernen med pek-og-klikk metoden. Opsjonene er de samme, dvs. Y (yes), N (no) eller M (module).

   Figur 21.2: Hovedmenyen fra make xconfig 

I tillegg er det mulig raskt å lage kjerner som inneholder enten alle driverne og funksjonene, alle driverne som moduler eller minimalt med drivere og funksjoner. Jeg foretrekker menuconfig, da config er veldig klønete og xconfig ikke bestandig er tilgjengelig, for eksempel dersom man har problem med å sette opp skjermkortet riktig i kjernen.

Når du er fornøyd med dine valgte kjerneparametere, lagrer du og konfigurasjonen havner da som standard i filen /usr/src/kernels/.config. Mange systemansvarlige tar også sikkerhetskopi av .config filen på minnpenn. Fra og med 4.6-kjernen er det også mulig å inkludere denne konfigurasjonsfilen i selve kjernen. På den måten kan man enkelt hente frem konfigurasjonen på en maskin som kjører, uten at man nødvendigvis har .config filen. Man finner denne informasjonen i /proc/config.gz og i /proc/built_with finner man også info om kompilatoren og maskinen kjernen ble kompilert på.

5) Kompilere kjernen

Når jeg har konfigurert kjernen og lagret konfigurasjonen min (/usr/src/linux-2.6.4/.config) med en av metodene nevnt ovenfor, er jeg klar til å starte kompileringen.

Men dersom jeg har flere kjerner som jeg vil ta vare på, kan det være smart å sette et kallenavn på kjernen jeg skal kompilere, ellers vil mine gamle bli overskrevet. Dette gjøres ved å sette variabelen EXTRAVERSION i filen /usr/src/linux-4.6/Makefile.

[root@nittedal /usr/src/linux-4.6]# vi /usr/src/linux-4.6/Makefile

Jeg setter EXTRAVERSION=-mytest1 og kompileringen kan begynne. Navnet på den nye kjernen vil nå bli linux-4.6-mytest1.

[root@nittedal /usr/src/linux-4.6]# make && make modules_install

Denne kommandoen kjører i tur og orden det som tilsvarer make vmlinux, modules, bzImage og til slutt, modules_install. Merk at man med 4.6-kjernen ikke lenger trenger å kjøre make dep. Dette tar make seg av selv.

Merk: For Debian kan man isteden kjøre make-kpgk istedenfor make. Man vil da få en ferdig kompilert kjerne med moduler og alle konfigurasjoner skal være i orden. Det gjenstår bare å starte maskinen på nytt. En veldig nyttig sak dersom man liker å tune kjernen i ny og ne.

Ønsker du isteden å lage en bootdisk med den nye kjernen på må du kjøre følgende:

[root@nittedal /usr/src/linux-4.6]# make bzdisk

6) Lage et initrd-image

Det å lage et initrd-image kan de fleste hoppe over, da dette bare gjelder de med PC som trenger å laste drivere for å bruke basisenheter, som for eksempel drivere til SCSI-kontrollere og lignende. Du kan lett sjekke om du benytter SCSI ved å se på innholdet av filen /proc/scsi/scsi. Finner du der noen referanser til enheter i din maskin, bruker du et SCSI-grensesnitt. Eksempel på tekst i /etc/modules kan være:

root@nittedal /modules]# lsscsi

....

Attached devices:

Host: scsi0 Channel: 00 Id: 00 Lun: 00

Vendor: HP Model: 18.2GB C 68-D94N Rev: D94N

Type: Direct-Access ANSI SCSI revision: 02

Host: scsi0 Channel: 00 Id: 01 Lun: 00

Vendor: HP 18.2G Model: ST318406LW Rev: HP03

Type: Direct-Access ANSI SCSI revision: 02

Host: scsi0 Channel: 00 Id: 03 Lun: 00

Vendor: IBM Model: IC35L073UWD210-0 Rev: S5CQ

Type: Direct-Access ANSI SCSI revision: 03

Host: scsi0 Channel: 00 Id: 04 Lun: 00

Vendor: IBM Model: IC35L073UWD210-0 Rev: S5CQ

Type: Direct-Access ANSI SCSI revision: 03

I slike tilfeller må du lage et initrd image. Her er et eksempel:

[root@nittedal /usr/src/linux-4.6]# /sbin/mkinitrd -o /boot/initrd-4.6.img /lib/modules/2.6.4

I dette eksempelet er første argument /boot/initrd-4.6-686.img filnavnet på mitt nye initrd-image. Neste argument /lib/modules/4.6-686 er katalogen som inneholder alle kjernemodulene til kjernen du vil bruke. Deretter må du legge inn en linje i /etc/lilo.conf eller /boot/grub/grub.conf som forteller oppstarteren at den skal benytte RAM disken du har laget for å finne driverne sine. Her er et eksempel:

[root@nittedal /usr/src/linux-4.6]# vi /etc/lilo.conf

initrd=/boot/initrd-4.6-i686.img

Bruker du GRUB som oppstartsprogram, oppdaterer du filen /boot/grub/grub.con som vist under:

[root@nittedal /usr/src/linux-4.6]# vi /boot/grub2/grub.cfg

initrd /boot/initrd-4.6-686.img

7) Installasjon av ny Linux-kjerne

Med Fedora og Red Hat Linux kan du nå installere alle de nye kjerne-filene automatisk ved å skrive:

[root@nittedal /usr/src/linux-4.6]# make install

Under Debian kan man installere pakken kernel-package og bruke make-kpkg isteden for make i punkt 5. Da vil punkt 5, 6 og 7 bli utført automatisk.

Oppdatering av oppstartsprogram

I dag brukes to forskjellig oppstartsprogrammer (E)LILO (Linux Loader) og GRUB2 (GRand Unified Bootloader). Både make install og make-kpkg skal automatisk oppdatere oppstartsprogrammet, men en kjapp titt på enten /etc/lilo.conf eller /boot/grub2/grub.cfg for å se at alt er i orden skader ikke. Før vi ser på konfigurasjonsfilene under LILO og GRUB bør vi ta en rask igjennom gang av oppstartsprogrammene LILO og GRUB.

I utgangspunktet består LILO av 4 deler:

   LILO-konfigurasjonen med pekere i MBR (UEFI)
   Konfigurasjonsfilen /etc/elilo.conf
   Mapperfilen som gir informasjon på hvor kjernen er plassert
   Programmet /sbin/lilo som leser konfigurasjonsfilen (/etc/lilo.conf) og oppdatere mapperfilen (/etc/boot/map) 

Når du installerer Linux kan du selv bestemme hvilket oppstartprogram du ønsker å bruke. Velger du ELILO gjør du alle endringene i /etc/elilo.conf med for eksempel vi-editoren. Deretter er det bare å kjøre /sbin/lilo som vil oppdatere konfigurasjonen på MBR (hvis LILO er plassert der) og oppdatere mapperfilen /etc/boot/map. Syntaksen som skal brukes i lilo.conf finner du ved å bruke man- og info-kommandoene:

[root@nittedal /root]# man lilo.conf

[root@nittedal /root]# info lilo

Tidligere var det LILO som var mest brukt som oppstartsprogram. I dag bruker stadig flere Linux-aktører GRUB2 i steden for ELILO. GRUB2 er mer moderne og har flere muligheter enn hva du finner under ELILO. Den viktigste egenskapen GRUB2 har fremfor LILO er at den har støtte for LBA (Logical Block Address). Dette betyr at du kan ha støtte for større harddisker. Tidligere var det slik at Linux-kjernen ikke kunne plassers uten for sektor 1024. Med GRUB2 og LBA-støtte kan Linux-kjernen plasseres hvor som helst på en stor harddisk.Sammenliging av oppstartlastere:

  • GRUB-konfigurasjonen med pekere i MBR
  • GRUB- dobbel konfigurasjonsfil menu.1st og grub.conf
  • GRUB2-Oppdater automatisk konfigurasjonen ved oppgraderinger.
  • GRUB2- konfigurasjonsfil /boot/grub2/grub.cfg
  • GRUB startet fra partion 0 mens Grub2 starter fra 1
  • GRUB2- er ganske likt et fult skriptspråk.
  • GRUB bruker fysisk og logiske adresser mens Grub2 bruker UUID og støtter Raid.
  • Filen /boot/boot/grub/device.map som gir informasjon om hvilke hvilke lagringsenheter du har
  • Programmet /sbin/grub for endre konfigurasjonsfilen (/boot/grub2/grub.cfg) og oppdatere
  • Programmet grub-install for installere GRUB

I steden for å gjøre alle endringer i filen /etc/elilo.conf under ELILO gjør du alle oppdateringer i filen /boot/grub/grub.conf. Du kan også endre konfigurasjon ved å kjøre programmet /sbin/grub. Syntaksen som skal brukes i grub.conf finner du ved å bruke info-kommandoen:

[root@nittedal /root]# info grub

Ved hjelp av programmet /sbin/grub-install har du muligheten til installere grub oppstartsprogrammet forskjellige steder. Under har jeg noen eksempler:

[root@nittedal /root]# grub-install /dev/hda

I eksempelet over installerer jeg GRUB i MBR-partisjonen til første Sata harddisk. I eksemplet antar jeg at GRUB bruker Linux-kjernen plassert under root-katalogen (/). Hvis du ønsker at GRUB skal bruke Linux-kjerner under andre kataloger må du samtidige spesifisere root-katalogen.

GRUB fra oppstartsprompten rediger

Når du laster opp grub på en Linux-maskin kan du med piltastene velge hvilket operativsystem du ønsker å laste opp. I tillegg kan du bruke e-kommandoen for editere kommandoene som skal kjøres ved oppstarten. Med a-kommandoen kan du endre argumentene til Linux-kjernen. Med c-kommandoen får du kommandolinjen. Hvis du for eksempel ved oppstart ikke ønsker kjøre maskinen opp til kjørenivå 5 men kjørenivå 3, velger du e-kommandoen når du er i grub ved oppstart. Nå må du velge «kernel-linjen». Trykker du nå på e igjen kan du på slutten av linjen skrive int=3. Nå er det bare å trykke enter (retur) og b for å laste opp operativsystemet. Maskinen vil nå bare lastes opp i kjørenivå 3 uten X11.

Du finner også mer informasjon om GRUB på hjemmesiden:

http://www.gnu.org/software/grub/manual/

ELILO vs LILO-konfigurasjonsfil rediger

Som et eksempel viser jeg standard-oppsettet på en av mine PCer før og etter at jeg har oppdatert med en ny Linux-kjerne. Du kan enkelt oppdatere /etc/lilo.conf selv med vi-editoren. I eksemplene nedenfor gjør vi alle oppdateringene manuelt med vi-editoren. Mitt første eksempel er basert på LILO dvs /etc/lilo.conf.

[root@nittedal /etc]# cat lilo.conf

prompt

timeout=50

default=linux

boot=/dev/hda

map=/boot/map

install=/boot/boot.b

message=/boot/message

linear

image=/boot/vmlinuz-4.6

label=linux

initrd=/boot/initrd-4.4.img

read-only

root=/dev/hda2

other=/dev/hda1

label=NT

table=/dev/hda

I dette oppsettet har jeg dual-boot med Windows og Linux. Linux-kjernen som lastes opp er Linux 4.4. Som standard (default=linux) laster jeg opp min linux.

[root@nittedal /etc]# cat elilo.conf prompt timeout=50 default=340 #chooser=textmenu #message=textmenu-message.msg

image=vmlinuz-4.6.0-generic

   label=linux initrd=initrd.img-4.6.0-generic 
   read-only root=/dev/sda4 append="" 

image=/EFI/ubuntu/bzImage-4.4.0

   label=340 initrd=/EFI/ubuntu/initrd.img-4.4.0 
   read-only
       root=/dev/sda4 
       append="reboot=a,w" 

Her har jeg oppdatert /etc/elilo.conf med seks nye linjer. Disse linjene er uthevet. Med dette oppsettet kan jeg velge mellom Windows (NT), Linux 4.4.0 og Linux 4.6.0.

Når du har oppdatert /etc/elilo.conf, kjører du /sbin/elilo. Dette er nødvendig for at ELILO skal oppdatere oppstarts-sektoren på harddisken din, noe som er nødvendig for å starte opp maskinen din riktig.

[root@nittedal /root]# /sbin/lilo

  • Added linux *
  • Added linux-old
  • Added NT

Stjerne indikerer hvilken som er standard oppstart. Hvis du glemmer å gjøre dette, eller du opplever at /sbin/lilo feiler, er det ikke sikkert du får startet maskinen uten oppstartsdiskett. Lag derfor alltid en oppstartsdiskett dersom du opplever feil når du prøver å oppdatere oppstartsprogrammet (se punkt 2).

Alle dine endringer er nå aktivisert. Når Linux-systemet lastes opp neste gang, kommer LILO boot-ledeteksten opp. Ved å trykke TAB-tasten kan du nå velge de forskjellige kjernene.

LILO boot:

linux linux-old dos

Når du velger den nye kjernen, er det lurt å se etter eventuelle feilmeldinger. Virker ikke maskinen, må du laste opp den gamle kjernen.

 

Figur 21.3: Oppdateringer av startsprogrammet via yaST2 under SuSE

For de som ikke ønsker å oppdatere /etc/lilo.conf manuelt med vi-editoren, kan LILO-config-programmet kjøres. Det gir deg et grafisk grensesnitt mot mange av de forskjellige opsjonene som kan settes i /etc/lilo.conf. Programmet laster du opp under KDM fra startknappen ved å velge Preferanser, Filbehandling og til slutt Bootbehandler (LILO). Programmet kan også startes direkte fra terminalvindu (kdesu kcmshell lilo). Under SuSE kan du oppdatere både LILO og GRUB fra YaST2.

GRUB-konfigurasjonsfil rediger

Valgte du GRUB2 som ditt oppstartsprogram (boot loader), må filen /boot/grub2/grub.cfg oppdateres. Din standard GRUB2-konfigurasjonsfil kan for eksempel se slik ut:

I ubuntu\debian bruker du: root@nittedal /home]# cat /boot/grub/grub.cfg

Fedora: root@nittedal /home]# grep menuentry /boot/grub2/grub.cfg

if [ x"${feature_menuentry_id}" = xy ]; then

menuentry_id_option=""

export menuentry_id_option menuentry 'Fedora (4.6.0-0.rc1.git0.1.vanilla.knurd.1.fc23.x86_64) 23 (Workstation Edition)' --class fedora --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.2.3-300.fc23.x86_64-advanced-11b5639e-2fcc-4c62-b44f-19c82ee4ee3a' { menuentry 'Fedora (4.4.6-300.fc23.x86_64) 23 (Workstation Edition)' --class fedora --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.2.3-300.fc23.x86_64-advanced-11b5639e-2fcc-4c62-b44f-19c82ee4ee3a' { menuentry 'Fedora (4.2.3-300.fc23.x86_64) 23 (Workstation Edition)' --class fedora --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux- 4.2.3-300.fc23.x86_64-advanced-11b5639e-2fcc-4c62-b44f-19c82ee4ee3a' { menuentry 'Fedora (0-rescue-401617b426a24628b0e1584b6101e836) 23 (Workstation Edition)' --class fedora --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-401617b426a24628b0e1584b6101e836-advanced-11b5639e-2fcc-4c62-b44f-19c82ee4ee3a' {

Har du laget en separat /boot-partisjon, blir søkebanen til kjernen og initrd-filen relativ til /boot-partisjonen. Ønsker du å legge en ny kjerne til GRUB2, er det bare å kopiere den eksisterende tittel-seksjonen ('Fedora (4.4.6-300.fc23.x86_64) 23 (Workstation Edition)') og redigere denne. Du må bare huske å endre tittelnavnet og oppdatere riktige navn på Linux-kjernen og initrd-imaget hvis du har noen SCSI-enheter.

Tune harddisk eller CD-spiller rediger

Ved hjelp av hdparm har du muligheten til å tune harddiskene og CD-spillerne dine. Ulempen med hdparm er at den bare finnes som en kommandoapplikasjon. Denne kommandoen har mange opsjoner. Bruker du opsjonen hjelp (-h), får du en beskrivelse av de mest brukte opsjonene.

[root@nittedal /root]# hdparm -h

hdparm-kommandoen kan gi deg fantastisk ytelseforbedring, men bruk av feil opsjoner kan få drastiske konsekvenser.

[root@nittedal /root]# hdparm /dev/hda5

Her ber jeg om at hdparm identifiserer harddisk-enheten (partisjonen) /dev/hda5.

[root@nittedal /root]# hdparm -iI /dev/hda

Her ber jeg om å få se hva harddisken er i stand til å håndtere av opsjoner.

[root@nittedal /root]# hdparm -c1 -d1 -a8 -u1 /dev/hdd

I eksemplet over betyr opsjonen -c1 at jeg ønsker å slå på 32 bits I/O, -d1 slår på DMA-håndtering, -a8 setter filsystemet til les på forhånd og -u1 gjør at interrupt maskeflagget settes på. Driveren /dev/hdd peker her til min CD-spiller. I mitt tilfelle over peker /dev/hdd til /dev/dvd som igjen er linket til /dev/cdrom. Etter at hdparm-kommandoen har blitt kjørt har jeg fått en raskere CD-spiller.

Trim SSD disker: tune2fs -o discard /dev/sdaX sudo hdparm -I /dev/sda | grep "TRIM supported" sudo fstrim -v / gksu gedit /etc/crypttab

Oppgaver til kapittel 21 rediger

Oppgave 21.1

Hvilken fil kommer alle systemmeldinger til?

Oppgave 21.2

Hvis du ønsker omfattende overvåking av bruken av applikasjoner og ytelse, hvilket program starter du da?

Oppgave 21.3

Hvordan leser du data ut fra accton-databasen? Hva gjør ac-kommandoen?

Oppgave 21.4

Hvordan kan du enkelt få fram status på prosessene i systemet (ikke ps-kommandoen)?

Oppgave 21.5

Hva er trinnene for å generere en ny Linux-kjerne?

Oppgave 21.6

Hvilken kommando skal kjøres etter at du har oppdatert /etc/lilo.conf?

Oppgave 21.7

Last ned siste Linux-kjerne fra nettet og oppdater systemet ditt med den nye Linux-kjernen.

Oppgave 21.8

Hvilken kommando kan brukes for tune harddiskene dine?

Oppgave 21.9 Hvordan sjekke Trim SSD?