OpenRC

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page OpenRC and the translation is 99% complete.
Resources
Article status
This article has some todo items:
  • Review for accuracy & test.
  • Complete to cover most basic usage under Gentoo.
  • Rework for precision, readability, concision...
  • Section BusyBox Integration needs testing and documenting (or removing).

Az OpenRC egy függőségalapú init rendszer (indítórendszer) Unix-szerű rendszerek számára. Fenntartja a kompatibilitást a rendszer által biztosított init rendszerrel, amely általában az /sbin/init könyvtárban található. Az OpenRC a Gentoo natív indítórendszere, bár más indítórendszerek is elérhetőek.

Az OpenRC rendszerindításkor a megfelelő sorrendben elindítja a szükséges rendszerszolgáltatásokat, kezeli őket, amíg a rendszer használatban van, és leállítja őket. Képes kezelni a Gentoo szoftvertárolóból telepített démonokat, opcionálisan felügyelni tudja az általa elindított folyamatokat, és lehetőség van a folyamatok párhuzamos indítására. A rendszerindítási idő lerövidítése érdekében lehetséges vele a folyamatokat párhuzamosan indítani.

Az OpenRC-t a Gentoo számára fejlesztették ki, de úgy tervezték, hogy más Linux disztribúciókban és BSD rendszerekben is használható legyen. Az OpenRC-t a Gentoo-n a sysvinit hívja meg alapértelmezés szerint.

Azokat a démonokat amelyek nem a Gentoo szoftvertárolójából lettek telepítve, (pl. a forráskódként letöltött és manuálisan lefordított szoftverek) néha hozzá kell igazítani az OpenRC-hez (ami néha triviális).

Note
Lásd az OpenRC dokumentációs részt, ahol az OpenRC projekt által biztosított dokumentációra mutató hivatkozásokat találja. Lásd a "Hogyan működik az OpenRC az init rendszerrel" című bejegyzést a kézikönyvben.

Megvalósítás

Az OpenRC nem igényel nagy, alapvető változtatásokat a hagyományos Unix-szerű rendszeren. Az OpenRC egy moduláris és rugalmas rendszer összetevőjeként integrálódik más rendszerszoftverekkel. Úgy tervezték, hogy gyors, könnyű, könnyen konfigurálható és adaptálható legyen. Az alapvető rendszerelemeken az OpenRC csak néhány alapvető függőséggel rendelkezik.

Modern init rendszerként az OpenRC számos hasznos szolgáltatást kínál:

  • cgroups támogatás.
  • Folyamatfelügyelet.
  • Függőségalapú indítás, a szolgáltatások párhuzamos indításával.
  • A függőségek automatikus feloldása és rendezése.
  • Hardver által indított initscriptek.
  • Az ulimit és nice értékek beállítása szolgáltatásonként az rc_ulimit változón keresztül.
  • Lehetővé teszi az összetett indító szkripteket, amelyek több összetevőt indítanak el.
  • Moduláris architektúra, illeszkedik a meglévő infrastruktúrához.
  • Az OpenRC saját opcionális indítorendszerrel rendelkezik openrc-init néven. A részletekért lásd az OpenRC/openrc-init részt.
  • Az OpenRC saját opcionális folyamatfelügyelővel rendelkezik. A részletekért lásd az OpenRC/supervise-daemon részt.

Az init rendszerekkel kapcsolatos további információkért lásd az Init rendszerek összehasonlítása című cikket.

Telepítés

Az OpenRC-t általában nem kell manuálisan telepíteni. Telepítéskor az OpenRC profil részeként van biztosítva. Jelen lesz a stage 3 tarball tömörített állományban, és karban lesz tartva a rendszerfrissítéseken keresztül.

USE jelölőzászlók

USE flags for sys-apps/openrc OpenRC manages the services, startup and shutdown of a host

+netifrc enable Gentoo's network stack (net.* scripts)
+sysvinit control the dependency on sysvinit (experimental)
audit Enable support for Linux audit subsystem using sys-process/audit
bash enable the use of bash in service scripts (experimental)
caps Use Linux capabilities library to control privilege
debug Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces
ncurses Add ncurses support (console display library)
newnet enable the new network stack (experimental)
pam Add support for PAM (Pluggable Authentication Modules) - DANGEROUS to arbitrarily flip
s6 install s6-linux-init
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
sysv-utils Install sysvinit compatibility scripts for halt, init, poweroff, reboot and shutdown
unicode Add support for Unicode

