[devel] Как сделать репозиторий в git

Anton Farygin =?iso-8859-1?q?rider_=CE=C1_altlinux=2Ecom?=
Ср Апр 26 22:46:06 MSD 2006


Dmitry V. Levin wrote:
> On Tue, Apr 25, 2006 at 04:32:13PM +0400, Dmitry V. Levin wrote:
>> On Tue, Apr 25, 2006 at 09:53:28AM +0400, Anton Farygin wrote:
> [...]
>>> Хм. расскажи плз, как это сделать ?
>> Расскажу обязательно, вот закончу тестировать и расскажу.
> 
> Начну понемногу рассказывать, как я это вижу.
> 
> Предпосылка та же, что была при создании hasher'а: я предполагаю, что
> система предназначена не только для того, чтобы мантейнер собирал свои
> пакеты, но и для того, чтобы собирать чужие пакеты "не глядя".
> 
> В этом случае содержимое репозитория следует рассматривать как untrusted
> input.  В такой ситуации нельзя использовать простые методы, эквивалентные
> запуску произвольного кода, извлекаемого из репозитория.  К этим простым
> методам относятся:
> - запускаемые скрипты;
> - включаемые makefile'ы;
> - specfile'ы, обрабатываемые rpmbuild'ом.
> 
> Значит, чтобы собирать пакеты из репозитория, нужно либо иметь просто
> устроенные specfile'ы, либо завести служебный файл, примитивный внутри и
> достаточный для сборки пакета в типичных случаях устройства репозитория.
> 
> Упростить 5.5 тысяч specfile'ов в обозримом будущем нереально, поэтому я
> предлагаю завести служебный файл.  Имя его не столь важно, хотя значение
> по умолчанию должно быть достаточно редким.  Во время тестирования я
> использовал имя ".buildspec".
> 
> Я прикинул, как обычно бывает устроен репозиторий пакета, и насчитал три
> образующих типа, и ещё один смешанный:
> 
> 1. Однородный, развёрнутый:  Дерево файлов пакета находится в репозитории
> в развёрнутом виде, specfile и .buildspec размещены в корневом каталоге
> репозитория.  Пример:
> $ ls -Alog service/
> total 40
> -rw-r--r-- 1    7 Apr 24 17:44 .buildspec
> drwxr-xr-x 8 4096 Apr 25 02:35 .git
> -rw-r--r-- 1  340 Apr 10 21:24 post_service
> -rw-r--r-- 1  352 Apr 10 21:24 preun_service
> drwxr-xr-x 3 4096 Apr 10 21:24 rc.d
> -rwxr-xr-x 1  407 Apr 10 21:26 run-parts
> -rw-r--r-- 1 1186 Apr 10 21:26 service
> -rw-r--r-- 1 6756 Apr 10 21:26 service.spec
> drwxr-xr-x 2 4096 Apr 12 16:11 src
> Для сборки пакета из этого репозитория нужно получить srpm, состоящий из
> service.spec и service-0.5.9.tar[.bz2]  (который содержит всё дерево, включая
> service.spec и .buildspec; разумеется, .git в него не входит)
> 
> 2. Разнородный, развёрнутый:  Дерево файлов пакета находится в репозитории
> в развёрнутом виде в отдельном подкаталоге, а .buildspec (и, возможно,
> specfile) размещён в корневом каталоге репозитория.  Пример:
> $ ls -Alog hasher/
> total 12
> -rw-r--r-- 1   37 Apr 25 03:30 .buildspec
> drwxr-xr-x 8 4096 Apr 25 03:35 .git
> drwxr-xr-x 2 4096 Apr 25 04:52 hasher
> Для сборки пакета из этого репозитория нужно получить srpm, состоящий из
> hasher.spec и hasher-1.0.29.tar[.bz2]
> 
> 3. Однородный, свёрнутый:  Файлы пакета находится в корневом каталоге
> репозитория.  Пример:
> $ ls -Alog strace/
> total 3016
> -rw-r--r-- 1      20 Apr 25 18:37 .buildspec
> drwxr-xr-x 8    4096 Apr 25 18:37 .git
> -rw-r--r-- 1    3569 Jan 17 17:40 strace-4.5.14-alt-keep_status.patch
> -rw-r--r-- 1   25616 Jan 17 18:05 strace-4.5.14-alt-quotactl.patch
> -rw-r--r-- 1    3649 Mar 29 04:56 strace-4.5.14-alt-tcb.patch
> -rw-r--r-- 1     349 Apr 21 22:24 strace-4.5.14-owl-x86_64.patch
> -rw-r--r-- 1 3020800 Jan 17 09:29 strace-4.5.14.tar
> -rw-r--r-- 1   10321 Apr 25 04:03 strace.spec
> Для сборки пакета из этого репозитория нужно получить srpm, состоящий из
> всех вышеперечисленных файлов, за исключением быть может .buildspec (.git
> в рассмотрение не входит).
> 
> 4. Смешанный: комбинация 2-го и 3-го типов, одна часть файлов пакета
> находится в корневом каталоге репозитория, другая часть развёрнута в
> подкаталогах.
> 
> Очевидно, 3-й тип наиболее характерен для пакетов в Сизифе.
> 1-й и 2-й типы (довольно схожие, кстати) соответствуют пакетам,
> разработка которых сконцентрирована у мантейнера.
> 
> Продолжение следует.  Комментарии приветствуются.
> 


Интересно было бы взглянуть на:
1) формат buildspec
2) типовой набор команд для того, что бы с этим работать

- если я правильно понял, то предполагается каждый пакет держать в 
отдельном GIT репозитарии. Вопрос собственно простой: каким образом 1) 
скачать все пакеты
2) добавлять пакеты в центральный репозитарий
3) удалять пакеты из центрального репозитария
4) обновлять весь центральный репозитарий (можно конечно сделать for i 
in *;do... done, то на мой взгляд в этом случае мы не отследим 
добавление/удаление пакетов.

Rgds,
Rider



Подробная информация о списке рассылки Devel