upstartからsystemdに切り替える理由は?


28

Ubuntu 15.04の大きな変更点は、起動およびシステムサービスの起動を管理するためのデフォルトとして、upstartからsystemdへの切り替えです。

技術に詳しくないユーザーに、これが私たちにどのような影響を与えるのか、またどのように影響するのか、誰でも適切に説明できますか?そして、なぜそれが重要なのでしょうか?

回答:


29

レイマンユーザー、設計上、変更に気付かないはずです。これは初期化システムであり、ユーザーが伝統的にやり取りするものではありません。Upstartが提供する機能を完全に置き換える必要があります(さらにいくつかの追加操作を行う必要があります)が、技術に詳しくないユーザーに表示されるの、問題が発生したときだけです。

Upstartを積極的に使用および開発してきたユーザー、システム管理者、および開発者は、物事に取り組む必要がある人々です。Ubuntu Wikiには、開発者が初期化スクリプトを変換するのに役立つ移行ドキュメントがありますがユーザーとsysopは14.04(2019年までサポートされます)を維持することでUpstartの使用を継続できます。

変更の理由と理由は、Ubuntu側からではありませんでした。CanonicalはUpstart(プロジェクト)に十分満足していましたが、多くのDebianユーザーは、ブート時の同時実行性とすべてのサービスの監視機能を向上させるために、最新のinitエンジンに移行したいと考えました。

それは、さまざまな選択肢(理論的根拠)間の戦いを意味し systemdは最終的に勝ちました。

CanonicalはDebian一緒に行きました。これはDebianが最も簡単で、おそらく最高だからです。彼らはプロジェクトをドロップし、上流で戦っていません。また、systemdに移行している他のディストリビューション(Red Hat、Fedoraなど)とも一致します。より集中し、労力の重複を減らします。

tl; dr技術者でない人にとっては、これはあなたにまったく影響を与えるべきではありません。Ubuntuの場合、作業量が少なくなり、初期化システムが改善されます。


18

技術に詳しくないユーザーに、これが私たちにどのような影響を与えるのか、またどのように影響するのか、誰でも適切に説明できますか?

理論的には、これは、システムが実際にどのように機能するかという核心に関与しない非技術的なエンドユーザーに影響を与えるべきではありません。実際には、あなたが目にする多くのものがあります。

不完全なリストは次のとおりです。

  • プログラムの起動にupstartジョブ定義ファイルを使用したアドオンソフトウェアがある場合、それらは動作を停止します。systemd サービスユニットファイルをインストールする必要があります(また、書き込みを行うこともありますが、より一般的には、既に書き込みを行った他の誰かにニックネームを付けるだけです)。例:https : //askubuntu.com/questions/613785
  • 電源管理などの事柄に関するsystemd開発者によるさまざまな設計上の前提は、デフォルトになりますが、これは慣れているかもしれないものと矛盾しています。 systemd開発者は、たとえばラップトップのリッドスイッチに応答して何が起こるべきかについて、非常に明確なアイデアを持っています
  • nvidia独自のディスプレイドライバーを使用している場合、systemdにはさまざまな設計上の決定事項が影響します。例:https : //askubuntu.com/questions/613773
  • Ubuntuユーザーはこれを数年前からこれを伝えるマニュアルページを持っているので、新興企業から来るときはあまり関係ありませんが、これを読む可能性のあるUbuntu以外のユーザーに言及します:System 5 init+ から来る他のLinuxオペレーティングシステムユーザーrcsystemdがSystem 5との後方互換性しかないという事実に噛まれrcます。新興企業や他のほとんどのシステムと同様に、System 5 initおよびその構成ファイルとの後方互換性はありません/etc/inittab

    したがって、「まあ、これを編集して/etc/inittab…」とアドバイスする30年の人々からのアドバイスに従った人々、またはそのアドバイスに従ったソフトウェアを使用する人々は、今ではブートストラップで開始しないソフトウェアを持っています。例:https : //unix.stackexchange.com/a/196197/5132

  • 以前のコマンドの場合のように、systemd コマンドを使用してシングルユーザーモードに切り替えることはできません。systemdの専門用語ではレスキューモードと呼ばれるという事実はさておき、レスキューモードはsystemdのワールドビューではシャットダウン状態とは見なされません。実行状態と見なされます。 マシンの電源をオフにします。それはだsystemdに世界でシングルユーザーモードに到達します。さらに読む:https : //unix.stackexchange.com/a/196471/5132shutdownshutdownshutdown nowsystemctl rescue
  • その最後の主題に加えて、実行レベルの概念を既に捨てていないのであれば、今こそそうする時です。さらに読む:https : //unix.stackexchange.com/a/196014/5132
  • あなたは「それがすべてsystemdになった」ことを「知っている」ので、ランダムなWWWブラウジングで見つかった一般的なsystemdのアドバイスに従うことに注意する必要があります。あなたは、--userオプションを使用してコマンドを実行することについて人々が話しているのを見るでしょうsystemctl。Ubuntuには適用されません(まだ)。upstartとsystemdはこの分野で大きく異なり、Ubuntuバージョン15 では、systemd のユーザーごとのインスタンスではなく、upstart のセッションごとの初期化が引き続き使用されます。だからhttps://superuser.com/a/860598/38062例えば、適用されません。☺

