quarta-feira, 22 de julho de 2009

Obtendo código fonte dos pacotes da sua distro

Por que não baixar direto do site oficial?

O código do projeto pode diferir da sua distribuição. Isso pode acontecer por diversos motivos:

  1. A distro pode não adotar a última release.

    No Ubuntu, por exemplo, os pacotes são 'freezados' depois de uma release de uma versão e as atualizações geralmente são apenas para corrigir falhas de segurança e estabilidade. Apenas na próxima versão do Ubuntu você terá pacotes atualizados.

  2. A distro pode alterar o código fonte para adequar aos seus propósitos.

    De um modo geral, cada distribuição tem um foco específico, por exemplo, facilidade. É comum distribuições com ênfase em segurança aplicarem 'patches' próprios ou de terceiros.

  3. A distro pode 'quebrar' um projeto em diversos pacotes.

    Alguns módulos do Apache, por exemplo, que são distribuídos no código fonte oficial, estão espalhados em diversos pacotes no Ubuntu.

Através de arquivos .deb

Por padrão os arquivos deb ficam cacheados, basta copia-los para o local desejado e 'abri-los'. O local padrão de cache é /var/cache/apt/archives/. O aplicativo ar serve para abrir os arquivos .deb.

$ cp /var/cache/apt/archives/nome-do-pacote
$ ar x nome-do-pacote

Utilizando o APT para obter os pacotes

Para obter o código fonte do pacote não é necessário qualquer permissão, visto que nada será alterado no sistema, apenas iremos baixar o pacote. Este pacote pode diferir do que foi instalado, pois o código fonte é baixado de outro repositório assinalado por deb-src. Isto explica os diversos deb-src que podem haver na sua source list.

$ apt-get source nome-do-pacote

Com isso, obteremos 3 arquivos:

  • .orig.tar.gz: arquivo original;
  • .diff.gz: arquivo com as diferenças entre o original e a distribuição;
  • .dsc: arquivo que descreve o pacote do código fonte;

Sem parâmetros adicionais, apt-get source irá efetuar o download, descompactar os arquivos .gz e aplicar o diff. No final teremos um diretório com o código fonte que obteríamos caso fizéssemos um apt-get install ou um apt-get update (Isto partindo do pressuposto que os repositórios deb e deb-src estejam condizentes, o que acontece numa condição normal).

Por que utilizar o código fonte de um projeto?

Para a coisa mais preciosa que existe: estudar.