← Voltar

[HOWTO]Criando seu próprio pacote TXZ

Atualização: 17/04/2018

Autor: Jefferson Rocha

Seção: Slackware > Pacotes

Versão: 1.0

Homepage: http://slackjeff.com.br


Índice


1.1 AJUSTES

Antes começar a compilação é muito importante criarmos um diretorio especifico somente para isto. Eu sempre utilizo dois diretorios onde faço todo os processos. O primeiro diretorio fica dentro do meu home, e se chama 'src' o segundo fica dentro dos temporarios ou para os mais chegados 'tmp' uma pasta chamada 'build', lá dentro é onde normalmente acontece os meus empacotamentos manuais! Eu tenho uma váriavel global chamada 'src' e outra 'compi' então para não precisar sempre ficar chamando todo diretorio '~/src' e '/tmp/build' eu somente chamo as váriaveis '$src' e '$compi', mais prático não é?

Então o primeiro passo é criar estes diretorios caso você não o tenha, se preferir chama-los de outro nome fique a vontade. Primeiramente vamos criar os diretorios em sua '/home/usuario' e '/tmp'. $ mkdir /tmp/build $ mkdir ~/src

Após isto vamos criar as váriaveis e para finalizar vamos exportar elas para ficar disponivel em qualquer terminal, ou console.

Criando a váriavel 'src' e 'compi': $ compi="/tmp/build" $ src="/home/slackjeff/src"

Agora vamos exportar elas.

$ export $compi

$ export $src

Caso deseje sempre carregar estás váriaveis como uma váriavel ambiente faça o seguinte. Abra o /etc/profile com seu editor favorito e as declare. É interessante tambem fazer um comentário para ficar mais atrativo para depois você não ficar perdido! acontece.

# nano /etc/profile

A última linha insira o comentário lembre que um comentário deve começar com '#' tralha, e na linha de baixo exporte e declare a váriavel 'compi' ou o nome da sua prefêrencia.

# Váriavel para meu build
export src="/home/slackjeff/src"
export compi="/tmp/build"

Pronto, na próxima inicialização do sistema está váriavel se tornará ambiente e sempre será carregada no boot. Caso queira deixar está váriavel disponivel apenas para o seu usuário faça o mesmo procedimento no '.bashrc' que está localizado em seu 'home'. Caso opte pelo .bashrc não esqueça de remover no /etc/profile. Ótimo, nosso próximo passo agora é desempacotar o nosso fonte dentro do nosso diretorio src que está localizado em nossa home.
Então vamos brincar, vamos desempacotar já enviando para '/home/slackjeff/src' o meu ambiente de compilação, lembrando que não precisa de root, não utilize ele em vão! Neste exemplo irei usar o fonte "ficticio" do leafpad.

$ cd ~/Downloads && tar -xvf leafpad.tar.gz -C "$src" && cd "$src" && ls

**NOTA
Eu utilizo sempre aspas duplas "", para não ter problema da váriavel expandir e estar nula por exemplo, não vai ter problemas neste caso, mas é sempre interessante você usar e se acostumar a sempre utilizar as aspas.
Outro ponto que vale a pena ser falado é sobre o && ou 'E COMERCIAL'.

É mais inteligente utilizar este cara que o ; 'PONTO E VIRGULA', mas porque Jefferson?
Simples, com && ele só executará o segundo comando se o primeiro ter status de sáida '0' ou simplificando, não tendo erros.
Se o status for diferente de '0' ele não continuará, diferentemente do ';' que por sua vez continua mesmo tendo falhado o comando anterior. Como já listamos o diretorio '/home/slackjeff/src' sabemos que nosso source está em uma pasta chamada
'leafpad', vamos entrar nesta pasta agora e ir para o próximo tópico.


1.2 A COMPILAÇÃO

Normalmente existe na internet uma "receita" de bolo que nada mais é que rodar o configure, make e make install.
Isto é bem famoso quando se tratá da própria compilação do kernel por exemplo. O que ninguem te falou ainda é que este mêtodo não é o correto! Primeiro que fazendo desta maneira, alem de "sujar" a sua máquina o pkgtool não consiguira remover o pacote depois. Para isto é interessante criarmos sempre um pacote 'txz' ou o antigo formato 'tgz' para que o pkgtool consiga identifica-lo e remove-lo com sucesso. Outro ponto é configurar o configure de uma maneira mais "padrão".

./configure \
--prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--mandir=/usr/man \

Este é um exemplo do configure que praticamente eu sempre uso! quando falo praticamente é quase sempre, mas não que esta seja a nova receita.
Normalmente estes 4 caras o (prefix, sysconfdir, localstatedir, mandir) ficam sempre permanentes em minhas compilações, pois assim estou setando o básico para não bagunçar meu sistema. As outras opções eu leio no README e INSTALL.

*** NOTA Você sempre deve ler se existir o README ou INSTALL que está presente no fonte do programa que você está compilando.
Se for um programador decente ele irá arquivar todas opções do configure nestes arquivos (README e INSTALL). Veja quais as melhores opção para sua necessidade e bote pra rodar.

