Banco de dados do pacman :: blog do liquuid

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)


1 comentários

TAGS : pacman archlinux slackware db
Thiago Duarte

Olá "Liquuid" sou Thiago Duarte e tenho um Planeta sobre mac, gostaria de convidar você e seu blog para participarem.

Caso você não saiba o que é um planeta, tenha alguma outra dúvida, ou se interesse em se juntar a nossa equipe envie um e-mail para:

eu(at)thiagoduarte.com.br

ou entre em www.macplaneta.com.br e clique em "Sobre".


Gostaria de usar seu avatar nos comentários desse blog ? Cadastre-se aqui.

Nome: Email:

Digite a letra "a" 3 vezes para confirmar sua humanidade