Packaging Automation/MassProcessing/MassImportAndSupport: различия между версиями

Материал из ALT Linux Wiki
Строка 134: Строка 134:
===== Второй запуск =====
===== Второй запуск =====
  ./mytrinitymass `cat trinity.txt` 2>&1 | tee import.log
  ./mytrinitymass `cat trinity.txt` 2>&1 | tee import.log
и изучаем лог генерации. Видим, что у части пакетов
и изучаем лог генерации.  
Видим, что у части пакетов
  ошибка: строка 20: Prefix:    %{tde_prefix}
  ошибка: строка 20: Prefix:    %{tde_prefix}
  Writing src.rpm failed. May be some important rpm macros packages are missing. Writing hasher tar.
  Writing src.rpm failed. May be some important rpm macros packages are missing. Writing hasher tar.
Строка 156: Строка 157:
  --SET RPM::Source::Transformation::Factory::DependencyFilter::group_filters_by_transformation=0
  --SET RPM::Source::Transformation::Factory::DependencyFilter::group_filters_by_transformation=0


Впишем полученный скрипт в опции запуска {{cmd|fcmass}} в наш скрипт-обертку {{cmd|mytrinitymass}}:
Впишем полученные скрипты и опции запуска {{cmd|fcmass}} в наш скрипт-обертку {{cmd|mytrinitymass}}:
<source lang="bash">
<source lang="bash">
  #!/bin/sh
  #!/bin/sh
Строка 167: Строка 168:
   "$@"
   "$@"
</source>
</source>
Далее, были сообщения о 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
где указываются пары для замены, либо указать точные замены для каждого пакета отдельно.


===== Третий запуск =====
===== Третий запуск =====
  ./mytrinitymass `cat trinity.txt` 2>&1 | tee import.log
  ./mytrinitymass `cat trinity.txt` 2>&1 | tee import.log
и изучаем лог генерации.
и изучаем лог генерации.

Версия от 18:39, 10 октября 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

Утилите 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_triity.sh

Где скрипт bin/update_triity.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. 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.

Станем разбираться.

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

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

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

cp hooks/template.pl set_trinity_version.pl
vim set_trinity_version.pl
 
#!/usr/bin/perl
push @PREHOOKS, 
sub {
    # не предупреждать, если изменения не удалось применить
    #  (так как мы будем применять этот скрипт ко всем пакетам подряд, 
    #   в том числе fileshareset hk_classes где макроса tde_version явно нет).
    $spec->applied_off();
    $spec->get_section('package','')->map_body(sub {s/14.0.0/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 был обнаружен загадочный подземный стук, который вылечился опцией

--SET RPM::Source::Transformation::Factory::DependencyFilter::group_filters_by_transformation=0

Впишем полученные скрипты и опции запуска 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 \
   "$@"

Далее, были сообщения о 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

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

Третий запуск
./mytrinitymass `cat trinity.txt` 2>&1 | tee import.log

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