Como compilar e instalar programas da fonte

39

Esse é um problema que realmente limita meu gosto pelo Linux. Se o aplicativo não estiver em um repositório ou se não tiver um script de instalação, eu realmente luto onde e como instalar um aplicativo da fonte.

Comparativamente ao Windows, é fácil. Você (praticamente) precisa usar um aplicativo instalador que faça todo o trabalho em um Assistente. Com o Linux ... nem tanto.

Então, você tem dicas ou instruções sobre isso ou existem sites que explicam explicitamente como, por que e onde instalar programas Linux a partir da fonte?

Nitrodista
fonte
7
"Comparativamente ao Windows, é fácil. Você (praticamente) é obrigado a usar um aplicativo instalador que faz todo o trabalho em um Assistente. Com o Linux ... nem tanto." Existe o ponto fraco da questão. No Windows, você raramente obtém o código-fonte, portanto, está à mercê de quem criou o pacote. Se você pensa sobre isso, não é muito diferente de dizer "não havia pacote Linux, então eu tenho que construir a partir da fonte", ou seja. não havia como começar. Construir a partir da fonte geralmente é o último recurso no * nix-land, mas raramente é uma opção no Windows-ville.
Avery Payne
2
Dito isto ... +1 de aumento por fazer uma pergunta comum que deve ser respondida por todos os recém-chegados aos sistemas * nix. :) Às vezes, criar a partir da fonte significa a diferença entre corrigir um bug desagradável e sofrer apenas até a próxima versão do software. Realmente não é tão ruim, e como muitos aqui apontaram, depois que você sabe o que procurar e como fazê-lo, é bastante indolor.
Avery Payne

Respostas:

22

Normalmente, o projeto terá um site com instruções sobre como construí-lo e instalá-lo. Google para isso primeiro.

Na maior parte, você fará:

  1. Faça o download de um tarball (arquivo tar.gz ou tar.bz2), que é uma versão de uma versão específica do código fonte
  2. Extraia o tarball com um comando como tar zxvf myapp.tar.gzpara um tarball com gzip ou tar jxvf myapp.tar.bz2para um tarball com bzip
  3. cd no diretório criado acima
  4. corre ./configure && make && sudo make install

Ou:

  1. Use git ou svn ou o que for para obter o código-fonte mais recente de seu repositório oficial de fontes
  2. cd no diretório criado acima
  3. corre ./autogen.sh && make && sudo make install

O configure e o autogen.sh aceitarão um argumento --prefix para especificar onde o software está instalado. Eu recomendo verificar Onde devo colocar o software que eu me compilar? para obter conselhos sobre o melhor local para instalar software personalizado.

Sandy
fonte
Por que o autogen.sh é usado ao obter as últimas, mas o configure / make é usado para um lançamento oficial?
Louis Salin
11
Normalmente, as pessoas que desejam o software "avançado" obterão a versão do software de controle de versão (como git, subversion ou CVS). Essa é uma "vantagem" porque provavelmente não foi testada, ao contrário de um tarball liberado, que (provavelmente) foi comprovado como funcionando (pelo menos principalmente). Faz sentido?
Matt Simmons
2
@ Matt, com certeza faz sentido, mas acho que o comentário foi direcionado mais para o fato de Sandy agora fazer parecer que há um autogen.sh em cada tronco git'd / svn'd.
Re
11
E uma galinha em cada panela ... ou algo assim. De vez em quando, eu me deparo com software sem um script de configuração também. Se houvesse uma maneira fácil e unificada de fazê-lo, não precisaríamos de pacotes ;-)
Matt Simmons
Matt está absolutamente certo, é por isso que eu disse "na maioria das vezes", e primeiro advoguei a pesquisa no site do projeto. O conselho do autogen.sh/configure será válido para praticamente todos os módulos do GNOME e para muitos outros projetos. Alguns projetos não usam automake, e só terão Makefile, e você apenas executará make && sudo make install. Alguns projetos Python terão apenas um setup.py, que você chamará para instalar (já que não há nenhuma configuração de compilação real). Existem muitos outros sistemas de compilação / instalação por aí também. Espero que os arquivos README ou INSTALL explicem exatamente o que fazer.
Sandy
3

Eu só quero acrescentar que existem gerenciadores de pacotes que compilam pacotes a partir do código-fonte e lidam com todas as dependências, sinalizadores, etc.

Nos sistemas BSD é ports: Usando a coleção de portas

No Debian, o apt-getgerenciador de pacotes também pode instalar a partir do código-fonte: HOWTO DO APT: Trabalhando com pacotes de código-fonte (o mesmo vale para Ubuntu, Linux-mint e tudo mais baseado no Debian)

A distribuição do Gentoo usa o portagegerenciador de pacotes, que compila todo o sistema somente da fonte: Introdução ao Portage .

O Slackware pode compilar pacotes, mas não sei se existe algum gerenciador de pacotes lá .. =)

