Certbot 更新失效的解決過程

TL;DR 紀錄在 CentOS 7 下解決憑證自動更新失效的過程

Stephen Chen
7 min readJan 24, 2023
a painting of a fox in the style of Starry Night

起因是透過監控網站( uptime kuma )發現 SSL 憑證期限剩下不到 30 天

示意圖

為什麼是 30 天呢,因為官方說 less than 30 days 會自動 renew

於是 ssh server 後發現以下問題

fatal error: unexpected signal during runtime execution

查了一下暫時好像沒有解法但 workaround 是 downgrade 到 2.55 版本,等 snapd 釋出新版本,而看了一下目前我安裝的版本是 2.57,剛好是大家也都遇到問題的版本

snap --version

首要目的是把 snap 移除

# Remove snapd via yum
sudo yum remove snapd -y

# Remove snap under /var/lib/snapd
sudo rm -rf /var/lib/snapd/snap

# Remove snap
sudo rm -rf /snap

檢查一下是否還在

snap --version

重新安裝 2.55 版本,使用 rpm -Uvh <package>

( 註:rpm is a powerful package management system for centos, Fedora…etc )

  • U 是 upgrade
  • -v 是 verbose,意思是很囉唆的把訊息都呈現出來給你看
  • -h 是 hash,意思是把 hash marks 給列出來 ( 下圖的 ########## )
# Update package using rpm
rpm -Uvh https://mirror.lt.ucsc.edu/epel/7/x86_64/Packages/s/snap-confine-2.55.3-1.el7.x86_64.rpm

在重新安裝 2.55 版本的時候發現 2.57 版本並沒有完全移除乾淨,如上圖描敘的 is already installed

要移除乾淨可以在使用 rpm 搭配以下 options 指令

  • -e 是 erase 的縮寫,就是解除安裝
  • — allmatches 是刪除跟此 package match 到的
  • — nodeps 不檢查此套件的 dependencies
  • — test 是不執行,但是會說此次的結果
rpm -e --allmatches --nodeps --test snap-confine-2.57.6-1.el7.x86_64

rpm -e --allmatches --nodeps --test snapd-selinux-2.57.6-1.el7.noarch

上圖發現是綠色的箭頭代表沒問題,於是正式移除並重新安裝 2.55 版本

# Remove snap-confine-2.57.6-1.el7.x86_64
rpm -e --allmatches --nodeps snap-confine-2.57.6-1.el7.x86_64

# Remove snapd-selinux-2.57.6-1.el7.noarch
rpm -e --allmatches --nodeps snapd-selinux-2.57.6-1.el7.noarch

# Install snap-confine-2.55.3-1.el7.x86_64.rpm
rpm -Uvh https://mirror.lt.ucsc.edu/epel/7/x86_64/Packages/s/snap-confine-2.55.3-1.el7.x86_64.rpm

# Install snapd-selinux-2.55.3-1.el7.noarch.rpm
rpm -Uvh https://mirror.lt.ucsc.edu/epel/7/x86_64/Packages/s/snapd-selinux-2.55.3-1.el7.noarch.rpm

# Install snapd-2.55.3-1.el7.x86_64.rpm
rpm -Uvh https://mirror.lt.ucsc.edu/epel/7/x86_64/Packages/s/snapd-2.55.3-1.el7.x86_64.rpm

重啟 Snap,並設定開機的時候自動啟動

# Enable snapd.socket when boot system
sudo systemctl enable --now snapd.socket

# Make symbolic links
sudo ln -s /var/lib/snapd/snap /snap

透過 snap 重新安裝 core

( 註:snap core is runtime environment for snapd )

sudo snap install core; sudo snap refresh core
Wait……

安裝完 core 之後再安裝 certbot

在使用 certbot 來 renew 憑證,達到我們這次要修復 SSL 憑證自動更新的問題

# Install certbot via snap
sudo snap install --classic certbot

# Make symbolic links
sudo ln -s /snap/bin/certbot /usr/bin/certbot

# Renew all certificates
cerbot renew

結束

延伸閱讀

Ref.

--

--