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. Bases de arquivos Debian
2.1.5. Dependências de pacote
2.1.6. O fluxo de eventos da gestão de pacotes
2.1.7. Primeira resposta a problemas com a gestão do pacote
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 sob o 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 do pacote para o APT
2.5.6. O estado do 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ção antiga de utilizador
2.6.2. Pacotes diferentes com ficheiros sobrepostos
2.6.3. Corrigir script de pacote danificado
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. Updates 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. Portando 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 para a gestão de pacotes
[Nota] Nota

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

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 usado de modo apropriado, oferece ao utilizador o instalar de conjuntos consistentes de pacotes binários no sistema a partir do arquivo. Actualmente, existem 35634 pacotes disponíveis para a arquitectura amd64.

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

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

pacote popcon tamanho descrição
apt * V:89, I:99 5727 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:24, I:98 11656 Gestor de pacotes baseado em terminal interactivo com aptitude(8)
update-manager-gnome * V:19, I:26 1266 Aplicação do GNOME que gere actualizações de software com o update-manager(8)
tasksel * V:6, I:94 708 ferramenta para seleccionar tarefas para instalação no sistema Debian (frontend para o APT)
unattended-upgrades * V:5, I:40 245 pacote de melhoramento para o APT para activar a instalação automática de actualizações de segurança
dselect * V:1.9, I:18 2309 gestor de pacotes baseado em terminal (o standard anterior, frontend para o APT e outros métodos de acesso antigos)
dpkg * V:94, I:99 5796 sistema de gestão de pacotes para Debian
synaptic * V:14, I:43 6992 gestor de pacotes gráfico (frontend do GNOME para o APT)
apt-utils * V:59, I:99 570 Programas utilitários do APT: apt-extracttemplates(1), apt-ftparchive(1), e apt-sortpkgs(1)
apt-listchanges * V:32, I:51 284 ferramenta de notificação do histórico de alterações do pacote
apt-listbugs * V:1.3, I:1.9 456 lista bugs críticos antes de cada instalação do APT
apt-file * V:2, I:9 120 Utilitário de busca de pacotes do APT - interface de linha de comandos
apt-rdepends * V:0.14, I:0.7 80 lista dependências de pacote recursivamente

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

2.1.1. Configuração de pacotes

Aqui estão alguns pontos chave para 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 de suites aleatórias. Provavelmente vai quebrar a consistência do pacote o que requer conhecimentos profundos de gestão do sistema tal como ABI compilador, versão de biblioteca, funcionalidades do interpretador, etc.

O administrador novato de sistema 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 estão algumas lembranças.

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

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

  • Não crie o "/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 por "dpkg -i <qualquer_pacote>".

  • Nunca instale pacotes aleatórios por "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 de software directamente compilados da fonte.

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

Os efeitos não-compatíveis causados pelas acções em cima ao sistema de gestão de pacotes do Debian 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 só por si.

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 gastar esforços limitados de administração, ex. 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: "wheezy" 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ço um sistema de duplo arranque ao instalar a suite stable do sistema Debian em outra 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 da actualização.

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

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

(Se você não consegue fazer nenhumas destas acções de precaução, If you can not do any one of these precautionary actions, you are probably not ready for the testing and unstable suites.)

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

2.1.4. Bases de 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 acesso HTTP típico, o arquivo está especificado no ficheiro "/etc/apt/sources.list" como o seguinte exemplo para o sistema stable = squeeze actual.

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

deb http://security.debian.org/ squeeze/updates main contrib
deb-src http://security.debian.org/ squeeze/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 em Debian Mirror Checker site.

Aqui, eu uso o nome de código "squeeze" em vez do nome de suite "stable" para evitar surpresas quando a próxima stable é 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 em segurança 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 "squeeze", 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 usados 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 (squeeze) lançamento (squeeze) stable
http://ftp.XX.debian.org/debian/ testing (wheezy) lançamento (wheezy) 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 programador)
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/ squeeze-updates actualizações compatíveis para filtro de spam, clientes IM, etc. para squeeze
http://backports.debian.org/debian-backports/ squeeze-backports pacotes backported mais recentes para squeeze (opcional)

[Cuidado] Cuidado

