はじめに
長らくMinGW + MSYS環境を利用していたが、いい加減MSYS2環境に移行することにした。
私の環境はProxyを通さなければ外部と通信が出来ないため、pacman
を利用するためにひと手間かける必要があった。
Proxy認証の種類
- 一般端末はNTLM認証のProxyを利用
- 一部サーバは認証なしのProxyを使用
一部サーバが利用している認証なしのProxyを一般端末から利用することも可能だが、こちらはフィルタの制限が厳しくsourceforge等にアクセスが出来ない。
MSYS2のパッケージはsourceforgeに置いてあるため、NTLM認証のProxyを利用する必要があった。
pacman
はパッケージのダウンロードにcurl
やwget
等の外部プログラムを利用できるが、NTLM認証に対応しているcurl
を利用することとした。
NTLM認証の仕様には詳しくないのだが、curl
でNTLM認証を利用するにはSSPIにも対応している必要があるようだ。
curl
ではなくCntlm Authentication Proxyを利用しても通信は可能となる。
が、こちらはバイナリ版をインストールしようとすると管理者権限が必要となるため、必要ならばまずはcurl
でpacman
を利用出来る様にしてから自前でビルドすることをお勧めしたい。
NTLM及びSSPI対応のcurlの準備
MSYS2標準のcurl
はNTLM認証には対応しているものの、SSPIには対応していない。
$ /usr/bin/curl -v -V
curl 7.47.1 (i686-pc-msys) libcurl/7.47.1 OpenSSL/1.0.2d zlib/1.2.8 libidn/1.32 libssh2/1.6.0
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: Debug IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP UnixSockets Metalink
私の環境ではこのcurl
を利用しようとすると403エラーを吐いてProxyから弾かれたため、別のcurl
を準備する必要がある。
こちらの環境で正しく通信できたcurl
は以下のものとなる。
- mingw32/mingw-w64-i686-curl または mingw64/mingw-w64-x86_64-curl
- Git for Windows付属のcurl
私は確認していないが、公式サイトのダウンロードページにて"Dirk Paehl"氏が配布しているビルド済みパッケージもSSPIに対応しているようなので恐らく利用できるはずだ。
通信の確認
curl
を準備したら下記コマンドで通信が可能かどうかを確認する。
$ /path/to/bin/curl -U : --proxy-ntlm -x (proxy url) -L (url)
オプションの詳細はmanpageでご確認いただきたいが、軽く説明する。
-
-U
: Proxy認証のユーザー、パスワード。今回は空欄でよいため":"を引数に渡すだけでよいらしい。 -
--proxy-ntlm
: Proxy認証にNTLMを利用するためのスイッチをオンにする。 -
-x
: ProxyのURL。 -
-L
: リダイレクト先まで追いかけるためのスイッチをオンにする(sourceforgeはリダイレクトが多発するため)。
これで指定したURLが正しく開ければ成功となる。
pacman.confの編集
pacman
でcurl
を利用するにはpacman.conf
のうちXferCommand
の項を有効にする。
デフォルトでは以下のようになっているはずである。
# XferCommand = /usr/bin/curl -C - -f %u > %o
# XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
今回はどちらも利用せず、この直下に設定を追記する。
XferCommand = /path/to/bin/curl -U : --proxy-ntlm -x (proxy url) -L -C - -f %u > %o
(言うまでもないが、/path/to
は自身の環境に適時置き換えてほしい)
pacmanのDB更新
pacman -Sy
でDBを更新し、/var/lib/pacman/sync
以下のファイルが正しく更新されていれば正しく通信が出来ている。
ファイルサイズが0だったりやけに小さい場合は、「通信の確認」の項で正しく通信が出来ているかを確認したり、pacman.conf
のXferCommand
に-v
オプションを加える等して詳細を確認してみると解決の手助けとなるはずだ。