Как лучше всего настроить общесистемные переменные среды в Linux?

26

Я просто хочу установить общесистемную переменную среды JAVA_HOMEдля всех пользователей, включая пользователя root .

Требования:

  • доступно для обычных пользователей
  • доступный для root
  • всегда загружен, не только для bash (gnome-терминал не запускает bash по умолчанию)
  • работать на Ubuntu, Debian и, возможно, Red Hat
  • здорово, если дополнение может быть легко написано
Сорин
источник
Для интерактивных оболочек проверьте это, попросите ветку ubuntu .
quickshiftin

Ответы:

26

Поскольку никто не добавил полный ответ, то это то, что я в настоящее время считаю лучшим, по крайней мере, для Ubuntu, но я готов адаптировать ответ для других * nix-платформ.

# **create**: /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/default-java

Другие варианты, которые уже рассматривались, но исключены:

  • /etc/environment работает, но его сложнее поддерживать, так как другие инструменты или люди могут его редактировать.
  • /etc/profile - так же, как и выше
Сорин
источник
11

В Debian / Ubuntu это будет / etc / environment

Я не знаю эквивалент Red Hat.

опред
источник
1
Я считаю, что / etc / environment устарела
Пэт Джеймс
@PatJames у вас есть больше информации об этом? Я пытался / etc / environment не загружается для пользователя root даже после перезагрузки компьютера.
сорин
@SorinSbarnea некоторая информация здесь: wiki.debian.org/Locale, указывающий, что / etc / environment больше не используется в более новых выпусках
Пэт Джеймс
1
Эта страница только говорит, что вы не должны, кроме как локализовать связанные переменные в /etc/environment. См. Также serverfault.com/a/584072/26218
поток
11

Я не понимаю, почему вы исключили / etc / profile. Это правильное местоположение.

dmourati
источник
9

Некоторые ответили, что они /etc/environmentзапрещены и / или больше не используются в Debian, и это (как в версии 7) неверно.

Файл фактически читается PAM - в частности pam_env(8), по умолчанию с envfileфлагом. На man-странице также указано это значение по умолчанию в разделе FILES.

Цитируемые вики (особенно локаль) просто утверждают, что переменные среды на основе локали теперь должны быть в /etc/profile. Их утверждение «(в более старых версиях Debian, также / etc / environment)» расплывчато и находится в контексте локалей.

Быстрый просмотр /etc/pam.dшоу:

root@box:/etc/pam.d# grep pam_env.so *
atd:auth        required        pam_env.so
cron:session       required   pam_env.so
cron:session       required   pam_env.so envfile=/etc/default/locale
login:session       required   pam_env.so readenv=1
login:session       required   pam_env.so readenv=1 envfile=/etc/default/locale
sshd:auth       required     pam_env.so # [1]
sshd:auth       required     pam_env.so envfile=/etc/default/locale
su:session       required   pam_env.so readenv=1
su:session       required   pam_env.so readenv=1 envfile=/etc/default/locale

Эти строки конфигурации являются аддитивными, и, поскольку первая отсутствует envfile, по умолчанию она имеет значение /etc/environment.

Все это, конечно, зависит от того, какой двоичный файл вы используете (для crondвхода в систему и т. Д.), Скомпилированный с PAM.

Наконец, это подразумевает, что другие системы, использующие PAM (например, RedHat), ведут себя так же, как это видно на соответствующей странице man.

lingfish
источник
2

Еще одно примечание: взгляните на среду модулей . Я использую это каждый раз, когда мне приходится предлагать сложную, версионную, саморасширяющуюся и сжатую среду UNIX десяткам или сотням пользователей. Он в основном используется в крупномасштабных многопользовательских средах высокопроизводительных вычислений. Использование его только для одной конкретной переменной, безусловно, чрезмерно сложно, но это делает потрясающую работу, когда вам нужно больше, чем несколько пакетов программного обеспечения и их окружение.

PFO
источник
1

/etc/profileдолжно сработать. Я проверил только сейчас, чтобы быть уверенным, положить export SOMETEST=1234на /etc/profileи после повторной регистрации echo $SOMETESTдал мне, 1234как ожидалось. Также изgnome-terminal

WK.
источник
1

/etc/enviromentне используется в последнем стабильном выпуске Debian. Как сказал Сорин С., рекомендуется создать свой собственный *.shфайл /etc/profile.d/для этой части. Смотрите https://wiki.debian.org/EnvironmentVariables

мыс
источник
0

Вы не можете использовать какие-либо конкретные файлы в этом случае. так....

/etc/profileбыло бы подходящим местом для этого в этом случае. Текущие вошедшие в систему пользователи должны получить новый сеанс входа в систему, но это не должно быть такой большой проблемой.

@ wk01: /etc/profileпо умолчанию не загружается нелогинной оболочкой. Вы .bashrc , вероятно, загружаете это ...

mober
источник