
私はファイアウォールの背後でaptを使用しているので、http_proxy
環境変数にプロキシを割り当てます。
私がしたことは、rootユーザーの合計に次の行を追加することでした.profile
(良い測定のため)。.bashrc
export http_proxy=http://proxyserver:8080
次の操作を行うと、エージェント値が正しく印刷されます。
sudo echo $http_proxy
ところでを呼び出すと、その変数がルートとして表示さsudo apt-get update
れないようです。http_proxy
プロキシを通過することは私がrootとしてsuするときにのみ期待どおりに機能するので、apt-get
明らかに変数を見ることができます。
私の質問は、上記のように、なぜsudo apt-get
変数を見ることができないのですか?です。
修正するただ呼び出すと、sudo echo
現在のユーザープロファイルに設定されている変数の値が反映されていることがわかりました。しかし、それにもかかわらず、対応するsudo apt-get
変数値を使用するとどうなりますか?
答え1
sudo apt-get
この場合は「動作しないようです」ではなく動作しているようですあなたがこれをするときsudo echo $http_proxy
。
シェルコマンドを入力すると、すべての変数とエイリアスがグローバル化され、拡張されます。今後実行されます。
これにより、より柔らかくsudo echo $http_proxy
なりますsudo echo http://proxyserver:8080
。
$http_proxy
表示されない理由は、apt-get
ディレクティブsudo
で明示的に許可された環境変数を除くすべての環境変数が消去されるためです。/etc/sudoers
env_keep
環境変数の処理方法を操作する方法sudo
(または一般に環境変数の処理方法)の詳細については、いいえ)はで見つけることができますman sudoers
。
答え2
これが私が決めたものなので、この場合のより良い解決策は、/etc/apt/apt.conf
プロキシの行を追加するように修正することです。
Acquire::http::Proxy "http://yourproxyaddress:proxyport";
システムはほぼ永久にプロキシの背後にあるので、http_proxy
環境変数を使用するよりも長期的に優れたソリューションです。
答え3
ああ、私はこのページで何かを見ました:
https://help.ubuntu.com/community/AptGet/Howto#Setting_up_apt-get_to_use_a_http-proxy
通常、sudoでapt-getを実行している場合は、/ etc / sudoersに次の明示的な設定を追加しない限り、最初にrootとしてログインする必要があります。
Defaults env_keep = "http_proxy https_proxy ftp_proxy"
これが必要なのは、sudo
すべての環境変数が意図的に消去されるためです。木礼したがって、基本的なセキュリティ対策としてホワイトリストに追加してください。
答え4
私の考えでは、sudoの「-E」オプションのみを使用する必要があると思います。
sudo -E echo $http_proxy