Não deverá ser usado por maintainers de pacotes que desejem compreender como o dpkg irá instalar os seus pacotes. A descrição do que o dpkg faz quando instala ou remove pacotes é particularmente inadequada.
O dpkg pode também ser usado como front-end para dpkg-deb(1) e dpkg-query(1). A lista de acções suportadas pode ser encontrada mais tarde na secção ACÇÕES. Se qualquer tal acção for encontrada, o dpkg apenas corre dpkg-deb ou dpkg-query com os parâmetros dados a ele, mas nenhuma opção especifica é presentemente passada para eles, para se qualquer tal opção, os back-ends precisam de ser chamados directamente.
A instalação consiste nos seguintes passos:
1. Extrai os ficheiros de controle do novo pacote.
2. Se outra versão do mesmo pacote foi instalada antes da nova instalação, executa o script prerm do pacote antigo.
3. Corre o script preinst, se disponibilizado pelo pacote.
4. Desempacota os novos ficheiros, e aos mesmo tempo salvaguarda os ficheiros antigos, para que se algo correr mal, eles possam ser restaurados.
5. Se outra versão do mesmo pacote foi instalada antes da nova instalação, executa o script postrm do pacote antigo. Note que este script é executado depois do script preinst do novo pacote, porque novos ficheiros são escritos ao mesmo tempo que ficheiros antigos são removidos.
6. Configura o pacote. Veja --configure para informação detalhada sobre como isto é feito.
Irá processar os gatilhos para Pre-Depends a menos que --no-triggers esteja especificado.
Para reconfigurar um pacote que já foi instalado, tente usar o comando dpkg-reconfigure(8).
A configuração consiste dos seguintes passos:
1. Desempacota os conffiles, e ao mesmo tempo faz salvaguardas dos conffiles antigos, para que possam ser restaurados se algo correr mal.
2. Corre o script postinst, se fornecido pelo pacote.
Irá processar os gatilhos a menos que --no-triggers esteja especificado.
Remover um pacote consiste nos seguintes passos:
1. Corre o script prerm
2. Remove os ficheiros instalados
3. Corre o script postrm
Irá processar os gatilhos a menos que --no-triggers esteja especificado.
Nota: Alguns ficheiros de configuração podem ser desconhecidos para o dpkg porque eles são criados e manuseados separadamente através dos scripts de configuração. Nesse caso, o dpkg não irá remove-los sozinho, mas o script postrm do pacote (que é chamado pelo dpkg), tem de fazer a sua remoção durante a purga. Claro que, isto só se aplica a ficheiros em directórios do sistema, e não a ficheiros de configuração escritos nos directórios home de utilizadores individuais.
Purgar um pacote consiste nos seguintes passos:
1. Remover o pacote, se não estiver já removido. Veja --remove para informação detalhada acerca de como isto é feito.
2. Correr o script postrm.
Irá processar os gatilhos a menos que --no-triggers esteja especificado.
Presentemente a única verificação funcional executada é uma verificação de md5sum do conteúdo dos ficheiros contra o valor armazenado na base de dados dos ficheiros. Só serão verificados se a base de dados conter o md5sum dos ficheiros. Para verificar por quaisquer metadados em falta na base de dados, pode ser usado o comando --audit.
O formato do resultado é seleccionável com a opção --verify-format, que por predefinição usa o formato rpm, mas isso pode mudar no futuro, e como tal, os programas que analisam resultado de comando devem estar explícitos acerca do formato que esperam.
Um comando único mais simples de obter e actualizar o ficheiro available é dselect update. Note que este ficheiro é maioritariamente inútil se você não usar o dselect mas um frontend baseado no APT: O APT tem o seu próprio sistema para acompanhar os pacotes disponíveis.
O ficheiro available precisa de estar actualizado para que este comando seja útil, caso contrário os pacotes desconhecidos serão ignorados com um aviso. Veja os comandos --update-avail e --merge-avail para mais informação.
Nota: Este comando faz uso de ambos o ficheiro disponível e das selecções do pacote.
Se tal pacote estiver presente, escreve-o como uma entrada no ficheiro Packages, o qual pode ser tratado como apropriado.
Nota: Este comando faz uso de ambos o ficheiro disponível e das selecções do pacote.
Retorna 0 quando um pacote é escrito, 1 quando nenhum pacote apropriado está disponível e 2 em caso de erro.
Quando usado com --robot, o resultado será o número de versão de programa num formato numérico pontuado, sem nenhuma nova linha.
Número Descrição 1 Informação de progresso geralmente útil 2 Invocação e estado dos scripts do maintainer 10 Resultado de cada ficheiro processado 100 Montes de resultados de cada ficheiro processado 20 Resultado para cada ficheiro de configuração 200 Montes de resultados de cada ficheiro de configuração 40 Dependências e conflitos 400 Montes de resultados de dependências/conflitos 10000 Activação de gatilhos e processamento 20000 Montes de resultados relativos a gatilhos 40000 Quantidades tolas de resultados relativos a gatilhos 1000 Lotes de drivel acerca por exemplo do directório dpkg/info 2000 Lotes tolos de drivel
Aviso: Estas opções são maioritariamente destinadas a serem usadas apenas por experts. Usa-las sem total conhecimento dos seus efeitos pode danificar todo o seu sistema.
all: Liga (ou desliga) todas as opções de forçar.
downgrade(*): Instala um pacote, mesmo que já esteja instalada uma versão dele mais recente.
Aviso: Presentemente o dpkg não efetua nenhuma verificação de dependência em downgrades e por isso não irá avisa-lo se o downgrade quebrar a dependência de algum outro pacote. Isto pode ter sérios efeitos secundários, o downgrade de componentes essenciais do sistema pode até inutilizar todo o seu sistema. Use com cuidado.
configure-any: Configura também quaisquer pacotes desempacotados mas não configurados nos quais o pacote actual depende.
hold: Permite instalações, actualizações e remoções automáticas mesmo quando marcado para estar em "hold". Nota: Quando estas acções são requisitadas explicitamente, o estado ``hold'' de selecção de pacote é sempre ignorado.
remove-reinstreq: Remove um pacote, mesmo se estiver quebrado e marcado a requerer reinstalação. Isto pode, por exemplo, causar que partes do pacote fiquem no sistema, que serão depois esquecidos pelo dpkg.
remove-protected: Remove, mesmo se o pacote for considerado protegido (desde dpkg 1.20.1). Os pacotes protegidos contêm maioritariamente a importante infraestrutura de arranque do sistema ou são usados por meta-pacotes personalizados locais-do-sistema. Remove-los pode causar que todo o sistema seja incapaz de arrancar ou perca funcionalidades requeridas para operar, portanto use com muito cuidado.
remove-essential: Remove, mesmo se o pacote for considerado essencial Os pacotes essenciais contêm maioritariamente comandos Unix mais básicos, requeridos par ao sistema de empacotamento, para a operação do sistema em geral ou durante o arranque (apesar do último dever ser alterado para pacotes protegidos em vez disto). Remove-los pode causar que todo o sistema pare de funcionar, por isso use com cuidado.
depends: Torna todos os problemas de dependências em avisos. Isto afecta os campos Pre-Depends and Depends.
depends-version: Não se interessa pelas versões quando verifica as dependências. Isto afecta os campos Pre-Depends and Depends.
breaks: Instala, mesmo que isto danifique outro pacote (desde dpkg 1.14.6). Isto afecta o campo Breaks.
conflicts: Instala, mesmo que fique em conflito com outro pacote. Isto é perigoso, pois geralmente causa a sobreposição de alguns ficheiros. Isto afecta o campo Conflicts.
confmiss: Instala sempre o ficheiro de configuração em falta sem avisar. Isto é perigoso, pois isto significa não preservar uma alteração feita no ficheiro de configuração (removendo-a).
confnew: Se um ficheiro de configuração foi modificado e a versão do pacote mudou, instala sempre a nova versão sem avisar, a menos que seja também especificado --force-confdef, que neste caso é preferida a acção predefinida.
confold: Se um ficheiro de configuração foi modificado e a versão do pacote mudou, mantém sempre a versão antiga sem avisar, a menos que seja também especificado --force-confdef, que neste caso é preferida a acção predefinida.
confdef: Se um conffile foi modificado e a versão no pacote alterou, escolhe sempre a acção predefinida sem perguntar. Se não existir acção predefinida irá parar para pedir ao utilizador a menos que --force-confnew ou --force-confold sejam também fornecidos, nesse caso irá usar isso para decidir a acção final.
confask: Se um conffile foi modificado oferece-se sempre para o substituir pela versão no pacote, mesmo que a versão no pacote não tenha mudado (desde dpkg 1.15.8). Se algum de --force-confnew, --force-confold, ou --force-confdef forem também fornecidos, será usado para decidir a acção final.
overwrite: Sobrescreve um ficheiro de um pacote por um ficheiro de outro.
overwrite-dir: Sobrepõe um directório de um pacote com ficheiros de outro.
overwrite-diverted: Sobrescreve a ficheiro divergido com uma versão não-divergida.
statoverride-add: Sobrescreve uma sobreposição de estatística existente quando a adiciona (desde dpkg 1.19.5).
statoverride-remove: Ignora uma sobreposição de estatística em falta quando a remove (desde dpkg 1.19.5).
security-mac(*): Usa segurança baseada em Mandatory Access Controls (MAC) específica da plataforma quando instala ficheiros no sistema de ficheiros (desde dpkg 1.19.5). Em sistemas Linux a implementação usa SELinux.
unsafe-io: Não executa operações I/O seguras quando desempacota (desde dpkg 1.15.8.6). Actualmente isto implica não executar sincronismos do sistema antes de renomear ficheiros, o que é conhecido por causar uma degradação substancial de performance em alguns sistemas de ficheiros, infelizmente são esses que requerem o I/O seguro em primeiro lugar devido ao seu comportamento não fiável que provoca ficheiros de comprimento-zero em crashes abruptos do sistema.
Nota: Para ext4, o principal ofensor, considere usar a opção de montagem nodelalloc, o que irá corrigir ambos a degradação de performance e os problemas de segurança de dados, o último ao tornar o sistema de ficheiros não produtor de ficheiros de zero-tamanho em crashes abruptos do sistema com qualquer software que não faça sincronismos antes de renomeações atómicas.
Aviso: Usar esta opção pode melhorar a performance a custo de perda de dados, use com cuidado.
script-chrootless: Corre os scripts de maintainer sem fazer chroot(2) em instdir mesmo que o pacote não suporte este modo de operação (desde dpkg 1.18.5).
Aviso: Isto pode destruir o seu sistema, use com extremo cuidado.
architecture: Processa pacotes mesmo da arquitectura errada ou sem nenhuma.
bad-version: Processa pacotes mesmo com versões erradas (desde dpkg 1.16.1).
bad-path: PATH tem em falta programas importantes, portanto é provável haver problemas.
not-root: Tenta (des)instalar coisas mesmo não sendo root.
bad-verify: Instala um pacote mesmo que este falhe no teste de autenticidade.
Certifique-se de fornecer --no-act antes do parâmetro da acção, ou poderá acabar com resultados não desejáveis. (ex. dpkg --purge foo --no-act irá primeiro purgar o pacote ``foo'' e depois tentará purgar o pacote ``--no-act'', mesmo pensando que provavelmente não vai fazer nada).
Desde dpkg 1.21.10, a arquitectura é também tida em conta, o que torna possível cruzar o grau dos pacotes ou instalar instâncias co-instaláveis adicionais com a mesma versão, mas arquitectura diferente.
Nota: Front-ends podem chamar dpkg várias vezes por invocação, o que pode fazer correr os hooks mais vezes do que o esperado.
Aviso: Tenha em conta que ao depender de caminhos excluídos você pode danificar completamente o seu sistema, use com cuidado.
Os padrões glob usam as mesmas wildcards usadas na shell, onde '*' corresponde a qualquer sequência de caracteres, incluindo a string vazia e também '/'. Por exemplo, «/usr/*/READ*» corresponde a «/usr/share/doc/package/README». Como normal, '?' corresponde a qualquer caractere único (mais uma vez, incluindo '/'). E '[' começa uma classe de caractere, o qual pode conter uma lista de caracteres, gamas e complementações. Veja glob(7) para informação detalhada acerca de globbing. Nota: A implementação actual pode re-incluir mais directivas e links simbólicos do que necessário, em particular quando existe uma re-inclusão mais específica. para estar no lado seguro e evitar possíveis falhas de desempacotamento, trabalho futuro poderá corrigir isto.
Isto pode ser usado para remover todos os caminhos excepto alguns particulares; um caso típico é:
--path-exclude=/usr/share/doc/* --path-include=/usr/share/doc/*/copyright
para remover todos os ficheiros de documentação excepto os ficheiros de copyright.
Estas duas opções pode ser especificadas várias vezes, e intercaladas entre elas. Ambas são processadas na ordem fornecida, com a última regra corresponde a um nome de ficheiro a marcar a decisão.
Os filtros são aplicados quando se desempacota os pacotes binários, e como tal apenas têm conhecimento do tipo de objecto actualmente a ser filtrado (ex. um ficheiro normal num directório) e não têm visibilidade dos outros objetos que virão a seguir. Porque estes filtros têm efeitos secundários (em contraste aos filtros find(1)), excluir um nome de caminho exacto que acontece ser um objecto directório como /usr/share/doc não irá ter o resultado desejado, e apenas esse nome de caminho será excluído (que poderá ser automaticamente re-incluído se o código vir a necessidade). Quaisquer ficheiros subsequentes contidos dentro desse directório irão falhar ao desempacotar.
Dica: certifique-se que os globs não são expandidos pela sua shell.
O único formato de saída actualmente suportado é rpm, o qual consiste de uma linha para cada caminho que falhou qualquer verificação. Estas linhas têm o seguinte formato:
missing [c] pathname [(error-message)]
??5?????? [c] pathname
Os primeiros 9 caracteres são usados para reportar o resultado das verificações, seja um missing literal quando o ficheiro não está presente ou os seus meta-dados não puderam ser obtidos, ou um dos seguintes caracteres especiais que reportam o resultado para cada verificação:
A linha é seguida por um espaço e um caractere de atributo. O seguinte caractere de atributo é suportado:
Finalmente seguido por outro espaço e o nome de caminho.
No caso da entrada ser do tipo missing, e o ficheiro não estava realmente presente no sistema de ficheiros, então a linha é seguida por um espaço e a mensagem de erro entre parêntesis.
O único comando actualmente suportado é --version.
Os outros ficheiros listados em baixo estão nos seus directórios predefinidos, veja a opção --admindir para saber como modificar as localizações destes ficheiros.
O ficheiro status é salvaguardado diariamente em /var/backups. Pode ser útil se for perdido ou corrompido devido a problemas com o sistema de ficheiros.
O formato e conteúdo de um pacote binário está descrito em deb(5).
dpkg -l '*vi*'
Para ver as entradas em /var/lib/dpkg/available de dois pacotes:
dpkg --print-avail elvis vim | less
Para procurar você próprio na listagem de pacotes:
less /var/lib/dpkg/available
Para remover um pacote elvis instalado:
dpkg -r elvis
Para instalar um pacote, primeiro você precisa de encontra-lo num arquivo ou CDROM. O ficheiro available mostra que o pacote vim está na secção editors:
cd /media/cdrom/pool/main/v/vim dpkg -i vim_4.5-3.deb
Para fazer uma cópia local do estado de selecção de pacotes:
dpkg --get-selections> myselections
Você poderá transferir este ficheiro para outro computador, e depois de ter actualizado lá o ficheiro available com o seu frontend elegido de gestão de pacotes (veja <https://wiki.debian.org/Teams/Dpkg/FAQ#set-selections> para mais detalhes), por exemplo:
apt-cache dumpavail | dpkg --merge-avail
ou com o dpkg 1.17.6 e anteriores:
avail=$(mktemp) apt-cache dumpavail> "$avail" dpkg --merge-avail "$avail" rm "$avail"
você pode instala-lo com:
dpkg --clear-selections dpkg --set-selections <myselections
Note que isto não irá realmente instalar ou remover nada, mas apenas definir o estado de selecção nos pacotes requeridos. Você irá precisar de alguma outra aplicação para realmente descarregar e instalar os pacotes requeridos. Por exemplo, correr apt-get dselect-upgrade.
Normalmente, você irá descobrir que o dselect(1) fornece um método mais conveniente de modificar os estados de selecção de pacotes.
Se encontrar algum erro na tradução deste documento, por favor comunique para Américo Monteiro <a_monteiro@gmx.com>.