おことわり
現象と自分の方法を試したのはProxy環境ですが、
記事は非Proxy環境にいるときに書いたので、検証不十分かもです。
もっかい書いた内容をProxy環境で試して、問題あれば改稿します。
あらまし
Ubuntu 12.04 に、gitの最新版を入れるで書いた内容のうち、
以下の部分がProxy環境下でうまく動かない。
$ sudo add-apt-repository ppa:git-core/ppa
apt.confにProxyの設定をきちんと書いていても、環境変数http_proxy, https_proxyを設定していても、である。
問題点
-
add-apt-repositoryはapt.confのプロキシ設定を見ていないかもしれない。 -
http_proxy,https_proxyも何故か伝わっていない。
原因
sudo コマンドは、環境変数を引き継がない。
だから、 http_proxy, https_proxyを設定していても、sudoで実行したコマンドには引き継がれない。
解決策
私の考えた解
環境変数が引き継がれないなら引き継がせれば良い。
$ sudo http_proxy=${http_proxy} https_proxy=${https_proxy} add-apt-repository ppa:git-core/ppa
引き継ぎたい変数をsudoと実行したいコマンドの間に記述すればその変数を設定した上で実行してくれる。
これで私の環境では動きました。
GNU Makeもこんな書き方ができる。
他の人の解
ぐぐったらもっと良い方法が出てきた。
sudoで環境変数を引き継ぎたい|ざる魂
http://mikio.github.io/article/2012/03/10_sudo.html
$ sudo -E add-apt-repository ppa:git-core/ppa
sudo -E で、現在の環境変数を引き継いでコマンドを実行してくれる。
Man page of SUDO
スマート!
(副作用として、 すべての環境変数が引き継がれる点に注意。rbenvとか使ってるときになにか起きちゃうかも)
他の人の解(管理者アカウントがある場合)
ぐぐると出てくる、もう1つの系統。
穀風: proxy 越しに sudo を使う
http://kokufu.blogspot.jp/2012/05/proxy-sudo.html
管理者権限で、visudoを用いて/etc/sudoersに以下を追加する。
Defaults env_keep="http_proxy"
Defaults env_keep+="https_proxy"
これで自動的に環境変数 http_proxy, https_proxyはsudoで実行されるコマンドに引き継がれるようだ。
参考文献
apt.confの書き方について参考にしました。
- sudoで環境変数を引き継ぎたい|ざる魂 http://mikio.github.io/article/2012/03/10_sudo.html
- 穀風: proxy 越しに sudo を使う http://kokufu.blogspot.jp/2012/05/proxy-sudo.html
もっといい方法を紹介されてました。
いつもお世話になっております。
蛇足
題名前半は 遠藤浩輝短編集(2)の『神様なんて信じていない僕らのために』を意識したのですが、あんまりうまくないですね。
題名後半は、書いていたらsudoと環境変数の話になっていたので付け足しました。