認証付きプロキシ環境でも(多少は)快適なpackage-installの利用

Emacs24を入れてから、list-packagesで適当にパッケージを追加してきたのですが、そろそろ.emacs.d/init.elのポータビリティが怪しくなってきたので、環境を見直し始めました。当初は、CaskやEl-getといったモダンな?パッケージマネージャを使おうと意気込んでいたのですが、認証付きプロキシ環境でどうもうまく動きませんでした…。プロキシが原因なのかはよく分かりませんが。

今後も振り回されるかも知れないと思うと、解決は目指さずに(手元の環境下で)実績のあるデフォルトのpackage-installに頼る方向にしました。

結果、「結局 package.el に戻ってきた / マスタカの ChangeLog メモ」を参考に以下のようにしました。package-refresh-contentsの呼び出しを、新しいパッケージのインストール時に限定している辺りが唯一のポイントです。呼び出すとプロキシのユーザ名・パスワードを求められるため、むき出しにするとEmacsを起動するたびに死にたくなります。かといって呼ばないとインストールできないためこうなりました。

ユーザ・パスワードの入力が新しいパッケージをインストールするときに限定されるので、「多少は」マシかと思います。

(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)
 
(defun install-packages (packages)
  (let ((refreshed nil))
    (dolist (pack packages)
      (unless (package-installed-p pack)
        (unless refreshed
          (package-refresh-contents)
          (setq refreshed t))
        (package-install pack)))))
 
(install-packages '(auto-complete
                    magit
                    markdown-mode))

まあsocatなどでローカルにプロキシサーバを立てて認証を代理させるのが筋な気はしますが…。書いてしまったものは仕方がない!

ちなみに、bash環境変数に設定しているhttp_proxyhttps_proxyのプロキシのアドレスは認識してくれたのですが、一緒に書いた認証情報は無視されるようでした。