Arch Linux Archive

出自 Arch Linux 中文维基

Arch Linux 存檔庫(Arch Linux Archive簡稱 ala),以前稱為 Arch Linux 回滾機(Arch Linux Rollback Machine簡稱 ARM),保存了 官方倉庫快照iso 鏡像引導程序包 的歷史版本。

用途

  • 將某個包降級到某個早期版本(最新版本不能用,我需要之前的版本)
  • 將所有包恢復到某個指定的歷史時刻(所有包都不能用,我要恢復到兩個月之前的狀態)
  • 查找某個歷史版本的 ISO 鏡像

軟件包僅會保存幾年時間,之後會被移動到 archive.org 的 Arch Linux Historical Archive.

位置[編輯 | 編輯原始碼]

Arch Linux 存檔庫目前位於 https://archive.archlinux.org/全球鏡像.

這裡 的源代碼可以幫助您架設自己的存檔庫服務器。

目錄[編輯 | 編輯原始碼]

存檔庫分為下列三個主目錄:

├── iso
├── packages
└── repos

/repos[編輯 | 編輯原始碼]

repos 這個目錄包含官方倉庫鏡像的每日快照,按下例結構組織:

repos
├── 2013
│   ├── 08
│   │   └── 31
│   │       ├── community
│   │       ├── community-staging
│   │       ├── community-testing
│   │       ├── core
│   │       ├── extra
│   │       ├── gnome-unstable
│   │       ├── kde-unstable
│   │       ├── lastsync
│   │       ├── multilib
│   │       ├── multilib-staging
│   │       ├── multilib-testing
│   │       ├── pool
│   │       ├── staging
│   │       └── testing
│   ├── 09
│   │   ├── 01
│   │   ├── 02
│   │   ├── ...
│   │   ├── 21
│   │   └── 22
│   ├── 10
│   │   ├── 01
│   │   ├── 02
│   │   ├── ...
│   │
│   ├── 11
│   └── 12
├── 2014
│   ├── 01
│   │   ├── 01
│   │   ├── 02
│   │   ├── ...
│   │
│   ├── 02
│   ├── 03
│   ├── ...
│   └── 09
│       ├── 01
│       ├── ...
│       └── 28
├── last
├── month
└── week

注意: 最下面的三個特定目錄(lastweekmonth)分別鏈接到已同步的最新倉庫版本本周星期一版本本月一日版本

/packages[編輯 | 編輯原始碼]

packages 這個目錄包含每個包的所有版本及其相應的數字簽名。每個包一個目錄,按首字母排序。

├── packages
│   ├── a
│   │   ├── awesome
│   │   │   ├── awesome-3.5.0-1-i686.pkg.tar.xz
│   │   │   ├── awesome-3.5.0-1-i686.pkg.tar.xz.sig
│   │   │   ├── awesome-3.5.0-1-x86_64.pkg.tar.xz
│   │   │   ├── awesome-3.5.0-1-x86_64.pkg.tar.xz.sig
│   │   │   ├── awesome-3.5.1-1-i686.pkg.tar.xz
│   │   │   ├── awesome-3.5.1-1-i686.pkg.tar.xz.sig
│   │   │   ├── ...
│   │   │ 
│   │   ├── ...
│   │   ├── awstats
│   │   └── axel
│   │   
│   ├── b
│   ├── ...
│   └── z

你可以使用「魔法目錄」.all 按包名訪問所有包。這是一個沒有子目錄的結構。

├── packages
│   ├── .all
│   │   ├── awesome-3.5.1-1-i686.pkg.tar.xz
│   │   ├── ...
│   │   ├── zsh-5.0.2-3-i686.pkg.tar.xz
│   │   ├── zsh-5.0.2-4-i686.pkg.tar.xz
│   │   └── ...

可以下載一個壓縮的索引文件,包含完整的軟件包列表 index.0.xz.

$ curl https://archive.archlinux.org/packages/.all/index.0.xz | unxz
0ad-a14-1-i686
0ad-a14-1-x86_64
0ad-a14-2-i686
...
zziplib-0.13.62-1-x86_64
zziplib-0.13.62-2-i686
zziplib-0.13.62-2-x86_64

/iso[編輯 | 編輯原始碼]

iso 目錄按發布日期,保存官方 ISO 鏡像和啟動壓縮包。

├── 2014.09.03
├── 2014.10.01
├── 2014.11.01
├── 2014.12.01
├── 2015.07.01
├── 2015.08.01
├── 2015.09.01
└── 2015.10.01
    ├── arch
    ├── archlinux-2015.10.01-dual.iso
    ├── archlinux-2015.10.01-dual.iso.sig
    ├── archlinux-2015.10.01-dual.iso.torrent
    ├── archlinux-bootstrap-2015.10.01-i686.tar.gz
    ├── archlinux-bootstrap-2015.10.01-i686.tar.gz.sig
    ├── archlinux-bootstrap-2015.10.01-x86_64.tar.gz
    ├── archlinux-bootstrap-2015.10.01-x86_64.tar.gz.sig
    ├── md5sums.txt
    └── sha1sums.txt
