「Init」の版間の差分
Kusakata.bot (トーク | 投稿記録) 細 (文字列「Tips and tricks」を「ヒントとテクニック」に置換) |
(同期) |
||
1行目: | 1行目: | ||
− | [[Category: |
+ | [[Category:Init]] |
[[en:Init]] |
[[en:Init]] |
||
[[fa:init]] |
[[fa:init]] |
||
16行目: | 16行目: | ||
== Init (複合型) == |
== Init (複合型) == |
||
+ | * {{App|anopa|s6 管理スイートのために開発された Init システム。|https://jjacky.com/anopa/|{{AUR|anopa}}}} |
||
+ | * {{App|GNU Shepherd|[https://www.gnu.org/software/guile/ Guile] で書かれた Init システム。|https://www.gnu.org/software/shepherd/|{{AUR|shepherd}}}} |
||
+ | * {{App|[[OpenRC]]|依存関係ベースの rc システムで、通常の SysVinit で動作する。|http://www.gentoo.org/proj/en/base/openrc/|{{AUR|openrc}} {{AUR|openrc-arch-services-git}}}} |
||
* {{App|[[systemd]]|積極的な並列化、cgroups によるプロセス監視を行う依存関係ベースの init システム。指定されたマウントポイントや dbus サービスに依存することができる。|http://freedesktop.org/wiki/Software/systemd/|{{Pkg|systemd}}}} |
* {{App|[[systemd]]|積極的な並列化、cgroups によるプロセス監視を行う依存関係ベースの init システム。指定されたマウントポイントや dbus サービスに依存することができる。|http://freedesktop.org/wiki/Software/systemd/|{{Pkg|systemd}}}} |
||
21行目: | 24行目: | ||
* {{App|[[BusyBox]]|レスキューや組み込みシステム向けのユーティリティ。|http://busybox.net/|{{Pkg|busybox}}}} |
* {{App|[[BusyBox]]|レスキューや組み込みシステム向けのユーティリティ。|http://busybox.net/|{{Pkg|busybox}}}} |
||
− | * {{App|[[SysVinit]]|伝統的な System V init。|http://savannah.nongnu.org/projects/sysvinit|{{AUR|sysvinit}}}} |
||
* {{App|ninit|[http://www.fefe.de/minit/ minit] のフォーク。|http://riemann.fmi.uni-sofia.bg/ninit/|{{AUR|ninit}}}} |
* {{App|ninit|[http://www.fefe.de/minit/ minit] のフォーク。|http://riemann.fmi.uni-sofia.bg/ninit/|{{AUR|ninit}}}} |
||
* {{App|sinit|Rich Felker の minimal init がベースのシンプルな init。|http://core.suckless.org/sinit|{{AUR|sinit}}}} |
* {{App|sinit|Rich Felker の minimal init がベースのシンプルな init。|http://core.suckless.org/sinit|{{AUR|sinit}}}} |
||
+ | * {{App|[[SysVinit]]|伝統的な System V init。|http://savannah.nongnu.org/projects/sysvinit|{{AUR|sysvinit}}}} |
||
== Init スクリプト == |
== Init スクリプト == |
||
29行目: | 32行目: | ||
* {{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|spark-rc|システムを起動するためのシンプルな rc スクリプト。|https://gitlab.com/fbt/spark-rc|{{AUR|spark-rc}}{{Broken package link|パッケージが存在しません}}}} |
* {{App|spark-rc|システムを起動するためのシンプルな rc スクリプト。|https://gitlab.com/fbt/spark-rc|{{AUR|spark-rc}}{{Broken package link|パッケージが存在しません}}}} |
||
− | * {{App|watchman-sm-services|watchman のサービスのサンプル。|https://gitlab.com/fbt/watchman-services|{{AUR|watchman-sm-services-git}}{{Broken package link|パッケージが存在しません}}}} |
||
== サービスマネージャ == |
== サービスマネージャ == |
||
37行目: | 38行目: | ||
* {{App|daemontools|UNIX サービスを管理するツールのコレクション。|http://cr.yp.to/daemontools.html|{{AUR|daemontools}}}} |
* {{App|daemontools|UNIX サービスを管理するツールのコレクション。|http://cr.yp.to/daemontools.html|{{AUR|daemontools}}}} |
||
* {{App|[[Monit]]|Unix や Linux 向けのプロセス監視ツール。monit では、システムの状態をコマンドラインや HTTP(S) ウェブサーバーから直接閲覧することができます。|http://mmonit.com/monit/|{{Pkg|monit}}}} |
* {{App|[[Monit]]|Unix や Linux 向けのプロセス監視ツール。monit では、システムの状態をコマンドラインや HTTP(S) ウェブサーバーから直接閲覧することができます。|http://mmonit.com/monit/|{{Pkg|monit}}}} |
||
− | * {{App|[[OpenRC]]|依存関係ベースの rc システムで、通常の SysVinit で動作する。|http://www.gentoo.org/proj/en/base/openrc/|{{AUR|openrc}}}} |
||
* {{App|perp|UNIX 向けの永続的なプロセス(サービス)監視・管理フレームワーク。|http://b0llix.net/perp/|{{AUR|perp}}}} |
* {{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|watchman|Linux 向けの not-so-simple なサービスマネージャ。|https://gitlab.com/fbt/watchman|{{AUR|watchman-sm}}{{Broken package link|パッケージが存在しません}}}} |
||
== 設定 == |
== 設定 == |
||
53行目: | 52行目: | ||
それから [[#Init スクリプト|Init スクリプト]]を設定してください。詳しくは [http://unix.stackexchange.com/questions/175380/how-to-list-all-running-daemons] を参照。 |
それから [[#Init スクリプト|Init スクリプト]]を設定してください。詳しくは [http://unix.stackexchange.com/questions/175380/how-to-list-all-running-daemons] を参照。 |
||
− | 一時ファイル ( |
+ | {{Note|一時ファイル ({{man|8|systemd-tmpfiles}}), [[カーネルモジュール]], [[sysctl]] の設定も適宜行ってください。}} |
=== logind === |
=== logind === |
||
109行目: | 108行目: | ||
新しい 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|vdev|UNIX の仮想デバイスマネージャ。|https://github.com/jcnelson/vdev.git|{{AUR|vdev-git}}{{Broken package link|package not found}}}} |
||
+ | * {{App|smdev|デバイスノードを管理するシンプルなプログラム。mdev と互換性がありますが、全ての機能を備えているわけではありません。|http://git.suckless.org/smdev/|{{AUR|smdev-git}}{{Broken package link|package not found}}}} |
||
== 参照 == |
== 参照 == |
||
− | * [https://wiki.debian.org/Debate/initsystem Debian |
+ | * [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] |
||
118行目: | 126行目: | ||
* [https://busybox.net/~vda/init_vs_runsv.html Init vs. runsv] |
* [https://busybox.net/~vda/init_vs_runsv.html Init vs. runsv] |
||
* [https://felipec.wordpress.com/2013/11/04/init/ Demystifying the init system] |
* [https://felipec.wordpress.com/2013/11/04/init/ Demystifying the init system] |
||
− | * [http://blog.darknedgy.net/technology/2015/09/05/0/ |
+ | * [http://blog.darknedgy.net/technology/2015/09/05/0/ 新しい init システムの歴史 (1992-2015)] |
+ | * [https://wiki.gentoo.org/wiki/Comparison_of_init_systems init システムの比較 (gentoo wiki)] |
2017年11月4日 (土) 14:43時点における版
Init はシステムのブート時に最初に起動されるプロセスです。システムがシャットダウンするまで実行し続けるデーモンプロセスです。Init は他の全てのプロセスの直接的または間接的な祖先となり、孤児プロセスを全て自動的に引き取ります。ハードコードされたファイル名を使ってカーネルによって起動され、カーネルが init を起動できない場合、パニックが発生します。典型的に Init にはプロセス ID 1 が割り当てられます。
init プロセスと init スクリプト、そしてサービスマネージャはまとめて init システムとしてひと括りにされます。Init システムによってこれらのコンポーネントは分割されていたり、init プロセスに (一部あるいは全てを) 複合されていたりします。
目次
Init (複合型)
- anopa — s6 管理スイートのために開発された Init システム。
- GNU Shepherd — Guile で書かれた Init システム。
- OpenRC — 依存関係ベースの rc システムで、通常の SysVinit で動作する。
- systemd — 積極的な並列化、cgroups によるプロセス監視を行う依存関係ベースの init システム。指定されたマウントポイントや dbus サービスに依存することができる。
Init
- BusyBox — レスキューや組み込みシステム向けのユーティリティ。
- ninit — minit のフォーク。
- sinit — Rich Felker の minimal init がベースのシンプルな init。
- SysVinit — 伝統的な System V init。
Init スクリプト
- initscripts-fork — Arch Linux の SysVinit スクリプトのメンテナンスがされているフォーク。
- minirc — BusyBox のために作られたミニマル init スクリプト。
- spark-rc — システムを起動するためのシンプルな rc スクリプト。
- https://gitlab.com/fbt/spark-rc || spark-rcAUR[リンク切れ: パッケージが存在しません]
サービスマネージャ
- daemontools — UNIX サービスを管理するツールのコレクション。
- Monit — Unix や Linux 向けのプロセス監視ツール。monit では、システムの状態をコマンドラインや HTTP(S) ウェブサーバーから直接閲覧することができます。
- perp — UNIX 向けの永続的なプロセス(サービス)監視・管理フレームワーク。
- http://b0llix.net/perp/ || perpAUR
- runit — SysVinit やその他の init スキームを置き換える、サービス監視が付いた UNIX init スキーム。
- s6 — UNIX 向けの小さなプログラムスイート。daemontools や runit でサービス監視ができるように作られました。
設定
使用しているデーモンの移行
新しい init でデーモンを実行するために、実行中のデーモンのリストを保存してください:
$ systemctl list-units --state=running "*.service" > daemons.list
それから Init スクリプトを設定してください。詳しくは [1] を参照。
logind
logind は init プロセスとして systemd を必要とします [2]。したがって systemd 以外の init ではローカルセッションなどの機能が利用できません。
デバイスのパーミッション
デバイスにアクセスするためにユーザーを適切なグループに追加して、再起動してください。現在のグループは id user
で確認できます。追加するコマンドの例:
# usermod -a -G video,audio,power,disk,storage,optical,lp,scanner user
Policykit で使用するグループルールを作成する方法は PolicyKit#パスワードプロンプトの迂回を参照。
Rootless X (1.16)
Xorg.wrap
は logind が有効になっているかどうか確認しないため [4]、Xorg の root 権限は手動で有効にする必要があります:
/etc/X11/Xwrapper.config
needs_root_rights = yes
電源管理
systemd の電源管理機能を置き換える方法は pm-utils や acpid を参照してください。
Cron 機能
Arch はデフォルトで cron の代わりに timer ファイルを使っています。基本的な cron ジョブについては AUR から archlinux-cronjobsAUR[リンク切れ: アーカイブ: aur-mirror] をインストールしてください。
D-Bus
systemd 226 と D-Bus 1.10.0-3 から、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_NS
と CONFIG_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 の置き換え
- eudev — Gentoo プロジェクトによって創始された udev のフォーク。主として OpenRC と組み合わせて使うように開発されています。
- mdev — 組み込みシステムで使用されるデバイスマネージャ。
- vdev — UNIX の仮想デバイスマネージャ。
- https://github.com/jcnelson/vdev.git || vdev-gitAUR[リンク切れ: package not found]
- smdev — デバイスノードを管理するシンプルなプログラム。mdev と互換性がありますが、全ての機能を備えているわけではありません。
- http://git.suckless.org/smdev/ || smdev-gitAUR[リンク切れ: package not found]