Certbot 更新失效的解決過程
TL;DR 紀錄在 CentOS 7 下解決憑證自動更新失效的過程
7 min readJan 24, 2023
起因是透過監控網站( 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
安裝完 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
結束