Capítulo 2. Gestão de pacotes Debian

Índice

2.1. Pré-requisitos da gestão de pacotes Debian
2.1.1. Configuração de pacotes
2.1.2. Precauções básicas
2.1.3. A vida com actualizações eternas
2.1.4. Básico do arquivos Debian
2.1.5. Debian é 100% software livre
2.1.6. Dependências de pacote
2.1.7. O fluxo de eventos da gestão de pacotes
2.1.8. Primeira resposta a problemas com a gestão de pacotes
2.2. Operações básicas de gestão de pacotes
2.2.1. apt-get / apt-cache contra o aptitude
2.2.2. Operações básicas de gestão de pacotes com a linha de comandos
2.2.3. Uso interactivo do aptitude
2.2.4. Teclas de atalho do aptitude
2.2.5. Vistas de pacote no aptitude
2.2.6. Opções do método de pesquisa com o aptitude
2.2.7. A fórmula regex do aptitude
2.2.8. Resolução de dependências do aptitude
2.2.9. Relatórios (logs) de actividade de pacotes
2.3. Exemplos de operações do aptitude
2.3.1. Listagem de pacotes com correspondência por expressão regular nos nomes de pacotes
2.3.2. Explorar com a correspondência de expressão regular
2.3.3. Purgar pacotes removidos definitivamente
2.3.4. Acertar o estado auto/manual de instalação
2.3.5. Actualização total ao sistema
2.4. Operações de gestão avançada de pacotes
2.4.1. Operações de gestão avançada de pacotes com linha de comandos
2.4.2. Verificação dos ficheiros pacotes instalados
2.4.3. Salvaguardar para problemas de pacotes.
2.4.4. Procurar nos meta-dados do pacote
2.5. Os interiores da gestão de pacotes Debian
2.5.1. Meta dados do arquivo
2.5.2. Ficheiro "Release" de nível de topo e autenticidade:
2.5.3. Ficheiros "Release" do nível de arquivo
2.5.4. Obter os meta dados do pacote
2.5.5. O estado dos pacote para o APT
2.5.6. O estado dos pacote para o aptitude
2.5.7. Copias locais dos pacotes obtidos
2.5.8. Nomes de ficheiros de pacotes Debian
2.5.9. O comando dpkg
2.5.10. O comando update-alternatives
2.5.11. O comando dpkg-statoverride
2.5.12. O comando dpkg-divert
2.6. Recuperação de um sistema danificado
2.6.1. Incompatibilidade com configurações antigas de utilizador
2.6.2. Pacotes diferentes com ficheiros sobrepostos
2.6.3. Corrigir script problemático de pacote
2.6.4. Recuperação com o comando dpkg
2.6.5. Recuperar dados de selecção de pacotes
2.7. Dicas para a gestão de pacotes
2.7.1. Como escolher os pacotes Debian
2.7.2. Pacotes de fontes de arquivos misturados
2.7.3. Moldar a versão candidata
2.7.4. Actualizações e Backports
2.7.5. Bloquear pacotes instalados por "Recomendados"
2.7.6. Acompanhar testing com alguns pacotes de unstable
2.7.7. Acompanhar unstable com alguns pacotes de experimental
2.7.8. Descarga e actualização automática de pacotes
2.7.9. Limitar a largura de banda de descarga para o APT
2.7.10. Downgrade de emergência
2.7.11. Quem fez o upload do pacote?
2.7.12. O pacote equivs
2.7.13. Portar um pacote para o sistema stable
2.7.14. Servidor proxy para o APT
2.7.15. Pequeno arquivo de pacotes público
2.7.16. Gravar e copiar a configuração do sistema
2.7.17. Converter e instalar um pacote binário alienígena
2.7.18. Extrair um pacote sem o dpkg
2.7.19. Mais leituras sobre a gestão de pacotes
[Nota] Nota

Este capítulo é escrito assumindo que o lançamento estável mais recente tem o nome de código: wheezy.

Debian é uma organização voluntária que constrói distribuições consistentes de pacotes binários pré-compilados de software livre e distribui-os a partir do seu arquivo.

O arquivo Debian é oferecido por muitos sites mirror remotos para acesso através de métodos HTTP e FTP. Também está disponível em CD-ROM/DVD.

O sistema de gestão de pacotes Debian, quando utilizado de modo apropriado, oferece ao utilizador o instalar de conjuntos consistentes de pacotes binários no sistema a partir do arquivo. Actualmente, existem 44893 pacotes disponíveis para a arquitectura amd64.

O sistema de gestão de pacotes Debian tem um histórico rico e muitas opções de escolha para o programa cliente do utilizador e de método de acesso ao arquivo. Actualmente, recomendamos o seguinte:

Tabela 2.1. Lista de ferramentas de gestão de pacotes Debian

pacote popcon tamanho descrição
apt V:842, I:999 3724 Advanced Packaging Tool (APT), front-end para o dpkg que disponibiliza os métodos "http", "ftp", e "file" para acesso a arquivos (comandos apt-get/apt-cache incluídos)
aptitude V:232, I:991 4532 Gestor de pacotes baseado em terminal interactivo com aptitude(8)
tasksel V:45, I:968 718 ferramenta para seleccionar tarefas para instalação no sistema Debian (frontend para o APT)
unattended-upgrades V:73, I:455 343 pacote de melhoria para o APT para activar a instalação automática de actualizações de segurança
dselect V:10, I:130 2620 gestor de pacotes baseado em terminal (foi o standard anterior, frontend para o APT e outros métodos de acesso antigos)
dpkg V:918, I:999 6656 sistema de gestão de pacotes para Debian
synaptic V:96, I:471 7672 gestor de pacotes gráfico (frontend do GNOME para o APT)
apt-utils V:302, I:996 1393 Programas utilitários do APT: apt-extracttemplates(1), apt-ftparchive(1), e apt-sortpkgs(1)
apt-listchanges V:385, I:790 446 ferramenta de notificação do histórico de alterações do pacote
apt-listbugs V:8, I:13 520 lista bugs críticos antes de cada instalação do APT
apt-file V:18, I:86 131 Utilitário de busca de pacotes do APT - interface de linha de comandos
apt-rdepends V:1, I:8 64 lista recursivamente dependências de pacotes

[Atenção] Atenção

Não instale pacotes de misturas aleatórias de suites. Provavelmente vai quebrar a consistência do pacote o que requer conhecimentos profundos de gestão do sistema tais como ABI compilador, versão de biblioteca, funcionalidades do interpretador, etc.

O administrador novato de sistemas Debian deve manter-se com o lançamento stable de Debian e aplicar apenas as actualizações de segurança. Eu quero dizer que é melhor evitar algumas das seguintes acções válidas, como uma precaução, até que você compreenda muito bem o sistema Debian. Aqui ficam algumas lembranças.

  • Não inclua testing ou unstable em "/etc/apt/sources.list".

  • Não misture Debian standard com outros arquivos que não sejam Debian, como o Ubuntu em "/etc/apt/sources.list".

  • Não crie "/etc/apt/preferences".

  • Não altere o comportamento predefinido das ferramentas de gestão de pacotes através de ficheiros de configuração sem conhecer os seus impactos totais.

  • Não instale pacotes aleatórios com "dpkg -i <qualquer_pacote>".

  • Nunca instale pacotes aleatórios com "dpkg --force-all -i <qualquer_pacote>".

  • Não apague ou altere os ficheiros em "/var/lib/dpkg/".

  • Não sobrescreva ficheiros do sistema ao instalar programas compilados a partir do código-fonte.

    • Instale-os em "/usr/local" ou "/opt", se necessário.

Os efeitos não-compatíveis causados ao sistema de gestão de pacotes de Debian, pelas acções referidas acima, podem deixar o seu sistema inutilizado.

O administrador de sistema Debian sério que corre servidores de missões críticas, deve tomar precauções extra.

  • Não instale nenhuns pacotes incluindo as actualizações de segurança da Debian sem os testar completamente com as suas configurações particulares sob condições seguras.

    • Você como o administrador do sistema é o responsável final pelo seu sistema.

    • A longa história de estabilidade do sistema Debian não é uma garantia por si só.

Apesar dos meus avisos em cima, eu sei que muitos leitores deste documento desejam correr as suites testing ou unstable de Debian como o seu sistema principal para ambientes de trabalho auto-administrados. Isto porque funcionam muito bem, são actualizadas frequentemente, e oferecem as funcionalidades mais recentes.

[Cuidado] Cuidado

Para o seu servidor de produção, é recomendada a suite stable com as actualizações de segurança. O mesmo pode ser dito para PCs de ambiente de trabalho onde você pode dispor de esforços limitados de administração, p.e. o PC da sua mãe.

Não é preciso mais do que simplesmente definir a string da distribuição em "/etc/apt/sources.list" para o nome de suite: "testing" ou "unstable"; ou o nome de código: "jessie" ou "sid". Isto fá-lo viver a vida das actualizações eternas.

O uso de testing ou unstable é muito divertido mas vem com alguns riscos. Embora a suite unstable do sistema Debian pareça muito estável na maior parte do tempo, tem havido alguns problemas com pacotes nas suites testing e unstable do sistema Debian e alguns deles não foram triviais de resolver. Poderá ser muito doloroso para si. Por vezes, você pode ter um pacote danificado ou uma funcionalidade em falta por algumas semanas.

Aqui estão algumas ideias para assegurar recuperação fácil e rápida de bugs nos pacotes Debian:

(Se você não conseguir fazer nenhumas destas acções de precaução, provavelmente não está preparado para as suites testing e unstable.)

O Esclarecimento com o seguinte salva uma pessoa do karma da eterna luta do inferno das actualizações e permite-lhe alcançar o nirvana de Debian.

Vamos olhar para o arquivo Debian a partir da perspectiva do utilizador do sistema.

[Dica] Dica

A política oficial do arquivo Debian está definida em Manual de Políticas Debian, Capítulo 2 - O Arquivo Debian.

