MENU

certbot-autoをAmazon Linux 2に対応させる

  • URLをコピーしました!

こんにちは、みーまです。

ホスティングサービスや個人サイトのSSL証明書取得でよく話題に上がるのがLet's Encryptの存在ですが、これを利用する為のcertbot-autoは、残念ながらAmazon Linux 2には対応していないらしい、ということがわかり、個人的になんとかしたいと調べていました。

既に具体的な対処方法はコミュニティサイトに記載があり、処理を変更することで動作するようになるのですが、certbot-autoが更新される度にコレをやるのは微妙だなと思い、変更を施すスクリプトを作りました。

目次

コード

コードは以下の通りです。USERDIRは作業フォルダの変数なので自由に設定してください。USERDIR=/home/ec2-userで確認は取れています。

# Download certbot-auto
sudo curl -L https://dl.eff.org/certbot-auto -o /opt/certbot-auto.org
sudo chmod a+x /opt/certbot-auto.org

# certbot-auto modify for Amazon Linux 2
## Get certbot-auto modify linenumber
cd /opt/
CERTBOT_MOD_LINENO=`sudo fgrep -n 'elif [ -f /etc/issue ] && grep -iq "Amazon Linux" /etc/issue ; then' ./certbot-auto.org | sed -e 's/:.*//g'`
## modify
CERTBOT_MOD_LINENO=`expr $CERTBOT_MOD_LINENO - 1`
sudo -E split -l $CERTBOT_MOD_LINENO -d ./certbot-auto.org part
sudo mv part00 front.tmp
CERTBOT_MOD_LINENO=`expr $CERTBOT_MOD_LINENO + 1`
sudo rm  -rf part*
sudo -E split -l $CERTBOT_MOD_LINENO -d ./certbot-auto.org part
sudo bash -c "cat part01 part02 >back.tmp"
echo 'elif grep -i "Amazon Linux" /etc/issue > /dev/null 2>&1 || \' >$USERDIR/center.tmp
echo '    grep 'cpe:.*:amazon_linux:2' /etc/os-release > /dev/null 2>&1; then' >>$USERDIR/center.tmp
sudo -E bash -c "cat front.tmp $USERDIR/center.tmp back.tmp >certbot-auto"
# Change permission
sudo chmod a+x certbot-auto
## Remove temp file
sudo rm  -rf part* *.tmp certbot-auto.org $USERDIR/center.tmp

# Run certbot-auto(install only)
./certbot-auto --install-only --debug

メモ

当初は正規表現でなんとかしようと思ったんですが、シングルクオートやらなんやらで私のスキルでは実現できなかったので、下記のような処理にしてあります。

  1. 変更が必要な部分の行番号を取得
  2. 行番号を境にファイルを分割する
  3. 書換後のデータが含まれるファイルと順番を指定しつつ結合する

最後に

これを自サイトのブログ(Amazon Lightsail)で使う予定だったのですが、Amazon LightsailのイメージはAmazon Linux 1であることがわかり、不要になりました(笑)

いずれOSがAmazon Linux 2になったときはこれで対応ができるということで、とりあえず良しとします。

目次