LINUX.ORG.RU
ФорумAdmin

Где сейчас можно выставить PATH в Debian 9?

 ,


1

1

Пишут, что в /etc/login.defs. Добавляю в ENV_SUPATH, ENV_PATH но работает только для рута. Раньше всё писалось в /etc/environment, но сейчас он пустой. Из https://wiki.debian.org/EnvironmentVariables ясно, что он его тупо перепишет на то, что там есть, а это, как я понимаю, не вариант. В bashrc ставить тоже не вариант. Куда его теперь можно ставить?

★★★★★

Последнее исправление: crutch_master (всего исправлений: 1)

Что значит «ENV_PATH работает только для рута»? ENV_PATH как раз для обычного пользователя.

TeopeTuK ★★★★
()
Ответ на: комментарий от crutch_master

С оболочной работает, если запускать из systemd сервис от имени пользователя, то не работает.

Ну запускай «сервис» как sh -l -c «path_to_service», если очень надо. Или просто обёрточный скриптик для запуска напиши.

Stanson ★★★★★
()
Ответ на: комментарий от TeopeTuK

То и значит, что

$ cat /etc/login.defs | grep ENV_PATH
# Three items must be defined:  MAIL_DIR, ENV_SUPATH, and ENV_PATH.
ENV_PATH	PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/my/local/bin

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:
А из systemd там вообще
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Долбаный бардак.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

Лучше наверно даже sh -l -c «exec path_to_service», чтоб в процессах лишнего не болталось.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 3)

Попробуй в ~/.config/environment.d/something.conf (VAR=value) - это для пользователя, чтоб и для рута работало, емнип, нужно куда-то в /etc/systemd/.

monday
()
Ответ на: комментарий от crutch_master

Ты знаешь, как добавить всем в PATH, чтобы при запуске systemd юнита это было видно?

Сорян, я вообще сторонюсь этой темы. Причём именно из-за такой вот «костыльности».

Deleted
()
Ответ на: комментарий от crutch_master

Да, и правда при изменении ENV_PATH путь при перелогине не меняется. Интересно. Правда, если у тебя шеллом выступает bash, то у него в /etc/profile путь перезаписывается. Но все равно странно, что настройки в /etc/login.defs не применяются...

TeopeTuK ★★★★
()
Ответ на: комментарий от crutch_master

запускать сервис

Используй абсолютные пути. Полагаться на $PATH в таких местах — говнокод.

anonymous
()
Ответ на: комментарий от TeopeTuK

Но все равно странно, что настройки в /etc/login.defs не применяются

Зайди в tty или запусти шелл как логин-шелл.

anonymous
()
Ответ на: комментарий от anonymous

Я не использую в юните. PATH нужен самому сервису.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от intelfx

$PATH
Colon-separated list of directories to use when launching executables. systemd uses a fixed value of /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin.

systemd uses a fixed value

fixed value

Ясно понятно, вопросов нет, сделаю через скрипт-обёртку. Рядом с этим будет смотреться нормально.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от intelfx

Что тебе сделать-то в итоге нужно?

Мне нужно установить глобально PATH для всех. Чтобы все сервисы его видели при их запуске от любых юзеров. Чтобы у всех юзеров он был одинаковый при запуске оболочки. Нужно выставить PATH глобально. Где сейчас выставляется PATH? Раньше это было в /etc/environment, сейчас он пустой.

crutch_master ★★★★★
() автор топика
Последнее исправление: crutch_master (всего исправлений: 4)
Ответ на: комментарий от crutch_master

Тогда тебе в

Variables globally configured for the service manager, using the DefaultEnvironment= setting in systemd-system.conf(5), the kernel command line option systemd.setenv= (see systemd(1)) or via systemctl set-environment (see systemctl(1)).

То, что ты процитировал — это дефолтный $PATH. Он захардкожен (точнее, задаётся при сборке), но это не означает, что его нельзя поменять в рантайме.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Чтобы все сервисы его видели при их запуске от любых юзеров.

Так пойдёт?

$ sudo systemctl set-environment PATH=/test:/usr/local/sbin:/usr/local/bin:/usr/bin

$ echo -e '#/bin/sh\necho Hello world' | sudo install -Dm755 /dev/stdin /test/test.sh

$ sudo systemd-run -t /usr/bin/env test.sh
Running as unit: run-u3704.service
Press ^] three times within 1s to disconnect TTY.
Hello world

