Packaging Automation/Импорт Пакетов из других дистрибутивов

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

Введение.

В системах автоматизации за преобразование пакетов отвечают утилиты, использующие набор плагинов к библиотеке RPM::Source::Transform из в пакета perl-RPM-Source-Convert.


Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.


TODO

Это потому, что qr'' -- вид кавычек, для regexp.

надо
$spec->get_section('install','')->subst_body   (
gr'\{_datadir\}/icons',    '_niconsdir' );


> А просто
> $spec->get_section('install','')->subst_body('\{_datadir\}/icons','_niconsdir');
> проходит
да.
но правильнее брать в qr'  ' , она лучше дружит с регулярными выражениями.


2016-10-23 20:34 GMT+03:00 Hihin Ruslan <ruslandh@gmail.com>:
> Здравствуйте Igor Vlasenko
> Есть смысл добавить некоторые зависимости, которых нет в suse.
> Это только через "патчи", или есть ещё какой-нибудь хитрый приём?

я использую скрипты по умолчанию --hooks/<имя пакета>.pl
это удобно тем, что вся информация, что в пакете вносилось руками,
собрана в одном месте.

есть и другие способы, например, flags/add_buildreq.txt см. мой
perl-package-builder.git
но потом в итоге можно запутаться.



если какие хаки вносятся во все пакеты,
то их надо явно вносить руками. я обычно делаю скрипт обертку,
в который вписываю явно вызовы этих хаков которые для всех пакетов.
к примеру trinnitymass --такой скрипт обертка.
посмотрите в mate есть похожий скрипт обертка matemass
и внутри явно грузится --hook ./mate.pl





2016-10-23 21:18 GMT+03:00 Hihin Ruslan <ruslandh@gmail.com>:
> Здравствуйте Igor Vlasenko
>  В сообщении от 23 октября 2016 вы написали:
>
> Слишком маленькая версия suse получается. Должно быть что-то типа
> 1320, а нас  1150. Это где лучше/правильнее подкручивать?

У меня в RPM/Source/Convert/Plugins/SuSE2ALT.pm
отстал от жизни - давно с suse пакетами не ковырялся.

new task #171277: owner=viy repo=sisyphus
task #171277: added #100: build srpm perl-RPM-Source-Convert-0.618-alt1.src.rpm
task #171277: try #1 is AWAITING, result will be emailed to viy@altlinux.org

0.618-alt1
- bumped suse version to 1320 thnx to Ruslan Hihin





Ой, то-что внизу -- это если rpmbuild -bs завершился неудачей,
то  распакованный srpm не удаляется, чтобы можно было внутри
посмотреть, почему так.
все, что в листинге -- мусор, аналог crush dump.

drwxr-xr-x     -     fileshareset-2.0-1.fc23.15605     tree | history
drwxr-xr-x     -     fileshareset-2.0-1.fc23.15852     tree | history
drwxr-xr-x     -     trinity-abakus-0.91-14.0.3_1.fc23.14567     tree | history
drwxr-xr-x     -     trinity-akode-2.0.2-14.0.3_1.fc23.14567     tree | history
drwxr-xr-x     -     trinity-amarok-1.4.10-14.0.3_1.fc23.14567
tree | history
drwxr-xr-x     -     trinity-arts-1.5.10-14.0.3_1.fc23.14567     tree | history
drwxr-xr-x     -     trinity-avahi-tqt-0.6.30-14.0.3_1.fc23.14567
tree | history
drwxr-xr-x     -     trinity-basket-1.0.3.1-14.0.3_1.fc23.14567
tree | history


