Packaging Automation/MassProcessing/MassImportAndSupport

Материал из ALT Linux Wiki

< Packaging Automation/MassProcessing(Различия между версиями)
Перейти к: навигация, поиск
(trinity)
(Второй запуск)
 
(44 промежуточные версии не показаны)
Строка 13: Строка 13:
==== trinity ====
==== trinity ====
-
===== описание проекта trinity ======
+
===== описание проекта trinity =====
-
Руслан Хихин планирует собрирать в Сизиф TDE.
+
Допустим, мы хотим собрать в Сизиф TDE.
Есть готовый набор rpm trinity-r14, которые можно скачать с сайта проекта.
Есть готовый набор rpm trinity-r14, которые можно скачать с сайта проекта.
Эти rpm с помoщью %if-ов рассчитаны на поддержку одновременно и fedora, и SuSE.
Эти rpm с помoщью %if-ов рассчитаны на поддержку одновременно и fedora, и SuSE.
Строка 29: Строка 29:
Установим ее и нужную ей базу distromap:
Установим ее и нужную ей базу distromap:
  apt-get install /usr/bin/fcmass distromap-fedora-rawhide-altlinux-sisyphus
  apt-get install /usr/bin/fcmass distromap-fedora-rawhide-altlinux-sisyphus
-
Также обновим базу DistroDB Сизифа:
+
Также обновим базу DistroDB Сизифа: запустим программу
  distrodb-update-repocop-db-altlinux-sisyphus  
  distrodb-update-repocop-db-altlinux-sisyphus  
Строка 38: Строка 38:
  cd trinity-package-builder.git
  cd trinity-package-builder.git
  git init-db
  git init-db
 +
Скопируем себе заготовку {{path|hooks/template.pl}} из {{path|git.altlinux.org/people/viy/packages/fcimport.git}}
 +
 +
В git храним только то, что персонально добавили в папку руками.
 +
Выхлопы fcimport, такие, как готовые пакеты в OUT, временные папки вида
 +
{{path|%{NAME}-%{VERSION}-%{R$ELEASE}.$PID}}, логи и т.д. в git не храним.
 +
Готовый репозиторий можно посмотреть
 +
