AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

AmazonLinux2023 では dnf や snap 経由で certbot をやれない(ハズ

この記事を書いている時点ではできないはず。

2024/03/01 追記: certbot が追加されたっぽい

certbot has now been added to the just released AL2023.3

github.com

とのことで、アップデートすればおそらく certbot を素朴に利用できるはず。 いやーよかったよかった。

ただこれ例外があるっぽくて。

Missing the cloudflare plugin though.

github.com

どうも Cloudflare ぷらぎんは無いらしい。

AmazonLinux 2023 なんだし Route53 使っとけや、ということっぽくてそれはそう! という気持ちある。 けどドメインは Cloudflare Registration している、とかでサーバリソースだけ AWS で調達したい、というパターンも理解できる (なんなら僕もやろうとしている) ので、別 issue で package request 飛んでいるし、ワンチャン追加されるかもしれない。

という感じ。 少なくとも AmazonLinux2023 においては、標準的な手順でできない! みたいな辛さはほぼほぼ無くなったんじゃないかな。

以下のように certbot 公式の手順一覧にはまだ追加されてないけど、そのうち追加されそうな気がする。

公式の対象ディストリなど

certbot を AmazonLinux2023 へ

Let's Encrypt でもおすすめされている ACME クライアント、事実上の業界標準みたいなトコに落ち着いている気がする。

でこれなんだけど、AmazonLinux2023 にはスッとパッケージマネージャなどでインストールできない。

AmazonLinux 2023 は 2 と違ってわりとピュア寄りめな RHEL クローンというわけではなさそうなので。 Fedora 派生っぽいんだけど、見てる感じ FedoraUbuntu のいいとこ取りをしようとしているんじゃないか? (メンテナンスが追いついてないけど) という気がする。 気がするだけ。

でまあどうするか、というと python3 インストールからの pip を使ってやるのが一番直感的そう (この記事を見ている人の用途的には)。

というのが書いてある

コメント兄貴も pip で動くといっとる。

Please refer to the steps in this link to setup certbot via pip. The steps work fine on Amazon Linux 2023.

pip 経由で certbot をセットアップするには、このリンクの手順を参照してください。この手順は Amazon Linux 2023 で正常に動作します。

repost.aws

これだとシステムワイドに certbot コマンドが配備されるので、難しいこと考えなくていい。

Docker でやる

上記リンク先でも触れられていたんだけど、 AWS はナレッジを更新しろという気持ちがある。

docs.aws.amazon.com

とはいえ自社サービスで CertificateManager あるからそっちを使え、と言及するのは当然だし、 certbot 及び Let's Encrypt が変更されたら追従しつつドキュメント治すのもめんどうような、というのは理解できる。

Certificates generally cost money because of the labor involved in validating the requests, so it pays to shop around. A few CAs offer basic-level certificates free of charge. The most notable of these CAs is the Let's Encrypt project, which also supports the automation of the certificate creation and renewal process. For more information about using a Let's Encrypt certificate, see Get Certbot.

でまあ、 AWS のドキュメントリンク先を見たら、現代の certbot は Docker を提供していた。

eff-certbot.readthedocs.io

ので、システムワイドに certbot のためだけに pip と python3 インストールしたくねえ! という人はこの Docker イメージを用いる方が良さそう。

  1. Docker 経由で httpd/nginx なり SSL アクセラレータ相当が証明書を読むディレクトリをマウント
  2. docker exec certbot ~ など牧歌的なコマンドで証明書を生成
    • 日ごとの実行を crontab などに記述して、証明書自体の自動更新部分とする
  3. 証明書更新の cron 実行よりあとの時間で、 httpd/nginx なり SSL アクセラレータ相当を再起動する cron を記述する
  4. 合せ技一本、みたいな風情で自動更新できている

こうかな、たぶんそう、やってないけどいけるはず。

crontab の例

公式の記載だと、 Docker イメージは以下のように使え、とあった。

sudo docker run -it --rm --name certbot \
            -v "/etc/letsencrypt:/etc/letsencrypt" \
            -v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
            certbot/certbot certonly

長すぎるのでシェルスクリプトにしてもいいし、まあこのまま書いてもいいと思う。

以下は手動で証明書発行済という想定です。

# certificate renew
0 1 * * * /bin/bash -l -c 'sudo docker run -it --rm --name certbot -v "/etc/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" certbot/certbot renew'
# restart (httpd の場合
0 2 * * * /bin/bash -l -c 'sudo systemctl restart httpd'
# restart (nginx の場合
0 2 * * * /bin/bash -l -c 'sudo systemctl restart nginx'

たぶんこんな感じでええんちゃうか?

snap

certbot はそもそも snap というパッケージ管理ツールを利用してインストールしてくれ、というのが方針なのですが、これが基本的に RHEL っぽい環境は RHEL クローン向けの提供なので、 EPEL 使える必要があったりなんだり、みたいな色々があるんですね。

でまあ AmazonLinux はわりとクローズなディストリなので、 snap はインストールできなくてウム、という感じです。

以前 AmazonLinux2 で snap をインストールして certbot を使う、みたいな記事も書いたんですが、 2024 年の現在だとどうも削除されたのかアクセスできなくなっておりダメそうな風情があります。

まあ Docker 使うか pip でインストールするか、あたりがよさそうです。