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というダンプファイルがあるので適宜削除。