Construa o bash (ou pacote Linux alternativo) com nome binário/doc personalizado

Construa o bash (ou pacote Linux alternativo) com nome binário/doc personalizado

Estou tentando construir o Bash 4.2 como um pacote RPM para uso em sistemas Enterprise Linux 5, que vêm por padrão com 3.2.25. Isso funciona com sucesso, no entanto, quero que ambas as versões coexistam no sistema, para evitar conflitos com o pacote do sistema e para permitir que o sistema/outros scripts continuem a usar o bash3 com o qual são compatíveis.

Meu plano é o seguinte:

  • Renomeie o pacote 'bash4' e não entre em conflito com 'bash' ou forneça 'sh'
  • Configure o bash para construir com o nome binário 'bash4' e altere o caminho de quaisquer documentos ou arquivos de suporte de acordo

Em teoria, isso é simples e o Vim oferece prefixo/sufixo binário em seus scripts de configuração, no entanto, o bash não parece ter esse recurso. O mais próximo que encontrei é o EXEEXT do automake, que fornece suporte para extensões executáveis ​​​​(como .exe no Windows), mas isso não foi realmente projetado para o que eu quero fazer, e não resolve o problema do documento.

Responder1

Embora a bashversão do autoconf (2.63) seja um pouco antiga (setembro de 2008), ela suporta os recursos --program-transform-namee . --program-suffixInfelizmente, o processo de construção do bash não usa esses recursos comodetalhado pela documentação, nem usa parâmetros para permitir o processamento das páginas de manual em tempo de construção.

Como o número de arquivos e alterações é pequeno, recomendo uma abordagem semi-manual, ou seja, escrever um pequeno script para fazer as alterações pré-instalação. Você pode opcionalmente usarinstalar relógiopara ter certeza de que você capturou tudo durante a instalação, mas bashna verdade é mínimo. (FWIW, dei uma olhada rápida nas portas bash do FreeBSD e nos patches bash do Debian, nenhum sinal de uma correção adequada.)

Embora geralmente seja uma maneira interessante de quebrar compilações, vocêpodeabuso EXEEXTaqui:

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

já que tudo que salvou foi uma renomeação, eu realmente não recomendo ;-)

Há um pouco mais a ganhar com:

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

pois isso também reflete sua alteração no bashbugscript gerado (embora não o renomeie).

informação relacionada