Compilando e Instalando Pacotes de Programas para Linux

Mendel Cooper --- http://personal.riverusers.com/~thegrendel/

v1.91, 27 de Julho de 1999

 


Este é um guia compreensivo para compilação e instalaão de distribuições de programas "genéricos" UNIX para Linux. Além disso, cobre um pouco sobre pacotes "rpm" e "deb" pré-compilados.


 

1. Introdução

 

2. Extraindo arquivos

 

3. Using Make

 

4. Prepackaged Binaries

 

5. Termcap and Terminfo Issues

 

6. Backward Compatibility With a.out Binaries

 

7. Troubleshooting

 

8. Final Steps

 

9. First Example: Xscrabble

 

10. Second Example: Xloadimage

 

11. Third Example: Fortune

 

12. Fourth Example: Hearts

 

13. Fifth Example: XmDipmon

 

14. Where to Find Source Archives

 

15. Final Words

 

16. References and Further Reading

 

17. Credits


1. Introdução

Muitos pacotes de programas para os vários sistemas UNIX e Linux vêm comprimidos em arquivos-fonte. Este mesmo pacote pode ser compilado para rodar em diferentes arquiteturas de destino, e isto livra o autor do trabalho de produzir múltiplas versões. Uma única distribuição de um programa pode, desta forma, rodar em vários tipos de máquina, seja Intel, DEC Alpha, RISC, seja uma estação de trabalho ou até um mainframe. Infelizmente, isso coloca a responsabilidade da compilação e instalação do programa no usuário, o administrador de fato do sistema, o cara que está na frente do teclado — você. Entretanto, o processo não chega nem perto de ser aterrorizante ou misterioso como parece, conforme este guia irá demonstrar.


2. Extraindo arquivos

Você baixou ou adquiriu por outra maneira um pacote de software. Geralmente ele é arquivado (tar) e comprimido (gzip) no formato tar.gz ou tgz (também conhecido como tarball). Primeiramente, copie o arquivo para a sua pasta de trabalho. Depois extraia. O comando apropriado para isto é tar xzvf nomedoarquivo, onde nomedoarquivo é o nome do arquivo do software. O processo de extração usualmente aloca os arquivos apropriados em subpastas criadas para este fim. Note que se um pacote tem seu nome com o sufixo .Z, o procedimento acima também serve, embora executando o uncompress para tanto, sendo que o comando tar xvf também serve para este último caso. Você pode obter uma prévia dos resultados desse processo pelo comando tar tzvf, que lista os arquivos contidos no pacote, sem extraí-los.

O método acima para extrair tarballs equivale ao seguinte::

(O hífen está presente para que o comando tar receba seus valores de entrada do stdin.) Ou seja, o gzip extrairá o arquivo tar e o nome do arquivo tar resultante da extração irá assumir o lugar do hífen.

Arquivos-fonte no novo formato bzip2 (.bz2) podem ser extraídos pelo comando bzip2 -cd filename | tar xvf -, ou, mais simplesmente pelo tar xyvf nomedoarquivo, assumido o tar em sua versão padrão. Debian Linux usa uma versão diferente do tar, escrita por Hiroshi Takekawa, para a qual as opções -I, --bzip2, --bunzip2 e os comandos bunzip2 -c nomedoarquivo | tar xvf - e tar xjvf nomedoarquivo funcionam particularmente.

[Muito obrigado a R. Brock Lynn e Fabrizio Stefani pelas correções e atualizações das informações acima.]

 

 

Às vezes, o arquivo comprimido precisa ser extraído e instalado pelo diretório incial do usuário, ou porventura outro certo diretório como /, /usr/src, ou /opt, conforme informado no config do pacote. Se você obter uma mensagem de erro ao tentar extrair um arquivo, essa pode ser a razão. Portanto, leia os documentos do pacote, em especial os arquivos README e/ou Install, se presentes, e edite os arquivos config e/ou Makefiles se necessário, de acordo com as instruções de instalação. Observe que em regra você não deve alterar o arquivo Make, pois isto pode ter consequências imprevisíveis. A maior parte dos pacotes de softwares permitem automatizar todo esse processo executando o comando make install para colocar os bínários em seus endereços apropriados.

 

 

 

Ocasionalmente, você pode precisar atualizar ou incorporar bug fixes em arquivos-fonte não comprimidos usando um arquivo patch ou diff que liste as mudanças. Os arquivos doc e/ou README podem informa se é esse o caso. The normal syntax for invoking Larry Wall's powerful patch utility is patch < patchfile.

