仮想コンソールでgettyを起動するには、最小限のsystemdブートに何が必要ですか?


21

SysVのためにinit、私は必要/etc/inittab湧きゲッティエントリ、/sbin/initバイナリ、シェル用のバイナリおよび共有ライブラリ、logingetty、PAM /セキュリティ/影のようなもの、といくつかのデバイスファイルを。

以下のためにupstart私は、同じ要件ほとんど必要がありますが、その代わりに/etc/inittab、私はいくつか持っている*.conf下のファイル/etc/initという* .confの1:start on startupでランレベルを設定しtelinit、スタート/復活ということ、そしてそれぞれのttyのための1 * .confのgetty適切なランレベルでそのttyの上。

どのような構成とバイナリが必要ですsystemd initか?

私が見つけたドキュメントはすべて、すでにインストールされているシステムを使用してサービスを開始および停止する方法に焦点を当てているようです。

実行中のArchまたはfedoraインストールからコピーするファイル(kernel / initrdを除く)の最小限のリストは問題ありませんが、についてのそのような情報を見つけることができないようですsystemd


私が知りたいのは、systemdinitramfsがをswitch_root呼び出した後にログインシェルを開始するために必要なファイルとそれらに含まれる必要があるファイルですsystemd /sbin/init


たとえばupstart、バイナリと2つ*.confのファイル:

ファイル/etc/init/whatever.conf

起動時に開始
ランレベルを出力します
仕事
スクリプト
  telinit 2
終了スクリプト

ファイル/etc/init/tty1.conf

ランレベルで開始[12345]
復活する
exec / sbin / agetty -8 --noclear 38400 tty1 linux

の例sysvinit、バイナリと1つのconfファイルの名前/etc/inittab

id:2:initdefault:
c1:12345:respawn:/ sbin / agetty 38400 tty1 linux

今、私はsystemd同等のものの後です。

*.serviceどこかに少なくとも1つのファイルが必要で、[Service]エントリにとが含まれているExecStart=-/sbin/agetty --noclear %I linuxRestart=always思いますが、他に何が必要ですか?


現在、次のURLでsystemdブートについて説明している最近のRedHatナレッジベース記事(754933)があります。RHEL7のsystemdの概要
-MattBianco

人々が単一の構成行を大きな混乱に吹き飛ばし、それを改善と呼ぶ方法を見るのはとても憂鬱です。
セビング

回答:


17

まず第一にsystemd、伝統的なユニックスではありませんinit。Systemdは非常に優れているため、2つを比較するのは少し不公平です。

質問に答えるために必要なのは、いくつかのバイナリと次の構成ファイルです。

/usr/lib/systemd/system/default.target
/usr/lib/systemd/system/basic.target
/usr/lib/systemd/system/sysinit.target
/usr/lib/systemd/system/getty.target
/usr/lib/systemd/system/getty@.service
/usr/lib/systemd/system/console-getty.service

発行するとsystemctl enable console-getty.service getty@tty2.service、これらのシンボリックリンクが作成されます。

/etc/systemd/system/default.target.wants/getty@tty2.service-> / lib / systemd / system / getty @ service
/etc/systemd/system/getty.target.wants/console-getty.service-> /lib/systemd/system/console-getty.service

:+ を押すとオンデマンドで動的にsystemd起動するためのの特別な機能を利用するには、少なくとも次の2つのファイルも必要であるように見えます。agettyAltF3

/etc/systemd/logind.conf
/lib/systemd/system/autovt@.service

場所autovt@.serviceへのシンボリックリンクですgetty@.service

構成ファイルの内容:

default.targetgetty.targetsysinit.targetファイルはを除いて空にすることができます[Unit]タグと(多分)Description=xxx

basic.target 依存情報も含まれます。

[単位]
Description =基本システム
Requires = sysinit.target
Wants = sockets.target timers.targetpaths.target slices.target
After = sysinit.target sockets.target timers.targetpaths.target slices.target

ファイルとして存在しないターゲットへの参照が必要かどうかはわかりません。それらはsystemd.special(7)マニュアルページで説明されています。


console-getty.service:(コンソールのagettyの特殊なケース)

