パッケージのダウングレード

提供: ArchWiki
2022年5月8日 (日) 18:39時点におけるAshMyzk (トーク | 投稿記録)による版 (警告を追加)
ナビゲーションに移動 検索に移動

関連記事

ここではパッケージを前のバージョンにダウングレードする方法を記述します。パッケージのダウングレードは普段は推奨されていませんが、最新パッケージにバグがあるときに必要になります。

ダウングレードする前に、なぜそうするのか考えて下さい。バグが理由ならば、Arch やそのプログラムの開発者にバグトラッカーでバグを報告するのに少し時間をさくことを考えていただけるでしょうか。Arch はローリングリリースなので、新しいパッケージにひそんだバグに出くわす可能性がいつでもあります。

私達やアップストリームの開発者は利用者からの報告にいつも感謝しています。ほんのすこしの情報でも、テストやデバッグに必要な時間を少なくし、ソフトウェアを安定させるのに役だっているのです。

警告:
  • 一つのパッケージをダウングレードするために、依存パッケージも一緒にダウングレードする必要がある場合があります。ダウングレードするべきパッケージの数が多い場合、スナップショットを使うことを検討してください。Arch Linux Archive#特定の日時まで全てのパッケージをリストアする方法 を参照してください。
  • 設定ファイルやスクリプトの変更には注意を払ってください。今の所、pacman は、セーフガードをバイパスしない限り、これらの変更を処理してくれます。
  • ダウングレードが soname の変更を伴う場合、すべての依存パッケージもダウングレード、または再ビルドする必要がある場合があります。

理由

ダウングレードするということは現在のパッケージをアンインストールして前のバージョンをインストールすることです。その前のバージョンというのが一つ前のバージョン(パッケージのバージョンは一つ前です)なのか、かなり前のバージョンなのかは分かりません。

ダウングレードする理由で(数ある中でも)挙げられるのは: 現在のバージョンにバグがある・期待どおりに働かない・実験的な理由で、などです。ほとんどの場合、新しいバージョンのリリースを待つより前のバージョンに戻したほうが問題が少ないと判断されます。

あるパッケージのダウングレードをすると、他のパッケージのダウングレードの必要が生じることもあります。実験的なパッケージを大量にインストールしたり、設定をいじくりまわした人にとっては、ダウングレードを試みるよりもシステムの再インストールをしたほうが好ましいかもしれません。

詳細

しかし、ユーザーは次のことを心に留めるべきです:

  • プログラムの依存性を考えて下さい。必要なライブラリのバージョンが変わるのがしょっちゅうで、挙動が以前と全く異なるようなとき、解決法は旧バージョンに変えることでしょう。
  • ファイルが削除された後ファイルが他のソースから入手できるかどうか考えて下さい。Arch Linux はローリングリリースであり、レポジトリは自動的にアップデートされ古いバージョンは保存されません。この問題については後に詳しく書きます。
  • 設定ファイルやスクリプトの変更に気をつけて下さい。今現在、pacman にはセーフガードがあり、それをバイパスしない限り、pacman がそれらを管理しています。

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

公式パッケージ

  • Q: pacman -Syu をしたら XYZ パッケージがバージョンMからバージョンNにアップグレードされました。私の環境ではこのパッケージは問題があります、どうやったらバージョン N からバージョン M へダウングレードできますか?
  • A: /var/cache/pacman/pkg ディレクトリの中にもし古いバージョンのパッケージが保存されていた場合、簡単にダウングレードすることができます。(つい最近に pacman -Scc をしたりしていない限り存在しているはずです)。pacman -U /var/cache/pacman/pkg/pkgname-olderpkgver.pkg.tar.gz で指定したバージョンのパッケージをインストールできます。

この方法では現在のパッケージを削除するので、慎重に依存性の変更を計算してください。そして依存性を破壊しないように古いバージョンをインストールします。

