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. 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-alternative
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çiõ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 38813 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 seguintei:

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

pacote popcon tamanho descrição
apt V:896, I:999 3232 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:989 4684 Gestor de pacotes baseado em terminal interactivo com aptitude(8)
update-manager-gnome V:160, I:233 1266 Aplicação do GNOME que gere actualizações de software com o update-manager(8)
tasksel V:59, I:955 714 ferramenta para seleccionar tarefas para instalação no sistema Debian (frontend para o APT)
unattended-upgrades V:56, I:414 320 pacote de melhoria para o APT para activar a instalação automática de actualizações de segurança
dselect V:13, I:129 2452 gestor de pacotes baseado em terminal (foi o standard anterior, frontend para o APT e outros métodos de acesso antigos)
dpkg V:950, I:999 6344 sistema de gestão de pacotes para Debian
synaptic V:113, I:419 7711 gestor de pacotes gráfico (frontend do GNOME para o APT)
apt-utils V:439, I:997 1296 Programas utilitários do APT: apt-extracttemplates(1), apt-ftparchive(1), e apt-sortpkgs(1)
apt-listchanges V:362, I:652 203 ferramenta de notificação do histórico de alterações do pacote
apt-listbugs V:11, I:18 395 lista bugs críticos antes de cada instalação do APT
apt-file V:22, I:98 69 Utilitário de busca de pacotes do APT - interface de linha de comandos
apt-rdepends V:1, I:7 64 lista recursivamente dependências de pacotes

2.1. Pré-requisitos da gestão de pacotes Debian

2.1.1. Configuração de pacotes

Aqui estão alguns pontos chave para a configuração de pacotes no sistema Debian.

  • A configuração manual feita pelo administrador do sistema é respeitada. Por outras palavras, o sistema de configuração de pacotes não faz configurações intrusivas por conveniência.

  • Cada pacote vem com o seu próprio script de configuração com a interface de utilizador standard chamada debconf(7) para ajudar no processo inicial de instalação do pacote.

  • Os Programadores do Debian dão o seu melhor para tornar a sua experiência de actualização isenta de falhas com scripts de configuração de pacotes.

  • As funcionalidades totais do software empacotado estão disponíveis ao administrador do sistema. Mas aquelas com riscos de segurança estão desactivadas na instalação predefinida.

  • Se você activou manualmente um serviço com alguns riscos de segurança você é o responsável pelo confinamento de risco.

  • A configuração esotérica pode ser activada manualmente pelo administrador do sistema. Isto pode criar interferências com programas de ajuda genéricos populares para a configuração do sistema.

2.1.2. Precauções básicas

