ARCHIVESDRIVE HB

オイラはホームベーカリー!

Certbot を python3 で CentOS7 へインストール

パッケージ管理のコマンドがディストリによって違いますが、大まかな文意は当てはめれるのではないかと。

  • ロケ地
    • CentoS 7.9
    • Nutanix AHV Hypervisor

Certbot を使って Let'sEncrypt から証明書をもらいたい

ので Certbot 公式に記載されている手順でインストールしてみることに。 (python2 時代にしか構築してないので復習を兼ねている)

snap インストールするもなんかおかしい

certbot.eff.org

今は snap で管理してるんすね、ということで公式記載のリンクから snap 公式を参考にインストール。

[vm-user@localhost ~]$ sudo yum install epel-release
[vm-user@localhost ~]$ sudo yum install snapd
[vm-user@localhost ~]$ sudo systemctl enable --now snapd.socket
[vm-user@localhost ~]$ sudo ln -s /var/lib/snapd/snap /snap
[vm-user@localhost ~]$ sudo systemctl start snapd
[vm-user@localhost ~]$ systemctl status snapd

snap が死ぬ

起動した直後は status や ps ax|grep snapd でもプロセスを確認できるけど、 snap install しようとするとエラーが返ってくる。 なぜ?

 1月 20 23:39:59 localhost systemd[1]: Starting Snap Daemon...
 1月 20 23:39:59 localhost snapd[34053]: AppArmor status: apparmor not enabled
 1月 20 23:39:59 localhost snapd[34053]: daemon.go:343: started snapd/2.47.1-1.el7 (series 16; classic; devmode) centos/7 (amd64) linux/3.10.0-1160.11.1.el7.x86_.
 1月 20 23:39:59 localhost snapd[34053]: daemon.go:436: adjusting startup timeout by 30s (pessimistic estimate of 30s plus 5s per snap)
 1月 20 23:39:59 localhost systemd[1]: Started Snap Daemon.
 1月 20 23:40:04 localhost snapd[34053]: daemon.go:542: gracefully waiting for running hooks
 1月 20 23:40:04 localhost snapd[34053]: daemon.go:544: done waiting for running hooks
 1月 20 23:40:04 localhost snapd[34053]: daemon stop requested to wait for socket activation

起動して 5 秒でデーモンの停止がリクエストされている、なぜ……。 その後、結局 snap が自ら停止する理由がわからなかったので解決するのを諦めてアンインストール。

[vm-user@localhost ~]$ sudo yum uninstall snapd

pip で Certbot インストール

epel から Certbot をインストールしようかと思ったらこれは古く、 python2 を利用する (しかも依存ライブラリがアップデートされて python3 じゃないと動かないらしい?) とのことでめんどくさそうだなあ。 と思っていたら、 pip を使ってインストールしている記事があったので参考にして環境作ってみました。

kaede.jp

[vm-user@localhost ~]$ sudo yum install python36 python36-pip
[vm-user@localhost ~]$ sudo pip3.6 install --upgrade pip
[vm-user@localhost ~]$ sudo pip3.6 install certbot
[vm-user@localhost ~]$ which certbot
  /usr/local/bin/certbot
[vm-user@localhost ~]$ sudo ln -s /usr/local/bin/certbot /usr/bin/certbot

やったぁ、入ったぞ。 ちなみに sudo したときに現ユーザのパスを引き継ぐ設定入れておらず /usr/local/bin/ を参照できないので、シンボリックリンク/usr/bin/certbot を作っています。

Certbot が動……かない!

これで万事解決か、と思いきや、証明書の作成を要求したらなんかおかしい。

[vm-user@localhost ~]$ sudo certbot certonly --apache
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Could not choose appropriate plugin: The requested apache plugin does not appear to be installed
The requested apache plugin does not appear to be installed

なるほど apache のぷらぎんが無い……? 調べてみたところ、各種ディストリのパッケージ管理ツール経由では python3-certbot-apache を入れれば良いらしいのですが、 pip なのでそのままの名前じゃないらしく。 おそらく certbot-apache だろうな、と当たりをつけてインストールしてみました。

pypi.org

[vm-user@localhost ~]$ sudo pip3.6 install certbot-apache
Collecting python-augeas
  Downloading python-augeas-1.1.0.tar.gz (93 kB)
     |████████████████████████████████| 93 kB 2.4 MB/s
    ERROR: Command errored out with exit status 1:

#snip#

    OSError: ctypes.util.find_library() did not manage to locate a library called 'augeas'
    ----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

?! なんじゃこれ……と思いましたが、ERROROSError から推察するに augeas コマンド (ライブラリ) がないと読めるので、シュッとインストールして再試行してみる。

[vm-user@localhost ~]$ sudo yum install augeas*
[vm-user@localhost ~]$ sudo pip3.6 install certbot-apache
Collecting certbot-apache

#snip#

Successfully installed certbot-apache-1.11.0 python-augeas-1.1.0

おっ入った?

Certbot を起動してみる

とりあえず動くか確認したいので、証明書だけ請求するパターンを利用する。

[vm-user@localhost ~]$ sudo certbot certonly --apache
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel):

おっやったー、動いたァ!

と、言うわけで

公式の手順通りだと一発で素直に動かなかったので我流でインストールした手順でした。 このあとは公式の手順通りでもいいので、目的のドメインapache の VirtualHost なりで設定して名前解決できるようにして、って感じです。

はー snap 動かないあたりで一日消費してしまったなー。

ちなみに pyenv とかで複数バージョン運用している人は、グローバル指定になっている python バージョンでインストールするのが良いと思います。 いや最終的に certbot コマンド叩く場所で決まるんでなんでもいいっちゃ良いと思うんですがね。

2021/02/22 追記

bugs.launchpad.net

Ubuntu 対象だけど多分 snapd が動かなかった同様の事例が報告されている。原因は不明っぽいくて草すら生えない。