「パッケージのダウングレード」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎詳細: 削除。冒頭の warning と内容が衝突。)
37行目: 37行目:
 
あるパッケージのダウングレードをすると、他のパッケージのダウングレードの必要が生じることもあります。実験的なパッケージを大量にインストールしたり、設定をいじくりまわした人にとっては、ダウングレードを試みるよりもシステムの再インストールをしたほうが好ましいかもしれません。
 
あるパッケージのダウングレードをすると、他のパッケージのダウングレードの必要が生じることもあります。実験的なパッケージを大量にインストールしたり、設定をいじくりまわした人にとっては、ダウングレードを試みるよりもシステムの再インストールをしたほうが好ましいかもしれません。
   
== パッケージをダウングレる方法 ==
+
== パッケージを以前のバジョンに戻 ==
   
=== 公式パケージ ===
+
=== pacman のキャシュを使う ===
   
  +
以前にパッケージをインストールしていて、該当する [[Pacman#パッケージキャッシュの削除|pacman のキャッシュ]]を削除していない場合、{{ic|/var/cache/pacman/pkg/}} から以前のバージョンをインストールしてください。
* Q: {{Ic|pacman -Syu}} をしたら ''XYZ'' パッケージがバージョンMからバージョンNにアップグレードされました。私の環境ではこのパッケージは問題があります、どうやったらバージョン N からバージョン M へダウングレードできますか?
 
* A: {{Ic|/var/cache/pacman/pkg}} ディレクトリの中にもし古いバージョンのパッケージが保存されていた場合、簡単にダウングレードすることができます。(つい最近に {{Ic|pacman -Scc}} をしたりしていない限り存在しているはずです)。{{Ic|pacman -U /var/cache/pacman/pkg/pkgname-olderpkgver.pkg.tar.gz}} で指定したバージョンのパッケージをインストールできます。
 
   
  +
この方法では、現在のパッケージを削除して古いバージョンをインストールします。依存関係の変更は処理されますが、[[pacman]] はバージョンの衝突を処理しません。ダウングレードしたいパッケージと一緒にライブラリや他のパッケージもダウングレードする必要がある場合、そのパッケージも手動でダウングレードしなければならないことに気をつけてください。
この方法では現在のパッケージを削除するので、慎重に依存性の変更を計算してください。そして依存性を破壊しないように古いバージョンをインストールします。
 
   
  +
# pacman -U file:///var/cache/pacman/pkg/''package''-''old_version''.pkg.tar.''type''
{{Note|OS の基幹的な部分を変えるときは、文字通り数ダースものパッケージを古いバージョンに取り替える必要があるかもしれません。もしくはパッケージがどこかに行ってしまって、望ましくないパッケージバージョンに立ち返ってしまうことのないように特定のアップグレードには注意しながら、手動で一つずつ全部を戻すはめになるかもしれません。}}
 
   
  +
''{{ic|type}}'' の部分は、古いパッケージビルドに対しては {{ic|xz}}、[https://www.archlinux.jp/news/now-using-zstandard-instead-of-xz-for-package-compression/ 2020 に行われた変更]に従っているパッケージに対しては {{ic|zst}} となることに注意してください。
また [[Arch User Repository|AUR]] に {{AUR|downgrade}} というパッケージもあります。シンプルな Bash スクリプトで、キャッシュから古いバージョンのパッケージを探してくれます。キャッシュにないときは [[#Arch Linux Archive|Arch Linux Archive]] の検索も行います。あなたはインストールするパッケージを選ぶことができます。簡単に言えば、この記事に書かれていることを自動化してくれます。使用方法は {{Ic|downgrade --help}} をチェックして下さい。
 
   
より強力なツールに {{AUR|downgrader}}{{Broken package link|パッケージが存在しません}} があります。これは pacman のログとして働くだけでなく、ARM やローカルキャッシュからパッケージをダウグレードした、パッケージのリストを回覧するのに使えます。(パッケージのアップグレードのあと、パッケージの名前がわからなとき便利です)
+
一度パッケージを古いバージに戻したアップデートされたパッケージの問題が解決されまで、そのパッケージを {{ic|pacman.conf}} [[Pacman#アップグレードさせないパッケージを設定|IgnorePkg セクション]]に一時的に追加してください。
 
{{AUR|agetpkg}} は [[Arch Linux Archive]] からパッケージを素早く取得・インストールします。
 
   
 
=== カーネルのダウングレード ===
 
=== カーネルのダウングレード ===
   
  +
新しいカーネルで問題が発生した場合、[[#pacman のキャッシュを使う|pacman のキャッシュを使って]] Linux のパッケージを最後に動作したバージョンにダウングレードできます。{{ic|/var/cache/pacman/pkg}} まで移動して、パッケージをダウングレードします。少なくとも {{Pkg|linux}} と {{Pkg|linux-headers}} とカーネルモジュールをダウングレードしてください。例:
カーネルアップデートの後に起動できなくなった場合、ライブ CD を使ってカーネルをダウングレードできます。なるべく最新の Arch Linux のインストールメディアを使って下さい。インストールメディアをブートしたら、システムのパーティションを {{ic|/mnt}} にマウントしてください。{{ic|/boot}} や {{ic|/var}} パーティションを分割している場合は、それらもマウントしてください (例: {{ic|mount /dev/sdc3 /mnt/boot}})。それから [[chroot]] を使います:
 
   
  +
# pacman -U file://linux-4.15.8-1-x86_64.pkg.tar.xz file://linux-headers-4.15.8-1-x86_64.pkg.tar.xz file://virtualbox-host-modules-arch-5.2.8-4-x86_64.pkg.tar.xz
# arch-chroot /mnt /bin/bash
 
   
  +
{{Tip|カーネルのアップデート後に起動できなくなった場合、システムに [[chroot]] することでカーネルをダウングレードできます。Arch Linux の [[USB インストールメディア]]を使って起動し、システムがインストールされているパーティションを {{ic|/mnt}} にマウントしてください。{{ic|/boot}} や {{ic|/var}} が別のパーティションにある場合、それらも {{ic|/mnt}} へマウントしてください(例: {{ic|mount /dev/sdc3 /mnt/boot}})。そして、システムに ''chroot'' します:
それから {{ic|/var/cache/pacman/pkg}} まで移動して、パッケージをダウングレードします。少なくとも {{Pkg|linux}} と {{Pkg|linux-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
 
   
  +
{{bc|# arch-chroot /mnt}}
chroot を終了 ({{ic|exit}}) し、再起動すれば完了です。
 
   
  +
これで、''pacman'' のキャッシュディレクトリに移動して、上記のコマンドを使用して Linux のパッケージをダウングレードできます。それが済んだら、({{ic|exit}} を実行して) chroot を終了して、再起動してください。}}
=== AUR パッケージ ===
 
   
  +
=== Arch Linux Archive ===
AUR4 から AUR のパッケージは git で管理されています。ローカルに複製してから古いバージョンをチェックアウトして、[[Arch User Repository#パッケージのインストール]]に書かれているようにしてインストールしてください。AUR3 以前のパッケージについては [[Arch User Repository#AUR3 パッケージの Git リポジトリ]]を参照。
 
   
  +
''Arch Linux Archive'' は[[公式リポジトリ]]の毎日のスナップショットです。[[Arch Linux Archive#パッケージをダウングレードする方法|以前のバージョンのパッケージをインストール]]したり、[[Arch Linux Archive#特定の日時まで全てのパッケージをリストアする方法|特定の日時までシステムを復元]]したりするのに使用できます。
== 古いバージョンのパッケージを見つける ==
 
3つの方法があります。
 
   
=== 未同期ミラーサーバ ===
+
=== パッケージ再ビルド ===
パソコンの中に古いバージョンが見つからなかった場合、未同期のサーバーで見つけられるかもしれません。こちらで [https://www.archlinux.jp/mirrors/status/ ミラーの状態] を見ることができます。
 
   
  +
ダウングレードしたいパッケージが利用できない場合、正しい [[PKGBUILD]] を見つけて [[makepkg]] を使って再ビルドしてください。
=== Arch Linux Archive ===
 
   
  +
[[公式リポジトリ]]にあるパッケージは、[[ABS]] を使って PKGBUILD を取得し、ソフトウェアのバージョンを編集してください。もしくは https://www.archlinux.jp/packages/ にアクセスしてダウングレードしたいパッケージをさがしてください。見つけたら、「変更履歴」をクリックして、必要なバージョンの場所をつきとめて、ディレクトリにあるファイルをダウンロードして makepkg でビルドしてください。
''Arch Linux Archive'' は[[公式リポジトリ]]の毎日のスナップショットです。詳しくは [[Arch Linux Archive]] を参照してください。
 
   
  +
[[Arch Build System#旧リビジョンのパッケージをチェックアウト]]も参照。
=== パッケージの再コンパイル ===
 
   
  +
古い AUR パッケージは、AUR パッケージの Git リポジトリにある古いコミットをチェックアウトすることでビルドできます。2015 年以前の AUR3 PKGBUILD に関しては [[Arch User Repository#AUR3 パッケージの Git リポジトリ]]を見てください。
最悪の場合、つまりパッケージがどこにも見つからない場合、古いバージョンを自分でコンパイルする必要があるかもしれません。これには PKGBUILD ファイルが必要です。ABS の PKGBUILD を古いリソースを使うように編集する、もしくは https://www.archlinux.jp/packages/ にアクセスしてダウングレードしたいパッケージをさがしてください。見つけたら、「変更履歴」をクリックして "log" を選択します。クリックして必要なバージョンの場所をつきとめて、ディレクトリにあるファイルをダウンロードして makepkg でビルドしてください。
 
   
  +
=== 自動化する ===
[[Arch Build System#旧リビジョンのパッケージをチェックアウト]]も参照。
 
  +
  +
* {{App|downgrader|libalpm を使って動作するツールで、pacman のログをサポートし、[[Arch Linux Archive]] やローカルのキャッシュ、[http://repo-arm.archlinuxcn.org ARM] を使用してパッケージをダウングレードします。|https://github.com/DimaSmirnov/Archlinux-downgrader|{{AUR|downgrader-git}}}}
  +
* {{App|downgrade|一つ(あるいは複数)のパッケージをダウングレードする Bash スクリプトです。pacman のキャッシュや [[Arch Rollback Machine]] を使用します。詳細は {{man|8|downgrade|url=}} を見てください。|https://github.com/pbrisbin/downgrade|{{AUR|downgrade}}}}
   
 
== FAQ ==
 
== FAQ ==

2022年5月8日 (日) 20:43時点における版

関連記事

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

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

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

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

理由

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

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

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

パッケージを以前のバージョンに戻す

pacman のキャッシュを使う

以前にパッケージをインストールしていて、該当する pacman のキャッシュを削除していない場合、/var/cache/pacman/pkg/ から以前のバージョンをインストールしてください。

この方法では、現在のパッケージを削除して古いバージョンをインストールします。依存関係の変更は処理されますが、pacman はバージョンの衝突を処理しません。ダウングレードしたいパッケージと一緒にライブラリや他のパッケージもダウングレードする必要がある場合、そのパッケージも手動でダウングレードしなければならないことに気をつけてください。

# pacman -U file:///var/cache/pacman/pkg/package-old_version.pkg.tar.type

type の部分は、古いパッケージビルドに対しては xz2020 に行われた変更に従っているパッケージに対しては zst となることに注意してください。

一度パッケージを古いバージョンに戻したら、アップデートされたパッケージの問題が解決されるまで、そのパッケージを pacman.confIgnorePkg セクションに一時的に追加してください。

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

新しいカーネルで問題が発生した場合、pacman のキャッシュを使って Linux のパッケージを最後に動作したバージョンにダウングレードできます。/var/cache/pacman/pkg まで移動して、パッケージをダウングレードします。少なくとも linuxlinux-headers とカーネルモジュールをダウングレードしてください。例:

# pacman -U file://linux-4.15.8-1-x86_64.pkg.tar.xz file://linux-headers-4.15.8-1-x86_64.pkg.tar.xz file://virtualbox-host-modules-arch-5.2.8-4-x86_64.pkg.tar.xz
ヒント: カーネルのアップデート後に起動できなくなった場合、システムに chroot することでカーネルをダウングレードできます。Arch Linux の USB インストールメディアを使って起動し、システムがインストールされているパーティションを /mnt にマウントしてください。/boot/var が別のパーティションにある場合、それらも /mnt へマウントしてください(例: mount /dev/sdc3 /mnt/boot)。そして、システムに chroot します:
# arch-chroot /mnt
これで、pacman のキャッシュディレクトリに移動して、上記のコマンドを使用して Linux のパッケージをダウングレードできます。それが済んだら、(exit を実行して) chroot を終了して、再起動してください。

Arch Linux Archive

Arch Linux Archive公式リポジトリの毎日のスナップショットです。以前のバージョンのパッケージをインストールしたり、特定の日時までシステムを復元したりするのに使用できます。

パッケージの再ビルド

ダウングレードしたいパッケージが利用できない場合、正しい PKGBUILD を見つけて makepkg を使って再ビルドしてください。

公式リポジトリにあるパッケージは、ABS を使って PKGBUILD を取得し、ソフトウェアのバージョンを編集してください。もしくは https://www.archlinux.jp/packages/ にアクセスしてダウングレードしたいパッケージをさがしてください。見つけたら、「変更履歴」をクリックして、必要なバージョンの場所をつきとめて、ディレクトリにあるファイルをダウンロードして makepkg でビルドしてください。

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

古い AUR パッケージは、AUR パッケージの Git リポジトリにある古いコミットをチェックアウトすることでビルドできます。2015 年以前の AUR3 PKGBUILD に関しては Arch User Repository#AUR3 パッケージの Git リポジトリを見てください。

自動化する

  • downgrader — libalpm を使って動作するツールで、pacman のログをサポートし、Arch Linux Archive やローカルのキャッシュ、ARM を使用してパッケージをダウングレードします。
https://github.com/DimaSmirnov/Archlinux-downgrader || downgrader-gitAUR
  • downgrade — 一つ(あるいは複数)のパッケージをダウングレードする Bash スクリプトです。pacman のキャッシュや Arch Rollback Machine を使用します。詳細は downgrade(8) を見てください。
https://github.com/pbrisbin/downgrade || downgradeAUR

FAQ

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

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

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

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

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

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