Я пишу пакет для чего-то, что требует правильной установки переменной среды. Должен ли шаг установки диспетчера пакетов изменить среду пользователя или просто предложить пользователю сделать это самостоятельно? Моя интуиция была бы второй, но я вижу аргументы для первой.
installer
environment
package-managers
Дэвид Кауден
источник
источник
.bashrc
Я думаю, что это было бы предпочтительнее, чем хакерство или хакерство .bash
? Есть много альтернативных оболочек, доступных с большим количеством файлов запуска. Я серьезно предлагаю найти здесь альтернативное решение.tomcat
что для правильной работы требуется несколько переменных среды; они все устанавливаются сценарием запуска, который запускается вместо запуска его двоичного файла напрямую.Ответы:
Ни. Установщики пакетов никогда не должны трогать что-либо в домашнем каталоге для учетной записи, которой пакет не принадлежит. Пакеты также должны настраиваться так, чтобы, если они установлены, их можно было использовать без особых усилий со стороны пользователя. (Есть исключительные случаи, когда вы не хотите этого делать, но их мало и далеко.)
В средах Unixy есть место для размещения файлов конфигурации, которые читаются всякий раз, когда пользователь запускает оболочку входа в систему. Для оболочек Bourne и C вы можете вставить свою конфигурацию в
/etc/profile
и/etc/csh.cshrc
соответственно. (Не забудьте удалить его при удалении.)Многие системы также поддерживают это, используя отдельные файлы, что упрощает добавление и удаление фрагментов конфигурации без необходимости помещать текст в произвольное место в одном файле. (Он также дает вам все преимущества управления и подотчетности, которые вы получаете от менеджера пакетов.) Некоторые дистрибутивы будут настраивать
/etc/profile
чтение всех файлов в соответствии/etc/profile.d/*.sh
.источник
rc
что имя сценария происходит от CTSSruncom
(команды запуска), но с тех пор расширило сферу действия, включив в него другие значения.profile.d
не встроен в bash, обычно это крюк (обычно основа дистрибутива)/etc/profile
. ;)Ни разу не приемлемо , чтобы изменить пользователь
/home
структуру из менеджера пакетов , если что модификация не все точки.Основными подходами к этому являются:
/etc/profile.d
. В некоторых системах Linux все сценарии в этом каталоге поставляются с установкой оболочки по умолчанию, поэтому вы можете смело устанавливать переменную там.источник
Вопрос Должен ли шаг установки менеджера пакетов изменять среду пользователя?
Ответ Нет. Плохо изменять данные пользователя, в данном случае файл .bashrc. Данные пользователя должны считаться священными менеджером пакетов?
Вопрос Должен ли этап установки диспетчера пакетов просто предложить пользователю сделать это самостоятельно?
Ответ. Это гораздо более приемлемое решение, но все же не идеальное.
Я думаю, что вы должны создать сценарий оболочки оболочки, где вы можете установить необходимые переменные окружения, и после этого запустить исполняемый файл.
источник
Ты скучаешь по лесу за деревьями. Очевидно, что удобнее выполнять изменения среды для пользователя, но это также более рискованно и несколько агрессивно. Вы должны объединить лучшее из обоих миров, спросив пользователя, должен ли установщик изменить их
.bashrc
, и в противном случае дать инструкции, как они должны это сделать сами.источник
Вы предполагаете, что «пользователь» является единственным. Что произойдет, если в этой системе будут тысячи пользователей?
Вы предполагаете, что можете даже найти домашний каталог пользователя. Если управление пользователями осуществляется, например, с помощью LDAP, вам может быть даже не разрешено получать список всех действительных пользователей. Домашние каталоги не могут быть в / home; они могут быть динамически смонтированы из сети. Домашний каталог пользователя может быть зашифрован, а ключ недоступен, пока он не вошел в систему.
Нет способа сделать это надежно в любой возможной ситуации. Используйте механизм дистрибутива для установки переменных среды для пользователей, когда они входят в систему или порождают оболочки. Если это не сработает, напишите обертку. (Оболочка также может быть бинарной, если необходимо, для адресации аргумента в комментариях).
источник
Установка глобальной переменной в пакете допустима, если она определена вашим собственным проектом (и это означает, что имя проекта является частью имени переменной!). Даже тогда вы не должны трогать
.bashrc
файл пользователя - вместо этого вы должны добавить скрипт в /etc/profile.d .источник