Что такое установочный каталог, совместимый с FHS, для двоичных файлов, предоставляемых поставщиком?

1 ответ

Давайте посмотрим, как Debian описывает /opt:

/opt/ Add-on application software packages Pre-compiled, non ".deb" binary distribution (tar'ed..) goes here.

/opt/bin/ : Same as for top-level hierarchy

/opt/include/ : Same as for top-level hierarchy

/opt/lib/ : Same as for top-level hierarchy

/opt/sbin/ : Same as for top-level hierarchy

/opt/share/ : Same as for top-level hierarchy

На практике я встречал приложения, которые устанавливают .debпакеты и туда. В идеале /binи /usr/binдолжны быть зарезервированы, и особенно /bin, поскольку он определяется как

Essential command executable (binaries) for all users (e.g., cat, ls, cp) (especially files required to boot or rescue the system)

На практике часто можно увидеть, как пакеты Debian от третьих лиц устанавливаются в /usr/binв системах на основе Debian -, вероятно, потому, что /usr/binчасто является частью переменной PATH, поэтому его можно легко запустить через командная строка -. Вы упомянули :«Программное обеспечение, размещенное в /bin или /usr/bin, может быть перезаписано обновлением системы». Обновления предназначены для удаления определенных файлов в /usr/bin, так что да, они могут быть перезаписаны, но только если какой-то пакет .debявно не указал удаление ваших файлов (, как, например, я столкнулся с пакетом апплета, который удалял старую версию док, который я использую ). Обновления могут быть опасными, если ваше программное обеспечение зависит от конкретной двоичной версии , присутствующей в /usr/bin.

Еще одна распространенная вещь, которую я видел, это символическая ссылка :запись в /usr/binявляется символической ссылкой на другое место. Это может быть жизнеспособным вариантом для интеграции двоичного файла в $PATH, как вы упомянули в вопросе. Кроме того, это согласуется с тем, что указано в руководстве по упаковке Debian относительно FHS :

.

4.4. /usr/bin : Most user commands

4.4.1. Purpose

This is the primary directory of executable commands on the
system.

4.4.2. Requirements

There must be no subdirectories in /usr/bin.

Итак, если у вас есть приложение, которое ожидает подкаталоги (, такие как модуль Python с каталогами подмодулей ),наилучшей практикой является размещение приложения в другом месте(в случае Python , это /usr/lib/python*/dist-packagesкаталог )вместе с подкаталогами и создание символической ссылки на/usr/bin/my_binary

Еще одна интеграция $PATH, которую я видел у некоторых поставщиков, заключается в редактировании пользовательской переменной $PATHи добавлении ее к ~/.bashrc. (Да, это плохая практика, и я не поощряю ее -, просто констатирую тот факт, что я видел, как это делается ).

"Но разве этот каталог не нужно где-то регистрировать, чтобы избежать конфликтов с другими вендорами?" В упомянутой документации Debian ничего не говорится о регистрации каталога, поэтому ответ: не обязательно , но если вы хотите избежать конфликта, вы можете следовать схеме /opt/vendor/package-v-1.2/bin-, которая указать пакет и версию выпуска, а может быть и год.

0
28.01.2020, 03:57

Теги

Похожие вопросы