web-dev-qa-db-ja.com

/ etc / environmentで変数を設定しても効果がない

私は/etc/environment

http_proxy=http://myproxy.net:12345

マシンを再起動した後、ログインして変数を確認します。

root@d6c44fa03243:/# echo $http_proxy
(empty)

なぜ変数が設定されないのですか?

注:これがDockerコンテナーであることを言及する必要がありますが、違いが生じる理由はわかりません。

編集

システムの詳細(Ubuntu 16.04.4 Xenial Xerus):

root@d6c44fa03243:/# uname -a
Linux d6c44fa03243 4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

root@d6c44fa03243:/# cat /etc/issue
Ubuntu 16.04.4 LTS \n \l

EDIT2

buntuドキュメント によると:

/ etc/environment

このファイルは、特にシステム全体の環境変数設定用です。これはスクリプトファイルではなく、1行に1つずつ割り当て式で構成されています。

6
dangonfast

UNIXツールは transparency を念頭に置いて構築されているため、grepの助けを借りて答えを見つけることができます。フルOSとコンテナーのどちらを使用していてもかまいません(後者は、透過的にするために必要なツールをインストールするために追加の手順を実行する必要がある場合があることを意味します)。

OSにgrepがインストールされていることを確認し、Sudo grep -R "/etc/environment" /etc/*を実行します。これにより、すべてのシステムスクリプトと構成が検索され、どのファイルがこのファイルを使用しているかがわかります。デフォルトのubuntu/xenial64 vagrantボックスでは、 このファイルを使用するスクリプトと構成 は、ほとんど/etc/init.d//etc/pam.d//etc/rc.*.d/にあります。

次の構成は、シェルで/etc/environmentの変数を設定する方法です。

/etc/pam.d/login /etc/pam.d/su /etc/pam.d/sshd

man pam_envから:

Pam_env PAMモジュールは、環境変数の(非)設定を可能にします。 ...

このモジュールは、個別の行(デフォルトでは/ etc/environment)に単純なKEY = VALペアを持つファイルを解析することもできます。 envfileフラグを使用して、解析するデフォルトファイルを変更し、readenvフラグをそれぞれ1または0に設定して、ファイルをオンまたはオフにできます。 ...

Dockerコンテナーで同様の検索を実行します。コンテナがpam_env.soを使用しているかどうかを確認できます。

おそらく最良の解決策は、起動プロセスで/etc/environmentから環境変数を作成することですが、そのアドバイスは、何を構築しているかを理解せずに提供されます。 `/etc/rc*.d/での使用はこれを達成する方法の良い例かもしれません。

ほとんどの人は@ ben-njeriのアドバイスに従い、 bash Shell のデフォルト構成ファイルに変数を設定します。

2
Raúl Cuza

構成、設定 /etc/profileまたは~/.bashrcまたは~/.bash_profileファイルは、新しいシェルが起動されるたびに変数をエクスポートします。

/etc/profileはシステム全体用で、その他は特定のユーザー用です。

最後に以下のような行を追加してください:

export http_proxy=”http://myproxy.net:12345”
export ftp_proxy=”http://myproxy.net:12345”
export https_proxy=”http://myproxy.net:12345"

したがって、シェルを起動するたびに変数がロードされ、使用できます。

0
Ben Njeri

Ubuntu 18.04でこの問題が発生しました(ありました)。私は/etc/environmentをまったく機能させることができませんでしたが、代わりに/etc/profile.d/のスクリプトを使用しました(ドキュメント here のとおり)、それ did動作しました。

詳細については、 私の答え から この関連する質問 を参照してください。それが役に立てば幸い :)

0
bszom