Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save sunasaji/e9b327168240a328808d1628a0a56f23 to your computer and use it in GitHub Desktop.
Save sunasaji/e9b327168240a328808d1628a0a56f23 to your computer and use it in GitHub Desktop.

Git for Windowsにpacmanをインストールする

Git for Windowsの環境にMSYS2で使えるパッケージマネージャpacmanをインストールする。

  1. Git Bashを管理者権限で立ち上げる

  2. MSYS2のzstパッケージを解凍するためzstd.exeを/usr/local/binに配置

mkdir -p /usr/local/bin
curl -o /usr/local/bin/zstd.exe -L https://github.com/git-for-windows/git-sdk-64/blob/main/usr/bin/zstd.exe?raw=true
  1. pacman, pacman-mirrors, msys2-keyring パッケージをMSYS2のリポジトリからcurlで取得して展開する https://packages.msys2.org/queue
cd /tmp
curl -O -L https://mirror.msys2.org/msys/x86_64/pacman-6.0.1-15-x86_64.pkg.tar.zst
curl -O -L https://mirror.msys2.org/msys/x86_64/pacman-mirrors-20220205-1-any.pkg.tar.zst
curl -O -L https://mirror.msys2.org/msys/x86_64/msys2-keyring-1~20220522-1-any.pkg.tar.zst
cd /
tar xvf /tmp/pacman-6.0.1-15-x86_64.pkg.tar.zst
tar xvf /tmp/pacman-mirrors-20220205-1-any.pkg.tar.zst
tar xvf /tmp/msys2-keyring-1~20220522-1-any.pkg.tar.zst
rm .BUILDINFO .INSTALL .MTREE .PKGINFO
  1. git-for-windowsのpacman.confを取得して/etc/pacman.confに上書き
curl -o /etc/pacman.conf -L https://github.com/git-for-windows/git-sdk-64/blob/main/etc/pacman.conf?raw=true
  1. pacmanのGPG鍵DBを作成
$ pacman-key --init
gpg: /etc/pacman.d/gnupg/trustdb.gpg: trustdb created
gpg: no ultimately trusted keys found
gpg: starting migration from earlier GnuPG versions
gpg: porting secret keys from '/etc/pacman.d/gnupg/secring.gpg' to gpg-agent
gpg: migration succeeded
==> pacman のマスターキーを生成しています。しばらくお待ちください。
gpg: Generating pacman keyring master key...
gpg: key FC051FD2FE874B1A marked as ultimately trusted
gpg: directory '/etc/pacman.d/gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/etc/pacman.d/gnupg/openpgp-revocs.d/8378DF495FF723999A32126EFC051FD2FE874B1A.rev'
gpg: Done
==> 信頼データベースを更新...
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
  1. git-for-windowsの鍵を追加
$ curl --location https://raw.githubusercontent.com/git-for-windows/build-extra/master/git-for-windows-keyring/git-for-windows.gpg | pacman-key --add - && pacman-key --lsign-key 1A9F3986
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 10816  100 10816    0     0   155k      0 --:--:-- --:--:-- --:--:--  160k
==> 信頼データベースを更新...
gpg: no need for a trustdb check
  -> 1 キーにローカルで署名しました。
==> 信頼データベースを更新...
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   1  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1  valid:   1  signed:   0  trust: 1-, 0q, 0n, 0m, 0f, 0u
  1. pacman実行。git-for-windowsとMSYS2の鍵が足りていないので対応する。
