とある VPS 上の Ubuntu 20.04.4 LTS にて Let's Encrypt をインストールする際につまづいた顛末のまとめ。
ツンデレ snapd
近頃の Certbot のインストール方法は apt ではなく snapd というパッケージ管理システムによって行うのが良いそうで、残念ながら僕の Ubuntu にはプリインストールされていなかったから、Certbot 公式の手順にしたがってインストールを進めていた。
snapd のインストール自体はエラー等なくスムーズに終了したが、動作確認の下記コードを実行したところエラーメッセージが出た。どうやらインストールはさせてくれるが、ゆうことを聞いてくれるのは別の話みたいだ。
# snap install hello-world
error: system does not fully support snapd: cannot mount squashfs image using "squashfs": mount:
/tmp/sanity-mountpoint-080563154: mount failed: 許可されていない操作です.
右往、左往
エラーメッセージでググって調べると、まず「これらのパッケージをインストールしてはどうだ?」っというアンサーに出くわす。
# apt install fuse libsquashfuse0 squashfuse
しかし、状況は改善しない。他にも「その後リブートしたらうまく行った」などググるといくつか情報が出てきたが、やはり snapd はエラーメッセージを吐き続ける。
同じことで困ってる日本人はいないのか、またはみんな英語がペラッペラなのか、ぜんぜん日本語の HowTo は見つからず。
『あなたは基本的に運が悪いですね』
最終的に Let's Encrypt のフォーラムにたどり着く。そこでは『 OpenVZ とか LXC とかの仮想環境ではどうもダメのダメみたい。運が悪かったですね』というような会話がされている。
→ System does not fully support snapd: cannot mount squashfs image using “squashfs”
そんな、まさか自分が……! と思いつつ事実確認してみる。
# systemd-detect-virt
openvz
Certbot 公式サイトの Issue にもあがっていた
『OpenVZ や LXC の人に対して snapd 以外でのインストール方法の説明が必要ではないかしら?』と。
Users on OpenVZ/LXC need non-snap instructions
じゃあどうすれば?
このページ (Get Certbot - Alternate installation methods) の中から snap 以外のインストール方法を選べばいいのだけど、僕の環境では他のサービスで Docker を一切使っていないので Pip でいいかなっという感じ。
とりあえずここまで。
【数時間後に追記】
この件についてまったく同じではなさそうだけど Pip でのインストール方法などが参考になるページを見つけたのでリンクを置いておきます。
IPv6 only環境でcertbotをpipインストールする (Let's EncryptでSSL証明書を自動更新する)
Certbot 公式だと証明書の自動更新を cron ジョブでまわしたらどう?とか書いてあって「うーん、、個人的には Systemd の方がいいなぁ。。」ってなっていたところ、この記事では Systemd でまわす方法が書いてあって参考になりました。ありがとうございます。