• 検索結果がありません。

東京エリアDebian勉強会 - systemd

N/A
N/A
Protected

Academic year: 2021

シェア "東京エリアDebian勉強会 - systemd"

Copied!
35
0
0

読み込み中.... (全文を見る)

全文

(1)

東京エリア

Debian

勉強会

systemd

岩松 信洋 [email protected]

(2)

はじめに

世の中の主要な Linux ディストリビューションは SysVinit の init scripts から他の init システムに移行しつつある ( はず)。

Fedoraや Arch Linux が systemd に移行を始めたというこ ともあり、一部で盛り上がっている( 阿鼻叫喚とも いう)。

まさか いまだに SysVinit を使ってないよね? Debianと systemd についてまとめた。

(3)

systemd

とは?

RedHat に勤めている Lennart Poettering 氏によって開発 されている。 initの代替プログラム。 実際には init の代替だけではなく、 Linux のサービス ( デーモン)管理フレームワーク。 今までの init システムの違い サービスのプロセス管理をpidではなく、cgroupsを 使う。 サービスの起動をソケットとバス(dbus)を使う。 サービスの依存関係があり、これによってシステム立ち上 げ処理をより並列的に行える。 System V スタイルとBSDスタイルの両方をサポートし ている。 CosoleKit との連携。

(4)
(5)

systemd

とは?

開発は freedesktop.org で行われており、開発は活発で週 に一度はバージョンアップ。

最新バージョンは v195。

(6)

SysVinit

と比べた

systemd

の利点

設定が容易。 起動が早い。 カーネルモジュールの操作、セッション管理、ログ管理、 ディスクの暗号化などが統合されている。 その他、開発者による説明が http://0pointer.de/blog/projects/why.html にある。

(7)

SysVinit

と比べた

systemd

の欠点

/

不安

あらゆる基本サービス (cron なども) をまとめるという壮 大な物語。 日本語ドキュメントがない、ぐらい? kFreeBSDでも頑張ればうごくらしい。( どうやってるの かは不明)

(8)

Debian

で使う

systemdはもちろん Debian でも提供されている testing / unstable で v44 が利用できる 最新版とバージョンに差があるが、アップストリームで頻 繁にバージョンアップするのでバージョンはあまり問題で はない v44 でも systemd を十分に使うことができる いまのところ Debian に関する情報は http://wiki.debian.org/systemdにまとまっている が情報が少なく、内容も古い

(9)

インストール

apt-get / aptitude でインストールできる。

Linuxカーネルは 2.6.39 以上、 devtmpfs, fanotify, autofs4, cgroups が有効になっている必要がある。

(10)

インストール

インストールは以下のように実行する。 $ sudo apt-get install systemd

以下のパッケージが依存関係でインストールされる。 libsystemd-daemon0

libsystemd-id128-0 libsystemd-journal0 libpam-systemd

(11)

インストール

次にブートローダに init 指定を追加する

GRUBを使っている場合、/etc/default/grub の GRUB CMDLINE LINUX DEFAULT に

init=/lib/systemd/systemdを追記する 変更前:

GRUB_CMDLINE_LINUX_DEFAULT="quiet" 変更後:

(12)

インストール

変更後、 update-grub を実行し、 GRUB に設定を反映 する。 そしてリブートする。 設定が間違っていないければ systemd で立ち上がる はず。 $ sudo update-grub ... $ sudo reboot

(13)

起動速度

systemdはアナライザをデフォルトでサポートしている。 SysVinitだと bootchart2 で測定する必要がある。 起動にかかった時間を確認するには systemd-analyze を実行する。 $ systemd-analyze

Startup finished in 1831ms (kernel) + \ 5669ms (userspace) = 7500ms

(14)

起動速度

また、画像で確認したい場合には prop オプションを指定 して実行する。

SVGフォーマットで出力されるので、リダイレクトして ファイルに保存する。

(15)
(16)

起動速度

