Amazon Linux 2でdaemontoolsを使う

## はじめに
12月13日(米国時間）⁠に、AWS EC2 上で稼働する Amazon Linux 2 のリリース候補（RC）が発表されました。
特徴などは、AWS上のサイトに掲載されています。

 - https://aws.amazon.com/jp/amazon-linux-2/ 
 - https://aws.amazon.com/jp/blogs/news/amazon-linux-2-modern-stable-and-enterprise-friendly/
 - https://aws.amazon.com/jp/about-aws/whats-new/2017/12/introducing-amazon-linux-2/

いくつかある特徴のなかで、気になったのは 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

## 参考情報
 - http://cr.yp.to/daemontools/install.html
 - https://andreas.grubblare.com/2016/05/daemontools-on-centos-7/
 - http://d.hatena.ne.jp/amari3/20130826/1377491518
 - http://kenjiszk.hatenablog.com/entry/2015/05/05/235051
 - http://bulkserver.jp/blog/2014/01/29/daemontools-nginx-memcached/
 - https://dev.classmethod.jp/cloud/aws/amazon-linux-2-now-available/
 - https://dev.classmethod.jp/cloud/aws/install-nginx-on-amazon-linux2-from-extras-repository/

## インスタンスの作成
AMIは、この画面で選択可能です。
<img width="800" alt="Amazon Linux 2 LTS RC" src="https://qiita-image-store.s3.amazonaws.com/0/61809/9355863f-a04d-c12e-6be3-05c12879a765.png">

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

```
$ sudo yum group install "Development Tools"
```

## daemontoolsのインストール 
[公式サイト](http://cr.yp.to/daemontools/install.html)の手順に従い、パッケージのダウンロードやインストールを行うディレクトリを作成します。

```
$ 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
```

```text: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をインストールする](https://dev.classmethod.jp/cloud/aws/install-nginx-on-amazon-linux2-from-extras-repository/)に分かりやすく整理されているので、これに従ってインストールします。

```
$ 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
```

```shell: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
```