Почему программное обеспечение устанавливается в /usr/lib?

Я использую серверы Linux уже много лет, и меня по-прежнему смущает стандарт иерархии файловых систем. Обычно я могу жить в замешательстве. Но теперь, когда я разрабатываю свое собственное программное обеспечение для Linux, мне нужно понять, где оно должно быть установлено менеджерами пакетов.

Я был довольно уверен, что /opt был идеальным местом для моего приложения. Но после изучения моей файловой системы Debian я больше не уверен: на самом деле многие программы установлены в /usr/lib! Чтобы назвать несколько: MySQL, MySQLWorkbench, Nautilus, Rythmbox...

Согласно FHS, /usr/lib должен содержать "Библиотеки для программирования и пакетов" и "включает в себя объектные файлы, библиотеки и внутренние двоичные файлы, которые не предназначены для непосредственного выполнения пользователями или сценариями оболочки" ( см. Здесь).

Многие программные продукты, расположенные в / usr / lib моего сервера Debian, - это не библиотеки или внутренние двоичные файлы, а полноценные пользовательские исполняемые программы!

Я все еще на пути к тому, чтобы мое приложение было установлено в /opt. Но мне бы очень хотелось понять, правильно ли это, и, прежде всего, почему.

Спасибо заранее за ваши добрые советы,

Эрик.

5 ответов

Решение

Настоящим ключом к пониманию стандарта Heirarchy для файловой системы является знание того, что он разработан с учетом сетевых файловых систем.

Для каждой машины с той же ОС, выпуском и архитектурой вы можете поделиться /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

Разница в том, что /usr предназначен для хранения пакетов, установленных как часть системы. Пакеты, которые вы получаете из репозиториев Debian/Ubuntu, PPA и т. Д., Находятся здесь. В то время как /opt предназначен для независимых приложений сторонних производителей, которые не распространяются в процессе распространения пакета распространения.

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

Вы устанавливаете свои библиотеки в <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, чтобы люди могли лучше отслеживать, кто что установил.

Другие вопросы по тегам