はじめに
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/
インスタンスの作成
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
[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
#!/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