Compilar Software a partir do Código-Fonte no Linux

CompTIABeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá o processo fundamental de compilação e instalação de software a partir de seu código-fonte em um sistema Linux. Esta é uma habilidade crucial para lidar com aplicações que não estão disponíveis no gerenciador de pacotes da sua distribuição ou quando você precisa habilitar recursos personalizados específicos. Você trabalhará com um exemplo real, o servidor Pure-FTPd, para entender cada estágio do fluxo de trabalho de instalação baseada em fontes.

Você começará extraindo o código-fonte de um arquivo compactado, comumente conhecido como tarball, usando o comando tar. Em seguida, preparará o ambiente de compilação executando o script ./configure e, depois, compilará o código-fonte em programas executáveis com o comando make. Após uma compilação bem-sucedida, você instalará o software em todo o sistema usando make install. Por fim, aprenderá como desinstalar corretamente o software e limpar os arquivos de origem, completando todo o ciclo de vida de uma instalação via código-fonte.

Este é um Laboratório Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para concluir cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 98%. Ele recebeu uma taxa de avaliação positiva de 100% dos alunos.

Extrair o Código-Fonte com tar

Nesta etapa, você aprenderá como extrair um arquivo de código-fonte, comumente chamado de "tarball", usando o comando tar. O código-fonte de softwares é frequentemente distribuído em arquivos compactados como .tar.gz para agrupar todos os arquivos necessários e reduzir o tamanho total do arquivo.

Primeiro, vamos confirmar que o arquivo de código-fonte está disponível em nosso diretório de trabalho atual, ~/project. Use o comando ls -l para listar os arquivos e seus detalhes.

ls -l

Você deve ver o arquivo pure-ftpd-1.0.53.tar.gz na saída.

total 748
-rw-r--r-- 1 labex labex 765432 Nov 10 12:00 pure-ftpd-1.0.53.tar.gz

Agora, usaremos o comando tar para extrair o conteúdo deste arquivo. As opções que utilizaremos são:

  • -x: para extrair (extract) arquivos de um pacote.
  • -z: para descompactar o arquivo usando gzip, indicado pela extensão .gz.
  • -v: para saída detalhada (verbose), que lista todos os arquivos conforme são extraídos.
  • -f: para especificar o nome do arquivo (filename) a ser processado.

Execute o seguinte comando no seu terminal para extrair o arquivo:

tar -zxvf pure-ftpd-1.0.53.tar.gz

A opção -v fará com que o tar exiba o nome de cada arquivo extraído. A saída será longa, mas deve ser semelhante ao exemplo abaixo, mostrando a estrutura de diretórios e os arquivos sendo criados.

pure-ftpd-1.0.50/
pure-ftpd-1.0.50/AUTHORS
pure-ftpd-1.0.50/README
pure-ftpd-1.0.50/README.LDAP
pure-ftpd-1.0.50/README.MySQL
pure-ftpd-1.0.50/README.PGSQL
...
pure-ftpd-1.0.50/src/puredb_p.h
pure-ftpd-1.0.50/src/pure-quotacheck.c
pure-ftpd-1.0.50/src/pure-uploadscript.c

Assim que o comando terminar, um novo diretório contendo o código-fonte terá sido criado. Vamos usar ls -l novamente para ver este novo diretório.

ls -l

Agora você deve ver o diretório pure-ftpd-1.0.50 ao lado do tarball original.

total 752
drwxr-xr-x 10 labex labex    4096 Nov 10 12:05 pure-ftpd-1.0.50
-rw-r--r--  1 labex labex  765432 Nov 10 12:00 pure-ftpd-1.0.53.tar.gz

Você extraiu com sucesso o código-fonte do arquivo. Na próxima etapa, entraremos neste novo diretório e iniciaremos o processo de configuração e compilação.

Configurar e Compilar o Software com ./configure e make

Nesta etapa, você configurará o código-fonte para o seu sistema específico e, em seguida, o compilará em programas executáveis. Este é um processo padrão de duas partes para compilar software a partir da fonte em sistemas Linux.

