UNИX, осень 2009, 09 лекция (от 02 декабря)

Материал из eSyr's wiki.

Перейти к: навигация, поиск

git

git

  • VCS
  • git --- распределённая система версионирования. Это озн. вот что: это озн. не то, что их много, это скорее следствие. Есть хранилище, где разные люди имеют разл. права на доступ и запись. В монолитной системе Обычно каждый рабоатет над своим кусочком, и поэтому то, что все могут писать, никого особо смущает. Тому що когда неск. человек работают над одним файлом, то это хорошо, что они не могут всё залить. В гите же... при этом, чётко отслеживается, какой коммит имеет каких предков, и отслеживается, чтобы при мерже у коммитов был общий корень, по этому поводу существуют разл. алг., они не идеальны, но позв. сильно автоматизировать.
  • Третье, что надо знать ментейнеру альт линукс тим, это что такое ветка и тег. Для собств. удобства можно создавать ветки, где будут хр. неск. версий исх. кода, нарпимер, базовая ведка, которая релизится, экспериментальная, неск. веток для засасывания чужих обновлений, чтобы посм., как они работают. Короче говоря, оперир. веткаим не только в гите есть, но оно позв. орг. процесс разщраб. иментейнерства пакета. Что же касается тегов, то тут ситуация такая: лектор до сих пор не понимает, что это такое, помимо указания на опр. сост. репозитория, при этом она может быть annotated. Что такое тег, придётся запомнить, поск. на этом осн. проц. автоматич. сборка из коммитов.

Для сборки пакетов нужно знать ещё неск. команд гита. В любом случае для теор. знаний этого достаточно.

Есть некий ресурс, где сообщ. может публиковать свои архивы, git.altlinux.org, в простонародии git-alt/ Но как же это может помочь человеку, который пакет собирает? Пакет это src.rpm, а это cpio-архив со спеком и сходниками. Она действ. не совсем явна, поск. прослойкой между ними явл. gear. Долко думали, как это дело назвать, ldv долго думает, как называть нечто, почти так же долго, как не сделать ошибку в программе.

gear это инстр. для упр. git-репоз. с возм. пакетирования. gear это утилита ком. строки. Как примерно оно работает: работает оно просто. созд. git-реп., с котором должен быть каталог .gear, а там файл rules. Другие файлы там тоже могут быть, но этот обязан. Этот файл опис., как можно из этого получать нечто под. назва. pkg.tar

./gear/rules:

tar.gz: имя
copy: *.patch

Итак, gear это инструментарий.

Если есть нечто, что ни разу не превр. в git-репо.

git init
gear-srcimport пакет(ы)

Эта утилита предн. для того, чтобы делать из пакета git-репозиторий и заполн. gear/rules

Как орг. хранилище:

  • ./имя
  • ....patch
  • имя.spec

Это так наз. линейный репозиторий.

Есть как в дебиане --- есть нетронутый, но с потеряными атр. атрбол, как в дебиане. Вы его не трогаете, чтобы у Вас был голый пстримный исх. со всеми ошибками. В отдельном каталоге лежит спек, отдельно лежат патчи, и вообще все те файлы, которые по команде copy копируются. в srpm можно делать неск. tar.gz, и в gear/rules можно опр. неск. каталогов и у каждого из них можно отковырять версию. Это так. наз. линейный реп. Есть другие способы хранения. Есть ещё один способ хранения, когда вы сами всё написали.

