Thursday, February 11, 2021

Fossil SCM on Ubuntu

Fossil SCM 是一套完整的軟體組態管理系統 (Software Configuration Management), 以 ANSI C 編寫, 其中利用 TCL 作為 Scripting 語言. 接下來將要說明如何在 Ubuntu 20.04 中安裝與配置 Fossil SCM.

這裡所要介紹的 Fossil SCMhttp://fossil.kmol.info (只配置 IPv6 網路協定), http 網際伺服器前端採用 nginx, https 代理伺服器採用 stunnel, 主要伺服的 Software Configuration Management 套件則為 Fossil SCM.

安裝 nginx

在 Ubuntu 20.04 中安裝 nginx 非常簡單, 只要執行 sudo apt install nginx 即可.

nginx 的基本設定檔案位於 /etc/nginx/sites-available/default

安裝 nginx 有兩個目的, 一方面回應 http://fossil.kmol.info, 也就是 port 80 的 WWW 伺服器. 而另外一方面則是配合 https://certbot.eff.org/lets-encrypt/ubuntufocal-nginx 以手動模式取得 stunnel https 伺服所需要的 fullchain.pem 與 privkey.prm 等兩個檔案.

安裝 Fossil SCM

在 Ubuntu 20.04 安裝 Fossil SCM 也非常簡單, 只要執行 sudo apt install fossil 即可. 但是所安裝的版本可能不是最新版, 由於安裝的 fossil 執行檔案位於 /usr/bin/fossil, 假如希望與 Windows 10 64 位元操作系統中的 Fossil SCM 對應, 可以至 https://fossil-scm.org/home/uv/download.html 下載 Linux 最新版本的 fossil, 然後以 sudo cp fossil /urs/bin/ 即可. 若要查驗 Fossil SCM 的版本, 可以使用 fossil version 指令.

Fossil SCM 整個系統就只有一個 fossil 執行檔案, 而倉儲檔案則只全部壓縮在一個 SQLite 資料庫檔案中.

接下來為了配置一套可以伺服多個 Fossil SCM 倉儲的 Ubuntu 20.04 系統, 在 /home/user/ 目錄下建立 repository 目錄, 之後的所有要從遠端擷取的 Fossil SCM 倉儲都可以放在此一用戶目錄下. 至於要在此目錄下建立一個內定的 Fossil SCM 倉儲, 可以進入 /home/user/repository 目錄後 (這裡的 user 為 Ubuntu 20.04 下的用戶帳號名稱), 以 fossil init cd2021.fossil 建立一個 Fossil SCM 倉儲, 執行完後系統就會直接在命令列中顯示用來管理此一倉儲的用戶 (會使用建立倉儲的帳號, 也就是 user) 登入管理的密碼.

使用者可以選擇將此一與 user 對應的管理密碼記起來, 或者之後再使用 sqlite3 指令進入 cd2021.fossil 查詢.

假如使用者需要在 Ubuntu 環境中直接對 Fossil SCM 倉儲改版, 則建議在 /home/user/repository 目錄中再建立一個 wd 目錄 (為 working directory 的縮寫), 之後可以將位於 /home/user/repository 目錄中的各個 .fossil 內容, 在 /home/user/repository/wd 目錄中展開, 若以 /home/user/repository/cd2021.fossil 為例, 展開後將位於 /home/user/repository/wd/cd2021.

安裝 stunnel

安裝 stunnel 也很簡單, 只要執行 sudo apt install stunnel4 即可, 安裝後若要隨系統開機啟動, 則需要 sudo vi /etc/default/stunnel4, 並在檔案中加入 ENABLED=1 後存檔.

另外, 還需要 sudo vi /etc/environment, 並在檔案中加入 HTTPS=on 後存檔.

接下來為了由 stunnel 代理 Fossil SCM 的 https 伺服, 必須加入 /etc/stunnel/stunnel.conf

[https]
accept = 140.130.your_ipv4.ip:443
accept = 2001:288:6004:your:ipv6::ip:443
cert = /etc/stunnel/fullchain.pem
key = /etc/stunnel/privkey.pem
exec = /usr/bin/fossil
execargs = /usr/bin/fossil http /home/user/repository/ --https --nojail --notfound cd2021

上述的 fullchain.pem 與 privkey.pem 由於尚未配置 certbot, 必須要取得合法的數位簽章檔案後, 再利用:

sudo systemctl start stunnel4.service

啟動 stunnel.

sudo systemctl stop stunnel4.service

關閉 stunnel, 或利用:

sudo systemctl restart stunnel4.service

重新啟動 stunnel.

擷取 fullchain.pem 與 privkey.pem

這個步驟主要按照 https://certbot.eff.org/lets-encrypt/ubuntufocal-nginx 中的指令操作, 由於 Ubuntu 20.04 已經內建 snap, 因此只要執行:

sudo snap install core; sudo snap refresh core

sudo snap install --classic certbot

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

sudo certbot certonly --nginx

就可以在 /etc/letsencrypt/live/fossil.kmol.info/ 目錄中找到 fullchain.pem 與 privkey.pem 等兩個數位簽章檔案, 接著將此兩個檔案複製至 /etc/stunnel/ 目錄, 以便配合 /etc/stunnel/stunnel.conf 隨電腦開機啟動.

因為 certbot 的數位簽章每 90 天都要更新一次, 屆時若要手動更新可以先模擬執行:

sudo certbot renew --dry-run

nginx http 跳轉 https

最後一個步驟是讓 nginx 所伺服的 http://fossil.kmol.info 能夠自動跳轉到 Fossil SCMstunnel 結合的 https://fossil.kmol.info

修改 /etc/nginx/sites-available/default 中的設定如下:

server {
listen 80;
server_name fossil.kmol.info;
rewrite ^/(.*)$ https://fossil.kmol.info/$1 permanent;
}

No comments:

Post a Comment