ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Alexey Tourbin <at@altlinux.ru>
To: devel@lists.altlinux.org
Subject: [devel] пакеты копировать нельзя
Date: Mon, 16 Feb 2009 12:28:55 +0300
Message-ID: <20090216092855.GK31985@altlinux.org> (raw)

[-- Attachment #1: Type: text/plain, Size: 2767 bytes --]

Нельзя копировать собранные пакеты из одного репозитария
в другой (напр. между sisyphus и 5.0).

Сборку пакета можно (и нужно) рассматривать как процесс,
который реализует функцию

B(S,C)->P

где
B - процедура сборки (реализуется хешером),
S - src.rpm пакет с исходным кодом,
С - содержимое сборочной среды.

Это означает, что есть два основных фактора, которые определяют
результат сборки пакетов: исходный код и среда, в которой был собран
пакет.

Распишем подробнее C.  Пусть

U - полный набор пакетов в репозитарии (универсум пакетов).

Тогда среда C для сборки пакета S - это

C = C(S,U) = C0(U) + C1(S,U)

где

C0 - процедура инициализации базового сборочного чрута (и соответствующий
список пакетов в базовом сборочном чруте),
C1 - процедура установки в базовый сборочный чрут дополнительных
зависимостей BuildRequires пакета S (и соответствующий список пакетов,
который является замыканием зависимостей BuildRequires пакета S).

Если один и тот же пакет с исходным кодом S был собран в разных средах
Ca и Cb, то необходимо считать, что результат сборки отличается:

B(S,Ca)->Pa
B(S,Cb)->Pb
Ca!=Cb => Pa!=Pb

Принцип "B(S,C)->P" ложится в основу модели данных репозитария с
условным названием "метерепозитарий".  Метарепозитарий должен точно
описывать историю развития репозитария и изменения всех его
характеристик.  История метарепозитария описывается в терминах
"коммитов".  Коммит описывает прохождение одного нового пакета
в репозитарий, используя набор данных (S,C0,C1,P).  (Если в задание
добавлено несколько пакетов на сборку, а не один пакет, то будет
несколько таких наборов данных; коммит соответствует транзакции,
а задания проводятся транзакционно).  То есть история изменения
репозитария описывается в терминах коммитов, которые фиксируют
характеристики исходного пакета для сборки, характеристики базовой
сборочной среды C0 и дополнительных пакетов C1 из BuildReuires,
и характеристики собранных пакетов.

Целостная история репозитария -- это когда каждый вновь входящий пакет
собирается на свежем, текущем состоянии репозитария.  Тогда собранные
пакеты добавляются/обновляются/замещаются в репозитарии:

Ub = Ua + P.

Если данный пакет был собран на универсуме Ua, то следующий пакет уже
будет собран на другом универсуме - Ub.

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

Вообще, не существует пакетов в отрыве от той среды, в которой они были
собраны, и, значит, в отрыве от истории репозитария.  Нельзя войти в
одну реку дважды.

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

             reply	other threads:[~2009-02-16  9:28 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-16  9:28 Alexey Tourbin [this message]
2009-02-16 20:52 ` Dmitriy M. Maslennikov
2009-02-17  6:45   ` Evgeny Sinelnikov
2009-02-17  7:35   ` Alexey Tourbin
2009-02-17  8:03     ` Evgeny Sinelnikov
2009-02-17  8:40       ` Anton Farygin
2009-02-17  9:01       ` Alexey Tourbin
2009-02-17 10:43         ` Dmitry V. Levin
2009-02-17 23:49         ` Kirill A. Shutemov
2009-02-18 23:32           ` Dmitry V. Levin
2009-02-19  3:26             ` Денис Смирнов
2009-02-19  9:03             ` Kirill A. Shutemov
2009-02-17 11:24     ` Dmitriy M. Maslennikov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090216092855.GK31985@altlinux.org \
    --to=at@altlinux.ru \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

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