Чи повинен менеджер пакунків змінювати ваш файл .bashrc?


9

Я пишу пакет для чогось, що вимагає встановлення змінної середовища для правильного виконання. Чи повинен етап встановлення менеджера пакунків змінити середовище користувача або просто запропонувати користувачеві зробити це самостійно? Моя інтуїція була б останньою, але я бачу аргументи щодо першого.


7
Чи можете ви зробити так, щоб щось поводилося краще, усуваючи залежність від змінної середовища (наприклад, використовуючи замість цього конфігураційний файл)? .bashrcМені здається, що це було б кращим для упаковки хаків або маніпулювання .

Звичайно, але скажімо для цього питання, що зміна програми не є можливим.
Девід Кауден

1
Що робити, якщо користувач не працює bash? Є багато альтернативних оболонок, доступних із великою кількістю файлів запуску. Я серйозно пропоную знайти тут альтернативне рішення.
Жуль

10
Тому напишіть навколо нього обгортку. Див., Наприклад, tomcatдля правильного функціонування потрібно кілька змінних середовищ; всі вони встановлені сценарієм запуску, який запускається замість того, щоб безпосередньо виконувати його бінарний файл.
Жуль

1
@Vality Я знаю. Пропозиція Жюля вже запропонована. Мені притаманне пишно - глузую з кругової логіки, яка спочатку стверджує, що я маю рішення з агностиком оболонки, а потім продовжую пропонувати використовувати сценарій оболонки як рішення. Це жарт (;
Девід Коуден

Відповіді:


18

Чи повинен етап встановлення менеджера пакунків змінити середовище користувача або просто запропонувати користувачеві зробити це самостійно?

Ні. Установці пакетів ніколи не повинні торкатися нічого в домашній директорії для облікового запису, яким пакет не володіє. Пакети також повинні налаштувати себе так, що якщо вони встановлені, вони можуть бути використані без особливих зусиль з боку користувача. (Є виняткові випадки, коли ви цього не хочете робити, але їх небагато і далеко.)

У Unixy середовищі є місце для розміщення файлів конфігурації, які читаються кожного разу, коли користувач запускає оболонку входу. Для оболонок Bourne і C, ви можете вставити свою конфігурацію в /etc/profileі /etc/csh.cshrcвідповідно. (Не забудьте видалити його під час видалення.)

Багато систем також підтримують це за допомогою окремих файлів, що полегшує додавання та видалення бітів конфігурації без необхідності скидання тексту в якесь довільне місце в одному файлі. (Це також дає всі переваги щодо контролю та підзвітності, які ви отримуєте від менеджера пакунків.) Деякі дистрибутиви налаштовують на /etc/profileзчитування відповідності всіх файлів /etc/profile.d/*.sh.


1
Історично rcназва сценарію походить від CTSSruncom (Run Commands), але з тих пір розширилася за обсягом, щоб включити інші значення.
Джефрі Хантін,

1
@JeffreyHantin: Touché. Вилучено.
Blrfl

1
Ненавиджу продовжувати збирати, але profile.dне вбудований у баш, це гак, який зазвичай надають (як правило, база дистрибутива) /etc/profile. ;)
Джефрі Хантін

1
@JeffreyHantin: Досить правда, хоча критики мого використання слова "Unixy" не буде. :-)
Blrfl

14

Ні разу не прийнятно , щоб змінити користувач /homeструктуру з менеджера пакетів , якщо що модифікація не всі точки.

Основні підходи до цього:

  • Повідомте користувача, якого вони потребують для його налаштування.
  • Постачання за замовчуванням, тому це не потрібно
  • Упакуйте сценарій запуску, який відповідним чином встановлює значення
  • (Якщо дистрибутив його підтримує) Видаліть файл, експортуючи змінну середовища всередину /etc/profile.d. У деяких системах Linux всі сценарії в цьому каталозі розміщуються за допомогою програми за замовчуванням, тому ви можете сміливо встановити там змінну.

7

Запитання Чи повинен етап встановлення менеджера пакунків змінювати середовище користувача?

Відповідь ні. Неправильна ідея змінювати дані користувача, в цьому випадку .bashrc файл. Дані користувача слід вважати священними менеджером пакунків?

Запитання Чи повинен етап встановлення менеджера пакунків просто спонукати користувача зробити це самостійно?

Відповідь Це набагато приємніше рішення, але все ще не ідеально.

Я думаю, вам слід створити скрипт оболонки для обгортки, де ви можете встановити необхідні змінні середовища і після цього запустити виконуваний файл.


Я теж розглядав цю ідею. Проект молодий і дістанеться до того, коли це не повинно бути необхідним.
Девід Кауден

@ GlenH7 Я оновив свою відповідь. Сподіваємось, оновлена ​​відповідь більше відповіді, яку ви шукаєте.
Р Саху

@ GlenH7: Це питання, по суті, є проблемою XY: meta.stackexchange.com/questions/66377/what-is-the-xy-problem , де потреба в змінних середовища є справжньою проблемою, яку потрібно вирішити.
whatsisname

Крім того, пропозиція цієї відповіді створити скрипт для обгортки - єдина відповідь, яка буде працювати для всіх оболонок.
whatsisname

1
@MattThomason, що реалізація - це те, що спонукало мене насправді задати питання (;
Девід Коуден,

5

Вам не вистачає лісу за деревами. Очевидно, що користувачеві зручніше виконувати зміни середовища, але це також більш ризиковано та дещо інвазивно. Вам слід поєднувати найкраще з обох світів, запитуючи користувача, чи повинен інсталятор змінювати їх .bashrc, а іншим чином давати вказівки, як вони повинні це робити самостійно.


Дякую за пораду. Я ніколи раніше не писав публічний пакет і просто хочу переконатися, що я не роблю чогось табу.
Девід Кауден

Ось так сьогодні обробляється SDK хмари Google. Він запитує, чи бажаєте ви змінити файли запуску.
jmq

1

Ви припускаєте, що "користувач" є єдиним. Що станеться, якщо у мене в цій системі є тисячі користувачів?

Ви припускаєте, що ви навіть можете знайти домашній каталог користувача. Якщо користувачами керують, наприклад, LDAP, можливо, вам навіть не дозволять отримати список усіх дійсних користувачів. Домашні каталоги можуть бути не в / вдома; вони можуть бути динамічно встановлені з мережі. Домашній каталог користувача може бути зашифрованим, а ключ недоступним, поки вони не входили в систему.

У будь-якій можливій ситуації це неможливо зробити надійно. Використовуйте механізм дистрибутива для встановлення змінних середовищ для користувачів, коли вони входять або нерестуються оболонок. Якщо це не працює, напишіть обгортку. (Обгортка також може бути двійковим, якщо необхідно, для вирішення аргументу в коментарях).


0

Встановлення глобальної змінної в пакеті прийнятно, якщо це визначена вашим власним проектом (а це означає, що ім'я проекту є частиною імені змінної!). Навіть тоді не слід торкатися .bashrcфайлу користувача - замість цього слід додати скрипт до /etc/profile.d .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.