6

すでに他の人がここで指摘しているように、理論的には、これは非技術的なエンドユーザーに影響を与えるべきではありません。

明確化

ここに投稿されたものには、いくつかの説明が必要だと思います。

これは初期化システムであり、ユーザーが伝統的にやり取りするものではありません。

SysV initとUpstartの場合はそうでしたが、systemdの場合はそうではありません。それはありません多くのユーザー伝統的相互作用を持つもののを:


Upstartが提供する機能を完全に置き換える必要があり、さらにいくつかの追加処理を行う必要があります。

明確にする2つのこと-最初にUpstartを完全に置き換えることについて:

SysV initスクリプトなし

systemdに関して人々が抱える問題の1つは、SysV initスクリプトを実行しないことです。そのため、Upstartが提供する機能を完全に置き換えない例が1つあります。

これは30年以上も頼ることができたもので、伝統的にSysV initスクリプトを書いて、同じスクリプトの複数のバージョンを書くことで自分自身を繰り返すことなく、移植性を最大限に高めました。

公式リポジトリのパッケージのみを使用する場合、これは問題になりません。おそらく、SysV initまたはUpstartスクリプトを使用していたすべてのパッケージは、パッケージ化する前にスクリプトを書き換える必要があるためです。

これは、SysV initまたはUpstartのいずれかのためにinitスクリプトが記述されたサードパーティまたはカスタムソフトウェアを使用する人にとってのみ問題になり、systemdを使用してシステムにアップグレードする前にinitスクリプトを書き換える必要があります(またはget オプションであるupstartをインストールするか、systemdを使用しないシステムに移行します)。

SysV initスクリプトをsystemdスクリプトに自動的に変換することになっているsystemd-sysv-generatorがありますが、いくつかのバグ明示的な非互換性の長いリストがあります。

次に、2番目の説明-これらのいくつかの余分なものについて:

いくつかの余分なもの

