Prosessien käynnistyminen Ubuntussa. Aika etenee vasemmalta oikealle. Ensimmäisenä käynnistyvä init näkyy ylimpänä.
**init** on Unixissa ja Unixin kaltaisissa käyttöjärjestelmissä ensimmäinen prosessi, jonka tehtävä on käynnistää muut prosessit ja palvelut tietokoneen käynnistyksen yhteydessä. Initin prosessinumero on 1 kaikki muut prosessit ovat siten sen lapsiprosesseja.

Perinteisesti käytössä on ollut Unix System V -tyylisiä (sysvinit) ja BSD-tyylisiä init-ohjelmaa. Perinteisille init-ohjelmille on kehitetty useita korvaajia.

Toiminta
--------

init on ensimmäinen (ja ainoa) prosessi jonka Unixin käyttöjärjestelmän ydin käynnistää tietokoneen käynnistyksen jälkeen. init myös pysyy käynnissä koko järjestelmän toiminnan ajan. Koska init käynnistyy ensimmäisenä, se saa prosessinumeron 1, ja kaikki myöhemmin käynnistettävät prosessit ovat sen lapsiprosesseja. Unixin toiminnan mukaan prosessit, joiden isäprosessi on kuollut saavat isäprosessikseen prosessin 1, joka on init. Tällä on merkitystä lähinnä Unixin signaalinkäsittelyn kannalta, koska init saa tiedon lapsiprosessiensa lopettamisesta.

Toinen initin tehtävä on käynnistää kaikki daemonit (palvelinprosessit) koneen käynnistyessä. Näiden käynnistämisessä, ja etenkin niiden konfiguraatiossa on eroja eri käyttöjärjestelmissä.

Perinteiset initit
------------------

Varhaiset init-toteutukset ajoivat tiedoston /etc/rc sisältämän komentosarjan, joka käynnisti tyypillisesti joukon getty-prosesseja käyttäjän terminaaliyhteyksiä varten. 1980-luvulla tapahtui jako perinteisiin BSD-tyylisiin ja uusiin System V -tyylisiin initteihin.

### BSD-init

BSD-tyylinen init perustuu /etc-hakemistossa sijaitseviin rc-komentosarjoihin. Aluksi init ajaa pääasiallisen /etc/rc-komentotiedoston, joka suorittaa koko käynnistysprosessin. Nykyään se lukee joukon asetustiedostoja (esim. /etc/rc.conf jne.) ja suorittaa apukomentosarjoja (esim. rc.\*), jotka käynnistävät palvelut. BSD-tyylisen initin etuja on nopeus ja yksinkertaisuus. Haittapuolena on skaalautuvuus sekä virhealttius: Ohjelman lisääminen käynnistyssekvenssiin vaatii käynnistystiedostojen muokkaamista, mikä virheen sattuessa saattaa johtaa koko käynnistysprosessin epäonnistumiseen.

### SysVInit

AT&T:n vuonna 1983 julkaisema Unix System V toi mukanaan uudistetun initin. System V -tyylinen init perustuu ajotasoihin (runlevel), joita on tyypillisesti kahdeksan: 0–6 sekä S. Kukin ajotaso määrittelee joukon ajettavia prosesseja. Ajotasoista 0 on varattu järjestelmän sammuttamiseen ja 6 uudelleenkäynnistykseen. Tasot S ja 1 ovat ylläpitoon tarkoitettuja yhden käyttäjän tiloja. Loput tasot 2–5 ovat normaaleja monen käyttäjän tiloja, joiden käyttötarkoitus vaihtelee eri käyttöjärjestelmissä ja jakeluissa. Etenkin Linuxissa taso 5 on usein täysi graafinen tila X:llä ja tasot 3 sekä 2 tekstitiloja verkkoyhteydellä sekä ilman verkkoa.

Asetustiedostossa /etc/inittab on määritelty eri ajotasoilla suoritettavat toimenpiteet sekä oletusajotaso, johon järjestelmä siirtyy käynnistyksen yhteydessä. Käyttäjä voi vaihtaa ajotasoa *telinit*-komennolla. Normaalisti uudelle ajotasolle siirryttäessä ajetaan komentosarja /etc/init.d/rc, joka pysäyttää edellisen ajotason palvelut ja käynnistää uuden tason palvelut. Kullakin palvelulla on hakemistossa /etc/init.d oma komentosarjatiedosto, jota kutsumalla rc-skripti (tai käyttäjä) voi käynnistää ja pysäyttää palvelun. Jokaisella ajotasolla lisäksi on oma hakemisto (/etc/rc0.d, /etc/rc1.d, jne.), joka sisältää linkit tasolla käynnistettävien ja sammutettavien palvelujen /etc/init.d-komentosarjoihin. Ajotason vaihdon yhteydessä rc-skripti määrittää ajettavat pysäytys ja käynnistysskriptit näiden linkkien perusteella.

Uusi sukupolvi
--------------

