OpenRC
OpenRC | |
Fejlesztő | OpenRC |
Első kiadás | 2008. 03. 08 (v0.1)[1] |
Legfrissebb stabil kiadás | (2017. 11. 29) |
Programozási nyelv | C |
Operációs rendszer | Linux, Unix, BSD |
Kategória | Init rendszer |
Licenc | 2-cl. BSD |
Az OpenRC weboldala |
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).
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:
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.)