Criando pacotes no Slackware

Esse artigo tem como finalidade mostrar como é fácil criar o seu próprio pacote tgz, desta forma você pode manter o seu sistema bem mais organizado e controlando os pacotes existentes nele, podendo removê-los ou reinstalá-los quando precisar.

[ Hits: 72.507 ]

Por: Lincoln Lordello em 29/01/2004


Compilando



Essa primeira etapa você pode executar como usuário comum, não use o usuário root em vão.

Primeiro iremos descomprimir o código fonte, costumo usar a pasta ~/src, mas você pode fazer isso em qualquer pasta da sua máquina.

$ mkdir ~/src
$ tar zxvf programa.tar.gz
$ tar jxvf programa.tar.bz2
$ cd programa-versão


OBS: Note que o primeiro comando é para arquivo com final "gz" e o segundo para "bz2". Você pode fornecer o caminho completo do programa ou fazer o download dele dentro da pasta ~/src.

Todos os tutoriais na internet indicam a famosa seqüência de comandos:

# ./configure && make && make install

Mas o que elas não explicam é que dessa forma seu programa será instalado no lugar errado, já vi muitos programas reclamarem de dependências faltando, mesmo elas estando instaladas, porém o programa estava na pasta /usr/local e quando instalei o programa na pasta /usr o problema foi resolvido.

O comando ficaria assim:

# ./configure --prefix=/usr --sysconfdir=/etc

Vou explicar as opções:
  • --prefix=/usr - com isso seus binários serão instalados na pasta /usr/bin, bibliotecas serão instaladas em /usr/lib e os arquivos de desenvolvimento em /usr/include. Essa é a localização correta para os arquivos.

  • --sysconfdir=/etc - aqui temos um grande equívoco, pois sem essa opção todas as configurações do seu programa, caso existam, serão instaladas em /usr/local/etc, isso é inadmissível, visto que todos os programas usam a pasta padrão /etc. Gera uma certa bagunça na sua máquina.


Existem mais três opções opcionais, são referentes a arquitetura do seu sistema. Como todos sabem, o Slackware é compilado para 486, isso não tem nenhum problema, você pode compilar pro seu processador, mas caso você esteja compilando um programa para outra máquina é bom que você mantenha ela compilada para 486, mantendo assim maior compatibilidade.

# ./configure --prefix=/usr --sysconfdir=/etc --build=i486-slackware-linux --host=i486-slackware-linux --target=i486-slackware-linux

Não esqueça de ver mais configurações que normalmente são fornecidas nos arquivos README, INSTALL ou dentro do configure. Alguns programas possuem recursos extras que são desabilitados por padrão, caso queira usar, precisa saber como ele é habilitado, um exemplo é o mplayer que se você compilar normalmente vem sem interface gráfica, você precisa incluir --enable-gui no comando para que ele instale também sua interface gráfica.

# ./configure --help | less

Após isso rode o comando que irá construir os binários:

# make

Pronto, agora vamos para a parte de criação do pacote.

Página anterior     Próxima página

Páginas do artigo
   1. Preparando as ferramentas
   2. Compilando
   3. Criando o pacote
   4. Exemplo prático
Outros artigos deste autor

Como mudar o logo no kernel 2.6

Instale já o Audacity na sua máquina!

Nautilus Scripts

Instalando fontes TTF de forma fácil com rpm-buid

Mandrake x LG

Leitura recomendada

Pipelight Flash vs. Fresh Player vs. Adobe Flash nativo vs. Pepper Flash nativo

Packer - Instalando pacotes do AUR no Arch Linux

chkconfig - Adicionando o seu shell script

Aplicativos para gerenciar a Área de Transferência (Clipboard)

Instalando e configurando o Monesa no Slackware

  
Comentários
[1] Comentário enviado por JuNiOx em 30/01/2004 - 00:45h

Ae lordello!

muito legal seu artigo!

[]'s

[2] Comentário enviado por hugh em 30/01/2004 - 09:17h

E ae tio Lodello!
parabéns pelos artigos
ta virando um especialista em Slackware!!! :D
valews
[]'s

Victor

[3] Comentário enviado por lordello em 30/01/2004 - 12:37h

Está faltando so uma coisa, após executar o comando makepkg ele irá fazer duas perguntas, uma sobre mudar as permições e outra sobre criar o script doinst.sh, normalmente ele usa esse script para recriar os links dos programas. É só dar enter nas duas perguntas, pois o padrão é sim para ambos...
Falow!