Primeiro, você precisa mudar sua localização atual para o diretório que foi criado na etapa anterior. Use o comando cd para navegar até o diretório pure-ftpd-1.0.50.

cd ~/project/pure-ftpd-1.0.50

Agora que você está dentro do diretório do código-fonte, a primeira parte do processo é executar o script configure. Este script verifica seu sistema em busca de todas as ferramentas, bibliotecas e dependências necessárias para compilar o software. Ele então gera um Makefile, que contém as instruções para o processo de compilação.

Para executar o script, você deve digitar ./ antes do nome. Isso diz ao shell para procurar o script configure no diretório atual.

./configure

O script executará uma série de verificações e você verá muita informação passando pela tela. Isso é normal. Uma execução bem-sucedida terminará com um resumo, semelhante ao mostrado abaixo.

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
...
checking for OpenSSL... no
...
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating man/Makefile
...
config.status: executing depfiles commands

Pure-FTPd has been configured.

Observe as linhas config.status: creating Makefile. Isso confirma que o Makefile foi criado com sucesso.

A segunda parte do processo é compilar o código. O comando make lê o Makefile e executa o compilador (como o gcc) com as opções corretas para transformar o código-fonte legível por humanos (arquivos .c) em arquivos binários executáveis por máquina.

Agora, execute o comando make.

make

Este processo pode levar alguns instantes. Você verá muitas linhas de saída conforme o make invoca o compilador para cada arquivo de origem. Esta é a compilação propriamente dita acontecendo.

(CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash /home/labex/project/pure-ftpd-1.0.50/config/missing automake-1.15 --gnu src/Makefile)
...
gcc -g -O2 -Wall -W -Wshadow -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -c pure-ftpd.c
...
gcc -g -O2 -Wall -W -Wshadow -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline   -o pure-ftpd pure_ftpd-pure-ftpd.o pure_ftpd-log.o ...
...
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.50/src'

Assim que o comando make for concluído sem erros, o software estará compilado com sucesso. Os arquivos binários estão agora prontos para serem instalados no sistema, o que você fará na próxima etapa.

Instalar o Software com make install

Nesta etapa, você instalará o software compilado em seu sistema. Após compilar o código-fonte com o make, os arquivos binários resultantes e outros componentes necessários (como documentação e arquivos de configuração) ainda estão dentro do diretório do código-fonte. O comando make install copia esses arquivos para os locais padrão do sistema para que o software possa ser executado de qualquer lugar.

Certifique-se de que ainda está no diretório ~/project/pure-ftpd-1.0.50.

O processo de instalação normalmente requer a gravação de arquivos em diretórios como /usr/local/bin e /usr/local/sbin, que pertencem ao usuário root. Portanto, você deve usar o comando sudo para executar o make install com privilégios administrativos.

Execute o seguinte comando para instalar o Pure-FTPd:

sudo make install

O comando make install lerá o Makefile e executará as instruções de instalação. Você verá a saída mostrando os arquivos sendo criados e copiados para os diretórios do sistema.

make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.50/src'
/usr/bin/mkdir -p '/usr/local/sbin'
/usr/bin/install -c pure-ftpd pure-pw pure-pwconvert pure-authd pure-certd pure-uploadscript pure-quotacheck '/usr/local/sbin'
/usr/bin/mkdir -p '/usr/local/share/man/man8'
/usr/bin/install -c -m 644 ../man/pure-ftpd.8 ../man/pure-pw.8 ../man/pure-pwconvert.8 ../man/pure-authd.8 ../man/pure-certd.8 '/usr/local/share/man/man8'
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.50/src'
make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.50'
/usr/bin/mkdir -p '/usr/local/etc'
/usr/bin/install -c -m 644 pure-ftpd.conf '/usr/local/etc'
make[1]: Nothing to be done for 'install-data-am'.
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.50'

O software agora está instalado. Uma maneira simples de verificar isso é usar o comando which, que procura no PATH do sistema por um executável e exibe seu caminho completo.

which pure-ftpd