Apenas o lançamento stable puro 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 use pacotes do squeeze-updates e http://backports.debian.org (veja os serviços Secção 2.7.4, “Updates e Backports”) Estes serviços têm de ser usados com cuidados extra.

[Cuidado] Cuidado

Basicamente você deve lista 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. Múltiplas listagens fazem sentido quando o ficheiro "/etc/apt/preferences" é usado 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 testes do Debian. Por várias razões, esta actividade não é tão rigorosa como a de stable e você pode precisar de esperar pela migração de pacotes unstable corrigidos. Os do arquivo unstable são corrigidos pelo responsável individual. Os pacotes unstable mantidos activamente são geralmente em boa forma por conterem as correcções de segurança mais recentes desde a origem. Veja as FAQ de segurança Debian para como o Debian lida com 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 34925 complacente com DSFG e nenhuma dependência a non-free
contrib 229 complacente com DSFG mas com dependências a non-free
non-free 480 não complacente com DSFG

Aqui o número de pacotes em cima é para a amd64 arquitectura Estritamente falando, apenas a área de arquivo main irá ser considerada como o sistema Debian.

A organização do arquivo Debian pode ser melhor estudada ao apontar o seu explorador a cada URL de arquivo acrescentado com 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

Temporização suite = stable suite = testing suite = unstable
após o lançamento squeeze nome de código = squeeze nome de código = wheezy nome de código = sid
após o lançamento wheezy nome de código = wheezy nome de código = wheezy+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 "section" é usada especialmente para categorização dos pacotes pela área de aplicação. (Apesar da palavra "main section" poder por vezes ser usada para descrever a área do arquivo Debian chamada de "main".)

Cada vez que é feito um novo upload pelo programador de Debian (DD) para o arquivo unstable (via processamento a entrar), é requerido ao DD que assegure que os pacotes enviados sejam compatíveis com 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., existe normalmente um anunciar na lista de mail de desenvolvimento de debian etc.

Antes que um conjunto de pacotes Before 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 eles 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 congelação 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 de pacotes danificados para o arquivo (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 usar 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 de núcleo. 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 definições de arquivo.

2.1.5. 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 versionadas 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.6. 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 uso pelo 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 é diferente da versão instalada.

    4. Desempacota os pacotes binários obtidos

    5. Correr o script preinst

    6. Instala os ficheiros binários

    7. Correr 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. Correr o script preinst

    6. Instala os ficheiros binários

    7. Correr 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. Correr o script prerm

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

    5. Correr 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. Correr o script prerm

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

    5. Correr o script postrm

Aqui, saltei intencionalmente detalhes técnicos para beneficiar a maioria.

2.1.7. Primeira resposta a problemas com a gestão do pacote

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

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

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

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

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ê precisa de 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 a actualização maior ao sistema entre lançamentos, etc.

  • O apt-get oferece um resolvedor de pacotes robusto e estável que usa dados de estado dos pacotes comuns.

  • apt-get is less demanding on hardware resources. It consumes less memory and runs faster.

  • 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 múltiplas versões de pacotes usando o /etc/apt/preferences mas fica bastante pesado.

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

  • O aptitude oferece a interface de utilizador de texto interactiva de écran 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 o inspeccionar os pacotes instalados e procurar pacotes disponíveis.

  • aptitude is more demanding on hardware resources. It consumes more memory and runs slower.

  • O aptitude oferece um resolvedor de pacotes avançado que também usa uns dados de estado de pacotes extra usados 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 múltiplas versões de pacotes sem usar o /etc/apt/preferences e é bastante intuitivo.

[Nota] Nota

Apesar do comando aptitude vir com funcionalidades ricas 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 use 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 usando 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 pacote auto-instalados que já não são 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 do pacote para o APT”) após 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 relativamente com 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 no pedido de comando.

Você pode disponibilizar 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

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

