У меня есть несколько пакетов, обеспечивающих одинаковую функциональность - и в устройстве "может быть только один" одновременно.
Я читал о «Предоставляет, конфликтует, заменяет» в политике Debian, но я не нашел способа (используя dpkg с командами/переключателями) автоматически заменить уже установленный виртуальный пакет без его предварительного удаления вручную.
Управляющий файл моего пакета указывает следующее для всех рассматриваемых пакетов:
Provides: myown-virtual-package
Conflicts: myown-virtual-package
Replaces: myown-virtual-package
Вот что я делаю. Вроде работает, но мне было интересно, есть ли стандартный способ, использующий только dpkg
# remove any conflicting virtual packages
for i in /tmp/upgrade_software/*.deb
do
# find out what package name and what it provides
provides_line=$(dpkg --info $i | grep "^ Provides: ")
package_line=$(dpkg --info $i | grep "^ Package: ")
virt_package=${provides_line##*: }
this_package=${package_line##*: }
# skip if it is not a virtual package
[ -z "${virt_package}" ] && continue
# remove any package that provides the same
otherpackage_line=$(dpkg-query -W -f='${Provides}: ${Package}\n' \
| grep "${virt_package}:" | grep -v ${this_package})
if [ -n "${otherpackage_line}" ] ; then
otherpackage=${otherpackage_line##*: }
echo " ------ removing ${otherpackage} because of conflict -------"
dpkg --purge ${otherpackage}
echo " -------------"
fi
echo \'$virt_package\' checked for conflicts
done
Заранее спасибо, джей
dpkg
установить локальный пакет, он появляется в локальной базе данных пакетов, иapt
также должен учитывать это. 17.04.2014