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
|