2

Я хотел бы перечислить все пакеты, которые используют данный файл. Я готов использовать любой инструмент (например, dpkg, dlocate, apt-file и т.д.). Пожалуйста, не забывайте, когда я говорю «использовать», я не имею в виду, что он обязательно владеет / устанавливает файл, я хотел бы знать, какой пакет также ссылается на него, ссылка на него и т. д.

вот мой вариант использования:

Я установил и KVM, и VirtualBox, и в итоге использовал только VirtualBox, поскольку оказалось, что VirtualBox и KVM конкурируют за какие-то ресурсы, к счастью для меня, я не использую KVM, поэтому я просто удалил его.

выпуская:

sudo apt-get purge kvm

Но этого было недостаточно, и когда я попытался запустить VirtualBox при последующей загрузке, я получил следующую ошибку:

Ошибка: не удалось запустить машину. Сообщение об ошибке: VirtualBox не может работать в корневом режиме VMX. Пожалуйста, отключите расширение ядра KVM, перекомпилируйте ядро и перезагрузите компьютер (VERR_VMX_IN_VMX_ROOT_MODE)

просмотр загруженных модулей показал, что модули ядра kvm все еще загружены

mcradle:~> lsmod | grep -i kvm
kvm_intel              39416  0
kvm                   244969  1 kvm_intel

настроен на веб-поиск, который предложил очистить QEMU-KVM

sudo apt-get purge qemu-kvm

это сработало, теперь мой вопрос: как я мог бы прийти к такому выводу систематически без паутины-волшебной пыли? В частности, было бы неплохо узнать, как определить, какой пакет зависит от данного файла?

Пожалуйста, обратите внимание, что dlocate -S недостаточно хорош, потому что он показывает пакет владельца файла, и я хотел найти пакет, который вызывает загрузку kvm.ko!

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

если бы 'apt-rdepends -r' принял бы файлы вместо пакетов, которые могли бы быть именно тем, что я ищу.

Заранее спасибо и надеюсь вопрос понятен.

3 ответа3

1

Веб-фея пыли? Объединив свои силы, команда пакетных инструментов осветит ослепительный свет и заставит тьму отступить!

  1. используйте dlocate -S чтобы найти пакет владельца
  2. используйте aptitude remove -sy $pkg чтобы найти все зависимые пакеты (-syD чтобы добавить детали; aptitude why нужно найти только одну цепочку зависимостей).

Или за один шаг:

  1. aptitude remove -sy $(dlocate -S /path/to/file |sed 's#:.*##' |uniq )
1

Не существует общего способа найти пакеты, которые используют данный файл. Вы можете комбинировать dpkg -S или dlocate чтобы найти пакет, содержащий файл, с помощью apt-rdepends чтобы определить, какие пакеты зависят от этого пакета. Но это не охватит все случаи, и не скажет вам, от каких файлов зависит каждый пакет (не то, что это действительно имеет смысл: зависимости применяются к пакетам в целом, и часто их нельзя точно определить для конкретного файла в зависимом пакете).

Один случай, который вы не сможете найти через зависимости, это зависимости от основных пакетов (те, для которых в метаданных есть Essential: yes). Каждая система должна иметь полный набор необходимых пакетов, или, если вам нравится, предполагается, что каждый пакет зависит от каждого необходимого пакета. Пример: kvm.ko - это модуль ядра, принадлежащий пакету ядра, что очень важно.

Другой случай, который вы не всегда можете найти через зависимости, это плагины. Многие программы будут загружать любые плагины, которые они установят, и будут работать, даже если плагина там нет, поэтому программа обычно не объявляет зависимость от плагина. (Плагин может объявлять зависимость от некоторой платформы плагинов, от которой зависит пакет, обеспечивающий исполняемый файл основной программы, но это не всегда так.) Пример: модуль ядра kvm является необязательным компонентом виртуальной машины kvm; вы можете запустить /usr/bin/kvm даже если модуль ядра kvm не загружен, он будет работать медленнее.

Здесь сообщение от VirtualBox является настолько общим и безопасным, что вводит в заблуждение. В сообщении предполагается, что расширение KVM скомпилировано в ядро, но в вашей системе это действительно модуль, который можно выгрузить. Достаточно просто выгрузить модуль, чтобы удовлетворить VirtualBox: просто запустите rmmod kvm_amd kvm_intel kvm . Вы также можете сохранить пакет qemu-kvm от загрузки модуля kvm , отредактировав /etc/init.d/qemu-kvm или /etc/init/qemu-kvm.conf (в зависимости от того, имеет ли ваш выпуск Ubuntu сценарий SysVinit или Upstart сценарий) и комментирование строки загрузки модуля, или предотвращение запуска службы во время загрузки.

-1

apt-файл должен работать для этого. Я не проверял это

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .