Az UHU-Linux 1.1-es kiadásához a rendszer indítását és leállítását vezérlő szkripteket az 1.0-beli rendszer több súlyos hibája és hiányossága miatt teljesen újraírtuk. Az 1.1-ben lévő rendszer még nem végleges állapot, szándékozunk a mélyén tovább fejleszteni (például a démonok figyelését és az elszállt programok újraindítását beleépíteni), de az alap koncepció várhatóan nem fog jelentősebb mértékben változni.
Jelen leírás az UHU-Linux 1.1-ben lévő állapotot tükrözi.
Az egész megoldás alapját továbbra is a SysVinit csomag szolgáltatja. A rendszer első induló programja ennek megfelelően az /sbin/init, amely az /etc/inittab konfigurációs fájl szerint cselekszik. A fájl UHU által szállított változatában az 5-ös van megnevezve alapértelmezett futási szintként, valamint futási szint váltásához minden esetben az /sbin/runlevelchange program van hozzárendelve. A runlevelchange programot kézzel soha ne indítsuk futási szint váltásához, ezt bízzuk mindig az init programra, használjuk a megszokott "init 3", "init 5" stb. parancsokat, amelyek majd megfelelően meg fogják hívni a runlevelchange programot.
A rendszer indításának első lépéseként az /etc/rc.boot könyvtár szkriptjei futnak le nevük szerinti ábécérendben. (Az UHU által itt elhelyezett szkriptek nevei mind kétjegyű számmal kezdődnek, így számértékük szerint növekvő sorrendben futnak le). Ezek a szkriptek végzik a rendszer működése számára alapvető fontosságú, egyszer elvégzendő teendőket. (Az indított parancsokat kiírja, de nem hajtja végre az "/sbin/runlevelchange --test N S" parancs. Ezt akár egyszerű felhasználóként is futtathatjuk, nem szükséges rendszergazdai jogosultság.) Ezt követi hamarosan ismertetett módon a kívánt futási szintre (alap értelmezésben 5-ös szintre) váltás, amely már olyan plusz szolgáltatások indításával jár, melyek a rendszer futása során többször is leállíthatók vagy újraindíthatók. (Az itt indítandó parancsokat az "/sbin/runlevelchange --test N 5" parancs írja ki, az 5-ös helyébe írjuk a kívánt futási szintet.)
A rendszer futása során lehetőségünk van az 1-től 5-ig terjedő futási szintek között akárhányszor váltani. Ilyenkor először leállnak azok a szolgáltatások, melyeknek a régi futási szinten futniuk kellett, de az újon nem. Ezt követően elindulnak azok, melyeknek a régin nem kellett futniuk, az újon viszont igen. (Az "/sbin/runlevelchange --test 5 3" parancs segítségével (az 5 és 3 helyére rendre a régi és az új futási szint számát írjuk) tekinthetjük meg az ilyenkor lefutó parancsokat.)
Végezetül a 0-s vagy 6-os futási szintre váltás jelenti a rendszer leállítását, illetve újraindítását. Ilyenkor először kilépünk az aktuális futási szintből (az ahhoz tartozó szolgáltatásokat leállítjuk), majd végül az egészet keret rendszerbe zárva ábécérendben lefuttatjuk az /etc/rc.halt könyvtár alatt található szkripteket, melyek a leállításhoz kapcsolódó, egyszer elvégzendő teendőket tartalmazzák. (Teszt: "/sbin/runlevelchange --test 5 6". Az első szám az aktuális futási szint 1-től 5-ig, a második 0 leállítás, 6 újraindítás esetén.)
A létező szolgáltatásokat az "/sbin/srvmgr --list" parancs sorolja fel, ez gyakorlatilag kilistázza az /etc/runlevel.d/default könyvtár alatt található .service kiterjesztésű fájlokat (a kiterjesztés nélkül).
Ezen service fájlok Név=érték típusú sorokat tartalmaznak. Az összetartozó fájl-párból először a default, majd a custom kerül kiolvasásra, a későbbi értékek felülbírálhatják a korábbiakat, tehát a custom fájlban lehetőségünk van a default alatti fájlban lévő bizonyos értékeket átállítanunk.
A default alatti fájlok a szolgáltatások alapértelmezett tulajdonságait tartalmazzák. Ezek a csomagkezelőben nincsenek konfigurációs fájlként megjelölve, így a megfelelő csomag újratelepítése vagy frissítése során felülíródnak. A fájlok célja az, hogy az alapértelmezett beállítások bármikor utólag is visszanyerhetők legyenek. Ezért ezeken a fájlokon soha ne változtassunk!
A custom alatti fájlok szolgálnak az általunk módosítani kívánt értékek beállítására. Az UHU csomagok ezeket a fájlokat mind konfigurációs fájlként megjelölve, üres tartalommal szállítják. Ez garantálja azt, hogy csomag frissítése vagy egyszerű eltávolítása (remove) során tartalmuk megmarad, míg a csomag teljes törlése (purge) alkalmával eltűnnek. Megjegyzendő, hogy csomag egyszerű eltávolítása (remove) során ez a fájl ugyan ittmarad, de párja, a default alatti fájl eltűnik (hiszen az nem konfigurációs fájl), és ennek megfelelően a szolgáltatás nem létezik többé az UHU init szkript rendszere szemében.
Összefoglalva: A default alatti fájlok az alapértelmezett értékeket tartalmazzák, ezeken ne módosítsunk. A custom alatti fájlok szolgálnak saját egyéni kívánságaink rögzítésére.
A custom alatti fájlokat szerkeszthetjük ugyan kézzel is, de ajánlott az srvmgr program, vagy az UHU Vezérlőpultban megtalálható grafikus felület használata. Az srvmgr program használatáról a --help kapcsoló ad rövid magyarázatot, és bash használata esetén a TAB-os kiegészítés segít a helyes használatban. A --show kapcsoló egy szolgáltatás aktuális értékeit (tehát a default és a custom fájl összeolvasásának eredményét) írja ki, a --show-default és a --show-custom használható csak egyik illetve csak másik fájl feldolgozott tartalmának megjelenítésére. A --set kapcsolóval helyezhetünk el egy értéket a custom fájlban, vagyis az adott szolgáltatásra beállítunk egy értéket, felülbírálva az alapértelmezettet vagy módosítva a korábban beállítottat. A --clear kapcsolóval tudunk a custom fájlból egy sort törölni, visszaállítva ezáltal a mindenkori alapértelmezett érték használatát.
Lényeges különbség az UHU 1.0-hoz és a legtöbb disztribúcióhoz képest, hogy amennyiben kézzel kívánunk egy szolgáltatást elindítani vagy leállítani, az esetben ezeket a szkripteket nem tudjuk önmagukban indítani, az "/etc/init.d/cron start" és ehhez hasonló parancsok nem működnek. Helyettük a service programot kell használnunk, például "service cron start".
A szkript közvetlen indításának rendkívül sok hátránya volt, például kiszámíthatatlan volt, hogy milyen beállításokkal (környezeti változók, umask, nice stb.) indul el a szkript, amely bizonyos esetekben következetlen működéshez, nehezen megfogható hibákhoz vezethetett. A service előtét-program igyekszik a környezetet minél egységesebbre beállítani a program indítása előtt.
Későbbiekben tervezzük átszervezni, hogy egy központi démon figyelje a szolgáltatásokat, a kilépőket szükség esetén újraindítsa stb. Ez esetben mindenképpen tudnia kell ennek a démonnak az egyéb futó szolgáltatásokról, így azok indítása csak ezen démon tudtával történhet. Erre a közvetlen szkriptes indítás nem alkalmas, szükség van egy előtét programra, amely a démonnal közli, hogy mit kell tenni. A mostani service program ugyan még nem így működik, de a későbbiekben ez az átállás megtehető lesz anélkül, hogy a felhasználónak újra át kellene szoknia egy újabb megoldásra.
A service program a szolgáltatások leíró fájljai alapján dolgozik, így például figyelembe tudja venni a Nice, UID, GID értékeket, így ezek beállításának nem az init szkriptekben kell megtörténniük. Ez egyszerűbbé, könnyebben átláthatóbbá teszi az init szkripteket, hiszen központosítva, kigyűjtve máshol tároljuk az ilyen adatokat.
Tovább egyszerűsít a szkripteken, hogy nem kell az LSB szabvány által megkövetelt force-reload és restart argumentumokat kezelniük, valamint hibaüzeneteket adniuk ismeretlen argumentum esetén. Bőven elég a start, stop, reload és status argumentumokat ismerniük. A többi a service program dolga. Például a "service cron restart" parancs először "stop", majd a RestartSeconds változóban megadott várakozás után (alapértelmezés: 1 másodperc) "start" argumentummal indítja el a cron szolgáltatás init szkriptjét. Hasonlóan ha a service program force-reload kapcsolót kap, akkor a SupportsReload tulajdonságnak megfelelően vagy reload, vagy pedig stop és start argumentummal indítja a szkriptet.
A service program figyelmen kívül hagyja a futási szintekről szóló Runlevels, az indítási sorrendet megadó Sequence, valamint az egymással ütköző szolgáltatások leírására szolgáló Resources és Priority mezőket.
Az srvmgr-hez hasonlóan a service parancs argumentumainak gépelése során is hatalmas segítséget tud nyújtani a bash TAB-os kiegészítése.
További leírás a /usr/share/doc/Packages/uhu-init/README_HU fájlban található.