Agora você pode proceder ao estágio de compilação.

 

 

 

 


3. Usando o Make

O Makefile é a chave para o processo de compilação. Em sua forma mais simples, um Makefile é um script para compilação dos "binários", que são as partes executáveis de um pacote. O Makefile pode também oferecer uma forma de atualização do pacote de software sem a necessidade de recompilar cada arquivo-fonte em si, mas isso é uma outra história (outro artigo).

No mesmo ponto, o Makefile faz carregar o cc ou o gcc. Isto é atualmente um pré-processador, um compilador de C (ou C++), e um linker, invocados nessa ordem. Este processo converte o arquivo-fonte em binários, os atuais executáveis.

Geralmente se invoca o make digitando make. Isto, em geral, compila todos os arquivos executáveis necessários para o pacote em questão. Contudo, o make também pode realizar outras tarefas, como instalar os arquivos em seus diretórios apropriados (make install) ou remover object-files velhos (make clean). O comando make -n permite prever o processo de compilação, mostrando todos os comandos que serão desencadeados pelo make, porém sem executá-los.

 

Apenas sofwares simplistas usam um Makefile genérico. Instalaçãoes mais complexas requerem que o makefile seja editado de acordo com a localização das bibliotecas, arquivos e recursos particulares da máquina.ccording to the location of libraries, include files, and resources on your particular machine. Isto é especialmente o caso quando a compilação necessita instalar as bilbliotecas X11. Os arquivos Imake e xmkmf realizam essa tarefa.

Um Imakefile é um Makefile "modelo". O utilitário imake constrói um Makefile apropriado para o sistema a partir de um arquivo Imakefile. Na maioria dos casos, entretanto, você irá executar o xmkmf, um shell script que invoca o imake, um front end ppara isso. Verifique o arquivo README ou o arquivo INSTALL incluso no pacote para instruções específicas. (Se, depois de extraído o pacote, houver um arquivo Imake presente no diretório base, this is a dead giveaway that xmkmf should be run.) Leia as man pages do Imake e do xmkmf para uma análise mais detalhada do procedimento.

Esteja ciente de que o xmkmf e o make devem ser invocados coomo root, especialmente queando se executa o make install para mover os binários para o diretório /usr/bin ou /usr/local/bin. Usando o make como usuário ordinário, sem privilégios de root, resultará em mensagens de erro indicando acesso negado à escrita porque lhe falta permissões para a escrita nos diretórios do sistema. Verifique também se os binários criados tem as permissões próprias para execução para você e outros usuários.

A invocação do xmkmf usa o arquivo Imake para compilar um novo Makefile apropriado para o sistema. Normalmente, você deve invocar o xmkmf com o argumento -a, para que automaticamente sejam oexecutados os comandos make Makefiles, make includes, e make depend. Isto estabelece as variáveis e define as localizações das bibliotecas para o compilador e para o linker. Às vezes, possa ser que não haja nenhum arquivo Imake. Em vez disso, haverá um arquivo INSTALL ou um script configure, que atendem à essa mesma proposta. Observe que se você for executar o configure, este deve ser invocado como ./configure para garantir que o script configure do diretório atual será executado. Na maioria dos casos, o arquivo README explicará o procedimento de instalação.

Geralmente é uma boa ideia visualizar o Makefile que xmkmf ou algum dos scripts de instalaçao geram. O Makefile normalmente irá ser o correto para o seu sistema, porém ocasionalmente você deverá fazer algumas correções manualmente.

 

A instalação dos binários recém-compilados nos diretórios adequados do sistema é geralmente uma questão de executar o comnado make install como root. Os diretórios usuais dos binários gerais do sistema em distribuição Linux modernas são /usr/bin, /usr/X11R6/bin, e /usr/local/bin. O diretório preferido dos pacotes mais novos é /usr/local/bin, já que mantém separados os binários que não são parte da instalação Linux original.

Pacotes originalmente feitos para versões comerciais do UNIX podem tentar instalar no diretório /opt ou algum outro pouco familiar. Isto com certeza resultará num erro de instalação caso o diretório pretendido para a instalção não exista. A forma mais simples de lidar com isso é criando, com permissões de root, um diretório /opt, deixando o pacote ser instalado nele e depois adicionar este diretório à variável-de-ambiente PATH. Alternativamente, você pode criar symbolic links para o diretório /usr/local/bin.

 

 

Em geral, o procedimento de instalação consistirá, portanto, em:

 

Obs: