[devel] О ранижировании пакетов

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Пт Июн 2 07:07:08 MSD 2006


On Sun, Jan 29, 2006 at 04:46:20PM +0300, Денис Смирнов wrote:
> Таки написал я код для ранжирования пакетов по важности и автоматического
> выявления наиболее требующих внимания участков.
> 
> Проблема в том, что сейчас я подразумеваю одинаковую важность всех пакетов
> изначально, что явно не соответствует действительности.
> 
> Соответственно у меня вопрос -- какие пакеты мы должны считать наиболее
> важными _без учета зависимостей_? То есть, скажем, с этой точки зрения
> glibс не важный пакет -- сам по себе он никому не нужен, а, скажем,
> какой-нибудь bc может быть для кого-то один из самых важных пакетов, так
> как его использует какой-нибудь ОченьВажныйСкрипт.
> 
> Сейчас я могу легко получить список пакетов, требующих внимания, по своему
> списку используемых в работе пакетов.

Я тоже думал над этой задачей.  Что касается сборочных зависимостей, то,
оказывается, существует неожиданное решение: список установленных
пакетов можно извлечь из лога пересборки.  Поскольку логи пересборки
репозитария существуют, остается только сосчитать пакеты, которые встают
в чрут (в логах указаны все пакеты, которые встают в чрут, за вычетом
базовой сборочной среды, т.е. basesystem+rpm-build; последнее
обстоятельство можно рассматривать и как преимущество).

То есть для взвешенного иерархического ранжирования сборочных зависимостей
ничего специально делать не нужно, и наиболее "трудным" моментом в этой задаче
было как раз осознать, что специально ничего делать не нужно.

buildlog_uris()
{
	find "$@" -type f -print0 |xargs -r0 gzip -cdfq |
		awk '/^Preparing packages for installation/,/^Installing .*[.]src[.]rpm$/ {
			if (/^[[:alnum:]][[:graph:]]*[[:alnum:]]-(alt|ipl)[[:graph:]]*$/ && !/[.]rpm$/)
				print }' |sort |uniq -c |awk '{print $1 "\t" $2 }' |sort -n
}

(Название функции buildlog_uris интуитивно не понятно, потому что эта
функция используется в рамках решения другой задачи.)

[at на basalt ~]$ buildlog_uris /raid/beehive/success |tail -33
934     libfreetype-devel-2.2.1-alt2
938     libXaw-1.0.2-alt1
940     libxml2-2.6.23-alt2
940     xml-common-0.6.3-alt11
974     libXp-1.0.0-alt3
985     libXmu-1.0.1-alt1
1013    libXinerama-1.0.1-alt3
1049    libjpeg-6b-alt7
1054    libXcursor-1.1.6-alt1
1056    libXrandr-1.1.1-alt1
1059    libXfixes-4.0-alt2
1071    libX11-devel-1.0.0-alt6
1072    libXau-devel-1.0.1-alt1
1073    libXdmcp-devel-1.0.1-alt1
1075    libXft-2.1.8.2-alt5
1078    libXi-1.0.1-alt1
1086    libXpm-3.5.5-alt1
1092    libXt-1.0.2-alt1
1093    libXrender-0.9.1-alt1
1139    libssl-0.9.7g-alt3
1145    libSM-1.0.1-alt1
1149    xorg-x11-proto-devel-7.1.0-alt1
1150    libICE-1.0.1-alt1
1219    zlib-devel-1.2.3-alt3
1230    libXext-1.0.0-alt4
1335    libpng3-1.2.8-alt3
1349    fontconfig-2.3.2-alt8
1399    libfreetype-2.2.1-alt2
1463    libexpat-2.0.0-alt3.1
1539    libX11-1.0.0-alt6
1541    libXdmcp-1.0.1-alt1
1619    libstdc++4.1-4.1.1-alt1
1660    libXau-1.0.1-alt1
[at на basalt ~]$ 

Соответственно, если какой-либо пакет из этого списка станет
неустанавливаемым (допустим, вследствие анмета), то пересборка сизифа
станет практический невозможной.  Опять же, за вычетом базовой сборочной
среды.  Но в случае с базовой сборочной средой очевидно, что если она
разломана, то собрать вообще ничего не удастся.

Поскольку логи сборки содержат результаты find-requires, то становится
также возможным произвести взвешенное иерархическое ранжирование
реальных (а не сборочных) зависимостей.  Это несколько сложнее, но не
намного (основная проблема состоит в том, чтоб отмаппить виртуальные
пакеты в реальные).  Поскольку я сейчас хочу выпить пива, я не буду до
конца показывать, как это сделать... Ж)  Суть опять же в том, что
специально делать ничего не нужно.

buildlog_deps()
{
	find "$@" -type f -print0 |xargs -r0 gzip -cdfq |
		awk  -F'[:,] +' '/^Processing files:/ { pkg = $NF }
			/^PreReq:|^Requires([(].+[)])?:|^Provides:|^Obsoletes:/ {
				if (pkg) for(i=2;i<=NF;i++) print pkg "\t" $1 "\t" $i }' |sort -u
}
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 191 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20060602/82daeec6/attachment-0001.bin>


Подробная информация о списке рассылки Devel