Após você ler o README e INSTALL e encontrar todos parâmetros disponiveis e anotar os que mais se adequam a sua necessidade vamos chamar o configure.

$ ./configure \
--prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--mandir=/usr/man \

Se tudo ocorreu bem não irá aparecer nenhum erro, se aparecer provavelmente falta alguma dependencia, fica ao seu cargo ir buscar esta dependencia para conseguir prosseguir com a compilação. Agora rodamos o 'make' para começar a compilação, dependendo da máquina e do pacote pode demorar bastante tempo!

$ make

Agora ao inves de rodar o simples 'make install' vamos incrementa-lo com ' DESTDIR' este cara burla o sistema, e ao invés de fazer a instalação do pacote em 'usr' ele instala em um diretorio especifico que você passar.
Ou seja tudo do pacote vai estar dentro da pasta que você especificar, podemos assim editar algumas coisas e incrementar. Vamos passar o destino com a váriavel '$compi' que nada mais é que nosso diretorio '/tmp/build'.

$ make install DESTDIR="$compi"

Feito! agora vamos entra na pasta

$ cd $compi

Vamos criar uma pasta chamada 'install' que dentro conterá todos arquivos necessários para fazer um empacotamento adequado!

$ mkdir install && cd install


1.2.1 SLACK-DESC

Já dentro da pasta 'install' criamos o arquivo 'slack-desc', o slack-desc nada mais é que um arquivo que contem toda informação/descrição do pacote! É de extrema importante seguir as normas, a uma régua chamada handy-ruler que contem 77 colunas, você não deve ultrapassar!
Em appname use o nome do pacote, o mesmo deve se utilizar na hora de gerar o pacote, se não da problema! :) Exemplo do slack-desc do leafpad:

                |-----handy-ruler------------------------------------------------------|
leafpad: leafpad (short desc)
leafpad:
leafpad: Description of application - this description should be fairly
leafpad: in-depth; in other words, make it clear what the package does (and
leafpad: maybe include relevant links and/or instructions if there's room),
leafpad: but don't get too verbose.
leafpad: This file can have a maximum of eleven (11) lines of text preceded by
leafpad: the "leafpad: " designation.
leafpad:
leafpad: It's a good idea to include a link to the application's homepage too.
leafpad:

Crie o slack-desc com seu editor de prefêrencia:

$ nano slack-desc

Insira todas informações e salve e feche e vamos para o próximo tópico!


1.2.2 STRIP E MANUAL

Ótimo, agora está quase na hora de criar nosso pacote! MAS falta alguma coisa! Vamos usar o 'strip' para tirar os debugs assim reduzindo nosso pacote um bocado. Repita 2x o mesmo procedimento do strip.

$ strip -s /tmp/build/usr/lib/* /tmp/build/usr/bin/*

$ strip -s /tmp/build/usr/lib/* /tmp/build/usr/bin/*

Caso seu pacote tenha o diretorio 'man' compacte ele com o gzip para ficar mais leve ainda, para isto faça:

$ gzip -9 /tmp/build/usr/man/man?/*.?

Ótimo, agora vamos para o próximo tópico, finalmente vamos criar nosso pacote! Ancioso? vamos lá.


1.3 CRIANDO O PACOTE

Antes de tudo, entre como root, pois agora finalmente precisamos utiliza-lo.

$ su

Vou explicar um pouco sobre como funciona o pacote do Slackware! O pacote do Slackware nada mais é que um arquivo comprimido, no exemplos:

tgz = tar.gz
txz = tar.xz

*** NOTA

O formato 'txz' é o novo padrão do Slackware, por ter uma compactação mais eficiente, tanto no tamanho como na velocidade. Então use sempre o formato txz para criar seus pacotes.

Podemos simplesmente usar o método tradicional com o tar passando alguns parametros para compactar o esquema todo ou usar uma ferramenta do pkgtool chamada 'makepkg'. Ela faz todo "processo" de compactar e deixar o pacote nos trinques. Como root rode:

# makepkg ../app-version-arch-build.txz

*Explicação sobre a identificação:

app: Nome do Programa.
version: Versão do programa
arch: Arquitetura do programa
build: Quantas vezes foi criado.
txz: Formato do pacote.

Pacote gerado uma pasta acima agora é só instalar!
se não tiver na máquina o pacote use o 'installpkg' caso já tenha e está compilando uma versão mais atual use o upgradepkg com o parâmetro 'install-new'


2.0 DISPONIBILIZE SEUS PACOTES

Pacote gerado tudo certo não é? após isto com toda certeza você irá instalar seu pacote e depois? bom disponibilize para o mundo!


2.1 Considerações Finais

Vimos que criar um pacote no Slackware é muito fácil! então prefira sempre criar um pacote ao invés de simplesmente instalar com make install!
Assim seu sistema como dito no ínicio irá ficar bagunçado e NÃO queremos isto não é?

Bom empacotamento.