Usando o APT

O APT[17], é um conjunto de ferramentas utilizadas para gerenciar pacotes de forma automatizada, capaz de resolver automaticamente dependências de pacotes, utilizar e criar repositórios de pacotes. O APT pode ser utilizado para instalar, remover ou atualizar um aplicativo, verificar conflitos de versões de aplicativos instalados, e até mesmo fazer a atualização automática de todo o seu sistema.

Configurando o APT

O APT utiliza repositórios de arquivos RPM ao instalar ou atualizar pacotes no sistema. Esses repositórios podem estar em sites na Internet, no CD-ROM da distribuição, ou podem ser construídos pelo administrador. A configuração da localização desses repositórios é feita através do arquivo /etc/apt/sources.list.

Cada linha do arquivo sources.list contém as informações relativas a um repositório de arquivos RPM e o seu formato é:

TIPO [CHAVE] URI PARÂMETROS

O campo TIPO pode assumir os valores rpm ou rpm-src, para repositórios que contém pacotes binários ou repositórios de arquivos fonte, respectivamente. O campo [CHAVE] contém o nome da assinatura digital do distribuidor dos pacotes, garantido assim a autenticidade dos pacotes, sendo este campo opcional. O campo URI contém a localização do repositório propriamente dito, e finalmente o campo PARÂMETROS contém informações adicionais sobre a localização dos pacotes dentro do repositório. Nesta seção será mostrado detalhadamente cada um desses campos, e de um modo geral, sua sintaxe é esta:

rpm [gpg-id] uri distribuição componente [componente...]

O exemplo abaixo mostra um trecho do arquivo sources.list[18]:

# Official Conectiva Linux 10 package repositories.
# If these are busy, please use a mirror near you.
#
rpm [cncbr] ftp://ftp.conectiva.com/pub/conectiva 10/i386 all
rpm-src [cncbr] ftp://ftp.conectiva.com/pub/conectiva 10/i386 all

# Updates have their own repository.
rpm [cncbr] ftp://atualizacoes.conectiva.com.br 10/i386 updates

Estes são somente exemplos; é importante verificar se os caminhos estão corretos antes de iniciar o processo.

[Tip]Dica

Se você não consegue se conectar ao repositório configurado em seu arquivo sources.list, procure pelos mirrors no próprio arquivo (basta descomentar as linhas referentes a eles).

O Campo TIPO

A variável TIPO indica qual tipo de pacote será utilizado. Pode ser rpm, rpm-src ou deb, embora esse último não possa ser utilizado com o Conectiva Linux. Como existe a possibilidade de ter mais de uma linha apontando para os repositórios do APT, você pode querer colocar o repositório mais rápido na primeira linha.

[Note]Nota

O tipo rpm-src é utilizado para indicar repositórios com fontes de pacotes (arquivos SRPM). Dessa maneira, utilizando o comando apt-get source algum_pacote, você pode fazer o download dos arquivos fonte do pacote algum_pacote e compilá-lo.

O Campo [CHAVE]

O arquivos rpm podem ser assinados digitalmente com uma chave criptográfica, e o APT pode utilizar esse recurso para garantir que os pacotes utilizados sejam "autênticos", isto é, que eles sejam assinados pelo autor ou pela empresa responsável pela distribuição deles. Para os administradores, o uso de pacotes assinados pela distribuição garante que eles não contêm código malicioso criado por uma pessoa mal-intencionada.

Embora recomendado, esse campo não é obrigatório e pode ser omitido. Veja como adicionar assinaturas digitais na .

O Campo URI

As variáveis do campo URI indicam a localização do servidor de repositório do APT. O APT pode classificar o URI para o uso interno, mas é muito importante que estas linhas estejam na ordem do servidor mais rápido para o mais lento.

Os parâmetros após a URI informam os diretórios que contém os arquivos rpm ou srpm dentro do repositório. Veja mais sobre esses campos na .

Você pode usar diversos fontes para um URI. Veja alguns exemplos:

ftp

Este método especifica uma conexão FTP para o servidor de repositório.

ftp://ftp.conectiva.com.br/repositorio
http

Este método especifica que você fará uma conexão HTTP ao servidor de repositório.

http://www.conectiva.com.br/repositorio
file

Este esquema permite que um diretório arbitrário seja considerado um repositório. Isto é útil para montagens do tipo NFS, e para mirrors locais.

rpm file:/repositorio 

Verifique todos os tipos na página de manual do arquivo sources.list (man sources.list).

O diretório archives

Quando você solicita ao APT para instalar algum pacote ou efetuar uma atualização (upgrade ou dist-upgrade), ele fará download dos pacotes necessários para /var/cache/apt/archives/partial/ e, após verificar seus hashes e tamanhos de MD5, moverá estes pacotes para /var/cache/apt/archives.