$ pacman -Syu
:: パッケージデータベースの同期中...
 git-for-windows                                                                                   46.9 KiB  67.6 KiB/s 00:01 [###########################################################################] 100%
 git-for-windows-mingw32                                                                           16.5 KiB  25.0 KiB/s 00:01 [###########################################################################] 100%
 mingw32                                                                                         1611.5 KiB   215 KiB/s 00:07 [###########################################################################] 100%
 mingw64                                                                                         1621.7 KiB   208 KiB/s 00:08 [###########################################################################] 100%
 ucrt64                                                                                          1679.8 KiB   274 KiB/s 00:06 [###########################################################################] 100%
 clang32                                                                                         1572.6 KiB   231 KiB/s 00:07 [###########################################################################] 100%
 clang64                                                                                         1607.9 KiB   214 KiB/s 00:08 [###########################################################################] 100%
 msys                                                                                             390.2 KiB   124 KiB/s 00:03 [###########################################################################] 100%
エラー: git-for-windows: "Johannes Schindelin <johannes.schindelin@gmx.de>" の署名は信頼されていません
エラー: git-for-windows-mingw32: "Johannes Schindelin <johannes.schindelin@gmx.de>" の署名は信頼されていません
エラー: mingw32: キー "5F944B027F7FE2091985AA2EFA11531AA0AA7F57" は不明です
:: PGP 鍵 5F944B027F7FE2091985AA2EFA11531AA0AA7F57 をインポートしますか? [Y/n]
エラー: mingw32: "Christoph Reiter (MSYS2 development key) <reiter.christoph@gmail.com>" の署名は信頼されていません
エラー: mingw64: "Christoph Reiter (MSYS2 development key) <reiter.christoph@gmail.com>" の署名は信頼されていません
エラー: ucrt64: "Christoph Reiter (MSYS2 development key) <reiter.christoph@gmail.com>" の署名は信頼されていません
エラー: clang32: "Christoph Reiter (MSYS2 development key) <reiter.christoph@gmail.com>" の署名は信頼されていません
エラー: clang64: "Christoph Reiter (MSYS2 development key) <reiter.christoph@gmail.com>" の署名は信頼されていません
エラー: msys: "Christoph Reiter (MSYS2 development key) <reiter.christoph@gmail.com>" の署名は信頼されていません
エラー: 全てのデータベースの同期に失敗しました (無効または破損したデータベース (PGP 鍵))
  1. MSYS2の鍵を更新
$ pacman-key --populate msys2
==> msys2.gpg からキーを追加...
==> キーリングの信頼されたキーに署名...
  -> 5 キーにローカルで署名しました。
==> 所有者信頼値をインポート...
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
gpg: inserting ownertrust of 4
==> キーリングの破棄されたキーを無効化...
  -> 3 キーを無効化しました。
==> 信頼データベースを更新...
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   6  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1  valid:   6  signed:   7  trust: 1-, 0q, 0n, 5m, 0f, 0u
gpg: depth: 2  valid:   4  signed:   2  trust: 4-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2022-11-18
  1. 鍵の一覧を表示、[ unknown] と表示されている人の鍵を確認する
$ pacman-key --list-keys
/etc/pacman.d/gnupg/pubring.gpg
-------------------------------
pub   rsa4096 2022-05-30 [SC]
      8378DF495FF723999A32126EFC051FD2FE874B1A
uid           [ultimate] Pacman Keyring Master Key <pacman@localhost>

pub   rsa4096 2021-03-23 [SC] [expires: 2026-03-22]
      E8325679DFFF09668AD8D7B67115A57376871B1C ★
uid           [ unknown] Johannes Schindelin <johannes.schindelin@gmx.de> ★
sub   rsa4096 2021-03-23 [E] [expires: 2026-03-22]
sub   rsa4096 2021-03-23 [S] [expires: 2026-03-22]

pub   rsa4096 2013-09-13 [SC]
      3B6D86A1BA7701CD0F23AED888138B9E1A9F3986
uid           [  full  ] Johannes Schindelin <johannes.schindelin@gmx.de>
sub   rsa4096 2013-09-13 [E]
sub   rsa4096 2014-01-17 [S]

pub   rsa4096 2020-06-22 [SC]
      5F944B027F7FE2091985AA2EFA11531AA0AA7F57
uid           [  full  ] Christoph Reiter (MSYS2 development key) <reiter.christoph@gmail.com>
sub   rsa4096 2020-06-22 [E]

pub   rsa2048 2014-09-28 [SC]
      D55E7A6D7CE9BA1587C0ACACF40D263ECA25678A
uid           [  full  ] Alexey Pavlov (Alexpux) <alexey.pawlow@gmail.com>
sub   rsa2048 2014-09-28 [E]

pub   rsa4096 2020-06-19 [SC]
      6E8FEAFF9644F54EED90EEA0790AE56A1D3CFDDC
uid           [  full  ] David Macek (MSYS2 master key) <david.macek.0@gmail.com>

pub   rsa4096 2014-10-04 [SC]
      9DD0D4217D75A33B896159E6DA7EF2ABAEEA755C
uid           [  full  ] Martell Malone (martell) <martellmalone@gmail.com>
sub   rsa4096 2014-10-04 [E]

pub   rsa4096 2020-06-22 [SC]
      69985C5EB351011C78DF7F6D755B8182ACD22879
uid           [  full  ] Christoph Reiter (MSYS2 master key) <reiter.christoph@gmail.com>
sub   rsa4096 2020-06-22 [E]

pub   rsa2048 2014-09-29 [SC]
      B91BCF3303284BF90CC043CA9F418C233E652008
uid           [  full  ] Ignacio Casal Quinteiro <icquinteiro@gmail.com>
sub   rsa2048 2014-09-29 [E]

pub   rsa4096 2014-09-28 [SC]
      123D4D51A1793859C2BE916BBBE514E53E0D0813
uid           [marginal] Ray Donnelly (MSYS2 Developer - master key) <mingw.android@gmail.com>
sub   rsa4096 2014-09-28 [E]

pub   dsa2048 2013-11-11 [SC]
      AD351C50AE085775EB59333B5F92EFC1A47D45A1
uid           [  full  ] Alexey Pavlov (Alexpux) <alexpux@gmail.com>
sub   elg2048 2013-11-11 [E]

pub   rsa4096 2018-01-14 [SC] [expires: 2022-11-18]
      87771331B3F1FF5263856A6D974C8BE49078F532
uid           [  full  ] David Macek <david.macek.0@gmail.com>
sub   rsa4096 2018-01-14 [E] [expires: 2022-11-18]
sub   rsa3072 2018-01-14 [S] [expires: 2022-11-18]

pub   rsa4096 2015-07-22 [SC]
      C65EC8966983541D52B97A16D595C9AB2C51581E
uid           [marginal] Martell Malone (MSYS2 Developer) <martellmalone@gmail.com>
sub   rsa4096 2015-07-22 [E]

pub   rsa4096 2014-11-05 [SC]
      B19514FB53EB3668471B296E794DCF97F93FC717
uid           [marginal] Martell Malone (martell) <me@martellmalone.com>
sub   rsa4096 2014-11-05 [E]

pub   rsa4096 2014-09-28 [SC]
      909F9599D1A2046B21FAEB3C4DF3B7664CA56930
uid           [  full  ] Ray Donnelly (MSYS2 Developer) <mingw.android@gmail.com>
sub   rsa4096 2014-09-28 [E]

Git for Windows公式のリポジトリのtrustedの鍵に76871B1Cの鍵も登録されている。 https://github.com/git-for-windows/build-extra/blob/main/git-for-windows-keyring/git-for-windows-trusted Johannes Schindelinさんの以前の鍵のようなので問題なさそう。 https://github.com/git-for-windows/build-extra/blob/main/git-for-windows-keyring/git-for-windows.gpg

  1. さきほど確認した鍵が妥当そうならローカルで署名する
$ pacman-key --lsign-key 76871B1C
  -> 1 キーにローカルで署名しました。
==> 信頼データベースを更新...
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   7  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1  valid:   7  signed:   7  trust: 2-, 0q, 0n, 5m, 0f, 0u
gpg: depth: 2  valid:   4  signed:   2  trust: 4-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2022-11-18
  1. CAの証明書を更新する
curl -L http://curl.haxx.se/ca/cacert.pem -o /usr/ssl/certs/ca-bundle.crt
  1. これでpacmanが実行できるようになっているはず。 pacman.confのIgnorePkgにbashが指定されているが、これを消して下記を実行した。
pacman -S pacman pacman-mirrors msys2-keyring --overwrite=*

いろいろエラーが出たが、git-bashを立ち上げ直したら更新できたようだった。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment