GNU Autotools: установка двоичных файлов в / bin, / sbin, / usr / bin и / usr / sbin, взаимодействие с --prefix и DESTDIR

Большинство пакетов, использующих autotools, являются утилитами пользовательского уровня или, по крайней мере, достаточно высокого уровня, чтобы полностью находиться под / usr, или достаточно низкого, чтобы быть полностью ниже / usr.

Я пишу пакет, который должен будет установить некоторые файлы в / bin, некоторые в / sbin, / usr / bin и / usr / sbin. Он заменяет несколько существующих двоичных файлов, которые традиционно размещаются в этих местах.

Также необходимо установить модуль PAM в / lib / security (и, очевидно, / usr / lib / security не будет работать).

Теперь проблема заключается в следующем: префиксом configure по умолчанию является / 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 также имеют фиксированное место установки.

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

6
задан Paweł Hajdan 29 December 2011 в 14:49
поделиться