Criando pacotes a partir dos fontes com o checkinstall

Dica escrita por: Carlos E. Morimoto


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 pacote com o 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, do 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, 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

Existem 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.

Fonte: http://www.guiadohardware.net/linux/dicas/100.htm

Nenhum comentário:

Postar um comentário

Insira seu comentário - O mesmo será submetido à aprovação!

linux-cookbook

Grupos do Google
Participe do grupo linux-cookbook
E-mail:
Visitar este grupo