試しに自分が常用している環境で起動時間を測定したところ、 SysVinitは約 15 秒、 systemd は約 10 秒だった。

(17)

用語

(18)

ユニット

systemdではデーモンなどの制御対象のことをユニットと 呼ぶ。 ユニットにはサービス、デバイス、マウントポイントな ど、いくつかの種類がある。 このユニットはテキストファイルで記述され、 /lib/systemd/system/以下に格納されている。 各ユニットは拡張子を持ち、サービスの場合は.service となっている。

(19)

ユニット

ユニットの種類 説明 service サービス socket ソケットで起動するためのソケット定義 target 各サービスを同期させるための定義 device udev で管理するデバイス snapshot ある時点の init の状態 timer イベントから時間経過 path 監視するパス mount マウントポイント swap スワップ automaount 自動マウントポイント

mount, swap, automoutは起動時に /etc/fstab から自動的 にユニットを生成する。

(20)

ターゲット

SysVinitの runlevel 相当のもの。

これはディストリビューションによって異なる。 Debianの場合は以下の通り。

run level systemdのターゲット 0 poweroff.target

1 rescue.target 2 - 5 multi-user.target 6 reboot.target

(21)

ターゲット

この他に graphical.target と emergency.target がある。 graphical.target X による起動を行うときに呼ばれるター ゲット emergency.target は障害が起こった時に起動できるように するためのターゲット。 ターゲットはカーネルのブートオプションに systemd.unit=で指定できる。 何も指定しない場合は default.target が呼ばれるように なっている。

(22)

ユニットの操作方法

systemdに移行した後、デーモン等の制御は /etc/init.d/ 以下を実行するのではなく、 systemctl コマンドを使っ て操作する。

(23)

起動しているユニットを表示する

起動しているユニットを表示するには sytemctl を実行する。 $ systemctl

...

console-setup.service loaded active exited LSB: Set console font and cron.service loaded active running LSB: Regular background pr dbus.service loaded active running D-Bus System Message Bus debian-fixup.service loaded active exited Various fixups to make sys exim4.service loaded active running LSB: exim Mail Transport A [email protected] loaded active running Getty on tty1

[email protected] loaded active exited ifup for eth0 ...

(24)

全てのユニットを表示する

操作できるユニットを表示するには --all を指定する。 $ systemctl --all

UNIT LOAD ACTIVE SUB JOB DESCRIPTION

proc-sys...misc.automount loaded active waiting Arbitrary Executable Fil dev-cdrom.device loaded active plugged QEMU_DVD-ROM

dev-disk...QM00003.device loaded active plugged QEMU_DVD-ROM dev-disk...QM00001.device loaded active plugged QEMU_HARDDISK dev-disk...2dpart1.device loaded active plugged QEMU_HARDDISK dev-disk...2dpart2.device loaded active plugged QEMU_HARDDISK ...

(25)

ユニットの状態を確認する

ユニットの状態を確認するには、 status オプションに確認し たいユニット名を指定して実行する。

以下に rsyslog.service ユニットの状態を確認する例を示す。 $ systemctl status rsyslog.service

Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled)

Active: active (running) since Wed, 14 Nov 2012 00:37:18 -0800; 22h ago

Process: 474 ExecStartPre=/bin/systemctl stop systemd-kmsg-syslogd.service (code=exited, status=0/SUCCESS) Main PID: 483 (rsyslogd)

CGroup: name=systemd:/system/rsyslog.service └ 483 /usr/sbin/rsyslogd -n -c5 これにより、このユニットは

/lib/systemd/system/rsyslog.serviceによって Wed, 14 Nov 2012 00:37:18 -0800に起動していることが分かる。

(26)

ユニットを起動する

起動していないユニットを起動するには、 start オプション にユニット名を指定して実行する。これは /etc/init.d/サー ビス start と同様の動きとなる。

(27)

ユニットを停止する

