Főmenü megnyitása

OpenRC

függőség-alapú init rendszer

Az OpenRC egy nyílt forráskódú függőség-alapú init rendszer.

OpenRC
Fejlesztő OpenRC
Első kiadás 2008. 03. 08 (v0.1)[1]
Legfrissebb stabil
kiadás

(2017. 11. 29)
Legfrissebb fejlesztői kiadásismeretlen +/-
Programozási nyelv C
Operációs rendszer Linux, Unix, BSD
Kategória Init rendszer
Licenc 2-cl. BSD
Az OpenRC weboldala

Az OpenRC nem rugaszkodik el sem az eredeti Unixos filozófiától (KISS), sem az init rendszerek eredeti céljától, ugyanakkor a mai igényeknek megfelelően rugalmas is, így egy modern, de Unix közeli operációs rendszer számára ideális. 100%-osan kompatibilis a Gentoo init szkriptjeivel, habár a BSD rendszerek által is használt.[2]

Történelmi áttekintésSzerkesztés

Roy Marples 2004-ben Gentoo/Linux fejlesztőként moduláris hálózati szkripteket írt a baselayout csomag számára, majd 2005-ben a baselayout karbantartója lett.

2007-ben újraírta a teljes baselayout csomagot, mely baselayout-2 néven vált ismerté és bekerült a Gentoo-ba.

2007 év végére baselayout-2 még mindig maszkolt státuszban volt a FreeBSD felhasználók számára, így életben tartotta a baselayout-2 projektet, de egy újba vágott bele.[3]

Az új - baselayoutot temető - projekt neve OpenRC lett, melyet BSD licenc alatt szándékozott kiadni.[4]

Még 2007 decemberében kiderült, hogy az OpenRC (Open Robot Control) bejegyzett név,[5] melyet hosszas elmélkedés követett.[6]

A probléma megoldódott és 2008-ra az új OpenRC tesztelésre készen állt,[7] majd március 8-ára megszületett az első kiadás.[1]

JellemzőkSzerkesztés

Az OpenRC egy C és shell nyelven megírt kompakt init rendszer, mely képes a függőségek kezelésére és szolgáltatások párhuzamos indítására.

KonfigurációSzerkesztés

Az OpenRC konfigurációs állományai szintén a shell szkriptek paradigmáit követik. A globális konfigurációs állomány a /etc/rc.conf, a szolgáltatások konfigurációs állományai pedig a /etc/conf.dkönyvtárban találhatóak.[2]

A globális konfigurációs állomány rendszerint, de nem kizárólagosan az OpenRC beállítási paramétereit tartalmazza például:

1 # Global OpenRC configuration settings
2 
3 # egyenként rákérdez a futtatandó szolgáltatásokra (hibakeresésnél hasznos)
4 rc_interactive="YES"
5 # loggolás engedélyezése egy bizonyos fájlba
6 rc_logger="YES"
7 rc_log_path="/var/log/rc.log"

A szolgáltatásoknak lehetnek lokális konfigurációs állományai, melyek általában a szolgáltatásra jellemző nevet kapnak, például X display manager esetén xdm:

1 # az x általában a 7-es virtuális terminálon indul
2 # ez ellenőrzi az ütközést (ha már fut egy X)
3 CHECKVT=7
4 # ssdm indítása, de lehet xdm, gdm stb.
5 DISPLAYMANAGER="sddm"

Futási szintekSzerkesztés

A futási szintek használatával indulási sebesség-optimalizálást, hibakeresést stb. lehet elősegíteni. Tegyük fel, hogy nincs állandó netes elérésünk, akkor minek indítanánk el a hálózattal kapcsolatos szolgáltatásokat (hálózat keresés, samba, nfs szerver/kliens).

Példák a futási szintekre
név leírás

(ettől el lehet térni a legtöbb esetben, de nem célszerű)

sysinit rendszerspecifikus dolgok (pl. dev, proc, sys)
boot a bootolással kapcsolatos dolgok (pl. keymap, fsck, swap)
 • a sysinit és boot az összes többi indító futási szintesetén automatikusan elindul
single a sysinit kivételével az összes futási szint leállítása
reboot minden futási szint leállítása és a rendszer újraindítása
shutdown minden futási szint leállítása
nonetwork nem indítja el a netes szolgáltatásokat
default alapértelmezett szint, ide bekerülhet már bármi (pl. xdm, mysql)
 • külön kérés ill. átnevezés nélkül ez fog indulni a sysinit és a boot után

