2016年アップデート

2016年アップデート

それが現れるシステム熱い新製品です。内部にブロックのシステム、突然現れるそれは数年前でした。それぞれの利点/欠点は何ですか?また、各システムは他の初期化システムとどのように比較されますか?

答え1

2016年アップデート

ここにある回答のほとんどは5年前​​のものなので更新する時間です。

Ubuntuはデフォルトでupstartを使用しましたが、昨年はsystemdを好み、それを放棄しました。以下を参照してください。

これで良い記事があります。スタートアップユーザー向けにシステム化Ubuntu wiki - upstartとsystemdの非常に詳細な比較とupstartからsystemdへの移行ガイド。

(知っているUbuntu Wikiによると基本的upstart-sysvsudo update-initramfs -u。 )

以下のコマンドとスクリプトセクションのほとんどの情報は、記事で使用されているいくつかの例で修正されました(Stack Exchangeユーザーの貢献と同様にライセンスが簡単に付与されています)。クリエイティブ・コモンズ著作者表示 - 同一条件変更許可3.0ライセンス)。

以下は、一般的に使用されるコマンドと簡単なスクリプトをすばやく比較したものです。詳細な手順については、以下のセクションを参照してください。この回答は、質問で尋ねるように、Upstartベースのシステムの以前の動作をsystemdベースのシステムの新しい動作と比較しますが、「Upstart」とマークされたコマンドは必ずしもUpstartに固有のものではありません。通常、次のコマンドです。システム化されていないLinuxおよびUnixシステム。

注文する

suを実行してください:

  • 突然現れる: su
  • システム: machinectl shell

(下記の「suコマンドの置換」セクションを参照)

実行画面:

  • 突然現れる: screen
  • システム: systemd-run --user --scope screen

(下記の「予期しないバックグラウンドプロセスの終了」セクションを参照)

tmuxを実行します。

  • 突然現れる: tmux
  • システム: systemd-run --user --scope tmux

(下記の「予期しないバックグラウンドプロセスの終了」セクションを参照)

foo ジョブの開始:

  • 突然現れる: start foo
  • システム: systemctl start foo

ジョブを停止 foo:

  • 突然現れる: stop foo
  • システム: systemctl stop foo

fooジョブの再起動:

  • 突然現れる: restart foo
  • システム: systemctl restart foo

役職一覧:

  • 突然現れる: initctl list
  • システム: systemctl status

ジョブ foo の構成を確認してください。

  • 突然現れる: init-checkconf /etc/init/foo.conf
  • システム: systemd-analyze verify /lib/systemd/system/foo.service

ジョブの環境変数をリストします。

  • 突然現れる: initctl list-env
  • システム: systemctl show-environment

ジョブの環境変数を設定します。

  • 突然現れる: initctl set-env foo=bar
  • システム: systemctl set-environment foo=bar

ジョブの環境変数を削除します。

  • 突然現れる: initctl unset-env foo
  • システム: systemctl unset-environment foo

丸太

upstartでは、ログは/var/log/upstartディレクトリにあるプレーンテキストファイルであるため、通常どおりに処理できます。

cat /var/log/upstart/foo.log
tail -f /var/log/upstart/foo.log

systemdでは、ログはテキストファイルではなく内部バイナリ形式で保存されるため、journalctlログにアクセスするには次のコマンドを使用する必要があります。

sudo journalctl -u foo
sudo journalctl -u foo -f

スクリプト

はいスタートアップスクリプトに書く/etc/init/foo.conf

description "Job that runs the foo daemon"
start on runlevel [2345]
stop on runlevel [016]
env statedir=/var/cache/foo
pre-start exec mkdir -p $statedir
exec /usr/bin/foo-daemon --arg1 "hello world" --statedir $statedir

はいシステムスクリプトに書く/lib/systemd/system/foo.service

[Unit]
Description=Job that runs the foo daemon
Documentation=man:foo(1)
[Service]
Type=forking
Environment=statedir=/var/cache/foo
ExecStartPre=/usr/bin/mkdir -p ${statedir}
ExecStart=/usr/bin/foo-daemon --arg1 "hello world" --statedir ${statedir}
[Install]
WantedBy=multi-user.target

