você está aqui: Home  → Arquivo de Mensagens

Criando pacotes a partir dos fontes com o checkinstall

Colaboração: Carlos E. Morimoto

Data de Publicação: 23 de Junho de 2005

Todas as distribuições incluem um conjunto generoso de pacotes, seja diretamente nos CDs de instalação, seja em repositórios disponíveis via web. Os repositórios oficiais do Debian, por exemplo, combinados com o repositório non-free e mais alguns repositórios não oficiais podem facilmente oferecer mais de 22.000 pacotes diferentes.

Mesmo assim, muitos drivers e softwares não estão disponíveis nos repositórios e precisam ser instalados manualmente a partir do código fonte. O checkinstall facilita esta tarefa, principalmente se você precisa instalar o mesmo software em várias máquinas ou quer distribuí-lo para amigos, gerando um pacote .deb, .tgz ou .rpm com o software pré-compilado, que pode ser instalado usando o gerenciador de pacotes de cada distribuição.

Para usá-lo, comece instalando o pacote usando o apt-get, urpmi, yun ou outro gerenciador de pacotes usado na sua distribuição. Ele é um pacote bastante comum, que vem incluído em todas as principais distribuições. No Debian por exemplo bastaria um:

  # apt-get install checkinstall

O funcionamento do checkinstall é simples. Ao instalar qualquer pacote a partir do código fonte, substitua o comando "make install" pelo comando apropriado do checkinstall. Onde:

  # checkinstall -D

(gera um pacote .deb, para distribuições derivadas do Debian)

  # checkinstall -R

(gera um pacote .rpm, que pode ser usado em distribuições derivadas do Red Hat)

  # checkinstall -S

(gera um pacote .tgz, para o Slackware)

Por exemplo, para gerar um pacote contendo os módulos e utilitários do driver para modems 537EP, disponível no http://linmodems.technion.ac.il/packages/ os comandos seriam:

  $ tar -zxvf intel-537EP-2.60.80.0.tgz
  $ cd intel-537EP-2.60.80.0/
  $ make clean
  $ make 537
  # checkinstall -D

Lembre-se que o checkinstall deve ser sempre executado como root. Ele vai gerar o pacote, salvando-o no diretório a partir de onde foi chamado (/home/kurumin/intel-537EP-2.60.80.0/intel-537ep-2.60.80.0_2.60.80.0-1_i386.deb no meu caso) e em seguida instalá-lo na sua máquina.

Durante a geração do pacote, ele fará algumas perguntas, a fim de gerar o arquivo de controle que contém informações como o mantenedor do pacote (você no caso), uma descrição do pacote (um texto de poucas linhas explicando o que ele faz) e a versão.

Ao gerar seus próprios pacotes, você pode ter problemas de instalação, caso seu pacote inclua algum arquivo que também existe em outro pacote já instalado no sistema, gerando erros como:

  (Lendo banco de dados ... 68608 arquivos e diretórios atualmente
  instalados.)
  Descompactando intel-537ep-2.60.80.0 (de .../intel-537ep-2.60.80.0_2.60.80.0-1_i386.deb) ...
  dpkg: erro processando /home/kurumin/intel-537EP-2.60.80.0/intel-537ep-2.60.80.0_2.60.80.0-1_i386.deb
  (--install):
  tentando sobrescrever
  `/lib/modules/2.6.8.1-kanotix-10/modules.usbmap', que também está
  no pacote qemu
  dpkg-deb: subprocesso paste morto por sinal (Broken pipe)
  Erros foram encontrados durante processamento de:
  /home/kurumin/intel-537EP-2.60.80.0/intel-537ep-2.60.80.0_2.60.80.0-1_i386.deb
  

Nestes casos você pode modificar o pacote, para não incluir o arquivo. Desinstalar o outro pacote com quem ele conflita (o qemu no caso) ou, caso perceba que é um problema benigno, que não trará maiores conseqüências, forçar a instalação do seu pacote, para que ele subscreva o arquivo usado por outro.

No caso de um pacote .deb, o comando para forçar a instalação seria:

  # dpkg -i --force-all pacote.deb

No caso de um pacote do .rpm, o comando seria:

  # rpm -iv --replacefiles pacote.rpm

ou:

  # rpm -iv --force pacote.rpm

No Slackware não existe a necessidade de forçar a instalação de pacotes, pois o gerenciador não checa dependências ou arquivos duplicados, deixando que você faça o que bem entender. Isto é ao mesmo tempo uma vantagem (você pode fazer o que quiser) e uma grande desvantagens (você pode destruir o sistema se não souber o que está fazendo).

Existem ainda algumas limitações gerais com pacotes pré-compilados, que você deve levar em consideração:

Em primeiro lugar, o pacote gerado foi compilado para a sua máquina e para a distribuição atualmente em uso. Não existe garantia que o mesmo pacote vai funcionar para distribuições diferentes, mesmo que elas utilizem o mesmo padrão de pacotes.

No caso de pacotes contendo drivers, como o driver para modems 537EP que usei no exemplo, é gerado um módulo pré-compilado, que vai funcionar apenas em distribuições que utilizem a mesma versão do Kernel. Ou seja, basicamente apenas na mesma versão da mesma distribuição que você está usando. Não adianta compilar um pacote no Mandrake 10.2 e esperar que ele funcione no Slackware 11 por exemplo.


Gostou da dica? Conheça outros trabalhos do autor



Veja a relação completa dos artigos de Carlos E. Morimoto

 

 

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script