[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 a gestão de pacotes interactiva, você arranca o aptitude em modo interactivo a partir da shell de consola como se segue.

$ sudo aptitude -u
Password:

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

[Dica] Dica

Se você deseja usar a configuração do root em vez da do utilizador, use "sudo -H aptitude …" em vez de "sudo aptitude …" na expressão em cima.

[Dica] Dica

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

2.2.4. Teclas de atalho do aptitude

As combinações de teclas notáveis 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 (mantêm os ficheiros de configuração)
_ marca o pacote para purgar (remover ficheiros de configuração)
= coloca o pacote em retenção
U marca todos os pacotes com actualizações (funciona como full-upgrade)
g começa a descarregar e a instalar os pacotes seleccionados
q sair do écran actual e guardar as alterações
x sair do écran actual e descartar 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 como descrito em baixo. A expressão regular do aptitude pode corresponder explicitamente a um nome de pacote usando uma string começada por "~n e seguida do nome do pacote.

[Dica] Dica

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

2.2.5. Vistas de pacote sob o aptitude

No modo de écran 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 bandeira "estado actual" (a primeira letra)

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

  • A bandeira "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 bandeiras é fornecida ao fundo do ecrã de Ajuda mostrado 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)
Auditoria de Recomendações 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 usar 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 (use 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 usando 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 écran 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 de expressão regular é a mesma ERE que aquela usada nas típicas ferramentas de texto tipo-Unix que usam "^", ".*", "$" 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> é 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 usada 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 pacote 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 uma compreensão significativa rapidamente 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 o 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 a sua informação interactivamente.

2.3.3. Purgar pacotes removidos definitivamente

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

Verifique os resultados do seguinte comando.

# aptitude search '~c'

Se você acha que os pacotes listados estão OK para serem purgados, execute o seguinte comando.

# aptitude purge '~c'

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

Você fornece a expressão regular "~c" na vista "Nova Lista Plana de Pacotes" com o aviso "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 você pressiona "_" 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 jeitosa 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 pacote e actualizar os pacotes.

  3. Escreva "l" para inserir o limite de amostragem 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 amostragem de pacotes como "~prequired|~pimportant|~pstandard|~E" e escreva "m" sobre "Pacotes Instalados" como instalado manualmente.

  5. Escreva "l" para inserir o limite de amostragem de pacotes como "~i!~M" e remover pacotes não usados ao escrever "-" sobre cada um deles após os expo-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 "squeeze" no exemplo "/etc/apt/sources.list" de Secção 2.1.4, “Bases de arquivos Debian” por "wheezy" 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 salvaguarda ao sistema completo (especialmente dados e informação de configuração).

  3. Tenha uma media 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. Aplique "unmarkauto" aos pacotes requeridos, ex., "aptitude unmarkauto vim", para prevenir a remoção.

  7. Minimize os pacotes instalados para reduzir a hipótese de conflitos de pacotes, ex., remova os pacotes de 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 núcleo primeiro, ex., "aptitude install perl".

  12. Corra o comando "apt-get -s dist-upgrade" para aceder ao 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. requereram alguma atenção especial para 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 tem um nível muito alto ou falta-lhe as 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 no arquivo que condizem
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 écran 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 fonte de um pacote binário
apt-get build-dep <nome_do_pacote> instala os pacote necessários para compilar pacote
apt-get source <nome_do_pacote> descarrega uma fonte (do arquivo standard)
dget <URL para ficheiro dsc> descarrega um pacote fonte (de outro arquivo)
dpkg-source -x <nome_do_pacote>_<versão>-<versão_debian>.dsc constrói uma árvore fonte a partir de um conjunto de pacotes 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_de_pacote><versão>-<versão_debian><arquitectura>.deb instala um pacote local no sistema
debi <nome_de_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 baixo nível como "dpkg -i …" e "debi …" deverão ser usadas com cuidado pelo administrador do sistema. Não tomam conta automaticamente da 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 usadas por mestres. Usá-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 requerem serem executados pelo root.

  • A contrário do aptitude que usa regex (veja Secção 1.6.2, “Expressões regulares”), os outros comandos de gestão de pacotes usam 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 "apt-file update" com antecedência.

  • 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 usando o debconf(1) como o seu backend.

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

  • Os dget(1), debuild(1), e debi(1) requerem o pacote devscripts.

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

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

  • Veja Secção 12.11, “Criando um pacote Debian” para empacotamento geral.

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 no ficheiro "/var/lib/dpkg/info/*.md5sums" com debsums(1). Veja Secção 10.4.5, “O sumário MD5” para saber como o MD5sum funciona.

[Nota] Nota

Porque a base de dados MD%sum pode ser adulterada por um intruso, o debsums(1) é de uso limitado como ferramenta de segurança. É 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 para inclinado a ser atingido por 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 se actualiza com o sistema APT.

A instalação do pacote apt-listchanges disponibiliza notícias importantes em "NEWS.Debian" quando se actualiza com o sistema APT.

2.4.4. Procurar nos meta dados do pacote

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

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

O "dpkg -S <padrão_de_nome_de_ficheiro>" pode ser usado para procurar nomes de pacotes que contém ficheiros com o nome correspondente instalados pelo dpkg. Mas isto não vê os ficheiros criados pelo script do responsável do pacote.

Se precisar de fazer uma busca mais elaborada nos meta-dados do dpkg, você precisa de 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 você deseja procurar nas dependências de pacotes recursivamente, deverá usar 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, ex., "http://ftp.us.debian.org/debian/". A sua estrutura de arquivo pode ser explorada por 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 usada 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, ex., "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 usar a "suite", e "nome_de_código" em Secção 2.1.4, “Bases de 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 ela 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 a chave de arquivo Debian secreta.

  • 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 usando valores MD5sum no seu ficheiro "Release" de nível de topo. A integridade de todos os ficheiros de pacotes é verificada usando 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 que o cálculo de valores MD5sum, o uso de valores MD5sum para cada pacote enquanto se usa assinatura criptográfica para o ficheiro "Release" de nível de topo disponibiliza a boa segurança com a performance (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 usados 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", tal 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" como se segue.

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

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

Para alguns arquivos, tais como experimental, e squeeze-backports, que contêm pacotes que não devem ser instalados automaticamente, existe uma linha extra, ex., "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 aptitude, apt-get, synaptic, apt-file, auto-apt…, são usadas, 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, “Bases de 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 fonte. Actualmente, estes pacotes são localizados sob a árvore de directórios "pool/" para a transição melhorada sobre os lançamentos.

As cópias locais dos meta dados "Packages" podem ser pesquisadas interactivamente coma 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 usa localização diferente para a cópia local de "Contents-<arquitectura>.gz" por predefinição.)

2.5.5. O estado do pacote para o APT

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

2.5.6. O estado do pacote para o aptitude

Adicionalmente 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

All the remotely fetched packages via APT mechanism are stored in the "/var/cache/apt/archives" until they are cleaned.

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 fonte (fonte da origem) <nome_de_pacote>_<epoch>:<versão_upstream>-<versão.debian>.orig.tar.gz
O pacote fonte 1.0 (alterações do Debian) <nome_de_pacote>_<epoch>:<versão_upstream>-<versão.debian>.diff.gz
O pacote fonte 3.0 (quilt) (alterações do Debian) <nome_de_pacote>_<epoch>:<versão_upstream>-<versão.debian>.debian.tar.gz
O pacote 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

Você pode verificar a ordem de versão de pacotes pelo dpkg(1), ex., "dpkg --compare-versions 7.0 gt 7.~pre1 ; echo $?" .

[Nota] Nota

O debian-installer (d-i) usa 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 nível mais baixo para a gestão de pacotes Debian. É muito poderosa e tem que ser usada com cuidado.

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

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

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

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

  4. Execute "<nome_de_pacote>.postinst" usando o debconf(1)

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

Tabela 2.17. Os 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 é usado 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 despida 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 usa 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 é 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 quebrada de pacotes.

[Cuidado] Cuidado

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

2.6.1. Incompatibilidade com configuração antiga 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 de configuração locais 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 usando as dependências do pacote. (veja Secção 2.1.5, “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 via scripts do responsável 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 antigo , <pacote_antigo>, e ofensivo.

$ sudo dpkg -P <pacote-antigo>

2.6.3. Corrigir script de pacote danificado

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ça 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 alternativamente fazer downgrade (regredir a versão) ao sistema completo como Secção 2.7.10, “Downgrade de emergência” usando o sistema APT de alto nível.

Se o seu sistema não puder arrancar pelo disco rijo, 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 rijo 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 rijo estiver danificado.

[Dica] Dica

Qualquer sistema GNU/Linux arrancado por outro sistema no disco rijo, Live CD de GNU/Linux, por caneta USB de arranque ou arranque de rede pode ser usado de modo semelhante para recuperar um sistema danificado.

Se a tentativa de instalar um pacote deste modo falha devido a algumas violações de dependências e você precisa realmente de fazer isto como último recurso, você pode sobrepor a dependência usando 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 detalhes.

[Nota] Nota

Quando o seu sistema está 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 o "/var/lib/dpkg/status" ficar corrompido por qualquer razão, o sistema Debian perde os dados de selecção de pacotes e sofre severamente. Procure pelo 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 .

Para danos sérios, 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 são-lhe apresentados nomes de pacotes para instalar. (Podem existir alguns nomes 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 e os esforços de "testar e errar", você deve usar algum senso comum. Eu considero os seguintes pontos como boas indicações dos pacotes preferidos.

  • Essencial: yes > no

  • 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 (ex., python2.4 por python)

  • Popcon: mais alto na votação e numero 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 aos 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 de arquivos misturados não é suportado pela distribuição oficial Debian excepto para combinações de arquivos oficialmente suportadas tais como stable com security updates e squeeze-updates.

Aqui está um exemplo de operações para ocasiões singulares para incluir pacotes específicos de nova versão da origem encontrados em unstable enquanto se acompanha a testing for single occasion.

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

  2. Correr "aptitude update".

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

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

  5. Correr "aptitude update".

Você não tem que criar o ficheiro "/etc/apt/preferences" nem precisa de se preocupar com o apt-pinning com esta solução manual. Mas é muito embaraçosa.

[Cuidado] Cuidado

Quando usa fontes de arquivos misturados, você tem que assegurar por si próprio a compatibilidade dos pacotes pois o 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. O uso de fontes misturadas de arquivos aleatórios é uma operação completamente opcional e o seu uso não é algo que Eu o encoraje a usar.

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

  • Nenhum pacote binário de ("Arquitectura: todos") é mais seguro para instalar.

    • pacotes de documentação: nenhum requisito especial

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

  • Pacotes binários (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 C++ ABI

[Nota] Nota

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

[Nota] Nota

Excepto para evitar pacotes quebrados em períodos curtos, instalar pacotes binários de arquivos não suportados oficialmente é geralmente uma má ideia. Isto é verdadeiro mesmo que use 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 usando a string de versão. Este é o estado normal e a utilização mais recomendada do sistema APT.Todas as combinações de arquivos oficialmente suportadas não requerem o ficheiro "/etc/apt/preferences" porque alguns arquivos que não devem ser usados como a 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 , ex., "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 esta 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

O uso de apt-pinning por um utilizador novato é uma chamada certa a grandes problemas. Você deve evitar usar o apt-pinning excepto quando precisa absolutamente dele.

[Cuidado] Cuidado

Quando usa apt-pinning, você próprio tem que assegurar a compatibilidade dos pacotes pois o Debian não o garante. O apt-pinning é uma operação completamente opcional e o sue uso não é algo que Eu encoraje a usar.

[Cuidado] Cuidado

Os ficheiros Release do nível de arquivo (veja Secção 2.5.3, “Ficheiros "Release" do nível de arquivo”) são usados 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 "Pin: release a=unstable" mas não pode "Pin: release a=sid" no ficheiro "/etc/apt/preferences".

[Cuidado] Cuidado

Quando usar 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 é 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 usa o seu valor predefinido.

Tabela 2.18. Lista de valores Pin-Priority notáveis para 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 usado como predefinição para o arquivo de lançamento de destino
500 usado por predefinição para o arquivo normal
100 usado como predefinição para os arquivos NotAutomatic e ButAutomaticUpgrades
100 usado para o pacote instalado
1 usado como predefinição para o arquivo NotAutomatic
-1 nunca instala o pacote mesmo que este seja recomendado

O arquivo target release 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, ex. "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 múltiplas 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> ex., "Package pin: 0.190".

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

  • O valor Pin-Priority associando ao <pacote> é listado no lado direito de todas as strings de versão, ex., "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/ squeeze-backports/main Packages".

2.7.4. Updates e Backports

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

De modo a usar estes arquivos, você lista todos os arquivos necessários no ficheiro "/etc/apt/sources.list" como se segue.

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

Não há necessidade de definar 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 squeeze-updates.

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

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

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

2.7.5. Bloquear pacotes instalados por "Recomendados"

Se desejar não puxar pacotes particulares automaticamente pelos "Recomendados", tem de criar o ficheiro "/etc/apt/preferences" e listar explicitamente esses pacotes no topo nele como 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. Você lista todos os arquivos necessários no ficheiro "/etc/apt/sources.list" como 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, você invoca o seguinte comando que muda o lançamento alvo em 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 pacotes usando o arquivo unstable mais recente.

[Dica] Dica

Geralmente Eu edito o ficheiro "/etc/apt/sources.list" para comentar a entrada do arquivo "unstable" logo após a operação em cima. 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 usando o arquivo unstable actual.

[Dica] Dica

Se for usado "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 value de 100 não são actualizados pelo arquivo unstable mesmo se a entrada "testing" no ficheiro "/etc/apt/sources.list" seja removida.

Se você deseja acompanhar pacotes particulares em unstable automaticamente sem uma instalação "-t unstable" inicial, você tem de criar o ficheiro "/etc/apt/preferences" e listar explicitamente todos esses pacotes no topo dele como 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" como se segue.

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 é preciso regular 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" como 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 é 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 você está a correr um sistema unstable, não vai querer usar as actualizações automáticas pois com certeza irão danificar o seu sistema um dia. 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 com o seu parâmetro de configuração como 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 por desenho pelo sistema Debian. 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 de limpo.

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/ wheezy main contrib non-free

Regule 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 precisar de remover e instalar manualmente alguns pacotes para conseguir o downgrade do sistema. O kernel Linux, gestor de arranque, udev, PAM, APT, e 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 você vai compilar um programa a partir da fonte para substituir um pacote Debian, o melhor é torná-lo num pacote local realmente 'debianizado' (*.deb) e usar um arquivo privado.

Se você escolher compilar um programa de fonte e instalá-lo sob "/usr/local", você pode precisar de usar o equivs como último recurso para satisfazer as dependências perdidas do 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. Portando um pacote para o sistema stable

Para actualizações parciais do sistema stable, é desejável reconstruir um pacote dentro do seu ambiente usando um pacote 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 fonte como se segue.

# 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

Colisão de versão de pacote, ex. um com "+bp1" acrescentado em "debian/changelog"

Compile pacotes e instale-os para o sistema como o seguinte.

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

2.7.14. Servidor proxy para o APT

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

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

Tabela 2.19. Lista de ferramentas proxy especiais para arquivos Debian

pacote popcon tamanho descrição
approx * V:0.2, I:0.2 3544 servidor proxy de cache para ficheiros de arquivo Debian (programa OCaml compilado)
apt-cacher * V:0.2, I:0.3 283 Proxy de cache para pacotes Debian e ficheiros de fonte (programa Perl)
apt-cacher-ng * V:0.4, I:0.5 1066 Proxy de cache para distribuição de pacotes de software (programa C++ compilado)
debtorrent * V:0.11, I:0.15 1185 Proxy Bittorrent para descarregar pacotes Debian (programa Python)

[Cuidado] Cuidado

Quando o Debian reorganiza a estrutura do seu arquivo, estas ferramentas de proxy especializadas tendem a requerer rescritas de código 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 fáceis de cooperar com tais 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 requeridos: 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

Publica 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" com 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

Você pode automatizar actualizações repetitivas do conteúdo do arquivo APT no seu sistema servidor ao configurar o dupload.

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

Você 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 está localizado no sistema de ficheiros local, então você pode usar antes o "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 usar 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 para Red Hat rpm, Stampede slp, Slackware tgz, e Solaris pkg num pacote Debian deb. Se você quer usar um pacote de outra distribuição de Linux em vez daquele que tem instalado no seu sistema, você pode usar 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 usado para substituir pacotes essenciais do sistema, tal como o sysvinit, libc6, libpam-modules, etc. Praticamente, o alien(1) não deve ser usado para pacotes apenas-binário non-free que são compatíveis com LSB ou ligados estaticamente. Para softwares livres, você deve usar o seu pacote fonte para fazer pacotes Debian reais.

2.7.18. Extrair um pacote sem o dpkg

Os conteúdos dos pacotes "*.deb" actuais podem ser extraídos sem usar o dpkg(1) em qualquer ambiente estilo Unix usando os standard ar(1) e tar(1).

# 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 usando o comando mc.

2.7.19. Mais leituras para a gestão de pacotes

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