follow us in feedly

MSYS2のpacmanで発生するGPGME errorの対応

Windowsでコマンドラインやターミナル環境を整えるためにMSYS2をインストールしました。
最近はWindowsで開発する機会もあったので作業環境を慣れた形にしたかったからです。
今回はMSYS2のパッケージ管理システムであるpacmanの初期設定に苦しむことに。
そのエラーと対応した内容をご紹介します。

環境

  • Windows 7
  • MSYS2 (mintty 2.8.1)
  • pacman 5.0.1

MSYS2のインストール

MSYS2のインストールはインストーラを実行して進めるだけなので簡単です。
詳しいインストール手順は、参考サイトを参照してください。

proxyの設定

proxy環境下で利用するので、C:/msys64/etc/profile.d/proxy.shを設定します。


export http_proxy=proxyserver.domain:port
export HTTP_PROXY=proxyserver.domain:port
export https_proxy=proxyserver.domain:port
export HTTPS_PROXY=proxyserver.domain:port
export no_proxy="localhost,127.0.0.1"
export NO_PROXY="localhost,127.0.0.1"

C:/msys64/etc/pacman.confを設定してcurlを使うようにします。


XferCommand = /usr/bin/curl -C - f %u > %o # コメントを外す

pacmanの初期設定時にエラーが発生する

MSYS2のインストールが完了したら、pacmanの設定をします。
リポジトリの更新や既存パッケージのアップデートです。
ここで下記エラーが発生しました。

エラー内容


$ pacman -Sy
:: パッケージデータベースの同期中...
エラー: GPGME error: データがありません
エラー: mingw32 の更新に失敗しました (無効または破損したデータベース (PGP 鍵))
エラー: GPGME error: データがありません
エラー: mingw64 の更新に失敗しました (無効または破損したデータベース (PGP 鍵))
エラー: GPGME error: データがありません
エラー: msys の更新に失敗しました (無効または破損したデータベース (PGP 鍵))
エラー: データベースの同期に失敗しました
エラー: 処理を始められませんでした (無効または破損したデータベース (PGP 鍵))

調べるために英語でも出力したので載せておきます。


$ pacman -Sy
:: Synchronizing package databases...
error: GPGME error: No data
error: failed to update mingw32 (invalid or corrupted database (PGP signature))
error: GPGME error: No data
error: failed to update mingw64 (invalid or corrupted database (PGP signature))
error: GPGME error: No data
error: failed to update msys (invalid or corrupted database (PGP signature))
error: failed to synchronize any databases
error: failed to init transaction (invalid or corrupted database (PGP signature))

解決方法がなかなか見つからない

上記エラーで調べるといろいろ情報は出てきます。
ただ、自分の場合は原因が違うようで、解決には至らずハマりました。
参考にした情報の一部を載せておきます。 (内容が同じようなものもあると思います)

curlではなくwgetを利用したら解決した

解決できたのは、wgetを使う設定にしてみたことでした。
proxyの設定時に有効にしていたcurlがダメだったようです。
proxy環境の都合なのか理由はわからないままですが。

とりあえず、C:/msys64/etc/pacman.confを下記のようにして無事に動作しました。
なんとなく設定を変えてみたら、あっさり解決することもありますよね。


#XferCommand = /usr/bin/curl -C - f %u > %o # コメントアウトする
XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u # コメントを外す

まとめ

MSYS2のパッケージ管理システムであるpacmanのエラーと対応方法をご紹介しました。
pacmanがダウンロード時に利用するコマンドをcurlではなくwgetにすることで解決しました。
調べるといろいろな解決手段があるようなので、そのひとつとして参考なれば幸いです。

おまけ

MSYS2をちょっと快適に使えるかもしれない設定をします。
下記設定でシンボリックリンクの作成とWindowsの環境変数Pathの引き継ぎができるようになります。

C:/msys64/msys2.iniを編集します。


MSYS=winsymlinks:nativestrict # コメント外す シンボリックリンクの作成
#MSYS=error_start:mingw64/bin/qtcreator.exe|-debug|<process-id>
#CHERE_INVOKING=1
MSYS2_PATH_TYPE=inherit # コメント外す 環境変数引き継ぎ
MSYSTEM=MSYS

参考

タグ: , ,

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください