Instalando a partir da fonte. Como resolver dependências sem destruir o gerenciador de pacotes

18

Compilar e instalar software é uma dor e um problema que não consigo superar. Eu só quero passar pela minha compreensão deste processo com alguém mais experiente para limpar minha mente para chegar ao próximo nível.

Muitos softwares científicos que eu preciso não são distribuídos como pacotes. Eu entendo "./configure" configura as variáveis de compilação e checando as dependências "make" a compilação "sudo make install" coloca todas as bibliotecas e escaninhos em seus lugares. No entanto, isso nunca funciona. Eu raramente saio do estágio "./configure" sem entrar em dependency hell, e se eu fizer isso, b) "sudo make install" provavelmente irá eliminar minha caixa.

a) O inferno da dependência é muito frustrante. Às vezes eu tenho a biblioteca, mas não gosto disso. Ou a biblioteca não quer instalar. Ou "configure" não consegue encontrá-lo. Ou minha distro colocou em algum lugar que não deveria ser. Ou existem duas versões no meu sistema. O problema é que não consigo entender como diagnosticar e, portanto, corrigir esses problemas. Quais são algumas boas referências para aprender para alguém que não precisa se tornar um programador?

b) Meu entendimento é "make install" substituirá algumas bibliotecas e alterará as configurações sem que meu gerenciador de pacotes fique ciente disso. Portanto, alguns programas não serão executados, outros não podem ser atualizados. Então, se eu não usar "make install", e apenas manter o binário compilado no meu diretório de usuários com um link simbólico adicionado ao PATH, eu estarei desobstruído?

Minha caixa é de usuário único, tem toneladas de HD gratuito, então não me importo em ter várias (dúzias) cópias de bibliotecas, se isso resolver meus problemas. O espaço é barato.

    
por Lenz 25.07.2012 / 18:33

3 respostas

15

A maioria dos pacotes terá um <package>-dev (para o Debian) ou <package>-devel (para o Red Hat) que serão as bibliotecas necessárias para o link para construção.

Então, por exemplo, se a fonte disser que requer libxml , nos sistemas baseados em Debian você encontrará libxml2 e libxml2-dev (use apt-cache search <dependancy> para encontrá-los).

Você precisará do libxml2-dev para criá-lo e libxml2 para executá-lo.

A etapa ./configure geralmente suporta sinalizadores como --with-libxml=/usr/lib/ para apontá-la nas bibliotecas corretas ( ./configure --help deve listar todas as opções). Ele também geralmente suporta a mudança do local de instalação com --prefix=$HOME/sw . Usar um prefixo fora do controle do gerenciador de pacotes é a melhor maneira de evitar conflitos com o software instalado pelo gerenciador de pacotes.

No Debian & derivadas usando --prefix de /usr/local/ ou /opt/local/ devem ser seguras.

Se uma biblioteca (ou versão) que você precisa não estiver disponível no gerenciador de pacotes, apenas baixe a fonte e compile-a usando opções similares. O mais importante é usar um --prefix fora do seu gerenciador de pacotes e ao compilar o software que você realmente deseja usar --with-<library>=/<path/to/installed/library> .

    
por 25.07.2012 / 19:12
5

Existe a ferramenta auto-apt que pode ser usada para isso.

De man auto-apt :

auto-apt is a program that checks file access of programs running within auto-apt environments. If a program will access a file of unin- stalled package, auto-apt will install the package containing the file, by using apt-get.

É usado da seguinte forma:

auto-apt run ./configure

Outra maneira é usar apt-get build-dep <package> nas distribuições baseadas no Debian.

    
por 25.07.2012 / 19:25
1

Para distribuições baseadas em RPM, você pode tentar criar pacotes adequados (não é difícil ...).

Os benefícios de um pacote adequado são que o gerenciador de pacotes acompanha o software e você pode replicar facilmente sua configuração em outro local / na próxima máquina. Com um pacote de origem adequado portando para frente (nova versão upstream, patch de correção de bugs, bibliotecas básicas atualizadas) é mais fácil do que ter que descobrir tudo do zero da próxima vez.

    
por 16.01.2013 / 05:04