初探 snaps 以及透過 snaps 來安裝 certbot

Stephen Chen
5 min readNov 11, 2021

--

TL;DR 透過用 Snapd 來安裝 Certbot ,在用 Certbot 獲取憑證。

起因

最近剛好在處理有關憑證更新的問題,之前做法是透過 wget https://dl.eff.org/certbot-auto 來下載 certbot-auto,但突然發現目標網站 404,於是直接去主頁 https://dl.eff.org ,然後再被瀏覽器 redirect 到 certbot.eff.org 這網站,於是開始研究起新的安裝方法。

唯一較大的差異便是透過 Snaps 這專案來安裝 certbot-auto 。

Snaps

從開發者角度來看 snaps 其最主要的目的是讓 application ( 或稱 snaps ) 透過 snapd 來 CRUD 在多種 Linux distributions 上。snapd 就是背景程式會去管理 snaps

Snaps are app packages for desktop, cloud and IoT that are easy to install, secure, cross‐platform and dependency‐free. Snaps are discoverable and installable from the Snap Store, the app store for Linux with an audience of millions.

比如我要在 Centos8, Ubuntu、Arch Linux…etc 安裝 certbot,只需統一執行這行即可

sudo snap install certbot-nginx

Snap Store

像是 DockerhubGithub….etc。Snaps 也可以被 Snapcraft ( build and publish snaps) 發佈到一個平台 ( 稱 Snap Store ) ,提供給開發者使用。

概念

概念上,從 iOS 開發者角度 snaps 很像 pod library,Snapd 很像 cocoapods,而 php 開法者角度來看 snaps 很則像 packages,Snapd 像composer

環境

以下會在 Ubuntu 20.04 LTS 環境搭配 Nginx 實作,如需使用不同 Linux distributions 版本可到這邊去選擇 ( 這邊假設 DNS、Nginx 相關的 config 都正確設定無誤 )

如果不知道版本的話可以 run 以下三種其中一種

cat /etc/os-releaselsb_release -ahostnamectl

To Root Directory

cd ~

安裝 Snapd 或者更新至最新版的 napd

Snapd 會根據不同的 Linux Distributions 分成默認,非默認。此次的 case 剛好Ubuntu 20.04 LTS 默認就有(點這看不同版本的狀況

sudo snap install core
sudo snap refresh core

移除舊的 Certbot [ optional ]

如果是新的 server 就不用

sudo apt-get remove certbot   

透過 Snapd 安裝 Certbot

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

執行

以前的作法需要透過 -d 提供哪個域名需要被 ssl,現在是直接列出來給你選擇,比方說下面總共有 5 個域名,我只希望前面 4 個需要,那就輸入1,2,3,4

sudo certbot --nginx

測試自動更新

sudo certbot renew --dry-run

到瀏覽器上檢查一下

這樣就完成了

Reference

https://snapcraft.io/certbot

--

--