Большинство пакетов, использующих Autotools, являются утилитами уровня пользователя или, по крайней мере, достаточно высокого уровня, чтобы быть полностью ниже /usr
, или достаточно низкого, чтобы быть полностью ниже /usr
.
Я пишу пакет, который должен установить некоторые файлы в /bin
, некоторые в /sbin
, /usr/bin
и /usr/sbin
. Он заменяет несколько существующих двоичных файлов, которые традиционно размещаются в этих местах.
Также необходимо установить модуль PAM в /lib/security
(и, очевидно, /usr/lib/security
не сработает).
Теперь проблема в том, что префикс конфигурации по умолчанию выглядит как /usr/local
. Я могу управлять этим значением по умолчанию в моем файле configure.ac
. По крайней мере, в Gentoo Linux по умолчанию стоит --prefix=/usr
. Это проблема, потому что она переопределяет любые значения по умолчанию, которые я указал в своем configure.ac
.
Я кратко рассмотрел, как другие подобные пакеты справляются с этой проблемой. Вот мои выводы:
- bash-4.1, кажется, устанавливается в
/usr/bin
, а скрипты сборки дистрибутива перемещают двоичный файл bash в/bin
- Linux-PAM имеет хаки в
configure.ac
, так что если префикс/usr
, он будет использовать/sbin
и/lib
для некоторых своих файлов. Он также устанавливает префикс по умолчанию/usr
. Я не уверен, что произойдет, если пользователь передаст другой--prefix
. shadow-utils
установитеexec_prefix
на""
, если префикс/usr
. Затемbin_PROGRAMS
ссылается на/bin
, аubindir
объявляется указателем на${prefix}/bin
, так чтоubin_PROGRAMS
ссылается на/usr/bin
.
Мои вопросы:
- Каковы значения по умолчанию для
--prefix
в других дистрибутивах? Могу ли я разумно предположить, что это всегда/usr
? На данный момент меня интересует только Linux, а не BSD. - Какое из приведенных выше решений кажется самым чистым? Вы видите лучшие решения?
- Каковы потенциальные проблемы с вышеуказанными решениями? Есть ли какие-то решения этих проблем?
- Я в порядке с установкой всего в
/bin
и созданием символических ссылок совместимости. Делает ли это проблему проще? - Существует ли какая-либо другая общая система сборки, приемлемая для низкоуровневых системных утилит, которая лучше соответствовала бы моим требованиям?
Не стесняйтесь просить разъяснения того, что я пытаюсь сделать. Обратите внимание, что если я хочу сохранить совместимость с тем, что я заменяю, если раньше поставлялись двоичные файлы A и B, один в /sbin
и один в /usr/bin
, я думаю, что мне просто нужно поставить замены в этих местах или, по крайней мере, иметь символические ссылки. Модули PAM также имеют фиксированное место установки.
Очевидно, что я поддержу любой полезный ответ. Я «принятый ответ». Я в основном ищу совет «что мне делать», какое самое чистое решение проблемы и, если применимо, обсуждение вариантов и недостатков, плюсов и минусов.