「Init」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
(5人の利用者による、間の36版が非表示)
1行目: 1行目:
  +
{{Lowercase title}}
[[Category:ブートプロセス]]
 
  +
[[Category:Init]]
 
[[en:Init]]
 
[[en:Init]]
  +
[[fa:init]]
  +
[[pt:Init]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|Arch ブートプロセス}}
 
{{Related|Arch ブートプロセス}}
{{Related|Init 比較表}}
 
 
{{Related|ConsoleKit}}
 
{{Related|ConsoleKit}}
{{Related|pm-utils}}
 
{{Related|acpid}}
 
 
{{Related articles end}}
 
{{Related articles end}}
 
{{Warning|Arch Linux で公式にサポートされているのは [[systemd]] だけです。他の init システムを使っている場合は、そのことをサポートリクエストで示唆してください。}}
 
{{Warning|Arch Linux で公式にサポートされているのは [[systemd]] だけです。他の init システムを使っている場合は、そのことをサポートリクエストで示唆してください。}}
[[Wikipedia:ja:Init|Init]] はシステムのブート時に最初に起動されるプロセスです。システムがシャットダウンするまで実行し続けるデーモンプロセスです。Init は他の全てのプロセスの直接的または間接的な祖先となり、孤児プロセスを全て自動的に引き取ります。ハードコードされたファイル名を使ってカーネルによって起動され、カーネルが init を起動できない場合、パニックが発生します。典型的に Init にはプロセス ID 1 が割り当てられます。
+
[[Wikipedia:ja:Init|Init]] はシステムのブート時に最初に起動されるプロセスです。システムがシャットダウンするまで実行し続けるデーモンプロセスです。Init は他の全てのプロセスの直接的または間接的な祖先となり、孤児プロセスを全て自動的に引き取ります。ハードコードされたファイル名を使ってカーネルによって起動され、カーネルが init を起動できない場合、パニックが発生します。典型的に Init には[[Wikipedia:ja:プロセス識別子|プロセス ID]] 1 が割り当てられます。
   
 
init ''プロセス''と init ''スクリプト''、そして''サービスマネージャ''はまとめて init '''システム'''としてひと括りにされます。Init システムによってこれらのコンポーネントは分割されていたり、init プロセスに (一部あるいは全てを) 複合されていたりします。
 
init ''プロセス''と init ''スクリプト''、そして''サービスマネージャ''はまとめて init '''システム'''としてひと括りにされます。Init システムによってこれらのコンポーネントは分割されていたり、init プロセスに (一部あるいは全てを) 複合されていたりします。
   
== Init (複合型) ==
+
== Inits (複合型) ==
   
  +
