Яка різниця між / etc та / usr / local / тощо


24

Я розробляю демон, якому потрібно зберігати багато даних програм, і я помітив, що в моїй системі (Fedora 15) є /usr/local/etcкаталог.

Я вирішив встановити свій демон /usr/local/bin, і мені потрібно місце для моїх конфігураційних файлів.

Я цього не бачив у Вікіпедії . Це нестандартно чи це насправді стандартне місце для програм, встановлених /usr/local/binдля зберігання конфігураційних файлів?

Причиною цього є те, що я хочу продати це на систему-адмінів, і отримати щось подібне неправильно - це не велика точка продажу ...


2
Будь-яка причина не ставити його прямо під /etc/myapp? Якби я шукав, щоб змінити конфігурацію, це було б перше місце, яке я б шукала.
new123456

@ new123456 - Мені особисто подобається ідея зберігати конфігураційні файли близько до двійкових (наприклад /usr/local/bin-> /usr/local/etc), але конвенції виграють у цьому випадку.
beatgammit

Відповіді:


24

/usr/localзазвичай для додатків, побудованих з джерела. тобто я встановлюю більшість моїх пакетів, використовуючи щось на кшталт apt, але якщо я завантажую нову версію чогось або фрагмента програмного забезпечення, що не є частиною мого розповсюдження, я б створив його з джерела і вклав би все в ієрархію `/ usr / local '.

Це дозволяє відокремити від решти розподілу.

Якщо ви розробляєте частина програмного забезпечення для інших, ви повинні розробити його так , що він може бути встановлений в будь-якому місці люди хочуть, але він повинен по замовчуванням регулярних FHS заданих системних каталогів , коли вони задають префікс бути /usr( /etc, /usr/binі т.д.)

тобто /usr/localдля вашого особистого використання, це не повинно бути єдиним місцем для встановлення вашого програмного забезпечення.

Уважно прочитайте FHS та використовуйте стандартні інструменти Linux, щоб дозволити побудову та встановлення вашого джерела в будь-якому місці, щоб розробники пакетів для різних дистрибутивів могли налаштувати їх, як потрібно для їх розповсюдження, а користувачі зможуть розмістити його, /usr/local якщо вони захочуть або звичайні системні каталоги, якщо вони бажають.


Так, я думаю, що налаштування добре, але мені було цікаво, чи /usr/local/etcстандартний для конфігураційних файлів для таких програм.
beatgammit

/ usr / local / etc - це те, що я міг би вибрати, якби я створив ваш демон з джерела, але / etc - це місце, яке хтось обрав би, якби він упакував ваш демон з debian або Ubuntu.
EightBitTony

4
Насправді стандарти GNU вимагають, щоб пакет був за замовчуванням для локального шляху, оскільки люди, що будують його з джерела, зазвичай не вказують, куди. Дистрибутиви змінять його на не локальний шлях, коли вони пакують / будують його.
psusi

@ psusi- Добре, я переконуюсь, що це буде за замовчуванням. Можливо, я виявлю, коли моя make install запускається як root або звичайний користувач. Якщо root, я за замовчуванням до / usr / local, якщо користувач, до домашнього каталогу користувачів. Я також додаю налаштування конфігурації.
beatgammit

@ EightBitTony- Чи є інші платформи, які мають різні умови? Я вже створюю різні сценарії запуску для різних платформ (upstart, systemd, init).
beatgammit

7

Дуже коротка відповідь

/ etc використовується вашою ОС для файлів конфігурації

/ usr / local / тощо можна використовувати для налаштування файлів вами та додатково встановленим програмним забезпеченням


4

/usr/local/etcрідко використовується у світі Linux. Але рішення про те, зберігання конфігураційних файлів в /etc, /usr/local/etcабо в інше місце , як правило , проводиться під час компіляції (і часто можуть бути перевизначені з допомогою опції командного рядка або змінної оточення). Насправді не важливо, що за замовчуванням при компілюванні, просто переконайтеся, що його легко встановити (як правило, це варіант, як слід --sysconfdir, після автозапуску). Якщо ваш демон демонтований для розповсюдження, виконується виконаний файл /usr/sbin(за замовчуванням має бути будівництво з джерела /usr/local/sbin) та конфігурація в /etc.

Зауважте, що /etcтут не місце для "безлічі даних програми". Це входить /var. За замовчуванням при побудові з джерела може бути /var/local/mydaemonабо /var/lib/mydaemon; Знову ж таки, немає жодної сильної конвенції як за замовчуванням, коли будується з джерела. Повинен бути спосіб змінити як за замовчуванням час компіляції (як правило, з configure --localstatedir), так і за замовчуванням (за допомогою параметра в файлі конфігурації, можливо, за допомогою параметра командного рядка або змінної середовища).


Чи є причина, чому /usr/local/etcйого не використовують дуже часто? Мені подобається ідея підтримувати конфігураційні файли на тому ж рівні файлової системи, що і двійкові.
beatgammit

1
@tjameson Я не знаю, чи є поширена причина. BSD робить це так. Як адміністратор, я так все конфігураційні файли (які повинні бути підкріплені і зміни контрольованих, в відміну від матеріалу , в binі libі так далі , які можна встановлювати заново) живуть в тому ж самому місці.
Жил 'ТАК - перестань бути злим'

1

Як користувач Arch, я б уникав / usr / local alltogether і використовував просто / etc для конфігурації. Встановлюючи з джерела, я б краще записати невеликий файл PKGBUILD, поки я перебуваю в ньому, і, можливо, в майбутньому завантажувати його в сховище Arch Arch (AUR), як для інших, так і для себе на інший комп'ютер. Судячи з кількості пакетів в AUR та швидкості, з якою вони створюються, я не один в роздумах цього. Це збільшує шанси для всіх, що пакет буде доступний замість того, щоб встановлювати його з джерела та мати можливість уникнути застарілих локацій, таких як / usr / local.

Debian також подобається ідея створити пакет джерела, а не встановлювати що-небудь в / usr / local, отже, утиліти, як checkinstall .

Створення пакета джерела, який ви хочете встановити, був би хорошим способом відстежити, де знаходяться файли, і переконайтесь, що деякі з них непослідовно не перезаписані іншим пакетом або іншим "зробити встановлення". Видалення за допомогою "make uninstall" - не вдале рішення. Інформація про встановлену версію - це ще одна річ, яку сучасні менеджери пакунків добре відстежують.

Я б просто відмовився / usr / local повністю. Це не вдале місце, щоб нічого не ставити, не для встановлення пакетів (загальні для всіх системні каталоги) і не для користувачів.

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