Msys2でpacmanダメダメさんとその対処

2019-05-23にサブで使っているWindows7(32bits)上のMsys2において、
core systemのupgradeをpacmanで行ったところ、
upgrade後のpacmanの実行ができなくなるtrouble。

この時upgradeされたMsys2のruntimeの問題であり、

msys2-runtime-3.0.7-1-i686.pkg.tar.xz
msys2-runtime-devel-3.0.7-1-i686.pkg.tar.xz

の二つのpackagesについて、

msys2-runtime-3.0.7-2-i686.pkg.tar.xz
msys2-runtime-devel-3.0.7-2-i686.pkg.tar.xz

という修正されたpackagesが翌2019-05-24にreleaseされた。

ところが、この修正をpacmanを使って適用しようとしても、
肝心のpacman自身が稼動しないため、修正できないという罠。
修正済みのpackagesをローカルに落としたりして、
直接pacman -Uなどでupgradeしようとしても同様に失敗する。

仕方がないので、pacmanを介さずに修正されたpackagesをoverwritesし、
然る後にpacmanを利用して、同じpackagesを適用し、
pacmanのinstalled packagesのdatabaseの整合性をとるという方法で対処。

まず、Msys2のrepositoriesから、修正されたruntime packagesをダウンロードする。
repositoriesの場所は/etc/pacman.d/mirrorlist.msysにあるので適当に。
このpackagesを適当に解凍して、
そのcontentsをコピーでも移動でもいいのでMsys2のsystemにoverwritesする。
tar.xzなので自分的にはbsdtarでJ optionを付けて解凍して、
explorerでmove&overwriteという適当なことをやった。
これで、pacmanがまともに動くようになっているので、
pacmanでcore systemのupgradeを行えば、
runtimeの3.0.7-2へのupgradeが表示されるので、
upgardeを行ってdatabaseの整合性をとる。終了。

2019-05-23のupgrade時点で同時にupgradeされたpacmanのpackageは、
そのままで問題ないので、何もしなくてよい。今回はあくまでもruntimeの問題。

pacmanが異常終了を起こして途中終了した場合、
ロックファイルが生成されて動かなくなっているはずなので、
ロックファイル/var/lib/pacman/db.lckを削除してからpacmanを動かす。

あと、pacmanを実行して失敗した時のカレントディレクトリに、
pacman.exe.stackdumpというダンプファイルがあるので適宜削除。