SzolgáltatásokSzerkesztés

A szolgáltatásokat /etc/init.dkönyvtárban lévő shell szkriptek indítják, melyre egy példa:

 1 #!/sbin/openrc-run
 2 # Copyright 1999-2016 Gentoo Foundation
 3 # Distributed under the terms of the GNU General Public License, v2 or later
 4 
 5 extra_started_commands="reload"
 6 piddir="/run/samba"
 7 
 8 # függőségek kezelése a szolgáltatásokban
 9 depend() {
10 	after slapd  # spald után induljon
11 	need net     # a net szükséges
12 	use cupsd    # használjon cupsd-t
13 }
14 
15 DAEMONNAME="${SVCNAME##samba.}"
16 [ "${DAEMONNAME}" != "samba" ] && daemon_list=${DAEMONNAME}
17 
18 # segítő függvény (nem szükséges, de több is használható)
19 signal_do() {
20 	local signal="$1"
21 	[ -z "${signal}" ] && return 0
22 
23 	local result=0 last_result=0 daemon= cmd_exec=
24 	for daemon in ${daemon_list} ; do
25 		eval cmd_exec=\$${daemon}_${signal}
26 		if [ -n "${cmd_exec}" ]; then
27 			ebegin "${my_service_name} -> ${signal}: ${daemon}"
28 			#echo ${cmd} '->' ${!cmd}
29 			${cmd_exec} > /dev/null
30 			last_result=$?
31 			eend ${last_result}
32 		fi
33 		result=$(( ${result} + ${last_result} ))
34 	done
35 	return ${result}
36 }
37 
38 # szabványos indító függvény
39 start() {
40 	${my_service_PRE}
41 	[ -d "${piddir}" ] || mkdir -p "${piddir}"
42 	signal_do start && return 0
43 
44 	eerror "Error: starting services (see system logs)"
45 	signal_do stop
46 	return 1
47 }
48 
49 # szabványos megállító függvény
50 stop() {
51 	${my_service_PRE}
52 	if signal_do stop ; then
53 		${my_service_POST}
54 		return 0
55 	fi
56 }
57 
58 # szabványos újraindító függvény
59 reload() {
60 	${my_service_PRE}
61 	signal_do reload
62 }

A fenti példa is mutatja, hogy egy szolgáltatás szabványos indítása szolgáltatás_név start, újraindítása (frissítése) szolgáltatás_név reload, leállítása pedig szolgáltatás_név stop paranccsal történik.

Az OpenRC-ben végrehajthatóak ugyanazon parancsok amik a népszerű systemd-ben. Ezt az összehasonlítást foglalja össze a következő táblázat:

Az OpenRC és systemd parancsok összehasonlítása[8]
OpenRC systemd
A futó szolgáltatások listázása rc-status systemctl list-units
Az elakadt szolgáltatások listázása rc-status --crashed systemctl --failed
A futási szintekhez tartozó szolgáltatások listázása rc-update show
Az összes elérhető szolgáltatás listázása rc-update -v show
A szolgáltatások listázása, futási szintek nélkül rc-service -l systemctl --all
Szolgáltatás engedélyezése|tiltása rc-update add|del daemon [runlevel] systemctl enable|disable daemon
Parancs adása a szolgáltatásnak
 • szolgáltatások: start, stop, restart, ...
rc-service daemon command systemctl command daemon

ForrásokSzerkesztés

  1. a b SOpenRC-0.1 released (angol nyelven). https://roy.marples.name/blog , 2008. március 8. (Hozzáférés: 2017. december 13.)
  2. a b OpenRC - Gentoo Wiki (angol nyelven). wiki.gentoo.org. (Hozzáférés: 2017. december 13.)
  3. OpenRC - readme (angol nyelven). https://github.com. (Hozzáférés: 2017. december 13.)
  4. baselayout is dead, long live OpenRC (angol nyelven). https://roy.marples.name/blog. (Hozzáférés: 2017. december 13.)
  5. OpenRC is trademarked! Suggestions? (angol nyelven). https://roy.marples.name/blog. (Hozzáférés: 2017. december 13.)
  6. OpenRC -> URC or UberRC ? (angol nyelven). https://roy.marples.name/blog. (Hozzáférés: 2017. december 13.)
  7. OpenRC ready for testing (angol nyelven). https://roy.marples.name/blog. (Hozzáférés: 2017. december 13.)
  8. OpenRC - ArchWiki (angol nyelven). wiki.archlinux.org. (Hozzáférés: 2018. január 21.)