De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


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, yum 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 os comandos seriam:

$ tar -zxvf intel-537EP-2.60.80.0.tgz
$ cd intel-537EP-2.60.80.0/
$ make clean
$ make 537
$ sudo 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.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


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