Ha a USE jelölőzászlók módosulnak, akkor a változtatások érvényesítése érdekében lehet, hogy a csomag újraépül. Az OpenRC profiloknál a sys-apps/openrc a virtual/service-manager függőségeként kerül be, ezért soha nem szabad hozzáadni a kiválasztott csomagkészletekhez (/var/lib/portage/world fájl) -t. Az --oneshot opció elkerüli az OpenRC hozzáadását ehhez a készlethez.

root #emerge --ask --oneshot sys-apps/openrc

Konfiguráció

Fájlok

/etc/rc.conf
A globális OpenRC konfigurációs fájl.
Kiterjedt megjegyzéseket tartalmaz, amelyek dokumentálják az OpenRC konfigurációját.
/etc/conf.d
Ez a könyvtár az egyes init-szkriptek számára tartalmaz konfigurációs fájlokat.

Naplófájl vezetése

Az OpenRC alapértelmezés szerint nem naplóz semmit. A rendszerindítás közben történő OpenRC kimenet naplózásához törölje a megjegyzéseket, és állítsa be az rc_logger opciót az /etc/rc.conf fájlban. A napló alapértelmezés szerint a /var/log/rc.log mappába kerül mentésre.

FILE /etc/rc.conf
rc_logger="YES"
#rc_log_path="/var/log/rc.log"

Hálózatkezelés

Az OpenRC használható a több hálózatkezelő egyikével, vagy akár egyikkel sem. Alapértelmezés szerint a Gentoo OpenRC profiljai a netifrc szkripteket használják a hálózati kapcsolatok kezelésére.

A hálózatkezeléssel kapcsolatos opciók listáját a Network manager (Hálózatkezelő) cikkben találja.

Függőségi viselkedés

Az init parancsfájlok alapértelmezett függőségének megváltoztatása szükséges lehet a bonyolultabb beállításokhoz. Lásd az /etc/rc.conf fájlt az alapértelmezett viselkedés megváltoztatásához. Vegye észre az rc_depend_strict opciót. Emellett a következő hálózatépítési példák megmutatják, hogy mennyire rugalmas az OpenRC.

Több hálózati interfész (példa)

Az SSH szolgáltatásnak elő kell jönnie a belső hálózatból, például eth0 és soha nem wlan0.

Felülbírálja a "net" függőséget az /etc/init.d/sshd fájlból, és finomítja a "net.eth0" függőségtől:

FILE /etc/conf.d/sshd
rc_need="!net net.eth0"
Több hálózati interfész több futási szinten (példa)

Az SSH szolgáltatásnak eth0-val (nem wlan0-val) kell kezdődnie az "alapértelmezett" futási szinten, de az "office" futási szinten wlan0-val (nem eth0-val) kell kezdődnie.

Az alapértelmezett megtartása:

FILE /etc/rc.conf
#rc_depend_strict="YES"

További szimbolikus hivatkozások létrehozása az sshd-re a hálózati interfész nevekkel:

root #ln -s sshd /etc/init.d/sshd.eth0
root #ln -s sshd /etc/init.d/sshd.wlan0

A beállítások beolvasása a /etc/conf.d/sshd.eth0 és az /etc/conf.d/sshd.wlan0 helyekről történik:

root #cp /etc/conf.d/sshd /etc/conf.d/sshd.eth0
root #cp /etc/conf.d/sshd /etc/conf.d/sshd.wlan0

A függőségek hozzáadása:

root #echo 'rc_need="!net net.eth0"' >> /etc/conf.d/sshd.eth0
root #echo 'rc_need="!net net.wlan0"' >> /etc/conf.d/sshd.wlan0

Ebben a példában a net.eth0 és a net.wlan0 az aktív futási szinttől függően az /etc/conf.d/net vagy az /etc/conf.d/net.office fájlból olvassa be beállításait. Az összes runscript hozzáadása a különböző futási szintekhez:

