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