[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 açõ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ó.

2.1.3. A vida com actualizações eternas

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:

  • Faça um sistema de duplo arranque ao instalar a suite stable do sistema Debian noutra partição.

  • Tenha o CD de instalação 'à mão' para o arranque de recuperação

  • Considere instalar o apt-listbugs para verificar informação do Debian Bug Tracking System (BTS) antes das actualizações

  • Conheça o suficiente da infraestrutura do sistema de pacotes para contornar o problema

  • Crie um chroot ou ambiente semelhante para antecipadamente correr nele o sistema mais recente (veja Secção 9.8, “Sistema virtualizado”)

(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.

2.1.4. Básico do arquivos 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.

Tabela 2.2. Lista de sites de arquivos Debian

URL do arquivo nome da suite (nome de código) objectivo
http://ftp.XX.debian.org/debian/ stable (wheezy) lançamento (wheezy) stable
http://ftp.XX.debian.org/debian/ testing (jessie) lançamento (jessie) testing
http://ftp.XX.debian.org/debian/ unstable (sid) lançamento (sid) unstable
http://ftp.XX.debian.org/debian/ experimental pré-lançamento experimental (opcional, apenas para desenvolvedores)
http://ftp.XX.debian.org/debian/ stable-proposed-updates Actualizações para o próximo lançamento de ponto estável (opcional)
http://security.debian.org/ stable/updates actualizações de segurança para o lançamento stable (importante)
http://security.debian.org/ testing/updates actualizações de segurança para o lançamento testing (importante)
http://ftp.XX.debian.org/debian/ wheezy-updates actualizações compatíveis para filtro de spam, clientes IM, etc. para wheezy
http://backports.debian.org/debian-backports/ wheezy-backports pacotes backport mais recentes para wheezy (opcional)

[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 correçõ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.

Tabela 2.3. Lista de área de arquivo Debian

área número de pacotes critério do componente do pacote
main 38075 em conformidade com DFSG e nenhuma dependência a non-free
contrib 230 em conformidade com DFSG mas com dependências a non-free
non-free 508 não complacente com DFSG

Aqui o número de pacotes em cima é para a arquitectura amd64. A área main disponiboliza 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.

Tabela 2.4. A relação entre suite e nome de código

Tempo suite = stable suite = testing suite = unstable
após o lançamento wheezy nome de código = wheezy nome de código = jessie nome de código = sid
após o lançamento jessie nome de código = jessie nome de código = jessie+1 nome de código = sid

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

Na terminologia estrita do arquivo Debian, a palavra "seção" é utilizada especialmente para categorizar os pacotes pela área de aplicação. (Apesar da palavra "seçã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 pelo desenvolvedor de Debian (DD) para o arquivo unstable (por processamento do incoming), é necessáriq 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.

2.1.5. Debian é 100% software livre

Debian é 100% software livre por causa do seguinte:

  • Por omissão Debian instala apenas software livre para respeitar as liberdades do utilizador.

  • 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.

  • "Debian irá manter-se 100% livre". (Primeiro termo do Debian Socal Contract)

  • Os servidores Debian irão alojar alguns pacotes non-free e contrib.

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çõs 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 logotipo 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 distribuidos 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.7.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) disponiza-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.

2.1.6. Dependências de pacote

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.

2.1.7. O fluxo de eventos da gestão de pacotes

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

  • Update ("aptitude update" ou "apt-get update"):

    1. Obtém meta-dados do arquivo a partir do arquivo remoto

    2. Reconstrói e actualiza os meta-dados locais para utilização do APT

  • Upgrade ("aptitude safe-upgrade" e "aptitude full-upgrade", ou "apt-get upgrade" e "apt-get dist-upgrade"):

    1. Escolhe a versão candidata que geralmente é a versão mais recente disponível para todos os pacotes instalados (veja Secção 2.7.3, “Moldar a versão candidata” para excepções).

    2. Resolve a dependência do pacote

    3. Obtém os pacotes binários seleccionados do arquivo remoto se a versão candidata for diferente da versão instalada.

    4. Desempacota os pacotes binários obtidos

    5. Corre o script preinst

    6. Instala os ficheiros binários

    7. Corre o script postinst

  • Install ("aptitude install …" ou "apt-get install …"):

    1. Escolhe os pacotes listados na linha de comandos

    2. Resolve a dependência do pacote

    3. Obtém os pacotes binários seleccionados a partir do arquivo remoto

    4. Desempacota os pacotes binários obtidos

    5. Corre o script preinst

    6. Instala os ficheiros binários

    7. Corre o script postinst

  • Remove ("aptitude remove …" ou "apt-get remove …"):

    1. Escolhe os pacotes listados na linha de comandos

    2. Resolve a dependência do pacote

    3. Corre o script prerm

    4. Remove os ficheiros instalados excepto os ficheiros de configuração

    5. Corre o script postrm

  • Purge ("aptitude purge …" ou "apt-get purge …"):

    1. Escolhe os pacotes listados na linha de comandos

    2. Resolve a dependência do pacote

    3. Corre o script prerm

    4. Remove os ficheiros instalados incluindo os ficheiros de configuração

    5. Corre o script postrm

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

2.1.8. Primeira resposta a problemas com a gestão de pacotes

Você deve ler a boa documentação oficial. O primeiro documento a ler é específico de Debian "/usr/share/doc/<package_name>/README.Debian". Também deve ser consultada outra documentação em "/usr/share/doc/<package_name>/". Se você definir a shell como Secção 1.4.2, “Personalizar bash”, escreva o seguinte.

$ cd <nome_do_pacote>
$ pager README.Debian
$ mc

Você pode necessitar instalar o pacote de documentação correspondente, com o sufixo "-doc" no nome, para informações mais detalhadas.

Se você estiver a ter problemas com um pacote específico, certifique-se que verifica primeiro o Sistema de acompanhamento de bugs Debian (BTS).

Tabela 2.5. Lista de sites web chave para resolver problemas com um pacote específico.

site web comando
Página inicial do Sistema de acompanhamento de bugs Debian (BTS) sensible-browser "http://bugs.debian.org/"
O relatório de bug de um nome de pacote conhecido sensible-browser "http://bugs.debian.org/<nome_do_pacote>"
O relatório de bug de um número de bug conhecido sensible-browser "http://bugs.debian.org/<número_do_bug>"

Procure no Google com palavras de busca incluindo "site:debian.org", "site:wiki.debian.org", "site:lists.debian.org", etc.

Quando você criar um relatório de bug, por favor use o comando reportbug(1).

2.2. Operações básicas de gestão de pacotes

As operações básicas de gestão de pacotes no sistema Debian podem ser executas por qualquer ferramenta de gestão de pacotes disponível no sistema Debian. Aqui vamos explicar as 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 metadados do pacote, você necessita ter privilégios de root.

2.2.1. apt-get / apt-cache contra o aptitude

Os comandos apt-get e apt-cache são as ferramentas de gestão de pacotes 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 pacotes robusto e estável que utiliza os dados comuns do estado dos pacotes.

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

  • O apt-get foi actualizado para suportar a auto-instalação e auto-remoção de pacotes recomendados.

  • O apt-get foi actualizado para suportar o registo em log das actividades de pacotes.

  • 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 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 resolvedor de pacotes avançado que também utiliza dados extra de estado de pacotes utilizados apenas pelo aptitude.

  • O aptitude suporta auto-instalação e auto-remoção de pacotes recomendados.

  • O aptitude suporta registo em log das actividades de pacotes.

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

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

[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.

2.2.2. Operações básicas de gestão de pacotes com a linha de comandos

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 metadados 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 <package> 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 <package> 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

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).

A diferença entre "safe-upgrade"/"upgrade" e "full-upgrade"/"dist-upgrade" apenas aparece quando novas versões de pacotes ficam com relações de dependências diferentes das versões antigas desses pacotes. O comando "aptitude safe-upgrade" não instala novos pacotes nem remove pacotes instalados.

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".

Tabela 2.7. Opções de comando notáveis para o aptitude(8)

opção de comando descrição
-s simula o resultado do comando
-d faz apenas o download e não instala/actualiza
-D mostra breves explicações antes das instalações e remoções automáticas

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.

2.2.3. Uso interactivo do aptitude

Para gestão de pacotes interactiva, arranque o aptitude em modo interactivo a partir da linha de comandos da consola conforme se segue:

$ sudo aptitude -u
Password:

Isto actualiza a cópia local da informação do arquivo e mostra a lista de pacotes em ecrã completo com menu. O aptitude coloca a sua configuração em "~/.aptitude/config".

[Dica] Dica

Se desejar utilizar a configuração do root em vez da do utilizador, utilize "sudo -H aptitude …" em vez de "sudo aptitude …" na expressão acima.

[Dica] Dica

O aptitude define automaticamente as acções pendentes como se fosee arrancado interactivamente. Se não gostar disso, pode redefinir isto a partir do menu: "Acção" → "Cancelar acções pendentes".

2.2.4. Teclas de atalho do aptitude

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:

Tabela 2.8. Lista de teclas de atalho do aptitude

tecla tecla de atalho
F10 ou Ctrl-t menu
? mostra a ajuda para teclas (listagem mais completa)
F10 → Ajuda → Manual do Utilizador mostra o Manual do Utilizador
u actualiza a informação de arquivo do pacote
+ marca o pacote para actualização ou instalação
- marca o pacote para remoção (manter os ficheiros de configuração)
_ marca o pacote para purgar (remover ficheiros de configuração)
= coloca o pacote em retenção (hold)
U marca todos os pacotes com actualizações (funciona como full-upgrade)
g começa a descarregar e a instalar os pacotes seleccionados
q sai do ecrã actual e guarda as alterações
x sai do ecrã actual e descarta as alterações
Enter ver informação acerca de um pacote
C ver o relatório de alterações de um pacote
l altera o limite dos pacotes mostrados
/ procura pela primeira correspondência
\ repetir a última pesquisa

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.

2.2.5. Vistas de pacote no aptitude

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".

Tabela 2.9. Lista de vistas para o aptitude

vista estado descrição da vista
Vista de Pacote Bom veja Tabela 2.10, “A categorização das vista de pacotes standard” (predefinição)
Recomendações de Auditoria Bom lista pacotes que são recomendados por alguns pacotes instalados mas ainda não estão listados como instalados
Lista de Pacotes Lisa Bom lista pacotes sem categorização (para utilizar com expressões regulares)
Explorador de Debtags Muito utilizável lista pacotes categorizados de acordo com as suas entradas debtags
Explorador por Categorias Obsoleto lista pacotes categorizados de acordo com a sua categoria (utilize o Explorador de Debtags, em vez disto)

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

Tabela 2.10. A categorização das vista de pacotes standard

categoria descrição da vista
Pacotes Actualizáveis lista pacotes organizados como secçãoáreapacote
Pacotes Novos , ,
Pacotes Instalados , ,
Pacotes Não Instalados , ,
Pacotes Obsoletos ou Criados Localmente , ,
Pacotes Virtuais lista pacotes com a mesma função
Tarefas lista pacotes com diferentes funções geralmente necessárias para uma tarefa

[Dica] Dica

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

2.2.6. Opções do método de pesquisa com o aptitude

O aptitude oferece várias opções para você procurar pacotes utilizando a sua fórmula de expressões regulares.

  • Linha de comandos da shell:

    • "aptitude search '<aptitude_regex>'" para listar estado de instalação, nome do pacote e descrição curta dos pacotes correspondentes

    • "aptitude show '<package_name>'" para listar a descrição detalhada do pacote

  • modo de ecrã total interactivo:

    • "l" para limitar a vista de pacotes aos pacotes correspondentes

    • "/" para procurar um pacote correspondente

    • "\" para procurar um pacote correspondente voltando para trás

    • "n" para procurar o próximo

    • "N" para procurar o próximo (andando para trás)

[Dica] Dica

A string para <nome_de_pacote> é tratada como a correspondência exacta da string para o nome do pacote a menos que seja iniciada explicitamente com "~" para ser uma fórmula de expressão regular.

2.2.7. A fórmula regex do aptitude

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{sarge,etch,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 (pacote instalado automaticamente) ~M
corresponde com pacotes instalados sem a marca A (pacote seleccionado 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 com relações quebradas ~b
corresponde com pacotes com dependências/pré-dependências/conflitos quebrados ~B<type>
corresponde a pacotes dos quais a relação <type> é definida para o pacote <term> ~D[<type>:]<term>
corresponde a pacotes dos quais a relação <type> broken é definida para o pacote <term> ~DB[<type>:]<term>
corresponde a pacotes para os quais o pacote <term> define <type> relação ~R[<type>:]<term>
corresponde a pacotes para os quais o pacote <term> define <type> relação broken ~RB[<type>:]<term>
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 <term> com a versão filtrada ~S filter <term>
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 relação <type> é uma de (dependências, pré-dependências, recomendações, sugestões, conflitos, substituições, fornecimentos).

  • O tipo de relação predefinido é "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.

2.2.8. Resolução de dependências do aptitude

A selecção de um pacote no aptitude não puxa apenas os pacotes definidos na sua lista de "Dependências:" mas também os definidos na lista "Recomendados:" se o menu "F10 → Opções → Manuseamento de dependências" assim estiver definido. Estes pacotes auto-instalados são removidos automaticamente sob o aptitude se não forem mais necessários.

[Nota] Nota

Ante do lançamento do lenny, o apt-get e outras ferramentas standard do APT não ofereciam a funcionalidade autoremove.

2.2.9. Logs de actividade de pacotes

Você pode verificar o histórico de actividade de pacotes nos ficheiros log.

Tabela 2.12. Os ficheiros log para actividades de pacotes

ficheiro conteúdo
/var/log/dpkg.log Log da actividade de nível do dpkg para as actividades de todos os pacotes
/var/log/apt/term.log Log da actividade genérica do APT
/var/log/aptitude Log da actividade de comandos do aptitude

Na realidade, não é muito fácil obter rapidamente uma compreensão significativa a partir destes logs. Veja Secção 9.2.10, “Gravar alterações em ficheiros de configuração” para um modo mais fácil.

2.3. Exemplos de operações do aptitude

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

2.3.1. Listagem de pacotes com correspondência por expressão regular nos nomes de pacotes

O seguinte comando lista pacotes com regex a condizer com nomes de pacotes.

$ aptitude search '~n(pam|nss).*ldap'
p libnss-ldap - módulo NSS para usar LDAP como um serviço de nomes
p libpam-ldap - Módulo de Autenticação Acoplável que permite interfaces do LDAP

Isto dá muito jeito para para encontrar o nome exacto de um pacote.

2.3.2. Explorar com a correspondência de expressão regular

a expressão regular "~dipv6" na vista "Nova Lista de Pacotes Simples" com o aviso "l", limita a vista aos pacotes com a descrição correspondente e permite-lhe explorar interactivamente a sua informação.

2.3.3. Purgar pacotes removidos definitivamente

Você pode purgar todos os restantes ficheiros de configuração dos pacotes removidos.

Verifique os resultados do seguinte comando.

# aptitude search '~c'

Se achar que os pacotes listados podem ser purgados, execute o seguinte comando:

# aptitude purge '~c'

Você pode querer fazer o mesmo no modo interactivo para um controle mais preciso.

Você fornece a expressão regular "~c" na vista "Nova Lista Plana de Pacotes" com a propmpt "l". Isto limita a vista de pacotes apenas aos pacotes correspondentes à expressão regular, isto é, "removidos mas não purgados". Todos estes pacotes correspondentes a expressões regulares podem ser mostrados ao pressionar "[" nos cabeçalhos de nível de topo.

Depois pressione "_" em cabeçalhos de nível de topo tal como "pacotes instalados". Apenas os pacotes correspondentes à expressão regular sob o cabeçalho são marcados para serem purgados com isto. Você pode excluir alguns pacotes a serem purgados ao pressionar "=" interactivamente para cada um deles.

Esta técnica é muito útil e funciona com muitas outras teclas de comando.

2.3.4. Acertar o estado auto/manual de instalação

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" e escreva "m" sobre "Tasks" como instalado 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.

2.3.5. Actualização total ao sistema

[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.1.6, “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.”.

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

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 condizam 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ódifo-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>")

[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:

  • Toda a configuração do sistema e comandos de instalação necessitam ser executados pelo root.

  • A contrário do aptitude, que utiliza regex (veja Secção 1.6.2, “Expressões regulares”), os outros comandos de gestão de pacotes utilizam padrões como a shell glob (veja Secção 1.5.6, “Glob da shell”).

  • O apt-file(1), é disponibilizado pelo pacote apt-file, tem de correr previamente "apt-file update".

  • O configure-debian(8) disponibilizado pelo pacote configure-debian corre o dpkg-reconfigure(8) como seu backend.

  • O dpkg-reconfigure(8) corre scripts de pacote utilizando o debconf(1) como o seu backend.

  • Os comandos "apt-get build-dep", "apt-get source" e "apt-cache showsrc" necessitam de "deb-src" em "/etc/apt/sources.list".

  • Os dget(1), debuild(1), e debi(1) necessitam do pacote devscripts.

  • Veja o procedimento de (re)empacotamento utilizando "apt-get source" em Secção 2.7.13, “Portar um pacote para o sistema stable”.

  • O comando make-kpkg necessita do pacote kernel-package (veja Secção 9.7, “O kernel”).

  • Para empacotamento em geral veja Secção 12.11, “Criar um pacote Debian”.

2.4.2. Verificação dos ficheiros pacotes instalados

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.4.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.

2.4.3. Salvaguardar para problemas de pacotes.

Muito utilizadores preferem seguir o lançamento unstable do sistema Debian pelas suas novas funcionalidades e pacotes. Isto torna o sistema permeável a a bugs críticos dos pacotes.

A instalação do pacote apt-listbugs salvaguarda o seu sistema contra bugs críticos ao verificar automaticamente o Debian BTS por bugs críticos quando fizer actualizações com o sistema APT.

A instalação do pacote apt-listchanges disponibiliza notícias importantes de "NEWS.Debian" ao actualizar com o sistema APT.

2.4.4. Procurar nos meta-dados do pacote

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 desejair procurar, recursivamente, as dependências de pacotes, deverá utilizar o apt-rdepends(8).

2.5. Os interiores da gestão de pacotes Debian

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.

2.5.1. Meta dados do arquivo

Os ficheiros de meta-dados para cada distribuição são armazenados sob "dist/<nome-de_código>" em cada site mirror Debian, p.e., "http://ftp.us.debian.org/debian/". A sua estrutura de arquivo pode ser explorada com um navegador web. Existem 6 tipos de meta-dados chave.

Tabela 2.14. O conteúdo dos meta dados do arquivo Debian

ficheiro localização conteúdo
Release topo da distribuição descrição do arquivo e informação de integridade
Release.gpg topo da distribuição ficheiro de assinatura para o ficheiro "Release" assinado com a chave do arquivo
Contents-<architecture> topo da distribuição lista de todos os ficheiros para todos os pacotes no arquivo pertinente
Release topo de cada combinação de distribuição/área/arquitectura descrição do arquivo utilizada para a regra do apt_preferences(5)
Packages topo de cada combinação de distribuição/área/arquitectura-binário debian/control concatenado para pacotes binários
Sources topo de cada combinação de distribuição/área/fonte debian/control concatenado para pacotes fonte

No arquivo recente, estes meta-dados são armazenados como ficheiros diferenciais e comprimidos para reduzir o tráfego de rede.

2.5.2. Ficheiro "Release" de nível de topo e autenticidade:

[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 "nomei 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 "Componente".

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.4, “Infraestrutura da segurança de dados”).

2.5.3. Ficheiros "Release" do nível de arquivo

[Dica] Dica

Os ficheiros "Release" do nível de arquivo são utilizados para a regra do apt_preferences(5).

Existem ficheiros "Release" do nível de arquivo para todas as localizações do arquivo especificadas pela linha "deb" em "/etc/apt/sources.list", tais como "http://ftp.us.debian.org/debian/dists/unstable/main/binary-amd64/Release" ou "http://ftp.us.debian.org/debian/dists/sid/main/binary-amd64/Release" conforme se segue:

Archive: unstable
Origin: Debian
Label: Debian
Component: main
Architecture: amd64
[Cuidado] Cuidado

Para a estrofe "Archive:" são utilizados os nomes de suite ("stable", "testing" e "unstable", …) no arquivo Debian enquanto que os nomes de código ("dapper", "feisty", "gutsy", "hardy" e "intrepid", …) são utilizados no arquivo Ubuntu.

Para alguns arquivos, tais como experimental, e wheezy-backports, que contêm pacotes que não devem ser instalados automaticamente, existe uma linha extra, p.e., "http://ftp.us.debian.org/debian/dists/experimental/main/binary-amd64/Release" como se segue.

Archive: experimental
Origin: Debian
Label: Debian
NotAutomatic: yes
Component: main
Architecture: amd64

Por favor note que para arquivos normais sem "NotAutomatic: yes", o valor Pin-Priority predefinido é 500, enquanto que para arquivos especiais com "NotAutomatic: yes", o valor Pin-Priority predefinido é 1 (veja apt_preferences(5) e Secção 2.7.3, “Moldar a versão candidata”).

2.5.4. Obter os meta dados do pacote

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" e "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.)

2.5.5. O estado dos pacote para o APT

Além aos meta-dados obtidos remotamente, a ferramenta APT após o lenny armazena a sua informação de estado de instalação gerada localmente em "/var/lib/apt/extended_states" que é utilizada por todas as ferramentas do APT para seguirem todos os pacotes auto-instalados.

2.5.6. O estado dos pacote para o aptitude

Além aos meta-dados obtidos remotamente, o aptitude armazena a sua informação de estado de instalação gerada localmente em "/var/lib/aptitude/pkgstates" que é usada apenas pelo próprio.

2.5.7. Copias locais dos pacotes obtidos

Todos os pacotes obtidos remotamente através do mecanismo APT são armazenados em "/var/cache/apt/archives" até que sejam limpos.

2.5.8. Nomes de ficheiros de pacotes Debian

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

Tabela 2.15. A estrutura de nomes dos pacotes Debian

tipo de pacote estrutura de nomes
O pacote binário (a.k.a deb) <nome_de_pacote>_<epoch>:<versão_upstream>-<versão.debian>-<arquitectura>.deb
O pacote binário (a.k.a udeb) <nome_de_pacote>_<epoch>:<versão_upstream>-<versão.debian>-<arquitectura>.udeb
O pacote de código-fonte (código-fonte da origem) <nome_de_pacote>_<epoch>:<versão_upstream>-<versão.debian>.orig.tar.gz
O pacote de código-fonte 1.0 (alterações do Debian) <nome_de_pacote>_<epoch>:<versão_upstream>-<versão.debian>.diff.gz
O pacote de código-fonte 3.0 (quilt) (alterações do Debian) <nome_de_pacote>_<epoch>:<versão_upstream>-<versão.debian>.debian.tar.gz
O pacote de código-fonte (descrição) <nome_do_pacote>_<epoch>:<versão_upstream>-<versão.debian>.dsc

[Dica] Dica

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

Tabela 2.16. Os caracteres utilizáveis para cada componente nos nomes de pacotes Debian

componente do nome caracteres utilizáveis (regex) existência
<nome-do-pacote> [a-z,A-Z,0-9,.,,-] necessário
<epoch>: [0-9]+: opcional
<versão-upstream> [a-z,A-Z,0-9,.,,-,:] necessário
<versão.debian> [a-z,A-Z,0-9,.,,~] opcional

[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.

2.5.9. O comando dpkg

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 executado antes da instalação do pacote
/var/lib/dpkg/info/<nome_do_pacote>.postinst script de pacote executado após a instalação do pacote
/var/lib/dpkg/info/<nome_do_pacote>.prerm script de pacote executado antes da remoção do pacote
/var/lib/dpkg/info/<nome_do_pacote>.postrm script de pacote 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 usada pelo dpkg(1) e definida pelo `dpkg-divert`(8)
/var/lib/dpkg/statoverride a informação de estado de sobreposição usada pelo dpkg(1) e definida pelo `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.

2.5.10. O comando update-alternative

O sistema Debian tem um mecanismo para instalar programas de certa maneira sobrepostos de um modo pacífico usando update-alternatives(8). Por exemplo, você pode fazer o comando vi seleccionar o vim para executar enquanto instala ambos os pacotes vim e nvi.

$ ls -l $(type -p vi)
lrwxrwxrwx 1 root root 20 2007-03-24 19:05 /usr/bin/vi -> /etc/alternatives/vi
$ sudo update-alternatives --display vi
...
$ sudo update-alternatives --config vi
  Selection    Command
 ----------------------------------------------
      1        /usr/bin/vim
*+    2        /usr/bin/nvi

Enter para manter a predefinição[*], ou escreva o número da selecção: 1

O sistema de alternativas do Debian mantêm a sua selecção como links simbólicos em "/etc/alternatives/". O processo de selecção utiliza um ficheiro correspondente em "/var/lib/dpkg/alternatives/".

2.5.11. O comando dpkg-statoverride

Stat overrides disponibilizados pelo comando dpkg-statoverride(8) são um modo de dizer ao dpkg(1) para usar um dono ou modo diferente para um ficheiro quando um pacote for instalado. Se for especificado "--update" e o ficheiro existir é imediatamente definido para o novo dono e modo.

[Cuidado] Cuidado

A alteração directa do dono ou modo para um ficheiro cujo dono é o pacote usando os comandos chmod ou chown pelo administrador do sistema é reiniciada pela próxima actualização do pacote.

[Nota] Nota

Eu uso a palavra ficheiro aqui, mas na verdade pode ser qualquer objecto de sistema de ficheiros com que o dpkg lide, incluindo directórios, dispositivos, etc.

2.5.12. O comando dpkg-divert

As diversões de ficheiros disponibilizadas pelo comando dpkg-divert(8) são um modo de forçar o dpkg(1) a não instalar um ficheiro na sua localização predefinida, mas para uma localização divergida. Os uso do dpkg-divert destina-se aos scripts do responsável do pacote. A sua utilização casual pelo administrador do sistema está descontinuada.

2.6. Recuperação de um sistema danificado

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!

2.6.1. Incompatibilidade com configuraçiões antigas de utilizador

Se um programa GUI de ambiente de trabalho ficou instável após uma actualização significante da versão original, você deve suspeitar de interferências com os ficheiros locais de configuração antigos criados por ele. Se estiver estável sob uma conta de utilizador nova criada, esta hipótese está confirmada. (Isto é um bug de empacotamento e geralmente evitado pelo empacotador.)

Para recuperar a estabilidade, você deve mover os ficheiros de configuração locais correspondentes e reiniciar o programa GUI. Você poderá ter que ler o conteúdo dos ficheiros de configuração antigos para mais tarde recuperar informação de configuração. (Não os apague muito depressa.)

2.6.2. Pacotes diferentes com ficheiros sobrepostos

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>

2.6.3. Corrigir script problemático de pacote

Quando um comando no script do pacote retorna erro por alguma razão e o script termina com erro, o sistema de gestão de pacotes aborta a sua acção e termina com pacotes parcialmente instalados. Quando um pacote contém bugs nos seus scripts de remoção, o pacote pode tornar-se impossível de remover e isso é bastante desagradável.

Para o problema do script de pacote de "<nome_do_pacote>", você deve observar os seguintes scripts do pacote:

  • "/var/lib/dpkg/info/<nome_do_pacote>.preinst"

  • "/var/lib/dpkg/info/<nome_do_pacote>.postinst"

  • "/var/lib/dpkg/info/<nome_do_pacote>.prerm"

  • "/var/lib/dpkg/info/<nome_do_pacote>.postrm"

Editar o script do pacote ofensivo a partir de root usando as seguintes técnicas:

  • desactivar a linha ofensiva ao preceder um "#"

  • forçar um retorno com sucesso ao acrescentar a linha ofensiva com "|| true"

Configurar todos os pacotes parcialmente instalados com o seguinte comando.

# dpkg --configure -a

2.6.4. Recuperação com o comando dpkg

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 Secção 2.7.10, “Downgrade de emergência” utilizando o sistema APT de mais alto nível.

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

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

2.6.5. Recuperar dados de selecção de pacotes

Se por qualquer razão o "/var/lib/dpkg/status" ficar corrompido o sistema Debian perde os dados de selecção de pacotes e sofre severamente. Procure o ficheiro antigo "/var/lib/dpkg/status" em "/var/lib/dpkg/status-old" ou "/var/backups/dpkg.status.*".

Manter "/var/backups/" numa partição separada pode ser uma boa ideia porque este directório contém muitos dados importantes do sistema .

Em caso de sérios danos eu recomendo fazer uma instalação limpa após fazer a salvaguarda do sistema. Mesmo que tudo em "/var/" esteja perdido, você ainda pode recuperar alguma informação dos directórios em "/usr/share/doc/" para o guiar na sua nova instalação.

Reinstalar o sistema mínimo (ambiente de trabalho).

# mkdir -p /caminho/para/sistema/antigo

Monte o sistema antigo em "/caminho/para/sistema/antigo/".

# cd /caminho/para/sistema/antigo/usr/share/doc
# ls -1 >~/ls1.txt
# cd /usr/share/doc
# ls -1 >>~/ls1.txt
# cd
# sort ls1.txt | uniq | less

Então ser-lhe-ão apresentados nomes de pacotes para instalar. (Podem existir alguns nomes que não de pacotes como "texmf".)

2.7. Dicas para a gestão de pacotes

2.7.1. Como escolher os pacotes Debian

Você pode procurar os pacotes que satisfaçam as suas necessidades com o aptitude a partir da descrição do pacote ou a partir da lista "Tarefas".

Quando encontrar mais de 2 pacotes semelhantes e não sabe qual deles instalar sem o esforço de "teste e erro", você deve utilizar algum senso comum. Eu considero os seguintes pontos como boas indicações dos pacotes preferidos:

  • Essencial: sim > não

  • Componente: main > contrib > non-free

  • Prioridade: required > important > standard > optional > extra

  • Tasks: pacotes listados em tarefas como "Ambiente de Trabalho"

  • Pacotes seleccionados pela dependência de pacote (p.e., python2.4 por python)

  • Popcon: mais alto na votação e número de instalações

  • Changelog: actualizações regulares feitas pelo responsável do pacote

  • BTS: Nenhum bug RC (nenhum crítico, nenhum grave, e nenhum bug sério)

  • BTS: manutenção responsável dos relatórios de bugs

  • BTS: o maior número de bugs corrigidos recentemente

  • BTS: o menor número de bugs "não-lista-de-desejos" remanescentes

Sendo o Debian um projecto voluntário com modelo de desenvolvimento distribuído, o seu arquivo contém muitos pacotes com diferentes objectivos e qualidade. Você tem de tomar as suas próprias decisões sobre o que fazer com eles.

2.7.2. Pacotes de fontes de arquivos misturados

[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 uu o encoraje a utilizar.

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

  • Pacotes não-binários de ("Arquitecture: all") são mais seguro para instalar.

    • pacotes de documentação: sem requisitos especiais

    • pacotes de programa interpretador: tem de estar disponível interpretador compatível

  • Pacotes binários (que não "Architecture: all") geralmente enfrentam muitos obstáculos e são inseguros para instalar.

    • compatibilidade de versão de biblioteca (incluindo a "libc")

    • compatibilidade de versão de programa utilitário relacionada

    • compatibilidade da ABI do Kernel

    • Compatibilidade ABI C++

[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.8, “Sistema virtualizado”) para correr programas de arquivos diferentes.

2.7.3. Moldar a versão candidata

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 o downgrade (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.

Tabela 2.18. Lista de valores notáveis de Pin-Priority para a técnica de apt-pinning.

Pin-Priority efeitos do apt-pinning no pacote
1001 instala o pacote mesmo que isto constitua uma regressão na versão (downgrade) do pacote
990 utilizado como predefinição para o arquivo de lançamento de destino
500 utilizado por predefinição para o arquivo normal
100 utilizado como predefinição para os arquivos NotAutomatic e ButAutomaticUpgrades
100 utilizado para o pacote instalado
1 utilizado como predefinição para o arquivo NotAutomatic
-1 nunca instala o pacote mesmo que este seja recomendado

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://backports.debian.org/debian-backports/ wheezy-backports/main Packages".

2.7.4. Actualizações e Backports

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://backports.debian.org/debian-backports/ 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>

2.7.5. Bloquear pacotes instalados por "Recomendados"

Se desejar não puxar determinados pacotes automaticamente através de "Recommends", tem de criar o ficheiro "/etc/apt/preferences" e listar explicitamente esses pacotes no topo conforme se segue:

Package: <package-1>
Pin: version *
Pin-Priority: -1

Package: <package-2>
Pin: version *
Pin-Priority: -1

2.7.6. Acompanhar testing com alguns pacotes de unstable

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" para o 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.

2.7.7. Acompanhar unstable com alguns pacotes de experimental

Aqui está outro exemplo de técnica de apt-pinning para incluir pacotes de versão de origem mais recentes encontrados em experimental enquanto se segue unstable. Você lista todos os arquivos necessários no ficheiro "/etc/apt/sources.list" conforme o seguinte:

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

O valor Pin-Priority predefinido para o arquivo experimental é sempre 1 (<<100) porque é um arquivo NotAutomatic (veja Secção 2.5.3, “Ficheiros "Release" do nível de arquivo”). Não é necessário definir o valor Pin-Priority explicitamente no ficheiro "/etc/apt/preferences" apenas para usar o arquivo experimental a menos que deseje seguir pacotes particulares nele automaticamente para a próxima actualização.

2.7.8. Descarga e actualização automática de pacotes

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";

2.7.9. Limitar a largura de banda de descarga para o APT

Se desejar limitar a largura de banda para o APT para, por exemplo, 800Kib/sec (=100kiB/sec), deve configurar o APT e o seu parâmetro de configuração conforme o seguinte.

APT::Acquire::http::Dl-Limit "800";

2.7.10. Downgrade de emergência

[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 e reinstalar um sistema novo a partir do nada.

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 dist-upgrade" para forçar o downgrade 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.

2.7.11. Quem fez o upload do pacote?

Apesar do nome do responsável listado em "/var/lib/dpkg/available" e "/usr/share/doc/package_name/changelog" fornecer alguma informação sobre "quem está por detrás a actividade de empacotamento", quem faz o upload real do pacote é um tanto obscuro. O who-uploads(1) no pacote devscripts identifica quem foi o uploader real dos pacotes fonte Debian.

2.7.12. O pacote equivs

Se vai compilar um programa a partir do código-fonte para substituir um pacote Debian, o melhor é torná-lo num pacote local realmente 'debianizado' (*.deb) e utilizar um arquivo privado.

Se escolher compilar um programa de fonte e instalá-lo sob "/usr/local", pode necessitar de utilizar o equivs como último recurso para satisfazer as dependências em falta para o pacote.

Package: equivs
Priority: extra
Section: admin
Description: Engana as dependências de pacotes Debian
 Este é um pacote dummy que pode ser usado para criar pacotes Debian,
 que apenas contêm informação de dependências.

2.7.13. Portar um pacote para o sistema stable

Para actualizações parciais do sistema stable, é desejável reconstruir um pacote dentro do seu ambiente utilizando um pacote de código-fonte. Isto evita actualizações maciças de pacotes devido às suas dependências.

Adicione as seguintes entradas ao "/etc/apt/sources.list" de um sistema stable.

deb-src http://http.us.debian.org/debian unstable  main contrib non-free

Instale os pacotes necessários para a compilação e descarregue o pacote de código-fonte conforme o seguinte:

# apt-get update
# apt-get dist-upgrade
# apt-get install fakeroot devscripts build-essential
$ apt-get build-dep foo
$ apt-get source foo
$ cd foo*

Ajustar os pacotes instalados se necessário.

Execute o seguinte.

$ dch -i

Aumentar a versão do pacote, p.e. um com "+bp1" acrescentado em "debian/changelog"

Compile os pacotes e instale-os para o sistema com o seguinte:

$ debuild
$ cd ..
# debi foo*.changes

2.7.14. Servidor proxy para o APT

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.

Tabela 2.19. Lista de ferramentas proxy especiais para arquivos Debian

pacote popcon tamanho descrição
approx V:2, I:2 3489 servidor proxy de cache para ficheiros de arquivo Debian (programa OCaml compilado)
apt-cacher V:2, I:3 313 Proxy de cache para pacotes Debian e ficheiros de código-fonte (programa Perl)
apt-cacher-ng V:5, I:6 1159 Proxy de cache para distribuição de pacotes de software (programa C++ compilado)
debtorrent V:0, I:1 1185 Proxy Bittorrent para descarregar pacotes Debian (programa Python)

[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.

2.7.15. Pequeno arquivo de pacotes público

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/ …"

2.7.16. Gravar e copiar a configuração do sistema

Você pode criar um cópia local do estado de selecção de pacotes e debconf com o seguinte:

# dpkg --get-selections '*' > selection.dpkg
# debconf-get-selections    > selection.debconf

Aqui, "*" faz com que "selection.dpkg" também inclua entradas de pacotes para "purgar".

Você pode transferir estes 2 ficheiros para outro computador e instalá-los lá com o seguinte.

# dselect update
# debconf-set-selections < minha_selecção.debconf
# dpkg --set-selections  < minha_selecção.dpkg
# apt-get -u dselect-upgrade    # ou dselect install

Se está a pensar em gerir muitos servidores num cluster com praticamente a mesma configuração, você deve considerar utilizar um pacote especializado como o fai para gerir o sistema completo.

2.7.17. Converter e instalar um pacote binário alienígena

O alien(1) permite a conversão de pacotes binários disponibilizados em formatos de ficheiro rpm da Red Hat, slp da Stampede, tgz de Slackware e pkg de Solaris num pacote deb Debian.Se quiser utilizar um pacote de outra distribuição de Linux em vez daquele que tem instalado no seu sistema, pode utilizar o alien para convertê-lo a partir do seu formato de pacote preferido e instala-lo. O alien também suporta pacotes LSB.

[Atenção] Atenção

O alien(1) não deve ser utilizado para substituir pacotes essenciais do sistema, tais como os sysvinit, libc6, libpam-modules, etc. Na prática, o alien(1) deve ser apenas utilizado para pacotes non-free apenas-binários que sejam compatíveis com LSB ou ligados estaticamente. Para softwares livres, você deve utilizar o seu pacote de código-fonte para compilar pacotes Debian reais.

2.7.18. Extrair um pacote sem o dpkg

O conteúdo actual dos pacotes "*.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

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

2.7.19. Mais leituras sobre a gestão de pacotes

Você pode aprender mais sobre a gestão de pacotes a partir das seguintes documentações.