Я использую серверы Linux уже много лет, и меня все время сбивает с толку Стандарт иерархии файловой системы. Обычно я могу жить в замешательстве. Но теперь, когда я разрабатываю собственное программное обеспечение для Linux, мне нужно понять, куда его должны установить менеджеры пакетов.
Я был почти уверен, что / opt - идеальное место для моего приложения. Но после исследования моей файловой системы Debian я больше не уверен: многие программы фактически установлены в / usr / lib! Назову несколько: MySQL, MySQLWorkbench, Nautilus, Rythmbox ...
Согласно FHS, / usr / lib должен содержать «библиотеки для программирования и пакетов» и «включает объектные файлы, библиотеки и внутренние двоичные файлы, которые не предназначены для непосредственного выполнения пользователями или сценариями оболочки» (Посмотреть здесь).
Многие программы, расположенные в / usr / lib моего сервера debian, не являются библиотеками или внутренними двоичными файлами, а являются полноценными программами, исполняемыми пользователем!
Я все еще собираюсь установить свое приложение в / opt. Но мне очень хотелось бы понять, правильно ли это и, прежде всего, Зачем.
Заранее спасибо за ваши добрые советы,
Эрик.
Разница в том, что /usr
предназначен для хранения установленных пакетов как часть системы. Пакеты, которые вы получаете из репозиториев Debian / Ubuntu, PPA и т. Д., Можно найти здесь. Пока /opt
предназначен для разукрупненных сторонний приложения, которые не распространяются через процесс распространения пакетов дистрибутива.
Если вы распространяете пакеты .deb или .rpm с целью в конечном итоге включения вашего программного обеспечения в официальные репозитории, вам следует установить их на /usr
. В противном случае установите в /opt
. В любом случае ваше приложение должно быть скомпилировано для запуска в любом произвольном месте (например, с помощью автоинструментов GNU).
Настоящий ключ к пониманию стандарта иерархии файловой системы - это знание того, что он разработан с учетом сетевых файловых систем.
Для каждой машины с одной и той же ОС, выпуском и архитектурой вы можете совместно использовать / 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
Вы устанавливаете свои библиотеки в <prefix>/lib
, ваши двоичные файлы в <prefix>/bin
, ваши файлы заголовков в <prefix>/include
, страницы руководства в prefix/[share/]man
, файлы pkgconfig в <prefix>/lib/pkgconfig
или <prefix/share/pkgconfig
, ваши файлы cmake .m4 в <prefix>/share/aclocal
Затем позвольте менеджеру пакетов выбрать префикс. Если вы сами распространяете rpm / deb, /usr
хороший выбор для приставки.
./configure --prefix=~/.local/
Должен по-прежнему работать, поэтому, пожалуйста, никуда не прописывайте свой путь!
Некоторые библиотеки обернуты в какой-то другой инструмент, который делает их также исполняемыми и пригодными для использования в качестве библиотеки, но они по-прежнему являются библиотеками, а не в вашем $ PATH, поэтому, я думаю, их можно поместить в / lib.
Я бы посоветовал не устанавливать ваше приложение в / opt. Причина 1: в некоторых дистрибутивах по умолчанию отсутствует / opt. Причина 2: / usr / lib - стандартный путь для библиотек. {Если другим приложениям необходимо использовать вашу библиотеку, вам нужно вручную добавить путь к библиотеке в / etc / ldconfig} / opt удобнее, когда у вас есть автономные приложения, которые вы устанавливаете вручную, и вы хотите знать, где они находятся
Одной из причин, по которой полнофункциональные исполняемые файлы находятся в / usr / lib, может быть то, что они используются из других скриптов. {Например, сценарии bash не могут напрямую использовать API. по этой причине распространенным приемом является создание "оболочки" вокруг этого API и передача параметров в качестве аргументов скрипта}
Пожалуйста, установите его в / opt.
Слишком много приложений для Linux делают ту же марку, которую разработчики Windows создали в 90-х годах.
Давайте установим наш материал в C: \ windows, чтобы его было просто и легко найти (и немного быстрее). Затем наступило 15 лет ада DLL, так как разным программным пакетам требовались разные версии одних и тех же библиотек (которые в Windows не поддерживали версии библиотек).
Если вы не пишете реальное системное программное обеспечение, поместите его в / opt, чтобы люди могли лучше отслеживать, кто что установил.