Init

提供: ArchWiki
2015年10月23日 (金) 00:51時点におけるKusakata (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

関連記事

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

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

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

Init (複合型)

  • systemd — 積極的な並列化、cgroups によるプロセス監視を行う依存関係ベースの init システム。指定されたマウントポイントや dbus サービスに依存することができる。
http://freedesktop.org/wiki/Software/systemd/ || systemd
  • Epoch — フットプリントを最小に、統合的な設定で互換性をもたせるよう設計されたシングルスレッドの init システム。
http://universe2.us/epoch.html || epoch-init-systemAUR
  • initng — 並列化と非同期の起動で動く依存関係ベースの init システム。
http://initng.sourceforge.net/trac || initng-gitAUR
  • SysVinit — 伝統的な System V init。
http://savannah.nongnu.org/projects/sysvinit || sysvinitAUR
  • Upstart — タスクとサービスの起動・停止・監視を管理するイベントベースの init システム。
http://upstart.ubuntu.com/ || upstartAUR

Init

  • BusyBox — レスキューや組み込みシステム向けのユーティリティ。
http://busybox.net/ || busybox
  • finitcgroups やソケットの有効化をサポートしている Ruby で書かれた小さな init システム。
https://github.com/troglobit/finit || finit-arcAUR[リンク切れ: アーカイブ: aur-mirror] / finit-arc-gitAUR[リンク切れ: アーカイブ: aur-mirror]
  • ninitminit のフォーク。
http://riemann.fmi.uni-sofia.bg/ninit/ || ninitAUR
  • sinit — Rich Felker の minimal init がベースのシンプルな init。
http://core.suckless.org/sinit || sinitAUR

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
  • OpenRC Arch services — Arch Linux と互換性のある OpenRC サービススクリプト。
https://github.com/andrewgregory/openrc-arch-services || openrc-arch-services-gitAUR
  • spark-rc — システムを起動するためのシンプルな rc スクリプト。
https://github.com/fbt/spark-rc || spark-rcAUR
  • watchman-sm-services — watchman のサービスのサンプル。
https://github.com/fbt/watchman-services || watchman-sm-services-gitAUR

サービスマネージャ

  • daemontools — UNIX サービスを管理するツールのコレクション。
http://cr.yp.to/daemontools.html || daemontoolsAUR
  • Monit — Unix や Linux 向けのプロセス監視ツール。monit では、システムの状態をコマンドラインや HTTP(S) ウェブサーバーから直接閲覧することができます。
http://mmonit.com/monit/ || monit
  • OpenRC — 依存関係ベースの rc システムで、通常の SysVinit で動作する。
http://www.gentoo.org/proj/en/base/openrc/ || openrcAUR
  • 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
  • watchman — Linux 向けの not-so-simple なサービスマネージャ。
https://github.com/fbt/watchman || watchman-smAUR

設定

Cron 機能

Arch はデフォルトで cron の代わりに timer ファイルを使っています。基本的な cron ジョブについては AUR から archlinux-cronjobsAUR をインストールしてください。

グループパーミッション

Systemd は logindローカルセッショングループを管理します。それらがない場合、各グループ (audiovideo など) にユーザーを追加して再起動する必要があります。

Policykit エージェントはアクティブなセッションを必要としますが、ルールは手動で変更することができます。

Rootless X (1.16)

Xorg#Rootless Xorg (v1.16) を参照。

同じ TTY で X を起動

[1] を参照。

Syslog-ng

デフォルトで Syslog-ng は journalctl を使うように設定されています。/etc/syslog-ng/syslog-ng.conf を編集:

source src {
 unix-stream("/dev/log");
 internal();
 file("/proc/kmsg");
};

詳しくは Syslog-ng#Source を見て下さい。

D-Bus

systemd 226 と D-Bus 1.10.0-3 から、systemd/ユーザーによって dbus-daemon のユーザーインスタンスが起動されるようになっています [2]。デスクトップアプリケーション間で 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

Tips and tricks

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 を使うこともできます [3] [4]。chroot する前に新しい root の中に /proc がマウントされてない状態にしてください。systemd を実行さえしてしまえば後でマウントできます。

参照