ubuntu的apt與gpg

最近因為在 Ubuntu 更新的時候,老是出現 gpg pub key 錯誤,有問題的套件庫是 hashicorp 跟 yarn 的套件庫,今天終於下定決心處理。

第一個找到的是這篇:How to configure HashiCorp repository

處理方法是這樣的,先下載 gpg key,然後用 sudo gpg 匯入

wget --quiet --output-document - https://apt.releases.hashicorp.com/gpg | \
  sudo gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/hashicorp-archive-keyring.gpg --import

然後檢查 /usr/share/keyrings/hashicorp-archive-keyring.gpg

ls -l /usr/share/keyrings/hashicorp-archive-keyring.gpg

permission 結果應該要是 644 。

接著檢查 source list 檔案,裏面會有 signed-by 的字串

deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com jammy main

基本上這樣就解決了,yarn 的處理方式也一樣。

wget --quiet --output-document - https://dl.yarnpkg.com/debian/pubkey.gpg | sudo gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/yarnkey.gpg --import

只是這邊做完,還是有問題,後來才靈機一動想到要檢查 /usr/share/keyrings/yarnkey.gpg 的 permission,發現是 600,用 chmod 改為 644 以後,apt update 就沒問題了。

apt 使用 mirror

看到這篇文章:How to select the fastest apt mirror on Ubuntu Linux ,sources.list 裡可以改用 mirror://mirrors.ubuntu.com/mirrors.txt 這樣的 URL,apt 就會自動使用 mirror ,不過 apt 不一定會選到最快的 mirror。

在選最快的 mirror 時,可以用 netselect ,但 debian 才有包 netselect 。文章的留言有人提到一個組合命令可以用來取代 netselect ,我試了之後,發現不能用,稍稍做了調整 (改 sed 以及改用 awk 取 ping 結果):

for mirror in $(wget -qO - mirrors.ubuntu.com/mirrors.txt|sed 's/^http:\/\///;s/\/.*$//') ; do echo $(ping -c 1 $mirror|awk 'BEGIN {FS="[=]|[ ]"} NR==2 {print $11}') $mirror ; done|sort -n|grep "^[0-9]"|head -n 20

執行以後的結果:

2.49 mirror01.idc.hinet.net
3.47 debian.linux.org.tw
3.61 ubuntu.cs.nctu.edu.tw
5.45 ftp.tku.edu.tw
13.5 ftp.ntou.edu.tw
33.3 ubuntu.stu.edu.tw
40.8 ftp.ubuntu-tw.net
91.8 mirror.ncunwlab.tk
96.6 ftp.yzu.edu.tw
284 archive.ubuntu.com

看起來是中華電信最快,這時候再用 sed 去替換 sources.list 的來源即可。

sed 's/mirror:\/\/mirrors\.ubuntu\.com\/mirrors\.txt/http:\/\/mirror01\.idc\.hinet\.net\/ubuntu/' /etc/apt/sources.list | sudo tee /etc/apt/sources.list