Simon! Eu sei como você se sente; Também lutei com essa parte do aprendizado do Linux. Com base em minhas próprias experiências, escrevi um tutorial sobre alguns dos itens que você aborda (principalmente como referência para mim!): Http://easyaspy.blogspot.com/2008/12/buildinginstalling-application-from.html . Acho que você apreciará minha observação sobre como os aplicativos Python são simples de construir / instalar. :)
Espero que isso ajude! E feliz compilando.
Tim Jones
Construindo / instalando um aplicativo a partir da fonte no Ubuntu Linux
Enquanto os repositórios do Ubuntu estão repletos de ótimas aplicações, em um momento ou outro você é obrigado a encontrar a ferramenta "imprescindível" que não está nos repositórios (ou não possui um pacote Debian) ou você precisa de um versão mais recente que nos repositórios. O que você faz? Bem, você precisa criar o aplicativo a partir da fonte! Não se preocupe, não é realmente tão complicado quanto parece. Aqui estão algumas dicas, com base nas minhas experiências de deixar de ser um amador! (Enquanto estou usando o Ubuntu neste exemplo, os conceitos gerais devem ser aplicáveis à maioria das distribuições Unix / Linux, como o Fedora, e até a plataforma Cygwin no Windows.)
O processo básico de construção (compilação) da maioria dos aplicativos a partir da origem segue esta sequência: configure -> compile -> install. Os comandos típicos do Unix / Linux para fazer essas coisas são: config
-> make
-> make install
. Em alguns casos, você encontrará páginas da web que mostram que tudo isso pode ser combinado em um único comando:
$ config && make && make install
Obviamente, este comando assume que não há problemas em nenhuma dessas etapas. É aqui que entra a diversão!
Começando
Se você não compilou um aplicativo da fonte no seu sistema antes, provavelmente precisará configurá-lo com algumas ferramentas gerais de desenvolvimento, como o gcc
conjunto do compilador, alguns arquivos de cabeçalho comuns (pense nisso como um código que já foi gravado). por outra pessoa usada pelo programa que você está instalando) e pela ferramenta make. Felizmente, no Ubuntu, existe um metapacote chamado build-essential
que será instalado. Para instalá-lo (ou apenas verifique se você já o possui!), Execute este comando no terminal:
$ sudo apt-get install build-essential
Agora que você possui a configuração básica, baixe os arquivos de origem do aplicativo e salve-os em um diretório para o qual você possui permissões de leitura / gravação, como o diretório "inicial". Normalmente, eles estarão em um arquivo compactado com extensão de arquivo .tar.gz
ou .tar.bz2
. O .tar
simplesmente significa que ele é um "arquivo em fita", que é um agrupamento de arquivos que preserva a sua estrutura de diretório relativo. O .gz
significa gzip (GNU zip), que é um popular formato de compactação Unix / Linux. Da mesma forma, .bz2
significa bzip2, que é um formato de compactação mais recente que fornece uma compactação mais alta (tamanho menor do arquivo compactado) que o gzip.
Depois de baixar o arquivo de origem, abra uma janela do terminal (Terminal do sistema no menu Ubuntu) e mude para o diretório em que você salvou o arquivo. (Vou usar ~/download
neste exemplo. Aqui, '~' é um atalho para o diretório "inicial".) Use o comando tar para extrair os arquivos do archive baixado:
Se o seu arquivo é um arquivo gzip (por exemplo, termina com .tar.gz
), use o comando:
$ tar -zxvf filename.tar.gz
Se o seu arquivo é um arquivo bzip2 (por exemplo, termina com .tar.bz2
), use o comando:
$ tar -jxvf filename.tar.gz
Dica: Se você não precisar se lembrar de todas as opções de linha de comando para extrair arquivos, recomendo adquirir um (ou ambos) desses utilitários: dtrx (meu favorito!) Ou deco (mais popular). Com um desses utilitários, basta digitar o nome do utilitário (dtrx ou deco) e o nome do arquivo, ele faz todo o resto. Ambos "sabem" como lidar com quase todos os formatos de arquivo que você provavelmente encontrará e eles têm um ótimo tratamento de erros.
Ao criar a partir da fonte, há dois tipos comuns de erros que você provavelmente encontrará:
- Os erros de configuração ocorrem quando você executa o script de configuração (geralmente denominado config ou configure) para criar um makefile específico para sua instalação.
- Os erros do compilador ocorrem quando você executa o comando make (após a geração do makefile) e o compilador não consegue encontrar o código necessário.
Examinaremos cada uma delas e discutiremos como resolvê-las.
Erros de configuração e configuração
Depois de extrair o arquivo de código-fonte, no terminal, você deve mudar para o diretório que contém os arquivos extraídos. Normalmente, esse nome de diretório será igual ao nome do arquivo (sem a extensão .tar.gz
ou .tar.bz2
). No entanto, às vezes o nome do diretório é apenas o nome do aplicativo, sem nenhuma informação de versão.
No diretório de origem, procure um README
arquivo e / ou um INSTALL
arquivo (ou algo com nomes semelhantes). Esses arquivos normalmente contêm informações úteis sobre como criar / compilar o aplicativo e instalá-lo, incluindo informações sobre dependências. "Dependências" são apenas um nome sofisticado para outros componentes ou bibliotecas que são necessárias para compilar com êxito.
Depois de ler o arquivo README
e / ou INSTALL
(e, esperançosamente, examinar qualquer documentação on-line relevante para o aplicativo), procure um arquivo executável (com a permissão "x" definida no arquivo) chamado config
ou configure
. Às vezes, o arquivo pode ter uma extensão, como .sh
(por exemplo, config.sh
). Geralmente, esse é um script de shell que executa alguns outros utilitários para confirmar que você possui um ambiente "saudável" para compilar. Em outras palavras, ele verificará se você tem tudo instalado que precisa.
Dica: Se este é um aplicativo baseado em Python, em vez de um arquivo de configuração, você deve encontrar um arquivo chamado setup.py
. Aplicativos Python geralmente são muito simples de instalar. Para instalar este aplicativo, como root (por exemplo, coloque o sudo na frente do seguinte comando no Ubuntu), execute este comando:
$ python setup.py install
Isso deve ser tudo o que você precisa fazer. Você pode pular o restante deste tutorial e prosseguir diretamente para o uso e o aproveitamento do seu aplicativo.
Execute o script de configuração no terminal. Normalmente, você pode (e deve!) Executar seu script de configuração com sua conta de usuário comum.
$ ./config
O script exibirá algumas mensagens para lhe dar uma idéia do que está fazendo. Muitas vezes, o script fornece uma indicação sobre se foi bem-sucedido ou falhou e, se falhou, algumas informações sobre a causa da falha. Se você não receber nenhuma mensagem de erro, normalmente poderá assumir que tudo correu bem.
Se você não encontrar nenhum script que se pareça com um script de configuração, normalmente significa que o aplicativo é muito simples e é independente da plataforma. Isso significa que você pode simplesmente pular para a etapa de compilação / compilação abaixo, porque o fornecido Makefile
deve funcionar em qualquer sistema.
Um exemplo
Neste tutorial, vou usar o leitor de RSS baseado em texto chamado Newsbeuter como um exemplo para os tipos de erros que você pode encontrar ao criar seu aplicativo. Para Newsbeuter, o nome do script de configuração é config.sh
. No meu sistema, quando executo config.sh
, ocorrem os seguintes erros:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ ./config.sh
Checking for package sqlite3... not found
You need package sqlite3 in order to compile this program.
Please make sure it is installed.
Ao fazer algumas pesquisas, descobri que, de fato, o sqlite3
aplicativo estava instalado. No entanto, como estou tentando criar a partir do código-fonte, esta é uma dica para a qual config.sh
realmente procuramos as bibliotecas de desenvolvimento (cabeçalhos) sqlite3
. No Ubuntu, a maioria dos pacotes possui um pacote de desenvolvimento associado que termina em -dev
. (Outras plataformas, como o Fedora, costumam usar um sufixo de pacote -devel
para os pacotes de desenvolvimento.)
Para encontrar o pacote apropriado para o sqlite3
pacote de desenvolvimento, podemos usar o apt-cache
utilitário no Ubuntu (e, da mesma forma, o yum
utilitário no Fedora):
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-cache search sqlite
Este comando retorna uma lista bastante grande de resultados, portanto, temos que fazer um pouco de trabalho de detetive para determinar qual é o pacote apropriado. Nesse caso, o pacote apropriado acaba sendo libsqlite3-dev
. Observe que algumas vezes o pacote que estamos procurando terá o lib
prefixo, em vez de apenas o mesmo nome do pacote plus -dev
. Isso ocorre porque, às vezes, estamos apenas procurando uma biblioteca compartilhada que possa ser usada por muitos aplicativos diferentes. Para instalar libsqlite3-dev
, execute o comando típico apt-get install no terminal:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-get install libsqlite3-dev
Agora, precisamos executar config.sh
novamente para garantir que resolvemos esse problema de dependência e que não temos mais problemas de dependência. (Embora eu não o mostre aqui, no caso do Newsbeuter, também tive que instalar o libcurl4-openssl-dev
pacote.) Além disso, se você instalar um pacote de desenvolvimento (como libsqlite3-dev
) e o pacote de aplicativos associado (por exemplo, sqlite3
) não for já instalado, a maioria dos sistemas instalará automaticamente o pacote de aplicativos associado ao mesmo tempo.
Quando a configuração for executada com êxito, o resultado será que ela criará um ou mais arquivos de criação. Esses arquivos geralmente são nomeados Makefile
(lembre-se de que o nome do arquivo é importante no Unix / Linux!). Se o pacote de compilação incluir subdiretórios, como src
, etc., cada um desses subdiretórios também conterá um Makefile
.
Erros de compilação e compilação
Agora, estamos prontos para realmente compilar o aplicativo. Isso geralmente é chamado de construção e o nome é emprestado do processo do mundo real de construção de algo. As várias "partes" do aplicativo, que geralmente são vários arquivos de código-fonte, são combinadas para formar o aplicativo geral. O utilitário make gerencia o processo de construção e chama outros aplicativos, como o compilador e o vinculador, para realmente executar o trabalho. Na maioria dos casos, você simplesmente executa o make (com sua conta de usuário comum) no diretório em que executou a configuração. (Em alguns casos, como compilar aplicativos escritos com a biblioteca Qt, você precisará executar outro aplicativo "wrapper" como o qmake. Novamente, sempre verifique os README
e / ou INSTALL
documentos para obter detalhes.)
Como no script de configuração acima, quando você executa o make (ou o utilitário semelhante) no terminal, ele exibe algumas mensagens sobre o que está sendo executado e quaisquer avisos e erros. Normalmente, você pode ignorar avisos, pois eles são principalmente para os desenvolvedores do aplicativo e estão dizendo a eles que existem algumas práticas padrão que estão sendo violadas. Geralmente, esses avisos não afetam a função do aplicativo. Por outro lado, os erros do compilador devem ser tratados. Com o Newsbeuter, quando eu corri make, as coisas correram bem por um tempo, mas então eu recebi um erro:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ make
...
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/configparser.o -c src/configparser.cpp
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/colormanager.o -c src/colormanager.cpp
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:5:18: error: stfl.h: No such file or directory
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:33: error: ISO C++ forbids declaration of \u2018stfl_form\u2019 with no type
./include/stflpp.h:33: error: expected \u2018;\u2019 before \u2018*\u2019 token
./include/stflpp.h:34: error: ISO C++ forbids declaration of \u2018stfl_ipool\u2019 with no type
./include/stflpp.h:34: error: expected \u2018;\u2019 before \u2018*\u2019 token
make: *** [src/colormanager.o] Error 1
O processo de criação será interrompido assim que o primeiro erro for encontrado. O tratamento de erros do compilador às vezes pode ser um negócio complicado. Você precisa procurar nos erros algumas dicas sobre o problema. Normalmente, o problema é que alguns arquivos de cabeçalho, que geralmente têm extensão de .h
ou .hpp
, estão ausentes. No caso do erro acima, é (ou deve ser!) Claro que o problema é que o stfl.h
arquivo de cabeçalho não pode ser encontrado. Como mostra este exemplo, você deseja examinar as primeiras linhas da mensagem de erro e descer o caminho para encontrar a causa subjacente do problema.
Depois de examinar a documentação do Newsbeuter (o que eu deveria ter feito antes de começar, mas essa parte do tutorial não seria muito significativa!), Descobri que ela requer uma biblioteca de terceiros chamada STFL. Então, o que fazemos neste caso? Bem, basicamente repetimos exatamente o mesmo processo para a biblioteca necessária: obtenha a biblioteca e execute o processo configure-build-install para ela e, em seguida, retome a construção do aplicativo desejado. Por exemplo, no caso do STFL, eu tive que instalar o libncursesw5-dev
pacote para que ele fosse criado corretamente. (Geralmente, não é necessário refazer a etapa de configuração em nosso aplicativo original depois de instalar outro aplicativo necessário, mas isso também não prejudica.)
Após a instalação bem-sucedida do kit de ferramentas STFL, o processo de criação do Newsbeuter foi executado com êxito. O processo de criação normalmente começa de onde parou (no ponto do erro). Portanto, todos os arquivos que já foram compilados com êxito não serão recompilados. Se você deseja recompilar tudo, é possível executar o make clean all para remover todos os objetos compilados e, em seguida, executar o make novamente.
Instalando
Após a conclusão do processo de compilação, você estará pronto para instalar o aplicativo. Na maioria dos casos, para instalar o aplicativo nas áreas comuns do sistema de arquivos (por exemplo, /usr/bin
ou /usr/share/bin
etc.), você precisará executar a instalação como root. A instalação é realmente a etapa mais simples de todo o processo. Para instalar, no terminal, execute:
$ make install
Verifique a saída deste processo quanto a erros. Se tudo foi bem-sucedido, você poderá executar o nome do comando no terminal e ele será iniciado. (Anexe e no final da linha de comando, se for um aplicativo da GUI, ou você não poderá usar a sessão do terminal até que o aplicativo termine a execução.)
Quando você cria um aplicativo a partir da fonte, ele normalmente não adiciona um ícone ou atalho aos menus da GUI no Ubuntu. Você precisará adicionar isso manualmente.
E esse é basicamente o processo, embora potencialmente iterativo, para criar e instalar um aplicativo a partir da fonte no Ubuntu. Depois de fazer isso apenas algumas vezes, isso se tornará uma segunda natureza para você!