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

Материал из ALT Linux Wiki
Строка 121: Строка 121:
</source>
</source>
Впишем полученный скрипт в опции запуска {{cmd|fcmass}} в наш скрипт-обертку {{cmd|mytrinitymass}},  
Впишем полученный скрипт в опции запуска {{cmd|fcmass}} в наш скрипт-обертку {{cmd|mytrinitymass}},  
чтобы он выполнялся над каждым пакетом из :
чтобы он выполнялся над каждым пакетом из {{path|trinity.txt}}:
<source lang="bash">
<source lang="bash">
  #!/bin/sh
  #!/bin/sh

Версия от 16:56, 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

Утилите 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 --macrodef tde_version=14.0.3
Второй запуск
./mytrinitymass `cat trinity.txt` 2>&1 | tee import.log

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