su コマンドの置換

プール要求#1022で、コマンド置換がsusystemdにマージされました。

Lennart Petlingによると、「suは実際に壊れた概念です」

彼は説明した「以前と同様にsuとsudoを使用できますが、完全に機能すると期待しないでください。

今、su同様の動作を達成するための正式な方法は次のとおりです。

machinectl shell

もう進む レナート・ポトリンが説明します。 問題#825の議論で:

「まあ、これは長い間議論されていますが、問題はsuが何をすべきかは明確ではありません。 、完全なログインではないので、誤解しないでください。」 - Lennart Petling。

また見なさい:

バックグラウンドプロセスが予期せず終了しました。

コマンドは次のとおりです。

これ以上期待どおりに動作しません。。たとえば、nohupセッションからログアウトした後でもプロセスが継続的に実行されることを保証するPOSIXコマンドです。それもう有効ではありませんシステムに。特別な方法や他の方法で同様のプログラムを呼び出すscreenことも必要です。tmux一緒に実行するプロセスは終了します(これらのプロセスを終了しないことが通常、screenまたはtmuxを実行する主な理由です。)

これはバグではありませんが、慎重に決定したものであるため、将来修正される可能性は低くなります。レナルト・ポトリンはこう述べています。説明するこの問題について:

私が見ると、UNIXは基本的にログアウト後も任意のユーザーコードを制限なく維持できるという点で実際に奇妙なようです。多くのOSの人々はこれが可能でなければならないと長い間話してきましたが、確かにデフォルトではありません。しかし、これまで誰もあえてスイッチをオンにして、デフォルトからオプションに変更できませんでした。ログアウト後にユーザーセッションをクリーンアップしないことは、見苦しくハッキング的であるだけでなく、セキュリティ上の問題でもあります。 systemd 230は、最終的にスイッチをオンにし、ユーザーがログアウトしたときにすべてを適切にクリーンアップするようにデフォルト設定されました。

詳細については、次を参照してください。

高水準のスタートコンセプト

ある意味、systemdは逆さまに動作します。 upstart ではジョブができるだけ早く開始され、systemd では必要に応じてジョブが開始されます。結局のところ、両方のシステムはほぼ同じ順序で同じ作業を始めることができますが、言えば反対方向に考えているのです。

以下の方法スタートアップユーザー向けにシステム化説明する:

突然現れるプロセス(作業)開始モデルは「貪欲なイベントベース」です。つまり、開始イベントが発生したときに使用可能なすべての操作ができるだけ早く開始されます。起動プロセス中に、upstart は開始または rcS などのいくつかの初期イベントを、初期サービスが開始され、電子が実行されている間に後期サービスが開始される「ツリールート」に合成します。新しいタスクを有効にするには、その設定ファイルを/ etc / init /にインストールするだけです。

システムプロセス(ユニット)起動モデルは「遅延依存性ベース」です。つまり、他の起動ユニットがそれに依存する場合にのみ、ユニットが起動される。起動中に、systemdは「ルート単位」(grubでオーバーライドできるdefault.target)を起動し、拡張を渡してその依存関係を開始します。新しいデバイスを有効にするには、起動シーケンスデバイス(通常はmulti-user.target)の依存関係として自分自身を追加する必要があります。

流通に活用

ウィキペディアの最近のデータによると、

upstart ディストリビューションはデフォルトで使用されます。

デフォルトでは、systemdディストリビューションが使用されます。

(望むよりウィキペディア最新情報を入手してください)

Upstartやsystemdを使用しないディストリビューション:

議論

過去にsystemd を避けるために Debian フォークが提案されました。。これドイツ語 GNU+Linux作成済み - systemdのないDebianブランチ(ありがとう。マーフィー1コメントで指摘しました。)

この紛争の詳細については、以下を参照してください。

多くの人がすでに知っていますが、Ian Jacksonが推進したInit GR Debian投票は、システムの雪崩からDebianの遺産とユーザーを保護するのにほとんど役に立ちませんでした。

