phoenix-power今回は、自分のミスではなく、パッケージに問題があった場合の対処法を記録します。

状況報告

パッケージをアップグレードしたら、特定のアプリが動かなくなりました。しかし、それに気づかず、キャッシュを削除したため、復元が困難に…。

1
2
3
$ sudo pacman -Syuu

$ sudo pacman -Scc

ここで、キャッシュを削除していない場合は、パッケージのダウングレードは簡単です。

1
$ sudo pacman -U /var/cache/pacman/pkg/pkgname-olderpkgver.pkg.tar.gz

パッケージ情報の収集

ログを確認し、問題があったパッケージとバージョンを推測したりします。

1
2
3
$ cat /var/log/pacman.log

$ pacman -Si ibus

パッケージの検索

スクリプトを使うか、手動で検索することになります。

1
2
3
$ sudo pacman -S downgrade

$ sudo downgrade ibus

https://aur.archlinux.org/

downgradeの簡単なスクリプトを作ってみました。

air-downgrade
1
2
3
4
5
6
7
8
#!/bin/zsh
list=`cat /var/log/pacman.log | grep $1 | grep upgraded | cut -d ' ' -f 5`
numb=`echo $list | wc -l | tr -d ' '`
for (( i=1; i<=$numb; i++ ))
do
  pack=`echo $list | awk "NR==$i"`
  downgrade $pack
done

使い方は簡単で、ちゃんと動作した日付を指定します。すると、その日付のパッケージを一括ダウングレードします。ログとか消さない人は、年数も指定したほうが良いかもしれません。

1
$ ./air-downgrade 10-10

一応、yes1を自動で選択するようにしたスクリプトを公開しておきます。つなげて使うことで、一括ダウングレードできます。

パッケージのインストール

downgradeコマンドでインストールしなかった(ダウンロードのみだった)場合。

1
$ sudo pacman -U /var/cache/pacman/pkg/pkgname-olderpkgver.pkg.tar.gz

複数のパッケージをダウングレードしたい場合

Arch Rollback Machineを使うと良いかもしれません。

パッケージを維持するための対策

-Syuでアップグレードするときに不便なので、アップデートしないパッケージのリストを作ります。

1
2
3
4
$ sudo vim /etc/pacman.conf

#区切りはスペースを使います
IgnorePkg   = ibus ibus-setup

参考リンク

pacman (日本語) - ArchWiki

Pacman Tips (日本語) - ArchWiki

Downgrading Packages (日本語) - ArchWiki

まとめ

問題が起こった場合の復元方法が身につきますので、皆様、OSには、Archを使いましょう。