Собрать bash (или альтернативный пакет Linux) с пользовательским именем двоичного файла/документа

Собрать bash (или альтернативный пакет Linux) с пользовательским именем двоичного файла/документа

Я пытаюсь собрать Bash 4.2 как пакет RPM для использования в системах Enterprise Linux 5, которые по умолчанию идут с 3.2.25. Это работает успешно, однако я хочу, чтобы обе версии сосуществовали в системе, чтобы избежать конфликтов с системным пакетом и позволить системным/другим скриптам продолжать использовать bash3, с которым они совместимы.

Мой план таков:

  • Переименуйте пакет в «bash4» и не допускайте конфликта с «bash» или укажите «sh».
  • Настройте bash для сборки с двоичным именем «bash4» и измените путь ко всем файлам документации или поддержки соответствующим образом.

Теоретически это просто, и Vim предлагает двоичный префикс/суффикс в своих скриптах конфигурации, однако bash, похоже, не имеет этой функции. Ближайший, который я нашел, это EXEEXT от automake, который обеспечивает поддержку исполняемых расширений (таких как .exe в Windows), но он на самом деле не предназначен для того, что я хочу сделать, и не решает проблему с документацией.

решение1

Хотя bashверсия autoconf (2.63) немного устарела (сентябрь 2008 г.), она поддерживает функции --program-transform-nameи --program-suffix. К сожалению, процесс сборки bash не использует эти функции какподробно описано в документации, а также не использует параметры, позволяющие обрабатывать страницы руководства во время сборки.

Поскольку количество файлов и изменений невелико, я рекомендую полуручной подход, т.е. написать небольшой скрипт для внесения изменений перед установкой. Вы можете использоватьустановитьсмотретьчтобы убедиться, что вы все перехватите во время установки, но bashна самом деле это довольно минимальная информация. (Кстати, я быстро просмотрел порты FreeBSD bash и патчи Debian bash, но никаких признаков подходящего исправления не обнаружил.)

Хотя это, в общем-то, интересный способ сломать сборки, выможетзлоупотребление EXEEXTздесь:

ac_cv_exeext=42 ./configure [...]
make
./bash42 -c 'echo $BASH_VERSION'
4.2.42(1)-release

поскольку все, что вам это спасло, это переименование, я действительно не рекомендую этого делать ;-)

Еще кое-что можно получить от:

./configure [...]
make -e Program=bash42

поскольку это также отражает ваши изменения в сгенерированном bashbugскрипте (хотя и не переименовывает его).

Связанный контент