root #rc-update add sshd.eth0 default
root #rc-update add sshd.wlan0 office
root #rc-update add net.eth0 default office
root #rc-update add net.wlan0 default office

Az "alapértelmezett" futási szint és az "irodai" futási szint közötti váltáshoz a számítógép újraindítása nélkül váltson át "nem hálózati" futási szintre. A hálózati interfészek így leállnak, és újraolvassák a futási szinthez tartozó specifikus konfigurációkat. Ez akkor működik a legjobban, ha a "nonnetwork" egy "halmozott futási szint" az "alapértelmezett" és az "irodai" futási szinten is, és a megjelenítéskezelő és más nem hálózati szolgáltatások csak a "nonnetwork" futási szinthez kerülnek hozzáadásra.

default futási szint <---> nonetwork futási szint <---> office futási szint

root #rc nonetwork && rc office
root #rc nonetwork && rc default


Futási szint kiválasztása rendszerindításkor

Az OpenRC beolvassa a kernel rendszerindításkor használt parancssorát, és ha meg van adva, akkor elindítja a softlevel paraméter által meghatározott futási szintet. Ha nincs a softlevel paraméter megadva, akkor az alapértelmezett futási szint kerül felhasználásra.

A következő példa egy grub konfigurációt mutat be, amely lehetővé teszi az default vagy nonetwork futási szintről történő rendszerindítást:

FILE /boot/grub/grub.confExample grub.conf (GRUB Legacy)
title=Regular Start-up
 
kernel (hd0,0)/boot/kernel-3.7.10-gentoo-r1 root=/dev/sda3
 
title=Start without Networking
 
kernel (hd0,0)/boot/kernel-3.7.10-gentoo-r1 root=/dev/sda3 softlevel=nonetwork

Lásd alább a további futási szintek hozzáadásának leírását.

Használat

Futási szintek

Az OpenRC az openrc, rc-update és rc-status parancsokkal vezérelhető és konfigurálható.

Szolgáltatás törlése az alapértelmezett futási szintről, ahol a <service> az eltávolítandó szolgáltatás neve:

root #rc-update delete <service> default

Listázás

Nem szükséges root jogosultság a futási szintek és a hozzájuk rendelt szolgáltatások (init scriptek) listázásához.

Használja az rc-update show -v parancsot az összes elérhető init parancsfájl és azok aktuális futási szintjének megjelenítéséhez (ha hozzáadták őket egyhez):

user $rc-update show -v

Az rc-update vagy az rc-update show parancs futtatása csak a futási szinthez hozzáadott init szkripteket jeleníti meg.

Alternatív megoldásként az rc-status parancs a --servicelist (-s) paraméterrel együtt használható az összes szolgáltatás állapotának megtekintéséhez:

user $rc-status --servicelist

Nevesített futási szintek

Az OpenRC futási szintek a /etc/runlevels könyvtárba, azon belül további könyvtárakra bontva vannak elhelyezve. További futási szintek (a továbbiakban <runlevel> jelzéssel) a következő használatával hozhatók létre:

root #install -d /etc/runlevels/<runlevel>

A további futási szintek hasznosak alternatív rendszerindítási profilok biztosításához.

Halmozott futási szintek

A halmozott (stacked) futási szinteket arra használják, hogy egy futási szint örökölje egy vagy több futási szint műveleteit. A halmozott futási szintek létrehozásához használt parancsváltozat az rc-update -s. Egy futási szint hozzáadása egy másik futási szinthez függőséget hoz létre, így a függő (halmozott) futási szinteken lévő init parancsfájlok (szolgáltatások) elindulnak vagy leállnak a cél futási szint indításakor vagy leállításakor.

Egy gyakorlati példa a halmozott futási szint használatára laptopon a hálózati szolgáltatások hely alapján történő csoportosítására az OpenRC/Stacked futási szinten.

Előtag (Prefix)

A Gentoo Prefix a Gentoo-t egy eltoláson belül, úgynevezett előtagon belül telepíti, lehetővé téve a felhasználók számára, hogy a Gentoo-t egy másik helyre telepítsék a fájlrendszer-hierarchiában, elkerülve ezzel az ütközéseket. Ezen eltolás mellett a Gentoo előtag privilégiumok nélkül fut, vagyis a használatához nincs szükség root felhasználóra vagy jogokra.

Egy eltolás (a "prefix" hely) használatával sok "alternatív" felhasználói csoport számára lehetséges, hogy a Gentoo Linux Portage fa csomagjainak nagy részét hasznot húzza. Jelenleg a következő rendszerek felhasználói sikeresen futtatják a Gentoo Prefix -t: Mac OS X PPC-n és x86-on, Linux x86-on, x86_64-en és ia64-en, Solaris 10 Sparc-on, Sparc/64-en, x86-on és x86_64-en, FreeBSD x86-on, AIX PPC-n, Interix x86 -en, Windows x86-on (Interix segítségével), HP-UX PARISC-en és ia64-en.

Az OpenRC runscript már támogatja az előtaggal telepített démonokat. A Summer of Code 2012 alkalmával dolgozni fogunk a teljes másodlagos/munkameneti démon viselkedés megvalósításán, hogy teljes legyen az előtag által biztosított általános szolgáltatáskészlet.

Az OpenRC/Prefix egy oktatóanyag a kipróbáláshoz.

Hotplug

Az OpenRC -t elindíthatják külső események. Ilyenek például az udev új hardverei. A konfigurációs fájl ezt írja a hotplugged szolgáltatásokról:

FILE /etc/rc.confrc_hotplug
# rc_hotplug controls which services we allow to be hotplugged.
# A hotplugged service is one started by a dynamic dev manager when a matching
# hardware device is found.
# Hotplugged services appear in the "hotplugged" runlevel.
# If rc_hotplug is set to any value, we compare the name of this service
# to every pattern in the value, from left to right, and we allow the
# service to be hotplugged if it matches a pattern, or if it matches no
# patterns. Patterns can include shell wildcards.
# To disable services from being hotplugged, prefix patterns with "!".
# If rc_hotplug is not set or is empty, all hotplugging is disabled.
# Example - rc_hotplug="net.wlan !net.*"
# This allows net.wlan and any service not matching net.* to be hotplugged.
# Example - rc_hotplug="!net.*"
# This allows services that do not match "net.*" to be hotplugged.

CGroups támogatás

A 0.12-es verziótól kezdődő OpenRC kiterjesztett cgroup támogatással rendelkezik. A részletekért lásd a OpenRC/CGroups részt. Az OpenRC 0.51 verziója óta az egyesített cgroups (v2) alapértelmezés szerint engedélyezve van.

Chroot támogatás

root #mkdir -p /lib64/rc/init.d
root #ln -s /lib64/rc/init.d /run/openrc
root #touch /run/openrc/softlevel
root #emerge --oneshot sys-apps/openrc
FILE /etc/rc.confOpenRC config file
rc_sys="prefix"
rc_controller_cgroups="NO"
rc_depend_strict="NO"
rc_need="!net !dev !udev-mount !sysfs !checkfs !fsck !netmount !logger !clock !modules"

A rendszer a következő üzenetet jelenítheti meg amikor megpróbálja elindítani a szolgáltatást:

* WARNING: <service> is already starting

Ez a következő parancs kiadásával javítható:

root #rc-update --update

Rendszerintegráció

Rendszerkompatibilitás

logind

Egyes beállításokhoz szükséges a systemd-logind. Az Elogind megfelelő helyettesítő lehet mint önálló logind ami az OpenRC-vel fut.

tmpfiles.d

A systemd speciális tmpfiles.d fájlszintaxissal rendelkezik az ideiglenes fájlok kezelésére. A sys-apps/systemd-tmpfiles egy önálló szolgáltató az OpenRC rendszerek számára. Mára elavult, létezik a sys-apps/opentmpfiles is, amely (egyelőre) egy tmpfiles.d értelmezőt biztosít az OpenRC számára.

Mindkettő használható a /sys vagy /proc változó bejegyzéseinek kezelésére is.

udev és mdev

Az /dev kezelésére Gentoo-n elérhető a udev és az mdev. Az eudev korábban is elérhető volt, de eltávolították. Az udev elérhető az OpenRC számára az [udev sys-apps/systemd-utils[udev]] csomagon keresztül, azonban képesnek kell lennie dolgozni mindkettővel a Gentoo-n.

A régebbi Gentoo telepítések az udev-et használták fő virtual/udev szolgáltatóként. Az bug #575718 hiba alapján ez eudev-re módosult, de a bug #807193 -as hibában visszaváltozott udev-re. Az rc szolgáltatás azonban továbbra is /etc/init.d/udev.

Lásd az mdev részt a lehetséges felhasználásról. Pl. beágyazott rendszerek.

BusyBox integráció

N.B. Ebből a részből hiányzik az információ arról, hogyan kell ténylegesen használni a BusyBox -t az OpenRC-vel.

Kérjük, vegye figyelembe, hogy jelenleg sok olyan BusyBox kisalkalmazás létezik, amely nem kompatibilis az OpenRC-vel. A részletekért lásd az bug #529086 számú hibát. Vedd figyelembe, hogy az OpenRC használata BusyBox mellett némi munkát igényelhet a beállításokban. A BusyBox jobban igazodik a beágyazott felhasználási területekhez. Lásd az előző részt az mdev-ről.

A BusyBox használható az OpenRC-hez szükséges legtöbb userspace segédprogram (init, shell, awk) és egyéb POSIX eszközök helyettesítésére, ha egy komplett Busybox -t használunk az OpenRC [1] parancsértelmezőjeként, minden olyan híváshoz, amely általában elágazást okozna. Az /exec megkímélne, javítva az általános sebességet.

A Gentoo által biztosított SysV-init /etc/inittab fájl nem kompatibilis a BusyBox init -el. Itt van egy inittab példa ami kompatibilis a BusyBox-szal:

FILE /etc/inittabExample inittab compatible with BusyBox init
::sysinit:/sbin/openrc sysinit
::wait:/sbin/openrc boot
::wait:/sbin/openrc

A BusyBox számos kisalkalmazást biztosít, amelyek felhasználhatók harmadik féltől származó szoftverek, például acpid vagy dhcp/dhcpcd helyettesítésére.

Lásd az OpenRC dokumentációját. BusyBox használata OpenRC -vel.

Hibaelhárítás

Összeomlott szolgáltatások újraszületése

Az OpenRC vissza tudja állítani a szolgáltatások állapotát futási szintű beállítási állapotba, hogy állapottartó indító parancsfájlokat és automatikus újraindítást biztosítson.

A lefagyott szolgáltatások alapértelmezés szerinti futási szintről történő újraindításához futtassa az openrc-t: A lefagyott szolgáltatások elindulnak, és minden manuálisan futtatott szolgáltatás leáll. A manuálisan elindított szolgáltatások futásának fenntartásához futtassa az openrc --no-stop vagy az openrc -n rövidítést.

Alapértelmezés szerint az OpenRC megpróbálja elindítani (start) az összeomlott szolgáltatásokat, nem pedig újraindítani (restart) őket. Ezt az /etc/rc.conf fájl rc_crashed_stop (default NO) és rc_crashed_start (default YES) opcióival lehet szabályozni.

Az összeomlott szolgáltatások manuális helyreállítása

Ha egy folyamat indításkor összeomlik, akkor hiba- vagy figyelmeztető üzenet jelenik meg, amikor megpróbálja elindítani, leállítani vagy megjeleníteni egy szolgáltatás állapotát. Például a "docker" szolgáltatás használatakor:

root #rc-service docker status
 * status: crashed
root #rc-service docker start
 * WARNING: docker has already been started
root #rc-service docker stop
 * Caching service dependencies ...                                                                                                  [ ok ]
 * Stopping docker ...
 * Failed to stop docker                                                                                                             [ !! ]
 * ERROR: docker failed to stop

A helyzet orvoslásához kapcsolja ki a szolgáltatást:

root #rc-service docker zap

Lásd még

Külső források

OpenRC dokumentáció

OpenRC has its own useful documentation, maintained by the OpenRC developers themselves. Be aware that Gentoo does not use all of OpenRC's functionality by default:

Man pages

  • openrc(8) - Stops and starts services for the specified runlevel.
  • openrc-run(8) - Interpreter used to process OpenRC service scripts.
  • rc-service(8) - Locate and run an OpenRC service with the given arguments.
  • rc-status(8) - Show status info about runlevels.
  • rc-update(8) - Add and remove services to and from a runlevel.