Edited at

Amazon Linux 2でdaemontoolsを使う

More than 1 year has passed since last update.


Amazon Linux 2でdaemontoolsを使う


はじめに

12月13日(米国時間)⁠に、AWS EC2 上で稼働する Amazon Linux 2 のリリース候補(RC)が発表されました。

特徴などは、AWS上のサイトに掲載されています。

いくつかある特徴のなかで、気になったのは Systemd のサポートです。

業務で使用するインスタンスは Amazon Linux AMI 2017.09以前で構築され、サービスの管理は daemontools を使用しています。今後新規に作成するインスタンスの AMI に Amazon Linux 2 を選択した場合、既存の運用環境が移行できるのか、引き続き daemontools が利用できるのか。

"Amazon Linux 2 では daemontools が動かなかった" といったtweetを見かけたため、試してみました。

daemontools 経由で nginx を動かしてみます。


前提条件


  • リージョン : 東京

  • AMI ID : amzn2-ami-hvm-2017.12.0.20171212.2-x86_64-gp2 (ami-2a34b64c)

  • インスタンス タイプ : t2.micro


参考情報


インスタンスの作成

AMIは、この画面で選択可能です。

Amazon Linux 2 LTS RC


Development Tools グループをインストール

daemontoolsのインストールに必要となる開発ツールを含む、Development Tools グループをインストールします。

$ sudo yum group install "Development Tools"


daemontoolsのインストール

公式サイトの手順に従い、パッケージのダウンロードやインストールを行うディレクトリを作成します。

$ sudo mkdir -p /package

$ chmod 1755 /package
$ cd /package

daemontools のダウンロード、パッチ適用、インストールを行います。

パッチを適用しないと install 実行時にエラーとなります。

$ sudo wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz

$ sudo tar xvfz daemontools-0.76.tar.gz
$ cd admin/daemontools-0.76/
$ sudo wget http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/daemontools-0.76.errno.patch
$ sudo patch -s -p1 <./daemontools-0.76.errno.patch
$ sudo ./package/install

Systemd用の設定ファイルを新規作成します。

$ sudo mkdir -p /etc/systemd/system

$ sudo vi /etc/systemd/system/daemontools.service


daemontools.service

[Unit]

Description=daemontools Start supervise
After=getty.target
[Service]
Type=simple
User=root
Group=root
Restart=always
ExecStart=/command/svscanboot /dev/ttyS0
TimeoutSec=0
[Install]
WantedBy=multi-user.target

システム起動時に daemontoolsが 起動するようにします。

$ sudo systemctl enable daemontools

Created symlink from /etc/systemd/system/multi-user.target.wants/daemontools.service to /etc/systemd/system/daemontools.service.

daemontools を起動します。

$ sudo systemctl start daemontools

Systemdでは start を実行しても結果が標準出力されないため、status を実行して状態を確認します。

$ sudo systemctl status daemontools.service

● daemontools.service - daemontools Start supervise
Loaded: loaded (/etc/systemd/system/daemontools.service; enabled; vendor preset: disabled)
Active: active (running) since 土 2017-12-23 13:15:50 UTC; 29s ago
Main PID: 4566 (svscanboot)
CGroup: /system.slice/daemontools.service
├─4566 /bin/sh /command/svscanboot /dev/ttyS0
├─4568 svscan /service
└─4569 readproctitle service errors: ....................................................


nginxのインストール

Amazon Linux 2では、Extras リポジトリからいくつかのパッケージがインストールできるようになりました。

いままで nginx は標準の yum リポジトリに無かったため、/etc/yum.repos.d以下にリポジトリ設定が必要でしたが、それが不要になります。 (もちろん、より新しいものや他のバージョンが必要な場合は、いままでどおり設定が必要)

Amazon Linux 2にExtrasレポジトリからNginxをインストールするに分かりやすく整理されているので、これに従ってインストールします。

$ sudo amazon-linux-extras install nginx1.12

nginx を daemontoolsで管理できるよう /service 以下にディレクトリを作成します。

$ sudo mkdir /service/nginx

$ sudo chown -R ec2-user. /service/nginx/

runファイルを作成し実行権限を付与します。

$ sudo vi /service/nginx/run


run

#!/bin/sh

exec /usr/sbin/nginx -c /etc/nginx/nginx.conf -g 'daemon off;' 2>&1

$ chmod +x /service/nginx/run


daemontools経由での nginx 起動 / 停止

動いているようです。

# svc -u /service/nginx/

# svstat /service/nginx/
/service/nginx/: up (pid 3427) 5 seconds

# svc -d /service/nginx/

# svstat /service/nginx/
/service/nginx/: down 4 seconds, normally up