Se a instalação foi bem-sucedida, você deve ver a seguinte saída, indicando que o executável pure-ftpd está agora localizado em um diretório padrão do sistema.

/usr/local/sbin/pure-ftpd

Com o software instalado, ele está tecnicamente pronto para configuração e uso. No entanto, para este exercício, a próxima etapa o guiará pelo processo de desinstalação.

Desinstalar o Software e Limpar com make uninstall e rm

Nesta etapa final, você aprenderá como desinstalar corretamente o software que instalou a partir da fonte e limpar os arquivos de compilação, retornando seu sistema ao estado original. Esta é uma parte importante do gerenciamento manual de software.

A maioria dos pacotes de código-fonte bem escritos que utilizam um Makefile oferece um alvo de desinstalação (uninstall). Este alvo é projetado para reverter as ações do make install, removendo todos os arquivos que foram copiados para os diretórios do sistema.

Primeiro, certifique-se de que ainda está no diretório ~/project/pure-ftpd-1.0.50. Assim como o processo de instalação exigiu privilégios administrativos, a desinstalação também exige. Use sudo com o comando make uninstall.

sudo make uninstall

Você verá a saída indicando que os arquivos estão sendo removidos dos diretórios do sistema onde foram instalados.

make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.50/src'
rm -f /usr/local/sbin/pure-ftpd /usr/local/sbin/pure-pw /usr/local/sbin/pure-pwconvert /usr/local/sbin/pure-authd /usr/local/sbin/pure-certd /usr/local/sbin/pure-uploadscript /usr/local/sbin/pure-quotacheck
rm -f /usr/local/share/man/man8/pure-ftpd.8 /usr/local/share/man/man8/pure-pw.8 /usr/local/share/man/man8/pure-pwconvert.8 /usr/local/share/man/man8/pure-authd.8 /usr/local/share/man/man8/pure-certd.8
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.50/src'
make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.50'
rm -f /usr/local/etc/pure-ftpd.conf
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.50'

Para confirmar que o software foi removido, você pode usar o comando which novamente.

which pure-ftpd

Desta vez, o comando não deve produzir nenhuma saída, pois o executável pure-ftpd foi excluído de /usr/local/sbin e não pode mais ser encontrado no PATH do sistema.

Agora que o software está desinstalado, o último passo é remover o próprio diretório do código-fonte. Você não pode remover um diretório enquanto estiver dentro dele, então, primeiro, navegue de volta para o diretório raiz do seu projeto.

cd ~/project

Agora, use o comando rm com a opção -r (recursiva) para excluir o diretório pure-ftpd-1.0.50 e todo o seu conteúdo.

rm -r pure-ftpd-1.0.50

Este comando não produzirá nenhuma saída se for bem-sucedido. Você pode verificar a exclusão listando o conteúdo do diretório ~/project.

ls -l

O diretório pure-ftpd-1.0.50 desapareceu, restando apenas o tarball original.

total 748
-rw-r--r-- 1 labex labex 765432 Nov 10 12:00 pure-ftpd-1.0.53.tar.gz

Parabéns! Você concluiu com sucesso todo o processo de compilação de software a partir da fonte: extração, configuração, compilação, instalação e, finalmente, desinstalação e limpeza.

Resumo

Neste laboratório, você aprendeu o procedimento padrão para compilar e instalar software a partir de seu código-fonte em um sistema Linux. Você começou extraindo um arquivo de código-fonte compactado, também conhecido como tarball (.tar.gz), usando o comando tar. Após a extração, você navegou até o diretório de origem para executar o script ./configure, que prepara o software para a compilação verificando as dependências do sistema e criando um Makefile. Por fim, você usou o comando make para compilar o código-fonte em binários executáveis e make install para copiar o software para os diretórios apropriados do sistema.

Além disso, você praticou o método correto para remover o software e limpar o ambiente de compilação. Aprendeu a usar o comando make uninstall para remover os arquivos instalados do sistema. Para completar o processo de limpeza, removeu o diretório original do código-fonte usando o comando rm, garantindo que o sistema retornasse ao seu estado anterior.