[http://git.altlinux.org/people/ruslandh/packages/trinity-package-builder.git здесь.]
 +
Утилите fcmass при запуске нужно указать исходный репозиторий (origin), конечный репозиторий (destination),
Утилите fcmass при запуске нужно указать исходный репозиторий (origin), конечный репозиторий (destination),
и список имен сопровождаемых пакетов.
и список имен сопровождаемых пакетов.
Строка 51: Строка 59:
так как им же будем и проверять набор пакетов на обновления.
так как им же будем и проверять набор пакетов на обновления.
  mkdir bin
  mkdir bin
-
  vim bin/update_triity.sh
+
  vim bin/update_trinity.sh
-
Где скрипт bin/update_triity.sh имеет вид
+
Где скрипт bin/update_trinity.sh имеет вид
  mkdir -p TRINITY/trinity/rpm/f23/trinity-r14/
  mkdir -p TRINITY/trinity/rpm/f23/trinity-r14/
  rsync -avp --delete-after rsync://mirror.ntmm.org/trinity/trinity/rpm/f23/trinity-r14/SRPMS TRINITY/trinity/rpm/f23/trinity-r14/
  rsync -avp --delete-after rsync://mirror.ntmm.org/trinity/trinity/rpm/f23/trinity-r14/SRPMS TRINITY/trinity/rpm/f23/trinity-r14/
Строка 61: Строка 69:
  rpmquery --qf '%{NAME}\n' -p TRINITY/trinity/rpm/f23/trinity-r14/SRPMS/*src.rpm > trinity.txt
  rpmquery --qf '%{NAME}\n' -p TRINITY/trinity/rpm/f23/trinity-r14/SRPMS/*src.rpm > trinity.txt
-
===== проверка изначального списка ======
+
===== проверка изначального списка =====
-
fcmass --str a -v fileshareset hk_classes pan torsocks wv2
+
Пакеты, которые входят в апстримный набор, нужно проверить -- нет ли их в Сизифе.
-
ERROR: origin file for fileshareset not found.
+
В особенности подозрительны пакеты без префикса trinity-*: это {{prg|fileshareset hk_classes pan torsocks wv2}}.
-
ERROR: origin file for hk_classes not found.
+
 
-
  info: origin: /var/ftp/pub/Linux/fedora/linux/development/rawhide/Everything/source/tree/Packages/p/pan-0.140-1.fc25.src.rpm
+
Проверка показала, что fileshareset нет, hk_classes сейчас нет, но в 5.1 был
-
info: parent: /var/ftp/pub/Linux/ALT/fcimport/Sisyphus/files/SRPMS/pan-0.140-alt1_1.src.rpm
+
  /var/ftp/pub/Linux/ALT/5.1/branch/files/SRPMS/hk_classes-0.8.3-alt3.src.rpm
-
  INFO: SourceAnalyzer: nothing in pkg-config provides webkitgtk-1.0.
+
поэтому первый раз до отправки в Сизиф hk_classes надо будет обработать отдельно.
-
SourceAnalyzer: some deps weren't found. Is DistroMap database outdated?
+
Например, сгенерировать с опцией --release alt3_1, чтобы пакет был старше, чем alt3.  
-
Записан: ./OUT/pan-0.140-alt2_1.src.rpm
+
Еще лучше вместо этого скачать из 5.1 hk_classes-0.8.3-alt3.src.rpm,
-
---*---
+
и особо запустить mytrinitymass персонально для hk_classes
-
  info: origin: /var/ftp/pub/Linux/fedora/linux/development/rawhide/Everything/source/tree/Packages/t/torsocks-2.1.0-3.fc24.src.rpm
+
с опцией --parent:
-
info: parent: /var/ftp/pub/Linux/ALT/Sisyphus/files/SRPMS/torsocks-2.2.0-alt1.gite389c999.src.rpm
+
  ./mytrinitymass hk_classes --parent ./hk_classes-0.8.3-alt3.src.rpm
-
note: downgrade detected; increasing serial to 1
+
 
-
Записан: ./OUT/torsocks-2.1.0-alt1_3.src.rpm
+
Если же вдруг под рукой есть зеркало 5.1 srpms, то вышеперечисленных танцев с
 +
бубном для hk_classes совершать не нужно. Достаточно добавить путь к 5.1
 +
в конец --dest-path, и fcmass сделает все, что надо, автоматически.
 +
 
 +
pan найден в autoimports, я его переложил в Сизиф, так как он более свежий (1.140),
 +
 
 +
torsocks и wv2 найдены в Сизифе.
  /var/ftp/pub/Linux/ALT/Sisyphus/files/SRPMS/wv2-0.4.2-alt3.src.rpm
  /var/ftp/pub/Linux/ALT/Sisyphus/files/SRPMS/wv2-0.4.2-alt3.src.rpm
 +
/var/ftp/pub/Linux/ALT/Sisyphus/files/SRPMS/torsocks-2.2.0-alt1.gite389c999.src.rpm
 +
Следовательно, список trinity.txt надо отредактировать, удалив
 +
pan torsocks wv2.
-
/var/ftp/pub/Linux/ALT/5.1/branch/files/SRPMS/hk_classes-0.8.3-alt3.src.rpm
+
===== Первый запуск =====
 +
Сделаем обертку над fcmass, скрипт {{cmd|mytrinitymass}}, где укажем origin и dest репозитории
 +
 +
<source lang="bash">
 +
#!/bin/sh
 +
fcmass \
 +
  --origin TRINITY/trinity/rpm/f23/trinity-r14/SRPMS \
 +
  --dest ~/hasher/repo/SRPMS.hasher:./ALT/Sisyhus/files/SRPMS:./ALT/5.1/files/SRPMS "$@"
 +
</source>
-
  fcmass --origin TRINITY/trinity/rpm/f23/trinity-r14/SRPMS `cat trinity.txt`
+
первый запуск:
 +
  ./mytrinitymass `cat trinity.txt` 2>&1 | tee import.log
 +
увидим много ругани вида
 +
WARNING: setting new version: can't find Source0:      %{name}-%{tde_version}%{?preversion:~%{preversion}}.tar.gz. Pray for the best! at /usr/share/perl5/RPM/Source/Transformation/Factory/RaiseRelease.pm line 569.
 +
ошибка: Файл /mnt/home/archive/gitrepo/fcimport.git/trinity-abakus-0.91-14.0.3_1.fc23.2861/SOURCES/trinity-abakus-14.0.0.tar.gz: Нет такого файла или каталога
 +
Writing src.rpm failed. May be some important rpm macros packages are missing. Writing hasher tar.
-
  fcmass --origin TRINITY/trinity/rpm/f23/trinity-r14/SRPMS --hook set_trinity_version.pl --macrodef tde_version=14.0.3 `cat trinity.txt` 2>&1 | tee import.log
+
При этом в рабочей директории появилась куча подкаталогов:
 +
  drwxr-xr-x    -    fileshareset-2.0-1.fc23.14567
 +
drwxr-xr-x    -    trinity-abakus-0.91-14.0.3_1.fc23.14567
 +
drwxr-xr-x    -    trinity-akode-2.0.2-14.0.3_1.fc23.14567
 +
drwxr-xr-x    -    trinity-amarok-1.4.10-14.0.3_1.fc23.14567
 +
drwxr-xr-x    -    trinity-arts-1.5.10-14.0.3_1.fc23.14567
 +
drwxr-xr-x    -    trinity-avahi-tqt-0.6.30-14.0.3_1.fc23.14567
 +
drwxr-xr-x    -    trinity-basket-1.0.3.1-14.0.3_1.fc23.14567
 +
drwxr-xr-x    -    trinity-bibletime-1.6.6.0-14.0.3_1.fc23.14567
 +
drwxr-xr-x    -    trinity-dbus-1-tqt-0.9-14.0.3_1.fc23.14567
 +
drwxr-xr-x    -    trinity-dbus-tqt-0.63-14.0.3_1.fc23.14567
 +
drwxr-xr-x    -    trinity-digikam-0.9.6-14.0.3_1.fc23.14567
 +
drwxr-xr-x    -    trinity-dolphin-0.9.2-14.0.3_1.fc23.14567
 +
drwxr-xr-x    -    trinity-filelight-1.0-14.0.3_1.fc23.14567
 +
drwxr-xr-x    -    trinity-gtk-qt-engine-0.8-14.0.3_1.fc23.14567
 +
drwxr-xr-x    -    trinity-gtk3-tqt-engine-0.5-14.0.3_1.fc23.14567
 +
drwxr-xr-x    -    trinity-gwenview-1.4.2-14.0.3_1.fc23.14567
 +
drwxr-xr-x    -    trinity-gwenview-i18n-1.4.2-14.0.3_1.fc23.14567
 +
drwxr-xr-x    -    trinity-icons-kfaenza-0.8.9-1.fc23.14567
 +
[...]
 +
Это для fcimport аналог crush dump.
 +
При работе библиотека преобразования создает временный каталог
 +
вида {{path|%{NAME}-%{VERSION}-%{R$ELEASE}.$PID}},
 +
куда распаковывает исходный srpm (в подпапки SOURCES и SPEC)
 +
и пишет новый спек (в подпапку NEW).
 +
Если rpmbuild -bs завершился неудачей,
 +
то пишется hasher tar (возможно, для rpmbuild -bs просто не хватило установленных макросов в хост системе), а распакованный srpm не удаляется, чтобы можно было внутри посмотреть, почему rpmbuild -bs не отработал.
 +
После того, как просмотрели и разобрались, все, что в листинге -- мусор, можно удалить
 +
rm -r *-*-*.{fc,mga}*.*
 +
Станем разбираться.
 +
Оказывается, эти src.rpm не полноценные (не самдостаточные). В них используется макрос tde_version, который извне был определен в значение {{term|14.0.3}}, а внутри, если не определен, определяется как {{term|14.0.0}}:
 +
%if "%{?tde_version}" == ""                                                   
 +
%define tde_version 14.0.0                                                   
 +
%endif
 +
Исключение {{pkg|trinity-kooldock}}, у которого умолчание {{term|14.0.1}}.
 +
 +
Соответственно, библиотека SourceAnalyser по записи Source0: %{name}-%{tde_version}.tar.gz
 +
ищет файл trinity-abakus-14.0.0.tar.gz, не находит его (есть trinity-abakus-14.0.3.tar.gz)
 +
и ругается.
 +
Аналогично, rpmbuild не может найти файл SOURCES/trinity-abakus-14.0.0.tar.gz
 +
и не может упаковать src.rpm.
 +
 +
Опцией --macrodef tde_version=14.0.3 можно помочь библиотеке SourceAnalyser
 +
найти правильный файл, но эта опция не редактирует спек файл и не поможет на следующем этапе,
 +
когда будет вызван rpmbuild -bs для записи src.rpm. Для исправления спек файла надо писать скрипт
 +
на [[Packaging_Automation/Embedded_Language|встроенном языке]].
 +
 +
Исправим версию на правильную. Для этого создадим скрипт, который подредактирует определение:
  cp hooks/template.pl set_trinity_version.pl
  cp hooks/template.pl set_trinity_version.pl
 +
vim set_trinity_version.pl
 +
<source lang="perl">
 +
#!/usr/bin/perl
 +
push @PREHOOKS,
 +
sub {
 +
    my ($spec,$parent) = @_;
 +
    # не предупреждать, если изменения не удалось применить
 +
    #  (так как мы будем применять этот скрипт ко всем пакетам подряд,
 +
    #  в том числе fileshareset hk_classes где макроса tde_version явно нет).
 +
    $spec->applied_off();
 +
    $spec->get_section('package','')->map_body(sub {s/14.0.\d+/14.0.3/ if /\%define\s+tde_version/});
 +
    $spec->_reset_macros();
 +
    # опять предупреждать, если изменения не удалось применить
 +
    $spec->applied_on();
 +
    #print STDERR "tde version=",$spec->{MACRO}->{tde_version},"\n";
 +
};
 +
__END__
 +
</source>
 +
Впишем полученный скрипт в опции запуска {{cmd|fcmass}} в наш скрипт-обертку {{cmd|mytrinitymass}},
 +
чтобы он выполнялся над каждым пакетом из {{path|trinity.txt}}:
 +
<source lang="bash">
 +
#!/bin/sh
 +
fcmass \
 +
  --origin TRINITY/trinity/rpm/f23/trinity-r14/SRPMS \
 +
  --dest ~/hasher/repo/SRPMS.hasher:./ALT/Sisyhus/files/SRPMS:./ALT/5.1/files/SRPMS \
 +
  --hook set_trinity_version.pl "$@"
 +
</source>
 +
 +
===== Второй запуск =====
 +
./mytrinitymass `cat trinity.txt` 2>&1 | tee import.log
 +
и изучаем лог генерации.
 +
Видим, что у части пакетов
 +
ошибка: строка 20: Prefix:    %{tde_prefix}
 +
Writing src.rpm failed. May be some important rpm macros packages are missing. Writing hasher tar.
 +
Written: ./OUT/trinity-icons-crystalsvg-updated-1.0-alt1_1.tar
 +
Используется макрос tde_prefix, который в одних пакетах определен в значение {{term|/opt/trinity}}, а в других не определен. исправим это. Для этого создадим скрипт
 +
cp hooks/template.pl add_trinity_prefix.pl
 +
vim add_trinity_prefix.pl
 +
<source lang="perl">
 +
#!/usr/bin/perl
 +
push @SPECHOOKS,
 +
sub {
 +
    if( ! $spec->get_section('package','')->match_body(qr'define\s+tde_prefix') ) {
 +
        $spec->get_section('package','')->unshift_body('%define tde_prefix /opt/trinity'."\n");
 +
    }
 +
};
 +
__END__
 +
</source>
 +
 +
Также у пакетов {{pkg|trinity-libcaldav}} {{pkg|trinity-libcarddav}} был обнаружен загадочный подземный
 +
стук<ref>(починено в perl-RPM-Source-Convert-0.617-alt1 perl-RPM-Source-Editor-0.880-alt1, так что можно и без нее)</ref>, который вылечился опцией
 +
--SET RPM::Source::Transformation::Factory::DependencyFilter::group_filters_by_transformation=0
 +
<references/>
 +
 +
Впишем полученные скрипты и опции запуска {{cmd|fcmass}} в наш скрипт-обертку {{cmd|mytrinitymass}}:
 +
<source lang="bash">
 +
#!/bin/sh
 +
fcmass \
 +
  --origin TRINITY/trinity/rpm/f23/trinity-r14/SRPMS \
 +
  --dest ~/hasher/repo/SRPMS.hasher:./ALT/Sisyhus/files/SRPMS:./ALT/5.1/files/SRPMS \
 +
  --SET RPM::Source::Transformation::Factory::DependencyFilter::group_filters_by_transformation=0 \
 +
  --hook set_trinity_version.pl \
 +
  --hook add_trinity_prefix.pl \
 +
  "$@"
 +
</source>
 +
 +
По хорошему, вместо хака {{path|add_trinity_prefix.pl}} надо бы сделать скрипт,
 +
который удаляет из спеков все эти определения
 +
%define tde_prefix /opt/trinity                                                                                               
 +
%define tde_bindir %{tde_prefix}/bin
 +
%define tde_confdir %{_sysconfdir}/trinity
 +
%define tde_datadir %{tde_prefix}/share
 +
%define tde_docdir %{tde_datadir}/doc
 +
%define tde_includedir %{tde_prefix}/include
 +
%define tde_libdir %{tde_prefix}/%{_lib}
 +
%define tde_mandir %{tde_datadir}/man
 +
[...]
 +
и вставляет вместо этого
 +
BuildRequires(pre): rpm-macros-trinity.
 +
Но это потом. Сначала добъемся успешной генерации всех пакетов.
 +
 +
===== WARNING: forbidden Group =====
 +
 +
Еще были сообщения о forbidden Group, связанные с Multimedia.
 +
WARNING: forbidden Group: Application/Multimedia in amarok. Please, replace.
 +
WARNING: forbidden Group: Productivity/Multimedia/Other in -n trinity-libarts-akode. Please, replace.
 +
[...]
 +
В нашем rpm можно указывать только группы, прописанные в {{path|/usr/lib/rpm/GROUPS}}.
 +
Все другие группы запрещены. Библиотека конверсии пытается подобрать для чужих групп их аналоги
 +
из {{path|/usr/lib/rpm/GROUPS}}, но иногда подобрать замену не удается. В таком случае
 +
группа остается как есть, и выдается предупреждение WARNING: forbidden Group:.
 +
В частности, непонятно, какую группу указывать для {{term|Multimedia}}, так как {{term|Multimedia}} нет
 +
в {{path|/usr/lib/rpm/GROUPS}}, а есть {{term|Graphics}}, {{term|Sound}} и {{term|Video}}
 +
Побороть это можно, либо грубо сбросив все такие группы в {{term|Other}} c помощью опции
 +
--group-translate Application/Multimedia,Other,Productivity/Multimedia/Other,Other
 +
где указываются пары для замены, либо указать точные замены для каждого пакета отдельно.
 +
Для этого нужно создать каталог {{path|groups}} и в нем создать файлы вида {{path|groups/<name>}},
 +
содержащие таблицы замен групп для пакета {{path|<name>}} с именами групп, разделенными табуляцией,
 +
по одной замене в ряд.
 +
 +
Примеры:
 +
 +
{{path|groups/amarok}}
 +
Application/Multimedia<--здесь tab-->Sound
 +
 +
{{path|groups/trinity-libarts}}
 +
Productivity/Multimedia/Other<--здесь tab-->Sound
 +
 +
Эти же файлы можно создавать, чтобы подправить не совсем аккуратные замены.
 +
К примеру, видя в {{path|trinity-filelights}}
 +
warning: substituting Group: Applications/Utilities with unaccurate Other
 +
создадим
 +
{{path|groups/trinity-filelights}}
 +
Applications/Utilities<--здесь tab-->File tools
 +
 +
===== Третий запуск =====
 +
./mytrinitymass `cat trinity.txt` 2>&1 | tee import.log
 +
и изучаем лог генерации.
 +
 +
== всякие мелочи ==
 +
 +
=== как перейти с gear на заливку srpm ===
 +
 +
Используем утилиту girar-print-build-commit из пакета girar-nmu.
-
#!/usr/bin/perl -w
+
Пример из жизни: Пакет jogl2 собирался руками из gear.
-
push @SPECHOOKS,
+
Было принято решение заменить его пакетом от робота.
-
sub {
+
Как залить srpm в сборочницу?
-
    my ($spec, $parent) = @_;
+
# заливаем (task 170882)
-
    $spec->get_section('package','')->unshift_body('%define tde_version 14.0.3'."\n");
+
# сборочница дает отлуп: error: /gears/j/jogl2.git branch `sisyphus' already exists, package update by srpm upload is not possible
-
};
+
# ssh girar task check-git-inheritance 170882 100 disable `girar-print-build-commit -b sisyphus jogl2`
-
__END__
+
# ssh girar task run 170882
 +
# пакет в Сизифе!

Текущая версия на 15:20, 18 октября 2016


Содержание


Введение.

TODO

Примеры

trinity

описание проекта trinity

Допустим, мы хотим собрать в Сизиф TDE. Есть готовый набор rpm trinity-r14, которые можно скачать с сайта проекта. Эти rpm с помoщью %if-ов рассчитаны на поддержку одновременно и fedora, и SuSE. Можно настроить их преобразование из SuSE в ALT, можно (и надежнее, так как лучше оттестировано) преобразование из fedora в ALT.

Настроим автоматическое преобразование этих пакетов из fedora в ALTLinux.

предварительная настройка рабочего места

Массовое автоматическое преобразование этих пакетов из fedora в ALTLinux выполняет утилита fcmass. (Из SuSE -- susemass). Установим ее и нужную ей базу distromap:

apt-get install /usr/bin/fcmass distromap-fedora-rawhide-altlinux-sisyphus

Также обновим базу DistroDB Сизифа: запустим программу

distrodb-update-repocop-db-altlinux-sisyphus 

Приступим к работе. Удобно для работы создать выделенный git реозиторий, в котором хранить скрипты синхронизации, хуки и патчи для пакетов и другие настройки специально для этого набора пакетов.

mkdir trinity-package-builder.git
cd trinity-package-builder.git
git init-db

Скопируем себе заготовку hooks/template.pl из git.altlinux.org/people/viy/packages/fcimport.git

В git храним только то, что персонально добавили в папку руками. Выхлопы fcimport, такие, как готовые пакеты в OUT, временные папки вида %{NAME}-%{VERSION}-%{R$ELEASE}.$PID, логи и т.д. в git не храним. Готовый репозиторий можно посмотреть здесь.

Утилите fcmass при запуске нужно указать исходный репозиторий (origin), конечный репозиторий (destination), и список имен сопровождаемых пакетов.

Конечный репозиторий (destination) --- это Sisyphus. Предположим, что зеркало Sisyphus находится в /var/ftp/pub/Linux/ALT/Sisyphus Для краткости, сделаем симлинк

ln -s /var/ftp/pub/Linux/ALT ./ALT

Исходный репозиторий (origin) -- это набор rpm trinity-r14 с сайта проекта. Их тоже надо скачать и поместить под рукой. Скачаем пакеты исходного репозитория. Удобно сразу же написать скрипт для скачивания, так как им же будем и проверять набор пакетов на обновления.

mkdir bin
vim bin/update_trinity.sh

Где скрипт bin/update_trinity.sh имеет вид

mkdir -p TRINITY/trinity/rpm/f23/trinity-r14/
rsync -avp --delete-after rsync://mirror.ntmm.org/trinity/trinity/rpm/f23/trinity-r14/SRPMS TRINITY/trinity/rpm/f23/trinity-r14/

Запустив его, получим в папке TRINITY исходные пакеты.

Далее получим список имен сопровождаемых пакетов.

rpmquery --qf '%{NAME}\n' -p TRINITY/trinity/rpm/f23/trinity-r14/SRPMS/*src.rpm > trinity.txt
проверка изначального списка

Пакеты, которые входят в апстримный набор, нужно проверить -- нет ли их в Сизифе. В особенности подозрительны пакеты без префикса trinity-*: это fileshareset hk_classes pan torsocks wv2.

Проверка показала, что fileshareset нет, hk_classes сейчас нет, но в 5.1 был

/var/ftp/pub/Linux/ALT/5.1/branch/files/SRPMS/hk_classes-0.8.3-alt3.src.rpm

поэтому первый раз до отправки в Сизиф hk_classes надо будет обработать отдельно. Например, сгенерировать с опцией --release alt3_1, чтобы пакет был старше, чем alt3. Еще лучше вместо этого скачать из 5.1 hk_classes-0.8.3-alt3.src.rpm, и особо запустить mytrinitymass персонально для hk_classes с опцией --parent:

./mytrinitymass hk_classes --parent ./hk_classes-0.8.3-alt3.src.rpm

Если же вдруг под рукой есть зеркало 5.1 srpms, то вышеперечисленных танцев с бубном для hk_classes совершать не нужно. Достаточно добавить путь к 5.1 в конец --dest-path, и fcmass сделает все, что надо, автоматически.

pan найден в autoimports, я его переложил в Сизиф, так как он более свежий (1.140),

torsocks и wv2 найдены в Сизифе.

/var/ftp/pub/Linux/ALT/Sisyphus/files/SRPMS/wv2-0.4.2-alt3.src.rpm
/var/ftp/pub/Linux/ALT/Sisyphus/files/SRPMS/torsocks-2.2.0-alt1.gite389c999.src.rpm

Следовательно, список trinity.txt надо отредактировать, удалив pan torsocks wv2.

Первый запуск

Сделаем обертку над fcmass, скрипт mytrinitymass, где укажем origin и dest репозитории

 #!/bin/sh
 fcmass \
   --origin TRINITY/trinity/rpm/f23/trinity-r14/SRPMS \
   --dest ~/hasher/repo/SRPMS.hasher:./ALT/Sisyhus/files/SRPMS:./ALT/5.1/files/SRPMS "$@"

первый запуск:

./mytrinitymass `cat trinity.txt` 2>&1 | tee import.log

увидим много ругани вида

WARNING: setting new version: can't find Source0:       %{name}-%{tde_version}%{?preversion:~%{preversion}}.tar.gz. Pray for the best! at /usr/share/perl5/RPM/Source/Transformation/Factory/RaiseRelease.pm line 569.
ошибка: Файл /mnt/home/archive/gitrepo/fcimport.git/trinity-abakus-0.91-14.0.3_1.fc23.2861/SOURCES/trinity-abakus-14.0.0.tar.gz: Нет такого файла или каталога
Writing src.rpm failed. May be some important rpm macros packages are missing. Writing hasher tar.

При этом в рабочей директории появилась куча подкаталогов:

drwxr-xr-x     -     fileshareset-2.0-1.fc23.14567
drwxr-xr-x     -     trinity-abakus-0.91-14.0.3_1.fc23.14567
drwxr-xr-x     -     trinity-akode-2.0.2-14.0.3_1.fc23.14567
drwxr-xr-x     -     trinity-amarok-1.4.10-14.0.3_1.fc23.14567
drwxr-xr-x     -     trinity-arts-1.5.10-14.0.3_1.fc23.14567
drwxr-xr-x     -     trinity-avahi-tqt-0.6.30-14.0.3_1.fc23.14567
drwxr-xr-x     -     trinity-basket-1.0.3.1-14.0.3_1.fc23.14567
drwxr-xr-x     -     trinity-bibletime-1.6.6.0-14.0.3_1.fc23.14567
drwxr-xr-x     -     trinity-dbus-1-tqt-0.9-14.0.3_1.fc23.14567
drwxr-xr-x     -     trinity-dbus-tqt-0.63-14.0.3_1.fc23.14567
drwxr-xr-x     -     trinity-digikam-0.9.6-14.0.3_1.fc23.14567
drwxr-xr-x     -     trinity-dolphin-0.9.2-14.0.3_1.fc23.14567
drwxr-xr-x     -     trinity-filelight-1.0-14.0.3_1.fc23.14567
drwxr-xr-x     -     trinity-gtk-qt-engine-0.8-14.0.3_1.fc23.14567
drwxr-xr-x     -     trinity-gtk3-tqt-engine-0.5-14.0.3_1.fc23.14567
drwxr-xr-x     -     trinity-gwenview-1.4.2-14.0.3_1.fc23.14567
drwxr-xr-x     -     trinity-gwenview-i18n-1.4.2-14.0.3_1.fc23.14567
drwxr-xr-x     -     trinity-icons-kfaenza-0.8.9-1.fc23.14567
[...]

Это для fcimport аналог crush dump. При работе библиотека преобразования создает временный каталог вида %{NAME}-%{VERSION}-%{R$ELEASE}.$PID, куда распаковывает исходный srpm (в подпапки SOURCES и SPEC) и пишет новый спек (в подпапку NEW). Если rpmbuild -bs завершился неудачей, то пишется hasher tar (возможно, для rpmbuild -bs просто не хватило установленных макросов в хост системе), а распакованный srpm не удаляется, чтобы можно было внутри посмотреть, почему rpmbuild -bs не отработал. После того, как просмотрели и разобрались, все, что в листинге -- мусор, можно удалить

rm -r *-*-*.{fc,mga}*.*

Станем разбираться. Оказывается, эти src.rpm не полноценные (не самдостаточные). В них используется макрос tde_version, который извне был определен в значение 14.0.3, а внутри, если не определен, определяется как 14.0.0:

%if "%{?tde_version}" == ""                                                     
%define tde_version 14.0.0                                                    
%endif

Исключение trinity-kooldock, у которого умолчание 14.0.1.

Соответственно, библиотека SourceAnalyser по записи Source0: %{name}-%{tde_version}.tar.gz ищет файл trinity-abakus-14.0.0.tar.gz, не находит его (есть trinity-abakus-14.0.3.tar.gz) и ругается. Аналогично, rpmbuild не может найти файл SOURCES/trinity-abakus-14.0.0.tar.gz и не может упаковать src.rpm.

Опцией --macrodef tde_version=14.0.3 можно помочь библиотеке SourceAnalyser найти правильный файл, но эта опция не редактирует спек файл и не поможет на следующем этапе, когда будет вызван rpmbuild -bs для записи src.rpm. Для исправления спек файла надо писать скрипт на встроенном языке.

Исправим версию на правильную. Для этого создадим скрипт, который подредактирует определение:

cp hooks/template.pl set_trinity_version.pl
vim set_trinity_version.pl
 
#!/usr/bin/perl
push @PREHOOKS, 
sub {
    my ($spec,$parent) = @_;
    # не предупреждать, если изменения не удалось применить
    #  (так как мы будем применять этот скрипт ко всем пакетам подряд, 
    #   в том числе fileshareset hk_classes где макроса tde_version явно нет).
    $spec->applied_off();
    $spec->get_section('package','')->map_body(sub {s/14.0.\d+/14.0.3/ if /\%define\s+tde_version/});
    $spec->_reset_macros();
    # опять предупреждать, если изменения не удалось применить
    $spec->applied_on();
    #print STDERR "tde version=",$spec->{MACRO}->{tde_version},"\n";
};
__END__

Впишем полученный скрипт в опции запуска fcmass в наш скрипт-обертку mytrinitymass, чтобы он выполнялся над каждым пакетом из trinity.txt:

 #!/bin/sh
 fcmass \
   --origin TRINITY/trinity/rpm/f23/trinity-r14/SRPMS \
   --dest ~/hasher/repo/SRPMS.hasher:./ALT/Sisyhus/files/SRPMS:./ALT/5.1/files/SRPMS \
   --hook set_trinity_version.pl "$@"
Второй запуск
./mytrinitymass `cat trinity.txt` 2>&1 | tee import.log

и изучаем лог генерации. Видим, что у части пакетов

ошибка: строка 20: Prefix:    %{tde_prefix}
Writing src.rpm failed. May be some important rpm macros packages are missing. Writing hasher tar.
Written: ./OUT/trinity-icons-crystalsvg-updated-1.0-alt1_1.tar

Используется макрос tde_prefix, который в одних пакетах определен в значение /opt/trinity, а в других не определен. исправим это. Для этого создадим скрипт

cp hooks/template.pl add_trinity_prefix.pl
vim add_trinity_prefix.pl
 
#!/usr/bin/perl
push @SPECHOOKS, 
sub {
    if( ! $spec->get_section('package','')->match_body(qr'define\s+tde_prefix') ) {
        $spec->get_section('package','')->unshift_body('%define tde_prefix /opt/trinity'."\n");
    }
};
__END__

Также у пакетов trinity-libcaldav trinity-libcarddav был обнаружен загадочный подземный стук[1], который вылечился опцией

--SET RPM::Source::Transformation::Factory::DependencyFilter::group_filters_by_transformation=0
  1. (починено в perl-RPM-Source-Convert-0.617-alt1 perl-RPM-Source-Editor-0.880-alt1, так что можно и без нее)

Впишем полученные скрипты и опции запуска fcmass в наш скрипт-обертку mytrinitymass:

 #!/bin/sh
 fcmass \
   --origin TRINITY/trinity/rpm/f23/trinity-r14/SRPMS \
   --dest ~/hasher/repo/SRPMS.hasher:./ALT/Sisyhus/files/SRPMS:./ALT/5.1/files/SRPMS \
   --SET RPM::Source::Transformation::Factory::DependencyFilter::group_filters_by_transformation=0 \
   --hook set_trinity_version.pl \
   --hook add_trinity_prefix.pl \
   "$@"

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

%define tde_prefix /opt/trinity                                                                                                 
%define tde_bindir %{tde_prefix}/bin
%define tde_confdir %{_sysconfdir}/trinity
%define tde_datadir %{tde_prefix}/share
%define tde_docdir %{tde_datadir}/doc
%define tde_includedir %{tde_prefix}/include
%define tde_libdir %{tde_prefix}/%{_lib}
%define tde_mandir %{tde_datadir}/man
[...]

и вставляет вместо этого

BuildRequires(pre): rpm-macros-trinity.

Но это потом. Сначала добъемся успешной генерации всех пакетов.

WARNING: forbidden Group

Еще были сообщения о forbidden Group, связанные с Multimedia.

WARNING: forbidden Group: Application/Multimedia in amarok. Please, replace.
WARNING: forbidden Group: Productivity/Multimedia/Other in -n trinity-libarts-akode. Please, replace.
[...]

В нашем rpm можно указывать только группы, прописанные в /usr/lib/rpm/GROUPS. Все другие группы запрещены. Библиотека конверсии пытается подобрать для чужих групп их аналоги из /usr/lib/rpm/GROUPS, но иногда подобрать замену не удается. В таком случае группа остается как есть, и выдается предупреждение WARNING: forbidden Group:. В частности, непонятно, какую группу указывать для Multimedia, так как Multimedia нет в /usr/lib/rpm/GROUPS, а есть Graphics, Sound и Video Побороть это можно, либо грубо сбросив все такие группы в Other c помощью опции

--group-translate Application/Multimedia,Other,Productivity/Multimedia/Other,Other

где указываются пары для замены, либо указать точные замены для каждого пакета отдельно. Для этого нужно создать каталог groups и в нем создать файлы вида groups/<name>, содержащие таблицы замен групп для пакета <name> с именами групп, разделенными табуляцией, по одной замене в ряд.

Примеры:

groups/amarok

Application/Multimedia<--здесь tab-->Sound

groups/trinity-libarts

Productivity/Multimedia/Other<--здесь tab-->Sound

Эти же файлы можно создавать, чтобы подправить не совсем аккуратные замены. К примеру, видя в trinity-filelights

warning: substituting Group: Applications/Utilities with unaccurate Other

создадим groups/trinity-filelights

Applications/Utilities<--здесь tab-->File tools
Третий запуск
./mytrinitymass `cat trinity.txt` 2>&1 | tee import.log

и изучаем лог генерации.

всякие мелочи

как перейти с gear на заливку srpm

Используем утилиту girar-print-build-commit из пакета girar-nmu.

Пример из жизни: Пакет jogl2 собирался руками из gear. Было принято решение заменить его пакетом от робота. Как залить srpm в сборочницу?

  1. заливаем (task 170882)
  2. сборочница дает отлуп: error: /gears/j/jogl2.git branch `sisyphus' already exists, package update by srpm upload is not possible
  3. ssh girar task check-git-inheritance 170882 100 disable `girar-print-build-commit -b sisyphus jogl2`
  4. ssh girar task run 170882
  5. пакет в Сизифе!
 
Личные инструменты