Az OpenRC egy nyílt forráskódú függőség-alapú init rendszer.
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é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 ismertté é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ők
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ó
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.d
kö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:
# Global OpenRC configuration settings
# egyenként rákérdez a futtatandó szolgáltatásokra (hibakeresésnél hasznos)
rc_interactive="YES"
# loggolás engedélyezése egy bizonyos fájlba
rc_logger="YES"
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:
# az x általában a 7-es virtuális terminálon indul
# ez ellenőrzi az ütközést (ha már fut egy X)
CHECKVT=7
# ssdm indítása, de lehet xdm, gdm stb.
DISPLAYMANAGER="sddm"
Futási szintek
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ások
A szolgáltatásokat /etc/init.d
könyvtárban lévő shell szkriptek indítják, melyre egy példa:
#!/sbin/openrc-run
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License, v2 or later
extra_started_commands="reload"
piddir="/run/samba"
# függőségek kezelése a szolgáltatásokban
depend() {
after slapd # spald után induljon
need net # a net szükséges
use cupsd # használjon cupsd-t
}
DAEMONNAME="${SVCNAME##samba.}"
[ "${DAEMONNAME}" != "samba" ] && daemon_list=${DAEMONNAME}
# segítő függvény (nem szükséges, de több is használható)
signal_do() {
local signal="$1"
[ -z "${signal}" ] && return 0
local result=0 last_result=0 daemon= cmd_exec=
for daemon in ${daemon_list} ; do
eval cmd_exec=\$${daemon}_${signal}
if [ -n "${cmd_exec}" ]; then
ebegin "${my_service_name} -> ${signal}: ${daemon}"
#echo ${cmd} '->' ${!cmd}
${cmd_exec} > /dev/null
last_result=$?
eend ${last_result}
fi
result=$(( ${result} + ${last_result} ))
done
return ${result}
}
# szabványos indító függvény
start() {
${my_service_PRE}
[ -d "${piddir}" ] || mkdir -p "${piddir}"
signal_do start && return 0
eerror "Error: starting services (see system logs)"
signal_do stop
return 1
}
# szabványos megállító függvény
stop() {
${my_service_PRE}
if signal_do stop ; then
${my_service_POST}
return 0
fi
}
# szabványos újraindító függvény
reload() {
${my_service_PRE}
signal_do reload
}
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ások
- ↑ a b SOpenRC-0.1 released (angol nyelven). https://roy.marples.name/blog , 2008. március 8. [2017. december 14-i dátummal az eredetiből archiválva]. (Hozzáférés: 2017. december 13.)
- ↑ a b OpenRC - Gentoo Wiki (angol nyelven). wiki.gentoo.org. (Hozzáférés: 2017. december 13.)
- ↑ OpenRC - readme (angol nyelven). https://github.com. (Hozzáférés: 2017. december 13.)
- ↑ baselayout is dead, long live OpenRC (angol nyelven). https://roy.marples.name/blog. [2017. december 14-i dátummal az eredetiből archiválva]. (Hozzáférés: 2017. december 13.)
- ↑ OpenRC is trademarked! Suggestions? (angol nyelven). https://roy.marples.name/blog. [2017. december 14-i dátummal az eredetiből archiválva]. (Hozzáférés: 2017. december 13.)
- ↑ OpenRC -> URC or UberRC ? (angol nyelven). https://roy.marples.name/blog. [2017. december 14-i dátummal az eredetiből archiválva]. (Hozzáférés: 2017. december 13.)
- ↑ OpenRC ready for testing (angol nyelven). https://roy.marples.name/blog. [2017. december 14-i dátummal az eredetiből archiválva]. (Hozzáférés: 2017. december 13.)
- ↑ OpenRC - ArchWiki (angol nyelven). wiki.archlinux.org. (Hozzáférés: 2018. január 21.)