135
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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

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以降がインストールされている場合

Arch Linuxと同様に、単純に、

$ pacman -Syuu

で、パッケージデータベースの更新(-Sy)とパッケージの更新(-Suu)をまとめて行えます。-Suではなく、-Suuとしているのはダウングレードも許可するためです。後は表示されるメッセージにしたがって作業を行ってください。

コアシステムに更新がある場合

コアシステムに更新がある場合は、2回に分けて更新が行われるため注意が必要です。1回目ではコアシステムが更新され、MSYS2のウィンドウを立ち上げ直してから再度pacmanを実行すると、残りのパッケージが更新されます。

まず1回目の、

$ pacman -Syuu

で、コアシステムに更新が見つかった場合、以下のような表示が出ます。

(日本語)
:: コアシステムの更新を開始...
警告: 続行する前に他の MSYS2 プログラムを終了してください

(英語)
:: Starting core system upgrade...
警告: terminate other MSYS2 programs before proceeding

ここで、実行しているMSYS2プログラムがあれば終了して、更新を続行します。

処理が終わって次のような表示が出た場合はYを押します。(pacman 5.2.1-9 以降)

(日本語)
:: 更新を完了するために、この端末を含む全ての MSYS2 プロセスが閉じられます。続行しますか? [Y/n]

(英語)
:: To complete this update all MSYS2 processes including this terminal will be closed. Confirm to proceed [Y/n]

pacman 5.2.1-8 までは以下のようなメッセージが表示されるので、Alt-F4 を押すかクローズボタンをクリックして手動でMSYS2 (mintty)のウィンドウを閉じます。

(日本語)
警告: シェルに戻る前に MSYS2 を終了し、更新を再度チェックしてください
警告: exit を呼ぶのではなく、例えば端末ウィンドウを閉じてください

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

どちらの場合も、次のようなダイアログボックスが出たらOKをクリックするとminttyのウィンドウが閉じます。

mintty-close-dialog.png

MSYS2のウィンドウが閉じたら、ウィンドウを再度立ち上げて、pacmanコマンドを再度実行します。
パッケージデータベースは更新済みなので、

$ 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 ...

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
135
Help us understand the problem. What are the problem?