[単位]
Description =コンソールゲッティ
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
再起動=常に
RestartSec = 0
UtmpIdentifier = cons
TTYPath = / dev / console
TTYReset = yes
TTYVHangup = yes
KillMode = process
IgnoreSIGPIPE = no
SendSIGHUP = yes

[インストール]
WantedBy = getty.target

getty@.service:(コンソールを除くすべてのgettyサービスの汎用構成)

[単位]
Description =%Iのゲッティ
After = systemd-user-sessions.service plymouth-quit-wait.service
Before = getty.target
IgnoreOnIsolate = yes
ConditionPathExists = / dev / tty0

[サービス]
ExecStart =-/ sbin / agetty --noclear%I $ TERM
Type = idle
再起動=常に
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 / systemd / 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の開始プロセスを要約すると、次のように機能すると思います。

  1. systemdが見つけますbasic.target(またはすべての*.targetファイル?)
  2. 依存関係がに基づいて解決されているWantedBy=Wants=Before=After=...内のディレクティブ[Install]のセクション*.serviceおよび*.target設定ファイル。
  3. *.service開始する必要がある(「特別な」サービスではない)、ディレクティブを含む[Service]セクションがあり、ExecStart=開始する実行可能ファイルを示します。

1
私の知る限り、[Install]セクションはブートシーケンスでは使用されず、でのみ使用されますsystemctl enable。ブートが見るものは、/etc/systemd/system/basic.target.wants/によって作成されるシンボリックリンクsystemctl enableです。
ステファンマジェフスキー

6

systemdターミナルに切り替えると、特定の最大数まで自動的にgettyが作成されます。デフォルトは6です(したがって、alt + f1からalt + f6のgettyが自動的に取得されます)。このパラメーターを変更する場合は、編集/etc/systemd/logind.confしてNAutoVTsパラメーターを他の数値(最大12)に変更できます。

手動で切り替えなくてもgettyを生成したい場合は/usr/lib/systemd/system/getty@.service/etc/systemd/system/getty.target.wants/ディレクトリにシンボリックリンクを追加できます。

ln -sf /usr/lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty9.service

これにより、getty.targetもう1つのgetty@サービスが必要になります。ターゲットは、依存関係をサポートするランレベルの置き換えである、生成する必要のあるサービスのコレクションです。デフォルトのターゲットはgetty.target

で参照してくださいArchWiki中にsystemdよくある質問

編集:ドキュメントで もう少し調べました。

起動時に、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つだけですが、ディレクトリは必要ありません

gettyinitスクリプトで実行できるサービスの1つにすぎません。私がチェックしたディストリビューション(fedora、arch)gettyは、2つの異なる方法で実行されます。

  1. 各端末の特定のスクリプトによって開始され/usr/lib/systemd/system/getty@.serviceます(ttysystemdファイル名がリンクfilenameから置換されるファイルへのリンク
  2. logindユーザーが仮想端末に切り替えるときに必要に応じて自動的に起動されます(inetdリクエストが到着したときにのみ古いサービスを起動する方法と同様)。logindは、と一緒systemdに配布される別のデーモンであり、/etc/systemd/logind.confファイルから構成を読み取ります。

これで満足することを願っています。


どのファイルが必要で、何が含まれているのかを知りたい。必要なファイルのリストと、それらが何の順番で読まれるのか、あなたの答えを要約できますか?そのディレクトリで何を見つける必要があるかについての情報がありません。少し質問を詳しく説明してみます。ありがとう!
MattBianco 14

@MattBiancoあなたは不必要に敵対していsystemdます。私はそれを少し研究していますし、あなたはものがどのように動作するかを理解すれば、それは、とても簡単に見える
pqnet

1
はい、私は他のオープンソースプロジェクトのドキュメントに甘やかされています。敵意を感じてすみません。ブートプロセスを説明する簡単なドキュメントがないように思えるのは、ただイライラするだけです。(私はsystemdが単純ではないためだと今理解しています。)ユーモラスなsystemd方法で、オープンシステムの起動方法の敵対的乗っ取りを実行するように、おそらく敵対的であるとコメントしたいと思います。GNU / LinuxをUnixから遠ざけます。それは悪いことだと言っているわけではありませんが、これまでのものとは大きく異なります。そして、少しうろついていることは、私が一人ではないことを示しています。
MattBianco 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.