MSYS2における正しいパッケージの更新方法

  • 91
    いいね
  • 0
    コメント

MSYS2のpacmanを使ってパッケージを更新する場合、正しい手順を踏まないとパッケージが正常に更新できない場合があります。

pacmanの開発元であるArch Linuxでは、パッケージデータベースの更新とパッケージの更新をまとめて、単純に pacman -Syu というコマンドで実行できますが、MSYS2ではpacmanのバージョンによって、異なる手順が必要となっています。

※ 20160921版のインストーラからは、新しいpacmanが含まれるようになったため、pacman -Syu が使えるようになりました。詳しくは、1. を参照してください。

0. pacmanのバージョン確認

まずは、pacmanのバージョンを確認します。例えば以下のようにして確認できます。

$ pacman -Sl | grep 'pacman '
msys pacman 5.0.1.6403.07ca798-1 [インストール済み]

この場合、5.0.1.6403 がインストールされていることが分かります。
一方、以下のように表示された場合は、5.0.1.6403 が入手可能だが、インストールされているのは 5.0.1.6391 であることを示しています。

$ pacman -Sl | grep 'pacman '
msys pacman 5.0.1.6403.07ca798-1 [インストール済み: 5.0.1.6391.6f124b6-1]

以降は、インストールされているpacmanのバージョンにしたがって作業を行ってください。

1. pacman 5.0.1.6403以降、あるいは5.0.1-1以降がインストールされている場合

(以前用意されていたupdate-coreコマンドは削除されました。)
Arch Linuxと同様に、単純に、

$ pacman -Syuu

で、パッケージデータベースの更新(-Sy)とパッケージの更新(-Suu)をまとめて行えます。-Suではなく、-Suuとしているのはダウングレードも許可するためです。後は表示されるメッセージにしたがって作業を行ってください。
以下のようなメッセージが表示された場合は、Alt-F4 あるいはクローズボタンでMSYS2 (mintty)のウィンドウを一旦閉じてから、再度立ち上げて、同じコマンドを再度実行してください。

警告: terminate MSYS2 without returning to shell and check for updates again
警告: for example close your terminal window instead of calling exit

更新するパッケージがなくなるまで、何回かこの手順を繰り返してください。
なお、2回目以降は、パッケージデータベースが更新済みなので、

$ pacman -Suu

でも問題ありません。

2. pacman 4.2.1.6187以降がインストールされている場合

このバージョンのpacmanには、update-coreというコアパッケージを更新するための専用コマンドが用意されています。
20150916版以降のインストーラを使ってインストールした場合など、比較的新しい環境がこれに相当します。

2.1. 最小限のパッケージの更新

まずは、

$ update-core

を実行します。パッケージの更新があった場合には以下のような表示が出ます。(バージョンにより異なる可能性あり)

==> Checking if there are critical packages to upgrade.
msys2-runtime 2.3.0.16701.d6cd1b3-1 -> 2.4.0.16752.6eb10ef-1
==> Core packages require updating.
==> Please close all other MSYS2 derived windows (e.g. terminal
==> windows, Bash sessions, etc) before proceeding.
==> 警告: When the update has completed, you MUST close this MSYS2 window
==> 警告: (use Alt-F4 or red [ X ], etc.), rather than 'exit'!!!
Press [Enter] key when ready to start update...

Enter キーを押して更新を開始し、終わったら必ず Alt-F4 あるいはクローズボタンでMSYS2 (mintty)のウィンドウを閉じてから、MSYS2を再度立ち上げて手順2.2に進みます。
exitで終了してはいけません。(エラーが発生します。)

コアパッケージの更新が無かった場合は、MSYS2の再起動は不要です。そのまま次の手順に進んでください。

2.2. 残りのパッケージの更新

MSYS2の再起動が完了したら、

$ pacman -Suu

を実行します。forkエラーなどが出ていなければ完了です。

3. それ以前のバージョンの場合

20150512版あるいはそれ以前のインストーラを使ってインストールした直後がこれに相当します。このバージョンには、update-coreコマンドがありません。

3.1. 最小限のパッケージの更新

まずは、

$ pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime

を実行します。もしも、

依存関係を解決しています...
衝突するパッケージがないか確認しています...
エラー: 処理の準備に失敗しました (依存関係を解決できませんでした)
:: msys2-runtime-devel: msys2-runtime=2.1.0.16538.304f5d4 を必要としています

のようなエラーが出た場合は、依存関係にある msys2-runtime-devel も追加して、以下のように実行します。

$ pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime msys2-runtime-devel

ここで指定したパッケージのいずれかに更新があった場合は、必ず Alt-F4 あるいはクローズボタンでMSYS2 (mintty)のウィンドウを閉じてから、MSYS2を再度立ち上げて手順3.2に進みます。

以下のように一切更新が行われなかった場合は、MSYS2の再起動は不要です。そのまま次の手順に進んでください。

警告: bash-4.3.039-2 は最新です -- スキップ
警告: pacman-4.2.1.6159.e038c19-1 は最新です -- スキップ
警告: pacman-mirrors-20150619-1 は最新です -- スキップ
警告: msys2-runtime-2.1.0.16553.a38932f-1 は最新です -- スキップ
警告: msys2-runtime-devel-2.1.0.16553.a38932f-1 は最新です -- スキップ
 何も行うことがありません

3.2. 残りのパッケージの更新

MSYS2の再起動が完了したら、

$ pacman -Suu

を実行します。forkエラーなどが出ていなければ完了です。

forkエラーが発生してしまった場合は

pacman実行中に以下のようなforkエラーが発生した場合、pacman自体は正常終了しているように見えますが、そのパッケージの更新に失敗しています。そのため、forkエラーが発生したパッケージを手動で再インストールする必要があります。

37845597 [main] pacman 7492 fork: child -1 - forked process 8716 died unexpectedly, retry 0, exit code 0xC0000005, errno 11
エラー: 新しいプロセスをフォークできません (Resource temporarily unavailable)

forkエラーが発生したパッケージをメモっておき、MSYS2を再起動してから、以下のコマンドを実行します。

$ pacman -S package1 package2 ...

参考