[Comm] rpm, apt, kernel-image
Sergey Vlasov
vsu на altlinux.ru
Сб Авг 14 18:55:54 UTC 2010
On Sat, Aug 14, 2010 at 09:16:49PM +0400, Алексей Синицын wrote:
[...]
> 20:49 al на wind ~ $ sudo apt-get remove kernel-image-std-def#2.6.27-alt15
> Reading Package Lists... Done
> Building Dependency Tree... Done
> E: Couldn't find package kernel-image-std-def#2.6.27-alt15
> 20:50 al на wind ~ $
>
> Но apt-shell помог со своим автодополением. названия оказались
> примерно такого вида: kernel-image-std-def#1:2.6.27-alt15 , видимо
> помог бы и синаптик, если бы до него дошло дело.
>
> Удалять сам пакет kernel-image-std-def конечно в голову не приходило,
> потому что ядро по уполчанию видимо всё же необходимо. Если при его
> удалении они исчезнут все, то без ядра будет всё же плохо. Это просто
> мне показалось что шесть это всё же немного лишнего.
>
> Вообще я думал что это виртуальный пакет, но заглянув в него увидел:
>
> 20:53 al на wind ~ $ rpm -ql kernel-image-std-def|wc -l
> 14175
> 20:54 al на wind ~ $
>
> Где файлы для всех ядер. Взяв из него произвольный файл, нашёл что он
> принадлежит сразу двум пакетам:
>
> 20:55 al на wind ~ $ rpm -ql kernel-image-std-def-2.6.27-alt16|grep
> /lib/modules/2.6.27-std-def-alt16/modules.ofmap
> /lib/modules/2.6.27-std-def-alt16/modules.ofmap
> 20:55 al на wind ~ $ rpm -ql kernel-image-std-def|grep
> /lib/modules/2.6.27-std-def-alt16/modules.ofmap
> /lib/modules/2.6.27-std-def-alt16/modules.ofmap
> 20:55 al на wind ~ $ rpm -qf /lib/modules/2.6.27-std-def-alt16/modules.ofmap
> kernel-image-std-def-2.6.27-alt16
> 20:57 al на wind ~ $
На самом деле это один и тот же пакет, просто в командной строке rpm в
данном случае не обязательно указывать точную версию пакета (а в
случае, если в rpm -q не указан номер версии, будут обработаны все
установленные версии пакета).
> Видимо всё же здесь присутствует какое то особенно сильное колдунство.
Можно сказать и так; на самом деле на поведение apt в данном случае
действуют опции, указанные в стандартном /etc/apt/apt.conf:
RPM
{
Allow-Duplicated {
// Old-style kernels.
"^(NVIDIA_)?(kernel|alsa)[0-9]*(-adv|-linus)?($|-up|-smp|-secure|-custom|-enterprise|-BOOT|-tape|-aureal)";
// New-style kernels.
"^kernel-(image|modules)-.*";
};
Для пакетов, имя которых соответствует одному из регулярных выражений,
перечисленных в опции RPM::Allow-Duplicated, apt разрешает
одновременную установку нескольких версий одного и того же пакета.
Однако все внутренности apt написаны в предположении, что каждый пакет
установлен в системе не более чем в одном экземпляре, поэтому для
пакетов из Allow-Duplicated на самом деле каждая версия пакета
представляется для apt в виде отдельного пакета, имя которого
образуется присоединением к собственно имени пакета его номера версии
через '#'; при этом номер версии в некоторых случаях включает epoch
("1:" в приведённом случае). Этот синтаксис отличается от
используемого в rpm (где номера версии и сборки могут присоединяться к
имени пакета через '-'). А настоящее имя пакета в таком случае
становится для apt именем виртуального пакета, предоставляемого всеми
доступными версиями (именно поэтому команда apt-get remove
kernel-image-std-def не вызвала бы удаление ядра - при попытке
удаления виртуального пакета apt-get выдал бы список реальных пакетов,
предоставляющих это имя).
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : отсутствует
Тип : application/pgp-signature
Размер : 198 байтов
Описание: Digital signature
Url : <http://lists.altlinux.org/pipermail/community/attachments/20100814/280c8589/attachment-0001.bin>
Подробная информация о списке рассылки community