[4] Comentário enviado por jllucca em 20/03/2004 - 19:33h

Lordello,

O artigo tá excelente ! So queria acrescentar que é importante passar o caminho absoluto para a variavel DESTDIR. Já que em alguns casos pode haver reclamação por parte do make se tentarmos usar um caminho relativo.

Caminho relativo seria no caso dos exemplos, estar no diretorio /tmp e passar para DESTDIR somente "programa-versão".

[5] Comentário enviado por Ilovelinux2004 em 04/07/2004 - 18:38h

olá, eu naum entendi muito bem, aki mesmo no site, eu ouvi dizer que os pacotes.tar.gz e os pacotes.tgz são as mesmas coisas...

conexaolinux2004@ig.com.br

[6] Comentário enviado por lordello em 04/07/2004 - 22:49h

Eu é que não entendi! Escrevi um artigo sobre como criar pacotes já compilados para ser instalado no Slackware. O código fonte dos programas são distribuídos nos formatos .tar.gz e .tar.bz2. O segundo (bz2) comprime mais e é mais usado hoje. Agora claro, o tar.gz é o mesmo do que o .tgz, mas e aí? O que você não entendeu?

[7] Comentário enviado por Herr_Filip em 24/01/2005 - 17:49h

muito bom artigo
sempre tive interesse em aprender, artigo muito bem escrito!

parabens!
Felipe

[8] Comentário enviado por hdoria em 04/02/2005 - 13:59h

Vamos supor que exista uma lib faltando para o programa funcionar. Tem como na hora de criar o pacote, adcionar esta lib ao pacote? Assim, quando alguem instalar esse pacote criado, ele nao precisara baixar a lib.

[9] Comentário enviado por lordello em 04/02/2005 - 15:09h

Sim é possível, mas isso é TOTALMENTE ERRADO. Imagine que um dia o individuo instale a tal biblioteca na mão, sem saber que ela foi fornecida junto com algum programa??? Você acha que depois de alguns dias ele vai lembrar que existe essa biblioteca dentro do pacote que você criou??? Afinal de contas é por isso que é importante criar pacotes, porque o sistema vai registrar no banco de dados que o pacote está instalado, no futuro a pessoa pode checar o que está ou não instalado, sem maiores problemas.
Os pacotes devem conter apenas o programa em questão, caso queira distribuir um programa junto com as bibliotecas extras, crie um arquivo zip/rar/ace com todos os pacotes dentro.
Falou ae!

[10] Comentário enviado por jllucca em 04/02/2005 - 22:48h

Opa, lordello!

Eu gostei da pergunta do n0z3y, mas acho que ele não soube como fazer. Tem como fazer o pacote ser "dependente" de outros pacotes? Se tem, como fazer? Tipo os rpms, onde as vezes precisamos dos rpms "tais" pros pacotes "taus"(hehehe).

[]'s

[11] Comentário enviado por lordello em 05/02/2005 - 01:11h

Sim, os gerenciadores de pacotes swaret e slapt-get usam um método alternativo para checar dependências, já que o Slackware não fornece nativamente suporte a dependências. Como não é oficial, é bom ter em mente que você deve testar isso com a ferramenta correta.
Dentro da pasta "install" do pacote você pode criar três arquivos, um vai informar ao instalador os pacotes necessários (slack-required), outro vai informar os pacotes conflitantes (slack-conflicts) e o último vai sugerir pacotes com funcionalidades extras (slack-suggests).
Vamos supor que o programaX precisa das bibliotecas libA-1.2 libB-3.5 libC-2.1 e se você instalar a "libD" vai habilitar um suporte extra, mas ele (programaX) não pode ser instalado junto com o programaY de jeito algum, pois eles não funcionam juntos... ficaria algo assim:

slack-required:
>=libA-1.2
>=libB-3.5
>=libC-2.1

Aqui podem ser usados simbolos típicos que, quem programa bash/perl/python, já deve estar acostumado, símbolos tipo maior > menor < igual =. Claro, algumas combinações não são lógicas, o normal é usar ">=" (maior ou igual).

slack-conflicts:
programaY

slack-suggests:
libD

Tipo, se o libB precisasse ser uma versão exata você colocaria assim:

=libB-3.5