Может быть ситуация, когда ваши ресурсы очень загр. тот факт, что нужно делать некие патчи. Можно сделать иначе: держать две ветки репозитория, файловые команды вам покажут только один набор исх., мкжду ними надо переключаться командой git checkout ветка. B njulf gjl[jl nfrjq^ ds lth;bnt fgcnhbv d jlyjq dtnrt? f ds d lheujq/ Особенно, если апстрим держит исх. в чём-то, что может всосать гит. Тогда вы держите апстримные репозитории в одной ветке, и периодические мержите в свою ветку, после чего правите ей, пока не заработает. В рез-те получ. git-хранилище с двумя ветками --- девственно чистой и свою со спеком и испр. файлами. Потом в .gear/rules пишется

diff: ветка1 detrf2

И в спецификации имени тоже надо указать ветку. Вы gear говорите "собирай src.rpm из той ветки, но изг. патч с той веткой, в которой я понаделал изменения". Результат: в src/rpm попадёт апстримный тарбол и один большой патч, который опис., чем отлич. захаканная ветка от того, что скачали с апстрима. Обр. внимание на след. вещь: такой патч обычно большой и трудночитаемый. но мы же говорили, что всё делаем для удобства разраб, а тут большой файл, то есть, такой деградейшн. Но тут исх., с котором работают, явл. не src.rpm, а git-хранилище, где есть все плюшки.

После изм. делается gear-commit -a. Это факт. git commit -a, но с автоматическим форм. ист. коммитов, взятой из чейнджлога спека. То есть, когда длаете gear-commit -a, то автоматически форм. нечто, а в кач. чейнджлога будет авт. исп. чейнджлог, а если забыли изм. версию, то gear-commit не сработает.

В хэшере есть специальная опция --auto-commit, когда он делает отдельную ветку, там всё коммитит, собирает, и убирает. Тут подг. файл к тому, чтобы можно было с помошью гира его собирать.

gear --hasher -- hsh --apt-config=...

Две команды. Собственно, и всё. Есть ещё одна команда:

gear-update тарбол каталог

Это нужно для тех случаев, когда у пакета нет норм. апстрима, а есть тарбол.

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

У второй команды есть более короткий вариант:

gear-hsh --apt-config=...

Последняя тема на сегодня: что делать дальше? Оказывается...

Когда лектор учился на первом-втором курсе, преподавателем по линала...

...оказывается, гит-альт, это не только хр. репозиториев, это инстр. упр. сборкой, правами доступа и многим другим. Итак, новая тема: git.alt

Соотв. программа наз .gearar, но см. в её исх. болшого смысла нет, и лектор попр. дать опр., что это такое.

git.alt это сайт, на который можно зайти по ssh, ест., никаких логинов-паролей, только ключи. При чём это те же ключи, что исп. при заливке пакетов, и т. д.

ssh git.alt help

Получаете некородкий список команд. Что они позв. делать:

  • Просм. содерж. репозитория. Просм. можно как перс. репозитории (people), так архив (история сизифа, archive) и репозиторий с акт. пакетом (gears). Довольно правильная техн. бывает, если вы хотите восп. пакетом, то мержить вы должны со своим трудом, то не пытаться найти у пипла правильное хранилище, а идти в gears. Что при этом гарантировано: что если вы вообще имеете право собир. пакет в сизиф., то у вас с ним будет общий предок и вам разреш. это сделать. Это, собственно, просмотр.
  • Поиск по хранилищу
  • Можно с той стороны склонировать чужой пакет, а потом скопировать себе. Чтобы не перешибать зранилище обратно.
  • Можно создать хранилище удалённо, удалить его. Просмотреть квоту.

Это всё упр. репозиторие.м Теперь про сборку:

  • Можно сказать build, это команда сборочнице собрать пакет. Для того, чтобы спровозировать сборочницу что-то собрать, нужно поместить тег, подпис. ключом, помещается этот тег в хранилище, после чего говорится гит.альту, чтобы он собрал в конкр. реп. из конкр. хранилища, соотв. конкр. тегу. Тем самым провер. все три вещи, которые должны быть: что это вы сказали ссх, что это тот пакет, и провер. то, что вы подписали соотв. место для сборки.
    • git-push<br />gear-createtag<br />git-push --tags
    Тем самым форм. в гитальте тег правильного вида, правильно подписанный, после чего говорите, чтобы он собирал:
    ssh git.alt build `basename $PWD` `git-describe`
    ^ имя пакета ^ имя тега
    По умолчанию сборка идёт в сизиф

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

Это что касается упр. сборкой. Ост. рассказать однк вещь. Упр. сложными сборками и ACL

ACL. Казалось бы, мы имеем дело с гитом, acl на что нужно выдавать, если у каждого свой репо? acl не сборку. Если собир. пакет не явл. насл. акт. пакета в сизифе, то он не соберётся. Соответственно, речь идёт о том,ч то мент. собир. собст. пакет. В то же время, понятие ментейнера дост. расплывчато. Есть понятие пекеджера --- человека, который посл. сбоирал пает. Есть понятие человека, пропис. в src.rpm, но на самом деле карт. немного другая. При каждом пакете есть acl, который опис, кто лидер пакета, то есть человек, кооторый упр. acl; кто имеет право собирать пакет; кто имеет право выполнять специфические сборки пакета. При этом можно даже отдать кому-то лидерство. Лектор не будет писать список команд, они есть на сайте. Есть понятие группы, у группы тоже есть лидер группы, и в групппу можно добавл. дркгих людей, чтобы делать множ. доступ. Для чего они есть — чтобы расп. права на множ. пакетов. Кроме этого, есть everybody --- все могут делать NMU, и nobody --- кто угодно может делать что угодно.

Посл. тема на сегодня: shared сборки. Практ. невозм. собрать один пакет без конфл., из-за жёсткой полиси. Сейчас в сизифе нет анметов. Когда приезж. библ. с новым сонеймом, то она просто не соберётся, и надо присоединить все пакеты, которые на неё зависят, должны присоед. к шаред таску. Сейчас вроде вешается критикал ошибка на все пакеты, которые зависят от. Как это делается: вместо команды build есть более общая команда task, она позв. таким способом сказать: "ljhjufz c,jhjxybwf? gjcnfdm yf c,jhre nfrjq gfrtn? и такой пакет, и рашраь сборочницу". Такой хвост формируется, после чего ментейнер дёргает ручку и говорит run. Можно сказать run и до присоед. всех, но его не пустят, поск. появятся новые анметы.

Практика показ., что лектору никогда не приходилось собирать шаред таски, но участвовать в них приходилось, например, сейчас идёт сборка python 2.6.

У нас осталось 2 занятия, на одном из нах будет шоу, лектор будет собирать пакет, что будет на втором, леткор не знает. Лектор хотел ещ раз перечислить все техн. преимущ., которые предост. ментейнеру в сизифе. Поэтому, если у кого-то радится идея чтобы ешё хотелось бы послушать, то леткор готов до выходных, вкл. выходные, попринимать эти предолжения.

Предп. экзамен через два раза, форма проведения соверш. неочевидно, поэтому лектор ничего про неё не скажет.


UNИX, осень 2009


00 01 02 03 04 05 06 07 08 09 10 11


Календарь

Сентябрь
23 30
Октябрь
07 14 21 28
Ноябрь
11 18 25
Декабрь
02 09 16


Эта статья является конспектом лекции.

Эта статья ещё не вычитана. Пожалуйста, вычитайте её и исправьте ошибки, если они есть.
Личные инструменты
Разделы