você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

Criando Pacotes Task para APT

Colaboração: André Pereira

Data de Publicação: 27 de Janeiro de 2007

Quem já usou a distro Conectiva Linux conhece bem os pacotes "task". Para quem não os conhece aqui vai uma breve explicação: pacotes "task" são pacotes vazios, que não possuem nenhum tipo de software. Possuem apenas uma série de dependências.

Mas qual a finalidade disso? Simples!

Estes pacotes existem para realizar tarefas. Por exemplo, um pacote chamado task-lamp poderia ser responsável por instalar todos os pacotes referentes a um servidor LAMP (Linux, Apache, Mysql e PHP) e suas respectivas dependências.

Neste artigo demonstrarei uma forma fácil de criar um pacote task.


Os comandos abaixo foram testados no Ubuntu Edgy.

O software que iremos utilizar para este fim é o equivs, portanto:

$ sudo apt-get install equivs

Uma vez instalado o equivs devemos criar um arquivo de controle padrão, o qual será utilizado para gerar o pacote, e então editá-lo conforme as nossas necessidades:

$ equivs-control task-myprofile

onde "task-myprofile" é o nome do arquivo de controle a ser criado e futuramente será o nome do pacote.

Você também pode usar o arquivo modelo abaixo ou mesmo exemplos que acompanham a instalação do equivs (/usr/share/doc/examples/).

### Criado em:  20/01/2007
### André Pereira <andre@capengenharia.com.br>
Section: misc
Priority: optional
Standards-Version: 3.6.2

Package: andresp-default
Version: 0.1
Maintainer: André Pereira <andre@capengenharia.com.br>
Depends: acroread,broffice.org,firefox,gwenview,k3b,kget,
         knotes,kpdf,ksnapshot,ktorrent,mozilla-mplayer,
	 mozilla-plugin-vlc,mplayer,xmms
Description: Pacote Task com os meus softwares desktop mais usados.

Uma vez criado e editado o arquivo de controle, é hora de construir o pacote, para isso usa-se o comando equivs-build

$ equivs-build  task-myprofile

Isto irá gerar o arquivo .deb que depende dos seus pacotes favoritos.

Pronto! Agora o seu pacote .deb que possui apenas as dependências que você quer instalar está pronto, porém, não é possível instalar este pacote diretamente via dpkg (dpkg -i task-myprofile_...-.deb), a instalação não será efetuada devido aos "problemas" de dependência (lembre-se, o dpkg não resolve dependências automaticamente, quem o faz é o APT).

Para instalar o pacote recém criado via APT, é necessario configurar um repositorio local de pacotes .deb:

Crie um diretorio para o seu repositorio:

$ sudo bash (vamos trabalhar como root)
# mkdir /home/apt-local

Copie o arquivo .deb para este diretorio:

# cp /<caminho>/<nomedopacote>.deb /home/apt-local

Detro do diretorio /home crie o arquivo Packages.gz do repositorio:

# cd /home
# dpkg-scanpackages apt-local/ /dev/null | gzip > apt-local/Packages.gz

Adicione o novo repositorio no sources.list

# echo "deb file:/home apt-local/" >> /etc/apt/sources.list

Atualize a base apt

# apt-get update

E finalmente instale o pacote

# apt-get install <nomedopacote>

Observação:

A criação de pacotes vazios tem outras finalidades além da descrita neste artigo.

Imagine o seguinte cenário: você está montando um servidor e decide compilar o Apache manualmente por questões pessoais de configuração, ao invés de instalá-lo via APT. Até ai tudo bem. Porém, se você tentar instalar via APT algum pacote que dependa do Apache, o APT tentará instalar novamente o Apache, uma vez que ele "não sabe" da existência do Apache compilado.

Uma forma elegante de resolver este problema é criar e instalar um pacote vazio referente ao Apache que foi instalado manualmente, desta forma a base APT saberá que o Apache já está instalado e não tentará instalá-lo novamente, preservando a sua compilação / instalação. Para isso use a opção "Provides" no arquivo de controle do equivs. Mas ATENÇÃO: não é nem um pouco recomendada a utilização deste recurso para resolver dependências quebradas. Instalar pacotes sem suas respectivas depências podem provocar erros imprevisíveis no sistema.



Veja a relação completa dos artigos de André Pereira