зашел в распакованный подкаталог и сделал
 rpmbuild -bs --nodeps --define '_sourcedir ./SOURCES' ./SPECS/*.spec
получил src.rpm.



> А вот такой вопрос - есть файлы подстановок групп, а нет-ли
> файлов подстановок пакетов? Что-бы я мог написать список для
> подстановки, а скрипт из него сделал-бы подстановку (если он
> неправильно сработал), ну а потом я мог-бы отослать список тебе,
> что-бы он вошёл в основной пакет.

не совсем изящно, но:
файлы подстановок пакетов -- это distromap.
уже установленные пакеты
distromap-fedora-rawhide-altlinux-sisyphus
distromap-suse-default-altlinux-sisyphus
не поправить, но distromap.обучено смотреть перед ними и в другие места.

соответственно, склонируйте distromap-fedora2alt.git
(по фиксированному пути ~/src/repo/distromap-fedora2alt.git
-- прибит гвоздями в perl-DistroMap :(
если не удобно, можно придумать переменную, которая будет указывать)
добавьте в папке binary
свой txt файл trinity.txt с заменами и эти замены будут подхвачены на лету.
а по итогам работы этот файл уйдет в сизифный пакет.

> И вот ещё - ведь теоретически наши пакеты могут быть раздробленны
> на более мелкие кусочки, чем в suse/федора, и вместо отношения
> один к одному, мы можем иметь случай один к нескольким, и тогда,
> наверное надо для  таких случаев писать, что при сборке
> пакета "z" надо сделать подстановку "a" на пакет "A",  а при
> сборке пакета "y", "a"->"B", или "a"->"A,B".
> Как в этом случае предусмотренно (пока такого у меня не было, но
> хотелось-бы знать заранее) ?

там именно такой формат в файлах. замена a -> A B C ...
список соединяем пробельными символами, получим
a A B C ...




Гм. там беда, что distromap то знает правильные подстановки,
см.
grep -r nas-devel /usr/share/distromap/fedora/rawhide/altlinux/sisyphus/binary
binary/40-distrodb.txt:nas-devel        libaudio-devel

но имена пакетов сунуты в макрос,
а робот уповат и %if вычислять пока не обучен и
для робота кусок вида
# LIBAUDIO support
%if 0%{?fedora} || 0%{?mgaversion} || 0%{?mdkversion} ||
0%{?alt_version} || 0%{?suse_version} && 0%{?opensuse_bs} == 0
%define with_nas 1
%if 0%{?fedora} || 0%{?mgaversion} || 0%{?mdkversion}
%define libaudio_devel nas-devel
%endif
%if 0%{?suse_version} && 0%{?opensuse_bs} == 0
%define libaudio_devel libaudio-devel
%endif
%if 0%{?alt_version}
%define libaudio_devel libaudio-devel
%endif
%endif
выглядит просто как
%define libaudio_devel nas-devel
%define libaudio_devel libaudio-devel
%define libaudio_devel libaudio-devel
и в итоге внутри робота %define libaudio_devel libaudio-devel.

Если в спеках %define для suse всегда последние,
что надо еще проверить, то да, susemass.

Если же за fedora держаться, то надо будет
предобработку спеков, чтобы предвычислить %if
и убрать лишние %if %else %endif вместе с
ненужными вариантами.




>> Пример как снять git-inheritance с пакета, который заливался
>> как gear, а потом залит как srpm:
>> ssh girar task check-git-inheritance 169825 100 disable
>> `girar-print-build-commit -b sisyphus
>> perl-Data-Validate-Domain`
> Это поподробнее, если можно, хотелось-бы понять, что эти команды
> делают. Но если время нет, то я потом сам разбурусь.

Это из реальной жизни.
Залил как-то в Сизиф обновление perl-Data-Validate-Domain как srpm
(майнтайнеры мне perl отдали) а сборочница не пустила.
говорит, git-inheritance, не пущу, пакет ранее был залит с git .gear
репозитория.
Это был task 169825 subtask 100.
я выполнил волшебную команду
$ ssh girar task check-git-inheritance 169825 100 disable
`girar-print-build-commit -b sisyphus perl-Data-Validate-Domain`
затем
$ ssh girar task run 169825
и пакет прошел в Сизиф.
утилита girar-print-build-commit из пакета girar-nmu.



> но тут явно нельзя заменять их %cmake на наш, он просто ломает всю сборку ;-)
> если только написать свой какой-то %cmake_fs,

Руслан, вы попали в точку.
в fcmass действительно fs %cmake меняется  на %cmake_fedora
поэтому, по идее, c mytrinitymass-fc получится собирающийся tdelibs.

а вот в susemass такой подстановки нет, не дошли руки. Надо сделать.
Пока попробуйте tdelibs сгенерировать с помощью mytrinitymass-fc.
Igor Vlasenko <ivlasenko@gmail.com>
	
Oct 29 (2 days ago)
	
to Хихин
2016-10-29 11:50 GMT+03:00 Igor Vlasenko <ivlasenko@gmail.com>:
> в fcmass действительно fs %cmake меняется  на %cmake_fedora
и вставляется BR: rpm-macros-fedora-compat, конечно.




> Вот эти строки в tqt3 похоже надо удалять из спека, получаемого из Suse
> %suse_update_desktop_file tqassistant Documentation
> %suse_update_desktop_file tqdesigner GUIDesigner
> %suse_update_desktop_file tqlinguist Translation
> %suse_update_desktop_file tqtconfig Utility

нет, это все хорошие строки. их робот конвертер вписал.
Просто установите в host систему пакет rpm-macros-suse-compat.


INFO: SourceAnalyzer: nothing in devel-libs provides wtc8.
INFO: SourceAnalyzer: nothing in devel-libs provides pm.

grep по исходникам сказал что wtc8 это only Oracle 8

./src/sql/qt_sql.pri:                       LIBS += -lclntsh -lwtc8
./configure:    OCI_REQ="-lclntsh -lwtc8 oci.h"
./doc/sql-driver.doc:\i \c libwtc8.so (only Oracle 8) or \c libwtc9.so
(only Oracle 9)
./doc/sql-driver.doc:qmake -o Makefile
"INCLUDEPATH+=$ORACLE_HOME/rdbms/public $ORACLE_HOME/rdbms/demo"
"LIBS+=-L$ORACLE_HOME/lib -lclntsh -lwtc8" oci.pro
./doc/html/sql-driver.html:<li> <tt>libwtc8.so</tt> (only Oracle 8) or
<tt>libwtc9.so</tt> (only Oracle 9)
./doc/html/sql-driver.html:qmake -o Makefile
"INCLUDEPATH+=$ORACLE_HOME/rdbms/public $ORACLE_HOME/rdbms/demo"
"LIBS+=-L$ORACLE_HOME/lib -lclntsh -lwtc8" oci.pro

pm тоже что-то опционалное
./src/embedded/qt_embedded.pri:            debug:LIBS  +=
-L$(SCITECH)/lib/debug/linux/gcc/x86/so -lpm
./src/embedded/qt_embedded.pri:            else:LIBS   +=
-L$(SCITECH)/lib/release/linux/gcc/x86/so -lpm





Базовые утилиты