三生有幸,四季如春 | 言文

利用 Keybase 搭建自己的軟件源

2019.07.14

今天的理智又冇有了,沒錢氪石頭(不是 QwQ

想起之前自己服務器上的軟件源因爲沒錢維持足夠的硬盤空間 (保證沒有拿去氪石頭

所以停止維護了,正好最近看大家都在往白嫖的 Keybase 上遷移,就此寫了一篇博客

(順便蹭一波萌新求加 艾雨寒#2979

序章

Keybase 除了提供密鑰交換、身份認證和聊天服務之外還自帶了一個 250G 的網絡雲盤:kbfs,其分爲公開部分和私人部分,利用其公開文件服務,我們可以簡單的爲 Arch Linux 自建一個軟件源

第一章

1-1 準備活動

  • 註冊一個 Keybase 賬戶

  • 擁有自己的 GPG Keyring

  • 擁有自己的域名和解析

    • 請自行購買或使用免費域名服務

1-2 熟讀 Wiki

第二章

2-1 本地安裝客戶端並登陸

$ sudo pacman -S keybase-gui 

2-2 將軟件源複製到同步目錄

右上角 Show in File Explorer 可以用文件管理器打開同步目錄

一般爲 /run/user/<UID>/keybase/kbfs/public/<keybase_username>/,以下簡稱

並自行將創建的軟件源複製進去,即圖中命名爲 repo 的文件夾

2-3 生成 index.html 文件

儘管他自己有帶一個,但是不太好用,這裏借用 Edward-P 和 Bruceutut 寫的 Index Generator,該軟件目前還沒有打包,建議直接從 pip 進行安裝。

$ pip install --user index-generator

中執行

$ index-generator --human . 

可以看到每個目錄文件夾下都遞歸生成了 index.html 文件,可以在本地打開進行測試

文件同步完成後可以訪問 Keybase page 上的文件服務,網址爲:

https://<keybase_username>.keybase.pub

第三章

3-1 自定義域名

由於 Keybase 對其自己的直鏈做了很多訪問限制,比如所需要的軟件源數據庫的軟鏈接無法訪問等問題,這裏使用自己的域名進行解決,我這裏走的是 Cloudflare 的免費解析和 CDN

官方教程:Getting Started with Keybase Pages

DNS 解析中添加一個 CNAME 指向 kbp.keybaseapi.com。在設置 CNAME 時先不開啓 Dns and Http proxy (CDN),因爲 keybase 向 Letsencrypt 申請證書需要一些時間,等申請成功後再開

添加一個 TXT 填入 kbp=<kbfs_path>,這裏 _keybase_pages. 後面接的內如需與之前填入的 CNAME 相同

3-2 檢查解析

Arch Linux 的 bind-tools 包提供了 dig 命令,也可以用其他工具來請求

$ dig example.com CNAME
...
;; ANSWER SECTION:
example.com <number> IN CNAME kbp.keybaseapi.com.
...

$ dig _keybase_pages.example.com TXT
...
;; ANSWER SECTION:
_keybase_pages.example.com <number> IN TXT "kbp=/keybase/public/<keybase_username>/<your_site>"
...

第四章

4-1 滾包

在解析變更完成之後就可以訪問自己域名的 Keybase 文件服務了,在本地配置好 /etc/pacman.conf 即可使用,注意配置的名字要與之前生成的軟件源的數據庫名字相同,比如我源內的數據庫名爲 axionl.db.tar.gz

[axionl]
Server = https://repo.axionl.me/repo/$arch

4-2 小工具

我之前也自己寫了一個 add2repo 用於給自己的軟件源添加包、簽名和上傳同步的功能,但是那個目前還沒有針對 keybase 作改進,這裏看到 Edward-P 寫了兩個腳本用於添加和刪除包,有需要的話可以使用

我自己目前是手動添加包,沒有用到上面兩個腳本,所以利用 systemd.path 開了一個 file watch 來自動進行 index.html 文件生成

# $HOME/.config/systemd/user/repo-watch.path

[Path]
PathChanged=<kbfs_path>

[Install]
WantedBy=default.target
# $HOME/.config/systemd/user/repo-watch.service

[Unit]
User=<username>
Description=Watching path changed for repo
After=network-online.target

[Service]
Type=simple
WorkingDirectory=<kbfs_path>
ExecStart=$HOME/.local/bin/index-generator --human .

配置開機啓動並立即運行:

$ systemctl --user enable --now repo-watch.path

至此配置過程基本結束

comments powered by Disqus