Para o típico acesso HTTP, o arquivo está especificado no ficheiro "/etc/apt/sources.list" como o seguinte exemplo para o sistema stable = wheezy actual.

deb http://ftp.XX.debian.org/debian/ wheezy main contrib non-free
deb-src http://ftp.XX.debian.org/debian/ wheezy main contrib non-free

deb http://security.debian.org/ wheezy/updates main contrib
deb-src http://security.debian.org/ wheezy/updates main contrib

Por favor note que "ftp.XX.debian.org" tem de ser substituído com o URL do mirror apropriado para a sua localização, para EUA "ftp.us.debian.org", o qual pode ser encontrado em a lista de mirrors Debian de todo o mundo. O estado destes servidores pode ser verificado no Debian Mirror Checker.

Aqui, eu uso o nome de código "wheezy" em vez do nome de suite "stable" para evitar surpresas quando a próxima stable for lançada.

O significado de "/etc/apt/sources.list" é descrito em sources.list(5) e os pontos chave são os seguintes:

  • A linha "deb" define os pacotes binários.

  • A linha "deb-src" define os pacotes fonte.

  • O 1º argumento é o URL raiz do arquivo Debian.

  • O 2º argumento é o nome da distribuição: seja o nome de suite ou o nome de código.

  • O 3º argumento e seguintes são a lista de nomes de área de arquivo válidos do arquivo Debian.

As linhas "deb-src" pode ser omitidas (ou comentadas ao colocar um "#" no inicio da linha) se for apenas para o aptitude o qual não acede a meta-dados relacionados com a fonte. Isso acelera as actualizações dos meta-dados do arquivo. O URL pode ser "http://", "ftp://", "file://", ….

[Dica] Dica

Se for usado "sid" no exemplo em cima em vez de "wheezy", a linha "deb: http://security.debian.org/ …" para actualizações de segurança em "/etc/apt/sources.list", não é necessária. Isto porque não há arquivo de actualizações de segurança para "sid" (unstable).

Aqui está uma lista de URLs de sites de arquivo Debian e nomes das suites ou nomes de código utilizados no ficheiro de configuração.


[Cuidado] Cuidado

Apenas o puro lançamento stable com as actualizações de segurança disponibilizam a melhor estabilidade. Correr o lançamento stable misturado com alguns pacotes dos lançamentos testing ou unstable é mais arriscado que correr o lançamento unstable puro devido a versões erradas de bibliotecas e etc. Se realmente você precisa da versão mais recente de alguns programas sob o lançamento stable, por favor utilize pacotes do wheezy-updates e http://backports.debian.org (veja os serviços Secção 2.7.4, “Actualizações e Backports”) Estes serviços têm de ser utilizados com cuidados extra.

[Cuidado] Cuidado

Basicamente você deve listar apenas uma das suites stable, testing, ou unstable na linha "deb". Se você listar qualquer combinação das suites stable, testing, e unstable na linha "deb", os programas do APT abrandam enquanto apenas o arquivo mais recente é efectivo. Faz sentido várias listagens quando o ficheiro "/etc/apt/preferences" é utilizado com objectivos claros (veja Secção 2.7.3, “Moldar a versão candidata”).

[Dica] Dica

Para o sistema Debian com as suites stable e testing, é uma boa ideia incluir linhas com "http://security.debian.org/" em "/etc/apt/sources.list" para activar as actualizações de segurança como no exemplo em cima.

[Nota] Nota

Os bugs de segurança do arquivo stable são corrigidos pela equipa de segurança do Debian. Esta actividade tem sido bastante rigorosa e fidedigna. Os do arquivo testing poderão ser corrigidos pela equipa de segurança de Debian testing. Por várias razões, esta actividade não é tão rigorosa como a de stable e você pode necessitar de aguardar pela migração de pacotes unstable com as correcções. Os pacotes do arquivo unstable são corrigidos pelo maintainer. Os pacotes unstable mantidos activamente estão geralmente em boa forma por conterem as correcções de segurança mais recentes desde a origem. Veja a FAQ de segurança Debian para saber como Debian lida com os bugs de segurança.


Aqui o número de pacotes em cima é para a arquitectura amd64. A área main disponibiliza o sistema Debian (veja Secção 2.1.5, “Debian é 100% software livre”).

A organização do arquivo Debian pode ser melhor estudada ao apontar o seu explorador a cada URL de arquivo seguido de dists ou pool.

A distribuição é referida de duas maneiras, a suite ou o nome-de-código. A palavra distribuição é usada alternativamente como o sinónimo de suite em muitas documentações. A relação entre a suite e o nome de código pode ser resumida ao seguinte.


A história dos nomes de código está descrita em Debian FAQ: 6.2.1 Que outros nomes de código foram usados no passado?

Na terminologia estrita do arquivo Debian, a palavra "secção" é utilizada especialmente para categorizar os pacotes pela área de aplicação. (Apesar da palavra "secção main" poder por vezes ser utilizada para descrever a área do arquivo Debian com o nome "main".)

Cada vez que é feito um novo upload por um desenvolvedor de Debian (DD) para o arquivo unstable (por processamento do incoming), é necessário que o DD assegure que os pacotes enviados sejam compatíveis com o conjunto de pacotes mais recente no arquivo unstable mais recente.

Se o DD quebrar esta compatibilidade intencionalmente para uma actualização importante de biblioteca ou etc., geralmente existe um anúncio na lista de email debian-devel etc.

Antes que um conjunto de pacotes seja movido pelo script de manutenção do arquivo Debian do arquivo unstable para o arquivo testing, o script de manutenção do arquivo não verifica apenas a maturidade (cerca de 10 dias de idade) e o estado dos relatórios de bug RC para os pacotes mas também tenta assegurar que sejam compatíveis com o conjunto de pacotes mais recente no arquivo testing. Este processo torna o arquivo testing muito actual e utilizável.

Através do processo de congelamento gradual do arquivo liderado pela equipa de lançamento, o arquivo testing é amadurecido para o tornar completamente consistente e livre de bugs com algumas intervenções manuais. Então o novo lançamento stable é criado ao atribuir o nome de código do antigo arquivo testing ao novo arquivo stable e criando um novo nome de código para o novo arquivo testing. O conteúdo inicial do novo arquivo testing é exactamente o mesmo que o arquivo stable recentemente lançado.

Ambos os arquivos unstable e testing podem sofrer falhas temporárias devido a vários factores:

  • Upload, para o arquivo, de pacotes danificados (maioritariamente para unstable)

  • Atraso de aceitação dos novos pacotes no arquivo (maioritariamente para unstable)

  • Problemas com o tempo de sincronização do arquivo (tanto para testing como unstable)

  • Intervenção manual no arquivo, tal como remoção de pacotes (mais para testing) etc.

Se alguma vez você decidir utilizar estes arquivos, deverá ser capaz de corrigir ou contornar este tipo de problemas.

[Cuidado] Cuidado

Durante alguns meses após um novo lançamento de stable, a maioria dos utilizadores de ambientes de trabalho devem usar o arquivo stable com as sua actualizações de segurança mesmo que normalmente usem os arquivos unstable ou testing. Durante este período de transição, ambos arquivos unstable e testing não são bons para a maioria das pessoas. O seu sistema é difícil de manter em boas condições de funcionamento com o arquivo unstable porque sofre de vagas de grandes actualizações nos pacotes principais. O arquivo testing também não é útil porque contém praticamente o mesmo conteúdo que o arquivo stable mas sem o seu suporte de segurança (Anúncio-de-segurança-de-testing-Debian-2008-12). Após um mês ou mais, o arquivo unstable pode ser usado se você for cuidadoso.

[Dica] Dica

Quando se acompanha o arquivo testing, um problema causado por um pacote removido é geralmente contornado ao instalar o pacote correspondente do arquivo unstable que foi lançado para correcção de bug.

Veja Manual de Políticas Debian para as definições do arquivo.

Debian é 100% software livre por causa do seguinte:

  • Por predefinição, Debian instala apenas software livre para respeitar as liberdades dos utilizadores.

  • Debian disponibiliza apenas software livre no main.

  • Debian recomenda correr apenas software livre do main.

  • Nenhum pacote no main depende ou recomenda pacotes do non-free ou do contrib.

Algumas pessoas pensam se os 2 seguintes factos se contradizem ou não.

Estes não se contradizem, devido ao seguinte.

  • O sistema Debian é 100% livre e os seus pacotes estão alojados em servidores Debian na área main.

  • Os pacotes fora do sistema Debian são alojado em servidores Debian nas áreas non-free e contrib.

Isto é perfeitamente explicado nos termos 4º e 5º do Debian Social Contract:

  • As nossas prioridades são os nossos utilizadores e o software livre

    • Seremos guiados pelas necessidades dos nossos utilizadores e da comunidade de software livre. Iremos colocar o seu interesse no topo das nossas prioridades. Iremos suportar as necessidades dos nossos utilizadores para operação em muitos ambientes de computação distintos. Não nos oporemos a software não-livre que se destine a ser utilizado em sistemas Debian, nem tentaremos cobrar qualquer taxa a pessoas que criem ou utilizem tais trabalhos. Iremos permitir que terceiros criem distribuições contendo o sistema Debian com outros trabalhos, sem qualquer taxa para nós. Para apoio destes objectivos, iremos disponibilizar um sistema integrado de materiais de alta qualidade sem restrições legais que previnam tais utilizações do sistema.

  • Trabalhos que não coincidem com os nossos standards de software livre

    • Nós reconhecemos que alguns dos nossos utilizadores necessitam utilizar trabalhos que não estão de acordo com a Debian Free Software Guidelines. Nós criamos no nosso arquivo as áreas "contrib" e "non-free" para esses trabalhos. Os pacotes nessas áreas não fazem parte do sistema Debian, embora tenham sido configurados para serem utilizados com Debian. Nós encorajamos os fabricantes de CDs a ler as licenças dos pacotes nessas áreas e determinar se podem distribuir os pacotes nos seus CDs. Por isso, embora os trabalhos não-livres não sejam parte de Debian, nós suportamos a sua utilização e disponibilizamos infra-estrutura para os pacotes não-livres (tal como o nosso sistema de seguimento de bugs e listas de email).

