ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] [RFP]: %altrelease macro
@ 2007-12-16 13:50 Alexander Bokovoy
  2007-12-16 15:07 ` Sergey Bolshakov
  2007-12-16 21:14 ` [devel] [RFP]: %altrelease macro Vitaly Lipatov
  0 siblings, 2 replies; 18+ messages in thread
From: Alexander Bokovoy @ 2007-12-16 13:50 UTC (permalink / raw)
  To: ALT Devel discussion list

Задумал я облегчить сборку пакетов в среде установленного дистрибутива и
для репозитариев updates/backports. У нас есть некоторые требования по
отношению к наименованию релизов (тэг Release) в таких пакетах, вкратце
формулируемые так:

Тэг Release для пакета, собираемого в updates/backports, должен
содержать запись специального вида, облегчающую последующее обновление
пакета из более нового дистрибутива (или Sisyphus).

Это означает, что спек-файл пакета на самом деле претерпевает
определенные изменения (по меньшей мере, тэг Release) и фактически
вынуждает поддерживать две версии пакета даже в том случае, когда
никаких других изменений в пакет не вносится.

Однако можно изменить ситуацию так, чтобы не требовалось модифицировать
тэг Release (а просто пересобирать пакет). Для этого необходимо
предоставлять дополнительную информацию о сборочной среде в ней самой,
чтобы не передавать ее через специальные опции сборочной системы.
Последнее -- важное требование, оно связано с тем, что при использовании
  hasher мы в общем случае не влияем на сборку, особенно при сборке
"роботами".

Мое предложение состоит в том, чтобы в практически единственный пакет,
который у нас гарантированно изменяется при выпуске новой версии
дистрибутива -- altlinux-release добавить несколько дополнительных
файлов, которые и обеспечат решение поставленной задачи. При одном
дополнительном "но", о котором чуть позже.

Представим, что в altlinux-release у нас присутствуют следующие файлы:
$ LANG=C rpm -ql altlinux-release
/etc/altlinux-release
/etc/buildreqs/packages/ignore.d/altlinux-release
/etc/mandrake-release
/etc/redhat-release
/etc/rpm/macros.d/00altlinux-release-macros
/etc/rpm/rpm-grt.conf
/etc/sisyphus-release
/usr/lib/rpm/rpm-generate-release-tag

Три из них -- новые, это /etc/rpm/macros.d/00altlinux-release-macros,
/etc/rpm/rpm-grt.conf и /usr/lib/rpm/rpm-generate-release-tag. Первый --
однострочный макрос для RPM, второй -- файл конфигурации для третьего,
который собственно и генерирует необходимый нам вид тэга Release.

Файл конфигурации rpm-grt.conf содержит всего две значимые строчки:
# Define distribution shortcut name and prefix for release tags
# An empty value of DISTRO_SHORTCUT corresponds to Sysiphus
DISTRO_SHORTCUT=M40
DISTRO_PREFIX=alt

rpm-generate-release-tag использует их для того, чтобы сконструировать
значение тэга Release. Если DISTRO_SHORTCUT пуст (мы имеем дело с
Sisyphus), то результат работы rpm-generate-release-tag --
${DISTRO_PREFIX}${release}, где ${release} -- первый параметр, поданный
на вход программы.

Если DISTRO_SHORTCUT содержит некоторое значение, (M40 в нашем случае),
то мы имеем дело с уже выпущенным дистрибутивом и это означает. что для
этого дистрибутива нам требуется модифицировать Release:
1. Уменьшить желаемое значение ${release} на единицу
2. после ${DISTRO_PREFIX}${release} дописать ${DISTRO_SHORTCUT} через точку
3. Далее (опционально) вписать локальный номер релиза для этой сборки
(второй аргумент команды rpm-generate-release-tag), а если он не указан,
то вписать 0.

В таком случае у нас получится тэг Release со значением, например,
alt2.M40.0 для пакета, который в Sisyphus имеет релиз alt3.

Все это возможно использовать в любом выпущенном дистрибутиве, записав в
  качестве аргумента тэга Release макрос %altrelease с нужным значением
(или двумя, если еще нужен локальный номер релиза, отличный от нуля),
достаточно только обновить во всех таких дистрибутивах пакет
altlinux-release.

Вот пример:
$ head -n6 librfid.spec
name:           librfid
version:        0.1.0
summary:        The librfid is a Free Software RFID library
Release:        %altrelease 2
Group:          System Environment/Libraries
License:        GPLv2

В системе на основе Server 4.0 результат будет следующим:
$ LANG=C rpmbuild -bE librfid.spec | head -n6
name:           librfid
version:        0.1.0
summary:        The librfid is a Free Software RFID library
Release:        alt1.M40.0
Group:          System Environment/Libraries
License:        GPLv2

В Сизифе будет обычный Release: alt2

Нужно ли такое?

Обновленный altlinux-release можно найти у меня в git.alt. Пример сборки
для Server 4.0:
rpmbuild -ba --define 'distro_scut M40' --define 'distro Server' \
	--define 'text_file ALT Linux 4.0 Server (Walnut)' \
	altlinux-release.spec

-- 
/ Alexander Bokovoy
Samba Team                      http://www.samba.org/
ALT Linux Team                  http://www.altlinux.org/
Midgard Project Ry              http://www.midgard-project.org/



^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2008-01-20 18:19 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-12-16 13:50 [devel] [RFP]: %altrelease macro Alexander Bokovoy
2007-12-16 15:07 ` Sergey Bolshakov
2007-12-16 18:40   ` Alexander Bokovoy
2007-12-16 19:22     ` Sergey Vlasov
2007-12-16 19:37       ` Alexander Bokovoy
2007-12-16 20:16         ` Sergey Vlasov
2007-12-16 20:25           ` Alexander Bokovoy
2008-01-20 15:11             ` Michael Shigorin
2008-01-20 15:30               ` Michael Shigorin
2008-01-20 17:05               ` Alexander Bokovoy
2008-01-20 17:12                 ` Dmitry V. Levin
2008-01-20 17:21                   ` Alexander Bokovoy
2008-01-20 17:29                     ` Kirill A. Shutemov
2008-01-20 17:32                       ` Alexander Bokovoy
2008-01-20 18:19                     ` Dmitry V. Levin
2008-01-20 17:12                 ` [devel] gear questions (was: [RFP]: %altrelease macro) Alexey Gladkov
2008-01-20 17:22                   ` [devel] gear questions Alexander Bokovoy
2007-12-16 21:14 ` [devel] [RFP]: %altrelease macro Vitaly Lipatov

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git