提示:從 2022.10.01 開始 Arch Linux Archive 加入了 BT 種子(非磁力鏈). 所有種子文件可以從發布頁面 下載。

常見問題[編輯 | 編輯原始碼]

如何降級某個包[編輯 | 編輯原始碼]

/packages 中找到需要的軟件包,用 pacman 獲取並安裝:

# pacman -U https://archive.archlinux.org/packages/path/packagename.pkg.tar.xz

pacman 會自動下載 .sig 文件並根據 /etc/pacman.conf 設置進行校驗。

或者手動下載並通過 pacman -U 安裝.

軟件包降級#自動化 包含了可以簡化這個過程的工具。

如何恢復所有包到指定日期[編輯 | 編輯原始碼]

如果想恢復所有包到指定日期(比如2014年3月30日),你必須如下例所示編輯 /etc/pacman.conf,從而讓 pacman 保持在這個時間點並且直接使用指定的服務器:

/etc/pacman.conf
[core]
SigLevel = PackageRequired
Server=https://archive.archlinux.org/repos/2014/03/30/$repo/os/$arch

[extra]
SigLevel = PackageRequired
Server=https://archive.archlinux.org/repos/2014/03/30/$repo/os/$arch

[community]
SigLevel = PackageRequired
Server=https://archive.archlinux.org/repos/2014/03/30/$repo/os/$arch

或者如下例編輯 /etc/pacman.d/mirrorlist

/etc/pacman.d/mirrorlist
##                                                                              
## Arch Linux repository mirrorlist                                             
## Generated on 2042-01-01                                                      
##
Server=https://archive.archlinux.org/repos/2014/03/30/$repo/os/$arch

然後同步包數據庫以強制降級:

# pacman -Syyuu

如果抱 PGP 簽名錯誤,軟件包損壞(corrupted/invalid packages),請先嘗試更新 archlinux-keyringca-certificates. Alternatively, you can decide to temporarily disable signature checking altogether.

注意: 混用歸檔和更新鏡像很不安全。萬一降級失敗,可能使用的是上游軟件包,會出現軟件包的 epoch 和系統其它軟件不一致的現象。

歷史存檔[編輯 | 編輯原始碼]

維護 Arch Linux Archive 需要很多資源,所以需要定期刪除老軟件包。

刪除前軟件包會被上傳到 archive.org 上的 "Arch Linux Historical Archive".

此倉庫並沒有提供某個時間的快照,而是提供了 archive.archlinux.org 重定向,老軟件包會被重定向到 archive.org。除了下載速度慢,用戶側使用上差別不大。

從 Historical Archive 查找軟件包[編輯 | 編輯原始碼]

Arch Linux Historical Archive 包含所有軟件包的索引: https://archive.org/details/archlinuxarchive

可以通過 identifier 獲取軟件包,格式是 archlinux_pkg_sanitized_package_name.

要得到一個 規範化 的軟件包名,將軟件包名稱中的 @, +. 都替換為下劃線 _.

例如 lucene++ 的軟件包名稱是 archlinux_pkg_lucene__

通過如下頁面查找軟件包: https://archive.org/details/archlinux_pkg_lucene__.

通過 archive.org Python 客戶端查找:

$ ia search subject:"archlinux package" subject:'mysql'
{"identifier": "archlinux_pkg_ejabberd-mod_mysql"}
{"identifier": "archlinux_pkg_ejabberd-mod_mysql-svn"}
{"identifier": "archlinux_pkg_gambas3-gb-db-mysql"}
{"identifier": "archlinux_pkg_gambas3-gb-mysql"}
{"identifier": "archlinux_pkg_libgda-mysql"}

從 Historical Archive 下載軟件包[編輯 | 編輯原始碼]

所有軟件包的版本可以通過如下下載頁面獲取: https://archive.org/download/archlinux_pkg_lucene__.

要通過 pacman 下載安裝:

# pacman -U https://archive.org/download/archlinux_pkg_cjdns/cjdns-16.1-3-x86_64.pkg.tar.xz

pacman 的 RemoteFileSigLevel 選項控制校驗方式,注意依賴關係需要自己解決。

通過 archive.org Python 客戶端也能進行下載。

下載某個指定版本:

$ ia download archlinux_pkg_cjdns cjdns-16.1-3-x86_64.pkg.tar.xz{,.sig}

下載某個軟件包的所有 x86_64 版本:

$ ia download archlinux_pkg_cjdns --glob="*x86_64.pkg.tar.xz*"

歷史[編輯 | 編輯原始碼]