Arquivos históricos do BR-Linux.org apresenta:

Linux in Brazil (Self-extract )

Fazendo um Pacote auto-instalável

Piter PUNK (piterpk@terra.com.br)

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=6
	tail +$skip $0 | tar -xzf - -C / 
	source /install/doinst.sh 
	rm -rf /install 
	exit

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

skip=6

Indica a partir de que linha vai começar o arquivo compactado. Como nosso cabeçalho tem 5 linhas, o arquivo compactado começa a partir da sexta 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:

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


O Arquivo Histórico do BR-Linux.org mantém no ar (sem alteração, exceto quanto à formatação) notícias, artigos e outros textos publicados originalmente no site na segunda metade da década de 1990 e na primeira década do século XXI, que contam parte considerável a história do Linux e do Open Source no Brasil. Exceto quando indicado em contrário, a autoria dos textos é de Augusto Campos, e os termos de uso podem ser consultados na capa do BR-Linux.org. Considerando seu caráter histórico, é provável que boa parte dos links estejam quebrados, e que as informações deste texto estejam desatualizadas.