Self-extract

Linux in Brazil

Documentação original
e de qualidade
em bom português

O texto abaixo foi publicado no BR-Linux antes de 2005, e está mantido aqui por razões históricas. Veja o material atualizado diariamente do BR-Linux em http://br-linux.org
Dúvidas comuns | Perguntar no Fórum | Notícias | Mais documentos | Contato
 
Destaques de hoje:
  • A semana no BR-Linux: Enchente, 13 milhões de downloads, Fedora 10
  • Quem ganha? Benchmarks comparam: Ubuntu, Fedora, OpenSolaris e FreeBSD
  • 1 ano do cyber 100% Linux de Floripa
  • As redes P2P vão destruir o mundo?
  • 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