このような状況は、実際に開発の自由を脅かし、Debian とその上流と下流のパートナーに深刻な結果をもたらす可能性のあるシステムの依存関係をロックする可能性があります。

CTTEは依存関係をうまく交換し、sysvinitを介してsystemdを微妙にインストールして時間をかけましたが、このプロセスでさえ疲れていてドラマでいっぱいでした。ついに一週間前、イアン・ジャクソンが辞任しました。 [...]

私はすぐに技術委員会で辞任します。

プロジェクトメンバーのうち30~40%の見解がTCで引き続き代表されることが重要ですが、現時点でそうするには私があまりにも議論の余地がある数値です。私は一歩後退し、プロジェクトガバナンスへの対話をあまり個人的にするように努力しなければなりません。 [...]

Devuan は Debian の基本初期化システムとして使用されることについての議論から生まれました。これsystemdに対するDebianの公式立場主張がいっぱい他の人は真実ではないと暴露した。。興味のある読者はこのホットな話題について話し続けることができます。体系的な議論。しかし、落ち着きを保ち、丁寧な声を維持してください。 Devuanでは、過去を振り返るよりも間違ったプログラミングに興味があります。 [...]

systemd議論に関するいくつかのウェブサイトと記事が作成されました。

持つたくさんHacker Newsに関する興味深い議論:

他の分布でも同様の傾向が見られます。

哲学

突然現れるDOTADIWのUnix哲学である「1つのことをうまくやってください」に従ってください。これは伝統的なinitデーモンを置き換えます。サービスの開始および停止を除くその他の操作は実行されません。他のタスクは他の特別なサブシステムに委任されます。

システムそれ以上を行います。サービスの開始と停止に加えて、パスワード、ログイン、端末、電源管理、工場初期化、ログ処理、ファイルシステムのマウントポイント、ネットワークなどを管理します。情報ファイルの一部の機能。

拡張計画

~によるとsystemdの成果と今後の発展の見通し2014年のGNOME.asiaでのLennart Poetteringの講演によると、systemdの主な目標、その領域、およびまだ進行中の領域は次のとおりです。

システム目標:

私たちの目標

  • Linuxを多数の部分から競争力のある汎用オペレーティングシステムに置き換えます。

  • インターネットを構築する次世代オペレーティングシステムの統一ディストリビューション間の無意味な違い

  • コアオペレーティングシステムにイノベーションを再インポートします。

  • デスクトップ、サーバー、コンテナー、組み込み、モバイル、クラウド、クラスター、... .この地域は思ったより近いです。

  • 管理者の複雑さを減らし、監督なしで安定性を高めます。

  • すべては考える価値がある

  • 自動検索とプラグアンドプレイが重要です。

  • 私たちは壊れたものをテープで貼るのではなく修正します。

すでに扱っている領域:

私たちが扱った内容:

システムの初期化、ロギング、ログイン管理、デバイス管理、一時ファイルと揮発性ファイルの管理、バイナリ形式の登録、バックライトの保存/復元、rfkillの保存/復元、ブートチャート、先読み、暗号化されたストレージ設定、EFI / GPTパーティション検索、仮想マシン/コンテナ登録、最小コンテナ管理、ホスト名管理、ロケール管理、時間管理、ランダムシード管理、sysctl変数管理、コンソール管理、... 。

進行中の作業:

私たちがすること:

  • ネットワーク管理
  • システムネットワーク
  • ローカルDNSキャッシュ、mDNSレスポンダ、LLMNRレスポンダ、DNSSEC検証
  • カーネルのIPC
  • kdバス、sdバス
  • NTP時間と同期
  • システム時刻同期
  • コンテナとのさらなる統合
  • サービスサンドボックス
  • アプリケーションサンドボックス
  • オペレーティングシステムイメージフォーマット
  • コンテナイメージ形式
  • 画像フォーマットの適用
  • 自動検索機能付きGPT
  • 無状態システム、インスタンス化可能システム、工場初期化
  • / usrはオペレーティングシステムです。
  • / etcは(オプションの)設定です。
  • / varは(オプション)状態です。
  • 原子ノードの初期化と更新
  • クラウドとの統合
  • ノード間サービスの管理
  • 検証可能なオペレーティングシステムイメージ
  • ファームウェアまで
  • ブートローダー

