Boken Om Linux/Kapittel 17

17: Starte Linux

rediger

I dette kapitlet forklarer jeg hvordan du starter Linux på en PC. Detaljene avviker noe fra system til system. Jeg sammenligner oppstarten av Linux med tilsvarende prosess for både Unix, Windows 10 og Windows XP. Jeg forklarer samtidig hva operativsystemets oppgaver er, disse er svært like uansett hvilket system du bruker.

Det er enkelt å starte Linux på en PC. Du gjør som med ethvert annet operativsystem på en slik maskin: Slå først på maskinen!

Starte Windows 10

rediger

Siden jeg har konsentrert meg om PC-arkitektur, vil jeg først se på hva som skjer når jeg slår på en PC med operativsystemet Windows 10. Oppstart under Windows går gjennom følgende trinn:

   * ROM (BIOS) (UEFI)
   * selvtest
       ** hovedkort
       ** I/U 
   * BIOS leser MBR (Master Boot Record) eller UEFI (GPT harddisk\SSD) som er første sektor på den aktive partisjonen (partisjonen kan være på stasjon A, C, D etc)
  * efibootmgr laster opp NVRAM variablene i EFI_DEVICE_PATH_PROTOCOL
  * Windows 10 

[root@system directory]# efibootmgr -v

BootCurrent: 0007 Timeout: 0 seconds BootOrder: 0007,0004,0003,0000,0001,0005,0006 Boot0000* Windows Boot Manager HD(2,GPT,6ce95998-08f5-4955-86e4-c84149e7dea9,0xe1800,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...a................ Boot0001* Fedora HD(2,GPT,6ce95998-08f5-4955-86e4-c84149e7dea9,0xe1800,0x32000)/File(\EFI\fedora\shim.efi) Boot0003* fedora HD(1,GPT,62b5350b-f6ef-4537-b015-5e5f650cd465,0x800,0x64000)/File(\EFI\fedora\grubx64.efi) Boot0004* opensuse HD(1,GPT,0d24c770-baab-4c79-8db2-06de901c57be,0x800,0x32000)/File(\EFI\opensuse\grubx64.efi) Boot0005* CD/DVD Drive BBS(CDROM,,0x0)AMGOAMNO........o.M.A.T.S.H.I.T.A.D.V.D.-.R.A.M. .U.J.8.B.2....................A...........................>..Gd-.;.A..MQ..L. . . . . . . . .M.W.6.8. . .1.0.1.7.5.8......AMBO Boot0006* Hard Drive BBS(HD,,0x0)AMGOAMNO........o.O.C.Z.-.V.E.R.T.E.X.4....................A...........................>..Gd-.;.A..MQ..L.C.O.-.Z.7.9.6.Y.1.I.O.6.9.A.8.4.2.9.O.0......AMBO Boot0007* UEFI: MATSHITADVD-RAM UJ8B2 PciRoot(0x0)/Pci(0x1f,0x2)/Sata(4,65535,0)/CDROM(0,0x5c,0x28c0)AMBO

Det første som skjer når du slår på en PC, er at et program i ROM (Read Only Memory) starter. Dette programmet gjør en selvtest på maskinen. Selvtesten sjekker maskinens hovedkretskort samt I/U-enheter som usb, skjermkort, harddisker\SSD osv.

UEFI-boot under linux kan være litt trøblete særlig for nye brukere og funger dårlig mot windows, det anbefales å bruke rEFInd_0.10.2 (https://sourceforge.net/projects/refind/files/0.10.2/refind-cd-0.10.2.zip/download) for nybegynner brenne denne som iso fil til CD og starte fra CD da vil platen automatisk finne boot partisjonen.

Det er viktig å installere begge på lik måte, UEFI boot på både Windows\Linux. Da jeg selv har opplevet problemet med oppstartlasteren Grub2 ikke finner UEFI windows 10 installasjonen.

Starte Windows XP

rediger

Oppstarten av Windows XP er mer komplisert enn Windows 98. Du vil se at kun første delen er identisk med Windows 98. Oppstart under Windows XP går gjennom følgende trinn:

  * ROM (BIOS)
  * selvtest
       ** hovedkort
       ** I/U 
  • BIOS leser MBR (Master Boot Record) som er første sektor på den aktive partisjonen (partisjonen kan være på stasjon A, C, D etc)
  • MBR leser starter opp NTLDR som er oppstartsprogrammet for Windows XP. Det første NTLDR gjør er følgende:
  • starte minnesadressering
  • lese filsystemene
  • lese boot.ini
  • laste opp oppstartsteksten

Det er viktige at NTLDR er plassert i root / (fra windows). I root må filene NTDETECT.COM, BOOT.INI, BOOTSECT.DOS (ved dual oppstart) og NTBOOTDD.SYS (brukes av noen SCSI-kort) være plassert.

Fra menyen kan du nå velge XP. Etter at du har valgt XP vil NTLDR kjøre programmet NTDETECT.COM for å få informasjon om installert maskinvare. NTLDR bruker søkeveien som er spesifisert i BOOT.INI til å finne oppstartspartisjonen, hvor XP er installert. Under har jeg et eksempel:

default=multi (0)disk (0)partiton (2) \WINDOWS

[operating systems]

multi(0)disk(0)partiton(2)\WINDOWS="Microsoft Windows XP Home" /fastdetect

   NTLDR laster opp de to filene som er kjernen i Windows XP (NTOSKRNL.EXE og HAL.DLL). Disse filene må være plassert i %SystemRoot%\System32-katalogen.
   NTLDR leser registry-filene, velger maskinvareprofil, gjør en kontrollsjekk og laster opp de styreprogrammene som er nødvendig.
   NTOSKRNL.EXE tar deretter over og starter Winlogon.exe som igjen starter opp programmet LSASS.EXE (Local Security Administration). Dette er programmet som ønsker deg velkommen. Hvis du kjører Windows XP Professional får du nå opp innloggingsbilde. 

Starte Unix og Linux

rediger

Starten av Unix og Linux foregår på tilsvarende måte som for Windows 10 og Windows XP. Den går gjennom følgende trinn:

   * ROM (BIOS\UEFI\EFI)
   * selvtest
   * hovedkort
   * I/U 

Leser første sektor/track fra stasjon D: så, deretter eventuelt fra C (eller minnepenn). Så langt er oppstart under Window 10 og Windows XP identisk med en oppstart under Linux, ettersom maskinvaren er identisk. Første del av oppstarten foregår slik på de fleste mikro/mini-maskinene.

I Unix-verdenen har man et program som heter boot. I Linux heter boot-programmet LILO eller GRUB. Boot-programmene er et startprogram som er plassert på boot-blokken (MBR). MBR (master Boot Record) eller gjennomUEFI/SecureBoot /boot/efi er første sektor på den aktive partisjonen.

Programmene gir følgende ledetekst:

Unix System V Linux

boot: LILO boot: GRUB boot:

Her kan du spesifisere andre Unix- eller Linux-kjerner eller bruke opsjoner, for eksempel:

unix.old unix.SCSI linux linux single (opsjon)

unix.tape unix.clean linux.clean linux mem=256M (opsjon)

Har du en Windows 10-partisjon på harddisken, kan du spesifisere at du ønsker å få lastet opp operativsystemet Windows 10 ved å velge (eller skrive) Windows etter boot-kolonet. Har du en moderne variant av GRUB eller LILO vil du ved oppstart få et grafisk grensesnitt hvor du med tabtasten eller piltastene kan velge den partisjonen du ønsker å kjøre opp.

Det er også mulig å starte Linux-operativsystemet eller Unix-systemet fra en Minnepenn. Når Linux-kjernen er lastet opp, går den gjennom forskjellige systemfiler. Hvilke systemfiler den går gjennom, er avhengig av hvilke endringer du har gjort på oppstartsfilene. Init-prosessen starter opp når du starter opp et hvilket som helst Linux-system; du finner denne prosessen i standard Unix V.4 og i Linux. Init er ansvarlig for å starte alle andre normale prosesser du trenger, for eksempel smtp, ftp, news, http, nfs eller spesifikke rutiner som du selv har laget. Linux har tidligere vært basert på BSD-inits oppstartsprosedyre. I dag er Linux blitt mer og mer basert på System V, dermed har man ikke den store forskjellen mellom standard Unix V.4 og Linux.

De fleste aktører i markedet har gått over til system Vs oppstartsmetode, da den er enklere, kraftigere og mer fleksibel enn for eksempel en tradisjonell BSD-metode. Under oppstart av standard Unix System V plasseres alle konfig-filene i kataloger under /etc/rc.d, i motsetning til BSD som har det meste i katalogen /etc.

Oppstart Unix Oppstart Linux
Unix Linux
Init /etc/rc.d/init.d
/etc/rc/etc/rc.d/rc /etc/rc2
/etc/rc.d/rc.local/etc/rc3 /etc/rc.d/rc.local
/etc/rc.d /etc/rc.d/rc.sysinit
/System/Library/CoreServices/ /boot/efi
/etc/rc.d/0..9 /etc/rc
/etc/rc.d/rcn(n=0,,6).d /etc/rc

Linux søker flere steder etter init og kjører den første den finner. Init kjører /etc/init.d/bcheckrc eller /etc/rc.d/rc.sysinit (gjelder Red Hat Linux), deretter kjøres alle skriptene som er nødvendige på det spesifiserte kjørenivået (0,1,2,3,4,5,6).

I disse systemstartfilene finner du kommandoer og data som blir satt ved de forskjellige kjørenivåene. Du vil se at strukturen i Linux ikke er entydig.

Under Red Hat Linux finner du katalogen /etc/rc.d/init.d, hvor de fleste oppstartsskriptene som startes opp ved de enkelte kjørenivåene (0,1,2,3,4,5,6) ligger.

Figur 17.1: Innholdet av Linux-katalogen /etc/rc.d

Figur 17.2: Innholdet av Linux-katalogen /etc/rc.d/rc2.d

Hvilket kjørenivå skriptene skal kjøre, ser du ved å gå inn i de enkelte katalogene /etc/rc.d/rc1.d, /etc/rc.d/rc2.d, /etc/rc.d/rc3.d etc. De enkelte filene er igjen linket til /etc/rc.d/init.d. På kjørenivå 2 (/etc/rc.d/rc2.d) finner du cron, lpd etc. På kjørenivå 3 (/etc/rc.d/rc3.d) finner du sendmail, rwalld, postgresql, sound, httpd etc. Sjekker du katalogene /etc/rc.d/rc2.d og /etc/rc.d/rc3.d, ser du hva som blir startet opp på kjørenivå 2 og 3.

Hvilket kjørenivå som skal være standard, blir bestemt av /etc/inittab. Standard under Linux er id:5:initdefault (Red Hat), dvs. kjørenivå 3. Operasjoner som bare skal kjøres én gang uansett kjørenivå, finner du under /etc/rc.d/rc.local. Systemadministrator står fritt til å endre systemoppstartsfilene.

Felles for alle systemene er at systeminformasjon blir vist til hovedkonsollet. Det blir kjørt et enkelt skall på hovedkonsollet. Dette skallet tilhører systemadministrator (root), og brukes for å kontrollere filsystemet. Hvis filsystemet er i orden, kan du velge å kjøre systemet opp i forskjellige kjørenivå. Er ikke filsystemet i orden, blir fsck-programmet startet automatisk. Dette programmet fikser filsystemet (se kapittel 19). Når filsystemet er fikset, er du klar til å kjøre systemet opp i valgt kjørenivå.

Når systemet er i kjørenivå 1, går systemet gjennom systemfilen /etc/rc og katalogen /etc/rc.d/rc1.d.. I kjørenivå 2 går systemet gjennom filene i katalogen /etc/rc.d/rc2.d.

Når du går fra et lavere kjørenivå, for eksempel 1, til et høyere kjørenivå, for eksempel 2, blir alle filer i /etc/rc.d/rc2.d (Unix går også gjennom rc2.d-katalogen) som begynner på S*, utført. Når man går fra et høyere kjørenivå, for eksempel 3, til et lavere kjørenivå, for eksempel 2, blir kommandofiler i /etc/rc.d/rc3.d som begynner på K*, utført med stop-opsjon. Alle andre filer som hverken begynner med S eller K, blir fullstendig neglisjert i katalogen /etc/rc.d/rc3.d. S*- og K*-filene blir bestandig utført i ASCII i sortert rekkefølge.

De fleste skriptene du finner i katalogene under /etc/rc.d/, har start- og stop-opsjon. Du kan dermed manuelt starte og stoppe tjenester, for eksempel:

[root@nittedal /root]# /etc/rc.d/init.d/lpd stop

[root@nittedal /root]# /etc/rc.d/init.d/lpd start

Her stopper jeg lpd-prosessen. Init leser navn og argument. Hvis prosessen skal termineres, finner den "K"-skriptet, for eksempel K12lpd. Hvis prosessen skal startes, finner den "S"-skriptet, for eksempel S60lpd.

Endring av oppstartsskript

rediger

Du finner forskjellige metoder for å legge til eller fjerne programmer som skal startes opp automatisk ved system oppstart. Den første metoden og den mest innlysende, er å manuelt fjerne de aktuelle symbolske linkene med rm-kommandoen. Ønsker du for eksempel at sendmail-tjenesten ikke skal kjøre på din maskin, gjør du følgende:

   1. Fjern filen S80sendmail (oppkjøring) fra katalogen (/etc/rc.d/rc2.d)
   2. Fjern filen S80sendmail (oppkjøring) fra katalogen (/etc/rc.d/rc3.d)
   3. Fjern filen S80sendmail (oppkjøring) fra katalogen (/etc/rc.d/rc4.d)
   4. Fjern filen S80sendmail (oppkjøring) fra katalogen (/etc/rc.d/rc5.d)
   5. Fjern filen K30sendmail (nedkjøring) fra katalogen (/etc/rc.d/rc0.d)
   6. Fjern filen K30sendmail (nedkjøring) fra katalogen (/etc/rc.d/rc1.d)
   7. Fjern filen K30sendmail (nedkjøring) fra katalogen (/etc/rc.d/rc6.d) 

Alle de aktuelle filene har symbolske linker til katalogen /etc/init.d. Ønsker du at sendmail-tjenesten (daemonen) bare skal kjøre i kjørenivå 2, er det bare å fjerne oppstartsreferansene fra katalogene /etc/rc.d/rc3.d, /etc/rc.d/rc4.d og /etc/rc.d/rc5.d. I mange tilfeller kan det være lurt å skifte navn i stedet for å fjerne de symbolske referansene. Da har du alltid muligheten til manuelt å komme tilbake til utgangspunktet med hensyn til din originale oppstartsprofil. Hvis du skifter navn på filene i stedet for å fjerne de symbolske referansene er det bare å passe på at filene ikke begynner på S (start) eller K (kill). Du må aldri fjerne eller endre oppstartsskript i katalogen /etc/init.d. Det er slik at ingen skript blir kjørt direkte fra /etc/init.d. Alle skriptenei denne katalogen blir gjort tilgjengelig som linker fra katalogene /etc/rcX.d {X=1..6}. Det spiller derfor ingen rolle om du har skript i denne katalogen som du ikke bruker. Husk, kanskje senere vil du ha bruk for dem. De originale linkene får du på plass ved å bruke Linux-kommandoen ln. Under har jeg et eksempel:

[root@nittedal /rc2.d]# ln -s S80sendmail /etc/init.d/sendmail

Tilsvarende må settes opp for alle S- og K-skript i de nødvendige katalogene. Hvilke kataloger er selvfølgelig avhengig av kjørenivå som skal inkluderes. La oss anta jeg har laget et styreprogram som heter dskstyre og et skript som heter scriptdskstyre. Programmet ønsker jeg skal kunne starte opp i kjørenivå 2,3,5 og avsluttes i kjørenivå 0,1,4,6. Under har jeg et eksempel på hvordan denne tjenesten kan settes opp. Først kopieres programmet og skriptet på plass. Jeg må også sette på de riktige rettighetene.

[root@nittedal /root]# cp /home/elboth/dskstyre /usr/sbin/dskstyre

[root@nittedal /sbin]# chmod u=rwx, g=x, o=x dskstyre

[root@nittedal /root]# cp /home/elboth/scriptdskstyre /etc/init.d/scriptdskstyre

[root@nittedal /init.d]# chmod u=rwx, g=rx, o=rx scriptdskstyre

Nå er det bare å sette opp de symbolske linkene på oppkjøring og nedkjøring.

[root@nittedal /rc2.d]# ln -s S97dskstyre /etc/init.d/dskstyre

[root@nittedal /rc3.d]# ln -s S97dskstyre /etc/init.d/dskstyre

[root@nittedal /rc5.d]# ln -s S97dskstyre /etc/init.d/dskstyre

[root@nittedal /rc0.d]# ln -s K38dskstyre /etc/init.d/dskstyre

[root@nittedal /rc1.d]# ln -s K38dskstyre /etc/init.d/dskstyre

[root@nittedal /rc4.d]# ln -s K38dskstyre /etc/init.d/dskstyre

[root@nittedal /rc6.d]# ln -s K38dskstyre /etc/init.d/dskstyre

Den enkleste metoden for å endre oppstartsskriptene er å kjøre GUI-programmet system-config-services.

Figur 17.3: GUI-programmet Tjenestekonfigurasjon gir deg muligheten til å bestemme hvilke programmer som skal startes på de enkelte init-nivåene

Fra dette programmet er det enkelt å legge til, fjerne eller redigere et oppstartskript. Du har også muligheten til å starte et skript direkte.

[root@nittedal /root]# system-config-services

Du har også muligheten til å starte/endre oppstartskriptene ved å kjøre det tegnbaserte programmet ntsysv.

[root@nittedal /root]# ntsysv

Dette programmet kan du også starte opp fra setup-programmet ([root@nittedal /root]# setup). Her får du opp en liste over servertjenester. De tjenestene som kjøres er merket med stjerne. Ønsker du å starte opp en tjeneste, merker du dette med mellomromstasten. Deretter er det bare å trykke på tab-tasten og godkjenne med ok.

Figur 17.4: Det tegnbaserte programmet ntsysv gir deg muligheten til å bestemme hvilke programmer som skal startes på de enkelte init-nivåene

Programmet ntsysv er begrenset til å fjerne en eksisterende tjeneste eller sette opp en tjeneste som er definert i katalogen /etc/init.d. Du har ikke muligheten til å redigere en tjeneste med hensyn til for eksempel oppstartsnummer.

Kjørenivå infotjenester – chkconfig

rediger

chkconfig er en mye brukt kommando for å få en status på hvilket kjørenivå de enkelte tjenestene kjører under og hvilken status de har. Kommandoen gir også et enkelt verktøy for å vedlikeholde /etc/rc[0-6].d-katalogstrukturen uten å måtte håndtere de symbolske linkene. Kommandoen chkconfig er tatt fra IBMs AIX-operativsystem.

Kommandoen chkconfig oppdatere og spørring på kjørenivå
Kommando: chkconfig -- list [argument]

chkconfig -- add argument chkconfig -- del argument chkconfig [-- level nivå] argument <on|off|reset> chkconfig [-- level nivå] argument

Funksjon: Oppdaterer kjørenivå eller gir statusinformasjon
Argument: Navn på tjeneste
Opsjoner: Se også Linux-man-sidene.

Ønsker du å se en liste over alle servertjenestene med status på om de er på (on) eller av (off) er det bare å skrive følgende:

[root@nittedal /root]# chkconfig --list | less

canna 0:av 1:av 2:på 3:på 4:på 5:på 6:av

atd 0:av 1:av 2:av 3:på 4:på 5:på 6:av

skriptstart 0:av 1:av 2:på 3:på 4:på 5:på 6:av

keytable 0:av 1:på 2:på 3:på 4:på 5:på 6:av

syslog 0:av 1:av 2:på 3:på 4:på 5:på 6:av

gpm 0:av 1:av 2:på 3:på 4:på 5:på 6:av

...

..

xinetd baserte tjenester:

chargen-udp: av

chargen: av

daytime-udp: av

daytime: av

echo-udp: av

echo: av

time-udp: av

time: av

dbskkd-cdb: av

sgi_fam: på

finger: av

rexec: av

rlogin: av

rsh: av

ntalk: av

talk: av

telnet: på

wu-ftpd: på

rsync: av

amanda: av

comsat: av

linuxconf-web:av

amandaidx: av

amidxtape: av

imap: av

imaps: av

ipop2: av

ipop3: av

pop3s: av

eklogin: av

gssftp: av

klogin: av

krb5-telnet: av

kshell: av

swat: på

tftp: av

Utskriften viser hvilke tjenester som er definert i /etc/init.d-katalogen. Noen av disse tjenestene vil du se er satt opp til å kjøre opp og ned på bestemte kjørenivåer. Ser du på for eksempel tjenesten kudzu (Kudzu lastes rett etter at du har slått på din PC, dvs. kjørenivå 3. Kudzu sjekker om du har installert ny maskinvare.), kjøres den ned i kjørenivå 0,1,2 og 6. Tjenesten kjøres opp i kjørenivå 3, 4 og 5. Du vil også se at du har tjenester som ikke er satt opp, disse vil ha av (off) på alle kjørenivåer. Eksempel på en slik tjeneste er servertjenesten nfs. Under har jeg et eksempel med Samba.

[root@nittedal /root]# chkconfig --list smb

smb 0:av 1:av 2:av 3:av 4:av 5:på 6:av

Kommandoen chkconfig er også mye brukt i forbindelse med nettverksbaserte tjenester, dvs. xinetd. Fra utskriften over ser du hvilke xinetd-baserte tjenester som er slått på. Hvilke portnummere de enkelte tjenester har, ser du fra /etc/services.

Nå kan du prøve å lage din egen serverprosess.

[root@nittedal /root]# vi skriptstart

  1. chkconfig: 2345 20 80
  1. description: Gjør ikke noe som helst
  1. processname: serverdavid

I vår konfigurasjonsfil har jeg definert at skriptet skal startes i kjørenivå 2,3,4 og 5. Startsprioriteten har jeg satt til 20, noe som betyr at skriptet starter tidlig i de enkelte kjørenivåene. I filnavnet til oppstartskriptet vil tallet 20 bli en del av filnavnet, dvs. S20skriptstart. På nedkjørings-skriptet har jeg satt 80, noe som betyr at skriptet vil kjøres sent i de enkelte kjørenivåene. Filnavnet på nedkjøringsskriptet blir K80skriptstart.

Server- eller klient-tjenesten, som her er serverdavid, må selvfølgelig være definert i form av en binær- eller skriptfil i for eksempel katalogen /usr/sbin. Når skriptet er ferdig, flyttes det til katalogen /etc/init.d.

[root@nittedal /root]# cp skriptstart /etc/init.d/.

Da er vi klare til å oppdatere alle de symbolske linkene med kommandoen chkconfig.

[root@nittedal /root]# chkconfig --add skriptstart

skriptstart 0:av 1:av 2:på 3:på 4:på 5:på 6:av

Sjekker du nå i katalogstrukturen, vil du se at de nødvendige linkene er på plass.

Figur 17.5: Etter at chkconfig-kommandoen er kjørt, er den nye katalogstrukturen på plass

Du finner mer om hvordan syntaksen på chkconfig skal være ved å lese Linux-man-sidene.

Nettverkstjenester med xinetd

rediger

Du finner mange nettverkstjenester som ikke blir håndtert av egne oppstartskript. Disse blir i stedet kjørt under xinetd-serverprosessen (tidligere inetd). Xinetd kaller vi en superserverprosess, da det finnes så mange serverprosesser som er knyttet opp mot denne. For å sjekke om denne prosessen kjører, bruker du ps-kommandoen [root@nittedal /root]# ps ax).

Du vil ikke kunne se de enkelte nettverksjenestene. Ønsker du en oversikt over hvilke tjenester som går, kan du se dette med chkconfig-kommandoen. Oppsettet av de enkelte tjenestene er satt opp i filen /etc/xinetd.conf. Denne filen leser igjen konfigurasjonsfilene fra katalogen /etc/xinetd.d. Fra de enkelte konfigurasjonsfilene i katalogen /etc/xinetd.d vil du finne den spesifiserte tjeneste med tilhørende serverprogram. Du vil også finne at noen av disse tjenestene skriver til loggfilen /var/log/messages.

I tabellen på neste side finner du noen av de mest brukte tjenestene som går under xinetd.

Tjeneste Binærfil Kommentar
amanda /usr/lib/amanda/amandad Et avansert (automatisk) nettverksbasert diskarkiv (Maryland).
comsat /usr/sbin/in.comsat Biff-programmet gir beskjed om ny e-post.
eklogin /usr/kerberos/sbin/klogind Del av Kerberos-login-programmet.
finger /usr/sbin/in.fingerd Alle innkommende finger-forespørsler blir håndtert av denne serverprosessen. Se finger-kommandoen.
gssftp /usr/kerberos/sbin/ ftpd En Kerberos-prosess som håndterer ftp.
imap /usr/sbin/imapd En prosess som håndterer eksterne postklienter slik at de kan lese e-post fra en IMAP-server.
linuxconf /sbin/linuxconf Gjør det mulig å kjøre linuxconf fra en nettleser.
ntalk /usr/sbin/in.talkd En serverprosess som setter talk mellom brukere. Se talk-kommandoen.
rlogin /usr/sbin/in.rlogind En serverprosess som håndterer eksterne påloggingsforespørsler. Se rlogin-kommandoen.
rsh /usr/sbin/in.rshd En serverprosess som gjør at du kan kjøre r-kommandoer på eksterne verter. Se r-kommandoer.
swat /usr/sbin/swat En serverprosess som gjør det mulig å administrere Samba fra en nettleser. Se Samba.
wu-ftpd /usr/sbin/in.ftpd En serverprosess som håndterer ftp-forespørsler. Se ftp-kommandoen.

I min tabell har jeg bare tatt med de viktigste tjenestene. Bruk kommandoen chkconfig ([root@nittedal /root]# chkconfig --list | less) hvis du ønsker en oversikt. Du vil se at tjenester som chargen-udp, chargen, daytime-udp, daytime, echo-udp, ipop2, ipop3, pop3s, klogin, krb5-telnet, kshell og Samba ikke er med i tabellen.

En serverprosess som er definert i /etc/xinetd.conf kan enten være enkelttråds- (singel-thread server) eller flerttrådsbasert (multithread server). Når du har en serverprosess som er enkelttrådsbasert, kan den bare håndtere en aktiv forespørsel om gangen, mens en flertrådsbasert serverprosess kan håndtere alle forespørsler som kommer. En enkelttrådsbasert server er oppe og går hele tiden mens en flertrådsserver går ned når det ikke er flere klienter som ønsker å bruke servertjenestene.

Går du gjennom katalogen /etc/xinetd.d, vil du se at de forskjellige tjenestene er basert på forskjellige protokoller (som for eksempel tcp og udp) og portnumre, noe som er viktig å vite og være klar over hvis disse tjenestene skal passere en brannmur eller en rute med filter. Forskjellig bruk av socket har bare interesse for hastigheten over nettverket og for de som skal utvikle socketapplikasjoner.

Systemfilen /etc/inittab

rediger

Oppstarten av Linux er avhengig av et spesielt program som man kaller init (se også kapittel 11 og 21). Dette programmet startes opp som siste fase etter opplastningen av Linux-kjernen.

Init-prosessen er den “første" (swapper er først med prosess-id 0) som startes på systemet og får prosess-id 1. Init-prosessen starter videre alle andre prosesser som er beskrevet i /etc/inittab. Denne filen inneholder instruksjoner til /etc/init (eller /sbin/init). Linux' init-prosess leser ved følgende tre tilfeller /etc/inittab-filen:

  * ved Linux-oppstart (boot)
  * når en prosess bruker init
  * når systemadministrator starter init (eller det beslektede programmet /bin/telinit) 

Uansett når systemet endrer kjørenivå, blir /etc/inittab analysert for instruksjoner. Filen /etc/inittab er satt sammen av fire felter:

Identifikasjon:init-modus:aksjon:prosess

Identifikasjonen består av en tekststreng på opptil fire karakterer. Med init-modus spesifiserer man hvilket kjørenivå prosessen skal starte på. Dette nivået varierer fra 1 til 6. Man kan også ha kombinasjoner av nivåer. Systemet er i enbrukermodus (kjørenivå 1) når init kjører i nivå 1 eller S. Aksjonsfeltet beskriver hva som skal gjøres. Kolonnefeltet "prosess" peker til den fysiske prosessen som skal kjøres. De vanligste aksjonene (kolonne nummer 3) finner du definert i tabellen nedenfor.

Kolonne 3 Beskrivelse
Off Avslått.
Respawn Starter spesifisert prosess hvis den ikke er i gang. Hvis prosessen dør, skal den startes på nytt.
Wait Venter med oppstart av spesifisert prosess.
Once Starter den spesifiserte prosessen bare én gang. Hvis prosessen dør, blir den ikke startet på nytt.
Initdefault Her brukes det andre feltet (init-modus) som oppstartsnivå.

Nedenfor har jeg et eksempel på /etc/inittab-fil for Linux:

  1. inittab This file describes how the INIT process should set up
  1. the system in a certain run-level.
  1. Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
  1. Modified for RHS Linux by Marc Ewing and Donnie Barnes
  1. Default runlevel. The runlevels used by RHS are:
  1. 0 - halt (Do NOT set initdefault to this)
  1. 1 - Single user mode
  1. 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
  1. 3 - Full multiuser mode
  1. 4 - unused
  1. 5 - X11
  1. 6 - reboot (Do NOT set initdefault to this)

id:5:initdefault:

  1. System initialization.

si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0

l1:1:wait:/etc/rc.d/rc 1

l2:2:wait:/etc/rc.d/rc 2

l3:3:wait:/etc/rc.d/rc 3

l4:4:wait:/etc/rc.d/rc 4

l5:5:wait:/etc/rc.d/rc 5

l6:6:wait:/etc/rc.d/rc 6

  1. Things to run in every runlevel.

ud::once:/sbin/update

  1. Trap CTRL-ALT-DELETE

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

  1. When our UPS tells us power has failed, assume we have a few minutes
  1. of power left. Schedule a shutdown for 2 minutes from now.
  1. This does, of course, assume you have powerd installed and your
  1. UPS connected and working correctly.

pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

  1. If power was restored before the shutdown kicked in, cancel it.

pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"

  1. Run gettys in standard runlevels

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

4:2345:respawn:/sbin/mingetty tty4

5:2345:respawn:/sbin/mingetty tty5

6:2345:respawn:/sbin/mingetty tty6

  1. Run xdm in runlevel 5
  1. xdm is now a separate service

x:5:respawn:/etc/X11/prefdm -nodaemon

I første aktive linje (id:5:initdefault:) ser du at Linux-maskinen starter opp som standard i kjørenivå 5. Her er det definert virtuelle terminalseksjoner på 6 forskjellige konsoller (tty1-tty6). Til slutt i filen ser du at i kjørenivå 5 skal xdm (gdm, kdm), det grafiske innloggingsprogrammet, startes.

Terminalfilen /etc/termcap

rediger

I Linux finner du to databaser for definisjoner av terminaler. Man kan velge å bruke /etc/termcap eller /usr/lib/terminfo. Den siste databasen er kompilert og er raskere å bruke enn /etc/termcap.

Nedenfor har jeg et eksempel på en terminaldefinisjon tatt fra en /etc/termcap-fil. Terminaldefinisjonene gjelder for en Linux-terminal. Når du logger deg inn på en Linux-boks på hovedkonsollet før du starter X Windows, kjører de fleste med terminaldefinisjonen “linux". Nedenfor har jeg et eksmpel på kontrollkoder for flytting av markør, sletting av skjermbildet og definisjon av funksjonstaster. For nærmere beskrivelse, se også Linux-man-sidene. F1 til F9 er definisjon av funksjonstastene.

  1. From: Eric S. Raymond <esr@snark.thyrsus.com> 9 Nov 1995
  1. added linux-lat as an alias -- theline drawing
  1. characters aren't right, but
  1. I think everything which uses line-drawing chars uses terminfo anyway -- ewt

linux|linux-lat|linux console:\

am:eo:mi:ms:ut:xn:xo:\
co#80:it#8:li#25:\

Under /usr/lib/terminfo finner du en katalog for hver bokstav i alfabetet. Under bokstaven a finner du alle terminaldefinisjoner som begynner på a. Eksempler på terminaltype som begynner på a er ansi og adds. Kommandoene og kodene i den kompilerte terminaldatabasen er forskjellige fra /etc/termcap.

Skal du lage en terminaldefinisjon i /usr/lib/terminfo, lager du først en terminaldefinisjonsfil i form av en tekstfil. Denne tekstfilen kompileres med Linux-kommandoen tic. Til slutt flyttes filen til riktig kat­alog, for eksempel til /usr/lib/terminfo/a, hvis terminalen (og filen) heter ansi. Mer om terminaldefinisjoner finner du på Linux-man-sidene.

Oppgaver til kapittel 17

rediger

Oppgave 17.1

Hvorfor er den første delen av oppstarten identisk under Windows 10, Unix og Linux?

Oppgave 17.2

Nevn de to viktigste binærfilene som kreves for å laste opp Linux.

Oppgave 17.3

Hva er en Linux-partisjon og hva gjør oppstartblokken (boot-blokka)?

Oppgave 17.4

Hva skjer når Linux-systemet lastes opp?

Oppgave 17.5

Hvilken prosess er mor til alle andre?

Oppgave 17.6

Når blir skriptene under /etc/rc.d/rc2.d-katalogen kjørt?

Oppgave 17.7

Hva er forskjellen på K*- og S*-skriptene?

Oppgave 17.8

Nevn 3 metoder for å endre oppstart av en tjeneste.

Oppgave 17.9

Hvis du skal sette opp en tjeneste manuelt, hvilke filer/kataloger må da oppdateres?

Oppgave 17.10

Hva gjør chkconfig-kommandoen?

Oppgave 17.11

Hva gjør xinetd-prosessen?

Oppgave 17.12

Nevn noen viktige tjenester som går under xinetd, og hvor vi finner konfigurasjonsfilene for disse tjenestene.

Oppgave 17.13

Hva skal stå i /etc/inittab-filen hvis du bare ønsker systemet i full flerbrukermodus uten X11?

Oppgave 17.14

Hvilken funksjon har /etc/termcap- og /usr/lib/terminfo-filene?

Oppgave 17.15

Hvordan lager du terminaldefinisjon i /usr/lib/terminfo?