Arch Linux Archive

From ArchWiki
Jump to navigation Jump to search

関連記事

Arch Linux Archive (略して ALA), 旧称 Arch Linux Rollback Machine (略して ARM) は公式リポジトリのスナップショットや昔の ISO イメージ、ブートストラップ tarball などを保存しています。

ALA を使うことで以下のことができます:

  • パッケージを昔のバージョンにダウングレード (最新版が壊れていて、1つ前のバージョンに戻したい場合)
  • ある特定の時間まで全てのパッケージをリストア (全てのパッケージが壊れていて、2ヶ月前まで戻したい場合)
  • 1つ前のバージョンの ISO イメージを取得

パッケージが保存される期間は数年間だけで、それ以降は archive.org の Arch Linux Historical Archive に移動されます。

場所

Arch Linux Archive は現在 https://archive.archlinux.org/ から利用可能です。

ソースコード を入手して自分で Arch Linux Archive をセットアップすることもできます。

ディレクトリ

Archive は以下のように3つのメインディレクトリに分かれています。

├── 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
ノート: 最後の3つの特殊なディレクトリ (last, week, month) はそれぞれ最後に同期したリポジトリ、最後の月曜日に同期したリポジトリ、月の初めに同期したリポジトリにリンクしています。

/packages

packages ディレクトリには全てのバージョンのパッケージと署名が含まれています。1つのパッケージに1つのディレクトリとなっており、パッケージのディレクトリは最初の一文字によってまとめられています。

├── 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
│   │   └── ...

完全なパッケージリストは次の URL からダウンロードできます (圧縮済みです): 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 イメージとブートストラップ tarball が収められており、リリース日によって分けられています。

├── 2014.09.03
├── 2014.10.01
├── 2014.11.01
├── 2014.12.01
├── 2015.07.01
├── 2015.08.01
├── 2015.09.01
└── 2017.04.01
    ├── arch
    ├── archlinux-2017.04.01-x86_64.iso
    ├── archlinux-2017.04.01-x86_64.iso.sig
    ├── archlinux-2017.04.01-x86_64.iso.torrent
    ├── archlinux-bootstrap-2017.04.01-x86_64.tar.gz
    ├── archlinux-bootstrap-2017.04.01-x86_64.tar.gz.sig
    ├── md5sums.txt
    └── sha1sums.txt

FAQ

パッケージをダウングレードする方法

/packages の中からダウングレードしたいパッケージを探して以下のようにインストールしてください:

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

pacman はパッケージに付属している .sig ファイルを自動的にダウンロードして /etc/pacman.conf の設定にしたがって検証を実行します。

もしくは、パッケージを手動でダウンロードして pacman -U でインストールする方法もあります。

ダウングレードを簡単にするツールについてはパッケージのダウングレード#公式パッケージを見てください。

特定の日時まで全てのパッケージをリストアする方法

特定の日時にあったパッケージにリストアするには、例えば2014年3月30日の場合、/etc/pacman.conf を編集して以下のようにサーバーを記述することで pacman にその時のパッケージをダウンロードさせます:

[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 を置き換えます:

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

そしてデータベースをアップデートして強制的にダウングレード:

# pacman -Syyuu
ノート: Archive と最新のミラーを混ぜるのは危険です。ダウンロードが失敗した場合に、上流のパッケージが拾われる可能性があり、システムの他の部分と epoch が合わないパッケージが入ることになってしまいます。

Historical Archive

Arch Linux Archive を維持するのに大量のリソースが消費されるため、古いパッケージは随時消去されます。

古いパッケージは削除される前に、archive.org の "Arch Linux Historical Archive" コレクションにアップロードされます。

Historical Archive には特定の日時における Arch パッケージの「スナップショット」を取得する機能がありません。ただし、archive.archlinux.org のリダイレクトによって古いパッケージをダウンロードしようとすると archive.org の Historical Archive にリダイレクトされるようになっています。ユーザーから見れば特に影響はありませんが、archive.org からのダウンロードは基本的に速度が遅くなります。

Historical Archive でパッケージを検索

Arch Linux Historical Archive コレクションには全てのパッケージのインデックスが存在します: https://archive.org/details/archlinuxarchive

識別子を使ってパッケージに直接アクセスすることも可能です。識別子の基本パターンは:

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__

パッケージの取得例:

$ wget https://archive.org/download/archlinux_pkg_cjdns/cjdns-16.1-3-x86_64.pkg.tar.xz{,.sig}
# pacman -U https://archive.org/download/archlinux_pkg_cjdns/cjdns-16.1-3-x86_64.pkg.tar.xz

pacman を使用する場合、依存関係を自分で解決する必要があります。

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*"

パッケージのダウンロードを Historical Archive にリダイレクト

古いパッケージのダウンロードを archive.org にリダイレクトする orion サーバーの Nginx 設定:

location ~ /repos/201[3456]/.*/.*\.pkg\.tar\.xz(\.sig)? {
        # Tricky regexp to separate the pkgname from the pkgver (both can contain "-")
        rewrite ^/repos/.*/((.*?)-[^-/]+-[0-9]+-[^-]+.*\.pkg\.tar\.xz(\.sig)?)$ /archive.org/archlinux_pkg_$2/$1 last;
}

# archive.org download URLs look like:
# https://archive.org/download/archlinux_pkg_lucene__/lucene++-1.4.2-3-i686.pkg.tar.xz
# We need to remove @.+ in the identifier (archlinux_pkg_*) but keep it in the filename at the end.
location /archive.org/ {
        # Rewrite @, + and . into _
        # This is recursive so it will work even for multiple replacement,
        # with up to 10 replacements for each character (nginx recursion limit). 
        # Idea from https://stackoverflow.com/a/15934256
        rewrite ^/archive\.org/([^@]*)@(.*)/(.*)$   /archive.org/$1_$2/$3;
        rewrite ^/archive\.org/([^\.]*)\.(.*)/(.*)$ /archive.org/$1_$2/$3;
        rewrite ^/archive\.org/([^\+]*)\+(.*)/(.*)$ /archive.org/$1_$2/$3;
        # Once there are no more @.+ in the identifier part, redirect to archive.org
        rewrite ^/archive\.org/([^@\+\.]*/.*)$ https://archive.org/download/$1 permanent;
}

歴史

  • オリジナルの ARM (Archlinux Rollback Machine) は2013年8月18日に幕を閉じました [1]
  • 新しい ARM は2013年8月31日から seblu.net でホストされています。
  • 2015年10月13日に、新しい URL が作られ昔の ARM ディレクトリは無くなりました。新しいソフトウェア、agetpkg-gitAUR が作られました。
  • 2015年12月19日に archive.archlinux.org に移動しました [2]
  • 2018年6月5日に2013年〜2016年の古いパッケージは archive.org にアップロードされました。