Então você pode controlar bem quais biliotecas serão instaladas. Ás vezes você precisa fornecer informações mais específicas, como arch e build, isso torna a instalação específica, pois para o instalador não vai bastar ser a biblioteca com nome correto, essa vai ser uma versão específica, por exemplo:

>=libB-3.5-i486-1lord

Ou seja, não bata ser a biblioteca libB-3.5 ou maior, ela tem que ser compilada por mim (1lord, 2lord, 3lord etc...) e tem que ser compilada para i486. Mas muita atenção, para compilar o pacote pra i486 é preciso usar o comando indicado no artigo, muitas pessoas esquecem e só digitam "./configure", fazendo isso o programa é compilado específicamente para o processador da máquina atual, ou seja, se for um athlon o pacote vai ser para athlon etc... Isso é um erro, pois o pacote não se torna compatível com todas as máquinas.

# ./configure --prefix=/usr --sysconfdir=/etc --build=i486-slackware-linux --host=i486-slackware-linux --target=i486-slackware-linux

Como disse, isso não é uma regra e não sei o que está atualmente funcionando com o slapt-get, o swaret usa um servidor próprio que tenta adivinhar as dependências apenas pelo banco de dados deles, não levando em conta esses arquivos. Claro, eu não sei a posição atual do desenvolvimento desses programas, pode ser que hoje (05/02/2005) haja uma solução mais universal. A melhor opção no meu ver é usar o próprio arquivo "slack-desc" para gerar dependências. No final do arquivo pode ser incluída qualquer quantidade de texto extra, isso abre uma brecha para que seja adiconado o controle de dependência nele da mesma forma que descrevi acima, mas com alguma simbologia que substitua os três arquivos, algo como "!>=" para o conflicts e "?>=" para o sugest. Mas isso é minha opinião, não sei se vai ser assim, não sou vidente nem estou em contato com o desenvolvimento dessas ferramentas.
Esse assunto é muito legal, mas claro, isso depende muito da ferramenta usada e de como o pacote é feito.
Falou ae!

[12] Comentário enviado por lordello em 05/02/2005 - 01:16h

Acabei de ver um arquivo "slack-required" do LinuxPackages e ele se parece com isso:

# cat slack-required
audiofile >= 0.2.6
esound >= 0.2.34
gconf >= 2.6.1
glib2 >= 2.4.2
gnome-vfs >= 2.6.1.1
gnutls >= 1.0.13
libbonobo >= 2.6.2
libgcrypt >= 1.2.0
libgnome >= 2.6.1.1
libgpg-error >= 0.7
libsoup >= 2.1.11
libxml2 >= 2.6.9
openssl >= 0.9.7d
orbit2 >= 2.10.2

Bom, para você tomar como exemplo, ficou bem diferente do que era proposto incialmente, talvez enm funcione, talvez sim. É bom dar uma olhada em vários pacotes e na documentação do slapt-get para saber mais detalhes de como está sendo feito esse controle.
Falou ae!

[13] Comentário enviado por casterman em 19/11/2005 - 01:26h

otimo artigo, vc sabe, ou ja aconteceucom vc do pkgtool apresentar falha na descrição do pacote mesmo a descrição estando os conformes?

[14] Comentário enviado por lordello em 19/11/2005 - 20:12h

Isso nunca aconteceu, se o arquivo slack-desc estiver correto, ele será exibido de forma correta.
É só seguir a regra de número de linhas e usar codificação UTF-8.
Tente não usar acêntos, ja que o universal é usar inglês mesmo. Se o pacote for em português, tente evitar acêntos a todo custo.
Até mais.

[15] Comentário enviado por nidiascampos em 04/02/2006 - 13:21h

Será que é possivel cria um pacote para um programa tipo o eclipse?

[16] Comentário enviado por lordello em 05/02/2006 - 01:17h

É possível criar pacotes para qualquer programa. Todos os programas bem feitos possuem excelentes arquivos Makefile, que é o responsável por toda a compilação e instalação. Com alguns programas é necessário um trabalho maior, às vezes manual, mas é sempre possível empacotar qualquer programa.

[17] Comentário enviado por jpfaria em 21/08/2006 - 23:15h

Opa,
tentei criar o pacote do PHP com mais suporte do que vem nativo no slackware. Simplesmente o comando:
make install PREFIX=/tmp/pkg/usr
nada é criado em /tmp/pkg..
testei tb em outros programas maiores e todos ignoram o PREFIX e instalam normalmente no sistema.
Alguem sabe o que esta acontecendo ?
abs