De qualquer forma, você sempre pode compilar pacotes manualmente como o Sandy mencionado acima =) Também deve ser possível usar apt-getou portagegerenciar gerenciadores de pacotes em qualquer outra distro ...

holms
fonte
11
Dizer "o gerenciador de pacotes apt-get pode instalar da fonte" está incorreto. A seção citada descreve como se pode criar um pacote Debian a partir de fontes Debian . Fontes upstream não arbitrárias.
Faheem Mitha
2

Eu acho que é melhor ler a documentação que acompanha esse programa ou aplicativo específico que você deseja instalar. Geralmente, existem readmes / READMEs dentro dos tarballs (o arquivo de origem do aplicativo que você geralmente pode baixar) ou talvez até INSTALAR arquivos para ler e aprender sobre qual é a maneira preferida de instalar o aplicativo. Em resumo: RTFM;)

reiche
fonte
Eu vim aqui porque o README forneceu todos os requisitos para compilar no Linux, mas apenas possui instruções de instalação do Windows. A resposta aceita funcionou para mim e provavelmente funciona na maioria das vezes. Eu acho que é quase um conselho melhor tentar a rota ./configure e ir para o README, se não funcionar (ou seja, perder uma dependência e você não conseguir ler a saída do compilador).
Stephen C
1

Um resumo para usar a coleção de portas no FreeBSD:

Encontrar porta

As portas são organizadas por categoria, portanto, se você não souber em que categoria está a porta, será necessário encontrá-la primeiro:

cd /usr/ports
make search name=myport

Às vezes, há muitas entradas dessa maneira. Eu pessoalmente prefiro:

find /usr/ports -name myport* -print -depth 2

Use *ao pesquisar, pois geralmente há várias versões de uma porta disponíveis. O argumento de profundidade garante que seus resultados de retorno não sejam desnecessariamente confusos com correspondências que você provavelmente não deseja.

Configuração

Freqüentemente, você desejará fazer algumas configurações; software como o Apache e o Postgres praticamente exigem. Existem três opções principais: linha de comando, ambiente e criar arquivos de configuração. Para começar com a linha de comando:

make showconfig

isso listará as opções de configuração padrão. Se você gosta dos padrões, está pronto para compilar e instalar. Se não,

make config

abrirá uma caixa de diálogo onde você pode selecionar quais opções deseja. (Não se confunda com isso e make configureque configura sua porta com as opções escolhidas!) Isso geralmente é suficiente, mas para alguns softwares, como o Apache, geralmente existe uma configuração complexa que uma caixa de diálogo simples não suporta. Para isso, você também deve consultar os Makefile (s) que às vezes fornecerão alguns alvos adicionais para make que fornecerão mais informações. Para continuar o exemplo do Apache

make show-modules
make show-options
make show-categories

fornecerá informações sobre a configuração dos módulos escolhidos, opções de encadeamento e similares. Se os padrões da sua porta estiverem bons e você quiser alterar algumas coisas, também poderá passar os pares chave = valor como variáveis ​​de ambiente:

make MYVBL1=MYVAL1 ... install clean

Além disso, você pode definir opções de -Dopção através da opção:

make -D MYVAR -D MYOTHERVAR ... install clean

Para configurações complexas, no entanto, a linha de comando não funcionará bem e você é melhor que nenhum dos dois primeiros métodos seja eficaz. Nesse caso, você pode criar um arquivo de configuração e transmiti-lo para makea variável __MAKE_CONF. O FreeBSD possui um arquivo de configuração padrão: /etc/make.confque geralmente contém informações sobre portas instaladas anteriormente e outras configurações do sistema. Para começar, crie um arquivo com suas opções de portas, chame-o ~/myport.mke depois combine esse arquivo com /etc/make.conf:

cat /etc/make.conf ~/myport.mk >> ~/make.myport.conf

você pode então checar sua configuração:

make showconfig __MAKE_CONF=~/make.port.conf

e se tudo parecer bem:

make install clean __MAKE_CONF=~/make.myport.conf

Cuidado! Se você precisar ajustar as definições de configuração após make configureuma instalação, no todo ou em parte, você deve absolutamente limpar sua configuração primeiro :

make rmconfig

Não fazer isso resultará em interações inesperadas entre o subsistema de portas, os makepadrões da sua porta e a configuração desejada.

Isso é muito para um resumo, mas a complexidade da configuração é principalmente sobre o aplicativo, não a porta. O Bash, por exemplo, não tem realmente nenhuma opção.

Instalação

Esta é a parte fácil:

make install clean

ou você pode

make build
make install
make clean

que é apenas mais digitação.

É praticamente isso. Obviamente, há mais que você pode fazer, como listar recursivamente dependências e opções de configuração, atualizar com patches e assim por diante. Aqui, irei referir-lhe a seção Portas do Manual , a página de manual do subsistema de portas (boas informações sobre destinos de criação adicionais) e a makepágina de manual.

gvkv
fonte