ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Alexey Tourbin <at@altlinux.ru>
To: ALT Linux Team development discussions <devel@lists.altlinux.org>
Subject: Re: [devel] пакеты копировать нельзя
Date: Tue, 17 Feb 2009 10:35:59 +0300
Message-ID: <20090217073559.GP31985@altlinux.org> (raw)
In-Reply-To: <47c0071b0902161252i112a92aeja021bfa391799880@mail.gmail.com>

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

On Mon, Feb 16, 2009 at 11:52:55PM +0300, Dmitriy M. Maslennikov wrote:
> 16 февраля 2009 г. 12:28 пользователь Alexey Tourbin <at@altlinux.ru> написал:
> > ...
> Такие рассуждения выглядят красиво. Но если оторваться от чистой
> математики и вернуться к практике, то, на мой взгляд, все выглядит
> несколько иначе.

Практические следствия модели могут быть ещё не вполне ясны.
Они проявятся при внедрении тестовой пересборки пакетов.

> Мне, как и большинству пользователей важен репозиторий в первую
> очередь РАБОТАЮЩИЙ. То есть с работающими на практике пакетами.

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

Пусть пакет A был собран в родной среде, и потом идёт пакет B.
Тогда идёт тесовая пересборка репозитария с пакетом B, в том числе
пересобирается пакет A.  Если у тестово-пересобранного пакета A
изменились зависимости, то это изменение зависимостей можно однозначно
квалифицировать как влияние пакета B.  Если же пакет A и вовсе перестал
собираться, тогда можно однозначно утверждать, что пакет B ломает
сборку пакета A.

Всё это пропадает, если пакет A был собран где-то ещё.  Тогда ни
изменение зависимостей у пакета A, и ни поломку сборки пакета A
уже нельзя однозначно связать с влиянием пакета B.

> Обеспечить это можно только полноценным тестированием пакетов ДО
> помещения их в основной репозиторий. При этом полной гарантии дать,
> конечно, нельзя, но в целом пакет, прошедший тестирование, гораздо
> более надежен, чем тот, который не проверялся вообще. Все рассуждения
> данные выше направлены не на это свойство, а на гарантию повторяемости
> процесса сборки пакета. С точки зрения удобства ведения репозитория
> это, конечно полезно, но для пользователя репозитория это совсем не
> так важно. Так, для пользователя отлично пересобирающийся, но не
> работающий новый пакет foo-0.1-alt1 гораздо хуже не способного
> пересобраться, но РАБОТАЮЩЕГО пакета foo-0.1-alt1. Еще же интереснее
> гарантировать и пересобираемость, и работоспособность пакетов.

Работоспособность в широком смысле гарантировать нельзя; на то она
и модель, что фиксирует лишь формальные характеристики.  Но эта
модель позволяет очень тонко анализировать взаимное влияние между
пакетами.  В общем, модель не может решить все проблемы, но с её помощью
можно делать некоторые выводы, а также она сама по себе интересна как
инструмент для анализа.

> Когда мы думали над похожей тематикой, мы решили пожертвовать
> сериализацией сборки пакетов (сборка пакета A -> добавление пакета A в
> репозитарий -> сборка пакета B), разрешив  прошедшим сборку пакетам
> временно попадать в тестовый репозиторий.

Это мелкое мошенничество.  Если нет сериализации, то нельзя
зафиксировать взаимное влияние между пакетами.  А если нельзя
зафиксировать взаимное влияние между пакетами, тогда нельзя однозначно
сказать, какой пакет ломает другие пакеты (или вообще "плохо влияет").

Тогда мы возвращаемся к старой модели incoming + еженедельная тестовая
пересборка сизифа.  Всю неделю создается "временный репозитарий", а в
конце недели идёт "тестовая пересборка".  Но по результатам тестовой
пересборки уже нельзя однозначно определить, кто кого сломал.  А модель
с сериализацией позволяет точно определить, кто кого сломал, и, более
того, реализовать pre-condition: не пропускать пакеты, которые что-то
ломают.

> И только после этапа
> тестирования пакеты попадают в основной репозиторий (если не порождают
> unmet'ов и проходят прочие проверки). При этом таких тестовых
> репозиториев можно создавать сколько угодно (для каждой задачи свой
> отдельный репозиторий - box). В каждый можно собирать пакеты,
> основываясь на текущем состоянии репозитория и состоянии самого box'а.
> При этом принятие пакетов из box'а в репозитарий происходит по
> завершению тестирования сериализованно (атомарно).

В терминах girar-builder получается, что box -- это задание (task).
В задании может быть несколько пакетов.  То есть в принципе можно
"варить" некоторый набор изменений сколько угодно (то есть дорабатывать
пакеты, если обнаруживаются ухудшения).  Задание применяется
транзакционно.  В girar-builder будет реализована довольно сложная 
стратегия мёржа, которая должна отвечать за окончательную сериализацию
задания.  Стратегия мёржа "применяет" задание к репозитарию.  В
зависимости от некоторых базовых условий, стратегию мержа можно
реализовать немного по-разному.  В частности, мёрж может подразумевать,
что перед помещением пакетов задания в репозитарий их нужно заново
пересобрать.  Короче, сериализация возможна, хотя это не очень просто.

[И ещё, к счастью, сериализация заданий -- это головная боль отдельно
взятого человека.]

> В нашем случае мы, конечно, теряем "историю репозитория", так как
> повторить процесс сборки в том же виде невозможно (неизвестно в какой
> последовательности собирались пакеты в различные box'ы и какое
> состояние было в этот момент у репозитория), но зато можем обеспечить
> процесс тестирования (как подключение box'а и репозитария
> одновременно, установку пакетов из box'а и непосредственно
> тестирования), что и повлияло на наш выбор.

Мне не очень понятно, что такое "непосредственное тестирование".
То есть это значит ставить пакеты на рабочую машину, запускать программы
и смотреть, работают они или не работают?  Это не технологично, а при
числе пакетов порядка 10^4 это вряд ли возможно.

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

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

Как получить "работающие пакеты"?  Например, у меня f-spot через
некоторое время после запуска, всё время разное, вываливается со
stack trace.  Что можно предпринять по части технологии сборки пакетов,
чтобы f-spot "работал"?  То есть он даже запускается, если вручную
проверять, а потом падает.  В этом смысле говорить про "работающие
пакеты" мне кажется не очень конструктивно.

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

  parent reply	other threads:[~2009-02-17  7:35 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-16  9:28 Alexey Tourbin
2009-02-16 20:52 ` Dmitriy M. Maslennikov
2009-02-17  6:45   ` Evgeny Sinelnikov
2009-02-17  7:35   ` Alexey Tourbin [this message]
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=20090217073559.GP31985@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