「パッケージのダウングレード」の版間の差分
Kusakata.bot (トーク | 投稿記録) 細 (文字列「www.archlinuxjp.org」を「www.archlinux.jp」に置換) |
(同期 & TranslationStatus) |
||
(3人の利用者による、間の11版が非表示) | |||
1行目: | 1行目: | ||
[[Category:パッケージ管理]] |
[[Category:パッケージ管理]] |
||
− | [[cs:Downgrading packages]] |
||
[[de:Ältere Paketversion installieren (Downgrade)]] |
[[de:Ältere Paketversion installieren (Downgrade)]] |
||
− | [[es:Downgrading packages]] |
||
[[en:Downgrading packages]] |
[[en:Downgrading packages]] |
||
+ | [[es:Downgrading packages]] |
||
[[fa:دانگرید]] |
[[fa:دانگرید]] |
||
− | [[fr: |
+ | [[fr:Downgrading packages]] |
− | [[ |
+ | [[pt:Downgrading packages]] |
− | [[ru:Downgrading packages]] |
||
− | [[sk:Downgrading packages]] |
||
− | [[tr:Paket sürümünü düşürmek]] |
||
− | [[uk:Downgrading packages]] |
||
[[zh-hans:Downgrading packages]] |
[[zh-hans:Downgrading packages]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
18行目: | 13行目: | ||
{{Related|Arch Linux Archive}} |
{{Related|Arch Linux Archive}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
+ | パッケージをダウングレードする前に、なぜそうするのか考えて下さい。バグが理由ならば、[https://bugs.archlinux.org/ バグトラッカー]で既存のタスクを探してください。そこに無いのであれば、新しいタスクを追加してください。バグを修正するか、少なくとも、起こりうる問題を他のユーザに警告すると良いでしょう。 |
||
+ | {{Warning| |
||
− | ここではパッケージを前のバージョンにダウングレードする方法を記述します。パッケージのダウングレードは普段は推奨されていませんが、最新パッケージにバグがあるときに必要になります。 |
||
+ | * 場合によっては、一つのパッケージをダウングレードするために、依存パッケージも一緒にダウングレードする必要があります。ダウングレードするべきパッケージの数が多い場合、スナップショットを使うことを検討してください。[[Arch Linux Archive#特定の日時まで全てのパッケージをリストアする方法]] を参照してください。 |
||
+ | * 設定ファイルやスクリプトの変更には注意を払ってください。今の所、pacman は、セーフガードをバイパスしない限り、これらの変更を処理してくれます。 |
||
+ | * ダウングレードが soname の変更を伴う場合、場合によっては、すべての依存パッケージもダウングレード、または[[FAQ#もし、システム全体のアップグレード(pacman -Syu)で共用ライブラリがアップデートされたのにそれに依存するアプリケーションがアップデートされなかったらどうなりますか?|再ビルド]]する必要があります。 |
||
+ | }} |
||
+ | == パッケージを以前のバージョンに戻す == |
||
− | ダウングレードする前に、なぜそうするのか考えて下さい。バグが理由ならば、Arch やそのプログラムの開発者にバグトラッカーでバグを報告するのに少し時間をさくことを考えていただけるでしょうか。Arch はローリングリリースなので、新しいパッケージにひそんだバグに出くわす可能性がいつでもあります。 |
||
+ | === pacman のキャッシュを使う === |
||
− | 私達やアップストリームの開発者は利用者からの報告にいつも感謝しています。ほんのすこしの情報でも、テストやデバッグに必要な時間を少なくし、ソフトウェアを安定させるのに役だっているのです。 |
||
+ | 以前にパッケージをインストールしていて、該当する [[Pacman#パッケージキャッシュの削除|pacman のキャッシュ]]を削除していない場合、{{ic|/var/cache/pacman/pkg/}} から以前のバージョンをインストールしてください。 |
||
− | == 理由 == |
||
− | ダウングレードするということは現在のパッケージをアンインストールして前のバージョンをインストールすることです。その前のバージョンというのが一つ前のバージョン(パッケージのバージョンは一つ前です)なのか、かなり前のバージョンなのかは分かりません。 |
||
+ | この方法では、現在のパッケージを削除して古いバージョンをインストールします。依存関係の変更は処理されますが、[[pacman]] はバージョンの衝突を処理しません。ダウングレードしたいパッケージと一緒にライブラリや他のパッケージもダウングレードする必要がある場合、そのパッケージも手動でダウングレードしなければならないことに気をつけてください。 |
||
− | ダウングレードする理由で(数ある中でも)挙げられるのは: 現在のバージョンにバグがある・期待どおりに働かない・実験的な理由で、などです。ほとんどの場合、新しいバージョンのリリースを待つより前のバージョンに戻したほうが問題が少ないと判断されます。 |
||
+ | # pacman -U file:///var/cache/pacman/pkg/''package''-''old_version''.pkg.tar.''type'' |
||
− | あるパッケージのダウングレードをすると、他のパッケージのダウングレードの必要が生じることもあります。実験的なパッケージを大量にインストールしたり、設定をいじくりまわした人にとっては、ダウングレードを試みるよりもシステムの再インストールをしたほうが好ましいかもしれません。 |
||
+ | ''{{ic|type}}'' の部分は、古いパッケージビルドに対しては {{ic|xz}}、[https://www.archlinux.jp/news/now-using-zstandard-instead-of-xz-for-package-compression/ 2020 に行われた変更]に従っているパッケージに対しては {{ic|zst}} となることに注意してください。 |
||
− | == 詳細 == |
||
− | しかし、ユーザーは次のことを心に留めるべきです: |
||
− | * プログラムの依存性を考えて下さい。必要なライブラリのバージョンが変わるのがしょっちゅうで、挙動が以前と全く異なるようなとき、解決法は旧バージョンに変えることでしょう。 |
||
− | * ファイルが削除された後ファイルが他のソースから入手できるかどうか考えて下さい。Arch Linux はローリングリリースであり、レポジトリは自動的にアップデートされ古いバージョンは保存されません。この問題については後に詳しく書きます。 |
||
− | * 設定ファイルやスクリプトの変更に気をつけて下さい。今現在、pacman にはセーフガードがあり、それをバイパスしない限り、pacman がそれらを管理しています。 |
||
+ | 一度パッケージを古いバージョンに戻したら、アップデートされたパッケージの問題が解決されるまで、そのパッケージを {{ic|pacman.conf}} の [[Pacman#アップグレードさせないパッケージを設定|IgnorePkg セクション]]に一時的に追加してください。 |
||
− | == パッケージをダウングレードする方法 == |
||
− | |||
− | === 公式パッケージ === |
||
− | |||
− | * 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}} で指定したバージョンのパッケージをインストールできます。 |
||
− | |||
− | この方法では現在のパッケージを削除するので、慎重に依存性の変更を計算してください。そして依存性を破壊しないように古いバージョンをインストールします。 |
||
− | |||
− | {{Note|OS の基幹的な部分を変えるときは、文字通り数ダースものパッケージを古いバージョンに取り替える必要があるかもしれません。もしくはパッケージがどこかに行ってしまって、望ましくないパッケージバージョンに立ち返ってしまうことのないように特定のアップグレードには注意しながら、手動で一つずつ全部を戻すはめになるかもしれません。}} |
||
− | |||
− | また [[Arch User Repository|AUR]] に {{AUR|downgrade}} というパッケージもあります。シンプルな Bash スクリプトで、キャッシュから古いバージョンのパッケージを探してくれます。キャッシュにないときは [[#Arch Linux Archive|Arch Linux Archive]] の検索も行います。あなたはインストールするパッケージを選ぶことができます。簡単に言えば、この記事に書かれていることを自動化してくれます。使用方法は {{Ic|downgrade --help}} をチェックして下さい。 |
||
− | |||
− | より強力なツールに {{AUR|downgrader}} があります。これは pacman のログとして働くだけでなく、ARM やローカルキャッシュからパッケージをダウングレードしたり、パッケージのリストを回覧するのに使えます。(パッケージのアップグレードのあと、パッケージの名前がわからないとき便利です)。 |
||
− | |||
− | {{AUR|agetpkg-git}} は [[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]] を使います: |
||
− | |||
− | # arch-chroot /mnt /bin/bash |
||
− | |||
− | それから {{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 |
||
− | |||
− | chroot を終了 ({{ic|exit}}) し、再起動すれば完了です。 |
||
− | |||
− | === AUR パッケージ === |
||
− | |||
− | AUR のパッケージは、http://pkgbuild.com/git/aur-mirror.git/ にある古い PKGBUILD を取得するか、[[非公式ユーザーリポジトリ]]でコンパイル済みのバイナリ(ときどき古いものが残っています)を探すのが唯一の方法です。AUR-mirror を使いたい場合は、以下の手順に従って下さい: |
||
− | |||
− | # http://pkgbuild.com/git/aur-mirror.git/log/PACKAGENAME に行く。 |
||
− | # 特定の commit もしくは日付をクリック。 |
||
− | # その commit の AUR スナップショット (aur-mirror-COMMIT.tar.xz) をダウンロード (~100MB)。 |
||
− | # 次のコマンドでスナップショットを展開する: |
||
− | |||
− | tar xvJf aur-mirror-COMMIT.tar.xz |
||
− | |||
− | 最後に、パッケージフォルダを開いて [[Arch User Repository#パッケージのインストール]] に書かれているようにしてインストール。 |
||
+ | # 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 |
||
− | == 古いバージョンのパッケージを見つける == |
||
− | 3つの方法があります。 |
||
+ | {{Tip|カーネルのアップデート後に起動できなくなった場合、システムに [[chroot]] することでカーネルをダウングレードできます。Arch Linux の [[USB インストールメディア]]を使って起動し、システムがインストールされているパーティションを {{ic|/mnt}} にマウントしてください。{{ic|/boot}} や {{ic|/var}} が別のパーティションにある場合、それらも {{ic|/mnt}} へマウントしてください(例: {{ic|mount /dev/sdc3 /mnt/boot}})。そして、システムに ''chroot'' します: {{bc|# arch-chroot /mnt}} |
||
− | === 未同期のミラーサーバ === |
||
+ | これで、''pacman'' のキャッシュディレクトリに移動して、上記のコマンドを使用して Linux のパッケージをダウングレードできます。それが済んだら、({{ic|exit}} を実行して) chroot を終了して、再起動してください。}} |
||
− | パソコンの中に古いバージョンが見つからなかった場合、未同期のサーバーで見つけられるかもしれません。こちらで [https://www.archlinux.jp/mirrors/status/ ミラーの状態] を見ることができます。 |
||
=== Arch Linux Archive === |
=== Arch Linux Archive === |
||
− | ''Arch Linux Archive'' は[[公式リポジトリ]]の毎日のスナップショットです。 |
+ | ''Arch Linux Archive'' は[[公式リポジトリ]]の毎日のスナップショットです。[[Arch Linux Archive#パッケージをダウングレードする方法|以前のバージョンのパッケージをインストール]]したり、[[Arch Linux Archive#特定の日時まで全てのパッケージをリストアする方法|特定の日時までシステムを復元]]したりするのに使用できます。 |
− | === パッケージの再 |
+ | === パッケージの再ビルド === |
+ | ダウングレードしたいパッケージが利用できない場合、正しい [[PKGBUILD]] を見つけて [[makepkg]] を使って再ビルドしてください。 |
||
− | 最悪の場合、つまりパッケージがどこにも見つからない場合、古いバージョンを自分でコンパイルする必要があるかもしれません。これには PKGBUILD ファイルが必要です。ABS の PKGBUILD を古いリソースを使うように編集する、もしくは https://www.archlinux.jp/packages/ にアクセスしてダウングレードしたいパッケージをさがしてください。見つけたら、「変更履歴」をクリックして "log" を選択します。クリックして必要なバージョンの場所をつきとめて、ディレクトリにあるファイルをダウンロードして makepkg でビルドしてください。 |
||
+ | [[公式リポジトリ]]にあるパッケージは、[[ABS]] を使って PKGBUILD を取得し、ソフトウェアのバージョンを編集してください。もしくは [https://archlinux.org/packages Packages] のウェブサイトにアクセスしてダウングレードしたいパッケージをさがしてください。見つけたら、「変更履歴」をクリックして、必要なバージョンの場所をつきとめて、ディレクトリにあるファイルをダウンロードして makepkg でビルドしてください。 |
||
− | [[SVN から PKGBUILD を取得#旧リビジョンのパッケージをチェックアウト]]も参照。 |
||
+ | [[Arch Build System#旧リビジョンのパッケージをチェックアウト]]も参照。 |
||
− | == FAQ == |
||
+ | 古い AUR パッケージは、AUR パッケージの Git リポジトリにある古いコミットをチェックアウトすることでビルドできます。2015 年以前の AUR3 PKGBUILD に関しては [[Arch User Repository#AUR3 パッケージの Git リポジトリ]]を見てください。 |
||
− | === 依存関係のせいでパッケージをダウングレードできません === |
||
+ | === 自動化する === |
||
− | アップグレードや削除のとき 'd' を使って依存性を無視できます。例: {{ic|pacman -Ud pkgpkgname-olderpkgver.pkg.tar.gz}}。システムを破壊する可能性もあるので気をつけて下さい。 |
||
+ | * {{App|downgrade|一つ(あるいは複数)のパッケージをダウングレードする Bash スクリプトです。pacman のキャッシュや [[Arch Rollback Machine]] を使用します。詳細は {{man|8|downgrade|url=}} を見てください。|https://github.com/pbrisbin/downgrade|{{AUR|downgrade}}}} |
||
− | === ダウングレードしたパッケージを pacman がアップデートしないようにするのにはどうしたらいいですか? === |
||
+ | == [testing] から戻る == |
||
− | {{Ic|pacman.conf}} の [[pacman#アップグレードさせないパッケージを設定|IgnorePkg セクション]]に {{Ic|<nowiki>IgnorePkg = package1 package2</nowiki>}} と書けば {{ic|pacman -Syu}} した時も Pacman は指定されたパッケージのアップグレードを無視します。 |
||
+ | [[公式リポジトリ#testing リポジトリの無効化]] を見てください。 |
||
− | === システムを昨日の状態に戻したいのですが === |
||
+ | {{TranslationStatus|Downgrading packages|2022-08-10|733702}} |
||
− | [[LVM]] を使って定期的にスナップショットを作れば簡単です。 |
2022年8月10日 (水) 20:00時点における最新版
パッケージをダウングレードする前に、なぜそうするのか考えて下さい。バグが理由ならば、バグトラッカーで既存のタスクを探してください。そこに無いのであれば、新しいタスクを追加してください。バグを修正するか、少なくとも、起こりうる問題を他のユーザに警告すると良いでしょう。
目次
パッケージを以前のバージョンに戻す
pacman のキャッシュを使う
以前にパッケージをインストールしていて、該当する pacman のキャッシュを削除していない場合、/var/cache/pacman/pkg/
から以前のバージョンをインストールしてください。
この方法では、現在のパッケージを削除して古いバージョンをインストールします。依存関係の変更は処理されますが、pacman はバージョンの衝突を処理しません。ダウングレードしたいパッケージと一緒にライブラリや他のパッケージもダウングレードする必要がある場合、そのパッケージも手動でダウングレードしなければならないことに気をつけてください。
# pacman -U file:///var/cache/pacman/pkg/package-old_version.pkg.tar.type
type
の部分は、古いパッケージビルドに対しては xz
、2020 に行われた変更に従っているパッケージに対しては zst
となることに注意してください。
一度パッケージを古いバージョンに戻したら、アップデートされたパッケージの問題が解決されるまで、そのパッケージを pacman.conf
の IgnorePkg セクションに一時的に追加してください。
カーネルのダウングレード
新しいカーネルで問題が発生した場合、pacman のキャッシュを使って Linux のパッケージを最後に動作したバージョンにダウングレードできます。/var/cache/pacman/pkg
まで移動して、パッケージをダウングレードします。少なくとも linux と linux-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
Arch Linux Archive
Arch Linux Archive は公式リポジトリの毎日のスナップショットです。以前のバージョンのパッケージをインストールしたり、特定の日時までシステムを復元したりするのに使用できます。
パッケージの再ビルド
ダウングレードしたいパッケージが利用できない場合、正しい PKGBUILD を見つけて makepkg を使って再ビルドしてください。
公式リポジトリにあるパッケージは、ABS を使って PKGBUILD を取得し、ソフトウェアのバージョンを編集してください。もしくは Packages のウェブサイトにアクセスしてダウングレードしたいパッケージをさがしてください。見つけたら、「変更履歴」をクリックして、必要なバージョンの場所をつきとめて、ディレクトリにあるファイルをダウンロードして makepkg でビルドしてください。
Arch Build System#旧リビジョンのパッケージをチェックアウトも参照。
古い AUR パッケージは、AUR パッケージの Git リポジトリにある古いコミットをチェックアウトすることでビルドできます。2015 年以前の AUR3 PKGBUILD に関しては Arch User Repository#AUR3 パッケージの Git リポジトリを見てください。
自動化する
- downgrade — 一つ(あるいは複数)のパッケージをダウングレードする Bash スクリプトです。pacman のキャッシュや Arch Rollback Machine を使用します。詳細は downgrade(8) を見てください。
[testing] から戻る
公式リポジトリ#testing リポジトリの無効化 を見てください。