Untuk SysV init
, saya perlu /etc/inittab
resptyning getty entry, /sbin/init
binary, binary dan shared library untuk shell login
,, the getty
, PAM / security / shadow stuff, dan beberapa file perangkat.
Karena upstart
saya memerlukan persyaratan yang hampir sama, tetapi alih-alih /etc/inittab
, saya memiliki beberapa *.conf
file di bawah /etc/init
: satu * .conf start on startup
yang menetapkan runlevel telinit
, dan satu * .conf untuk setiap tty yang memulai / respawn getty
pada tty pada runlevel yang sesuai .
Konfigurasi dan binari apa yang saya perlukan systemd
init
?
Dokumentasi yang saya temukan sepertinya berfokus pada bagaimana menggunakan sistem yang sudah diinstal untuk memulai dan menghentikan layanan.
Daftar file yang minimal untuk disalin (kecuali kernel / initrd) dari instalasi Arch atau fedora yang berjalan akan baik-baik saja, tetapi sepertinya saya tidak dapat menemukan informasi tentang itu systemd
.
Yang ingin saya ketahui adalah, untuk systemd
, file apa yang diperlukan, dan apa yang harus dikandungnya, untuk memulai shell login setelah initramfs melakukan switch_root
panggilan ke systemd
/sbin/init
.
Contoh untuk upstart
, binari dan dua *.conf
file:
File /etc/init/whatever.conf
:
mulai saat startup memancarkan runlevel tugas naskah telinit 2 skrip akhir
File /etc/init/tty1.conf
:
mulai dari runlevel [12345] respawn exec / sbin / agetty -8 --noclear 38400 tty1 linux
Contoh untuk sysvinit
, file biner dan 1 conf bernama /etc/inittab
:
id: 2: initdefault: c1: 12345: respawn: / sbin / agetty 38400 tty1 linux
Sekarang saya mengejar yang systemd
setara.
Saya berasumsi setidaknya 1 *.service
file diperlukan di suatu tempat, dengan [Service]
entri yang berisi ExecStart=-/sbin/agetty --noclear %I linux
dan Restart=always
, tetapi apa lagi yang dibutuhkan?
Jawaban:
Pertama-tama,
systemd
ini bukan unix tradisionalinit
. Systemd jauh lebih banyak, jadi agak tidak adil untuk membandingkan keduanya.Untuk menjawab pertanyaan, yang tampaknya diperlukan adalah beberapa biner dan file konfigurasi berikut:
mengeluarkan
systemctl enable console-getty.service [email protected]
kemudian membuat symlinks ini:CATATAN : Untuk memanfaatkan
systemd
fitur khusus untuk memulaiagetty
secara dinamis, sesuai permintaan saat menekan Alt+ F3dan seterusnya, tampaknya Anda juga harus memiliki setidaknya dua file ini:di mana
[email protected]
symlink ke[email protected]
.Isi file konfigurasi:
The
default.target
,getty.target
,sysinit.target
file bisa kosong kecuali untuk[Unit]
tag dan (mungkin)Description=xxx
.basic.target
juga mengandung informasi ketergantungan:Saya tidak yakin apakah referensi ke target yang tidak ada karena file diperlukan atau tidak. Mereka dijelaskan di
systemd.special(7)
halaman manual.console-getty.service
: (Kasus khusus untuk agetty di konsol)[email protected]
: (konfigurasi umum untuk semua layanan getty kecuali konsol)Akhirnya Anda mungkin perlu beberapa binari khusus ini (saya belum mencoba yang mana yang penting):
Untuk meringkas proses mulai systemd, saya pikir itu bekerja seperti ini:
basic.target
(atau semua*.target
file?)WantedBy=
,Wants=
,Before=
,After=
... arahan dalam[Install]
bagian dari*.service
dan*.target
konfigurasi file.*.service
s yang harus dimulai (yang bukan layanan "khusus"), memiliki[Service]
bagian denganExecStart=
arahan, yang menunjukkan eksekusi untuk memulai.sumber
[Install]
bagian ini tidak digunakan oleh urutan boot, hanya olehsystemctl enable
. Yang dilihat oleh boot adalah symlinks in/etc/systemd/system/basic.target.wants/
, yang dibuat olehsystemctl enable
.systemd
secara otomatis membuat getty ketika Anda beralih ke terminal, hingga jumlah maksimum tertentu. Standarnya adalah 6 (jadi Anda mendapatkan getty untuk alt + f1 ke alt + f6). Jika Anda ingin mengubah parameter ini, Anda dapat mengedit/etc/systemd/logind.conf
untuk mengubahNAutoVTs
parameter ke beberapa nomor lain (maks 12)Jika Anda ingin getty untuk bertelur bahkan jika Anda tidak secara manual beralih Anda dapat menambahkan symlink ke
/usr/lib/systemd/system/[email protected]
ke/etc/systemd/system/getty.target.wants/
direktori:ini akan menghasilkan
getty.target
satugetty@
layanan lagi yang membutuhkan . Target adalah kumpulan layanan yang perlu dikembangkan, penggantian runlevel yang mendukung dependensi. Target default tergantung padagetty.target
Lihat di FAQ sistemd di ArchWiki
sunting: Saya meneliti sedikit lebih dalam dokumentasi .
Saat boot
systemd
daemon memuat semua sistem dalamdefault
target dan dependensinya. Target ditentukan oleh fileTarget memiliki daftar layanan terlampir yang ditentukan oleh symlink di direktori
The
/etc
Versi menimpa default distribusi di/usr/lib
. Hanya satu.target
file yang diperlukan, sementara tidak ada direktori yang diperlukangetty
hanyalah salah satu layanan di antara yang dapat dijalankan oleh skrip init. Dalam distribusi saya memeriksa (fedora, lengkungan)getty
dijalankan dengan dua cara berbeda:/usr/lib/systemd/system/[email protected]
file tempat nama tty diganti olehsystemd
dari nama file tautan )logind
ketika pengguna beralih ke terminal virtual (mirip dengan cara layanan yang lamainetd
muncul hanya ketika permintaan tiba).logind
adalah daemon berbeda yang didistribusikansystemd
, dan membaca konfigurasinya dari/etc/systemd/logind.conf
file.Semoga ini memuaskan.
sumber
systemd
. Saya sedang meneliti sedikit dari itu dan itu terlihat sangat mudah, setelah Anda memahami cara kerjanyasystemd
itu bermusuhan, seperti dalam melakukan pengambilalihan permusuhan dari cara sistem terbuka dimulai. Ternyata GNU / Linux menjauh dari Unix. Bukan mengatakan bahwa itu adalah hal yang buruk, tetapi sangat berbeda dari apa yang secara tradisional terjadi. Dan sedikit mencari di Google menunjukkan bahwa saya tidak sendirian.