</>

لینوکس‌پارسی

مرجع فارسی آموزش لینوکس

Gentoo • Arch • Debian • Ubuntu • Kali • Parrot
پرش به محتوای اصلی

Command Palette

Search for a command to run...

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 فعال می‌شوند:

سرویسبستهکاربرد
sshdnet-misc/opensshسرور SSH
networkingnet-misc/netifrcپیکربندی شبکه
dhcpcdnet-misc/dhcpcdکلاینت DHCP
chronydnet-misc/chronyهمگام‌سازی زمان
dbussys-apps/dbusپیام‌رسانی بین‌پردازشی
elogindsys-auth/elogindمدیریت نشست و logind
cupsdnet-print/cupsچاپگر
croniesys-process/cronieزمان‌بند وظایف
syslog-ngapp-admin/syslog-ngثبت رخدادها
alsasoundmedia-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 را ببینید.

اشتراک‌گذاری:

این صفحه در تاریخ ۱ تیر ۱۴۰۵ به‌روزرسانی شده است.