[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