LoginSignup
4
5

More than 5 years have passed since last update.

NTLM認証のProxy下でMSYS2のpacmanを利用する作業メモ

Posted at

はじめに

長らくMinGW + MSYS環境を利用していたが、いい加減MSYS2環境に移行することにした。
私の環境はProxyを通さなければ外部と通信が出来ないため、pacmanを利用するためにひと手間かける必要があった。

Proxy認証の種類

  • 一般端末はNTLM認証のProxyを利用
  • 一部サーバは認証なしのProxyを使用

一部サーバが利用している認証なしのProxyを一般端末から利用することも可能だが、こちらはフィルタの制限が厳しくsourceforge等にアクセスが出来ない。
MSYS2のパッケージはsourceforgeに置いてあるため、NTLM認証のProxyを利用する必要があった。
pacmanはパッケージのダウンロードにcurlwget等の外部プログラムを利用できるが、NTLM認証に対応しているcurlを利用することとした。
NTLM認証の仕様には詳しくないのだが、curlでNTLM認証を利用するにはSSPIにも対応している必要があるようだ。

curlではなくCntlm Authentication Proxyを利用しても通信は可能となる。
が、こちらはバイナリ版をインストールしようとすると管理者権限が必要となるため、必要ならばまずはcurlpacmanを利用出来る様にしてから自前でビルドすることをお勧めしたい。

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の編集

pacmancurlを利用するには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.confXferCommand-vオプションを加える等して詳細を確認してみると解決の手助けとなるはずだ。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5