Você pode assumir que todo arquivo no diretório archives foi verificado. Utilize o comando apt-get clean para excluir os arquivos no diretório archives e archives/partial.

Usando as assinaturas GPG

O APT tem suporte ao gpg[19]. Dessa forma, você pode usar isto para certificar-se de que está obtendo os pacotes genuínos do seu fornecedor.

A sintaxe do arquivo sources.list tem de ser alterada como desta maneira para que possamos utilizar o gpg:

rpm [gpg-id] uri ...

Após efetuar esta mudança, isto é, introduzir o campo [gpg-id], você terá de certificar-se de que tem a chave pública do seu fornecedor em seu chaveiro gpg.

A gpg-id (os colchetes no arquivo source.list devem ficar no local indicado) é usada pelo fornecedor para assinar seus pacotes, garantido assim a genuinidade do fornecedor. Na realidade, é um indicador para a última parte da assinatura digital do fornecedor disponível no arquivo /etc/apt/vendors.list.

Exemplo 4.1. vendors.list

# Este arquivo contém a lista de fornecedores 
# de pacotes (empresas ou pessoas) nos quais 
# você pode confiar.

simple-key "cncbr" { 
        Fingerprint  "30EAE85C3D91C29880B4F0B3E368DDD099807190"; 
        Name "Conectiva S.A. <security@conectiva.com.br>"; 
}

Exemplo 4.2. Importando uma chave gpg

# gpg --import arquivo_com_a_chave

No Exemplo 4.2. Importando uma chave gpg, a opção arquivo_com_a_chave[20] é um arquivo contendo a chave pública gpg do seu fornecedor.

Este comando importará a chave de seu fornecedor no chaveiro do usuário root (já que apenas ele pode instalar, remover ou manipular pacotes, não teria sentido importar esta chave no chaveiro de outro usuário).

Caso você queira utilizar o apt sem a assinatura gpg, basta que você retire o [gpg-id] da linha do endereço do repositório que consta no arquivo sources.list. O padrão para o site da Conectiva é utilizar a assinatura gpg.

Apenas lembre-se o apt-get está em constante desenvolvimento. Caso você encontre algum erro ao utilizá-lo, você pode auxiliar na correção, enviando detalhes sobre o erro que encontrou. Você pode encontrar mais informações sobre onde e para quem enviar estas informações no site do moin da Conectiva.

Usando o apt-cdrom

O apt-cdrom é um comando simples, utilizado para adicionar o CD-ROM ao arquivo sources.list, fazendo com que o apt-get procure no seu CD-ROM por pacotes. Sua sintaxe é uma variação desta linha de comando:

# apt-cdrom add

O apt-cdrom usa informação do arquivo /etc/fstab, caso você não especifique onde está o drive de CD-ROM. Após a execução do comando apt-cdrom add, uma linha semelhante a do exemplo a seguir será incluída no seu arquivo sources.list.

rpm cdrom:[Conectiva Linux 10 - CD1]/ conectiva 001

Uma possível saída do comando apt-cdrom add seria a seguinte:

# apt-cdrom add 
Usando ponto de montagem do CD-ROM /mnt/cdrom/ 
Desmontando o CD-ROM 
Insira um disquete no drive e pressione Enter 
Montando o CD-ROM
Identificando..[c19afb6208760e4f2542607f75a70893-2] 
Procurando por arquivos de índice no disco..  
Encontrei 1 índices de pacotes e 0 índices de fonte.  
Rótulo encontrado 'Conectiva Linux 10 - CD1'
Este disco é chamado: 'Conectiva Linux 10 - CD1' 
Lendo os Índices... Feito
Gravando nova lista-fonte 
As entradas de lista-fonte para este disco são: 
rpm cdrom:[Conectiva Linux 10 - CD1] conectiva 001 
Repetir este processo para o restante dos CDs em seu conjunto.

Utilizando o apt-get

O apt-get é uma das ferramentas do APT e provavelmente é o comando que será utilizado com mais freqüência. Os comandos do apt-get são muito fáceis e intuitivos. Eles seguem uma estrutura muito simples:

# apt-get opções comando
# apt-get opções install pacote [pacote ...]

A linha de comando pode ser uma variação dos tipos básicos a seguir:

apt-get update

Atualiza o banco de dados local do apt-get com os arquivos pkglist[21] do servidor.

apt-get check

Verifica a integridade do seu sistema. Execute este comando quando tiver dúvidas quanto à integridade dos pacotes do seu sistema. É recomendável executá-lo antes de executar uma atualização de distribuição.

apt-get install algum-pacote

Instala algum-pacote, solucionando e carregando automaticamente os pacotes dos quais o aplicativo a ser instalado depende. Caso o pacote algum-pacote já esteja instalado, o apt-get tentará atualizá-lo.

