【Proxyの外に出れない僕達のために】Proxy 環境下で sudo add-apt-repository する方法【と、sudoとhttp_proxyのなんやかんや】

  • 34
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

おことわり

現象と自分の方法を試したのは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-repositoryapt.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の書き方について参考にしました。

もっといい方法を紹介されてました。

いつもお世話になっております。

蛇足

題名前半は 遠藤浩輝短編集(2)の『神様なんて信じていない僕らのために』を意識したのですが、あんまりうまくないですね。

遠藤浩輝短編集(2) (アフタヌーンKC)

題名後半は、書いていたらsudoと環境変数の話になっていたので付け足しました。