起動しているユニットを停止するには、 stop オプションにユ ニット名を指定して実行する。これは /etc/init.d/サービス stopと同様の動きとなる。

(28)

ユニットの設定を再読み込みする

ユニットの設定を再読み込みするには、 daemon-reload オプ ションにユニット名を指定して実行する。

$ sudo systemctl daemon-reload ユニット名

実際に動いているデーモンの設定、例えば httpd の設定を再読 み込みし、再起動するには reload オプションを使う。

(29)

ユニットの自動起動を有効にする

ユニットの自動起動を有効にするには enable オプショ ンにユニット名を指定して実行する。 有効にすると /etc/systemd/system/ターゲッ ト.wants/に/lib/systemd/system/にあるユニットへ のシンボリックリンクが作成される。 どのターゲットで自動起動が有効になるかは、ユニット ファイルの Install セクションで指定する。

(30)

ユニットの自動起動を無効にする

ユニットの自動起動を無効にするには disable オプショ ンにユニット名を指定して実行する。

無効にすると、/etc/systemd/system/ターゲット.wants/ にあるシンボリックリンクが削除される。

(31)

ユニットの詳細を確認する

ユニットの詳細を確認するには show オプションにユニッ ト名を指定して実行する。

これにより指定したユニットと他のユニット、ターゲット の関係などが分かる。

$ sudo systemctl show rsyslog.service Id=rsyslog.service Names=syslog.service rsyslog.service Requires=basic.target Wants=syslog.socket WantedBy=multi-user.target Conflicts=shutdown.target ...

(32)

ユニットについて

ユニットには各ユニット間の依存関係を記述することができ る。依存関係の指定として以下がある。 定義 説明 Before そのユニットの後に起動されるべきユニット。 After そのユニットの前に起動されるべきユニット。 Conflicts 同時に起動できないユニット。 Service ソケットによる起動を行うユニット。 Sockets ソケットによるユニットの起動を行う場合のソケット情報。 Wants 同時に起動してほしいユニット。成功、失敗は関係ない。 Requires 同時に起動されなければならないユニット。ユニットの起動が失敗した場合は要求元も失敗する BindTo ユニットをグループとしてまとめる。

(33)

ユニットについて

例えば、 default.target の内容は以下のようになっている。 [Unit] Description=Graphical Interface Requires=multi-user.target After=multi-user.target Conflicts=rescue.target AllowIsolate=yes このターゲットは multi-user.target と同時に起動され、 multi-user.targetの後に起動する。また、 rescue.target と同時 に起動できない。

(34)

まとめ

Debianでも問題なく systemd が利用できる環境が整って いる。

レガシーな SysVinit は捨て、新しい init の世界へ足を踏み 入れてみてはいかがでしょうか。

(35)

参考文献

参照

関連したドキュメント

Apply BANVEL as a broadcast or spot treatment to emerged and actively growing weeds after crop harvest (post harvest) and before a killing frost or in the fallow cropland or

Applying EXIREL insect control with any product that produces adverse crop response in a tank mixture, specifically including, but not limited to, those listed in the individual

Apply by ground or air equipment using sufficient water to obtain full coverage of foliage (for ground application use a minimum of 20 gallons for concentrate spray or a minimum of

postemergence to actively growing grasses according to rate table. Crop injury to bushberry can occur if TAPOUT® is improperly applied. TAPOUT® should not be applied directly

Typically, for an active clamp flyback topology, minimum frequency is selected to be at its lowest input voltage, lowest intended output voltage, and maximum load current.. An

In our opinion, the financial statements referred to above present fairly, in all material respects, the consolidated financial position of The Tokyo Electric Power

For all other crops, apply Bumper 41 .8 EC by ground equipment in a minimum of 10 gals of water per acre unless specified otherwise in the APPLICATION INSTRUCTIONS section of

For burndown or control of the weeds listed, apply the specified rates of this product plus 0.5 to 1% nonionic surfactant by total spray volume in 3 to 30 gallons of water per