Eu gostaria de listar todos os pacotes que usam um determinado arquivo. Estou disposto a usar qualquer ferramenta (como dpkg, dlocate, apt-file etc.) Por favor, lembre-se quando eu digo 'use' eu não quero dizer necessariamente só possui / instala o arquivo, eu gostaria de saber qual pacote também referenciá-lo, link contra ele etc.
aqui está o meu caso de uso:
Eu instalei o KVM e o VirtualBox e acabei usando apenas o VirtualBox, já que o VirtualBox e o KVM competem por recursos de algum tipo, felizmente para mim eu não uso o KVM, então eu o desinstalei.
emitindo:
sudo apt-get purge kvm
Mas não foi o suficiente e quando tentei rodar o VirtualBox em uma inicialização subseqüente, recebi o seguinte erro:
Erro: falha ao iniciar a máquina. Mensagem de erro: o VirtualBox não pode operar no modo raiz do VMX. Por favor, desabilite a extensão do kernel KVM, recompile seu kernel e reinicie (VERR_VMX_IN_VMX_ROOT_MODE)
olhando para os módulos carregados revelou que os módulos do kernel kvm ainda estavam carregados
mcradle:~> lsmod | grep -i kvm
kvm_intel 39416 0
kvm 244969 1 kvm_intel
sintonizado em uma pesquisa na web que sugeria limpar o qemu-kvm
sudo apt-get purge qemu-kvm
isso fez o truque, agora a minha pergunta é: como eu poderia ter chegado a essa conclusão sistematicamente sem a web-magic-dust? Em particular, seria bom saber como se pode dizer qual pacote depende de um dado Arquivo ?
Por favor, lembre-se que o dlocate -S não é bom o suficiente porque mostra o pacote do dono do arquivo e eu queria encontrar o pacote que faz com que o 'kvm.ko' seja carregado!
mcradle:/etc# dlocate -S kvm.ko
linux-image-2.6.32-25-generic-pae: /lib/modules/2.6.32-25-generic-pae/kernel/arch/x86/kvm/kvm.ko
if 'apt-rdepends -r' teria aceitado arquivos ao invés de pacotes que poderiam ser exatamente o que eu estou procurando.
Agradecemos antecipadamente e espero que a pergunta seja clara.
fonte
Respostas:
Não existe uma maneira geral de encontrar pacotes que usam um determinado arquivo. Você pode combinar
dpkg -S
oudlocate
para encontrar o pacote que contém um arquivo, comapt-rdepends
para descobrir quais pacotes dependem desse pacote. Mas isso não cobrirá todos os casos e não informará de quais arquivos cada pacote depende (não que isso seja realmente significativo: as dependências se aplicam a pacotes como um todo e, com frequência, não podem ser identificadas em um arquivo específico na embalagem dependente).Um caso que você não conseguirá encontrar através de dependências é a dependência de pacotes essenciais (aqueles para os quais os metadados incluem
Essential: yes
). Todo sistema deve ter a coleção completa de pacotes essenciais, ou se você acredita que todo pacote depende de cada pacote essencial. Caso em questão:kvm.ko
é um módulo do kernel, pertencente ao pacote do kernel, que é essencial.Outro caso que você nem sempre consegue encontrar através de dependências são os plug-ins. Muitos programas carregarão quaisquer plug-ins que encontrarem instalados e serão executados mesmo se o plug-in não estiver presente, portanto, o programa normalmente não declara dependência do plug-in. (O plug-in pode declarar uma dependência em algum tipo de estrutura de plug-in da qual o pacote que fornece o executável principal do programa depende, mas nem sempre é o caso).
kvm
O módulo do kernel é um componente opcional da máquina virtual kvm; você pode correr/usr/bin/kvm
mesmo que okvm
módulo do kernel não está carregado, só vai ser mais lento.Aqui a mensagem do VirtualBox é tão genérica e segura que é enganosa. A mensagem supõe que a extensão KVM está compilada no kernel, mas no seu sistema é realmente um módulo que pode ser descarregado. Simplesmente descarregar o módulo é suficiente para satisfazer o VirtualBox: basta executar
rmmod kvm_amd kvm_intel kvm
. Você também pode manter oqemu-kvm
pacote de carregamento dokvm
módulo editando/etc/init.d/qemu-kvm
ou/etc/init/qemu-kvm.conf
(dependendo se a versão do Ubuntu possui um script SysVinit ou um script Upstart) e comentando a linha de carregamento do módulo, ou impedindo que o serviço seja iniciado no momento da inicialização.fonte
kvm
módulo doqemu
executável em vez de um script de inicialização).Poeira pixie web? Por seus poderes combinados, uma equipe de ferramentas de pacote vai brilhar uma luz ofuscante e fazer a escuridão recuar!
dlocate -S
encontrar o pacote do proprietárioaptitude remove -sy $pkg
para descobrir todos os pacotes dependentes (-syD
adicionar detalhes;aptitude why
para encontrar apenas uma cadeia de dependência).Ou em um passo:
aptitude remove -sy $(dlocate -S /path/to/file |sed 's#:.*##' |uniq )
fonte
-sy
Na verdade, ele está simulando uma desinstalação e informa o que depende do pacote. Ele é executado sem privilégios de root.apt-file deve trabalhar para isso. Eu não testei isso
fonte