Posted by 每特17劃 on 2023-06-01

Arch Linux 的 git migration 更新概要

Arch Linux 於 2023/05 下旬,將套件儲存庫從舊的 SVN 移轉到新的 GitLab 系統上。官方公告如下:

更新

Arch Linux - News: Git migration completed 的 “For users” 的指引進行:

Imgur

過程心得如下:

  • 不一定會有 /etc/pacman.conf.pacnew ,如果沒有修改過該設定檔,而一直是使用原始預設值。那 pacman 升級時,會自動更新 /etc/pacman.conf 而不會留下 .pacnew 的檔案
  • /etc/pacman.conf 裏原本的 [community] 改爲 [extra]
  • asppkgctl 取代,這是比較大的變動。

關於 pkgctl

Arch Linux 的套件有兩大來源:

  • 其一是由官方維護,目前位於 Packages · GitLab
  • 另一是由社羣自主維護,即 AUR (Arch User Repository)

pkgctl 主要是用於官方維護的套件庫,非 AUR,AUR 的套件仍然是照自己的方式。不過,若有需要自行 patch 官方維護下的套件時,pkgctl 仍是個方便的工具。可預先安裝設定如下:

安裝

pkgctl 的指令是在 devtools 套件下, 安裝如下:

sudo pacman -S extra/devtools

遇到問題

首次執行 sample 指令:

pkgctl repo clone linux

遇到問題如下:

==> Cloning linux ...
Cloning into 'linux'...
The authenticity of host 'gitlab.archlinux.org (2a01:4f8:222:174c::1)' can't be established.
ED25519 key fingerprint is SHA256:pUuc8tXTcCz4yk3Cl3Ijxpyog6tWmfm3ehXV1KFHHOw.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'gitlab.archlinux.org' (ED25519) to the list of known hosts.
git@gitlab.archlinux.org: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
==> ERROR: failed to clone linux

主要原因是 gitlab.archlinux.org 有存取控制,需要先註冊帳號。

另一個跳過問題的方法爲:

pkgctl repo clone --protocol https linux

註冊及設定

需要先備有:

  • 2FA App
  • SSH public key

gitlab.archlinux.org 有設 SSO 機制,登入流程中會重導到 “Arch Linux SSO”。 Arch Linux SSO 系統是用 Keycloak 架的。 依頁面上的連接進行註冊跟登入。也支援用 GitHub 帳號直接登入。

註: SSO 爲 Single sign-on - Wikipedia

建帳號過程中會設定到 2FA,因此需要先備有 2FA App, ex: Aegis, FreeOTP, Google Authenticator,…。

生成帳號後,需先到 “Preferences » SSH Keys” 加進慣用的 SSH public key。 一般 Linux 系統預設是在 $HOME/.ssh/id_rsa.pub 。 若是有多組 public keys,則可參考 DeveloperWiki:How to be a packager - ArchWiki~/.ssh/config 的設定方式。

完成

上述都設定好後,再次執行

pkgctl repo clone linux

就能順利取得結果如下:

==> Cloning linux ...
Cloning into 'linux'...
remote: Enumerating objects: 5671, done.
remote: Counting objects: 100% (35/35), done.
remote: Compressing objects: 100% (23/23), done.
remote: Total 5671 (delta 12), reused 30 (delta 11), pack-reused 5636
Receiving objects: 100% (5671/5671), 1.32 MiB | 335.00 KiB/s, done.
Resolving deltas: 100% (2809/2809), done.
==> Collecting packager identity from makepkg.conf
  -> name    : undefined
  -> email   : undefined
  -> gpg-key : undefined
  -> protocol: https
==> Configuring linux

完成。

2023-06-08

感謝 Arch Linux 社羣的 Sean Ho 及 Noyjk 的問題跟指教。

後來發現 pkgctl repo clone 有支援 --protocol https命令選項。加此選項就不用註冊跟登入 gitlab.archlinux.org 。例如:

pkgctl repo clone --protocol https linux