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.
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.
Az új - baselayoutot temető - projekt neve OpenRC lett, melyet BSD licenc alatt szándékozott kiadni.
Még 2007 decemberében kiderült, hogy az OpenRC (Open Robot Control) bejegyzett név, melyet hosszas elmélkedés követett.
A probléma megoldódott és 2008-ra az új OpenRC tesztelésre készen állt, majd március 8-ára megszületett az első kiadás.
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.dkönyvtárban találhatóak.
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 szintekrenévleírás (ettől el lehet térni a legtöbb esetben, de nem célszerű)sysinitrendszerspecifikus dolgok (pl. dev, proc, sys)boota bootolással kapcsolatos dolgok (pl. keymap, fsck, swap)a sysinit és boot az összes többi indító futási szintesetén automatikusan elindulsinglea sysinit kivételével az összes futási szint leállításarebootminden futási szint leállítása és a rendszer újraindításashutdownminden futási szint leállításanonetworknem indítja el a netes szolgáltatásokatdefaultalapé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.dkö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 stopparanccsal 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ásaOpenRCsystemdA futó szolgáltatások listázásarc-statussystemctl list-unitsAz elakadt szolgáltatások listázásarc-status --crashedsystemctl --failedA futási szintekhez tartozó szolgáltatások listázásarc-update showAz összes elérhető szolgáltatás listázásarc-update -v showA szolgáltatások listázása, futási szintek nélkülrc-service -lsystemctl --allSzolgáltatás engedélyezése|tiltásarc-update add|del daemon [runlevel]systemctl enable|disable daemonParancs adása a szolgáltatásnakszolgáltatások: start, stop, restart, ...rc-service daemon commandsystemctl command daemon
Jegyzetek
Kategória:Szabad szoftverek