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 --]
next prev 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