Os utilizadores devem estar cientes dos riscos da utilização de pacotes das áreas non-free e contrib:

  • falta de liberdade para tais pacotes de software

  • falta de suporte Debian em tais pacotes de software (Debian não pode suportar devidamente software sem ter acesso ao seu código-fonte.)

  • contaminação do seu sistema Debian 100% livre

As Debian Free Software Guidelines são os standards de software livre para Debian. Debian interpreta "software" no âmbito mais amplo incluindo documentação, firmware, logo e dados artísticos no pacote. Isto torna os standards de software livre de Debian muito rigorosos.

De modo a respeitar estes restritos standards de software livre para a main, Debian retira a marca Mozilla de pacotes de software tais como o Firefox, Thunderbird e Seamonkey removendo o seu logótipo e alguns dados artísticos; e distribui-os respectivamente como Iceweasel, Icedove e Iceape.

Tipicamente os pacotes da non-free e da contrib incluem pacotes distribuídos livremente dos seguintes tipos:

  • Pacotes de documentação sob a GNU Free Documentation License com secções invariantes tais como as do GCC e do Make. (a maioria encontra-se na secção non-free/doc.)

  • Pacotes de firmware contendo dados binários sem código-fonte tais como os listados em Secção 9.9.6, “Controladores de hardware e firmware” como não-livre. (a maioria encontra-se na secção non-free/kernel.)

  • Pacotes de fontes e jogos com restrições comerciais de utilização e/ou modificação de conteúdo.

Por favor note que o número de pacotes das non-free e contrib é menos de 2% dos pacotes da main. Activar o acesso às áreas non-free e contrib não turva a fonte dos pacotes. A utilização do ecrã interactivo do aptitude(8) disponibiliza-lhe visibilidade e controlo total sobre que pacotes estão instalados e a partir de qual das áreas, para manter o seu sistema livre conforme desejar.

O sistema Debian oferece um conjunto consistente de pacotes binários através do seu mecanismo de declaração de dependências binárias com versões nos campos do ficheiro de controle. Aqui está uma definição deles um pouco simplificada:

  • "Depends"

    • Isto declara uma dependência absoluta e todos os pacotes listados neste campo têm de ser instalados ao mesmo tempo ou com antecedência.

  • "Pre-Depends"

    • Isto é como o Depends, excepto que requer a instalação completa de todos os pacotes listados com antecedência.

  • "Recommends"

    • Isto declara uma dependência forte mas não absoluta. A maioria dos utilizadores não iriam querer o pacote a menos que todos os pacotes listados neste campo estejam instalados.

  • "Suggests"

    • Isto declara uma dependência fraca. Muitos utilizadores deste pacote podem beneficiar ao instalar os pacotes listados neste campo mas podem ter as funções razoáveis sem eles.

  • "Enhances"

    • Isto declara uma dependência fraca como o Suggests mas funciona na direcção oposta.

  • "Breaks"

    • Isto declara uma incompatibilidade do pacote normalmente com alguma especificação de versão. Geralmente a resolução é actualizar todos os pacotes listados neste campo.

  • "Conflicts"

    • Isto declara uma incompatibilidade absoluta. Todos os pacotes listados neste campo têm de ser removidos para instalar este pacote.

  • "Replaces"

    • Isto é declarado quando os ficheiros instalados por este pacote substituem ficheiros nos pacotes listados.

  • "Provides"

    • Isto é declarado quando este pacote disponibiliza todos os ficheiros e funcionalidades dos pacotes listados.

[Nota] Nota

Por favor note que definir "Provides", "Conflicts" e "Replaces" em simultâneo a um pacote virtual é a configuração sã. Isto assegura que apenas um pacote real que disponibilize este pacote virtual possa ser instalado de cada vez.

A definição oficial incluindo dependências de fonte pode ser encontrada em O Manual de Políticas: Capítulo 7 - Declarar relações entre pacotes.

Aqui está um resumo do fluxo de eventos simplificado da gestão de pacotes pelo APT.

Aqui, saltei intencionalmente detalhes técnicos por causa da visão geral.

As operações de gestão de pacotes baseadas em repositório no sistema Debian podem ser executas por muitas ferramentas de gestão de pacotes baseadas no APT e disponíveis no sistema Debian. Aqui vamos explicar 2 ferramentas de gestão básica de pacotes: apt-get / apt-cache e aptitude.

Para as operações de gestão de pacotes que envolvam a instalação ou actualização de meta-dados do pacote, você necessita ter privilégios de root.

Apesar do aptitude ser uma ferramenta interactiva muito boa a qual o autor usa principalmente, você deve ser advertido de alguns factos:

Os comandos apt-get e apt-cache são as ferramentas de gestão de pacotes baseadas no APT mais básicas

  • O apt-get e o apt-cache oferecem apenas a interface de linha de comandos.

  • O apt-get é mais apropriado para uma actualização maior ao sistema entre lançamentos, etc.

  • O apt-get oferece um resolvedor de dependências de pacotes robusto.

  • apt-get é menos exigente em recursos de hardware. Consome menos memória e é mais rápido.

  • O apt-cache oferece uma busca baseada em expressões regulares standard no nome do pacote e na descrição.

  • O apt-get e o apt-cache podem gerir várias versões de pacotes utilizando o /etc/apt/preferences mas é um pouco incómodo.

O comando aptitude é a ferramenta de gestão de pacotes baseada no APT mais versátil.

  • O aptitude oferece a interface de utilizador de texto interactiva de ecrã completo.

  • O aptitude também oferece uma interface de utilizador de linha de comandos.

  • O aptitude é mais apropriado para a gestão de pacotes interactiva diária como inspeccionar os pacotes instalados e procurar pacotes disponíveis.

  • O aptitude é mais exigente em recursos de hardware. Consome mais memória e é mais lento.

  • O aptitude oferece um busca baseada em expressões regulares avançada em todos os meta-dados dos pacotes.

  • O aptitude pode gerir várias versões de pacotes sem utilizar o /etc/apt/preferences e é bastante intuitivo.

Aqui estão algumas operações básicas de gestão de pacotes com a linha de comandos usando aptitude(8) e apt-get(8) / apt-cache(8).

Tabela 2.6. Operações básicas de gestão de pacotes com a linha de comandos utilizando aptitude(8) e apt-get(8) / apt-cache(8).

sintaxe do aptitude sintaxe do apt-get/apt-cache descrição
aptitude update apt-get update actualiza os meta-dados do arquivo de pacotes
aptitude install foo apt-get install foo instala a versão candidata do pacote "foo" com as suas dependências
aptitude safe-upgrade apt-get upgrade instala as versões candidatas dos pacotes instalados sem remover quaisquer outros pacotes
aptitude full-upgrade apt-get dist-upgrade instala as versões candidatas dos pacotes instalados removendo outros pacotes caso necessário
aptitude remove foo apt-get remove foo remove o pacote "foo" deixando os seus ficheiros de configuração
N/D apt-get autoremove remove os pacotes auto-instalados que já não sejam necessários
aptitude purge foo apt-get purge foo purga o pacote "foo" com os seus ficheiros de configuração
aptitude clean apt-get clean limpa completamente o repositório local de ficheiros de pacotes obtidos
aptitude autoclean apt-get autoclean limpa os pacotes desactualizados do repositório local dos ficheiros de pacotes recebidos
aptitude show foo apt-cache show foo mostra informação detalhada acerca do pacote "foo"
aptitude search <regex> apt-cache search <regex> procura pacotes que correspondem à <expressão-regular>
aptitude why <regex> N/D explica a razão porque o pacotes que correspondem à <expressão_regular> devem ser instalados
aptitude why-not <regex> N/D explica a razão porque o pacotes que correspondem à <expressão_regular> não podem ser instalados

[Nota] Nota

Apesar do comando aptitude vir com ricas funcionalidades como o seu resolvedor avançado de pacotes, esta complexidade já causou (ou pode ainda causar) algumas regressões como os Bug #411123, Bug #514930, e Bug #570377. Em caso de dúvidas, por favor utilize os comandos apt-get e apt-cache sobre o comando aptitude.

[Nota] Nota