apt-get source algum-pacote

Faz o download dos fontes de algum-pacote (SRPM). Note que é necessário que haja uma linha com o TIPO rpm-src no arquivo sources.list para que este comando seja executado.

apt-get upgrade

Procura por pacotes desatualizados no sistema e os atualiza automaticamente. Atualizará todos os pacotes antigos no sistema. Para atualizar apenas um pacote, utilize o parâmetro install, já descrito.

apt-get dist-upgrade

Semelhante ao apt-get upgrade, mas instala todos os pacotes básicos e tenta atualizar tudo, instalando novos pacotes caso seja necessário. É uma maneira mais fácil de fazer uma atualização de sua distribuição[22].

apt-get remove algum-pacote

Remove o pacote algum-pacote e todos os demais pacotes que dele dependam.

apt-get clean

Remove os arquivos encontrados no diretório cache, localizado em /var/cache/apt/archives, liberando um pouco de espaço no seu disco de sistema. É uma maneira automática de apagar os arquivos que já foram instalados e que não são mais necessários ao sistema.

Criando Repositórios RPM para o APT

Além de utilizar os repositórios públicos disponíveis na Internet, um administrador poderá montar o seu próprio repositório, o que pode ser bastante útil para se atender uma rede local, evitando que cada máquina a ser atualizada precise buscar os seus pacotes na Internet, consumindo banda de rede desnecessariamente.

Antes de prosseguir com a criação de um repositório, o administrador deve se certificar de que a máquina onde será armazenado o repositório possui um servidor web, um servidor de FTP ou algum tipo de acesso funcionando (por exemplo, NFS).

Um repositório RPM possui uma estrutura padronizada de diretórios. Na base está o diretório principal, que conterá os arquivos de licença, os diretórios com os arquivos fontes, arquivos binários, etc. É equivalente ao diretório raiz do CD da distribuição. Dentro dele, você terá a estrutura de sub-diretórios, contendo o seguinte:

  • diretório da distribuição: Este diretório contém os diretórios específicos a serem instalados, e é sub-dividido da seguinte forma:

    • diretórios RPMS: Esses diretórios conterão os arquivos de pacotes. Eles devem ter o nome RPMS seguido de ponto e um nome que os identifique, como por exemplo, RPMS.beta ou RPMS.001. Poderão existir vários diretórios como estes ou apenas um, ficando a cargo do administrador essa decisão. O nome após o ponto também pode ser decidido pelo administrador.

    • diretório base: O diretório base contém arquivos especiais do tipo pkglist, que possuem a lista e a descrição dos pacotes dos diretórios RPMS. Atenção: o nome deste diretório deve ser base.

Seguindo essa estrutura, poderia ter como exemplo um repositório cujo diretório principal fosse:

/srv/www/default/html/repositorio

A árvore de diretórios se pareceria assim:

/srv/www/default/html/repositorios
/srv/www/default/html/repositorios/10
/srv/www/default/html/repositorios/10/conectiva
/srv/www/default/html/repositorios/10/conectiva/RPMS.new
/srv/www/default/html/repositorios/10/conectiva/base

A configuração do arquivo /etc/apt/sources.list deverá conter a seguinte linha para poder utilizar esse repositório:

rpm http://minhaorganizacao/repositorios 10/conectiva new

Para cada diretório RPMS é necessário gerar um arquivo que contenha a lista e a descrição dos pacotes ali contidos. Esses arquivos recebem o nome de pkglist.xxx, onde o xxx é o diretório descrito pelo arquivo. Os arquivos pkglist são compactados no formato bzip2 e são gerados automaticamente pelo comando genbasedir.

Portanto, para gerar os arquivos pkglist da árvore de diretórios exemplificada anteriormente, deve-se usar o seguinte comando:

# genbasedir /srv/www/default/html/repositorios/10/conectiva
Creating base directory... done 
Components: new
Processing pkglists... new [done] 
Processing srclists... new [done] 
Creating component releases... new [done] 
Creating global release file... [done] 
Appending MD5Sum... new [done] 
All your base are belong to us!!! 

É importante apenas destacar que todos os arquivos rpm já devem estar colocados na estrutura correta, para que os arquivos pkglist possam ser gerados.



[17] Advanced Package Tool.

[18] As linhas que iniciam com o caractere # são comentários.

[19] GNU Privacy Guard.

[20] Por exemplo, o arquivo vendors.list.

[21] Arquivos que contém a lista de pacotes, dependências e informações encontradas no servidor. Este comando deve ser executado sempre antes de se utilizar o comando apt-get com outro parâmetro.

[22] Note que podem ocorrer problemas durante a atualização de uma distribuição mais antiga.