[18] Comentário enviado por lordello em 24/08/2006 - 22:32h

Caro amigo jpfaria, existe este trecho no artigo:

(...)Eu só uso o DESTDIR, pois ele gera o pacote da forma correta, só use o PREFIX caso o DESTDIR não funcione, aí você irá precisar mudar algumas coisas que explico depois.(...)

Ou seja, use o DESTDIR sempre! A opção PREFIX é apenas no caso do DESTDIR não funcionar.
Este artigo é datado de 29/01/2004, ou seja, desde aquela época muita coisa pode ter mudado.
Na época eu tinha visto programas não aceitarem a variável DESTDIR, mas todos aceitavam a PREFIX, porque é ela que o arquivo Makefile usa para endereçar a cópia dos arquivos. Se por algum motivo parou de funcionar e a DESTDIR não funciona no programa em questão, então o jeito é instalar na mão, ou usando o CheckInstall.
http://asic-linux.com.mx/~izto/checkinstall/

[19] Comentário enviado por dark_slack em 16/05/2007 - 23:01h

poderiam usar o makepkg -l y -c n pacote.tgz

[20] Comentário enviado por blip em 02/08/2009 - 22:18h

Muito bom o artigo! Quando voce vai postar o artigo que explica a criacao de scripts para os pacotes .tgz? quero ler esse artigo tambem!

[21] Comentário enviado por lindbergluiz em 15/02/2017 - 00:41h

Este procedimento também serve para pacotes encontrados no formato .zip?

Por exemplo, quero instalar a versão mais atual do MuseScore (2.0.3) mas está apenas disponível o código-fonte no pacote .zip.

Pelo repositório do SlackBuilds, a única versão é 1.3.

Como devo proceder para criar o pacote de instalação da versão 2.0.3?

[22] Comentário enviado por lordello em 15/02/2017 - 09:24h


[21] Comentário enviado por lindbergluiz em 15/02/2017 - 00:41h

Este procedimento também serve para pacotes encontrados no formato .zip?

Por exemplo, quero instalar a versão mais atual do MuseScore (2.0.3) mas está apenas disponível o código-fonte no pacote .zip.

Pelo repositório do SlackBuilds, a única versão é 1.3.

Como devo proceder para criar o pacote de instalação da versão 2.0.3?


Caro Luiz, esse tutorial serve para qualquer aplicativo com código fonte que use o sistema MAKEFILE, ele pode estar compactado em qualquer formato. Extraia o pacote em alguma pasta e verifique seu código.
Lembre-se que esse tutorial é bem antigo, por tanto algumas adaptações podem ser necessárias para fazer a instalação corretamente.
Abraço.

[23] Comentário enviado por lindbergluiz em 16/02/2017 - 11:04h

ok. Valeu!

[24] Comentário enviado por lindbergluiz em 16/02/2017 - 23:37h

lordello,

não obtive sucesso pelo simples fato de não existir o "configure" em nenhuma pasta do pacote. Como é possível criar o pacote, a partir do código-fonte, sem o configure?

[25] Comentário enviado por lindbergluiz em 16/02/2017 - 23:37h

lordello,

não obtive sucesso pelo simples fato de não existir o "configure" em nenhuma pasta do pacote. Como é possível criar o pacote, a partir do código-fonte, sem o configure?

confira o pacote do MuseScore no link:

https://ftp.osuosl.org/pub/musescore/releases/MuseScore-2.0.3/MuseScore-2.0.3.zip

[26] Comentário enviado por lordello em 17/02/2017 - 00:05h

O arquivo que você baixou possui um sistema de compilação do Makefile apenas, todas as instruções estão descritas no arquivo README.md...

compilando: make release
instalando: make install

Segundo o próprio README.md o programa pode ser executado da pasta, sem instalar ou criar pacote, o comando seria esse:
# ./build.release/mscore/mscore

O Makefile desse código fonte usa a variável PREFIX como pasta de instalação, é preciso usar na hora de direcionar a instalação, como descrito no artigo.
"make install PREFIX=/PASTA/DE/INSTALACAO/TEMPORARIA"

Qualquer dúvida sobre a instalação ou configuração de bibliotecas, por favor leia o README.md, existem algumas bibliotecas necessárias para o programa rodar.
Abraço.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts