「パッケージのダウングレード」の版間の差分
(同期) |
|||
1行目: | 1行目: | ||
[[Category:パッケージ管理]] |
[[Category:パッケージ管理]] |
||
− | [[cs:Downgrading |
+ | [[cs:Downgrading packages]] |
− | [[de: |
+ | [[de:Ältere Paketversion installieren (Downgrade)]] |
− | [[ |
+ | [[es:Downgrading packages]] |
− | [[ |
+ | [[en:Downgrading packages]] |
[[fa:دانگرید]] |
[[fa:دانگرید]] |
||
[[fr:Downgrade]] |
[[fr:Downgrade]] |
||
− | [[it:Downgrading |
+ | [[it:Downgrading packages]] |
− | [[ru:Downgrading |
+ | [[ru:Downgrading packages]] |
− | [[sk:Downgrading |
+ | [[sk:Downgrading packages]] |
+ | [[tr:Paket sürümünü düşürmek]] |
||
− | [[tr:Paket_sürümünü_düşürmek]] |
||
− | [[uk:Downgrading |
+ | [[uk:Downgrading packages]] |
− | [[zh- |
+ | [[zh-cn:Downgrading packages]] |
{{Related articles start}} |
{{Related articles start}} |
||
− | {{ |
+ | {{Related|Arch Build System}} |
+ | {{Related|makepkg}} |
||
− | {{Related2|pacman|pacman}} |
||
+ | {{Related|pacman}} |
||
− | {{Related2|Arch Rollback Machine|Arch Rollback Machine}} |
||
+ | {{Related|Arch Linux Archive}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
36行目: | 37行目: | ||
* ファイルが削除された後ファイルが他のソースから入手できるかどうか考えて下さい。Arch Linux はローリングリリースであり、レポジトリは自動的にアップデートされ古いバージョンは保存されません。この問題については後に詳しく書きます。 |
* ファイルが削除された後ファイルが他のソースから入手できるかどうか考えて下さい。Arch Linux はローリングリリースであり、レポジトリは自動的にアップデートされ古いバージョンは保存されません。この問題については後に詳しく書きます。 |
||
* 設定ファイルやスクリプトの変更に気をつけて下さい。今現在、pacman にはセーフガードがあり、それをバイパスしない限り、pacman がそれらを管理しています。 |
* 設定ファイルやスクリプトの変更に気をつけて下さい。今現在、pacman にはセーフガードがあり、それをバイパスしない限り、pacman がそれらを管理しています。 |
||
− | |||
− | Arch Rollback Machine のコンセプトが完成して pacman に寄与されることが待たれています。そうすれば、ダウングレードは自動化されるでしょう。 |
||
== パッケージをダウングレードする方法 == |
== パッケージをダウングレードする方法 == |
||
44行目: | 43行目: | ||
* Q: {{Ic|pacman -Syu}} をしたら ''XYZ'' パッケージがバージョンMからバージョンNにアップグレードされました。私の環境ではこのパッケージは問題があります、どうやったらバージョン N からバージョン M へダウングレードできますか? |
* 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}} で |
+ | * A: {{Ic|/var/cache/pacman/pkg}} ディレクトリの中にもし古いバージョンのパッケージが保存されていた場合、簡単にダウングレードすることができます。(つい最近に {{Ic|pacman -Scc}} をしたりしていない限り存在しているはずです)。{{Ic|pacman -U /var/cache/pacman/pkg/pkgname-olderpkgver.pkg.tar.gz}} で指定したバージョンのパッケージをインストールできます。 |
この方法では現在のパッケージを削除するので、慎重に依存性の変更を計算してください。そして依存性を破壊しないように古いバージョンをインストールします。 |
この方法では現在のパッケージを削除するので、慎重に依存性の変更を計算してください。そして依存性を破壊しないように古いバージョンをインストールします。 |
||
50行目: | 49行目: | ||
{{Note|OS の基幹的な部分を変えるときは、文字通り数ダースものパッケージを古いバージョンに取り替える必要があるかもしれません。もしくはパッケージがどこかに行ってしまって、望ましくないパッケージバージョンに立ち返ってしまうことのないように特定のアップグレードには注意しながら、手動で一つずつ全部を戻すはめになるかもしれません。}} |
{{Note|OS の基幹的な部分を変えるときは、文字通り数ダースものパッケージを古いバージョンに取り替える必要があるかもしれません。もしくはパッケージがどこかに行ってしまって、望ましくないパッケージバージョンに立ち返ってしまうことのないように特定のアップグレードには注意しながら、手動で一つずつ全部を戻すはめになるかもしれません。}} |
||
− | また [[Arch User Repository|AUR]] に {{AUR|downgrade}} というパッケージもあります。シンプルな Bash スクリプトで、キャッシュから古いバージョンのパッケージを探してくれます。キャッシュにないときは [[# |
+ | また [[Arch User Repository|AUR]] に {{AUR|downgrade}} というパッケージもあります。シンプルな Bash スクリプトで、キャッシュから古いバージョンのパッケージを探してくれます。キャッシュにないときは [[#Arch Linux Archive|Arch Linux Archive]] の検索も行います。あなたはインストールするパッケージを選ぶことができます。簡単に言えば、この記事に書かれていることを自動化してくれます。使用方法は {{Ic|downgrade --help}} をチェックして下さい。 |
より強力なツールに {{AUR|downgrader}} があります。これは pacman のログとして働くだけでなく、ARM やローカルキャッシュからパッケージをダウングレードしたり、パッケージのリストを回覧するのに使えます。(パッケージのアップグレードのあと、パッケージの名前がわからないとき便利です)。 |
より強力なツールに {{AUR|downgrader}} があります。これは pacman のログとして働くだけでなく、ARM やローカルキャッシュからパッケージをダウングレードしたり、パッケージのリストを回覧するのに使えます。(パッケージのアップグレードのあと、パッケージの名前がわからないとき便利です)。 |
||
+ | |||
+ | {{AUR|agetpkg-git}} は [[Arch Linux Archive]] からパッケージを素早く取得・インストールします。 |
||
=== カーネルのダウングレード === |
=== カーネルのダウングレード === |
||
− | カーネルアップデートの後に起動できなくなった場合、 |
+ | カーネルアップデートの後に起動できなくなった場合、ライブ CD を使ってカーネルをダウングレードできます。なるべく最新の Arch Linux のインストールメディアを使って下さい。インストールメディアをブートしたら、システムのパーティションを {{ic|/mnt}} にマウントしてください。{{ic|/boot}} や {{ic|/var}} パーティションを分割している場合は、それらもマウントしてください (例: {{ic|mount /dev/sdc3 /mnt/boot}})。それから [[chroot]] を使います: |
− | mount -t proc proc /mnt/proc |
||
− | mount -t sysfs sys /mnt/sys |
||
− | mount -o bind /dev /mnt/dev |
||
− | 次に chroot を使います。<tt>chroot /mnt /bin/bash</tt>。それから /var/cache/pacman/pkg まで行き、パッケージをダウングレードします。少なくとも ''linux'' と ''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 |
||
+ | # arch-chroot /mnt /bin/bash |
||
− | chroot を終了し、再起動すれば完了です。 |
||
+ | それから {{ic|/var/cache/pacman/pkg}} まで移動して、パッケージをダウングレードします。少なくとも {{Pkg|linux}} と {{Pkg|linux-headers}} とカーネルモジュールをダウングレードしてください。例: |
||
− | もし特殊なセットアップ (lvm, encryption, ...) をしていたのなら、次の記事を参照してください: http://sch1zo.github.com/blog/2012/05/08/downgrading-a-bad-kernel-on-arch-with-luks-and-lvm/ |
||
+ | # 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 パッケージ === |
||
81行目: | 80行目: | ||
== 古いバージョンのパッケージを見つける == |
== 古いバージョンのパッケージを見つける == |
||
− | + | 3つの方法があります。 |
|
=== 未同期のミラーサーバ === |
=== 未同期のミラーサーバ === |
||
− | パソコンの中に古いバージョンが見つからなかった場合、未同期のサーバーで見つけられるかもしれません。こちらで[https://www. |
+ | パソコンの中に古いバージョンが見つからなかった場合、未同期のサーバーで見つけられるかもしれません。こちらで [https://www.archlinuxjp.org/mirrors/status/ ミラーの状態] を見ることができます。 |
+ | |||
+ | === Arch Linux Archive === |
||
+ | ''Arch Linux Archive'' は[[公式リポジトリ]]の毎日のスナップショットです。詳しくは [[Arch Linux Archive]] を参照してください。 |
||
− | === Arch Rollback Machine === |
||
+ | === パッケージの再コンパイル === |
||
− | ''Arch Rollback Machine'' は公式 Archlinux ミラーの毎日のスナップショットです。詳しくは [[Arch Rollback Machine|Arch Rollback Machine]] を参照してください。 |
||
+ | 最悪の場合、つまりパッケージがどこにも見つからない場合、古いバージョンを自分でコンパイルする必要があるかもしれません。これには PKGBUILD ファイルが必要です。ABS の PKGBUILD を古いリソースを使うように編集する、もしくは https://www.archlinuxjp.org/packages/ にアクセスしてダウングレードしたいパッケージをさがしてください。見つけたら、「変更履歴」をクリックして "log" を選択します。クリックして必要なバージョンの場所をつきとめて、ディレクトリにあるファイルをダウンロードして makepkg でビルドしてください。 |
||
− | === パッケージのリコンパイル === |
||
+ | [[SVN から PKGBUILD を取得#旧リビジョンのパッケージをチェックアウト]]も参照。 |
||
− | 最悪の場合、つまりパッケージがどこにも見つからない場合、古いバージョンを自分でコンパイルする必要があるかもしれません。これには PKGBUILD ファイルが必要です。ABS の PKGBUILD を古いリソースを使うように編集する、もしくは https://www.archlinux.org/packages/ にアクセスしてダウングレードしたいパッケージをさがしてください。見つけたら、"View Changes" をクリックして "log" を選択します。クリックして必要なバージョンの場所をつきとめて、ディレクトリにあるファイルをダウンロードして makepkg でビルドしてください。 |
||
== FAQ == |
== FAQ == |
||
102行目: | 103行目: | ||
=== ダウングレードしたパッケージを pacman がアップデートしないようにするのにはどうしたらいいですか? === |
=== ダウングレードしたパッケージを pacman がアップデートしないようにするのにはどうしたらいいですか? === |
||
− | {{Ic|pacman.conf}} に {{Ic|<nowiki>IgnorePkg = package1 package2</nowiki>}} と書けば - |
+ | {{Ic|pacman.conf}} の [[pacman#アップグレードさせないパッケージを設定|IgnorePkg セクション]]に {{Ic|<nowiki>IgnorePkg = package1 package2</nowiki>}} と書けば {{ic|pacman -Syu}} した時も Pacman は指定されたパッケージのアップグレードを無視します。 |
=== システムを昨日の状態に戻したいのですが === |
=== システムを昨日の状態に戻したいのですが === |
||
− | [[ |
+ | [[LVM]] を使って定期的にスナップショットを作れば簡単です。 |
2016年3月14日 (月) 23:02時点における版
ここではパッケージを前のバージョンにダウングレードする方法を記述します。パッケージのダウングレードは普段は推奨されていませんが、最新パッケージにバグがあるときに必要になります。
ダウングレードする前に、なぜそうするのか考えて下さい。バグが理由ならば、Arch やそのプログラムの開発者にバグトラッカーでバグを報告するのに少し時間をさくことを考えていただけるでしょうか。Arch はローリングリリースなので、新しいパッケージにひそんだバグに出くわす可能性がいつでもあります。
私達やアップストリームの開発者は利用者からの報告にいつも感謝しています。ほんのすこしの情報でも、テストやデバッグに必要な時間を少なくし、ソフトウェアを安定させるのに役だっているのです。
目次
理由
ダウングレードするということは現在のパッケージをアンインストールして前のバージョンをインストールすることです。その前のバージョンというのが一つ前のバージョン(パッケージのバージョンは一つ前です)なのか、かなり前のバージョンなのかは分かりません。
ダウングレードする理由で(数ある中でも)挙げられるのは: 現在のバージョンにバグがある・期待どおりに働かない・実験的な理由で、などです。ほとんどの場合、新しいバージョンのリリースを待つより前のバージョンに戻したほうが問題が少ないと判断されます。
あるパッケージのダウングレードをすると、他のパッケージのダウングレードの必要が生じることもあります。実験的なパッケージを大量にインストールしたり、設定をいじくりまわした人にとっては、ダウングレードを試みるよりもシステムの再インストールをしたほうが好ましいかもしれません。
詳細
しかし、ユーザーは次のことを心に留めるべきです:
- プログラムの依存性を考えて下さい。必要なライブラリのバージョンが変わるのがしょっちゅうで、挙動が以前と全く異なるようなとき、解決法は旧バージョンに変えることでしょう。
- ファイルが削除された後ファイルが他のソースから入手できるかどうか考えて下さい。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
で指定したバージョンのパッケージをインストールできます。
この方法では現在のパッケージを削除するので、慎重に依存性の変更を計算してください。そして依存性を破壊しないように古いバージョンをインストールします。
また AUR に downgradeAUR というパッケージもあります。シンプルな Bash スクリプトで、キャッシュから古いバージョンのパッケージを探してくれます。キャッシュにないときは Arch Linux Archive の検索も行います。あなたはインストールするパッケージを選ぶことができます。簡単に言えば、この記事に書かれていることを自動化してくれます。使用方法は downgrade --help
をチェックして下さい。
より強力なツールに downgraderAUR があります。これは pacman のログとして働くだけでなく、ARM やローカルキャッシュからパッケージをダウングレードしたり、パッケージのリストを回覧するのに使えます。(パッケージのアップグレードのあと、パッケージの名前がわからないとき便利です)。
agetpkg-gitAUR は Arch Linux Archive からパッケージを素早く取得・インストールします。
カーネルのダウングレード
カーネルアップデートの後に起動できなくなった場合、ライブ CD を使ってカーネルをダウングレードできます。なるべく最新の Arch Linux のインストールメディアを使って下さい。インストールメディアをブートしたら、システムのパーティションを /mnt
にマウントしてください。/boot
や /var
パーティションを分割している場合は、それらもマウントしてください (例: mount /dev/sdc3 /mnt/boot
)。それから chroot を使います:
# arch-chroot /mnt /bin/bash
それから /var/cache/pacman/pkg
まで移動して、パッケージをダウングレードします。少なくとも linux と 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 を終了 (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#パッケージのインストール に書かれているようにしてインストール。
古いバージョンのパッケージを見つける
3つの方法があります。
未同期のミラーサーバ
パソコンの中に古いバージョンが見つからなかった場合、未同期のサーバーで見つけられるかもしれません。こちらで ミラーの状態 を見ることができます。
Arch Linux Archive
Arch Linux Archive は公式リポジトリの毎日のスナップショットです。詳しくは Arch Linux Archive を参照してください。
パッケージの再コンパイル
最悪の場合、つまりパッケージがどこにも見つからない場合、古いバージョンを自分でコンパイルする必要があるかもしれません。これには PKGBUILD ファイルが必要です。ABS の PKGBUILD を古いリソースを使うように編集する、もしくは https://www.archlinuxjp.org/packages/ にアクセスしてダウングレードしたいパッケージをさがしてください。見つけたら、「変更履歴」をクリックして "log" を選択します。クリックして必要なバージョンの場所をつきとめて、ディレクトリにあるファイルをダウンロードして makepkg でビルドしてください。
SVN から PKGBUILD を取得#旧リビジョンのパッケージをチェックアウトも参照。
FAQ
依存関係のせいでパッケージをダウングレードできません
アップグレードや削除のとき 'd' を使って依存性を無視できます。例: pacman -Ud pkgpkgname-olderpkgver.pkg.tar.gz
。システムを破壊する可能性もあるので気をつけて下さい。
ダウングレードしたパッケージを pacman がアップデートしないようにするのにはどうしたらいいですか?
pacman.conf
の IgnorePkg セクションに IgnorePkg = package1 package2
と書けば pacman -Syu
した時も Pacman は指定されたパッケージのアップグレードを無視します。
システムを昨日の状態に戻したいのですが
LVM を使って定期的にスナップショットを作れば簡単です。