Piter Punk's HomePage - Artigos
 
English version
Fazendo um Pacote auto-instalável

Piter PUNK

Neste artigo, vamos mostrar como criar um pacote que seja auto-instalável. O usuário digita o nome do pacote e automáticamente ele se instala na sua máquina e faz a sua entrada no sistema de pacotes do Slackware.

1 Introdução

O conceito aqui é bem simples. Iremos, de alguma maneira, fazer com que o próprio arquivo que estamos executando, localize a parte dele não executável e em seguida descompacte-a e execute os scripts de instalação.

Saiu um artigo falando como fazer em algum lugar, mas eu não consegui entrar na URL de jeito nenhum. Como achei a idéia interessante, analisei o CrossOver plugin (que utiliza a mesma técnica) e agora repasso adiante. Espero que vocês achem interessante.

2 O que fazer

Para fazer isso, primeiro vamos precisar de um pacote .tgz (formato utilizado pelo Slackware) uma boa maneira de fazer um pacote destes é utilizando o software checkinstall. Depois do pacote feito, trocamos o nome dele para algo do tipo pacote.sh e depois vamos editá-lo no elvis. Neste edição, temos que incluir um cabeçalho com os comandos a serem executados e ONDE começa a parte com o arquivo .tgz a fim de que possa ser descompactado.

3 Como fazer

É bem mais simples entender o quê fazer lendo o código em questão:

	skip=7
	tail +$skip $0 | tar -xzf - -C / 
	source /install/doinst.sh 
	rm /install/doinst.sh
	rmdir /install
	exit

Edite o arquivo com todo cuidado. Apenas essas linhas devem ficar no começo do arquivo original. Veja como funciona:

skip=7

Indica a partir de que linha vai começar o arquivo compactado. Como nosso cabeçalho tem 6 linhas, o arquivo compactado começa a partir da sétima linha. Se o seu cabeçalho for maior, deve mudar esse número.

tail +$skip $0 | tar -xzf - -C /

Aqui está o pulo do gato. O comando tail pega as última linhas de um arquivo e as mostra na tela. Se você faz:

	tail +2 arquivo

Ele pega todas as linhas a partir da linha 2 do arquivo e mostra na tela. Nós utilizamos o $0 no lugar do arquivo. $0 é o nome do comando que foi executado. Então esta linha, o que queremos dizer é mais ou menos:

	mostre o conteúdo do arquivo pacote.sh a partir da linha 6

O | redireciona a saída para o comando tar, que está fazendo o seguinte:

  • -xzf = eXtrai, gunZip (descompacta) o arquivo (File)
  • - = pega a saída que o | está passando como sendo o arquivo de entrada
  • -C / = descomprime os resultados no diretório /

Vemos aqui que ele está pegando o resto do arquivo (o pacote .tgz) e transferindo para o tar que descompacta e coloca os arquivos nos locais corretos.

source /install/doinst.sh

Executa o script de instalação, responsável (entre outras coisas) por colocar o nome dos pacotes gerados pelo checkinstall na lista de pacotes instalados.

rm -rf /install

Remove o diretório /install que depois de executado não é mais necessário.

exit

Sai do script. Se você não colocar isto, ele vai executar a próxima linha (que é o arquivo compactado) e vai dar uma baita mensagem de erro.

4 Conclusão

Fácil, prático e eficiente -;) Com a vantagem de ser possível instalar em qualquer distro (tudo bem que as outras distros não irão aproveitar as informações sobre o pacote para desinstalar software depois). Qualquer dúvida a respeito, mande e-mail para piterpk@terra.com.br

Links Principal Artigos Piter Punk Dicas Programas
 
Powered by Slackware Linux - Written in VIm (the best one!) Last Update: 30 Oct 2004