Desde que inventaram os gerenciadores de pacotes e aplicativos como YUM e apt-get, instalar softwares no Linux ficou até mais simples do que instalar um software no Windows, basta uma linha de comando tão simples quanto “yum install pacote” e a mágica acontece.
Como primeiro post desse ano, escolhi mostrar como são os bastidores de envio de pacotes para o YUM, ou seja: como um software chega da fonte original até o seu Fedora.
A primeira coisa a fazer é esclarecer que o Projeto Fedora tem dezenas de empacotadores e que esses empacotadores fazem parte de um grupo chamado “packagers”, que tem permissões especiais de acesso. Cada empacotador é responsável por gerar o RPM para um ou mais softwares que ele “adota”; ou seja: o empacotador encontra um software interessante em qualquer lugar (Sourceforge, Launchpad etc) e decide criar um RPM oficial para o Fedora.
A submissão de um pacote é bastante rigorosa e pode levar meses para que um pacote seja aprovado. É preciso seguir à risca toda a metodologia de empacotamento e que o software a ser empacotado seja considerado “livre” o bastante para entrar no Fedora (diversos revisores avaliam o RPM, analisando o código e a licença). Os detalhes desse processo são irrelevantes para este artigo; o que nos interessa aqui é que, para enviar o pacote aos repositórios, é preciso ser um empacotador.
Diversas ferramentas foram preparadas de modo a facilitar a vida de quem empacota para o Projeto Fedora e basta executar
para instalar uma coleção de scripts e ferramentas essenciais para a criação de RPMs e para o envio dos pacotes prontos para os servidores do Projeto (compiladores, cvs, rpmbuild…).
Após instalar o “fedora-packager”, é preciso executar
na pasta home do usuário. Este comando prepara o ambiente de desenvolvimento, ajustando as macros para o rpmbuild, gerando e conferindo chaves que serão usadas durante a comunicação com os servidores CVS.
Por motivos de organização, a maioria dos empacotadores cria uma pasta de trabalho durante a remessa de pacotes; eu crio a pasta “cvs”, mas o nome tanto faz:
$ cd ~/cvs
Como comentei no começo, ter o pacote aprovado é um processo trabalhoso e, logo que aprovado, ele (o pacote) ganha uma pasta (e permissões) no CVS. O empacotador deve, antes de mais nada, sincronizar sua pasta local com a pasta virtual nos servidores do Projeto Fedora:
No meu exemplo, vou mostrar o pacote BKChem, um software para desenho de estruturas moleculares em 2D:
Esse script vai baixar meu “diretório de trabalho” direto do CVS para o meu disco rígido. Eis o conteúdo dele:
common CVS devel F-10 F-11 F-12 F-9 Makefile
Observe que há diretórios para algumas versões do Fedora (F-12, F-11, F-10…) e para a versão de desenvolvimento, que chamamos de Rawhide.
Novamente, convém lembrar que o meu RPM já está pronto e eu apenas vou remetê-lo para os servidores do Projeto Fedora de modo a deixá-lo disponível para todos os usuários.
O meu RPM, de fato, não será usado para nada. Cada um dos RPMs disponibilizados pelo projeto Fedora é compilado e assinado lá, por isso, em vez de enviar o RPM, eu envio o SRPM (Source RPM), um para cada versão ativa do Fedora (atualmente, as versões ativas são Fedora 11, 12 e Rawhide).
Novamente, a vida fica menos complicada porque um script checa e envia o SRPM:
Veja o termo em negrito, ele define para qual “branch” (versão do Fedora) esse SRPM irá. No caso, mandei três vezes: F-11, F-12 e devel.
Veja aqui o upload sendo feito e as mensagens exibidas durante a verificação.
Quando esse processo termina, você é levado a uma tela do VI onde entra um pequeno log sobre o upload. Veja aqui.
Ao salvar o log, o processo de “commit” do SRPM termina com mais algumas checagens (que você pode ver aqui).
Pacote SRPM enviado, log feito, chega a hora de compilar o pacote lá no servidor. Vou começar a compilação para o Fedora 11 e, por isso, entro na pasta F-11:
ls
bkchem-crash.patch bkchem.desktop bkchem-setup.patch bkchem.spec branch CVS import.log Makefile sources
Sincronizo novamente a pasta, para garantir que eu e os servidores estamos trabalhando com as mesmas versões de arquivos:
e, digito o comando que faz a compilação do meu RPM lá nos servidores do Projeto Fedora:
Essa compilação gera pacotes para todas as arquiteturas disponíveis pelo Projeto (veja). Aliás, o software que compila, checa e assina cada RPM chama-se Koji. Todo o processo de compilação tem que ser feito para cada uma das versões correntes do Fedora, lembre-se. Isso significa que, depois de fazer isso para o Fedora 11, fiz, também para o Fedora 12 e para o devel.
Enfim, depois de passar pelo Koji, o empacotador vai ao Bodhi, que é a interface responsável por puxar os RPMs prontos para os repositórios. Nele você define se o pacote vai para “testing” ou “stable”, define se o pacote é uma atualização de segurança, um conserto de bug ou uma melhoria, além, é claro, de marcar o pacote como necessitando ou não de um reboot após a atualização.
Pronto! Em breve o pacote estará alcançando um repositório perto de você e com um simples “yum install” você poderá desfrutar de um pacote novinho.

Vamos ao primeiro artigo da série infinita “Como funciona?”, que deve agradar aos mais curiosos e pode, mais cedo ou mais tarde, acabar servindo para algo em algum momento.




Comentários