第 172 回東京エリア Debian 勉強会

systemd と sysvinit のデーモンで動作する
Debian パッケージの作り方を調べてみる
Norimitsu Sugimoto (杉本 典充)
dictoss@live.jp

2019-03-16

自己紹介

Norimitsu Sugimoto (杉本 典充)
dictoss@live.jp
Twitter: @dictoss
Debian 使って 15 年以上。その頃は sarge の時期。
仕事はソフトウェア開発者をやってますpython と Django の組み合わせで使うことが多いですアジェンダ

はじめに

Debian における init の仕組み
Debian における init が呼び出す起動・停止の設定ファイル
systemd、sysvinit

init 設定を行う debian パッケージ作成方法
systemd、sysvinit

まとめ
参考文献

debian における init の仕組み

init の仕組み
UNIX/Linux 系の OS では、カーネルが最初に呼び出す
ユーザランドプログラム「init」
Debian での init の説明
Debian リファレンスの「第 3 章 システムの初期化」1
Debian における init
昔から存在する「sysvinit」
新世代の「systemd」（Debian GNU/Linux 8 からデフォルト）

Debian では init を切り替えることが可能 2
systemd と sysvinit の両方を考慮してパッケージを作る
必要あり1

https://www.debian.org/doc/manuals/debian-reference/ch03.ja.html
2
https://wiki.debian.org/Initdebian における init が呼び出す
起動・停止の設定ファイル

systemd: service ファイル

systemd: service ファイル

systemd 環境では、systemctl コマンドでデーモンの起動・終了を行う
設定ファイルの場所/lib/systemd/system/[package].service

systemd: systemctl コマンド

systemctl コマンドの使い方（nginx の例）
起動# systemctl start nginx

終了# systemctl stop nginx

設定ファイル/lib/systemd/system/nginx.service

sysvinit: init スクリプトsysvinit: init スクリプト

sysvinit 環境では、service コマンドでデーモンの起動・終了を行う
設定ファイルの場所/etc/init.d/[package]

設定ファイルの中で使われるヘルパースクリプト/lib/init/vars.sh/lib/lsb/init-functions/sbin/start-stop-daemon

sysvinit: service コマンド

service コマンドの使い方（nginx の例）
起動# service nginx start

終了# service nginx stop

設定ファイル/etc/init.d/nginx

init 設定を行う debian パッ
ケージ作成方法

前提
Debian GNU/Linux 9 (stretch)debhlper を利用して debian パッケージを作成 34
https://wiki.debian.org/ja/Packaging
packaging-tutorialhttps://www.debian.org/doc/manuals/
packaging-tutorial/packaging-tutorial.ja.pdf
Debian 新メンテナーガイド
https://www.debian.org/doc/manuals/
maint-guide/index.ja.html
Debian Policy Manualhttps://www.debian.org/doc/debian-policy/
3

debian の 98%のパッケージにおいて採用
https://www.debian.org/doc/manuals/packaging-tutorial/packagingtutorial.ja.pdf
4systemd に対応する設定

systemd 対応：基礎情報

Teams pkg-systemd Packaging
https://wiki.debian.org/Teams/pkg-systemd/Packaging

systemd 対応：package 作業

debian/rules の修正
debian/control の修正
debian/package.service の作成

systemd 対応：debian/rules の修正
dh make コマンドでひな形ファイルが作成される
debian/rules に addon を追加（with オプションの後ろに追記）%:
dh $@ --with systemd”–with systemd”を指定するとパッケージのビルド処理
で以下を追加で実行
dh systemd enable
dh systemd startsystemd 対応：debian/control の修正

dh make コマンドでひな形ファイルが作成される
debian/compat の中身が ”10 以上”
Build-Depends: debhelper (>= 9.20160709)

debian/compat の中身が ”10 未満”
Build-Depends: debhelper (>= 9.20150101),dh-systemd (>= 1.5)

systemd 対応：package.service の作成

dh make コマンドでひな形ファイルが作成されない
他のパッケージのファイルやマニュアルを参考に作成
してください 5
package.service が存在する場合、パッケージのビルドのdh installinit で /lib/systemd/system へインストールするよう処理する5

https://www.freedesktop.org/software/systemd/man/systemd.service.html

sysvinit に対応する設定

sysvinit 対応：package 作業

debian/package.init の作成

sysvinit 対応：package.init の作成

dh make コマンドでひな形ファイルが作成されない 6
他のパッケージのファイルや過去のひな形ファイルを参考に作成してください 7
package.init が存在する場合、パッケージのビルドのdh installinit で /etc/init.d へインストールするよう処理する6

Debian 8 以前の dh make では init.d.ex というひな形ファイルが作成されました7
https://www.apt-browse.com/browse/debian/jessie/main/
all/dh-make/1.20140617/file/usr/share/debhelper/dh_make/debian/init.d.ex

まとめ

まとめ
systemd と sysvinit は切り替えることができるため、両方のことを意識しましょう
systemd
systemctl コマンド、設定は /lib/systemd/system

sysvinit
service コマンド、設定は /etc/init.d 配下

パッケージの作成、ビルドは debhelper 便利

dh installinit で service ファイル、init スクリプトをdebian パッケージに含めている
１つのソースパッケージから複数のバイナリパッケー
ジを作る場合にファイル名の命名規則が異なるためドキュメントを見ましょう

参考文献

参考文献
「Teams pkg-systemd Packaging」
https://wiki.debian.org/Teams/pkg-systemd/Packaging

mkouhei (2014) 「How to create a Debian package of
support to sysvinit, upstart, systemd」
https://d.palmtb.net/2014/01/30/how_to_create_a_debian_package_of_support_to_sysvinit__upstart__systemd.html@henrich (2016) 「dh-systemd は debhelper 9.20160709
で統合された」
https://qiita.com/henrich/items/
e1651e3284c6b3d0d39e