Здравствуйте. В процессе обновления ruby в sisyphus_e2k (в 2.5.x-alt сильно усложнились межпакетные зависимости и базовая сборочная система с rpm-build-ruby) наконец надоело писать одноразовые спеки руками по шаблону, сделал для такого скриптик; прилагаю, вдруг ещё кому пригодится. Применил так (запускать стоит в доступном на запись каталоге, куда будут отложены спеки): $ rpmbuild -bs --nodeps --sign --define '_sourcedir %homedir/p10/noarch/RPMS' `renoarch ~/p10/noarch/RPMS/bundle-2.1.4-alt1.noarch.rpm ~/p10/noarch/RPMS/irb-2.7.3-alt1.3.noarch.rpm ~/p10/noarch/RPMS/rdoc-6.1.1-alt3.noarch.rpm ~/p10/noarch/RPMS/ri-6.1.1-alt3.noarch.rpm` Enter pass phrase: Pass phrase is good. Generating signature: 1005 Generating signature using GPG. Wrote: /home/mike/LOCAL-RPM/SRPMS/bundle-2.1.4-alt1.re.src.rpm (w2.lzdio) Generating signature: 1005 Generating signature using GPG. Wrote: /home/mike/LOCAL-RPM/SRPMS/irb-2.7.3-alt1.3.re.src.rpm (w2.lzdio) Generating signature: 1005 Generating signature using GPG. Wrote: /home/mike/LOCAL-RPM/SRPMS/rdoc-6.1.1-alt3.re.src.rpm (w2.lzdio) Generating signature: 1005 Generating signature using GPG. Wrote: /home/mike/LOCAL-RPM/SRPMS/ri-6.1.1-alt3.re.src.rpm (w2.lzdio) Если какие-либо пакеты лежат с правами 444, их придётся скопировать отдельно и сделать chmod 644; в p10/noarch/RPMS таким оказался, например, gem-test-unit-3.3.5-alt1.noarch.rpm (вообще хорошо бы поправить в репозитории и консерватории). Ключик для SUF делать поленился, ограничившись переменной; цель добавки -- иметь простую возможность быстро выделить, какие пакеты подлежат разбутстрапливанию (ls *.re.noarch.rpm). Если у кого есть что готовое для задачи "упорядочить список взаимозависимых пакетов для _добавления_ в репозиторий, буду благодарен за указание; знаю про girar-nmu-sort-transaction, но он PS: может, ещё всяких полезных скриптиков наберётся по портам да сложим в какие alt-ports-utils? :) -- ---- WBR, Michael Shigorin / http://altlinux.org ------ http://opennet.ru / http://anna-news.info
On Sun, Nov 14, 2021 at 12:26:53AM +0300, Michael Shigorin wrote:
> Здравствуйте.
> В процессе обновления ruby в sisyphus_e2k (в 2.5.x-alt сильно
> усложнились межпакетные зависимости и базовая сборочная система
> с rpm-build-ruby) наконец надоело писать одноразовые спеки
> руками по шаблону, сделал для такого скриптик; прилагаю,
> вдруг ещё кому пригодится.
>
> Применил так (запускать стоит в доступном на запись каталоге,
> куда будут отложены спеки):
>
> $ rpmbuild -bs --nodeps --sign --define '_sourcedir %homedir/p10/noarch/RPMS' `renoarch ~/p10/noarch/RPMS/bundle-2.1.4-alt1.noarch.rpm ~/p10/noarch/RPMS/irb-2.7.3-alt1.3.noarch.rpm ~/p10/noarch/RPMS/rdoc-6.1.1-alt3.noarch.rpm ~/p10/noarch/RPMS/ri-6.1.1-alt3.noarch.rpm`
> Enter pass phrase:
> Pass phrase is good.
> Generating signature: 1005
> Generating signature using GPG.
> Wrote: /home/mike/LOCAL-RPM/SRPMS/bundle-2.1.4-alt1.re.src.rpm (w2.lzdio)
> Generating signature: 1005
> Generating signature using GPG.
> Wrote: /home/mike/LOCAL-RPM/SRPMS/irb-2.7.3-alt1.3.re.src.rpm (w2.lzdio)
> Generating signature: 1005
> Generating signature using GPG.
> Wrote: /home/mike/LOCAL-RPM/SRPMS/rdoc-6.1.1-alt3.re.src.rpm (w2.lzdio)
> Generating signature: 1005
> Generating signature using GPG.
> Wrote: /home/mike/LOCAL-RPM/SRPMS/ri-6.1.1-alt3.re.src.rpm (w2.lzdio)
>
> Если какие-либо пакеты лежат с правами 444, их придётся
> скопировать отдельно и сделать chmod 644; в p10/noarch/RPMS
> таким оказался, например, gem-test-unit-3.3.5-alt1.noarch.rpm
> (вообще хорошо бы поправить в репозитории и консерватории).
>
> Ключик для SUF делать поленился, ограничившись переменной;
> цель добавки -- иметь простую возможность быстро выделить,
> какие пакеты подлежат разбутстрапливанию (ls *.re.noarch.rpm).
>
> Если у кого есть что готовое для задачи "упорядочить список
> взаимозависимых пакетов для _добавления_ в репозиторий, буду
> благодарен за указание; знаю про girar-nmu-sort-transaction,
> но он
Если что, совершенно непонятно, какая задача решается.
--
ldv
On 14.11.2021 00:26, Michael Shigorin wrote: > Если у кого есть что готовое для задачи "упорядочить список > взаимозависимых пакетов для_добавления_ в репозиторий, Для копирования из другого репозитория: curl 'https://rdb.altlinux.org/api/package/what_depends_src?packages=ruby&branch=sisyphus&depth=1&dptype=source&finite_package=false&oneandhalf=false'|jq -r . Для имен пакетов: curl 'https://rdb.altlinux.org/api/package/what_depends_src?packages=ruby&branch=sisyphus&depth=1&dptype=source&finite_package=false&oneandhalf=false'|jq -r '.dependencies[].name' Список сортируется по зависимостям, но solver не умеет разрывать циклические зависимости и отсюда иногда вылезают грабли. ПЛюс, как известно, зависимости src.rpm формируются во время сборки и могут устаревать. Иногда более лучший результат получается с depth=2 или dptype=binary Поиграться в удобной форме можно тут: https://rdb.altlinux.org/api/ Этот запрос помог со сборкой вот этого задания: http://git.altlinux.org/tasks/archive/done/_281/288339/ но т.к. там много циклических зависимостей, то пришлось довольно заметно помогать.
On Sun, Nov 14, 2021 at 12:26:53AM +0300, Michael Shigorin wrote: > Здравствуйте. > В процессе обновления ruby в sisyphus_e2k (в 2.5.x-alt сильно > усложнились межпакетные зависимости и базовая сборочная система > с rpm-build-ruby) наконец надоело писать одноразовые спеки > руками по шаблону, сделал для такого скриптик; прилагаю, > вдруг ещё кому пригодится. > > Применил так (запускать стоит в доступном на запись каталоге, > куда будут отложены спеки): > > $ rpmbuild -bs --nodeps --sign --define '_sourcedir %homedir/p10/noarch/RPMS' `renoarch ~/p10/noarch/RPMS/bundle-2.1.4-alt1.noarch.rpm ~/p10/noarch/RPMS/irb-2.7.3-alt1.3.noarch.rpm ~/p10/noarch/RPMS/rdoc-6.1.1-alt3.noarch.rpm ~/p10/noarch/RPMS/ri-6.1.1-alt3.noarch.rpm` > Enter pass phrase: > Pass phrase is good. > Generating signature: 1005 > Generating signature using GPG. > Wrote: /home/mike/LOCAL-RPM/SRPMS/bundle-2.1.4-alt1.re.src.rpm (w2.lzdio) > Generating signature: 1005 > Generating signature using GPG. > Wrote: /home/mike/LOCAL-RPM/SRPMS/irb-2.7.3-alt1.3.re.src.rpm (w2.lzdio) > Generating signature: 1005 > Generating signature using GPG. > Wrote: /home/mike/LOCAL-RPM/SRPMS/rdoc-6.1.1-alt3.re.src.rpm (w2.lzdio) > Generating signature: 1005 > Generating signature using GPG. > Wrote: /home/mike/LOCAL-RPM/SRPMS/ri-6.1.1-alt3.re.src.rpm (w2.lzdio) Интересно, спасибо, надо поглядеть. sisyphus_riscv64 тоже надо как-то переезжать на свежий ruby. Я бы правда начал релиз с нуля (alt3 => alt0.3.re), чтобы после бутсрапа можно было спокойно собрать "нормальный" пакет. [...] > Если у кого есть что готовое для задачи "упорядочить список > взаимозависимых пакетов для _добавления_ в репозиторий, буду > благодарен за указание; знаю про girar-nmu-sort-transaction, > но он У меня есть, но в совершенно диком виде слабо упорядоченных питоновских костылей. Пока не знаю, как это передать кому-нибудь. К тому же, как тут пишет рядом rider@, эту задачу сложно формализовать. Зависимости могут быть неточными (когда написано BR: foo, а на самом деле требуется foo > 2.0), специфичными для платформы и так далее. Циклы надо как-то разрывать опять же. -- wbr, iv m.
On 15.11.2021 14:14, Ivan A. Melnikov wrote:
> К тому же, как тут пишет рядом rider@, эту задачу сложно
> формализовать. Зависимости могут быть неточными (когда
> написано BR: foo, а на самом деле требуется foo > 2.0),
> специфичными для платформы и так далее. Циклы надо как-то
> разрывать опять же.
На самом деле нужно написать solver, который будет разделять бинарные
жёсткие зависимости и сборочные зависимости.
unmet'ы при сборке вылезают из-за бинарых (библиотечных) зависимостей и
именно по ним исходные пакеты надо упорядочивать.
Мы сделали попытку написать такой solver (oneandhalf опция в rdb), но
циклы оно всё равно рвать не умеет.
По идее можно попробовать добавить параметр к запросу, который позволит
порвать циклы вручную. Или опцию, которая будет искать и рвать все
циклические зависимости и сортировать без их учёта).
Последнее мне нравится больше всего, т.к. всё равно приходится с этими
пакетами что-то делать для сборки.
On Mon, Nov 15, 2021 at 03:15:18PM +0300, Anton Farygin wrote:
> On 15.11.2021 14:14, Ivan A. Melnikov wrote:
> > К тому же, как тут пишет рядом rider@, эту задачу сложно
> > формализовать. Зависимости могут быть неточными (когда
> > написано BR: foo, а на самом деле требуется foo > 2.0),
> > специфичными для платформы и так далее. Циклы надо как-то
> > разрывать опять же.
>
> На самом деле нужно написать solver, который будет разделять бинарные
> жёсткие зависимости и сборочные зависимости.
>
> unmet'ы при сборке вылезают из-за бинарых (библиотечных) зависимостей и
> именно по ним исходные пакеты надо упорядочивать.
>
> Мы сделали попытку написать такой solver (oneandhalf опция в rdb), но циклы
> оно всё равно рвать не умеет.
>
> По идее можно попробовать добавить параметр к запросу, который позволит
> порвать циклы вручную. Или опцию, которая будет искать и рвать все
> циклические зависимости и сортировать без их учёта).
>
> Последнее мне нравится больше всего, т.к. всё равно приходится с этими
> пакетами что-то делать для сборки.
У меня тоже сделана подобная штука. Сначала определяется множество
пакетов исходного репозитория (скажем, Sisyphus x86_64), такое, что
их совместная сборка в целевой репозиторий
(скажем, sisyphus_riscv64) не порождает новых
анметов ни по сборочным, ни по бинарным зависимостям, ну и естественно
содержащее нужные пакеты. Потом происходит попытка упорядочить эти
для задачи пакеты по принципу "пакет А собирается
раншье пакета Б, если результаты сборки пакета А попадают в сборочный
chroot пакета Б". Сборочный chroot обсчитывается нагло замыканием
сборочных зависимостей через обход в ширину графа зависимостей
в исходном репозитории, совсем не так, как
это делает apt, но для моих целей примерного сходства достаточно.
Циклы при упорядочивании рвутся где придётся, но записываются
и показываются отдельно от списка пакетов, чтобы можно было
оценить ужас происходящего и что-то с этим сделать.
Есть опции вида "игнорировать зависимость foo от bar" (чтобы
порвать какой-то цикл в конкретном месте) и "игнорировать
все зависимости на foo". Последняя более полезна и спользуется
почти всё время.
Чаще всего это даже работает.
--
wbr,
iv m.
On 15.11.2021 16:21, Ivan A. Melnikov wrote: > On Mon, Nov 15, 2021 at 03:15:18PM +0300, Anton Farygin wrote: >> On 15.11.2021 14:14, Ivan A. Melnikov wrote: >>> К тому же, как тут пишет рядом rider@, эту задачу сложно >>> формализовать. Зависимости могут быть неточными (когда >>> написано BR: foo, а на самом деле требуется foo > 2.0), >>> специфичными для платформы и так далее. Циклы надо как-то >>> разрывать опять же. >> На самом деле нужно написать solver, который будет разделять бинарные >> жёсткие зависимости и сборочные зависимости. >> >> unmet'ы при сборке вылезают из-за бинарых (библиотечных) зависимостей и >> именно по ним исходные пакеты надо упорядочивать. >> >> Мы сделали попытку написать такой solver (oneandhalf опция в rdb), но циклы >> оно всё равно рвать не умеет. >> >> По идее можно попробовать добавить параметр к запросу, который позволит >> порвать циклы вручную. Или опцию, которая будет искать и рвать все >> циклические зависимости и сортировать без их учёта). >> >> Последнее мне нравится больше всего, т.к. всё равно приходится с этими >> пакетами что-то делать для сборки. > У меня тоже сделана подобная штука. Сначала определяется множество > пакетов исходного репозитория (скажем, Sisyphus x86_64), такое, что > их совместная сборка в целевой репозиторий > (скажем, sisyphus_riscv64) не порождает новых > анметов ни по сборочным, ни по бинарным зависимостям, ну и естественно > содержащее нужные пакеты. Потом происходит попытка упорядочить эти > для задачи пакеты по принципу "пакет А собирается > раншье пакета Б, если результаты сборки пакета А попадают в сборочный > chroot пакета Б". Сборочный chroot обсчитывается нагло замыканием > сборочных зависимостей через обход в ширину графа зависимостей > в исходном репозитории, совсем не так, как > это делает apt, но для моих целей примерного сходства достаточно. > > Циклы при упорядочивании рвутся где придётся, но записываются > и показываются отдельно от списка пакетов, чтобы можно было > оценить ужас происходящего и что-то с этим сделать. > > Есть опции вида "игнорировать зависимость foo от bar" (чтобы > порвать какой-то цикл в конкретном месте) и "игнорировать > все зависимости на foo". Последняя более полезна и спользуется > почти всё время. > > Чаще всего это даже работает. А давай сравним вывод ? curl 'https://rdb.altlinux.org/api/package/what_depends_src?packages=ocaml&branch=sisyphus&depth=1&dptype=both&finite_package=false&onea ndhalf=true'|jq -r '.dependencies[].name' Как у тебя получилось отсортировать все пакеты, которые зависят по сборки и runtime от ocaml (включая те, что из него собираются) ?
[-- Attachment #1: Type: text/plain, Size: 2190 bytes --] On Sun, Nov 14, 2021 at 12:26:53AM +0300, Michael Shigorin wrote: > В процессе обновления ruby в sisyphus_e2k (в 2.5.x-alt сильно > усложнились межпакетные зависимости и базовая сборочная система > с rpm-build-ruby) наконец надоело писать одноразовые спеки > руками по шаблону, сделал для такого скриптик; прилагаю, > вдруг ещё кому пригодится. *прилагаю* (спасибо glebfm@) > Применил так (запускать стоит в доступном на запись каталоге, > куда будут отложены спеки): > > $ rpmbuild -bs --nodeps --sign --define '_sourcedir %homedir/p10/noarch/RPMS' `renoarch ~/p10/noarch/RPMS/bundle-2.1.4-alt1.noarch.rpm ~/p10/noarch/RPMS/irb-2.7.3-alt1.3.noarch.rpm ~/p10/noarch/RPMS/rdoc-6.1.1-alt3.noarch.rpm ~/p10/noarch/RPMS/ri-6.1.1-alt3.noarch.rpm` > Enter pass phrase: > Pass phrase is good. > Generating signature: 1005 > Generating signature using GPG. > Wrote: /home/mike/LOCAL-RPM/SRPMS/bundle-2.1.4-alt1.re.src.rpm (w2.lzdio) > Generating signature: 1005 > Generating signature using GPG. > Wrote: /home/mike/LOCAL-RPM/SRPMS/irb-2.7.3-alt1.3.re.src.rpm (w2.lzdio) > Generating signature: 1005 > Generating signature using GPG. > Wrote: /home/mike/LOCAL-RPM/SRPMS/rdoc-6.1.1-alt3.re.src.rpm (w2.lzdio) > Generating signature: 1005 > Generating signature using GPG. > Wrote: /home/mike/LOCAL-RPM/SRPMS/ri-6.1.1-alt3.re.src.rpm (w2.lzdio) > > Если какие-либо пакеты лежат с правами 444, их придётся > скопировать отдельно и сделать chmod 644; в p10/noarch/RPMS > таким оказался, например, gem-test-unit-3.3.5-alt1.noarch.rpm > (вообще хорошо бы поправить в репозитории и консерватории). > > Ключик для SUF делать поленился, ограничившись переменной; > цель добавки -- иметь простую возможность быстро выделить, > какие пакеты подлежат разбутстрапливанию (ls *.re.noarch.rpm). > > Если у кого есть что готовое для задачи "упорядочить список > взаимозависимых пакетов для _добавления_ в репозиторий, буду > благодарен за указание; знаю про girar-nmu-sort-transaction, > но он > > PS: может, ещё всяких полезных скриптиков наберётся по портам > да сложим в какие alt-ports-utils? :) -- ---- WBR, Michael Shigorin / http://altlinux.org ------ http://opennet.ru / http://anna-news.info [-- Attachment #2: renoarch --] [-- Type: text/plain, Size: 1902 bytes --] #!/bin/bash # # turn a noarch package into srpm that "builds" into it again, # but without the actual build process -- effectively to get rid # of the need for BuildRequires during bootstraps; typical use: # $ rpm -bs --nodeps $(renoarch this.noarch.rpm) # (--define '_sourcedir /path/to/noarch/RPMS' might be useful too) # # NB: scripts/triggers not carried over [so far] [ -s "$1" ] || exit 1 # mark those; mandates release bump afterwards (NB: .re > .1) SUF=".re" q() { rpm -qp --qf="$1" "$2"; } mkspec() { rpm -qp "$1" >&/dev/null || exit 2 OUT="$(basename "$1")" OUT="${OUT%.rpm}.spec" export LANG=C.UTF-8 read N V R < <(q '%{name}\t%{version}\t%{release}\n' "$1") read E < <(q '%{epoch}\n' "$1"); E="${E/(none)/}" read S < <(q '%{summary}\n' "$1") read L < <(q '%{license}\n' "$1") #read G < <(q '%{group}\n' "$1") # unused #read D < <(q '%{description}\n' "$1") # unused P="$(rpm --eval '%packager')" P="${P/\%packager/Renoar C.H. <renoarch@localhost>}" { cat << EOF # bootstrap spec generated by $(basename "$0") on $(date +%Y-%m-%d) Name: $N Version: $V Release: $R$SUF EOF [ -z "$E" ] || cat << EOF Epoch: $E EOF cat << EOF Summary: piggyback the needed %name version License: $L Group: Development/Other Source: $(basename "$1") BuildArch: noarch AutoReqProv: no EOF { rpm -qp --requires "$1" | grep -v '^rpmlib' | sed 's,^,Requires: ,' echo rpm -qp --provides "$1" | sed 's,^,Provides: ,' } | sed 's,:[^ ].*$,,' # drop disttag [ -z "$SUF" ] || cat << EOF Provides: $N = ${E:+$E:}$V-$R EOF cat << EOF %description %summary %prep %setup -cT rpm2cpio %SOURCE0 | cpio -id %build # any "corrective" action here %install cp -a . %buildroot %files EOF rpm -qlp "$1" | grep -v "^(" cat << EOF %changelog * $(date '+%a %b %d %Y') $P ${E:+$E:}$V-$R$SUF - bootstrap package EOF } > "$OUT" && echo "$OUT" || rm "$OUT" } # repackage for i in "$@"; do mkspec "$i"; done
On Sun, Nov 14, 2021 at 01:37:39AM +0300, Anton Farygin wrote: > > Если у кого есть что готовое для задачи "упорядочить список > > взаимозависимых пакетов для_добавления_ в репозиторий, > Для копирования из другого репозитория: > curl 'https://rdb.altlinux.org/api/package/what_depends_src?packages=ruby&branch=sisyphus&depth=1&dptype=source&finite_package=false&oneandhalf=false'|jq -r . > Для имен пакетов: > curl 'https://rdb.altlinux.org/api/package/what_depends_src?packages=ruby&branch=sisyphus&depth=1&dptype=source&finite_package=false&oneandhalf=false'|jq -r '.dependencies[].name' Спасибо, будем посмотреть. > Список сортируется по зависимостям, но solver не умеет > разрывать циклические зависимости и отсюда иногда вылезают > грабли. ПЛюс, как известно, зависимости src.rpm формируются > во время сборки и могут устаревать. Иногда более лучший > результат получается с depth=2 или dptype=binary -- ---- WBR, Michael Shigorin / http://altlinux.org ------ http://opennet.ru / http://anna-news.info
[-- Attachment #1: Type: text/plain, Size: 1075 bytes --] On Mon, Nov 15, 2021 at 05:21:09PM +0400, Ivan A. Melnikov wrote: > > По идее можно попробовать добавить параметр к запросу, > > который позволит порвать циклы вручную. Или опцию, > > которая будет искать и рвать все циклические зависимости > > и сортировать без их учёта). Нечто подобное у viy@ сделано в girar-nmu-sort-transaction: http://altlinux.org/girar/girar-nmu#girar-nmu-sort-transaction: http://lists.altlinux.org/pipermail/devel/2014-December/199334.html > У меня тоже сделана подобная штука. Можешь показать или там сильно под себя? > Есть опции вида "игнорировать зависимость foo от bar" (чтобы > порвать какой-то цикл в конкретном месте) и "игнорировать все > зависимости на foo". Последняя более полезна и спользуется > почти всё время. Чаще всего это даже работает. Возможно, когда всё равно %if_with или необязательно, но в первом разе надо ручки взводить ещё, а во втором -- делать затычки вроде приложенной; по крайней мере у меня так обстоит. -- ---- WBR, Michael Shigorin / http://altlinux.org ------ http://opennet.ru / http://anna-news.info [-- Attachment #2: dummy-dlm.spec --] [-- Type: text/plain, Size: 366 bytes --] %define pkg dlm Name: dummy-%pkg Version: 0 Release: alt1 Summary: a dummy package to "provide" %pkg License: public domain Group: Other BuildArch: noarch Provides: %pkg %description %summary %prep %build %files %changelog * Tue May 14 2019 Michael Shigorin <mike@altlinux.org> 0-alt1 - initial release (for corosync upgrade with dlm rebuild and lvm2 dep)
[-- Attachment #1: Type: text/plain, Size: 1518 bytes --] On Sun, Nov 14, 2021 at 12:38:49AM +0300, Dmitry V. Levin wrote: > > В процессе обновления ruby в sisyphus_e2k (в 2.5.x-alt сильно > > усложнились межпакетные зависимости и базовая сборочная система > > с rpm-build-ruby) наконец надоело писать одноразовые спеки > > руками по шаблону, сделал для такого скриптик; прилагаю, > > вдруг ещё кому пригодится. > > > > Применил так (запускать стоит в доступном на запись каталоге, > > куда будут отложены спеки): > > $ rpmbuild -bs --nodeps --sign --define '_sourcedir %homedir/p10/noarch/RPMS' `renoarch ~/p10/noarch/RPMS/bundle-2.1.4-alt1.noarch.rpm ~/p10/noarch/RPMS/irb-2.7.3-alt1.3.noarch.rpm ~/p10/noarch/RPMS/rdoc-6.1.1-alt3.noarch.rpm ~/p10/noarch/RPMS/ri-6.1.1-alt3.noarch.rpm` Это всё-таки морока -- дописал при очередной надобности пару строк, чтоб целевые noarch.rpm в %_sourcedir укладывались, если ещё не. > Если что, совершенно непонятно, какая задача решается. Перекликается с задумками по команде upload. В основном такая задача попадается при бутстрапах: в сизифе наработаны какие-то noarch.rpm, которые, когда ты до них добрался, уже связаны не всегда очевидной цепочкой действий (изменения в спеках, макропакетах, порой транзакционно завязанные друг за дружку); чтобы снизить потери времени при воспроизведении, берём эти noarch.rpm "как есть", но чтобы формально выполнить сборку в girar -- заворачиваем их как Source: в srpm и разворачиваем. -- ---- WBR, Michael Shigorin / http://altlinux.org ------ http://opennet.ru / http://anna-news.info [-- Attachment #2: renoarch --] [-- Type: text/plain, Size: 2027 bytes --] #!/bin/bash # # turn a noarch package into srpm that "builds" into it again, # but without the actual build process -- effectively to get rid # of the need for BuildRequires during bootstraps; typical use: # $ rpm -bs --nodeps $(renoarch this.noarch.rpm) # (--define '_sourcedir /path/to/noarch/RPMS' might be useful too) # # NB: scripts/triggers not carried over [so far] [ -s "$1" ] || exit 1 # mark those; mandates release bump afterwards (NB: .re > .1) SUF=".re" q() { rpm -qp --qf="$1" "$2"; } repackage() { rpm -qp "$1" >&/dev/null || exit 2 OUT="$(basename "$1")" OUT="${OUT%.rpm}.spec" export LANG=C.UTF-8 read N V R < <(q '%{name}\t%{version}\t%{release}\n' "$1") read E < <(q '%{epoch}\n' "$1"); E="${E/(none)/}" read S < <(q '%{summary}\n' "$1") read L < <(q '%{license}\n' "$1") #read G < <(q '%{group}\n' "$1") # unused #read D < <(q '%{description}\n' "$1") # unused P="$(rpm --eval '%packager')" P="${P/\%packager/Renoar C.H. <renoarch@localhost>}" { cat << EOF # bootstrap spec generated by $(basename "$0") on $(date +%Y-%m-%d) Name: $N Version: $V Release: $R$SUF EOF [ -z "$E" ] || cat << EOF Epoch: $E EOF cat << EOF Summary: piggyback the needed %name version License: $L Group: Development/Other Source: $(basename "$1") BuildArch: noarch AutoReqProv: no EOF { rpm -qp --requires "$1" | grep -v '^rpmlib' | sed 's,^,Requires: ,' echo rpm -qp --provides "$1" | sed 's,^,Provides: ,' } | sed 's,:[^ ].*$,,' # drop disttag [ -z "$SUF" ] || cat << EOF Provides: $N = ${E:+$E:}$V-$R EOF cat << EOF %description %summary %prep %setup -cT rpm2cpio %SOURCE0 | cpio -id %build # any "corrective" action here %install cp -a . %buildroot %files EOF rpm -qlp "$1" | grep -v "^(" cat << EOF %changelog * $(date '+%a %b %d %Y') $P ${E:+$E:}$V-$R$SUF - bootstrap package EOF } > "$OUT" && echo "$OUT" || rm "$OUT" SD="$(rpm --define "name $N" --eval '%_sourcedir')" S="$SD/$(basename "$1")" [ -f "$S" ] || install -pDm644 "$1" "$S" } # repackage for i in "$@"; do repackage "$i"; done