この回答の範囲

〜のようにマーフィー1「長年にわたり、systemdの作業範囲が単純なシステムの起動を超えてはるかに拡張されていることに注意する必要があります」とコメントは述べています。

私はここに関連するほとんどの情報を含めようとしました。ここでは、質問で要求されたようにinitシステムとして使用したときのUpstartとsystemdの共通機能を比較しました。これらの機能はStartupと比較することはできませんが、その存在が非常に重要であるため、initシステムの範囲外のsystemdの機能だけに言及しました。 。これら2つのプロジェクトの違いを理解することが重要です。詳細については関連文書を確認してください。

追加情報

詳しくは以下をご覧ください。

追加機能

これ鉛(II)酸化物チームはSystemd および SysV Init Linux チートシート

答え2

upstart と systemd の両方が、既存の SysV init システムのいくつかの制限を解決しようとします。たとえば、一部のサービスは他のサービスの後に起動する必要があります(たとえば、NFSファイルシステムはネットワークが実行される前にマウントできません)、SysVでこれを処理する唯一の方法はrc#.dディレクトリにリンクを設定して次のいずれかを実行することです。他の古い内部。それに加えて、後で依存関係が追加または変更された場合は、すべてのアイテムの番号を再割り当てする必要があります。 UpstartとSystemdには、要件を定義するためのよりスマートな設定があります。また、すべてが一種のシェルスクリプトなので、誰もが最高のinitスクリプトを書くことができないという問題もあります。これは開始速度にも影響します。

systemdのいくつかの利点を見ることができます。

  • 開始された各プロセスには、独自のcgroupまたは特定のcgroupがあります。
  • xinetd がサービスに対して実行するのと同様に、サービスのソケットとファイル ハンドルを事前に作成して、依存サービスをより迅速に開始できます。たとえば、systemdはsyslogのために/ dev / logのファイルハンドルを開いたままにし、/ dev / logに送信された後続のサービスはsyslogdが引き継ぐ準備ができるまでメッセージをバッファリングします。
  • サービスが実際に起動したときに実行されるプロセスの数が少なくなります。これは、サービスを開始するためのシェルスクリプトを作成していないことを意味します。これにより速度が向上し、最初に設定するのが簡単です(IMO)。

私が知っている1つの欠点は、systemdのソケット/ FH事前割り当てを利用するには、systemdがFHを渡すために多くのデーモンをパッチする必要があることです。

答え3

systemd上記を参照してくださいML一般今日。だから注意深く読んでください。混線いつものように、Linux技術の優れたソースであり、私が研究を始めた場所です。SysV InitとUpstartを置き換えてシステム化。しかし、Hオンライン記事(この場合)はあまり役に立たない読書ではなく、その後に隠された実際の目的は有用な読書へのリンクを提供することです。

本当の答えはここにありますシステム通知。 SysV initdの問題と、新しいシステムが実行する必要があるいくつかの重要なポイントを提供します。

  • 少し少ないものから始めてください。
  • より多くの並列作業を始めましょう。

主な計画は、必要なときにのみサービスを開始し、そのサービスのソケットを起動して、デーモンが完全にオンラインになる前に必要なサービスが作成されたソケットに接続できるようにすることです。明らかに、ソケットは少量のバッファリングされたデータを保持します。つまり、遅延中にデータが失われず、デーモンがオンラインになると処理されます。

