OpenRC — سیستم init پیشفرض Gentoo
آموزش کامل OpenRC در Gentoo: سرویسها، runlevelها، پیکربندی rc.conf و conf.d، و مدیریت سرویس با rc-update و rc-service.
OpenRC سیستم init پیشفرض Gentoo است؛ سیستمی سبک، وابستگیمحور (dependency-based) و سازگار با فلسفهٔ UNIX سنتی. برخلاف systemd که همهچیز را در یک بستهٔ بزرگ ادغام میکند، OpenRC کوچک، ماژولار و قابلفهم است. این ویژگیها آن را به انتخابی محبوب میان کاربران Gentoo و برخی سرورهای تولیدی تبدیل کرده است.
OpenRC چیست؟
OpenRC یک سیستم init است که فرایندها و سرویسهای سیستم را مدیریت میکند. واژهٔ «init» به فرایند نخست سیستم اشاره دارد که PID 1 است و سایر سرویسها را راهاندازی میکند. OpenRC در سال ۲۰۱۰ از NetBSD init جدا شد و برای Gentoo توسعه یافت.
ویژگیهای کلیدی OpenRC:
- سبک و سریع — کمترین مصرف منابع
- وابستگیمحور — سرویسها بهترتیب درست راهاندازی میشوند
- سازگار با اسکریپتهای سنتی
/etc/init.d/ - قابلتعریف با runlevelهای دلخواه
- بدون وابستگی به یک دسکتاپ یا logger خاص
OpenRC در برابر systemd
تفاوت اصلی: OpenRC فقط یک سیستم init است، در حالی که systemd یک مجموعهٔ کامل (init + logger + network manager + login + ...) است. OpenRC این وظایف را به ابزارهای جداگانه میسپارد (مانند syslog-ng, dhcpcd, elogind). به این ترتیب انتخاب بیشتری پیش روی شماست، اما پیکربندی بیشتری هم لازم است.
سرویسها در OpenRC
سرویسها در OpenRC اسکریپتهایی در /etc/init.d/ هستند. مدیریت آنها با سه دستور اصلی انجام میشود:
# شروع یک سرویس
rc-service sshd start
# خروجی:
# * Starting sshd ...
# توقف سرویس
rc-service sshd stop
# راهاندازی مجدد
rc-service sshd restart
# وضعیت سرویس
rc-service sshd status
# خروجی:
# * status: started
# یا معادل قدیمی
/etc/init.d/sshd startافزودن سرویس به runlevel
برای آنکه یک سرویس هنگام بوت بهطور خودکار شروع شود، باید آن را به یک runlevel اضافه کنید:
# افزودن sshd به runlevel پیشفرض
rc-update add sshd default
# خروجی:
# * service sshd added to runlevel default
# حذف از runlevel
rc-update del sshd default
# مشاهده سرویسهای فعال در همه runlevelها
rc-update show
# خروجی:
# acpi | default
# binfmt | boot
# chronyd | default
# cronie | default
# dbus | default
# devfs | sysinit
# dmesg | sysinit
# elogind | default
# hostname | default
# hwclock | default
# networking | default
# sshd | default
# sysctl | default
# ...Runlevelها در OpenRC
OpenRC از مفهوم runlevel برای گروهبندی سرویسها استفاده میکند. هر runlevel مجموعهای از سرویسهاست که در یک وضعیت خاص اجرا میشوند:
| Runlevel | کاربرد | زمان اجرا |
|---|---|---|
sysinit | راهاندازی اولیه سیستم (devfs، dmesg) | ابتدای بوت |
boot | سرویسهای پایه (hwclock، hostname، modules) | پس از sysinit |
default | سرویسهای معمولی (sshd، networking، dbus) | پس از boot |
nonetwork | بدون سرویسهای شبکه | برای تعمیر |
single | حالت تککاربره (rescue) | برای نگهداری |
shutdown | سرویسهای توقف هنگام خاموششدن | هنگام shutdown |
# تغییر runlevel فعال
rc default # رفتن به default
rc single # رفتن به single-user
rc shutdown # توقف سیستم
# مشاهده وضعیت فعلی
rc-status
# خروجی:
# * Caching service dependencies ... [ ok ]
# Runlevel: default
# acpi [ started ]
# chronyd [ started ]
# dbus [ started ]
# networking [ started ]
# sshd [ started ]
# ...سرویسهای کلیدی
این جدول مهمترین سرویسهایی است که معمولاً در یک سیستم Gentoo فعال میشوند:
| سرویس | بسته | کاربرد |
|---|---|---|
sshd | net-misc/openssh | سرور SSH |
networking | net-misc/netifrc | پیکربندی شبکه |
dhcpcd | net-misc/dhcpcd | کلاینت DHCP |
chronyd | net-misc/chrony | همگامسازی زمان |
dbus | sys-apps/dbus | پیامرسانی بینپردازشی |
elogind | sys-auth/elogind | مدیریت نشست و logind |
cupsd | net-print/cups | چاپگر |
cronie | sys-process/cronie | زمانبند وظایف |
syslog-ng | app-admin/syslog-ng | ثبت رخدادها |
alsasound | media-sound/alsa-utils | صدا |
پیکربندی سرویسها با conf.d
هر سرویس میتواند فایل پیکربندی در /etc/conf.d/ داشته باشد که متغیرهای محیطی را برای اسکریپت init فراهم میکند:
# مثال: پیکربندی sshd
cat /etc/conf.d/sshd
# خروجی:
# # /etc/conf.d/sshd
# SSHD_OPTS=""
# مثال: پیکربندی chronyd
cat /etc/conf.d/chronyd
# # /etc/conf.d/chronyd
# CHRONY_OPTS=""برای مثال، اگر میخواهید sshd روی پورت ۲۲۲۲ اجرا شود:
# /etc/conf.d/sshd
SSHD_OPTS="-p 2222"سپس سرویس را ریاستارت کنید:
rc-service sshd restartجستجوی گزینهها
برای دیدن اینکه سرویس از چه متغیرهایی استفاده میکند، خود اسکریپت init را بخوانید؛ مثلاً grep 'rcvar\|SSHD_OPTS' /etc/init.d/sshd.
پیکربندی سراسری rc.conf
فایل /etc/rc.conf پیکربندی اصلی OpenRC است:
# /etc/rc.conf
# اعلام وابستگیها بهصورت نرم
rc_depend_strict="NO"
# تعداد سرویسهای موازی هنگام بوت
rc_parallel="YES"
# رنگ خروجی
rc_color="YES"
# صدای هشدار
rc_beep="NO"
# لاگکردن
rc_logger="YES"انتخاب پروفایل OpenRC
در Gentoo، پروفایل مشخص میکند که از OpenRC یا systemd استفاده شود. برای اطمینان از استفادهٔ OpenRC:
# مشاهده پروفایل فعلی
eselect profile list
# خروجی:
# [1] default/linux/amd64/23.0 *
# [2] default/linux/amd64/23.0/desktop
# [3] default/linux/amd64/23.0/desktop/gnome
# [4] default/linux/amd64/23.0/systemd
# انتخاب پروفایل با OpenRC (بدون systemd)
eselect profile set 1
# یا desktop
eselect profile set 2
# اعمال تغییرات
emerge --ask --changed-use --deep @worldنام پروفایل
پروفایلهایی که در نامشان systemd ندارند، بهطور پیشفرض از OpenRC استفاده میکنند. پروفایل desktop شامل USE flags مناسب دسکتاپ است.
خطاهای رایج
۱. سرویس شروع نمیشود
* ERROR: sshd failed to startدلیل: ممکن است فایل پیکربندی سرویس مشکل داشته باشد یا وابستگیاش برقرار نباشد. راهحل:
# بررسی خطا با debug
rc-service sshd start -v
# یا اجرای مستقیم اسکریپت
/etc/init.d/sshd restart
# بررسی لاگ
tail -f /var/log/messages
# بررسی وابستگیها
rc-service --debug sshd start۲. سرویس در بوت شروع نمیشود
دلیل: سرویس به runlevel default اضافه نشده است. راهحل:
rc-update add sshd default
rc-update show | grep sshd
# باید این خروجی را ببینید:
# sshd | default۳. خطای crash روی networking
* ERROR: interface eth0 does not existدلیل: نام کارت شبکه در /etc/conf.d/net با نام واقعی تطابق ندارد. راهحل:
# مشاهده نام واقعی کارت شبکه
ip link show
# مثلاً: enp3s0 به جای eth0
# ویرایش پیکربندی
nano /etc/conf.d/net
# config_enp3s0="dhcp"۴. عدم همگامسازی زمان
دلیل: سرویس chronyd فعال نیست. راهحل:
rc-update add chronyd default
rc-service chronyd startخلاصه و مرحله بعد
OpenRC سیستم init سبک و قدرتمند Gentoo است که با سه دستور rc-service، rc-update و rc-status مدیریت میشود. سرویسها در /etc/init.d/، پیکربندی آنها در /etc/conf.d/ و پیکربندی سراسری در /etc/rc.conf قرار دارد. این معماری ساده اما انعطافپذیر، Gentoo را به انتخابی محبوب برای کاربرانی تبدیل کرده که شفافیت را ترجیح میدهند.
برای مقایسه با systemd، آموزش Systemd را ببینید. برای پیکربندی شبکه با OpenRC، آموزش networking را مطالعه کنید. اگر هنوز Stage3 را نصب نکردهاید، آموزش Stage3 را ببینید.
این صفحه در تاریخ ۱ تیر ۱۴۰۵ بهروزرسانی شده است.