Banco de dados do pacman
Pacman é o gerenciador de pacotes do archlinux, e como tudo no archlinux ele é simples e tosco (no bom sentido) . Ao contrario do RPM e dpkg que usam banco de dados binários, o pacman tem uma abordagem mais semelhante ao dos BSDs, mantendo as informações dos pacotes em arquivos TXT.
Essa abordagem também é utilizada no slackware, mas em sua implementação a solução é ainda mais tosca, no slack o installpkg guarda as informações em arquivos com o nome dos pacotes no diretório /var/log/packages, por exemplo : /var/log/packages/whois-4.7.21-i486-1 . O conteúdo desses arquivos no slackware é parecido como segue abaixo :
liquuid@aletta:/var/log/packages$ cat whois-4.7.21-i486-1 PACKAGE NAME: whois-4.7.21-i486-1 COMPRESSED PACKAGE SIZE: 39 K UNCOMPRESSED PACKAGE SIZE: 150 K PACKAGE LOCATION: /var/log/mount/slackware/n/whois-4.7.21-i486-1.tgz PACKAGE DESCRIPTION: whois: whois (whois directory client) whois: whois: This is an enhanced whois (RFC 954) client derived from the BSD and whois: RIPE whois programs. It can automatically select the appropriate whois: whois server for most queries. whois: whois: This version of whois was written by Marco d'Itri whois: For more information, see: http://www.linux.it/~md/software/ whois: whois: whois: FILE LIST: ./ usr/ usr/share/ usr/share/locale/ usr/share/locale/ru/ usr/share/locale/ru/LC_MESSAGES/ usr/share/locale/ru/LC_MESSAGES/whois.mo usr/share/locale/no/ usr/share/locale/no/LC_MESSAGES/ usr/share/locale/no/LC_MESSAGES/whois.mo usr/share/locale/el/ usr/share/locale/el/LC_MESSAGES/ usr/share/locale/el/LC_MESSAGES/whois.mo usr/share/locale/ja/ usr/share/locale/ja/LC_MESSAGES/ usr/share/locale/ja/LC_MESSAGES/whois.mo usr/share/locale/es/ usr/share/locale/es/LC_MESSAGES/ usr/share/locale/es/LC_MESSAGES/whois.mo usr/share/locale/de/ usr/share/locale/de/LC_MESSAGES/ . . . . usr/doc/whois-4.7.21/COPYING usr/man/ usr/man/man1/ usr/man/man1/whois.1.gz install/ install/slack-desc
Arquivo possui apenas uma descrição completa do pacote, tamanho do pacote e a lista de arquivos instalados no sistema. Não há informações sobre dependências (ao contrario das crendices populares o slackware também precisa corrigir dependências) , num sistema slackware puro o usuário deve corrigir as depedências manualmente. Também não está registrado os checksums, o usuário deve checar a autenticidade dos pacotes que está instalando manualmente.
O pacman tem uma abordagem diferente, ele traz dois bancos de dados, um local e outro remoto (sync). Ambos ficam no diretório /var/lib/pacman/{local,sync}. O banco de dados local é populado com diretórios, um para cada pacote instalado, exemplo : yasm-0.7.1-1 . Dentro desse diretório encontramos três arquivos : depends , desc e files.
O arquivo depends traz informações sobre as dependências exemplo :
[liquuid@amakusa yasm-0.7.1-1]$ cat depends %DEPENDS% glibc
O arquivo desc, traz informações como tamanho, empacotador etc...
[liquuid@amakusa yasm-0.7.1-1]$ cat desc %NAME% yasm %VERSION% 0.7.1-1 %DESC% Yasm is a complete rewrite of the NASM assembler designed from the ground up to allow for multiple assembler syntaxes to be supported (eg, NASM, TASM, GAS, etc.) %URL% http://www.tortall.net/projects/yasm/ %LICENSE% custom %ARCH% i686 %BUILDDATE% 1211487016 %INSTALLDATE% 1216511055 %PACKAGER% AndyRTR_%SIZE% 1623772 %REASON% 1
O arquivo files lista o conteúdo do pacote:
[liquuid@amakusa yasm-0.7.1-1]$ cat files %FILES% usr/ usr/bin/ usr/bin/yasm usr/include/ usr/include/libyasm-stdint.h usr/include/libyasm.h usr/include/libyasm/ usr/include/libyasm/arch.h usr/include/libyasm/assocdat.h usr/include/libyasm/bitvect.h usr/include/libyasm/bytecode.h usr/include/libyasm/compat-queue.h . . . usr/share/licenses/ usr/share/licenses/yasm/ usr/share/licenses/yasm/COPYING usr/share/man/ usr/share/man/man1/ usr/share/man/man1/yasm.1.gz usr/share/man/man7/ usr/share/man/man7/yasm_arch.7.gz usr/share/man/man7/yasm_dbgfmts.7.gz usr/share/man/man7/yasm_objfmts.7.gz usr/share/man/man7/yasm_parsers.7.gz
O diretório sync traz informações parecidas para todos os pacotes oferecidos pelos servidores remotos. Dentro do sync existe um diretório para cada repositório, e dentro dele diretórios para todos os pacotes. Assim como nos pacotes instalados localmente os pacotes listados no diretório sync também tem suas propriedades descritas por arquivos, mas apenas : depends e desc. Mas com uma diferença básica. o arquivo desc possui um hash md5 para garantir a autenticidade do pacote.
Simples, tosco e funcional :0)



