UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

332 lines (247 loc) 13 kB
Related articles * [Downgrading packages](/index.php/Downgrading_packages "Downgrading packages") The **Arch Linux Archive** (a.k.a **ALA**), formerly known as **Arch Linux Rollback Machine** (a.k.a **ARM**), stores *official repositories snapshots*, *iso images* and *bootstrap tarballs* across time. **You can use it to** * Downgrade to a previous version of one package (last version is broken, I want the previous one) * Restore all your packages at a precise moment (my system is broken, I want to go back 2 months ago) * Find a previous version of an ISO image Packages are only kept for a few years, afterwards they are moved to the [Arch Linux Historical Archive](#Historical_Archive) on archive.org. ## Contents * [1 Location](#Location) * [2 Directories](#Directories) * [2.1 /repos](#.2Frepos) * [2.2 /packages](#.2Fpackages) * [2.3 /iso](#.2Fiso) * [3 FAQ](#FAQ) * [3.1 How to downgrade one package](#How_to_downgrade_one_package) * [3.2 How to restore all packages to a specific date](#How_to_restore_all_packages_to_a_specific_date) * [4 Historical Archive](#Historical_Archive) * [4.1 Finding packages in the Historical Archive](#Finding_packages_in_the_Historical_Archive) * [4.2 Downloading packages from the Historical Archive](#Downloading_packages_from_the_Historical_Archive) * [4.3 Redirecting package downloads to the Historical Archive](#Redirecting_package_downloads_to_the_Historical_Archive) * [5 History](#History) ## Location The Arch Linux Archive is available at [https://archive.archlinux.org/](https://archive.archlinux.org/). The [source code](https://github.com/seblu/archivetools) is also available for setting up your own mirror. ## Directories The **Archive** is split into 3 main directories detailed below. ``` ├── iso ├── packages └── repos ``` ### /repos The [repos](https://archive.archlinux.org/repos) directory contains daily snapshots of official mirror organized by date like in the following example. ``` 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 ``` Note: The last 3 special directories (**last**, **week** and **month**) which links respectively to the last synced repository, to the last monday and to the first of the current month. ### /packages The [packages](https://archive.archlinux.org/packages) directory contains all versions of each package with their signatures. One directory by package and package directories are grouped by their first letter. ``` ├── 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 ``` You can use the magic subdirectory [.all](https://archive.archlinux.org/packages/.all) to access all packages by their name. It acts as a flat directory containing all versions of every package. ``` ├── 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 │   │ └── ... ``` You can download the full package list (there are over a hundred thousand packages) as a compressed index: [index.0.xz](https://archive.archlinux.org/packages/.all/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 The [iso](https://archive.archlinux.org/iso) directory contains official ISO images and bootstrap tarballs sorted by release date. ``` ├── 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 ### How to downgrade one package Find the package you want under [/packages](#.2Fpackages) and let pacman fetch it for installation. For example: ``` # pacman -U https://archive.archlinux.org/packages/ ... *packagename*.pkg.tar.xz ``` Letting pacman fetch it will automatically download the package's detached *.sig* file and verify it according to `/etc/pacman.conf` settings. Alternatively, download and install the package manually using `pacman -U`. See also [Downgrading packages#Automation](/index.php/Downgrading_packages#Automation "Downgrading packages") for tools that simplify the process. ### How to restore all packages to a specific date To restore all packages to their version at a specific date, let's say 30 March 2014, you have to direct [pacman](/index.php/Pacman "Pacman") to this date, by editing your `/etc/pacman.conf` and use the following server directive: ``` [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 ``` or by replacing your `/etc/pacman.d/mirrorlist` with the following content: ``` ## ## Arch Linux repository mirrorlist ## Generated on 2042-01-01 ## Server=https://archive.archlinux.org/repos/2014/03/30/$repo/os/$arch ``` Then update the database and force downgrade: ``` # pacman -Syyuu ``` **Note:** It's [not safe](/index.php/Partial_upgrades "Partial upgrades") to mix Archive and up-to-date mirrors. In case of a download failure, you will fall-back on an upstream package and you will have packages not from the same epoch in the rest of the system. ## Historical Archive Maintaining the Arch Linux Archive consumes significant amount of resources, so old packages are cleaned up from time to time. Before removing them, old packages are uploaded to a [dedicated collection "Arch Linux Historical Archive" on archive.org](https://archive.org/details/archlinuxarchive). The Historical Archive does not provide a way to access a "snapshot" of Arch packages at a given point in time. However, there is a redirection on `archive.archlinux.org` so that downloads for old packages are redirected to the Historical Archive on `archive.org`. There should be no visible impact from the user side, except from the fact that `archive.org` is generally quite slow for downloading. ### Finding packages in the Historical Archive The **Arch Linux Historical Archive** collection has an index of all packages: [https://archive.org/details/archlinuxarchive](https://archive.org/details/archlinuxarchive) It is also possible to directly access a package by its **identifier**. The general pattern for identifiers is: ``` archlinux_pkg_<sanitized package name> ``` To obtain the **sanitized** package name, simply replace any `@`, `+` or `.` character in the package name by an underscore `_`. For instance, the identifier for [lucene++](https://www.archlinux.org/packages/?name=lucene%2B%2B) is `archlinux_pkg_lucene__`. You can then access the details page of a package via its identifier, for instance: [https://archive.org/details/archlinux_pkg_lucene__](https://archive.org/details/archlinux_pkg_lucene__) It is also possible to run searches with the [archive.org Python client](https://github.com/jjjake/internetarchive): ``` $ 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"} ``` ### Downloading packages from the Historical Archive All available package versions (and their signature) can be accessed via the download page of a package: [https://archive.org/download/archlinux_pkg_lucene__](https://archive.org/download/archlinux_pkg_lucene__) Here are a few example ways to fetch a package: ``` $ 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 ``` Note that if you use pacman, you have to figure out the dependencies yourself. It is also possible to use the [archive.org Python client](https://github.com/jjjake/internetarchive): ``` # Download a specific version of a package $ ia download archlinux_pkg_cjdns cjdns-16.1-3-x86_64.pkg.tar.xz{,.sig} # Download all x86_64 versions of a package, with signatures $ ia download archlinux_pkg_cjdns --glob="*x86_64.pkg.tar.xz*" ``` ### Redirecting package downloads to the Historical Archive To redirect downloads for old packages to `archive.org`, here is the Nginx configuration on orion: ``` 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; } ``` ## History * The original ARM (*Archlinux Rollback Machine*) was closed on 2013-08-18.[[1]](https://bbs.archlinux.org/viewtopic.php?pid=1313360#p1313360) * The new one is hosted on [seblu.net](http://seblu.net) since 2013-08-31. * New URL and closing the old ARM hierarchy on 2015-10-13\. A new software, [agetpkg-git](https://aur.archlinux.org/packages/agetpkg-git/) was introduced. * Moved to [archive.archlinux.org](https://archive.archlinux.org) on 2015-12-19.[[2]](https://lists.archlinux.org/pipermail/arch-dev-public/2015-December/027635.html) * Old packages from 2013-2016 uploaded to [archive.org](https://archive.org/details/archlinuxarchive) on 2018-06-05.