ノート: OS の基幹的な部分を変えるときは、文字通り数ダースものパッケージを古いバージョンに取り替える必要があるかもしれません。もしくはパッケージがどこかに行ってしまって、望ましくないパッケージバージョンに立ち返ってしまうことのないように特定のアップグレードには注意しながら、手動で一つずつ全部を戻すはめになるかもしれません。

また AURdowngradeAUR というパッケージもあります。シンプルな Bash スクリプトで、キャッシュから古いバージョンのパッケージを探してくれます。キャッシュにないときは Arch Linux Archive の検索も行います。あなたはインストールするパッケージを選ぶことができます。簡単に言えば、この記事に書かれていることを自動化してくれます。使用方法は downgrade --help をチェックして下さい。

より強力なツールに downgraderAUR[リンク切れ: パッケージが存在しません] があります。これは pacman のログとして働くだけでなく、ARM やローカルキャッシュからパッケージをダウングレードしたり、パッケージのリストを回覧するのに使えます。(パッケージのアップグレードのあと、パッケージの名前がわからないとき便利です)。

agetpkgAURArch Linux Archive からパッケージを素早く取得・インストールします。

カーネルのダウングレード

カーネルアップデートの後に起動できなくなった場合、ライブ CD を使ってカーネルをダウングレードできます。なるべく最新の Arch Linux のインストールメディアを使って下さい。インストールメディアをブートしたら、システムのパーティションを /mnt にマウントしてください。/boot/var パーティションを分割している場合は、それらもマウントしてください (例: mount /dev/sdc3 /mnt/boot)。それから chroot を使います:

# arch-chroot /mnt /bin/bash

それから /var/cache/pacman/pkg まで移動して、パッケージをダウングレードします。少なくとも linuxlinux-headers とカーネルモジュールをダウングレードしてください。例:

# pacman -U linux-3.5.6-1-x86_64.pkg.tar.xz linux-headers-3.5.6-1-x86_64.pkg.tar.xz virtualbox-host-modules-4.2.0-5-x86_64.pkg.tar.xz

chroot を終了 (exit) し、再起動すれば完了です。

AUR パッケージ

AUR4 から AUR のパッケージは git で管理されています。ローカルに複製してから古いバージョンをチェックアウトして、Arch User Repository#パッケージのインストールに書かれているようにしてインストールしてください。AUR3 以前のパッケージについては Arch User Repository#AUR3 パッケージの Git リポジトリを参照。

古いバージョンのパッケージを見つける

3つの方法があります。

未同期のミラーサーバ

パソコンの中に古いバージョンが見つからなかった場合、未同期のサーバーで見つけられるかもしれません。こちらで ミラーの状態 を見ることができます。

Arch Linux Archive

Arch Linux Archive公式リポジトリの毎日のスナップショットです。詳しくは Arch Linux Archive を参照してください。

パッケージの再コンパイル

最悪の場合、つまりパッケージがどこにも見つからない場合、古いバージョンを自分でコンパイルする必要があるかもしれません。これには PKGBUILD ファイルが必要です。ABS の PKGBUILD を古いリソースを使うように編集する、もしくは https://www.archlinux.jp/packages/ にアクセスしてダウングレードしたいパッケージをさがしてください。見つけたら、「変更履歴」をクリックして "log" を選択します。クリックして必要なバージョンの場所をつきとめて、ディレクトリにあるファイルをダウンロードして makepkg でビルドしてください。

Arch Build System#旧リビジョンのパッケージをチェックアウトも参照。

FAQ

依存関係のせいでパッケージをダウングレードできません

アップグレードや削除のとき 'd' を使って依存性を無視できます。例: pacman -Ud pkgpkgname-olderpkgver.pkg.tar.gz。システムを破壊する可能性もあるので気をつけて下さい。

ダウングレードしたパッケージを pacman がアップデートしないようにするのにはどうしたらいいですか?

pacman.confIgnorePkg セクションIgnorePkg = package1 package2 と書けば pacman -Syu した時も Pacman は指定されたパッケージのアップグレードを無視します。

システムを昨日の状態に戻したいのですが

LVM を使って定期的にスナップショットを作れば簡単です。