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

11

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

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

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

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

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

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

Эрик.

Эрик МОРАНД
источник
2
Выборочная проверка, насколько я могу судить, MySQLWorkbench устанавливает только библиотеки в / usr / lib. Что заставляет вас думать, что в / usr / lib есть «полноценное пользовательское исполняемое программное обеспечение»?
Марк Вагнер
Фактически ярлык, расположенный в меню приложения, указывает на двоичный файл, расположенный в / usr / lib, если я правильно помню.
Эрик МОРАНД
Вы, кажется, не понимаете, где установлено указанное вами программное обеспечение. Здесь приведены ссылки на списки файлов для 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 файловой системы является знание того, что он разработан с учетом сетевых файловых систем.

Для каждой машины с той же ОС, выпуском и архитектурой вы можете поделиться / 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
Требуется некоторая работа, но да, вы можете. Назад, когда жесткие диски были дорогими, это было нормой для любого большого выпуска.
Дэн Гартвейт
@ eric-morand От FHS: "/ usr является вторым основным разделом файловой системы. / usr - это общедоступные данные только для чтения. Это означает, что / usr должен быть доступным для разных хостов, соответствующих FHS, и не должен записываться в Любая информация, относящаяся к конкретному хосту или изменяющаяся со временем, хранится в другом месте. " pathname.com/fhs/pub/fhs-2.3.html#THEUSRHIERARCHY
Дэн Гартвейт,
Упс. Вышеупомянутый комментарий был для @CaptainGiraffe
Дэн Гартвейт
12

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

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

Майкл Хэмптон
источник
Благодарю. Сейчас я не планирую включать мое приложение в официальный репозиторий.
Эрик МОРАНД
Тогда как насчет / usr / local? Или это дискретно
Аарон Копли
@AaronCopley /usr/localне подходил для этого вопроса. Но он предназначен для стороннего программного обеспечения, которое локальный администратор компилирует и устанавливает.
Майкл Хэмптон
Вот почему я спросил, будет ли это считаться дискретным.
Аарон Копли
2

Вы устанавливаете свои библиотеки <prefix>/lib, свои двоичные файлы <prefix>/bin, свои заголовочные файлы , справочные <prefix>/includeстраницы prefix/[share/]man, файлы pkgconfig <prefix>/lib/pkgconfigили <prefix/share/pkgconfigсвои файлы .make cmake в<prefix>/share/aclocal

Затем пусть менеджер пакетов определится с префиксом. Если вы сами распространяете rpm / deb, /usrэто хороший выбор префикса.

./configure --prefix=~/.local/ Должно все еще работать, так что не пытайтесь запрограммировать свой путь в любом месте, пожалуйста!

Некоторые библиотеки включены в какой-то другой инструмент, который делает их также исполняемыми и пригодными для использования в качестве библиотеки, но они по-прежнему являются библиотеками, а не в вашем $ PATH, поэтому, я полагаю, можно поместить их в / lib.

Йенс Тиммерман
источник
1

Я бы посоветовал не устанавливать ваше приложение в / opt. Причина 1: в некоторых дистрибутивах по умолчанию отсутствует / opt Причина 2: / usr / lib - это стандартный путь к библиотекам {Если другим приложениям нужно использовать вашу библиотеку, вам нужно вручную добавить путь к библиотеке в / etc / ldconfig} / opt удобнее, когда у вас есть автономные приложения, которые вы устанавливаете вручную и хотите знать, где они находятся

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

Николайдис Фотис
источник
2
Я не согласен. Если он хочет установить в / opt, менеджер пакетов создаст каталог, так что это не проблема. Кроме того, двоичные файлы, установленные в / usr / lib, являются плохой идеей.
Уолтер
Спасибо @Nikolaidis Фотис. Но в моем случае мое приложение не содержит публичной библиотеки и не будет использоваться другими приложениями.
Эрик МОРАНД
0

Пожалуйста, установите его в / opt.

Слишком много приложений Linux делают то же самое, что разработчики Windows сделали в 90-х годах.

Давайте установим наш материал в C: \ windows, чтобы его было легко найти (и немного быстрее). Затем наступил 15-летний адский DLL, поскольку различным программным пакетам требовались разные версии одних и тех же библиотек (которые в Windows не имели версий этих библиотек).

Если вы не пишете реальное системное программное обеспечение, поместите его в / opt, чтобы люди могли лучше отслеживать, кто что установил.

Вальтер
источник
4
Это не Windows. У нас есть менеджеры пакетов, которые работают, и это не проблема.
Майкл Хэмптон
Если вы действительно беспокоитесь о том, что все находится в одном и том же дереве, посмотрите менеджер пакетов Nix . Лучший из обоих миров, если вы спросите меня.
TheSola10