Чому програмне забезпечення встановлюється в / usr / lib?


11

Я вже декілька років використовую Linux-сервери і продовжую плутати стандарт ієрархії файлової системи. Зазвичай я можу жити з розгубленістю. Але тепер, коли я розробляю власне програмне забезпечення для Linux, мені потрібно зрозуміти, куди він повинен бути встановлений менеджерами пакетів.

Я був майже впевнений, що / opt - це ідеальне місце для моєї програми. Але після дослідження моєї файлової системи Debian я вже не впевнений: багато програмного забезпечення фактично встановлено в / usr / lib! Щоб назвати кілька: MySQL, MySQLWorkbench, Nautilus, Rythmbox ...

Згідно з FHS, / usr / lib повинен містити "Бібліотеки для програмування та пакунків" і "включає об'єктні файли, бібліотеки та внутрішні бінарні файли, які не призначені для виконання безпосередньо користувачами або скриптами оболонки" ( Дивіться тут ).

Багато програмного забезпечення, розташованого в / usr / lib мого сервера debian, - це не бібліотеки чи внутрішні бінарні файли, а повноцінні користувацькі програмні засоби!

Я все ще на шляху, щоб моя програма була встановлена ​​/ вимкнена. Але мені дуже хотілося б зрозуміти, чи правильно це і, перш за все, чому .

Заздалегідь дякую за добрі поради,

Ерік.


2
Точкова перевірка, з чого я можу сказати, MySQLWorkbench встановлює лише бібліотеки під / usr / lib. Що змушує вас думати, що в / usr / lib є "повноцінне виконуване користувачем програмне забезпечення"?
Марк Вагнер

Фактичний ярлик, який знаходиться в меню програми, вказує на двійковий файл, розташований у / usr / lib, якщо я правильно пам'ятаю.
Eric MORAND

Ви здаєтеся розгубленими щодо того, де встановлено перераховане вами програмне забезпечення. Ось посилання на списки, якщо файли для MySQL та Nautilus. Зауважте, що файли розділені між / etc, / usr / bin, / usr / lib тощо, як FHS каже, що вони мають бути. packages.debian.org/wheezy/i386/mysql-server-5.5/filelist packages.debian.org/wheezy/i386/nautilus/filelist
Sciurus

Відповіді:


6

Справжнім ключем до розуміння стандарту Heirarchy Filesystem є те, що він розроблений з урахуванням мережевих файлових систем.

Для кожної машини однієї ОС, версії та архітектури ви можете поділитися / usr через NFS та встановити її.
/ usr встановлюється (повторно) після ініціалізації мережевого стека.

/var <-- local, r/w optimized
/usr <-- can be mounted over network, possibly even read-only!
/opt <-- local, read mostly
/etc <-- local, read mostly
/srv <-- local, r/w optimized

/home <-- either/or

Ви б не хотіли запропонувати посилання на локальні / віддалені та r - r / w стандарти?
Капітан Жирафа

Чи означає це, що для кожного сервера Linux або робочої станції в мережі може бути єдине "сховище" / usr?
Ерік МОРАНД

1
Це потребує певної роботи, але так, ви можете. Назад, коли жорсткі диски, де дорого це було нормою для будь-якого великого розкрутки.
Dan Garthwaite

@ eric-morand Від FHS: "/ usr є другим головним розділом файлової системи. / usr є доступним для доступу лише для читання. Це означає, що / usr має бути доступним для доступу між різними хостами, сумісними з FHS, і не слід записувати на . Будь-яка інформація, що залежить від хоста або змінюється залежно від часу, зберігається в іншому місці. " pathname.com/fhs/pub/fhs-2.3.html#THEUSRHIERARCHY
Dan Garthwaite

Уопс. Цей коментар був для @CaptainGiraffe
Dan Garthwaite

12

Різниця полягає в тому, що /usrпризначено для зберігання пакетів, встановлених як частина системи . Пакети, які ви отримуєте з сховищ Debian / Ubuntu, PPA тощо, перейдіть сюди. Хоча /optпризначений для роз'єднаних додатків сторонніх розробників, які не розповсюджуються через процес розподілу пакетів дистрибутива.

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


Спасибі. Зараз я не планую, щоб моє додаток було включено до офіційного сховища.
Eric MORAND

Що тоді з / usr / local? Або це дискретно
Аарон Коплі

@AaronCopley /usr/localне займався цим питанням. Але він призначений для стороннього програмного забезпечення, яке місцевий адміністратор збирає та встановлює.
Майкл Хемптон

Ось чому я запитав, чи це буде вважатися дискретним.
Аарон Коплі

2

Ви встановлюєте свої бібліотеки в <prefix>/lib, свої бінарні файли <prefix>/bin, файли заголовків, файли <prefix>/includeman у prefix/[share/]man, pkgconfig файли в <prefix>/lib/pkgconfigабо <prefix/share/pkgconfig, ваші cmake .m4 файли в<prefix>/share/aclocal

Тоді нехай менеджер пакунків вирішить префікс. Якщо ви розповсюджуєте rpm / deb самостійно, /usrце хороший вибір префікса.

./configure --prefix=~/.local/ Потрібно все-таки працювати, тому не ходіть кодуйте свій шлях куди завгодно!

Деякі бібліотеки вкладені в якийсь інший інструмент, який робить їх також виконуваними та зручними у використанні як бібліотека, але вони все ще є бібліотеками, а не у вашому $ PATH, тому гадаю, що їх потрібно вставити в / lib.


1

Я б запропонував уникати встановлення програми під / opt. Причина 1: У деяких дистрибутивах немає / вимкнено за замовчуванням Причина 2: / usr / lib - це стандартний шлях для бібліотек зручніше, якщо у вас є автономні програми, які ви встановлюєте вручну і хочете знати, де вони розташовані

Однією з причин того, що повноцінні виконуючі файли знаходяться під / usr / lib, може бути те, що вони використовуються в інших сценаріях. {Наприклад, bash-скрипти не можуть безпосередньо використовувати API. з цієї причини загальним трюком є ​​створення «обгортки» навколо цього api та наведення параметрів як аргументів сценарію}


2
Я не погоджуюсь. Якщо він хоче встановити в / opt, менеджер пакунків створить каталог, так що це не проблема. Також бінарні файли, встановлені в / usr / lib, є поганою ідеєю.
Вальтер

Дякую @Nikolaidis Fotis. Але в моєму випадку мій додаток не містить публічної бібліотеки і не буде використовуватися іншими програмами.
Ерік МОРАНД

0

Будь ласка, встановіть його в / opt.

Занадто багато додатків Linux роблять те саме, що розробники Windows робили в 90-х.

Дозволяє встановлювати наші речі в C: \ windows, щоб їх було легко і легко (і трохи швидше). Потім настало 15 років пекла DLL, оскільки різні програмні пакети потребували різних версій одних і тих же бібліотек (які в Windows не мали версій бібліотек).

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


4
Це не Windows. У нас є менеджери пакетів, які працюють, і це насправді не велика проблема.
Майкл Хемптон

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