$
intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 3)
Ответ на: комментарий от anonymous

Делаю в скрипт - костыль, делаю глобально - костыль. Так как?

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

Variables globally configured for the service manager, using the DefaultEnvironment= setting in systemd-system.conf(5), the kernel command line option systemd.setenv= (see systemd(1)) or via systemctl set-environment (see systemctl(1)).

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от Vsevolod-linuxoid

А как там задать PATH? Он же перепишет существующий, а кто-то при каком-нибудь обновлении захочет его поменять и сделает это раньше. Раньше я помню он точно исполнялся, я там прокси прописывал и делал подстановку, а сейчас, вроде как, нет.

crutch_master ★★★★★
() автор топика
Последнее исправление: crutch_master (всего исправлений: 2)
Ответ на: комментарий от intelfx

Это получится костыль, потому что в дебиан этого файла нет, а значит никто его не использует. Если PATH будет задан каким-нибудь другим способом, то из-за этого конфига он может затереться. Мне надо что-то типа PATH=$PATH:/my/another/path/ глобально.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

Это получится костыль

Да неужели? Кто бы мог подумать? Смирись, это неизбежность.

Deleted
()
Ответ на: комментарий от crutch_master

потому что в дебиан этого файла нет

Ну как нет, когда есть?

Если PATH будет задан каким-нибудь другим способом, то из-за этого конфига он может затереться.

С чего бы?

anonymous
()
Ответ на: комментарий от intelfx

Вопрос к знатокам: почему systemd в пользовательской сессии не читает хотя бы ~/.profile и /etc/profile. Хотя ответ вроде бы ясен: потому что придется грузить шелл. Если это табу - грузить шелл, то почему хотябы pam_env не использовать?

anonymous
()
Ответ на: комментарий от anonymous

С чего бы?

А с чего бы нет? Это же конфиг. Там везде конфиги. Там теперь делать PATH=$PATH:/path/ не модно.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Хотя ответ вроде бы ясен: потому что придется грузить шелл

Да.

Если это табу - грузить шелл, то почему хотябы pam_env не использовать?

А кто сказал, что «pam_env не использовать»?

intelfx ★★★★★
()
Ответ на: комментарий от anonymous

Хотя ответ вроде бы ясен: потому что придется грузить шелл.

По сути, эти файлы и имеют отношение только к шеллу.

почему хотябы pam_env не использовать?

Если нет аутентификации, то как это сделать?

anonymous
()
Ответ на: комментарий от crutch_master

Мне надо что-то типа PATH=$PATH:/my/another/path/ глобально.

Не получится.

Если PATH будет задан каким-нибудь другим способом, то из-за этого конфига он может затереться.

Нет, потому что /etc/systemd/system.conf имеет наивысший приоритет, в мане об этом написано.

Но как бы Debian на то и нужен, чтобы у тебя в середине релизного цикла ничего не менялось. Так что посмотри на текущий общесистемный PATH (systemctl show-environment), допиши к нему что тебе нужно и захардкодь.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от crutch_master

из-за этого конфига он может затереться

ну да, ну да, но

man systemd-system.conf
сообщает нам прямо противоположное.

novitchok ★★★★★
()
Ответ на: комментарий от anonymous

Ну как нет, когда есть?

Реально есть. Один хрен, им, очевидно, не пользуются, чтобы PATH выставлять.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от novitchok

Но его действительно затирает /etc/login.defs. При запуске сервиса и в шеле они совершенно разные.

$ systemctl show-environment
LANG=en_US.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

crutch_master ★★★★★
() автор топика
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от anonymous

Если нет аутентификации, то как это сделать?

Это какой-то неуместный вопрос. Если systemd (systemd --user) запустился от пользователя, то как он сделал это без аутентификации, кто этот не хороший член системы, который разрешил это?

anonymous
()
Ответ на: комментарий от anonymous

Если systemd (systemd --user) запустился от пользователя, то как он сделал это без аутентификации

Так же, как у тебя браузер запускается от пользователя.

anonymous
()
Ответ на: комментарий от anonymous

Так же, как у тебя браузер запускается от пользователя.

Этого нехорошего пользователя я знаю, он аутентифицировался для меня (кажись это уже шизофрения). А вот: почему какой-то хрен рулит системой от моего имени (не пройдя аутентификацию)? - это интересный вопрос.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.