Systemd — سیستم init مدرن در Gentoo
آموزش کامل systemd در Gentoo: تغییر پروفایل، دستورهای systemctl و journalctl، unitهای کلیدی، targetها و تحلیل زمان بوت با systemd-analyze.
systemd سیستم init مدرن و استاندارد اکثر توزیعهای لینوکس است که در Gentoo بهصورت اختیاری پشتیبانی میشود. اگرچه پیشفرض Gentoo OpenRC است، بسیاری از کاربران به دلایلی مانند سازگاری بهتر با دسکتاپهای مدرن (GNOME)، ابزارهای ابری و محیطهای container، systemd را انتخاب میکنند.
systemd چیست؟
systemd یک «مجموعهٔ نرمافزاری» است که شامل init سیستم، logger، network manager، login manager، جایگزین cron و بسیاری ابزار دیگر است. این یکپارچگی مزایایی دارد (هماهنگی میان اجزا، API یکپارچه) اما معایبی هم دارد (حجیم بودن، وابستگی متقابل بالا، عدم رعایت فلسفهٔ UNIX).
| ویژگی | systemd | OpenRC |
|---|---|---|
| نوع | یکپارچه | ماژولار |
| Logger داخلی | بله (journald) | خیر (syslog-ng) |
| مدیریت نشست | بله (logind) | خیر (elogind) |
| Network manager داخلی | بله (networkd) | خیر (netifrc) |
| بوت موازی | بله (بهصورت socket) | بله (rc_parallel) |
| سرعت بوت | سریع | سریع |
| شفافیت | کمتر | بیشتر |
انتخاب پروفایل systemd در Gentoo
برای استفاده از systemd، باید یک پروفایل systemd انتخاب کنید:
# مشاهده پروفایلهای موجود
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/desktop/systemd
# [5] default/linux/amd64/23.0/desktop/systemd/gnome
# [6] default/linux/amd64/23.0/no-multibyte/systemd
# انتخاب پروفایل systemd
eselect profile set 4
# یا برای GNOME با systemd
eselect profile set 5
# اعمال تغییرات (مهم!)
emerge --ask --changed-use --deep --newuse @world
# خروجی:
# [ebuild N ] sys-apps/systemd-255.4
# [ebuild N ] sys-apps/dbus-1.14.10
# [uninstall ] sys-apps/openrc-0.52.1تغییر از OpenRC به systemd
تغییر سیستم init فرایندی جدی است. همیشه پیش از تغییر از سیستم نسخهٔ پشتیبان بگیرید. پس از نصب systemd، باید پیکربندی شبکه و سرویسها را به systemd منتقل کنید، در غیر این صورت سیستم بوت نخواهد شد.
پیکربندی اولیه پس از نصب systemd
پس از نصب، باید چند کار را انجام دهید:
# فعال کردن NetworkManager (پیشنهادی برای دسکتاپ)
systemctl enable NetworkManager
# فعال کردن SSH
systemctl enable sshd
# فعال کردن timesyncd
systemctl enable systemd-timesyncd
systemctl start systemd-timesyncd
# تنظیم hostname
hostnamectl set-hostname gentoo-host
# تنظیم timezone
timedatectl set-timezone Asia/Tehranفرمانهای اصلی systemctl
systemctl ابزار اصلی مدیریت سرویسها در systemd است:
# شروع سرویس
systemctl start sshd
# توقف سرویس
systemctl stop sshd
# راهاندازی مجدد
systemctl restart sshd
# بارگذاری مجدد پیکربندی بدون قطع
systemctl reload sshd
# فعالسازی برای بوت
systemctl enable sshd
# خروجی:
# Created symlink /etc/systemd/system/multi-user.target.wants/sshd.service → /usr/lib/systemd/system/sshd.service.
# غیرفعالسازی
systemctl disable sshd
# وضعیت
systemctl status sshd
# خروجی:
# ● sshd.service - OpenSSH server daemon
# Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled)
# Active: active (running) since ... ago
# Docs: man:sshd(8)
# man:sshd_config(5)
# Main PID: 1234 (sshd)
# ...
# لیست همه سرویسها
systemctl list-units --type=service
# لیست سرویسهای فعال
systemctl list-units --type=service --state=running
# لیست سرویسهای نصبشده
systemctl list-unit-files --type=servicejournalctl — مشاهده لاگها
systemd از journald برای ثبت رخدادها استفاده میکند. این لاگها باینری هستند (نه متنی ساده) و با journalctl خوانده میشوند:
# همه لاگها از بوت فعلی
journalctl
# لاگهای یک سرویس خاص
journalctl -u sshd
# لاگهای ۱ ساعت گذشته
journalctl --since "1 hour ago"
# لاگهای امروز
journalctl --since today
# پیگیری زنده (مانند tail -f)
journalctl -f
# لاگهای بوت قبلی
journalctl --list-boots
# خروجی:
# -1 2026-06-21 09:23:11 ... 2026-06-21 22:11:45
# 0 2026-06-22 08:15:33 ...
journalctl -b -1 # بوت قبلی
# فقط خطاهای سطح error و بالاتر
journalctl -p errUnitهای کلیدی
این جدول مهمترین unitهایی است که در Gentoo با systemd معمولاً فعال میشوند:
| Unit | بسته | کاربرد |
|---|---|---|
sshd.service | net-misc/openssh | سرور SSH |
NetworkManager.service | net-misc/networkmanager | مدیریت شبکه (دسکتاپ) |
systemd-networkd.service | داخلی | مدیریت شبکه (سرور) |
systemd-timesyncd.service | داخلی | همگامسازی زمان (NTP سبک) |
systemd-resolved.service | داخلی | حلکننده DNS |
systemd-logind.service | داخلی | مدیریت نشست |
dbus.service | sys-apps/dbus | پیامرسانی |
cups.service | net-print/cups | چاپگر |
cronie.service | sys-process/cronie | زمانبند |
bluetooth.service | net-wireless/bluez | بلوتوث |
Targetها (نسخهٔ systemd از runlevelها)
systemd از مفهوم «target» بهجای runlevel استفاده میکند. هر target مجموعهای از unitها است:
| Target | معادل SysV runlevel | کاربرد |
|---|---|---|
poweroff.target | 0 | خاموشکردن سیستم |
rescue.target | 1 | حالت تککاربره (rescue) |
multi-user.target | 3 | چندکاربره بدون گرافیک |
graphical.target | 5 | چندکاربره با گرافیک |
reboot.target | 6 | ریبوت سیستم |
default.target | — | target پیشفرض (معمولاً graphical یا multi-user) |
# مشاهده target پیشفرض
systemctl get-default
# خروجی:
# graphical.target
# تغییر target پیشفرض
systemctl set-default multi-user.target
# Removed symlink /etc/systemd/system/default.target.
# Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/multi-user.target.
# تغییر موقت target (بدون ریبوت)
systemctl isolate multi-user.targetتحلیل زمان بوت با systemd-analyze
یکی از ابزارهای مفید systemd، systemd-analyze است که زمان بوت را تحلیل میکند:
# زمان کل بوت
systemd-analyze
# خروجی:
# Startup finished in 5.221s (firmware) + 2.104s (loader)
# + 1.890s (kernel) + 3.234s (userspace) = 12.450s
# graphical.target reached after 3.123s in userspace
# زمان هر سرویس (پر#abuse)
systemd-analyze blame | head
# خروجی:
# 1.234s NetworkManager-wait-online.service
# 845ms dev-sda1.device
# 612ms systemd-udevd.service
# 412ms sshd.service
# 387ms systemd-journald.service
# ...
# درخت وابستگی بحرانی
systemd-analyze critical-chain
# خروجی:
# graphical.target @3.123s
# └─multi-user.target @3.120s
# └─sshd.service @412ms +45ms
# └─network.target @411ms
# └─NetworkManager.service @310ms +100ms
# ...غیرفعالکردن سرویسهای کند
اگر NetworkManager-wait-online.service زمان زیادی میبرد و به آن نیاز ندارید، میتوانید آن را غیرفعال کنید:
systemctl disable NetworkManager-wait-online.serviceپیکربندی با /etc/systemd/system
فایلهای unit در سه مسیر قرار دارند (به ترتیب اولویت):
/etc/systemd/system/— پیکربندی مدیر سیستم (بالاترین اولویت)/run/systemd/system/— فایلهای موقت runtime/usr/lib/systemd/system/— فایلهای نصبشده توسط بستهها
برای سفارشیسازی یک unit، آن را با systemctl edit باز کنید:
# سفارشیسازی sshd
systemctl edit sshd.service
# این یک فایل drop-in در /etc/systemd/system/sshd.service.d/ میسازد
# محتوای نمونه:
# [Service]
# Environment=OPTIONS="-p 2222"
# بارگذاری مجدد systemd
systemctl daemon-reload
systemctl restart sshdهرگز فایل /usr/lib را مستقیم ویرایش نکنید
فایلهای unit در /usr/lib/systemd/system/ با بهروزرسانی بسته بازنویسی میشوند. همیشه از systemctl edit استفاده کنید؛ این دستور یک فایل drop-in در /etc/systemd/system/ میسازد و تغییرات شما حفظ میشوند.
خطاهای رایج
۱. خطای dbus پس از تغییر پروفایل
Failed to connect to bus: No such file or directoryدلیل: سیستم در حالت OpenRC بوت شده اما شما سعی میکنید systemctl اجرا کنید. راهحل:
# ریبوت بهمنظور ورود به systemd
reboot
# پس از بوت، بررسی کنید:
ps -p 1 -o comm=
# باید خروجی systemd باشد، نه init یا openrc-init۲. سرویس failed در بوت
systemctl status sshd
# Active: failed (Result: exit-code)راهحل:
# مشاهده لاگ کامل
journalctl -u sshd -n 50
# بررسی فایل unit
systemctl cat sshd
# تست دستی
/usr/sbin/sshd -t # تست پیکربندی۳. machinectl یا loginctl خطا میدهد
Failed to activate service 'org.freedesktop.login1': timed outدلیل: سرویس systemd-logind اجرا نمیشود یا dbus مشکل دارد. راهحل:
systemctl restart dbus
systemctl restart systemd-logind
# بررسی
systemctl status systemd-logind۴. زمان بوت بسیار طولانی
دلیل: یک سرویس در بوت منتظر چیزی است. راهحل:
systemd-analyze blame | head -20
# پیدا کنید کدام سرویس کند است
systemctl disable <slow-service>خلاصه و مرحله بعد
systemd در Gentoo انتخابی اختیاری و محبوب میان کاربرانی است که به دنبال سازگاری با دسکتاپهای مدرن (GNOME) یا ابزارهای ابری هستند. مدیریت آن با systemctl و مشاهدهٔ لاگ با journalctl انجام میشود. این سیستم یکپارچه است، اما انعطاف کمتری نسبت به OpenRC دارد.
برای مقایسه با پیشفرض Gentoo، آموزش OpenRC را ببینید. برای پیکربندی شبکه با NetworkManager، آموزش networking را مطالعه کنید. اگر هنوز در مرحله نصب هستید، آموزش Stage3 را مرور کنید.
این صفحه در تاریخ ۱ تیر ۱۴۰۵ بهروزرسانی شده است.