systemdがカバーする「いくつかの余分なもの」-systemdの展望- 達成されたもの、および 2014年のGNOME.asiaでのLennart Poetteringによるプレゼンテーションは、次のとおりです。

  • 初期化システム
  • ジャーナルロギング
  • ログイン管理
  • 端末管理
  • 一時的および揮発性のファイル管理
  • バイナリ形式の登録
  • バックライトの保存/復元
  • rfkillの保存/復元
  • ブートチャート
  • 先読み
  • 暗号化されたストレージのセットアップ
  • EFI / GPTパーティション検出
  • 仮想マシン/コンテナの登録
  • コンテナ管理
  • ホスト名管理
  • ロケール管理
  • 時間管理
  • ランダムシード管理
  • sysctl変数管理
  • コンソール管理
  • 内省
  • 自動検出
  • プラグ&プレイ
  • ネットワーク管理
  • systemd-networkd
  • DNSキャッシュ
  • mDNSレスポンダー
  • LLMNRレスポンダー
  • DNSSEC検証
  • カーネル内のIPC
  • kdbus
  • SDバス
  • NTPとの時間同期
  • systemd-timesyncd
  • コンテナとの統合
  • サービスのサンドボックス化
  • アプリのサンドボックス化
  • OSイメージ形式
  • コンテナイメージ形式
  • アプリの画像形式
  • 自動検出を使用したGPT
  • ステートレスシステム
  • インスタンス化可能なシステム
  • ファクトリーリセット
  • ノードの初期化と更新
  • クラウドとの統合
  • ノード間のサービス管理
  • ファームウェアに至るまで検証可能なOSイメージ
  • ブートローディング
  • インターネットの次世代OSの構築ディストリビューション間の無意味な違いを統合する

「これは初期化システムであり、ユーザーが伝統的にやり取りするものではありません。」-initシステムはそのリストの1つのアイテムにすぎないことを指摘する必要があります。


そして最後に、私が最後にコメントしたいこと:

[T]技術者でないユーザーがこれを見るのは、それがうまくいかないときだけです。

ああ、なんて安心。:)

変更点

(スクリプト自体を除く)エンドユーザーにとって最も注目すべき変更は、サービスの開始と停止、および次のようなコマンドの使用です。

期待どおりに動作しなくなりました。たとえばnohup、セッションからログアウトした後にプロセスが実行し続けることを確認するPOSIXコマンドです。それはもはや機能していないにsystemdに。また、のようなプログラムscreentmux特別な方法で呼び出されるか、そうでなければ必要性あなたも一緒に実行することをプロセスが殺されます(殺されたそれらのプロセスを取得していない間は、通常、最初の場所での画面やtmuxのを実行しているの主な理由です)。

これはバグではなく、設計上の選択であるため、将来修正される可能性は低いです。これが、レナート・ポエタリングこの問題について言ったことです。

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

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

ランニング screen

  • 新興企業: screen
  • systemd: systemd-run --user --scope screen

(注:上記の「upstart」の動作は、実際にはsystemd以外のものであり、これはupstart固有ではありません)

ジョブfooの開始:

  • 新興企業: start foo
  • systemd: systemctl start foo

ジョブfooの停止:

  • 新興企業: stop foo
  • systemd: systemctl stop foo

ジョブfooの再起動:

  • 新興企業: restart foo
  • systemd: systemctl restart foo

ジョブとそのステータスのリスト:

  • 新興企業: initctl list
  • systemd: systemctl status

(この質問の範囲外の詳細については、Upstartとsystemdの賛否両論についての私の答えをご覧ください。)

ログ

Unixの伝統に反して、systemdのログはカスタム形式のバイナリファイルに格納されるため、ログの処理にも大きな違いがあります。

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

ログにアクセスするには特別なコマンドを使用する必要があります。

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

論争

systemdを最初にDebianに導入し、後にUbuntuに導入したことには、以下の記事のいずれかを書いた人なら誰でも知っているように、論争や大きな反対がなかったわけではありません。

systemdに対するDebian公式の立場とその結果としての論争、2014年出エジプト宣言につながり、Ian Jacksonの辞任で終わりまし

Init Freedom Without-Systemd.orgおよび Systemd-Free.orgイニシアチブが生まれ、 Hacker Newsに関する多くの議論行われました

参考文献


あなたは私の答えを別の文脈に引き込んでいる。Systemd initシステム以上のものですが、この質問はupstart→systemdとその決定についてでした...「systemdが置き換えるものは何ですか?」ではありません。
オリ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.