* {{App|anopa|s6 管理スイートのために開発された Init システム。|https://jjacky.com/anopa/|{{AUR|anopa}}}}
* {{App|[[systemd]]|積極的な並列化、cgroups によるプロセス監視を行う依存関係ベースの init システム。指定されたマウントポイントや dbus サービスに依存することができる。|http://freedesktop.org/wiki/Software/systemd/|{{Pkg|systemd}}}}
 
* {{App|Epoch|フットプリントを最小に、統合的な設定互換性をもたせるよう設計されたシングルスレッドの init システム。|http://universe2.us/epoch.html|}}{{AUR|epoch-init-system}}
+
* {{App|GNU Shepherd|[https://www.gnu.org/software/guile/ Guile] 書かれた Init システム。|https://www.gnu.org/software/shepherd/|{{AUR|shepherd}}}}
* {{App|initng|並列化と非同期の起動で動く依存関係ベースの init システム。|http://initng.sourceforge.net/trac|{{AUR|initng-git}}}}
+
* {{App|[[OpenRC]]|依存関係ベースの rc システムで、通常の SysVinit で動作する。|https://www.gentoo.org/proj/en/base/openrc/|{{AUR|openrc}} {{AUR|openrc-arch-services-git}}}}
  +
* {{App|[[systemd]]|積極的な並列化、cgroups によるプロセス監視を行う依存関係ベースの init システム。指定されたマウントポイントや dbus サービスに依存することができる。|https://freedesktop.org/wiki/Software/systemd/|{{Pkg|systemd}}}}
* {{App|[[SysVinit]]|伝統的な System V init。|http://savannah.nongnu.org/projects/sysvinit|{{AUR|sysvinit}}}}
 
* {{App|[[Wikipedia:ja:Upstart|Upstart]]|タスクとサービスの起動・停止・監視を管理するイベントベースの init システム。|http://upstart.ubuntu.com/|{{AUR|upstart}}}}
 
   
== Init ==
+
== Inits ==
   
 
* {{App|[[BusyBox]]|レスキューや組み込みシステム向けのユーティリティ。|http://busybox.net/|{{Pkg|busybox}}}}
 
* {{App|[[BusyBox]]|レスキューや組み込みシステム向けのユーティリティ。|http://busybox.net/|{{Pkg|busybox}}}}
  +
* {{App|sinit|Rich Felker の minimal init がベースのシンプルな init。|http://core.suckless.org/sinit|{{AUR|sinit}}}}
* {{App|finit|[[cgroups]] やソケットの有効化をサポートしている Ruby で書かれた小さな init システム。|https://github.com/felipec/finit/|}}
 
* {{App|ninit|[http://www.fefe.de/minit/ minit] のフォーク。|http://riemann.fmi.uni-sofia.bg/ninit/|{{AUR|ninit}}}}
+
* {{App|[[SysVinit]]|伝統的な System V init。|https://savannah.nongnu.org/projects/sysvinit|{{AUR|sysvinit}}}}
* {{App|sinit|Rich Felker の minimal init がベースのシンプルな init。|http://tools.suckless.org/sinit|{{AUR|sinit}}}}
 
   
 
== Init スクリプト ==
 
== Init スクリプト ==
   
 
* {{App|initscripts-fork|Arch Linux の SysVinit スクリプトのメンテナンスがされているフォーク。|https://bitbucket.org/TZ86/initscripts-fork/overview|{{AUR|initscripts-fork}}}}
 
* {{App|initscripts-fork|Arch Linux の SysVinit スクリプトのメンテナンスがされているフォーク。|https://bitbucket.org/TZ86/initscripts-fork/overview|{{AUR|initscripts-fork}}}}
* {{App|minirc|BusyBox のために作られたミニマル init スクリプト。|https://github.com/hut/minirc/|{{AUR|minirc-git}}}}
+
* {{App|[[minirc]]|BusyBox のために作られたミニマル init スクリプト。|https://github.com/hut/minirc/|{{AUR|minirc-git}}}}
* {{App|OpenRC Arch services|Arch Linux と互換性ある OpenRC ビススリプト。|https://github.com/andrewgregory/openrc-arch-services|{{AUR|openrc-arch-services-git}}}}
+
* {{App|kisslinux-init|KISS Linux の Init フレームワーク。|https://github.com/kisslinux/init|{{AUR|kisslinux-init}}}}
* {{App|spark-rc|システムを起動するためのシンプルな rc スクリプト。|https://github.com/fbt/spark-rc|{{AUR|spark-rc}}/{{AUR|spark-busybox-git}}}}
 
* {{App|watchman-sm-services|watchman のサービスのサンプル。|https://github.com/fbt/watchman-services|{{AUR|watchman-sm-services-git}}}}
 
   
 
== サービスマネージャ ==
 
== サービスマネージャ ==
   
  +
* {{App|[[Monit]]|Unix や Linux 向けのプロセス監視ツール。monit では、システムの状態をコマンドラインや HTTP(S) ウェブサーバーから直接閲覧することができます。|http://mmonit.com/monit/|{{Pkg|monit}}}}
* {{App|daemontools|UNIX サービスを管理するツールのコレクション。|http://cr.yp.to/daemontools.html|{{AUR|daemontools}}}}
 
* {{App|[[Wikipedia:Monit|Monit]]|Unix や Linux 向けのプロセス監視ル。monit では、システの状態をコマンドラインや HTTP(S) ウェブサーバから直接閲覧することができます。|http://mmonit.com/monit/|{{Pkg|monit}}}}
+
* {{App|perp|UNIX 向けの永続的なプロセス(サービス)監視・管理フレーム。|http://b0llix.net/perp/|{{AUR|perp}}}}
* {{App|[[OpenRC]]|依存関係ベースの rc システムで、通常の SysVinit で動作する。|http://www.gentoo.org/proj/en/base/openrc/|{{AUR|openrc}}}} / {{AUR|openrc-core}}
 
* {{App|perp|UNIX 向けの永続的なプロセス(サービス)監視・管理フレームワーク。|http://b0llix.net/perp/|{{AUR|perp}}}}
 
 
* {{App|[[runit]]|SysVinit やその他の init スキームを置き換える、サービス監視が付いた UNIX init スキーム。|http://smarden.org/runit/|{{AUR|runit}}}}
 
* {{App|[[runit]]|SysVinit やその他の init スキームを置き換える、サービス監視が付いた UNIX init スキーム。|http://smarden.org/runit/|{{AUR|runit}}}}
 
* {{App|s6|UNIX 向けの小さなプログラムスイート。daemontools や runit でサービス監視ができるように作られました。|http://skarnet.org/software/s6/|{{AUR|s6}}}}
 
* {{App|s6|UNIX 向けの小さなプログラムスイート。daemontools や runit でサービス監視ができるように作られました。|http://skarnet.org/software/s6/|{{AUR|s6}}}}
  +
* {{App|Supervisor|UNIX ライクなオペレーティングシステム上のプロセスを監視、制御するためのシステム。|https://supervisord.org/|{{Pkg|supervisor}}}}
* {{App|watchman|Linux 向けの not-so-simple なサービスマネージャ。|https://github.com/fbt/watchman|{{AUR|watchman-sm}}}}
 
   
 
== 設定 ==
 
== 設定 ==
   
  +
=== 使用しているデーモンの移行 ===
=== Cron 機能 ===
 
   
  +
新しい init でデーモンを実行するために、実行中のデーモンのリストを保存してください:
Arch はデフォルトで [[cron|cron]] の代わりに [[Systemd#タイマー|timer]] ファイルを使っています。基本的な cron ジョブについては [[AUR]] から {{AUR|archlinux-cronjobs}} をインストールしてください。
 
   
  +
$ systemctl list-units --state=running "*.service" > daemons.list
=== グループパーミッション ===
 
   
  +
それから [[#Init スクリプト|Init スクリプト]]を設定してください。詳しくは [https://unix.stackexchange.com/questions/175380/how-to-list-all-running-daemons] を参照。
Systemd は {{ic|logind}} と[[General_troubleshooting#セッションのパーミッション|ローカルセッション]]で[[グループ]]を管理します。それらがない場合、各グループ (''audio'' や ''video'' など) にユーザーを追加して再起動する必要があります。
 
   
  +
{{Note|一時ファイル ({{man|8|systemd-tmpfiles}}), [[カーネルモジュール]], [[sysctl]] の設定も適宜行ってください。}}
[[PolicyKit#認証エージェント|Policykit エージェント]]はアクティブなセッションを必要としますが、ルールは[[PolicyKit|手動で変更]]することができます。
 
   
=== Rootless X (1.16) ===
+
=== logind ===
   
  +
[https://www.freedesktop.org/wiki/Software/systemd/logind/ logind] は init プロセスとして ''systemd'' を必要とします [https://www.freedesktop.org/wiki/Software/systemd/InterfacePortabilityAndStabilityChart/]。したがって systemd 以外の init では[[一般的なトラブルシューティング#セッションのパーミッション|ローカルセッション]]などの機能が利用できません。
[[Xorg#Rootless Xorg (v1.16)|Xorg#Rootless Xorg (v1.16)]] を参照。
 
   
  +
{{Tip|''logind'' のスタンドアロン版は {{AUR|elogind-git}} でインストールできます [https://lists.gnu.org/archive/html/guix-devel/2015-04/msg00352.html]。}}
=== 同じ TTY で X を起動 ===
 
   
  +
=== デバイスのパーミッション ===
[http://blog.falconindy.com/articles/back-to-basics-with-x-and-systemd.html] を参照。
 
   
  +
デバイスにアクセスするためにユーザーを適切な[[ユーザーとグループ#グループ一覧|グループ]]に追加して、再起動してください。現在のグループは {{ic|id ''user''}} で確認できます。追加するコマンドの例:
=== Syslog-ng ===
 
   
  +
# usermod -a -G video,audio,power,disk,storage,optical,lp,scanner ''user''
デフォルトで Syslog-ng は {{ic|journalctl}} を使うように設定されています。{{ic|/etc/syslog-ng/syslog-ng.conf}} を編集:
 
   
  +
Policykit で使用するグループルールを作成する方法は [[PolicyKit#パスワードプロンプトの迂回]]を参照。
{{bc|
 
source src {
 
 unix-stream("/dev/log");
 
 internal();
 
 file("/proc/kmsg");
 
};
 
}}
 
   
  +
=== Rootless X===
詳しくは [[Syslog-ng#Source]] を見て下さい。
 
   
  +
{{ic|Xorg.wrap}} は、logind がアクティブであるかどうかをチェックしないため [https://bugs.freedesktop.org/show_bug.cgi?id=86975#c5]、Xorg の root 権限は [[Xorg#root として Xorg を実行|手動で有効にして下さい。]]
== Tips and tricks ==
 
  +
  +
=== 電源管理 ===
  +
  +
[[電源管理#systemd による電源管理|systemd の電源管理機能]]を置き換える方法は [[pm-utils]] や [[acpid]] を参照してください。
  +
  +
=== スケジュールされたタスク ===
  +
  +
Arch はデフォルトで [[cron]] の代わりに [[Systemd#タイマー|timer]] ファイルを使っています。基本的な cron ジョブについては [https://github.com/notfoss/archlinux-cronjobs archlinux-cronjobs] を参照してください。
  +
  +
=== D-Bus ===
  +
  +
[[systemd/ユーザー]]によって ''dbus-daemon'' のユーザーインスタンスが起動されるようになっています [https://www.archlinux.jp/news/d-bus-now-launches-user-buses/]。デスクトップアプリケーション間で IPC が必要な場合、{{ic|30-dbus.sh}} をリストアしてください:
  +
  +
{{hc|1=/etc/X11/xinit/xinitrc.d/30-dbus.sh|2=
  +
#!/bin/bash
  +
  +
# launches a session dbus instance
  +
if [ -z "${DBUS_SESSION_BUS_ADDRESS-}" ] && type dbus-launch >/dev/null; then
  +
eval $(dbus-launch --sh-syntax --exit-with-session)
  +
fi
  +
}}
  +
  +
== ヒントとテクニック ==
   
 
=== systemd-nspawn ===
 
=== systemd-nspawn ===
91行目: 102行目:
   
 
新しい PID 名前空間で chroot をセットアップしたい場合 jchroot を使うこともできます [http://vincent.bernat.im/en/blog/2011-jchroot-isolation.html] [https://github.com/vincentbernat/jchroot]。chroot する前に新しい root の中に {{ic|/proc}} がマウントされてない状態にしてください。systemd を実行さえしてしまえば後でマウントできます。
 
新しい PID 名前空間で chroot をセットアップしたい場合 jchroot を使うこともできます [http://vincent.bernat.im/en/blog/2011-jchroot-isolation.html] [https://github.com/vincentbernat/jchroot]。chroot する前に新しい root の中に {{ic|/proc}} がマウントされてない状態にしてください。systemd を実行さえしてしまえば後でマウントできます。
  +
  +
=== udev の置き換え ===
  +
  +
{{Warning|''systemd-udev'' は PID 1 として ''systemd'' が存在しなくても機能するため udev の置換は必須ではありません。''eudev'' など一部の udev 代替は {{Pkg|systemd}} と共存することができません。udev の代替をインストールする前に systemd 以外の init で起動するように設定が必要です。}}
  +
  +
* {{App|[[eudev]]|Gentoo プロジェクトによって創始された udev のフォーク。主として OpenRC と組み合わせて使うように開発されています。|https://wiki.gentoo.org/wiki/Eudev|{{AUR|eudev}} {{AUR|eudev-git}}}}
  +
* {{App|mdev|組み込みシステムで使用されるデバイスマネージャ。|https://git.busybox.net/busybox/plain/docs/mdev.txt|{{Pkg|busybox}}}}
  +
* {{App|smdev|デバイスノードを管理するシンプルなプログラム。mdev と互換性がありますが、全ての機能を備えているわけではありません。|http://git.suckless.org/smdev/|{{AUR|smdev}}}}
   
 
== 参照 ==
 
== 参照 ==
   
* [https://wiki.debian.org/Debate/initsystem Debian init system debate]
+
* [https://wiki.debian.org/Debate/initsystem Debian init システムに関する討論]
 
* [http://skarnet.org/software/s6/s6-svscan-1.html How to run s6-svscan as process 1]
 
* [http://skarnet.org/software/s6/s6-svscan-1.html How to run s6-svscan as process 1]
 
* [https://bbs.archlinux.org/viewtopic.php?id=162606&p=1 Replace systemd with busybox + minirc]
 
* [https://bbs.archlinux.org/viewtopic.php?id=162606&p=1 Replace systemd with busybox + minirc]
* [https://fleshless.org/pages/spark.html Spark project]
+
* [https://busybox.net/~vda/init_vs_runsv.html Init vs. runsv]
  +
* [https://felipec.wordpress.com/2013/11/04/init/ Demystifying the init system]
  +
* [http://blog.darknedgy.net/technology/2015/09/05/0/ 新しい init システムの歴史 (1992-2015)]
  +
* [https://wiki.gentoo.org/wiki/Comparison_of_init_systems init システムの比較 (gentoo wiki)]
  +
* [https://github.com/InitWare/InitWare/wiki/Contributors'-Study-Guide InitWare: Contributors' Study Guide]
  +
* [https://jdebp.uk/Softwares/nosh/ The nosh package]

2023年8月28日 (月) 15:33時点における最新版

関連記事

警告: Arch Linux で公式にサポートされているのは systemd だけです。他の init システムを使っている場合は、そのことをサポートリクエストで示唆してください。

Init はシステムのブート時に最初に起動されるプロセスです。システムがシャットダウンするまで実行し続けるデーモンプロセスです。Init は他の全てのプロセスの直接的または間接的な祖先となり、孤児プロセスを全て自動的に引き取ります。ハードコードされたファイル名を使ってカーネルによって起動され、カーネルが init を起動できない場合、パニックが発生します。典型的に Init にはプロセス ID 1 が割り当てられます。

init プロセスと init スクリプト、そしてサービスマネージャはまとめて init システムとしてひと括りにされます。Init システムによってこれらのコンポーネントは分割されていたり、init プロセスに (一部あるいは全てを) 複合されていたりします。

Inits (複合型)

  • anopa — s6 管理スイートのために開発された Init システム。
https://jjacky.com/anopa/ || anopaAUR
  • GNU ShepherdGuile で書かれた Init システム。
https://www.gnu.org/software/shepherd/ || shepherdAUR
  • OpenRC — 依存関係ベースの rc システムで、通常の SysVinit で動作する。
https://www.gentoo.org/proj/en/base/openrc/ || openrcAUR openrc-arch-services-gitAUR
  • systemd — 積極的な並列化、cgroups によるプロセス監視を行う依存関係ベースの init システム。指定されたマウントポイントや dbus サービスに依存することができる。
https://freedesktop.org/wiki/Software/systemd/ || systemd

Inits

  • BusyBox — レスキューや組み込みシステム向けのユーティリティ。
http://busybox.net/ || busybox
  • sinit — Rich Felker の minimal init がベースのシンプルな init。
http://core.suckless.org/sinit || sinitAUR
  • SysVinit — 伝統的な System V init。
https://savannah.nongnu.org/projects/sysvinit || sysvinitAUR

Init スクリプト

  • initscripts-fork — Arch Linux の SysVinit スクリプトのメンテナンスがされているフォーク。
https://bitbucket.org/TZ86/initscripts-fork/overview || initscripts-forkAUR
  • minirc — BusyBox のために作られたミニマル init スクリプト。
https://github.com/hut/minirc/ || minirc-gitAUR
  • kisslinux-init — KISS Linux の Init フレームワーク。
https://github.com/kisslinux/init || kisslinux-initAUR

サービスマネージャ

  • Monit — Unix や Linux 向けのプロセス監視ツール。monit では、システムの状態をコマンドラインや HTTP(S) ウェブサーバーから直接閲覧することができます。
http://mmonit.com/monit/ || monit
  • perp — UNIX 向けの永続的なプロセス(サービス)監視・管理フレームワーク。
http://b0llix.net/perp/ || perpAUR
  • runit — SysVinit やその他の init スキームを置き換える、サービス監視が付いた UNIX init スキーム。
http://smarden.org/runit/ || runitAUR
  • s6 — UNIX 向けの小さなプログラムスイート。daemontools や runit でサービス監視ができるように作られました。
http://skarnet.org/software/s6/ || s6AUR
  • Supervisor — UNIX ライクなオペレーティングシステム上のプロセスを監視、制御するためのシステム。
https://supervisord.org/ || supervisor

設定

使用しているデーモンの移行

新しい init でデーモンを実行するために、実行中のデーモンのリストを保存してください:

$ systemctl list-units --state=running "*.service" > daemons.list

それから Init スクリプトを設定してください。詳しくは [1] を参照。

ノート: 一時ファイル (systemd-tmpfiles(8)), カーネルモジュール, sysctl の設定も適宜行ってください。

logind

logind は init プロセスとして systemd を必要とします [2]。したがって systemd 以外の init ではローカルセッションなどの機能が利用できません。

ヒント: logind のスタンドアロン版は elogind-gitAUR でインストールできます [3]

デバイスのパーミッション

デバイスにアクセスするためにユーザーを適切なグループに追加して、再起動してください。現在のグループは id user で確認できます。追加するコマンドの例:

# usermod -a -G video,audio,power,disk,storage,optical,lp,scanner user

Policykit で使用するグループルールを作成する方法は PolicyKit#パスワードプロンプトの迂回を参照。

Rootless X

Xorg.wrap は、logind がアクティブであるかどうかをチェックしないため [4]、Xorg の root 権限は 手動で有効にして下さい。

電源管理

systemd の電源管理機能を置き換える方法は pm-utilsacpid を参照してください。

スケジュールされたタスク

Arch はデフォルトで cron の代わりに timer ファイルを使っています。基本的な cron ジョブについては archlinux-cronjobs を参照してください。

D-Bus

systemd/ユーザーによって dbus-daemon のユーザーインスタンスが起動されるようになっています [5]。デスクトップアプリケーション間で IPC が必要な場合、30-dbus.sh をリストアしてください:

/etc/X11/xinit/xinitrc.d/30-dbus.sh
#!/bin/bash

# launches a session dbus instance
if [ -z "${DBUS_SESSION_BUS_ADDRESS-}" ] && type dbus-launch >/dev/null; then
  eval $(dbus-launch --sh-syntax --exit-with-session)
fi

ヒントとテクニック

systemd-nspawn

systemd-nspawn は systemd 環境用のツールです。Linux 2.6.19 から PID 名前空間を使うことで systemd を使ってない環境でも systemd を動作させることができるようになっています。それには、カーネルで CONFIG_PID_NSCONFIG_NAMESPACES を設定する必要があります。

PID 名前空間は PID 1 で始まるプロセスに新しい階層を作成します。さらに、systemd は chroot する root ファイルシステムのマウントを必要とします。最低でも、バインドマウントは作成してください。そうしないと systemd が private オプションで root を再マウントしようとして、サービスが以下のように失敗することがあります:

"Failed at step NAMESPACE spawning" due to "Invalid operation" 

新しい PID 名前空間で chroot をセットアップしたい場合 jchroot を使うこともできます [6] [7]。chroot する前に新しい root の中に /proc がマウントされてない状態にしてください。systemd を実行さえしてしまえば後でマウントできます。

udev の置き換え

警告: systemd-udev は PID 1 として systemd が存在しなくても機能するため udev の置換は必須ではありません。eudev など一部の udev 代替は systemd と共存することができません。udev の代替をインストールする前に systemd 以外の init で起動するように設定が必要です。
  • eudev — Gentoo プロジェクトによって創始された udev のフォーク。主として OpenRC と組み合わせて使うように開発されています。
https://wiki.gentoo.org/wiki/Eudev || eudevAUR eudev-gitAUR
  • mdev — 組み込みシステムで使用されるデバイスマネージャ。
https://git.busybox.net/busybox/plain/docs/mdev.txt || busybox
  • smdev — デバイスノードを管理するシンプルなプログラム。mdev と互換性がありますが、全ての機能を備えているわけではありません。
http://git.suckless.org/smdev/ || smdevAUR

参照