SysV init
の場合、_/etc/inittab
_リスポーンgettyエントリ、_/sbin/init
_バイナリ、シェルのバイナリと共有ライブラリ、login
、getty
、PAM /セキュリティ/シャドウスタッフ、およびいくつかのデバイスファイルが必要です。
upstart
の場合、ほぼ同じ要件が必要ですが、_/etc/inittab
_の下にいくつかの_*.conf
_ファイルがあります。ランレベルを設定する_/etc/init
_という* .confが1つあります。 telinit
、および適切なランレベルのttyでgetty
を開始/再起動するttyごとに1つの* .conf.
systemd
init
にはどのような構成とバイナリが必要ですか?
私が見つけたすべてのドキュメントは、すでにインストールされているシステムを使用してサービスを開始および停止する方法に焦点を当てているようです。
実行中のArchまたはFedoraインストールからコピーするファイルの最小のリスト(kernel/initrdを除く)は問題なく動作しますが、そのような情報を見つけることができないようですsystemd
。
私が知りたいのは、systemd
の場合、initramfsがsystemd
_start on startup
_を_switch_root
_呼び出しした後にログインシェルを開始するには、どのファイルが必要で、何を含める必要があるかです。
upstart
、バイナリ、および2つの_/sbin/init
_ファイルの例:
ファイル_*.conf
_:
起動時に開始 ランレベルを発行 タスク スクリプト telinit 2 スクリプト終了
ファイル_/etc/init/whatever.conf
_:
start on runlevel [12345] respawn exec/sbin/agetty -8 --noclear 38400 tty1 linux
sysvinit
、バイナリ、および_/etc/init/tty1.conf
_という名前の1つのconfファイルの例:
id:2:initdefault: c1:12345:respawn:/ sbin/agetty 38400 tty1 linux
今、私はsystemd
に相当します。
_/etc/inittab
_エントリが_*.service
_と_[Service]
_を含む_ExecStart=-/sbin/agetty --noclear %I linux
_エントリで少なくとも1つの_Restart=always
_ファイルがどこかに必要であると思いますが、他に何が必要ですか?
まず、systemd
は従来のUNIX init
ではありません。 Systemdの方がはるかに多いので、2つを比較するのは少し不公平です。
質問に答えるために、必要と思われるのは、いくつかのバイナリと次の構成ファイルです。
/usr/lib/systemd/system/default.target /usr/lib/systemd/system/basic.target /usr/lib/systemd/system/sysinit。ターゲット /usr/lib/systemd/system/getty.target /usr/lib/systemd/system/getty @ .service /usr/lib/systemd/system/console-getty.service
systemctl enable console-getty.service [email protected]
を発行すると、次のシンボリックリンクが作成されます。
/etc/systemd/system/default.target.wants/[email protected]> /lib/systemd/system/getty@service /etc/systemd/system/getty.target .wants/console-getty.service-> /lib/systemd/system/console-getty.service
[〜#〜]注[〜#〜]:systemd
の動的機能を開始するためのagetty
の特別な機能を利用するには、押すとオンデマンド Alt+F3 など、少なくとも次の2つのファイルが必要であるようです。
/etc/systemd/logind.conf /lib/systemd/system/autovt @ .service
ここで、[email protected]
は[email protected]
へのシンボリックリンクです。
default.target
タグと(おそらく)getty.target
を除いて、sysinit.target
、[Unit]
、Description=xxx
ファイルは空にすることができます。
basic.target
には、依存関係情報も含まれています。
[Unit] Description = Basic System Requires = sysinit.target Wants = sockets.target timers.target paths.target slices.target After = sysinit.target sockets.target timers.target paths.target slices.target
ファイルとして存在しないターゲットへの参照が必要かどうかはわかりません。それらは systemd.special(7)
のmanページで説明されています。
console-getty.service
:(コンソール上のagettyの特別なケース)
[Unit] Description = Console Getty After = systemd-user-sessions.service plymouth-quit-wait.service Before = getty.target [サービス] ExecStart =-/ sbin/agetty --noclear --keep-baud console 115200,38400,9600 $ TERM Type = idle Restart = always RestartSec = 0 UtmpIdentifier = cons TTYPath =/dev/console TTYReset = yes TTYVHangup = yes KillMode = process IgnoreSIGPIPE = no SendSIGHUP = yes [Install] WantedBy = getty.target
[email protected]
:(コンソールを除くすべてのgettyサービスの一般的な設定)
[Unit] Description = Getty on%I After = systemd-user-sessions.service plymouth-quit-wait.service Before = getty.target IgnoreOnIsolate = yes ConditionPathExists =/dev/tty0 [Service] ExecStart =-/ sbin/agetty --noclear%I $ TERM Type = idle Restart = always RestartSec = 0 UtmpIdentifier =%I TTYPath =/dev /%I TTYReset = yes TTYVHangup = yes TTYVTDisallocate = no KillMode = process IgnoreSIGPIPE = no SendSIGHUP = yes [インストール] WantedBy = getty.target DefaultInstance = tty1
最後に、おそらくこれらの特別なバイナリのいくつかが必要です(どのバイナリが重要かは試していません)。
/lib/systemd/systemd(/ sbin/initは通常これを指します) /lib/systemd/systemd-logind /lib/systemd/systemd-cgroups-agent /lib/systemd/systemd-user-sessions /lib/systemd/systemd-vconsole-setup /lib/systemd/systemd-update-utmp /lib/systemd/systemd-sleep /lib/systemd/systemd-sysctl /lib/systemd/systemd-initctl /lib/systemd/systemd-reply-password /lib/systemd/systemd-ac-power /lib/systemd/systemd-activate /lib/systemd/systemd-backlight /lib/systemd/systemd -binfmt /lib/systemd/systemd-bootchart /lib/systemd/systemd-bus-proxyd /lib/systemd/systemd-coredump /lib /systemd/systemd-cryptsetup /lib/systemd/systemd-fsck /lib/systemd/systemd-hostnamed /lib/systemd/systemd-journald /lib/systemd/systemd-journal-gatewayd /lib/systemd/systemd-journal-remote /lib/systemd/systemd-localed /lib/systemd/systemd- machined /lib/syst emd/systemd-modules-load /lib/systemd/systemd-multi-seat-x /lib/systemd/systemd-networkd /lib/systemd/systemd-networkd -wait-online /lib/systemd/systemd-quotacheck /lib/systemd/systemd-random-seed /lib/systemd/systemd-readahead /lib/systemd/systemd-remount-fs /lib/systemd/systemd-resolved /lib/systemd/systemd-rfkill /lib/systemd/systemd-shutdown /lib/systemd/systemd-shutdownd /lib/systemd/systemd-socket-proxyd /lib/systemd/systemd-timedated /lib/systemd/systemd-timesyncd /lib/systemd/systemd-udevd /lib/systemd/systemd-update-done
Systemdの起動プロセスを要約すると、次のように機能すると思います。
basic.target
(またはすべての*.target
ファイル?)を検索しますWantedBy=
およびWants=
構成ファイルのBefore=
セクションのAfter=
、[Install]
、*.service
、*.target
...ディレクティブに基づいて解決されます。*.service
s(「特別な」サービスではない)には、開始する実行可能ファイルを示す[Service]
ディレクティブを含むExecStart=
セクションがあります。systemd
は、ターミナルに切り替えると、特定の最大数までgettyを自動的に作成します。デフォルトは6です(したがって、alt + f1からalt + f6のgettyが自動的に取得されます)。このパラメーターを変更する場合は、/etc/systemd/logind.conf
を編集してNAutoVTs
パラメーターを他の数値(最大12)に変更できます。
手動で切り替えなくてもgettyを起動したい場合は、/usr/lib/systemd/system/[email protected]
へのシンボリックリンクを/etc/systemd/system/getty.target.wants/
ディレクトリに追加できます。
ln -sf /usr/lib/systemd/system/[email protected] /etc/systemd/system/getty.target.wants/[email protected]
これにより、getty.target
にはもう1つのgetty@
サービスが必要になります。ターゲットは、生成する必要のあるサービスのコレクションであり、依存関係をサポートするランレベルの置き換えです。デフォルトのターゲットはgetty.target
によって異なります
参照してください systemd FAQ
edit:ドキュメント でもう少し詳しく調べました。
ブート時に、systemd
デーモンは、default
ターゲット内のすべてのシステムとその依存関係をロードします。ターゲットはファイルによって定義されます
/etc/systemd/system/default.target
/usr/lib/systemd/system/default.target
ターゲットには、ディレクトリ内のシンボリックリンクによって指定された接続サービスのリストがあります
/etc/systemd/system/default.target.wants
/usr/lib/systemd/system/default.target.wants
/etc
バージョンは、/usr/lib
の配布のデフォルトをオーバーライドします。 .target
ファイルは1つだけ必要ですが、ディレクトリは必要ありません
getty
は、initスクリプトで実行できるサービスの1つにすぎません。チェックしたディストリビューション(Fedora、Arch)では、getty
は2つの異なる方法で実行されます。
/usr/lib/systemd/system/[email protected]
ファイルへのリンク tty名はリンクファイル名からsystemd
に置き換えられます )logind
によって必要に応じて自動的に起動されます(古いinetd
が要求を受信したときにのみサービスを起動する方法と同様)。 logind
は、systemd
とともに配布される別のデーモンであり、/etc/systemd/logind.conf
ファイルからその構成を読み取ります。これで満足です。