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-й типы (довольно схожие, кстати) соответствуют пакетам, разработка которых сконцентрирована у мантейнера. Продолжение следует. Комментарии приветствуются. -- ldv