Git for Windowsの環境にMSYS2で使えるパッケージマネージャpacmanをインストールする。
-
Git Bashを管理者権限で立ち上げる
-
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
- 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
- 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
- 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
- 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
- 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 鍵))
- 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
- 鍵の一覧を表示、[ 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
- さきほど確認した鍵が妥当そうならローカルで署名する
$ 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
- CAの証明書を更新する
curl -L http://curl.haxx.se/ca/cacert.pem -o /usr/ssl/certs/ca-bundle.crt
- これでpacmanが実行できるようになっているはず。 pacman.confのIgnorePkgにbashが指定されているが、これを消して下記を実行した。
pacman -S pacman pacman-mirrors msys2-keyring --overwrite=*
いろいろエラーが出たが、git-bashを立ち上げ直したら更新できたようだった。