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.