Como o apt-get e o aptitude partilham o estado dos pacotes auto-instalados (veja Secção 2.5.5, “O estado dos pacote para o APT”) após o lenny, você pode misturar estas ferramentas sem grandes problemas (veja Bug #594490).

O "aptitude why <expressão_regular>" pode listar mais informação por "aptitude -v why <expressão_regular>". Informação semelhante pode ser obtida por "apt-cache rdepends <pacote>".

Quando o comando aptitude é arrancado em modo de linha de comandos e enfrenta alguns problemas como conflitos de pacotes, você pode mudar para modo interactivo em ecrã total, ao pressionar a tecla "e", mais tarde na linha de comandos.

Você pode dar opções de comando logo após "aptitude".


Para mais veja aptitude(8) e o "Manual de utilizador do aptitude" em "/usr/share/doc/aptitude/README".

[Dica] Dica

O pacote dselect ainda está disponível e foi a ferramenta de gestão de pacotes interactiva de ecrã inteiro preferida nos lançamentos anteriores.

As combinações notáveis de teclas para explorar o estado dos pacotes e definir uma "acção planeada" neles neste modo de ecrã total são as seguintes:


A especificação de nome de ficheiro da linha de comandos ou do aviso de menu após pressionar "l" e "//" toma a expressão regular do aptitude conforme descrito em baixo. A expressão regular do aptitude pode corresponder explicitamente a um nome de pacote utilizando uma string começada por "~n e seguida do nome do pacote.

[Dica] Dica

Você necessita pressionar "U", no interface visual, para ter todos os pacotes instalados actualizados para a versão candidata. Caso contrário, apenas os pacotes seleccionados e certos pacotes com dependências deles, versionadas, são actualizados para a versão candidata.

No modo de ecrã completo interactivo do aptitude(8), os pacotes na lista de pacotes são mostrados como no próximo exemplo.

idA   libsmbclient                             -2220kB 3.0.25a-1  3.0.25a-2

Aqui, esta linha significa desde a esquerda o seguinte:

  • A flag "estado actual" (a primeira letra)

  • A flag "acção planeada" (a segunda letra)

  • A flag "automático" ( a terceira letra)

  • O nome do Pacote

  • A alteração na utilização do espaço do disco atribuída a "acção planeada"

  • A versão actual do pacote

  • A versão candidata do pacote

[Dica] Dica

A lista completa de flags é fornecida ao fundo do ecrã de Ajuda mostrada ao pressionar "?".

A versão candidata é escolhida de acordo com as preferências locais actuais (veja apt_preferences(5) e Secção 2.7.3, “Moldar a versão candidata”).

Estão disponíveis vários tipos de vistas de pacotes sob o menu "Vistas".


A "Vista de Pacotes standard categoriza os pacotes de certo modo como o dselect com algumas funcionalidades extra.


[Dica] Dica

A vista Tarefas pode ser usada para escolher pacotes para a sua tarefa.

A fórmula de expressão regular do aptitude é estendida tipo mutt ERE (veja Secção 1.6.2, “Expressões regulares”) e o significado da extensões de regras de correspondência especial específicas do aptitude são as seguintes:

Tabela 2.11. Lista da fórmula regex do aptitude

descrição da regra de correspondência extensa fórmula da expressão regular
corresponde com o nome do pacote ~n<regex_name>
corresponde com a descrição ~d<regex_description>
corresponde com nome da tarefa ~t<regex_task>
corresponde com debtag ~G<regex_debtag>
corresponde com o maintainer ~m<regex_maintainer>
corresponde com secção do pacote ~s<regex_section>
corresponde com versão do pacote ~V<regex_version>
corresponde com arquivo ~A{wheezy,jessie,sid}
corresponde com origem ~O{debian,…}
prioridade da correspondência ~p{extra,important,optional,required,standard}
corresponde com pacotes essenciais ~E
corresponde com pacotes virtuais ~v
corresponde com pacotes novos ~N
corresponde com acções pendentes ~a{install,upgrade,downgrade,remove,purge,hold,keep}
corresponde com os pacotes instalados ~i
corresponde com pacotes instalados com marca A (pacotes instalados automaticamente) ~M
corresponde com pacotes instalados sem a marca A (pacotes seleccionados pelo administrador) ~i!~M
corresponde com pacotes instalados e com actualizações disponíveis ~U
corresponde com pacotes removidos mas não purgados ~c
corresponde com pacotes removidos, purgados ou que podem-ser-removidos ~g
corresponde com pacotes que declaram dependências quebradas ~b
corresponde com pacotes que declaram dependências quebradas de <type> ~B<type>
corresponde a pacotes <pattern> que declaram dependência de <type> ~D[<type>:]<pattern>
corresponde a pacotes <pattern> que declaram dependência quebrada de <type> ~DB[<type>:]<pattern>
corresponde a pacotes para os quais o pacote que corresponde a <pattern> declara o <type> de dependência ~R[<type>:]<pattern>
corresponde a pacotes para os quais o pacote que corresponde a <pattern> declara o <type> de dependência quebrada ~RB[<type>:]<pattern>
corresponde com pacotes com os quais alguns pacotes instalados dependem ~R~i
corresponde com pacotes com os quais nenhum outro pacote instalado depende !~R~i
corresponde com pacotes com os quais alguns pacotes instalados dependem ou recomendam ~R~i|~Rrecommends:~i
corresponde o pacote <pattern> com a versão filtrada ~S filter <pattern>
corresponde com todos os pacotes (true) ~T
não corresponde com nenhum pacote (false) ~F

  • A parte da expressão regular é a mesma ERE que aquela utilizada nas típicas ferramentas de texto tipo-Unix que utilizam "^", ".*", "$" etc. como o egrep(1), awk(1) e perl(1).

  • A dependência <type> é uma de (dependências, pré-dependências, recomendações, sugestões, conflitos, substituições, fornecimentos), que específica o inter-relacionamento do pacote.

  • O <type> de dependência predefinida é "depends".

[Dica] Dica

Quando <regex_pattern> for uma string nula, coloca "~T" imediatamente após o comando.

Aqui estão alguns atalhos.

  • "~P<term>" == "~Dprovides:<term>"

  • "~C<term>" == "~Dconflicts:<term>"

  • "…~W term" == "(…|term)"

Os utilizadores familiarizados com o mutt aprendem rápido, pois o mutt foi a inspiração para a sintaxe de expressão. Veja "PROCURANDO, LIMITANDO,E EXPRESSÕES" no "Manual do Utilizador" "/usr/share/doc/aptitude/README".

[Nota] Nota

Com a versão lenny do aptitude(8), a nova sintaxe de formato longo como a "?broken" pode ser utilizada para correspondência de expressões regulares no lugar da sua equivalente antiga de formato curto "~b". Agora o caractere de espaço " " é considerado como um caractere terminante de expressão regular em adição ao caractere til "~". Veja o "Manual do Utilizador" para a nova sintaxe de formato longo.

Aqui estão alguns exemplos de operações do aptitude(8).

Aqui está como acertar o estado auto/manual de instalação dos pacotes (após usar um instalador de pacotes sem ser o aptitude e etc.).

  1. Arranque o aptitude em modo interactivo como root.

  2. Escreva "u", "U", "f" e "g" para actualizar a lista de pacotes e actualizar os pacotes.

  3. Escreva "l" para inserir o limite de visualização de pacotes aos "~i(~R~i|~Recomendados:~i)" e escreva "M" sobre "Pacotes Instalados" como auto-instalado.

  4. Escreva "l" para inserir o limite de visualização de pacotes como "~prequired|~pimportant|~pstandard|~E" e escreva "m" sobre "Pacotes Instalados" como instalados manualmente.

  5. Escreva "l" para inserir o limite de visualização de pacotes como "~i!~M" e remover pacotes não utilizados ao escrever "-" sobre cada um deles após expô-los ao escrever "[" sobre "Pacotes Instalados".

  6. Escreva "l" para inserir o limite de amostragem de pacotes como "~i" depois escreva "m" sobre "Tasks" para marcar esses pacotes como instalados manualmente.

  7. Termina o aptitude.

  8. Inicie "apt-get -s autoremove|less" como root para verificar os que não são usados.

  9. Reinicie o aptitude em modo interactivo e marque os pacotes necessários como "m".

  10. Reinicie o "apt-get -s autoremove|less" como root para verificar que o REMOVED contém apenas os pacotes esperados.

  11. Arranque "apt-get autoremove|less" como root para auto-remover os pacotes não usados.

A opção "m" sobre "Tasks" é uma opção para prevenir situações de remoção de pacotes em massa no futuro.

[Nota] Nota

Quando mover para um novo lançamento etc, deverá considerar fazer uma instalação limpa do novo sistema mesmo sabendo que Debian é actualizável como descrito em baixo. Isto dá-lhe a hipótese de remover os lixos coleccionados e expõe-lhe a melhor combinação do pacotes mais recentes. É claro que deverá fazer uma cópia de segurança do sistema para um lugar seguro (veja Secção 10.2, “Salvaguarda (backup) e recuperação”) antes de fazer isto. Eu recomendo fazer uma configuração de duplo arranque usando partições diferentes para ter a transição mais suave.

Você pode executar a actualização geral do sistema para um lançamento mais recente ao alterar o conteúdo do ficheiro "/etc/apt/sources.list" apontando para um novo lançamento e correndo o comando "apt-get update; apt-get dist-upgrade".

Para actualizar de stable para testing ou unstable, você substitui "wheezy" no exemplo "/etc/apt/sources.list" de Secção 2.1.4, “Básico do arquivos Debian” por "jessie" ou "sid".

Na realidade, você pode enfrentar algumas complicações devido a problemas com a transição de alguns pacotes, na maioria devido a dependências desses pacotes. Quanto maior a diferença da actualização, maior a probabilidade de ter grandes problemas. Para a transição da stable antiga para a nova stable após o seu lançamento, você pode ler as suas novas Notas de Lançamento e seguir o procedimento exacto descrito lá para minimizar problemas.

Quando você decidir mover de stable para testing antes do seu lançamento formal, não existem Notas de Lançamento para o ajudar. A diferença entre stable e testing pode ter crescido bastante após o lançamento stable anterior e complicar a situação da actualização.

Você deve dar passos de precaução para a actualização total enquanto recolhe a informação mais recente da lista de mail e usando senso comum.

  1. Leia as "Notas de Lançamento" anteriores.

  2. Faça cópia de segurança a todo o sistema (especialmente dados e informação de configuração).

  3. Tenha um meio de arranque à mão para o caso do gestor de arranque ficar danificado.

  4. Informe os utilizadores do sistema com bastante antecedência.

  5. Grave a actividade de actualização com o script(1).

  6. Para prevenir a remoção aplique "unmarkauto" aos pacotes necessários, p.e., "aptitude unmarkauto vim", .

  7. Minimize o número de pacotes instalados para reduzir a hipótese de conflitos de pacotes, p.e., remova os pacotes da tarefas de ambiente de trabalho.

  8. Remova o ficheiro "/etc/apt/preferences" (desactiva o apt-pinning).

  9. Tente a actualização em passos inteligentes: oldstablestabletestingunstable.

  10. Actualize o ficheiro "/etc/apt/sources.list" para apontar apenas para o novo arquivo e corra "aptitude update".

  11. Instale, opcionalmente, os novos pacotes de base primeiro, ex., "aptitude install perl".

  12. Corra o comando "apt-get -s dist-upgrade" para avaliar o impacto.

  13. Corra o comando "apt-get dist-upgrade" em último lugar.

[Cuidado] Cuidado

Não é sensato saltar grandes lançamentos de Debian quando se actualiza entre lançamentos stable.

[Cuidado] Cuidado

Nas "Notas de Lançamento" anteriores, GCC, Linux Kernel, initrd-tools, Glibc, Perl, a cadeia de ferramentas do APT, etc. necessitaram de alguma atenção especial para a actualização geral do sistema.

Para actualizações diárias em unstable, veja Secção 2.4.3, “Salvaguardar para problemas de pacotes.”.

Aqui está uma lista de outras operações de gestão de pacotes para as quais o aptitude é de demasiado alto nível ou faltam-lhe funcionalidades necessárias.

Tabela 2.13. Lista de operações de gestão avançada de pacotes

comando acção
COLUMNS=120 dpkg -l <padrão_do_nome_de_pacote> lista o estado de um pacote instalado para o relatório de bug
dpkg -L <nome_do_pacote> lista o conteúdo de um pacote instalado
dpkg -L <nome_do_pacote> | egrep '/usr/share/man/man.*/.+' lista os manuais para um pacote instalado
dpkg -S <padrão_do_nome_de_ficheiro> lista os pacotes instalados que condizem com o nome de ficheiro
apt-file search <padrão_do_nome_de_ficheiro> lista pacotes no arquivo que condizem com o nome de ficheiro
apt-file list <padrão_do_nome_de_pacote> lista os conteúdos dos pacotes que correspondem no arquivo
dpkg-reconfigure <nome_do_pacote> reconfigura o pacote exacto
dpkg-reconfigure -p=low <nome_do_pacote> reconfigura o pacote exacto com as questões mais detalhadas
configure-debian reconfigura pacotes a partir do menu de ecrã completo
dpkg --audit faz auditoria ao sistema por pacotes parcialmente instalados
dpkg --configure -a configura todos os pacotes parcialmente instalados
apt-cache policy <nome_do_pacote_binário> mostra a versão disponível, a prioridade e informação de arquivo de um pacote binário
apt-cache madison <nome_do_pacote> mostra a versão disponível e informação de arquivo de um pacote
apt-cache showsrc <nome_do_pacote_binário> mostra informação do pacote de código-fonte de um pacote binário
apt-get build-dep <nome_do_pacote> instala os pacotes necessários para compilar pacote
aptitude build-dep <nome_do_pacote> instala os pacotes necessários para compilar pacote
apt-get source <nome_do_pacote> descarrega código-fonte (do arquivo standard)
dget <URL para ficheiro dsc> descarrega um pacote de código-fonte (de outro arquivo)
dpkg-source -x <nome_do_pacote>_<versão>-<versão_debian>.dsc constrói uma árvore de código-fonte a partir de um conjunto de pacotes de código-fonte ("*.orig.tar.gz" e "*.debian.tar.gz"/"*.diff.gz")
debuild binary compila pacote(s) a partir de uma árvore fonte local
make-kpkg imagem_de_kernel compila um pacote de kernel a partir de uma árvore fonte de kernel
make-kpkg --initrd imagem_de_kernel compila um pacote de kernel a partir de uma árvore fonte de kernel com initramfs activa
dpkg -i <nome_pacote>_<versão>-<versão_debian>_<arquitectura>.deb instalar um pacote local no sistema
debi <nome_pacote>_<versão>-<versão_debian>_<arquitectura>.dsc instala pacote(s) locais no sistema
dpkg --get-selections '*' >selecção.txt guarda a informação de estado de selecção a nível de pacotes do dpkg
dpkg --set-selections <selecção.txt define a informação de estado de selecção a nível de pacotes do dpkg
echo <nome-do-pacote> hold | dpkg --set-selections define o estado de selecção de pacote ao nível do dpkg para hold (equivalente a "aptitude hold <nome_do_pacote>")

[Nota] Nota

Para um pacote com a funcionalidade multi-arch, você pode precisar de especificar o nome da arquitectura para alguns comandos. Por exemplo, use "dpkg -L libglib2.0-0:amd64" para listar o conteúdo do pacote libglib2.0-0 para a arquitectura amd64.

[Cuidado] Cuidado

As ferramentas de pacotes de nível mais baixo como "dpkg -i …" e "debi …" deverão ser utilizadas com cuidado pelo administrador do sistema. Não tomam conta automaticamente das dependências de pacotes necessárias. As opções de linha de comandos do dpkg "--force-all" e semelhantes (veja dpkg(1)) destinam-se apenas a serem utilizadas por especialistas. Utiliza-las sem o conhecimento total dos seus efeitos pode danificar completamente o seu sistema.

Por favor note o seguinte:

A instalação de debsums permite a verificação dos ficheiros dos pacotes instalados contra valores MD5sum do ficheiro "/var/lib/dpkg/info/*.md5sums" com debsums(1). Para saber como o MD5sum funciona veja Secção 10.3.5, “O valor de controlo MD5” .

[Nota] Nota

Como a base de dados MD5sum pode ser adulterada por um intruso, o debsums(1) é uma ferramenta de segurança de utilização limitada. É bom apenas para verificar modificações locais pelo administrador ou danos devido a erros de media.

Embora hoje em dia visitar o site Debian http://packages.debian.org/ facilite a busca nos meta-dados do pacote, vamos ver modos mais tradicionais.

Os comandos grep-dctrl(1), grep-status(1) e grep-available(1) podem ser utilizados para procurar qualquer ficheiro que tenha o formato geral de um ficheiro de controle de pacote Debian.

"dpkg -S <padrão_de_nome_de_ficheiro>" pode ser utilizado para procurar nomes de pacotes instalados pelo dpkgque contenham ficheiros com o nome coincidente. Mas isto não vê os ficheiros criados pelo script do responsável do pacote.

Se necessitar de fazer uma busca mais elaborada nos meta-dados do dpkg, você necessita executar o comando "grep -e padrão_de_expressão_regular *" no directório "/var/lib/dpkg/info/". Isto fá-lo procurar as palavras mencionadas nos scripts dos pacotes e nos textos de questões de instalação.

Se desejar procurar, recursivamente, as dependências de pacotes, deverá utilizar o apt-rdepends(8).

Vamos aprender como o sistema de gestão de pacotes Debian funciona internamente. Isto deverá ajudá-lo a criar a sua própria solução para alguns problemas com pacotes.

[Dica] Dica

O ficheiro "Release" no nível de topo é usado para assinar o arquivo sob o sistema secure APT.

Cada suite do arquivo Debian tem um ficheiro "Release" no nível de topo, p.e., "http://ftp.us.debian.org/debian/dists/unstable/Release", como o seguinte:

Origin: Debian
Label: Debian
Suite: unstable
Codename: sid
Date: Sat, 14 May 2011 08:20:50 UTC
Valid-Until: Sat, 21 May 2011 08:20:50 UTC
Architectures: alpha amd64 armel hppa hurd-i386 i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc
Components: main contrib non-free
Description: Debian x.y Unstable - Not Released
MD5Sum:
 bdc8fa4b3f5e4a715dd0d56d176fc789 18876880 Contents-alpha.gz
 9469a03c94b85e010d116aeeab9614c0 19441880 Contents-amd64.gz
 3d68e206d7faa3aded660dc0996054fe 19203165 Contents-armel.gz
...
[Nota] Nota

Aqui, você pode encontrar a minha lógica de utilizar "suite" e "nome de código" em Secção 2.1.4, “Básico do arquivos Debian”. A "distribuição" é usada quando se refere a ambos "suite" e "nome de código". Todos os nomes de "áreas" do arquivo oferecidos pelo arquivo são listados sob "Componentes".

A integridade do ficheiro "Release" de nível de topo é verificada pela infraestrutura criptográfica chamada secure apt.

  • O ficheiro de assinatura criptográfica "Release.gpg" é criado a partir do ficheiro "Release" de nível de topo autenticado e da chave secreta do arquivo Debian.

  • A chave do arquivo Debian público pode ser semeada em "/etc/apt/trusted.gpg";

  • O sistema secure APT verifica a integridade do ficheiro "Release" de nível de topo descarregado criptograficamente por este ficheiro "Release.gpg" a pela chave de arquivo público Debian em "/etc/apt/trusted.gpg".

A integridade de todos os ficheiros "Packages" e "Sources" é verificada utilizando valores MD5sum do ficheiro "Release" de nível de topo. A integridade de todos os ficheiros de pacotes é verificada utilizando valores MD5sum nos ficheiros "Packages" e "Sources" Veja debsums(1) e Secção 2.4.2, “Verificação dos ficheiros pacotes instalados”.

Como a verificação de assinatura criptográfica é um processo muito mais intenso para a CPU do que o cálculo de valor MD5sum, a utilização de valores MD5sum para cada pacote enquanto se utiliza assinatura criptográfica para o ficheiro "Release" de nível de topo disponibiliza boa segurança com desempenho (veja Secção 10.3, “Infraestrutura da segurança de dados”).

Quando as ferramentas do APT, como o aptitude, apt-get, synaptic, apt-file, auto-apt, … são utilizadas, nós precisamos de actualizar as cópias locais dos meta-dados que contêm a informação do arquivo Debian. Estas cópias locais têm os seguintes nomes de ficheiros correspondentes aos nomes de distribuição, área, e arquitectura especificados em "/etc/apt/sources.list" (veja Secção 2.1.4, “Básico do arquivos Debian”).

  • "/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<distribuição>_Release"

  • "/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<distribuição>_Release.gpg"

  • "/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<distribuição>_<área>_binário-<arquitectura>_Packages"

  • "/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<distribuição>_<área>_fonte_Sources"

  • "/var/cache/apt/apt-file/ftp.us.debian.org_debian_dists_<distribuição>_Contents-<arquitectura>.gz" (para o apt-file)

Os primeiros 4 tipos de ficheiros são partilhados por todos os comandos APT pertinentes e actualizados a partir da linha de comandos pelo "apt-get update" ou "aptitude update". Os meta-dados "Packages" são actualizados se existir a linha "deb" em "/etc/apt/sources.list". Os meta dados "Sources" são actualizados se existir a linha "deb-src" em "/etc/apt/sources.list".

Os meta-dados "Packages" e "Sources" contêm a estrofe "Filename:" que aponta para a localização de ficheiro dos pacotes binários e de código-fonte. Actualmente, estes pacotes estão localizados sob a árvore de directórios "pool/" para a transição melhorada através dos lançamentos.

As cópias locais dos meta-dados "Packages" podem ser pesquisadas interactivamente com a ajuda do aptitude. O comando de procura especializada grep-dctrl(1) pode pesquisar as cópias locais dos meta-dados "Packages" e "Sources".

A cópia local dos meta-dados "Contents-<arquitectura>" pode ser actualizada pelo "apt-file update" e a sua localização é diferente dos outros 4. Veja apt-file(1). (O auto-apt utiliza localização diferente para a cópia local de "Contents-<arquitectura>.gz" por predefinição.)

Ficheiros de pacotes Debian têm estruturas de nomes particulares.


[Dica] Dica

Aqui apenas são descritos formatos de pacote fonte básicos. Veja mais em dpkg-source(1).


[Nota] Nota

Pode verificar a ordem da versão de pacotes com o dpkg(1), p.e., "dpkg --compare-versions 7.0 gt 7.~pre1 ; echo $?" .

[Nota] Nota

O debian-installer (d-i) utiliza udeb como a extensão de ficheiro para o seu pacote binário em vez do normal deb. Um pacote udeb é um pacote deb despido que remove alguns conteúdos não essenciais como a documentação para poupar espaço enquanto relaxa os requisitos de política do pacote. Ambos os pacotes deb e udeb partilham a mesma estrutura de pacote. O "u" significa micro.

dpkg(1) é a ferramenta de mais baixo nível para a gestão de pacotes Debian. É muito poderosa e tem que ser utilizada com cuidado.

Enquanto instala o pacote chamado "<nome_de_pacote>", o dpkg processa-o na seguinte ordem:

  1. Desempacota o ficheiro deb (equivalente a "ar -x")

  2. Executa "<nome_de_pacote>.preinst" utilizando o debconf(1)

  3. Instala o conteúdo do pacote no sistema (equivalente a "tar -x")

  4. Executa "<nome_de_pacote>.postinst" utilizando o debconf(1)

O sistema debconf disponibiliza interacção standard com o utilizador com suporte de I18N e L10N (Capítulo 8, I18N e L10N).

Tabela 2.17. Ficheiros notáveis criados pelo dpkg

ficheiro descrição dos conteúdos
/var/lib/dpkg/info/<nome_do_pacote>.conffiles lista de ficheiros de configuração. (modificável pelo utilizador)
/var/lib/dpkg/info/<nome_do_pacote>.list lista de ficheiros e directórios instalados pelo pacote
/var/lib/dpkg/info/<nome_do_pacote>.md5sums lista de valores de hash MD5 para os ficheiros instalados pelo pacote
/var/lib/dpkg/info/<nome_do_pacote>.preinst script de pacote para ser executado antes da instalação do pacote
/var/lib/dpkg/info/<nome_do_pacote>.postinst script de pacote para ser executado após a instalação do pacote
/var/lib/dpkg/info/<nome_do_pacote>.prerm script de pacote para ser executado antes da remoção do pacote
/var/lib/dpkg/info/<nome_do_pacote>.postrm script de pacote para ser executado após a remoção do pacote
/var/lib/dpkg/info/<nome_do_pacote>.config script de pacote para o sistema debconf
/var/lib/dpkg/alternatives/<nome_do_pacote> a informação alternativa usada pelo comando update-alternatives
/var/lib/dpkg/available a informação de disponibilidade para todos os pacotes
/var/lib/dpkg/diversions a informação de diversões usadas pelo dpkg(1) e definidas por dpkg-divert(8)
/var/lib/dpkg/statoverride a informação de sobreposição de estado usada pelo dpkg(1) e definida por dpkg-statoverride(8)
/var/lib/dpkg/status a informação de estado para todos os pacotes
/var/lib/dpkg/status-old o backup de primeira geração do ficheiro "var/lib/dpkg/status"
/var/backups/dpkg.status* o backup de segunda geração e os mais antigos do ficheiro "var/lib/dpkg/status"

O ficheiro "status" também é utilizado por ferramentas como o dpkg(1), o "dselect update" e o "apt-get -u dselect-upgrade".

O comando especializado de busca grep-dctrl(1) pode procurar as cópias locais dos meta dados "status" e "available".

[Dica] Dica

No ambiente do debian-installer, o comando udpkg é usado para abrir pacotes udeb. O comando udpkg é uma versão reduzida do comando dpkg.

Quando corre o sistema unstable, espera-se que o administrador saiba recuperar o sistema de situações de gestão de pacotes com conflitos.

[Cuidado] Cuidado

Alguns métodos descritos aqui são acções de alto risco. Você foi avisado!

Os sistemas de gestão de pacotes a nível de arquivo, como o aptitude(8) ou o apt-get(1), nem tentam instalar pacotes com ficheiros sobrepostos utilizando as dependências do pacote. (veja Secção 2.1.6, “Dependências de pacote”).

Erros do responsável do pacote ou de implantação inconsistente de mistura de fontes de arquivos (veja Secção 2.7.2, “Pacotes de fontes de arquivos misturados”) pelo administrador do sistema podem criar situações com dependências de pacotes definidas incorrectamente. Quando você instala um pacote com ficheiros sobrepostos usando o aptitude(8) ou o apt-get(1) sob tal situação, o dpkg(1) que desempacota o pacote certifica-se de retornar um erro ao programa que o chama sem sobrescrever os ficheiros existentes.

[Cuidado] Cuidado

A utilização de pacotes de terceiros introduz riscos significantes ao sistema através dos scripts do desenvolvedor do pacote que são executados com privilégios de root e podem fazer o que quiserem ao seu sistema. O comando dpkg(1) apenas protege contra a sobreposição de ficheiros ao desempacotar.

Você pode contornar tal problema de instalação ao remover primeiro o pacote ofensivo antigo, <pacote_antigo>.

$ sudo dpkg -P <pacote-antigo>

Como o dpkg é uma ferramenta de pacotes de muito baixo nível, pode funcionar sob situações muito más como um sistema que não arranca sem ligação a rede. Vamos assumir que o pacote foo está danificado e precisa de ser substituído.

Você pode ainda encontrar cópias em cache de uma versão antiga livre de bugs do pacote foo no directório de cache de pacotes: "/var/cache/apt/archives/". (se não, você pode descarregá-lo a partir do arquivo http://snapshot.debian.net/ ou copiá-lo da cache de pacotes de uma máquina funcional.)

Se puder arrancar o sistema, você pode instalá-lo com o seguinte comando.

# dpkg -i /caminho/para/foo_<versão_antiga>_<arquitectura>.deb
[Dica] Dica

Se os danos no sistema forem menores, você pode em alternativa fazer downgrade (regredir a versão) ao sistema completo como em Secção 2.7.10, “Downgrade de emergência” usando o nível mais alto do sistema APT.

Se o seu sistema não puder arrancar pelo disco rígido, você precisa procurar outras maneiras de arrancá-lo.

  1. Arranque o sistema usando o CD de instalação de Debian (debian-installer) em modo de recuperação.

  2. Monte o sistema danificado no disco rígido em "/target".

  3. Instale uma versão antiga do pacote foo com o seguinte.

# dpkg --root /target -i /caminho/para/foo_<versão_antiga>_<arquitectura>.deb

Este exemplo funciona mesmo se o comando dpkg no disco rígido estiver danificado.

[Dica] Dica

Pode ser utilizado, de modo semelhante, para recuperar um sistema danificado qualquer sistema GNU/Linux arrancado de outro sistema no disco rígido, Live CD de GNU/Linux, por pen USB de arranque ou arranque pela rede.

Se a tentativa de instalar um pacote deste modo falha devido a algumas violações de dependências e você necessitar realmente de fazer isto como último recurso, você pode sobrepor a dependência utilizando a "--ignore-depends", "--force-depends" e outras opções do dpkg. Se fizer isto, você precisa de fazer um sério esforço para restaurar as dependências apropriadas mais tarde. Veja dpkg(8) para mais detalhes.

[Nota] Nota

Se o seu sistema estiver seriamente danificado, você deve fazer uma salvaguarda completa para um lugar seguro (veja Secção 10.2, “Salvaguarda (backup) e recuperação”) e deve fazer uma instalação limpa. Isto consome menos tempo e produz melhores resultados no fim.

[Cuidado] Cuidado

Instalar pacotes de fontes misturadas de arquivos não é suportado pela distribuição oficial Debian excepto para combinações de arquivos oficialmente suportadas tais como a stable com security updates e wheezy-updates.

Aqui está um exemplo de operações para incluir, uma vez, pacotes específicos com novas versões da origem encontrados em unstable enquanto se acompanha a testing.

  1. Altere o ficheiro "/etc/apt/sources.list" temporariamente para entrada única "unstable".

  2. Corra "aptitude update".

  3. Corra "aptitude install <nome-do-pacote>".

  4. Recupere o ficheiro "/etc/apt/sources.list" original para testing.

  5. Corra "aptitude update".

Você não cria o ficheiro "/etc/apt/preferences" nem precisa de se preocupar com o apt-pinning com esta abordagem manual. Mas é muito incómoda.

[Cuidado] Cuidado

Quando utiliza fontes misturadas de arquivos, você tem que assegurar por si próprio a compatibilidade dos pacotes pois Debian não o garante. Se existir incompatibilidade de pacotes, você pode danificar o seu sistema. Você tem que ser capaz de julgar estes requisitos técnicos. A utilização de fontes misturadas de arquivos aleatórios é uma operação completamente opcional e a sua utilização não é algo que eu o encoraje a utilizar.

As regras gerais para instalar pacotes de arquivos diferentes são as seguintes.

[Nota] Nota

De modo a tornar um pacote seguro para instalar, alguns pacotes de programas binários comerciais não-livres podem vir fornecidos com bibliotecas completamente ligadas estaticamente. Mesmo assim você deve verificar problemas de compatibilidade da ABI e etc. com eles.

[Nota] Nota

Excepto para evitar pacotes com problemas a curto prazo, instalar pacotes binários de arquivos não suportados oficialmente é geralmente uma má ideia. Isto é verdadeiro mesmo que utilize apt-pinning (veja Secção 2.7.3, “Moldar a versão candidata”). Você deve considerar o chroot ou técnicas semelhantes (veja Secção 9.10, “Sistema virtualizado”) para correr programas de arquivos diferentes.

Sem o ficheiro "/etc/apt/preferences", o sistema APT escolhe a versão disponível mais recente com a versão candidata utilizando a string de versão. Este é o estado normal e a utilização recomendada do sistema APT. Todas as combinações de arquivos oficialmente suportadas não necessitam do ficheiro "/etc/apt/preferences" porque alguns arquivos que não devem ser utilizados como fonte automática de actualizações são marcados como NotAutomatic e são tratados de modo apropriado.

[Dica] Dica

A regra de comparação da string de versão pode ser verificada com, p.e., "dpkg --compare-versions ver1.1 gt ver1.1~1; echo $?" (veja dpkg(1)).

Quando você instala regularmente pacotes de uma mistura de fontes de arquivos (veja Secção 2.7.2, “Pacotes de fontes de arquivos misturados”), você pode automatizar estas operações complicadas ao criar o ficheiro "/etc/apt/preferences" com entradas apropriadas e moldando a regra de selecção de pacotes para a versão candidata como descrito em apt_preferences(5). A isto chama-se apt-pinning.

[Atenção] Atenção

A utilização de apt-pinning por um utilizador novato é certamente pedir grandes problemas. Você deve evitar utilizar o apt-pinning excepto quando necessitar absolutamente dele.

[Cuidado] Cuidado

Quando utilizar apt-pinning, você próprio tem que assegurar a compatibilidade dos pacotes pois Debian não o garante. O apt-pinning é uma operação completamente opcional e a sua utilização não é algo que eu encoraje a fazer.

[Cuidado] Cuidado

Os ficheiros Release de nível de arquivo (veja Secção 2.5.3, “Ficheiros "Release" do nível de arquivo”) são utilizados para a regra do apt_preferences(5). Assim o apt-pinning funciona apenas com nome de "suite" para arquivos Debian normais e arquivos Debian de segurança. (Isto é diferente dos arquivos do Ubuntu.) Por exemplo, você pode fazer "Pin: release a=unstable" mas não pode fazer "Pin: release a=sid" no ficheiro "/etc/apt/preferences".

[Cuidado] Cuidado

Quando utilizar um arquivo não-Debian como parte de apt-pinning, você deve verificar ao que ele se destina e também verificar a sua credibilidade. Por exemplo, Ubuntu e Debian não se destinam a ser misturados.

[Nota] Nota

Mesmo que você não crie o ficheiro "/etc/apt/preferences", você pode fazer operações no sistema bastante complexas (veja Secção 2.6.4, “Recuperação com o comando dpkg” e Secção 2.7.2, “Pacotes de fontes de arquivos misturados”) sem o apt-pinning.

Aqui está uma explicação simplificada da técnica de apt-pinning.

O sistema APT escolhe o pacote de actualização com o Pin-Priority maior das fontes de pacotes disponíveis definidas no ficheiro "/etc/apt/sources.list" como o pacote de versão candidata. Se o Pin-Priority do pacote for maior que 1000, esta restrição de versão para actualização é abandonada para permitir a regressão (veja Secção 2.7.10, “Downgrade de emergência”).

O valor Pin-Priority de cada pacote é definido por entradas "Pin-Priority" no ficheiro "/etc/apt/preferences" ou utiliza o seu valor predefinido.


O arquivo do lançamento alvo pode ser definido por diferentes métodos.

  • ficheiro de configuração "/etc/apt/apt.conf" com a linha "APT::Default-Release "stable";"

  • opção de linha de comandos, p.e. "apt-get install -t testing algum-pacote"

Os arquivos NotAutomatic e ButAutomaticUpgrades são definidos pelo servidor de arquivo que contêm no seu ficheiro Release do nível de arquivo (veja Secção 2.5.3, “Ficheiros "Release" do nível de arquivo”) ambos "NotAutomatic: yes" e "ButAutomaticUpgrades: yes". O arquivo NotAutomatic é definido pelo servidor de arquivo que contém no seu ficheiro Release de nível de arquivo apenas "NotAutomatic: yes".

A situação de apt-pinning do <pacote> de várias fontes de arquivos é mostrada por "apt-cache policy <pacote>".

  • Uma linha começada com "Package pin:" lista a versão do pacote de pin se estiver definida a associação apenas com o <pacote> p.e., "Package pin: 0.190".

  • Não existe nenhuma linha com "Package pin:" se não estiver definida nenhuma associação apenas com <pacote>.

  • O valor Pin-Priority associando ao <pacote> é listado no lado direito de todas as strings de versão, p.e., "0.181 700".

  • É listado "0" à direita de todas as strings de versão se nenhuma associação apenas com <pacote> for definida, ex., "0.181 0".

  • Os valores Pin-Priority dos arquivos (definidos como "Package: *" no ficheiro "/etc/apt/preferences") são listados à esquerda dos caminhos dos arquivos, ex., "100 http://ftp.XX.debian.org/debian/ wheezy-backports/main Packages".

Existem os arquivos wheezy-updates e backports.debian.org que disponibilizam pacotes de actualização para stable (wheezy).

De modo a utilizar estes arquivos, liste todos os arquivos necessários no ficheiro "/etc/apt/sources.list" como se segue:

deb http://ftp.us.debian.org/debian/ wheezy main contrib non-free
deb http://security.debian.org/ wheezy/updates main contrib
deb http://ftp.us.debian.org/debian/ wheezy-updates main contrib non-free
deb http://ftp.us.debian.org/debian/ wheezy-backports main contrib non-free

Não há necessidade de definir valores específicos de Pin-Priority no ficheiro "/etc/apt/preferences". Quando os novos pacotes ficam disponíveis, a configuração predefinida disponibiliza as actualizações mais razoáveis (veja Secção 2.5.3, “Ficheiros "Release" do nível de arquivo”).

  • Todos os pacotes antigos instalados são actualizados para mais recentes a partir de wheezy-updates.

  • Apenas os pacotes antigos instalados manualmente a partir de wheezy-backports são actualizados para mais recentes a partir de wheezy-backports.

Sempre que desejar instalar um pacote chamado "<nome-do-pacote>" com as suas dependências a partir do arquivo wheezy-backports manualmente, utilize o seguinte comando enquanto muda o lançamento alvo com a opção "-t".

$ sudo apt-get install -t wheezy-backports <nome_do_pacote>

Aqui está um exemplo de técnica de apt-pinning para incluir pacotes específicos de versão original mais recente encontrados em unstable e actualizados regularmente enquanto de segue o testing. Liste todos os arquivos necessários no ficheiro "/etc/apt/sources.list" conforme se segue:

deb http://ftp.us.debian.org/debian/ testing main contrib non-free
deb http://ftp.us.debian.org/debian/ unstable main contrib non-free
deb http://security.debian.org/ testing/updates main contrib

Configure o ficheiro "/etc/apt/preferences" como o seguinte:

Package: *
Pin: release a=unstable
Pin-Priority: 100

Quando desejar instalar um pacote chamado "<nome_do_pacote>" com as suas dependências a partir do arquivo unstable sob esta configuração, invoque o seguinte comando que muda o lançamento alvo com a opção "-t" (o Pin-Priority de unstable torna-se 990).

$ sudo apt-get install -t unstable <nome-do-pacote>

Com esta configuração, a execução usual de "apt-get upgrade" e "apt-get dist-upgrade" (ou "aptitude safe-upgrade" e "aptitude full-upgrade") actualiza os pacotes que foram instalados a partir do arquivo testing usando o arquivo testing actual e os pacotes que foram instalados a partir do arquivo unstable usando o arquivo unstable actual.

[Cuidado] Cuidado

Tenha cuidado para não remover a entrada "testing" do ficheiro "/etc/apt/sources.list". Sem a entrada "testing" lá, o sistema APT actualiza os pacotes do novo arquivo unstable.

[Dica] Dica

Geralmente edito o ficheiro "/etc/apt/sources.list" para comentar a entrada do arquivo "unstable" logo após a operação acima. Isto evita a lentidão do processo de actualização ao ter demasiadas entradas no ficheiro "/etc/apt/sources.list" embora isto impeça a actualização dos pacotes que foram instalados a partir do arquivo unstable utilizando o arquivo unstable actual.

[Dica] Dica

Se for utilizado "Pin-Priority: 1" em vez de "Pin-Priority: 100" no ficheiro "/etc/apt/preferences", os pacotes já instalados que têm o valor Pin-Priority de 100 não são actualizados pelo arquivo unstable mesmo se a entrada "testing" no ficheiro "/etc/apt/sources.list" seja removida.

Se desejar acompanhar pacotes particulares em unstable automaticamente sem uma instalação inicial "-t unstable", tem de criar o ficheiro "/etc/apt/preferences" e listar explicitamente todos esses pacotes no topo conforme se segue:

Package: <package-1>
Pin: release a=unstable
Pin-Priority: 700

Package: <package-2>
Pin: release a=unstable
Pin-Priority: 700

Estes definem o valor Pin-Priority para cada pacote específico. Por exemplo, de modo a acompanhar a versão unstable mais recente deste "Debian Reference" em Português, você deve ter as seguintes entradas no ficheiro "/etc/apt/preferences".

Package: debian-reference-pt
Pin: release a=unstable
Pin-Priority: 700

Package: debian-reference-common
Pin: release a=unstable
Pin-Priority: 700
[Dica] Dica

Esta técnica de apt-pinning é válida mesmo se você estiver a seguir o arquivo stable. Pela minha experiência e até agora, os pacotes de documentação sempre foram seguros de instalar a partir do arquivo unstable.

O pacote apt vem com o seu próprio script de cron "/etc/cron.daily/apt" para suportar a descarga automática de pacotes. Este script pode ser melhorado para executar a actualização automática de pacotes ao instalar o pacote unattended-upgrades. Esta pode ser personalizada por parâmetros em "/etc/apt/apt.conf.d/02backup" e "/etc/apt/apt.conf.d/50unattended-upgrades" conforme descrito em "/usr/share/doc/unattended-upgrades/README".

O pacote unattended-upgrades destina-se principalmente para as actualizações de segurança do sistema stable. Se o risco de danificar um sistema stable existente pelas actualizações automáticas for menor do que ser danificado por um intruso que usa buracos de segurança que foram fechados por actualizações de segurança, você deve considerar usar estas actualizações automáticas com parâmetros de configuração como os que se seguem.

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::Unattended-Upgrade "1";

Se estiver a correr um sistema unstable, não vai querer utilizar as actualizações automáticas pois um dia, com certeza, irão danificar o seu sistema. Mesmo para casos de unstable, você pode ainda querer descarregar os pacotes com antecedência para poupar tempo na actualização interactiva com parâmetros de configuração como os que se seguem.

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::Unattended-Upgrade "0";
[Cuidado] Cuidado

O downgrade (regressão de versão) não é suportado oficialmente pelo sistema Debian por design. Deverá ser feito apenas como parte de um processo de recuperação de emergência. Apesar desta situação, é conhecido por funcionar bem em muitos incidentes. Para sistemas críticos, Você deve fazer salvaguardas (backups) de todos os dados importantes após a operação de recuperação e reinstalar um sistema novo a partir da estaca zero.

Você pode ter sorte ao fazer o downgrade de uma arquivo recente para um arquivo mais antigo para recuperar de uma actualização ao sistema que o deixou danificado ao manipular a versão candidata (veja Secção 2.7.3, “Moldar a versão candidata”). Esta é uma alternativa preguiçosa às acções tediosas de muitos comandos "dpkg -i <pacote-danificado>_<versão-antiga>.deb" (veja Secção 2.6.4, “Recuperação com o comando dpkg”).

Procure as linhas no ficheiro "/etc/apt/sources.list" que acompanham unstable como se segue.

deb http://ftp.us.debian.org/debian/ sid main contrib non-free

Substitua-as de modo a acompanharem testing.

deb http://ftp.us.debian.org/debian/ jessie main contrib non-free

Altere o ficheiro "/etc/apt/preferences" como o seguinte.

Package: *
Pin: release a=testing
Pin-Priority: 1010

Corra "apt-get update; apt-get dist-upgrade" para forçar a regressão dos pacotes no sistema.

Remova este ficheiro especial "/etc/apt/preferences" após este downgrade de emergência.

[Dica] Dica

É uma boa ideia remover (não purgar) o máximo de pacotes para minimizar problemas de dependências. Você pode necessitar remover e instalar manualmente alguns pacotes para conseguir o downgrade do sistema. O kernel Linux, gestor de arranque, udev, PAM, APT, os pacotes relacionados com a rede e os seus ficheiros de configuração requerem atenção especial.

Como colocar em mirror uma sub-secção inteira do arquivo Debian é um desperdício de espaço de disco e largura de banda de rede, a implantação se um servidor proxy local para o APT é desejável tendo em consideração se administrar muitos sistemas em LAN. O APT pode ser configurado para utilizar servidores proxy web genéricos (http) como o squid (veja Secção 6.10, “Outras aplicações de servidor de rede”) conforme descrito em apt.conf(5) e em "/usr/share/doc/apt/examples/configure-index.gz". A variável de ambiente $http_proxy" pode ser utilizada para sobrepor a definição de servidor proxy do ficheiro "/etc/apt/apt.conf".

Existem ferramentas de proxy especiais para o arquivo Debian. Você deve verificar o BTS antes de as utilizar.


[Cuidado] Cuidado

Quando Debian reorganiza a estrutura do seu arquivo, estas ferramentas de proxy especializadas tendem a necessitar ser reescritas de pelo responsável do pacote e podem não estar funcionais durante algum tempo. Por outro lado, os servidores proxy web (http) genéricos são mais robustos e mais fáceis de acompanhar estas mudanças.

Aqui está um exemplo para criar um pequeno arquivo de pacotes público compatível com o moderno sistema secure APT (veja Secção 2.5.2, “Ficheiro "Release" de nível de topo e autenticidade:”). Vamos assumir algumas coisas:

  • nome da conta: "foo"

  • Nome da máquina: "www.example.com"

  • Pacotes necessários: apt-utils, gnupg, e outros pacotes

  • URL: "http://www.example.com/~foo/" ( → "/home/foo/public_html/index.html")

  • Arquitectura de pacotes: "amd64"

Crie uma chave de arquivo APT de Foo no seu sistema servidor como o seguinte:

$ ssh foo@www.example.com
$ gpg --gen-key
...
$ gpg -K
...
sec   1024D/3A3CB5A6 2008-08-14
uid                  Foo (ARCHIVE KEY) <foo@www.example.com>
ssb   2048g/6856F4A7 2008-08-14
$ gpg --export -a 3A3CB5A6 >foo.public.key

Publique o ficheiro de chave de arquivo "foo.public.key" com o ID de chave "3A3CB5A6" para Foo

Crie uma árvore de arquivo chamada "Origin: Foo" como o seguinte:

$ umask 022
$ mkdir -p ~/public_html/debian/pool/main
$ mkdir -p ~/public_html/debian/dists/unstable/main/binary-amd64
$ mkdir -p ~/public_html/debian/dists/unstable/main/source
$ cd ~/public_html/debian
$ cat > dists/unstable/main/binary-amd64/Release << EOF
Archive: unstable
Version: 4.0
Component: main
Origin: Foo
Label: Foo
Architecture: amd64
EOF
$ cat > dists/unstable/main/source/Release << EOF
Archive: unstable
Version: 4.0
Component: main
Origin: Foo
Label: Foo
Architecture: source
EOF
$ cat >aptftp.conf <<EOF
APT::FTPArchive::Release {
  Origin "Foo";
  Label "Foo";
  Suite "unstable";
  Codename "sid";
  Architectures "amd64";
  Components "main";
  Description "Public archive for Foo";
};
EOF
$ cat >aptgenerate.conf <<EOF
Dir::ArchiveDir ".";
Dir::CacheDir ".";
TreeDefault::Directory "pool/";
TreeDefault::SrcDirectory "pool/";
Default::Packages::Extensions ".deb";
Default::Packages::Compress ". gzip bzip2";
Default::Sources::Compress "gzip bzip2";
Default::Contents::Compress "gzip bzip2";

BinDirectory "dists/unstable/main/binary-amd64" {
  Packages "dists/unstable/main/binary-amd64/Packages";
  Contents "dists/unstable/Contents-amd64";
  SrcPackages "dists/unstable/main/source/Sources";
};

Tree "dists/unstable" {
  Sections "main";
  Architectures "amd64 source";
};
EOF

Pode automatizar actualizações repetitivas do conteúdo do arquivo APT no seu sistema servidor configurando o dupload.

Colocar todos os ficheiros de pacotes em "~foo/public_html/debian/pool/main/" ao executar "dupload -t foo changes_file" no cliente enquanto o "~/.dupload.conf" contém o seguinte:

$cfg{'foo'} = {
  fqdn => "www.exemplo.com",
  method => "scpb",
  incoming => "/home/foo/public_html/debian/pool/main",
  # The dinstall on ftp-master sends emails itself
  dinstall_runs => 1,
};

$cfg{'foo'}{postupload}{'changes'} = "
  echo 'cd public_html/debian ;
  apt-ftparchive generate -c=aptftp.conf aptgenerate.conf;
  apt-ftparchive release -c=aptftp.conf dists/unstable >dists/unstable/Release ;
  rm -f dists/unstable/Release.gpg ;
  gpg -u 3A3CB5A6 -bao dists/unstable/Release.gpg dists/unstable/Release'|
  ssh foo@www.exemplo.com  2>/dev/null ;
  echo 'Arquivo pacote criado!'";

O script hook postupload inicializado pelo dupload(1) cria ficheiros de arquivo actualizados para cada upload.

Pode adicionar este pequeno arquivo público à linha de apt do sistema cliente com o seguinte:

$ sudo bash
# echo "deb http://www.example.com/~foo/debian/ unstable main" \
   >> /etc/apt/sources.list
# apt-key add foo.public.key
[Dica] Dica

Se o arquivo estiver localizado no sistema de ficheiros local, então pode utilizar antes "deb file:///home/foo/debian/ …"

O conteúdo dos pacotes "dpkg*.deb" pode ser extraído sem utilizar o dpkg(1) em qualquer ambiente estilo Unix utilizando os ar(1) e tar(1) standard.

# ar x /path/to/dpkg_<version>_<arch>.deb
# ls
total 24
-rw-r--r-- 1 bozo bozo  1320 2007-05-07 00:11 control.tar.gz
-rw-r--r-- 1 bozo bozo 12837 2007-05-07 00:11 data.tar.gz
-rw-r--r-- 1 bozo bozo     4 2007-05-07 00:11 debian-binary
# mkdir control
# mkdir data
# tar xvzf control.tar.gz -C control
# tar xvzf data.tar.gz -C data

Os outros conteúdos do pacote "*.deb" podem ser extraídos pelo comando dpkg-deb(1) obtido do pacote "dpkg*.deb" como em cima; ou usando o standard ar(1) e o novo tar(1) do GNU com o suporte de descompressão xz(1) de modo semelhante como em cima.

Também pode explorar o conteúdo de um pacote utilizando o comando mc.