Встановлення змінної в / etc / Environment не впливає


5

У мене є таке /etc/environment:

http_proxy=http://myproxy.net:12345

Після перезавантаження машини я входжу в систему і перевіряю змінну:

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

Чому змінна не встановлена?

Примітка. Я мушу зазначити, що це контейнер для докерів, хоча я не бачу, чому це змінило б значення.

EDIT

Детальніше про систему ( 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

Відповідно до документації Ubuntu :

/ тощо / навколишнє середовище

Цей файл призначений спеціально для системних параметрів змінної середовища. Це не файл скриптів, а складається з виразів призначення, по одному на рядок.


Чи має значення додавання рядка до /etc/profile?
nKn

1
@nKn Я хочу, щоб це була активною системою, не лише для сеансів оболонки ( superuser.com/a/664237/94612 ). Але перш ніж я навіть подумаю про обхідні шляхи, я хотів би зрозуміти, що відбувається. Чому його /etc/environmentне оцінюють?
dangonfast

У відповідності з цією відповіддю ( superuser.com/a/664236 ): /etc/environment is not part of POSIX, it belongs to PAM (Pluggable Authentication Module), and only programs compiled with PAM support are able to use it (primarily login systems, which subsequently start the shell or user environment). This means it isn't even read by your shell..
nKn

1
@nKn Що якось суперечитьThis file is specifically meant for system-wide environment variable settings
dangonfast

Відповіді:


2

Оскільки інструменти UNIX створені з урахуванням прозорості , відповідь ви можете знайти за допомогою grep. Не має значення, чи працюєте ви з повноцінною ОС або контейнером (пізніше це означає, що вам, можливо, доведеться зробити кілька додаткових кроків, щоб встановити необхідні інструменти, щоб речі стали прозорими).

Перевірте, чи grepвстановлено ви в ОС і запустіть sudo grep -R "/etc/environment" /etc/*. Це дозволить здійснити пошук усіх системних скриптів та конфігурацій, щоб побачити, які з них використовують цей файл. У вікні бродячого ubuntu / xenial64 за замовчуванням сценарії та конфігурації, які використовують цей файл, в основному знаходяться у /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 дозволяє (не) встановити змінні середовища. ...

Цей модуль також може розібрати файл з простими парами KEY = VAL в окремих рядках (/ etc / environment за замовчуванням). Ви можете змінити файл за замовчуванням для розбору за допомогою прапора envfile та включити його чи вимкнути, встановивши прапор readenv на 1 або 0 відповідно. ...

Зробіть аналогічний пошук у вашому контейнері докера. Ви можете перевірити, чи використовується ваш контейнер pam_env.so.

Швидше за все, найкращим рішенням є те, щоб ваш процес запуску створював змінні середовища, /etc/environmentале ця порада дається без розуміння того, що ви будуєте. Використання в `/etc/rc*.d/ може бути хорошими прикладами для цього.

Більшість людей дотримуються порад @ ben-njeri та встановлюють змінні файли конфігурації за замовчуванням для оболонки bash .


Це відмінна відповідь. Діяння sudo grep -r /etc/environmentдопомогло мені зрозуміти, що мені потрібно змінити, /etc/pam.d/xrdp-sesmanщоб читати сесії xrdp /etc/environment.
wisbucky

0

Налаштування /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

У мене була (була) ця проблема на Ubuntu 18.04. Я взагалі не міг дістатися /etc/environmentдо роботи, але використав сценарій /etc/profile.d/замість цього (як це зафіксовано тут ), і це спрацювало.

Для отримання додаткової інформації дивіться мою відповідь на це пов'язане питання . Сподіваюся, це допомагає :)


2
Хоча це посилання може відповісти на питання, краще включити сюди суттєві частини відповіді та надати посилання для довідки. Відповіді лише на посилання можуть стати недійсними, якщо пов’язана сторінка зміниться. - З огляду
Дейв М

@DaveM Зверніть увагу, що тут була включена істотна частина відповіді, і що я посилаюсь на партнерський сайт StackExchange. Я намагався зробити відповідь трохи більш зрозумілою з точки зору того, що працювало, що посилання є для отримання додаткової інформації, і додав ще одне посилання (хе).
bszom
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.