Perinteisille initeille on kehitetty lukuisia nykyaikaisempia korvaajia. Aiemmasta poiketen nämä tukevat tyypillisesti palvelujen rinnakkaista käynnistämistä sekä palvelujen välisiä riippuvuussuhteita ja usein monipuolisempaa prosessien elinkaaren hallintaa. Monet pyrkivät myös korvaamaan tehtävien ajastamiseen käytettyjä työkaluja kuten cronin ja inetd:n. Mikään näistä ei ole kuitenkaan vielä noussut standardin asemaan SysVInitin tilalle.

Seuraavassa on listattu yleisiä uuden sukupolven inittejä:

* Launchd on ollut käytössä Mac OS X:ssä versiosta 10.4 lähtien (vuodesta 2005). Se korvasi aiemmin käytetyt *mach\_initin* ja BSD-initin sekä suuren osan *SystemStarterin*, cronin ja xinetdn toiminnallisuudesta.
* Upstart perustuu riippuvuuksien sijaan tapahtumiin. Se on käytössä ainakin Ubuntussa (versiosta 6.10 lähtien, vuodesta 2006) ja Fedorassa (versiosta 9 lähtien, vuodesta 2008).
* systemd on freedesktop.org:n ylläpitämä init-prosessi, joka on yhteensopiva sysvinit-skriptien ja -komentojen kanssa ja tarjoaa myös oman konfigurointimahdollisuutensa. Kuten Upstart, systemd voi suorittaa eri toimintoja järjestelmätapahtumien johdosta. systemd on useimmissa Linux-jakeluissa vaihtoehtona tai oletuksena (mm. Fedora ja openSUSE) käytössä.
	+ systemd:n mukana ollut udev-ohjelmisto on poistettu systemd-projektista koska firmwaren lataaminen on ytimen vastuulla.
* Service Management Facility, on osa Sun Solarista versiosta 10 eteenpäin (vuodesta 2005).
* Gentoo käyttää muunnettua SysVInit-järjestelmää, joka tukee rinnakkaisuutta ja riippuvuuksia.
* Initng pyrkii nopeuttamaan käynnistystä rinnakkaisuudella.

Muita vaihtoehtoja ovat esimerkiksi *need* (SysVInitin laajennos), *runit* ja *minit*.

Huomautukset
------------

1. 1 2 3 4 5  Tyypillinen sijainti. Tiedostojen sijainnit saattavat vaihdella eri järjestelmissä.

Lähteet
-------

1. 1 2  Init *linux.fi*. Viitattu 22.7.2009.
2. 1 2 3 4 5  Rick Moen: Understanding Init and Alternatives *linuxmafia.com*. Viitattu 28.7.2009. (englanniksi)
3. 1 2 3 4 5  Yvan Royon, Stéphane Frénot: A Survey of Unix Init Schemes (PDF)  20.6.2007. INRIA. Viitattu 9.8.2009. (englanniksi)
4. ↑  Mayank Sarup: A look at System V initialization  14.1.2001. FreeOS.com. Viitattu 9.8.2009. (englanniksi)
5. ↑  Phil Dibowitz: Run Levels for Various Unices *phildev.net*. Viitattu 9.8.2009. (englanniksi)
6. ↑  käynnistysprosessi GNU/Linuxin käynnistysprosessi *linux.fi*. Viitattu 9.8.2009. [vanhentunut linkki]
7. ↑  Getting Started with launchd *Apple Developer Connection*.  22.8.2005. Viitattu 9.8.2009. (englanniksi)
8. ↑  Rich Rosen, Brian Jepson: "Chapter 4: Startup", *Mac OS X for Unix Geeks*, s. 69–71. 4. painos. O'Reilly, 2008. ISBN 9780596520625. (englanniksi)
9. ↑  upstart - event-based init daemon *upstart.ubuntu.com*.  Arkistoitu 30.12.2018. Viitattu 9.8.2009. (englanniksi)
10. ↑  Ubuntu 6.10 Release Notes *ubuntu.com*.  26.10.2006.  Arkistoitu 16.3.2007. Viitattu 23.5.2009. (englanniksi)
11. ↑  Fedora 9:n julkaisutiedote / 17. Järjestelmäpalvelut *docs.fedoraproject.org*.  16.4.2008. Viitattu 23.5.2009. (englanniksi)[vanhentunut linkki]
12. ↑  Cristian Rodríguez: [systemd-devel [PATCH] Drop the udev firmware loader] *lists.freedesktop.org*.  29.5.2014. Viitattu 16.6.2019. (englanniksi)
13. ↑  Initng *initng.org*.  Arkistoitu 11.9.2017. Viitattu 9.8.2009. (englanniksi)

Aiheesta muualla
----------------

* Init linux.fi-wikissä (suomeksi)
* GNU/Linuxin käynnistysprosessi linux.fi-wikissä (suomeksi)
* A look at System V initialization, katsaus SysVInit-käynnistykseen vuodelta 2001 (englanniksi)
* Understanding Init and Alternatives, luentomateriaali init-vaihtoehdoista (englanniksi)
* A Survey of Unix Init Schemes (PDF), Yvan Royon, Stéphane Frénot 20.6.2007 (englanniksi)
* Linux System Administrator's Guide / 9.1. init comes first (Arkistoitu – Internet Archive) (englanniksi)