計画のもう一つの部分は、ファイルシステムを直列化せず、必要に応じてマウントしてマウントを待たずに/home/(混同しないこと/etcfsckプロセスなどができる場合にデーモンを起動することです。 。がインストールされ/ました/var/。この目的のためにautofsが使用されることが示されています。

.desktopまた、スクリプトを置き換えてスタイル初期化記述子を作成する目的もあります。これにより、shシェルスクリプトで頻繁に使用される遅いプロセスとより多くのプロセスフォークを防ぐことができますsedgrep

また、必要に応じて一部のサービスを開始せず、必要がなくなった場合にサービスをオフにすることもできます。たとえば、Bluetoothモジュールとデーモンは、Bluetoothデバイスを使用している場合にのみ必要です。与えられた別の例はsshデーモンです。これがinetdができることです。個人的には、これが実際に必要なときに遅延を意味する可能性があるため、これが好きかどうかはわかりません。そして、sshの場合、私のinetdが破損するとセキュリティホールが発生する可能性があることを意味し、システム全体が破損する可能性があると思います。しかし、このシステムを壊すためにそれを使用することは不可能であり、必要に応じてサービスごとにこの機能を無効にして他の手段を使用できることを聞きました。

もう1つの機能は、定期的にスケジュールされた間隔または特定の時間に時間イベントに基づいて実行する機能です。これはcrond私たちが今やっていることに似ていますatd。ユーザー"cron"をサポートしていないと聞いたが。個人的には、これは最も無意味なことのように聞こえます。私はこれがマルチユーザー環境で作業していない誰かが作成/考えたと仮定しています。システムの唯一のユーザーである場合、ユーザーcronはrootとして実行されていないことを除き、多くの目的では使用されません。私は毎日マルチユーザーシステムで作業し、ルールは常にユーザーとしてユーザースクリプトを実行することです。しかし、たぶん私は彼らが持っている先見の明がないかもしれませんし、それが私が走ることを決して妨げないcrondので、atd開発者以外は誰にも害を及ぼさないようです。

systemdの欠点の1つは、それを最大限に活用するためにいくつかのデーモンを変更する必要があることです。今はうまくいきますが、ソケットモデル用に特別に書かれている場合はうまくいきます。

ほとんどのシステム化された人々がスタートアップ企業に遭遇する問題は、話し言葉が必要ないと思うイベントシステムのようです。おそらく彼らの言葉が最もよく表現されたでしょう。

あるいは、より簡単に言えば、ユーザーがD-Busを起動したばかりのことは、NetworkManagerも起動する必要があるという意味ではありません(ただし、これはUpstartが実行する作業です)。反対:ユーザーがNetworkManagerを要求すると、D-Busも起動する必要があることを示します。 (明らかに、これはほとんどのユーザーが期待するものです。そうですか?)
良い初期化システムは必要なものだけ、必要なときにのみ開始する必要があります。怠惰または事前に並列に実行されます。ただし、必要以上に立ち上げるべきではなく、特にサービスを利用できるすべてのインストールプロジェクトについて立ち上げるべきではありません。

私が言ったように、これはシステム通知

答え4

最初のデザインドラフトから始めてsystemdの詳細を見るには(また、新システムを含む既存のinitシステムの詳細な批評とsystemdがそれを修正するために提案する方法)、次を参照してください。ホームページ。時間が経つにつれて、起業家精神に関するいくつかの記事が出版されました。貯水温網。 systemd(またはpulseaudio)への言及は無限の戦いを引き起こすでしょう。

IMVHO(Fedoraユーザー)I非常にこれに満足してください。この行の一部は、現在Linuxシステムの複雑さを処理するために長い間遅れています。 Fedoraはしばらくupstartを使用してきましたが、ほとんど変更せずにinitスクリプトを実行するsysvinitの奇抜な代替手段として、そのステップから抜け出すことができませんでした。実行構成の簡素化の約束は、以下に基づいています。再び相互依存関係を手動で設定しても機能しません。 systemdは依存関係を独自に解決します(依存関係に関係なく起動を許可し、それ自体を解決します)。もう1つの大きな利点(重大な欠点とも呼ばれます)は、Linux関連の機能を最大限に活用することです(特にcgroupを使用すると、デーモンとすべての子孫を分離できるため、監視やリソースの制限やシャットダウンが容易になります)。 ;他にもたくさんあります。

関連情報