Страница 1 из 7
					
				Сборка RPM
				Добавлено: 25 дек 2014, 20:55
				 blua
				Сразу скажу, что я новичок на линукс, но читал о нем.
Идея научится собирать rpm пакеты. Почитал инструкции на этот счет тут: 
http://wiki.rosalab.ru/ru/index.php/%D0 ... %D1%8B_RPM
попробовал на нескольких программах из репозитория, вроде собрались. Решил собрать свою с нуля из исходников и феил...
Программа: 
https://code.google.com/p/linuxtuner/
По инструкции надо начать с файла спецификации и он у меня получился такой:
Код: Выделить всё
Name:	 mountmanager
Version: 0.2.6
Release: lop1
Summary:	Manager mount devices.
License:	GPLv2+
Group:		Archiving/Other
Url:		https://code.google.com/p/linuxtuner/
Source0:	%{name}-%{version}.tar.gz
BuildRequires:	libqt4-devel
BuildRequires:	libqt4-core
BuildRequires:	libqt4-gui
BuildRequires:	libqt4-dbus
BuildRequires:	libqt4-xml
Requires:	qt4
Provides:	mountmanager
%description
The basic functionalities of MountManager are:
Mount and unmount partitions (ext3/2, ntfs, swap, fat, reiserfs, iso9660, udf, ...)
Show all logical and physical disks
Change config file /etc/fstab
Descriptions of options and other settings of mounting
Restoration system
Images mounting and unmounting (Nrg, Mdf , Ccd, Bin , etc)
Udev rules creation
Disk wizard
Etc... Plugins are supported and there is good English and Russian documentations to help develop new plugins.
%prep
%setup -q
%build
%configure
%make
%install
%makeinstall
%files
Как видите %files не заполнен. В инструкции написано чтоб его заполнить нужно сделать предварительную симуляцию установки командой: rpmbuild -bi
Но на стадии сборки мне выдаются ошибки:
Код: Выделить всё
[lop@host-15 SPECS]$ rpmbuild -bi mountmanager.spec
Выполняется(%prep): /bin/sh -e /tmp/.private/lop/rpm-tmp.60207
+ umask 022
+ /bin/mkdir -p /usr/src/RPM/BUILD
+ cd /usr/src/RPM/BUILD
+ cd /usr/src/RPM/BUILD
+ rm -rf mountmanager-0.2.6
+ echo 'Source #0 (mountmanager-0.2.6.tar.gz):'
Source #0 (mountmanager-0.2.6.tar.gz):
+ /bin/tar -xf -
+ /bin/gzip -dc /usr/src/RPM/SOURCES/mountmanager-0.2.6.tar.gz
+ cd mountmanager-0.2.6
+ /bin/chmod -c -Rf u+rwX,go-w .
+ exit 0
Выполняется(%build): /bin/sh -e /tmp/.private/lop/rpm-tmp.20374
+ umask 022
+ /bin/mkdir -p /usr/src/RPM/BUILD
+ cd /usr/src/RPM/BUILD
+ cd mountmanager-0.2.6
+ CFLAGS='-pipe -Wall -g -O2'
+ export CFLAGS
+ CXXFLAGS='-pipe -Wall -g -O2'
+ export CXXFLAGS
+ FFLAGS='-pipe -Wall -g -O2'
+ export FFLAGS
+ '[' -n '' ']'
++ printf %s '-pipe -Wall -g -O2'
++ sed -r 's/(^|[[:space:]]+)-[^m][^[:space:]]*//g'
+ ASFLAGS=
+ export ASFLAGS
+ export lt_cv_deplibs_check_method=pass_all
+ lt_cv_deplibs_check_method=pass_all
+ xargs -rn1 install -pm755 -- /usr/share/gnu-config/config.sub /usr/share/gnu-config/config.guess
+ sort -u
+ xargs -ri find '{}' -type f '(' -name config.sub -or -name config.guess ')' -printf '%h/\n'
+ xargs -ri dirname -- '{}'
+ readlink -e -- ./configure
+ ./configure --build= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/lib --localstatedir=/var/lib --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --disable-dependency-tracking --without-included-gettext
!---------------------------------------------------------!
! Thank you for installing of MountManager program!       !
!              Mounting in Linux is easy!                 !
!---------------------------------------------------------!
Unrecognized option: --build=x86_64-ros-linux
  Usage: ./configure [options]
  Available options:
   --help                      Print this message
   --clean                     Clean results of configuring and quit
   --prefix=<prefix>           Set prefix (default: /usr)
   --datadir=<dir>             Set data dir (default: /usr/share
   --qmake=<name>              Set qmake executable
   --include_path=<path>       Set include path (default: /usr/include)
   --lib_path=<path>           Set lib path (default: /usr/lib)
ошибка: Неверный код возврата из /tmp/.private/lop/rpm-tmp.20374 (%build)
Ошибки сборки пакетов:
    Неверный код возврата из /tmp/.private/lop/rpm-tmp.20374 (%build)
[lop@host-15 SPECS]$ 
Не понимаю почему ему не нравится моя архитектура. Проц. Интел х64 и ос х64.
Думал может программа только на 32х, выставлял сборку в i586 и в файле спец., прописывал, но результат тот же.
Ошибки сборки пакетов:
    Неверный код возврата из /tmp/.private/lop/rpm-tmp.20374 (%build)
Тут вообще безобразие. В инете много информации о такой ошибке, но найденное не помогло. Я не знаю точно, но догадываюсь, что нужно прописать путь. Пробовал делать это в спец., с помощью BuildRoot , результат не менялся. Может нужны еще какие-то пути задать?
 
			
					
				Re: Сборка RPM
				Добавлено: 25 дек 2014, 21:14
				 ДроноваЮ
				Только RPM, а не pmr. Поправила заголовок.
			 
			
					
				Re: Сборка RPM
				Добавлено: 26 дек 2014, 08:42
				 Pulfer
				blua писал(а):Unrecognized option: --build=x86_64-ros-linux
Не понимаю почему ему не нравится моя архитектура. Проц. Интел х64 и ос х64.
А, ну тут дело не в архитектуре, а в опции --build=. Дело в том, что макрос %configure предназначен для использования с проектами на autotools, а в данном случае используется самописный скрипт (обёртка вокруг qmake) с именем configure, который по опциям лишь частично совместим с autotools. А на несовместимые опции ругается вместо того, чтобы просто проигнорировать.
Так что %configure надо заменить на ./configure (т.е. вместо макроса оставить просто команду). И возможно, что ещё надо указать значение --lib_path, чтобы учитывалась архитектура системы.
Остальные значения сборки вроде и по умолчанию правильные.
 
			
					
				Re: Сборка RPM
				Добавлено: 26 дек 2014, 11:15
				 blua
				ДроноваЮ писал(а):Только RPM, а не pmr. Поправила заголовок.
Да, извиняюсь. 
 
 
Pulfer писал(а):blua писал(а):Unrecognized option: --build=x86_64-ros-linux
Не понимаю почему ему не нравится моя архитектура. Проц. Интел х64 и ос х64.
А, ну тут дело не в архитектуре, а в опции --build=. Дело в том, что макрос %configure предназначен для использования с проектами на autotools, а в данном случае используется самописный скрипт (обёртка вокруг qmake) с именем configure, который по опциям лишь частично совместим с autotools. А на несовместимые опции ругается вместо того, чтобы просто проигнорировать.
Так что %configure надо заменить на ./configure (т.е. вместо макроса оставить просто команду). И возможно, что ещё надо указать значение --lib_path, чтобы учитывалась архитектура системы.
Остальные значения сборки вроде и по умолчанию правильные.
 
Так ./configure я пробовал, все равно ругается, но со значением --lib_path=%{_libdir} ошибка пропала.
Но осталась:
Неверный код возврата из /tmp/.private/lop/rpm-tmp.20374 (%build)
Что такое код возврата? 

 
			
					
				Re: Сборка RPM
				Добавлено: 26 дек 2014, 11:28
				 Pulfer
				blua писал(а):Так ./configure я пробовал, все равно ругается, но со значением --lib_path=%{_libdir} ошибка пропала.
Но осталась:
Неверный код возврата из /tmp/.private/lop/rpm-tmp.20374 (%build)
Что такое код возврата? 

 
Хмм, думаю, что в данном случае лучше даже не вникать в то, что такое код возврата в теории. На практике сообщение означает, что в блоке %build какая-то из команд завершилась с ошибкой. В прошлый раз ошибкой было "Unrecognized option", а сейчас надо снова смотреть на лог сборки, чтобы понять, что именно не так.
 
			
					
				Re: Сборка RPM
				Добавлено: 26 дек 2014, 12:57
				 blua
				Pulfer писал(а):blua писал(а):Так ./configure я пробовал, все равно ругается, но со значением --lib_path=%{_libdir} ошибка пропала.
Но осталась:
Неверный код возврата из /tmp/.private/lop/rpm-tmp.20374 (%build)
Что такое код возврата? 

 
Хмм, думаю, что в данном случае лучше даже не вникать в то, что такое код возврата в теории. На практике сообщение означает, что в блоке %build какая-то из команд завершилась с ошибкой. В прошлый раз ошибкой было "Unrecognized option", а сейчас надо снова смотреть на лог сборки, чтобы понять, что именно не так.
 
Оказалось неверный адрес пакета cmd.
urpmf нашел его в составе другого пакета. Потом исправил адрес в файле конфига в архиве с программой и все собралось. Щас список для %files делаю, если все получится спецификацию с поправками выложу. Мне в принципе эта программа не нужна, просто для эксперимента взял. Но она вроде не плохая, вдруг кому понадобится.
Вы не сердитесь, но я задам тупой вопрос. 
 
 
хотел справку посмотреть ./configure, а мне в ответ:
[lop@lop-pookT rpm]$ man ./configure
man: ./configure: Нет такого файла или каталога
Нет справочной страницы для ./configure
Команда: ./configure --help
Вообще не найдена. Где и как можно посмотреть описание ./configure?
 
			
					
				Re: Сборка RPM
				Добавлено: 26 дек 2014, 14:31
				 Pulfer
				blua писал(а):Вы не сердитесь, но я задам тупой вопрос. 
 
 
хотел справку посмотреть ./configure, а мне в ответ:
 
Да не, вопрос не тупой, нормальный. 
 
 
Команда man работает только для части команд/программ. Для некоторых программ авторы не потрудились написать man-страницу, поэтому документацию по ним надо искать в и-нете, на странице разработчиков программы. Либо попробовать запустить команду с опцией --help. Хотя и в этих случаях может не быть документации, тут всё зависит от конкретной программы.
В данном случае configure - это просто скрипт сборки, man-страницы для него не предусмотрено, да и просто нет смысла. Команда 
./configure --help должна вывести справку, но есть нюанс - запускать её надо в том же каталоге, где лежит скрипт configure. Либо вместо ./ указать полный путь к скрипту (./ - означает текущий каталог).
 
			
					
				Re: Сборка RPM
				Добавлено: 31 дек 2014, 17:54
				 blua
				Добавил патч и исходник, немного переделал spec, он у меня теперь такой:
Код: Выделить всё
Name: mountmanager
Version: 0.2.6
Release: lop1
Summary: Manager mount devices
License: GPLv2+
Group: Archiving/Other
Url: https://code.google.com/p/linuxtuner/
Source0: http://linuxtuner.googlecode.com/files/mountmanager-0.2.6.tar.gz
Source1: mountmanager.desktop
Patch0: %name-config-destination.patc
Requires: hal
BuildRequires: libqt4-devel
BuildRequires: libqt4-core
BuildRequires: libqt4-gui
BuildRequires: libqt4-dbus
BuildRequires: libqt4-xml
BuildRequires: gcc-c++
BuildRequires: qt4-devel
%description
The basic functionalities of MountManager are:
Mount and unmount partitions (ext3/2, ntfs, swap, fat, reiserfs, iso9660, udf, ...)
Show all logical and physical disks
Change config file /etc/fstab
Descriptions of options and other settings of mounting
Restoration system
Images mounting and unmounting (Nrg, Mdf , Ccd, Bin , etc)
Udev rules creation
Disk wizard
Etc... Plugins are supported and there is good English and Russian documentations to help develop new plugins.
%prep
%setup
%patch0 -p1
%build
./configure --lib_path=%_libdir --prefix=/usr/src/RPM/tmp/
%make
%install
%makeinstall_std
%files
%defattr
%doc license readme.en readme.ru
%doc %_datadir/doc/MountManager/*
%_bindir/mmanager
%_bindir/mm
%_libdir/mountmanager/plugins/libdocumentationpanel.so
%_libdir/mountmanager/plugins/libfstabpreview.so
%_libdir/mountmanager/plugins/libimagesmounting.so
%_libdir/mountmanager/plugins/libsharesmount.so
%_libdir/mountmanager/plugins/libtips.so
%_libdir/mountmanager/trans/br.qm
%_libdir/mountmanager/trans/docpanel_ru.qm
%_libdir/mountmanager/trans/es.qm
%_libdir/mountmanager/trans/imagesmount_ru.qm
%_libdir/mountmanager/trans/pl.qm
%_libdir/mountmanager/trans/previewpanel_ru.qm
%_libdir/mountmanager/trans/pt.qm
%_libdir/mountmanager/trans/ru.qm
%_libdir/mountmanager/trans/sharesmount_ru.qm
%_libdir/mountmanager/trans/tips_ru.qm
%_libdir/mountmanager/trans/tr.qm
%_datadir/applications/mountmanager-kde.desktop
%_datadir/applications/mountmanager-gtk.desktop
%_datadir/icons/mm.png
%_mandir/man1/mm.1*
%_mandir/man1/%name.1*
%_datadir/%name/*
Запускаю rpmbuild -ba mountmanager.spec и прерывает говоря что:
Код: Выделить всё
 
+---------------------------------------------------------------------+
|               OK. Type make install to install.                   |
+---------------------------------------------------------------------+
make: Leaving directory `/usr/src/RPM/BUILD/mountmanager-0.2.6'
+ exit 0
Выполняется(%install): /bin/sh -e /tmp/.private/lop/rpm-tmp.70578
+ umask 022
+ /bin/mkdir -p /usr/src/RPM/BUILD
+ cd /usr/src/RPM/BUILD
+ /bin/chmod -Rf u+rwX -- /tmp/.private/lop/mountmanager-buildroot
+ :
+ /bin/rm -rf -- /tmp/.private/lop/mountmanager-buildroot
+ cd mountmanager-0.2.6
+ make 'INSTALL=/bin/install -p' install DESTDIR=/tmp/.private/lop/mountmanager-buildroot
make: Entering directory `/usr/src/RPM/BUILD/mountmanager-0.2.6'
install -d /usr/src/RPM/tmp//share/mountmanager
install -d /usr/src/RPM/tmp//share/mountmanager/options
install -d /usr/src/RPM/tmp//share/mountmanager/icons
install -d /usr/src/RPM/tmp//share/mountmanager/images
install -d /usr/src/RPM/tmp//share/doc/MountManager
install -d /usr/src/RPM/tmp//bin
install -d /usr/src/RPM/tmp//lib/mountmanager/trans
install -d /usr/src/RPM/tmp//share/man/man1
install -d /usr/src/RPM/tmp//lib/mountmanager/plugins
install -m 755 mm /usr/src/RPM/tmp//bin/mmanager
install -m 644 options/* /usr/src/RPM/tmp//share/mountmanager/options/
install -m 644 resources/icons/* /usr/src/RPM/tmp//share/mountmanager/icons/
install -m 644 resources/images/* /usr/src/RPM/tmp//share/mountmanager/images/
install -m 644 trans/*.qm /usr/src/RPM/tmp//lib/mountmanager/trans/
cp -R doc/* /usr/src/RPM/tmp//share/doc/MountManager/
cp -R mans/* /usr/src/RPM/tmp//share/man/man1/
for dir in "ImagesMounting" "FstabPreview" "DocumentationPanel" "Tips" "SharesMount"; do \
        cd plugins/$dir; \
        cp -f translations/*.qm /usr/src/RPM/tmp//lib/mountmanager/trans/; \
        for file in `ls *.so`; do \
                cp $file /usr/src/RPM/tmp//lib/mountmanager/plugins/; \
        done; \
        cd ../../; \
done
install -m 755 mountmanager /usr/src/RPM/tmp//bin/
install -d /usr/src/RPM/tmp//share/icons
install -d /usr/src/RPM/tmp//share/applications
install -m 644 resources/desktop/mm.png /usr/src/RPM/tmp//share/icons
install -m 644 resources/desktop/mountmanager-gtk.desktop /usr/src/RPM/tmp//share/applications/
install -m 644 resources/desktop/mountmanager-kde.desktop /usr/src/RPM/tmp//share/applications/
+---------------------------------------------------------------------+
|               OK. Start the program by typing mm                  |
+---------------------------------------------------------------------+
make: Leaving directory `/usr/src/RPM/BUILD/mountmanager-0.2.6'
line 26: cd: /tmp/.private/lop/mountmanager-buildroot: No such file or directory
ошибка: Неверный код возврата из /tmp/.private/lop/rpm-tmp.70578 (%install)
Ошибки сборки пакетов:
    Неверный код возврата из /tmp/.private/lop/rpm-tmp.70578 (%install)
Да такой папки нет и он должен ее создавать, но... Я пробовал сам ее делать, но она удаляется вовремя сборки. 
Пробовал в спец файле прописывать buildroot, почему-то игнорирует путь.
Вот там повыше:
install DESTDIR=/tmp/.private/lop/mountmanager-buildroot
Такое чувство, что если этот путь изменить проблема решится ( наверное  

  ). Поскольку это для меня первый опыт я не знаю где поменять. 
================
Всех с наступающим 2015  

 
			
					
				Re: Сборка RPM
				Добавлено: 18 апр 2015, 19:47
				 VictorR2007
				Пробовал собирать пакет cantanta на qt5.
Если просто установит значение
то ошибка сборки.
 
			
					
				Re: Сборка RPM
				Добавлено: 19 апр 2015, 12:01
				 VictorR2007
				VictorR2007 писал(а):Пробовал собирать пакет cantanta на qt5.
Если просто установит значение
то ошибка сборки.
 
Разобрался.
Всё нормально собирается.
 
			
					
				Re: Сборка RPM
				Добавлено: 28 июн 2015, 17:54
				 Ukropchik
				Всем привет. Написал игру на Python и выложил исходники (
https://github.com/RastaDill/Logika/tree/master/Source) в группу Росы. Далее мне предложили собрать rpm пакет что-бы проще было другим посмотреть. В ходе сборки возникли некоторые вопросы. Вот мой spec файл:
Код: Выделить всё
Summary:        Logic game
Name:           Logika
Version:        1.0.0
Release:        1
License:        GNU/GPL v.3
URL:            https://github.com/RastaDill/Logika
Group:          Games/Puzzles
Source0:        logika.py
Source1:        game.py
Source2:        basic.py
Requires:       python
Requires:       pygame
%description
This is logical game written on python and pygame
%prep 
%setup -q
%build 
%configure 
%make
%install
%makeinstall
%files
%doc README(RUS) README(ENG) COPYING 
%{_datadir}/Logika/font
%{_datadir}/Logika/image
%{_datadir}/Logika/sound
Правильно ли я добавил исходники или их нужно было в архивировать в tar? Правильно ли указал соответсвующие данные в разделе %{_datadir}?
 
			
					
				Re: Сборка RPM
				Добавлено: 28 июн 2015, 18:20
				 Pulfer
				Ukropchik писал(а):Правильно ли я добавил исходники или их нужно было в архивировать в tar?
Лучше всего на гитхабе делать тэги для версий, а в спеке указывать исходники в виде tar-файла. Но в текущем виде в качестве исключения можно делать, если файлов с исходными текстами очень мало, а никакого апстрима для них нет.
Ukropchik писал(а):Правильно ли указал соответсвующие данные в разделе %{_datadir}?
Можно пару мест чуть улучшить. В поле License прописать GPLv3+, т.к. этот вариант используется наиболее часто для обозначения 3-й версии GPL в спеках. И в секции %files указать, что сам каталог %{_datadir}/Logika/ принадлежит данному пакету со всем его содержимым:
Код: Выделить всё
License:        GPLv3+
...
%dir %{_datadir}/Logika/
%{_datadir}/Logika/*
Но это скорее эстетические мелочи.
Важно тут другое. 
%configure используется для запуска скрипта configure из дерева исходников. В данном случае такого скрипта нет, так что и макрос в спеке указывать не надо.
%make используется для запуска команды make. В данном случае нет файла Makefile, так что этот макрос тоже не нужен. Как и %makeinstall.
Скорее надо сделать так:
Код: Выделить всё
%build
# nothing to build
%install
mkdir -p %{buildroot}%{_datadir}/Logika
cp * %{buildroot}%{_datadir}/Logika/
Но т.к. игра запускается файлом logika.py из каталога /usr/share/Logika, надо ещё создать для него в %install-секции wrapper-скрипт, который устанавливать в /usr/bin. Что-то типа
Код: Выделить всё
cat<<EOF>%{buildroot}%{_bindir}/logika
#!/bin/bash
cd %{_datadir}/Logika
python logika.py
EOF
chmod 0755 %{buildroot}%{_bindir}/logika
 
			
					
				Re: Сборка RPM
				Добавлено: 29 июн 2015, 14:50
				 Ukropchik
				Так, spec файл немного переписал:
Код: Выделить всё
Summary:        Logic game
Name:           Logika
Version:        1.0.0
Release:        1
License:        GPLv3+
URL:            https://github.com/RastaDill/Logika
Group:          Games/Puzzles
Source0:        logika.py
Source1:        game.py
Source2:        basic.py
Requires:       python
Requires:       pygame
%description
This is logical game written on python and pygame
%prep 
%setup -q
%build
%install
mkdir -p %{buildroot}%{_datadir}/Logika
cp * %{buildroot}%{_datadir}/Logika/
%files
%doc README(RUS) README(ENG) COPYING 
%{_datadir}/Logika/*
Pulfer писал(а):Но т.к. игра запускается файлом logika.py из каталога /usr/share/Logika, надо ещё создать для него в %install-секции wrapper-скрипт, который устанавливать в /usr/bin.
Здесь я немного не понял что за wrapper-скрипт и куда его вставлять? Я так понимаю что в программе playonlinux такой скрипт есть:
Код: Выделить всё
#!/bin/sh
exec /usr/share/playonlinux/playonlinux "$@"
exit 0
 
			
					
				Re: Сборка RPM
				Добавлено: 29 июн 2015, 16:42
				 Pulfer
				Ukropchik писал(а):Здесь я немного не понял что за wrapper-скрипт и куда его вставлять?
Вот так:
Код: Выделить всё
Summary:        Logic game
Name:           Logika
Version:        1.0.0
Release:        1
License:        GPLv3+
URL:            https://github.com/RastaDill/Logika
Group:          Games/Puzzles
Source0:        logika.py
Source1:        game.py
Source2:        basic.py
Requires:       python
Requires:       pygame
%description
This is logical game written on python and pygame.
%prep 
%setup -q
%build
%install
mkdir -p %{buildroot}%{_datadir}/Logika
cp * %{buildroot}%{_datadir}/Logika/
cat<<EOF>%{buildroot}%{_bindir}/logika
#!/bin/bash
cd %{_datadir}/Logika
python logika.py
EOF
chmod 0755 %{buildroot}%{_bindir}/logika
%files
%doc README(RUS) README(ENG) COPYING 
%{_bindir}/logika
%dir %{_datadir}/Logika/
%{_datadir}/Logika/*
 
			
					
				Re: Сборка RPM
				Добавлено: 29 июн 2015, 19:33
				 VictorR2007
				Столкнулся с проблемой.
У нас в репах есть программа ultracopier,
но собрана без дополнительных локалей.
Чтобы работали дополнительные локали (на фотке),
я пробовал добавить в спек строку
Код: Выделить всё
install -D src/lang/* %{buildroot}%{_datadir}/%{name}/lang/*
Но она ломает упаковку остальных файлов,
и не видит файлы в  src/lang
P.S.
Разобрался как это обойти.
 
			
					
				Re: Сборка RPM
				Добавлено: 30 июн 2015, 18:47
				 Ukropchik
				Pulfer, спасибо за помощь. Подправил spec-файл. Но собрать всё равно не удаётся. Вот такая ошибка появляется.
Код: Выделить всё
rpmbuild -ba logika.spec
Выполняется(%prep): /bin/sh -e /var/tmp/rpm-tmp.44355
+ umask 022
+ cd /home/weedman/rpmbuild/BUILD
+ '[' 1 -eq 1 ']'
+ '[' 1 -eq 1 ']'
+ '[' 1 -eq 1 ']'
+ cd /home/weedman/rpmbuild/BUILD
+ rm -rf Logika-1.0.0
+ /bin/tar -xf /home/weedman/rpmbuild/SOURCES/logika.py
/bin/tar: This does not look like a tar archive
/bin/tar: Skipping to next header
/bin/tar: Exiting with failure status due to previous errors
error: Неверный код возврата из /var/tmp/rpm-tmp.44355 (%prep)
Ошибки сборки пакетов:
    Неверный код возврата из /var/tmp/rpm-tmp.44355 (%prep)
 
			
					
				Re: Сборка RPM
				Добавлено: 30 июн 2015, 19:32
				 Pulfer
				Ukropchik писал(а):Pulfer, спасибо за помощь. Подправил spec-файл. Но собрать всё равно не удаётся. Вот такая ошибка появляется.
А, ну да, там же всё ещё не файловый архив указан в качестве Source0. "%setup -q" распаковывает Source0, а в данном случае распаковывать нечего.
Тогда вот так надо:
Код: Выделить всё
Summary:        Logic game
Name:           Logika
Version:        1.0.0
Release:        1
License:        GPLv3+
URL:            https://github.com/RastaDill/Logika
Group:          Games/Puzzles
Source0:        logika.py
Source1:        game.py
Source2:        basic.py
Requires:       python
Requires:       pygame
%description
This is logical game written on python and pygame.
%prep
%build
%install
mkdir -p %{buildroot}%{_datadir}/Logika
install -m 0644 %{SOURCE0} %{buildroot}%{_datadir}/Logika/logika.py
install -m 0644 %{SOURCE1} %{buildroot}%{_datadir}/Logika/game.py
install -m 0644 %{SOURCE2} %{buildroot}%{_datadir}/Logika/basic.py
cat<<EOF>%{buildroot}%{_bindir}/logika
#!/bin/bash
cd %{_datadir}/Logika
python logika.py
EOF
chmod 0755 %{buildroot}%{_bindir}/logika
%files
%doc README(RUS) README(ENG) COPYING
%{_bindir}/logika
%dir %{_datadir}/Logika/
%{_datadir}/Logika/*
 
			
					
				Re: Сборка RPM
				Добавлено: 01 июл 2015, 00:34
				 Ukropchik
				И снова ошибка:
Код: Выделить всё
+ cat
/var/tmp/rpm-tmp.24020: line 33: /home/weedman/rpmbuild/BUILDROOT/Logika-1.0.0-1-rosa2014.1.x86_64-buildroot/usr/bin/logika: No such file or directory
error: Неверный код возврата из /var/tmp/rpm-tmp.24020 (%install)
Не могу понять из-за чего такое. По идеи cat<<EOF> должна создать файл если его нет.
 
			
					
				Re: Сборка RPM
				Добавлено: 01 июл 2015, 02:23
				 Pulfer
				Ukropchik писал(а):Не могу понять из-за чего такое. По идеи cat<<EOF> должна создать файл если его нет.
А, ну надо предварительно каталог создать ещё:
А потом cat сделать.
 
			
					
				Re: Сборка RPM
				Добавлено: 02 июл 2015, 19:36
				 Ukropchik
				Итак, теперь удалось собрать пакет. Сначала была ошибка что файлы README и другие не найдены, но это было из-за того что они были не каталоге BUILD. Теперь, когда я всё собрал по какой-то причине не скопировался сам контент (звук, спрайты и т.д.) Может их необходимо в какой-то другой каталог перенести? Имеется три папки font, image, sound. Необходимо что-бы они были вместе с исходниками в /usr/share/Logika.
И ещё один вопрос. Обязательно выполнять сборку пакета из /bin/sh или всё же достаточно /bin/bash?
			 
			
					
				Re: Сборка RPM
				Добавлено: 03 июл 2015, 01:59
				 Pulfer
				Ukropchik писал(а):Теперь, когда я всё собрал по какой-то причине не скопировался сам контент (звук, спрайты и т.д.) Может их необходимо в какой-то другой каталог перенести? Имеется три папки font, image, sound. Необходимо что-бы они были вместе с исходниками в /usr/share/Logika.
Они не указаны среди исходников:
Код: Выделить всё
Source0:        logika.py
Source1:        game.py
Source2:        basic.py
Поэтому всё же лучше не перечислять каждый файл отдельно, а упаковать всё в тарбол logika-1.0.0.tar.xz (или gz/bz2), включая контент.
А потом в %install-секции: 
Код: Выделить всё
cp -r  font image sound %{buildroot}%{_datadir}/Logika/
Ukropchik писал(а):И ещё один вопрос. Обязательно выполнять сборку пакета из /bin/sh или всё же достаточно /bin/bash?
Достаточно, конечно.
 
			
					
				Re: Сборка RPM
				Добавлено: 04 июл 2015, 11:21
				 Ukropchik
				Упаковал необходимые файлы в tar.gz.
Теперь spec-файл такой:
Код: Выделить всё
Summary:        Logic game
Name:           Logika
Version:        1.0.0
Release:        1
License:        GPLv3+
URL:            https://github.com/RastaDill/Logika
Group:          Games/Puzzles
Source0:        %{name}-%{version}.tar.gz
Requires:       python
Requires:       pygame
%description
This is logical game written on python and pygame.
%prep
%setup -q
%build
%install
mkdir -p %{buildroot}%{_datadir}/Logika
cp * %{buildroot}%{_datadir}/Logika/
mkdir -p %{buildroot}%{_bindir}
cat<<EOF>%{buildroot}%{_bindir}/logika
#!/bin/bash
cd %{_datadir}/Logika/
python logika.py
EOF
chmod 0755 %{buildroot}%{_bindir}/logika
%files
%doc README_RUS README_ENG COPYING
%{_bindir}/logika
%dir %{_datadir}/Logika/
%{_datadir}/Logika/*
Ошибка вылетает на моменте %prep.
Код: Выделить всё
$ rpmbuild -ba logika.spec
Выполняется(%prep): /bin/sh -e /var/tmp/rpm-tmp.77188
+ umask 022
+ cd /home/weedman/rpmbuild/BUILD
+ '[' 1 -eq 1 ']'
+ '[' 1 -eq 1 ']'
+ '[' 1 -eq 1 ']'
+ cd /home/weedman/rpmbuild/BUILD
+ rm -rf Logika-1.0.0
+ /bin/gzip -dc /home/weedman/rpmbuild/SOURCES/Logika-1.0.0.tar.gz
+ /bin/tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd Logika-1.0.0
/var/tmp/rpm-tmp.77188: line 35: cd: Logika-1.0.0: No such file or directory
error: Неверный код возврата из /var/tmp/rpm-tmp.77188 (%prep)
Ошибки сборки пакетов:
    Неверный код возврата из /var/tmp/rpm-tmp.77188 (%prep)
Во время сборки я так понимаю происходит переход в каталог Logika-1.0.0 которого соответственно нет. Выставлял параметр -n %{buildroot}%{_datadir}/Logika перед этим создавая директорию. Всё равно такая ошибка
 
			
					
				Re: Сборка RPM
				Добавлено: 05 июл 2015, 15:45
				 Pulfer
				Ukropchik писал(а):Name:           Logika
Лучше всё же маленькие буквы использовать в названии пакетов. Не принципиально, просто предпочтительнее, "так принято".
Ukropchik писал(а):Во время сборки я так понимаю происходит переход в каталог Logika-1.0.0 которого соответственно нет. Выставлял параметр -n %{buildroot}%{_datadir}/Logika перед этим создавая директорию. Всё равно такая ошибка
Надо указать тот каталог, который получается после распаковки тарбола.
Скажем, если после распаковки Logika-1.0.0.tar.gz получаем каталог Logika, внутри которого лежат все файлы, то указываем:
Здесь q - это quiet, то есть не выводить в лог сборки информацию о распакованных файлах. А n - это аргумент для команды cd после распаковки тарбола. По умолчанию значение n - %{version}-%{release}. То есть в данном случае Logika-1.0.0.
Если же файлы распаковываются не в подкаталог, то надо указать:
Здесь c - это указание создать подкаталог, в который распаковать тарбол. Создастся rpmbuild/BUILD/Logika-1.0.0. Можно также указать другое значение n, но смысла в этом нет.
В общем, надо просто исходить из структуры тарбола.
 
			
					
				Re: Сборка RPM
				Добавлено: 07 июл 2015, 17:42
				 Ukropchik
				Почти получилось. Собирается пакет но в конце появляется ошибка в сборке.
Вот мой текущий spec-файл:
Код: Выделить всё
Summary:        Logic game
Name:           logika
Version:        1.0.0
Release:        1
License:        GPLv3+
URL:            https://github.com/RastaDill/Logika
Group:          Games/Puzzles
Source0:        %{name}-%{version}.tar.gz
Requires:       python
Requires:       pygame
%description
This is logical game written on python and pygame.
%prep
%setup -qn logika
%build
%install
mkdir -p %{buildroot}%{_datadir}/logika
cp *.py %{buildroot}%{_datadir}/logika/
cp -r font image sound %{buildroot}%{_datadir}/logika/
mkdir -p %{buildroot}%{_bindir}
cat<<EOF>%{buildroot}%{_bindir}/logika
#!/bin/bash
cd %{_datadir}/logika/
python logika.py
EOF
chmod 0755 %{buildroot}%{_bindir}/logika
%files
%doc README_RUS README_ENG COPYING
%{_bindir}/logika
%dir %{_datadir}/logika/
%{_datadir}/logika/*
Далее после сборки выдаётс следующее сообщение:
Код: Выделить всё
Ошибки сборки пакетов:
    Package check "/usr/bin/rpmlint -T -f /home/weedman/rpmbuild/SOURCES/logika.rpmlintrc /home/weedman/rpmbuild/RPMS/x86_64/logika-1.0.0-1-rosa2014.1.x86_64.rpm /home/weedman/rpmbuild/RPMS/x86_64/logika-debuginfo-1.0.0-1-rosa2014.1.x86_64.rpm" failed.
Весь процесс сборки:
 
			
					
				Re: Сборка RPM
				Добавлено: 07 июл 2015, 17:55
				 VictorR2007
				Наверное к строке
chmod 0755 %{buildroot}%{_bindir}/logika
нужно добавить
chmod -R 755 %{buildroot}%{_datadir}/logika/*
			 
			
					
				Re: Сборка RPM
				Добавлено: 07 июл 2015, 19:24
				 Pulfer
				VictorR2007 писал(а):Наверное к строке
chmod 0755 %{buildroot}%{_bindir}/logika
нужно добавить
chmod -R 755 %{buildroot}%{_datadir}/logika/*
Лучше в изначальном тарболе права поправить, чтобы вместо 0600 было 0644, а вместо 0700 было 0755.
А что касается вот этой ошибки:
Код: Выделить всё
logika-debuginfo.x86_64: E: empty-debuginfo-package (Badness: 50)
То надо в спеке прописать тэг (рядом с другими тэгами - Requires: и т.п.):
 
			
					
				Re: Сборка RPM
				Добавлено: 09 июл 2015, 12:39
				 Ukropchik
				Ура  

 . Большое спасибо за помощь. Пакет собран и работает. Вот такой конечный получился spec-файл:
Код: Выделить всё
Summary:        Logic game
Name:           logika
Version:        1.0.0
Release:        1
License:        GPLv3+
URL:            https://github.com/RastaDill/Logika
Group:          Games/Puzzles
Source0:        %{name}-%{version}.tar.gz
Requires:       python
Requires:       pygame
BuildArch:      noarch
%description
This is logical game written on python and pygame.
%prep
%setup -qn logika
%build
%install
mkdir -p %{buildroot}%{_datadir}/logika
cp *.py %{buildroot}%{_datadir}/logika/
cp -r font image sound %{buildroot}%{_datadir}/logika/
mkdir -p %{buildroot}%{_bindir}
cat<<EOF>%{buildroot}%{_bindir}/logika
#!/bin/bash
cd %{_datadir}/logika/
python logika.py
EOF
chmod 0755 %{buildroot}%{_bindir}/logika
mkdir -p %{buildroot}%{_datadir}/applications/
cat<<EOF>%{buildroot}%{_datadir}/applications/logika.desktop
[Desktop Entry]
Version=1.0.0
Name=Logika
Comment=Logic game 
Type=Application
Exec=logika
Icon=%{_datadir}/logika/image/icon.png
Categories=Game;PuzzleGame;
EOF
chmod 0755 %{buildroot}%{_datadir}/applications/logika.desktop
%files
%doc README_RUS README_ENG COPYING
%{_bindir}/logika
%{_datadir}/applications/logika.desktop
%dir %{_datadir}/logika/
%{_datadir}/logika/*
 
			
					
				Re: Сборка RPM
				Добавлено: 13 ноя 2015, 20:11
				 tverskoy
				Помогите разобраться, учусь работать с abf, ковыряю cinnamon. Недостающие пакеты при сборке смотреть в rpm-build.log ?
Код: Выделить всё
+ /usr/share/spec-helper/clean_files /builddir/build/BUILDROOT/cinnamon-desktop-2.8.0-1-rosa2014.1.i586-buildroot/usr/share/doc/cinnamon-desktop
Requires: libX11.so.6 libXrandr.so.2 libc.so.6 libc.so.6(GLIBC_2.0) libcinnamon-desktop.so.4 libgdk-3.so.0 libglib-2.0.so.0 libgobject-2.0.so.0 libgtk-3.so.0 libpthread.so.0
Processing files: libcinnamon-desktop4-2.8.0-1.i586
Processing files: libcinnamon-desktop-gir1.0-2.8.0-1.i586
error: File not found by glob: /builddir/build/BUILDROOT/cinnamon-desktop-2.8.0-1-rosa2014.1.i586-buildroot/usr/lib/libcinnamon-desktop*.so.4{,.*}
ERROR: Failed to load typelib 'CDesktopEnums'
ERROR: Failed to load typelib 'CinnamonDesktop'
Provides: typelib(CDesktopEnums) = 3.0 typelib(CinnamonDesktop) = 3.0
Processing files: libcinnamon-desktop-devel-2.8.0-1.i586
Provides: devel(libcinnamon-desktop) pkgconfig(cinnamon-desktop) = 2.8.0
Requires: devel(libX11) devel(libXext) devel(libXrandr) devel(libcairo) devel(libgdk-3) devel(libgdk_pixbuf-2.0) devel(libgio-2.0) devel(libglib-2.0) devel(libgobject-2.0) devel(libgtk-3) devel(libxkbfile) pkgconfig(gtk+-3.0)
Processing files: cinnamon-desktop-debuginfo-2.8.0-1.i586
Checking for unpackaged file(s): /usr/lib/rpm/check-files /builddir/build/BUILDROOT/cinnamon-desktop-2.8.0-1-rosa2014.1.i586-buildroot
error: Installed (but unpackaged) file(s) found:
	/usr/lib/libcinnamon-desktop.so.4
	/usr/lib/libcinnamon-desktop.so.4.0.0
RPM build errors:
    File not found by glob: /builddir/build/BUILDROOT/cinnamon-desktop-2.8.0-1-rosa2014.1.i586-buildroot/usr/lib/libcinnamon-desktop*.so.4{,.*}
    Installed (but unpackaged) file(s) found:
	/usr/lib/libcinnamon-desktop.so.4
	/usr/lib/libcinnamon-desktop.so.4.0.0
Child returncode was: 1
EXCEPTION: Command failed. See logs for output.
 # ['bash', '--login', '-c', 'rpmbuild -bb --target i586 --nodeps builddir/build/SPECS/cinnamon-desktop.spec']
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/mock_urpm/trace_decorator.py", line 70, in trace
    result = func(*args, **kw)
  File "/usr/lib/python2.7/site-packages/mock_urpm/util.py", line 377, in do
    raise mock_urpm.exception.Error, ("Command failed. See logs for output.\n # %s" % (command,), child.returncode)
Error: Command failed. See logs for output.
 # ['bash', '--login', '-c', 'rpmbuild -bb --target i586 --nodeps builddir/build/SPECS/cinnamon-desktop.spec']
LEAVE do --> EXCEPTION RAISED
почему-то не упаковывается уже собранный файл, помогите разобраться
в спеке заменил BuildRequires: gobject-introspection-devel на  girepository-devel
оригинальный спек
Код: Выделить всё
%global _internal_version                 fcbafe3
%global gtk3_version                      3.10.0
%global glib2_version                     2.33.3
%global startup_notification_version      0.5
%global gtk_doc_version                   1.9
%global po_package                        cinnamon-desktop-3.0
%global date				  20151020
%define major   4
%define girmajor   1.0
%define libname %mklibname %{name} %{major}
%define libdev  %mklibname %{name} -d
%define girlib    %mklibname %{name}-gir %{girmajor}
Summary: Shared code among cinnamon-session, nemo, etc
Name:    cinnamon-desktop
Version: 2.8.0
Release: %mkrel 1
License: GPLv2+ and LGPLv2+ add MIT
Group:   Graphical desktop/Cinnamon
URL:     http://cinnamon.linuxmint.com
Source0: cinnamon-desktop-%{version}.tar.gz
#SourceGet0: https://github.com/linuxmint/cinnamon-desktop/archive/%{version}.tar.gz
#Source0: cinnamon-desktop-%{version}.git%{_internal_version}.tar.gz
##SourceGet0: https://github.com/linuxmint/cinnamon-desktop/tarball/%{_internal_version}
# Make sure that gnome-themes-standard gets pulled in for upgrades
Requires: gnome-themes-standard
BuildRequires: gnome-common
BuildRequires: pkgconfig(gtk+-3.0) >= %{gtk3_version}
BuildRequires: gobject-introspection-devel
BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version}
BuildRequires: startup-notification-devel >= %{startup_notification_version}
BuildRequires: pkgconfig(xkbfile)
BuildRequires: pkgconfig(xkeyboard-config)
BuildRequires: gtk-doc >= %{gtk_doc_version}
BuildRequires: intltool
BuildRequires: itstool
%description
The cinnamon-desktop package contains an internal library
(libcinnamondesktop) used to implement some portions of the CINNAMON
desktop, and also some data files and other shared components of the
CINNAMON user environment.
#--------------------------------------------------------------------
%package -n %libname
Summary:  Libraries for %name
License:  LGPLv2+
Group:    System/Libraries
%description -n %libname
Libraries for %name
#--------------------------------------------------------------------
%package -n %{girlib}
Summary: GObject introspection interface library for %{name}
Group: System/Libraries
Requires: %{libname} = %{version}-%{release}
%description -n %{girlib}
GObject introspection interface library for %{name}.
#--------------------------------------------------------------------
%package -n %libdev
Summary:  Libraries and headers for libcinnamon-desktop
License:  LGPLv2+
Group:    Development/C
Requires: %{libname} = %{version}-%{release}
Requires: %{girlib} = %{version}-%{release}
Requires: gtk3-devel >= %{gtk3_version}
Requires: glib2-devel >= %{glib2_version}
Requires: startup-notification-devel >= %{startup_notification_version}
%description -n %libdev
Libraries and header files for the CINNAMON-internal private library
libcinnamondesktop.
%prep
%setup -q
sed -i -e 's!subdir-objects!!g' configure.ac
NOCONFIGURE=1 ./autogen.sh
%build
%configure --with-pnp-ids-path="%{_datadir}/misc/pnp.ids"
sed -i -e 's! -shared ! -Wl,--as-needed\0!g' libtool
%make V=1 
%install
%{make_install}
# stuff we don't want
rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
rm -f $RPM_BUILD_ROOT%{_libdir}/*.a
%find_lang %{po_package} --all-name --with-gnome
%files -f %{po_package}.lang
%doc AUTHORS COPYING COPYING.LIB README
%{_datadir}/glib-2.0/schemas/org.cinnamon.*.xml
%{_libexecdir}/cinnamon-rr-debug
%{_bindir}/cinnamon-desktop-migrate-mediakeys
%files -n %libname
%{_libdir}/libcinnamon-desktop*.so.%{major}{,.*}
%files -n %{girlib}
%{_libdir}/girepository-1.0/C*-3.0.typelib
%files -n %libdev
%{_libdir}/libcinnamon-desktop.so
%{_libdir}/pkgconfig/cinnamon-desktop.pc
%{_includedir}/cinnamon-desktop/
%{_datadir}/gir-1.0/C*-3.0.gir
%changelog
* Wed Oct 21 2015 joequant <joequant> 2.8.0-1.mga6
+ Revision: 893688
- upgrade to 2.8.0
* Sun Jun 28 2015 wally <wally> 2.6.5-2.mga6
+ Revision: 847157
- add requires for gir pkg to devel pkg
* Fri Jun 26 2015 joequant <joequant> 2.6.5-1.mga6
+ Revision: 844285
- upgrade to 2.6
* Thu Nov 27 2014 joequant <joequant> 2.4.2-1.mga5
+ Revision: 799543
- 2.4.2
* Sun Nov 23 2014 joequant <joequant> 2.4.1-1.mga5
+ Revision: 798406
- upgrade to 2.4
* Wed Oct 15 2014 umeabot <umeabot> 2.2.3-5.mga5
+ Revision: 745259
- Second Mageia 5 Mass Rebuild
* Sun Sep 28 2014 tv <tv> 2.2.3-4.mga5
+ Revision: 731111
- rebuild so that it picks typelib() requires
* Thu Sep 18 2014 umeabot <umeabot> 2.2.3-3.mga5
+ Revision: 693609
- Rebuild to fix library dependencies
* Tue Sep 16 2014 umeabot <umeabot> 2.2.3-2.mga5
+ Revision: 678397
- Mageia 5 Mass Rebuild
* Tue Jun 10 2014 joequant <joequant> 2.2.3-1.mga5
+ Revision: 635329
- upgrade to 2.2.3
* Thu May 15 2014 joequant <joequant> 2.2.2-1.mga5
+ Revision: 622879
- upgrade to 2.2.2
* Fri Apr 18 2014 joequant <joequant> 2.2.0-1.mga5
+ Revision: 616819
- upgrade to 2.2
* Wed Jan 08 2014 joequant <joequant> 2.0.4-3.mga4
+ Revision: 565561
- push to core/release
* Wed Jan 01 2014 joequant <joequant> 2.0.4-2.mga4
+ Revision: 563806
- upgrade to 2.0.4
* Tue Oct 22 2013 umeabot <umeabot> 2.0.1-2.mga4
+ Revision: 542039
- Mageia 4 Mass Rebuild
* Mon Oct 14 2013 joequant <joequant> 2.0.1-1.mga4
+ Revision: 496762
- update to 2.0.1
* Mon Oct 07 2013 joequant <joequant> 2.0.0-1.mga4
+ Revision: 492506
- packaged wrong source
- update to 2.0.0
* Tue Oct 01 2013 joequant <joequant> 1.9.1-1.mga4
+ Revision: 490048
- upgrade to 1.9.1
* Thu Sep 19 2013 joequant <joequant> 1.0.0-0.20130905git37ca83b.1.mga4
+ Revision: 481370
- sync with git
* Mon Sep 02 2013 neoclust <neoclust> 1.0.0-0.1.gitea72b22.1.mga4
+ Revision: 474292
- Libify
* Mon Sep 02 2013 joequant <joequant> 1.0.0-0.1.gitea72b22.mga4
+ Revision: 474250
- update to latest git version
- imported package cinnamon-desktop
 
			
					
				Re: Сборка RPM
				Добавлено: 13 ноя 2015, 20:26
				 Pulfer
				tverskoy писал(а):File not found by glob: /builddir/build/BUILDROOT/cinnamon-desktop-2.8.0-1-rosa2014.1.i586-buildroot/usr/lib/libcinnamon-desktop*.so.4{,.*}
    Installed (but unpackaged) file(s) found:
	/usr/lib/libcinnamon-desktop.so.4
	/usr/lib/libcinnamon-desktop.so.4.0.0
Надо в спеке заменить
Код: Выделить всё
%{_libdir}/libcinnamon-desktop*.so.%{major}{,.*}
На
Код: Выделить всё
%{_libdir}/libcinnamon-desktop.so.%{major}*
Этого достаточно, чтобы описать /usr/lib/libcinnamon-desktop.so.4 и /usr/lib/libcinnamon-desktop.so.4.0.0. Видимо, в Магее регулярные выражение в RPM-спеках немного по-другому работают, если их вариант у них нормально собирается.
 
			
					
				Re: Сборка RPM
				Добавлено: 13 ноя 2015, 21:00
				 tverskoy
				Мог бы разницу объяснить? А то я до таких тонкостей недошёл
			 
			
					
				Re: Сборка RPM
				Добавлено: 13 ноя 2015, 21:48
				 Pulfer
				tverskoy писал(а):Мог бы разницу объяснить? А то я до таких тонкостей недошёл
У нас есть файлы
/usr/lib/libcinnamon-desktop.so.4
/usr/lib/libcinnamon-desktop.so.4.0.0
/usr/lib/ (и /usr/lib64/ для 64-битной сборки) описывается макросом %{_libdir}/
Далее идёт общая для двух файлов часть libcinnamon-desktop.so, указываем её как есть. В Магее зачем-то * вставили туда, а * означает любой символ. Хотя у нас только libcinnamon-desktop.so, а никаких libcinnamon-desktop-ui.so, libcinnamon-desktop-widgets.so и т.п. файлов нет. Совершенно лишнее усложнение маски получается.
И в конце идёт разная для двух файлов часть 4 и 4.0.0. Где 4 - это так называемая major-версия библиотеки. Т.е. по зависимостям она будет потом запрашиваться как libcinnamon-desktop.so.4. А пакет согласно политикам сборки библиотек будет иметь вид libcinnamon-desktop4 (и lib64cinnamon-desktop4 для 64-бит). 4.0.0 - это полная версия библиотеки, файл /usr/lib/libcinnamon-desktop.so.4 - это симлинк на /usr/lib/libcinnamon-desktop.so.4.0.0.
В спеке выше мы задаём макросы:
%define major 4
%define libname %mklibname %{name} %{major}
И потом используем %{major}* для описания последней части имен файлов:
%{_libdir}/libcinnamon-desktop.so.%{major}*
Макрос %{major}* раскрывается в 4*, т.е. 4 и все символы, которые идут после него.
Макросы тут нужны для того, чтобы если в следующей версии из апстрима библиотека не будет обратно совместимой с данной версией и её major-версия станет 5 (/usr/lib/libcinnamon-desktop.so.5), то нам достаточно будет поменять в спеке %define major 4 на %define major 5, чтобы получить пакет libcinnamon-desktop5.
А если бы мы использовали в описании файлов какой-нибудь совсем общий вариант вроде %{_libdir}/lib*.so.*, то был бы риск получить в будущем пакет libcinnamon-desktop4 с файлами /usr/lib/libcinnamon-desktop.so.5, затем /usr/lib/libcinnamon-desktop.so.6 и далее. Что в этом плохого - отдельная тема, наверное.
Возвращаясь к регулярным выражениям, то магеевское {,.*}, видимо, должно было охватывать случаи "" (ничего) и ".*" (точка, а затем любые символы). Зачем такое усложнение - я не знаю. Единственную пользу вижу в том, чтобы отличать /usr/lib/libcinnamon-desktop.so.1.0.0 от /usr/lib/libcinnamon-desktop.so.10.0.0, тогда как для %{major}* разницы между 1* и 10* нет. Но можно для этого случая сделать так:
%{_libdir}/libcinnamon-desktop.so.%{major}
%{_libdir}/libcinnamon-desktop.so.%{major}.*
Надеюсь, понятно объяснил, а то как-то многословно вышло.
 
			
					
				Re: Сборка RPM
				Добавлено: 13 ноя 2015, 22:04
				 tverskoy
				спасибо, буду разбираться
			 
			
					
				Re: Сборка RPM
				Добавлено: 15 ноя 2015, 03:18
				 notauser
				{, вроде как целое десятичное число, потом символ . и всё что угодно*. Но это, видимо, то что хотели, а получили как всегда, то что просили. 

ibcinnamon-desktop*.so.4.{,.*} не пробовали?
 
			
					
				Re: Сборка RPM
				Добавлено: 15 ноя 2015, 07:54
				 Алзим
				notauser писал(а):{, вроде как целое десятичное число, потом символ . и всё что угодно*. Но это, видимо, то что хотели, а получили как всегда, то что просили. 

ibcinnamon-desktop*.so.4.{,.*} не пробовали?
 
А почему бы вам самому не попробовать собрать пакеты?
 
			
					
				Re: Сборка RPM
				Добавлено: 17 ноя 2015, 14:43
				 tverskoy
				Эх, сложно на ABF собирать, тесты не проходят, базовую библиотеку собрал, с остальным сложно все 

 где вобще про abf можно почитать?
 
			
					
				Re: Сборка RPM
				Добавлено: 17 ноя 2015, 14:45
				 keleg
				tverskoy писал(а):Эх, сложно на ABF собирать, тесты не проходят 

 
Версию не подняли? Там, в логах, для тестов обычно понятно, что к чему.
 
			
					
				Re: Сборка RPM
				Добавлено: 17 ноя 2015, 14:51
				 tverskoy
				Код: Выделить всё
==> See: 'https://abf.io/build_lists/2597681'
Executing "/usr/bin/rpmlint -T -f /builddir/build/SOURCES/cinnamon-menus.rpmlintrc /builddir/build/SRPMS/cinnamon-menus-2.8.0-1.src.rpm":
cinnamon-menus.src:13: W: macro-in-comment %{name}
cinnamon-menus.src:13: W: macro-in-comment %{name}
cinnamon-menus.src:13: W: macro-in-comment %{version}
cinnamon-menus.src:13: W: macro-in-comment %{_internal_version}
cinnamon-menus.src:15: W: macro-in-comment %{name}
cinnamon-menus.src:15: W: macro-in-comment %{version}
1 packages and 0 specfiles checked; 0 errors, 6 warnings.
Executing "/usr/bin/rpmlint -T -f /builddir/build/SOURCES/cinnamon-menus.rpmlintrc /builddir/build/RPMS/cinnamon-menus-2.8.0-1-rosa2014.1.x86_64.rpm /builddir/build/RPMS/cinnamon-menus-devel-2.8.0-1-rosa2014.1.x86_64.rpm /builddir/build/RPMS/cinnamon-menus-debuginfo-2.8.0-1-rosa2014.1.x86_64.rpm":
cinnamon-menus-devel.x86_64: W: no-major-in-name cinnamon-menus-devel
cinnamon-menus-devel.x86_64: W: no-documentation
cinnamon-menus-devel.x86_64: W: no-dependency-on cinnamon-menus/cinnamon-menus-libs/libcinnamon-menus
cinnamon-menus.x86_64: E: incoherent-version-in-name (Badness: 50) 3
3 packages and 0 specfiles checked; 1 errors, 3 warnings.
И что интересно этот же пакет собрался для 2012.1, случайно галочку не туда поставил
Вобщем учусь
 
			
					
				Re: Сборка RPM
				Добавлено: 17 ноя 2015, 15:17
				 Pulfer
				tverskoy писал(а):cinnamon-menus.x86_64: E: incoherent-version-in-name (Badness: 50) 3
Это значит, что имя пакета не соответствует политике сборки библиотек: 
http://wiki.rosalab.com/ru/index.php/Libraries_policy
Судя по спеку, в Магею его импортировали из Федоры и не стали адаптировать под свою политику сборки (она в целом такая же, как и у Росы, т.к. идёт ещё от Мандривы).
Вот этот кусок, кстати, можно вообще убрать:
Код: Выделить всё
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
В Росе ldconfig вызывается автоматически (где он нужен после установки пакетов).
Что касается самой библиотеки libcinnamon-menu-3.so.0, то 
%define api 3
%define major 0
%define libname cinnamon-menu %{api} %{major}
%define devname cinnamon-menu %{api} -d
(в devel-пакете %{api} указывается опционально - если видно, что в именах файлов он тоже фигурирует, то указать его желательно).
А т.к. они фигурируют:
/usr/include/cinnamon-menus-3.0
/usr/lib64/libcinnamon-menu-3.so
/usr/lib64/pkgconfig/libcinnamon-menu-3.0.pc
То лучше указать.
Ну и далее согласно политике сборки описать в спеке пакеты
%package -n %{libname}
и
%package -n %{devname}
Для официального пакета ещё typelib и gir файлы надо было бы правильно упаковать, но мне кажется, что пока что с ними и так сойдёт, пусть typelib будет в пакете с библиотекой. Или если с библиотеками всё уже понятно, могу дальше про typelib рассказать.
 
			
					
				Re: Сборка RPM
				Добавлено: 17 ноя 2015, 18:10
				 tverskoy
				Линт ругается
Код: Выделить всё
==> See: 'https://abf.io/build_lists/2598836'
Executing "/usr/bin/rpmlint -T -f /builddir/build/SOURCES/cinnamon-menus.rpmlintrc /builddir/build/SRPMS/cinnamon-menus-2.8.0-1.src.rpm":
cinnamon-menus.src: E: specfile-error (Badness: 1) error: Bad package specification: %package -n cinnamon-menus 3 -d
cinnamon-menus.src:18: W: macro-in-comment %{name}
cinnamon-menus.src:18: W: macro-in-comment %{name}
cinnamon-menus.src:18: W: macro-in-comment %{version}
cinnamon-menus.src:18: W: macro-in-comment %{_internal_version}
cinnamon-menus.src:20: W: macro-in-comment %{name}
cinnamon-menus.src:20: W: macro-in-comment %{version}
1 packages and 0 specfiles checked; 1 errors, 6 warnings.
Получилось так
Код: Выделить всё
%global enable_debugging 0
#global _internal_version f22e07d
%define api 3
%define major 0
%define libname %{name} %{api} %{major}
%define devname %{name} %{api} -d
Summary:  A menu system for the Cinnamon project
Name: cinnamon-menus
Version: 2.8.0
Release: %mkrel 1
License: LGPLv2+
Group: Graphical desktop/Cinnamon
URL: http://cinnamon.linuxmint.com 
# for git
# wget https://github.com/linuxmint/cinnamon-menus/tarball/%%{_internal_version} -O cinnamon-menus-%%{version}.git%%{_internal_version}.tar.gz
#Source0:        http://leigh123linux.fedorapeople.org/pub/%{name}/source/%{name}-%{version}.git%{_internal_version}.tar.gz
Source0:       %{name}-%{version}.tar.gz
#SourceGet0: https://github.com/linuxmint/%{name}/archive/%{version}.tar.gz
BuildRequires: glib2-devel
BuildRequires: pkgconfig
BuildRequires: python-devel
BuildRequires: intltool
BuildRequires: girepository-devel
BuildRequires: gnome-common
%description
cinnamon-menus is an implementation of the draft "Desktop
Menu Specification" from freedesktop.org. This package
also contains the Cinnamon menu layout configuration files,
.directory files and assorted menu related utility programs,
Python bindings, and a simple menu editor.
%package -n %{devname}
Summary: Libraries and include files for the Cinnamon menu system
Group: Development/C
Requires: %{name}%{?_isa} = %{version}-%{release}
%description devel
This package provides the necessary development libraries for
writing applications that use the Cinnamon menu system.
%prep
%setup -q
NOCONFIGURE=1 ./autogen.sh
%build
%configure --disable-static \
   --enable-introspection \
%if %{enable_debugging}
   --enable-debug=yes
%else
   --enable-debug=no
%endif
%make V=1
%install
%{make_install}
find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
%files
%doc AUTHORS NEWS COPYING.LIB
%{_libdir}/lib*.so.*
%{_libdir}/girepository-1.0/C*-3.0.typelib
%files devel
%{_libdir}/lib*.so
%{_libdir}/pkgconfig/*
%{_includedir}/cinnamon-menus-3.0
%{_datadir}/gir-1.0/C*-3.0.gir
%changelog
* Wed Oct 21 2015 joequant <joequant> 2.8.0-1.mga6
+ Revision: 893697
- upgrade to 2.8.0
* Fri Jun 26 2015 joequant <joequant> 2.6.0-1.mga6
+ Revision: 844318
- add gnome common
- upgrade to 2.6
* Wed Dec 03 2014 tmb <tmb> 2.4.0-2.mga5
+ Revision: 800483
- bump rel past testing
* Sun Nov 23 2014 joequant <joequant> 2.4.0-1.mga5
+ Revision: 798405
- upgrade to 2.4
* Wed Oct 15 2014 umeabot <umeabot> 2.2.0-5.mga5
+ Revision: 742819
- Second Mageia 5 Mass Rebuild
* Thu Sep 18 2014 umeabot <umeabot> 2.2.0-4.mga5
+ Revision: 693610
- Rebuild to fix library dependencies
* Tue Sep 16 2014 umeabot <umeabot> 2.2.0-3.mga5
+ Revision: 678398
- Mageia 5 Mass Rebuild
* Wed May 14 2014 joequant <joequant> 2.2.0-2.mga5
+ Revision: 622768
- rebuild for cauldron
* Sat Apr 19 2014 joequant <joequant> 2.2.0-1.mga5
+ Revision: 616949
- imported package cinnamon-menus
* Sat Apr 12 2014 Leigh Scott <leigh123linux@googlemail.com> - 2.2.0-1
- update to 2.2.0
* Sat Mar 22 2014 Leigh Scott <leigh123linux@googlemail.com> - 2.1-0.1.gitc740513
- inital release
Или %define devname %{name} %{api} -d заменить на %define devname %{name} -%{api} -d
?
Пробовал api убрать, тоже не нравится
 
			
					
				Re: Сборка RPM
				Добавлено: 17 ноя 2015, 18:25
				 Алзим
				Собрал пакет 
https://abf.io/build_lists/2598817
Установил себе. Всё работает вроде. Разницы с тем, что было в репозитории не заметил.
Основной цели не добился. Хотел чтобы Вайбер был на русском, но не знаю как это сделать. Но, в процессе установки, в логе видел, что русская локаль есть. А вот как её поставить?
 
			
					
				Re: Сборка RPM
				Добавлено: 17 ноя 2015, 18:34
				 Pulfer
				tverskoy писал(а):Линт ругается
Упс, моя вина. Забыл макрос %mklibname вставить в определение:
Код: Выделить всё
%define libname %mklibname cinnamon-menu %{api} %{major}
%define devname %mklibname cinnamon-menu %{api} -d
Этот макрос делает вот что. На 32-битной системе libname получит значение libcinnamon-menu3_0, а на 64-битной lib64cinnamon-menu3_0. А devname - libcinnamon-menu3-devel и lib64cinnamon-menu3-devel соответственно.
 
			
					
				Re: Сборка RPM
				Добавлено: 17 ноя 2015, 19:37
				 tverskoy
				Я правильно понял что в спеке cinnamon desktop (он собран уже)
Код: Выделить всё
%define major   4
%define girmajor   1.0
%define libname %mklibname %{name} %{major}
%define devname  %mklibname %{name} -d
%define girlib    %mklibname %{name}-gir %{girmajor}
%{name} надо заменить на названия пакетов?
 
			
					
				Re: Сборка RPM
				Добавлено: 17 ноя 2015, 20:00
				 Pulfer
				tverskoy писал(а):Я правильно понял что в спеке cinnamon desktop (он собран уже)
Код: Выделить всё
%define major   4
%define girmajor   1.0
%define libname %mklibname %{name} %{major}
%define devname  %mklibname %{name} -d
%define girlib    %mklibname %{name}-gir %{girmajor}
%{name} надо заменить на названия пакетов?
 
%{name} заменять не надо, т.к. этот макрос задаётся тэгом Name: в спеке. Т.е. макрос %{name} как раз подставляет имя пакета. Но %{name} (или явно указанное имя пакета) надо использовать в том случае, если имя библиотеки и имя пакета совпадают. Обычно так и бывает, но не всегда. Тогда надо ориентироваться на имя библиотеки. Которое до сборки пакета может быть ещё не известно. 
Макросы бывают нескольких видов.
1. Пользовательские - это всё, что указывается в спеке через %define. Например, если сделать "%define XXX Test", то дальше в спеке вместо %{XXX} будет подставляться Test.
2. Автоматические - это то, что автоматически определяется при сборке пакета. В частности, тэгу Name соответствует макрос %{name}, Version - %{version} и т.п. Самый частый пример их использования - в тэге Source.
3. Системные - это то, что прописано в macros-файлах из /etc/rpm/macros.d/ и /usr/lib/rpm/macros.d/
В строке "%define libname %mklibname %{name} %{major}" определяется пользовательский макрос libname через системный макрос %mklibname (из /usr/lib/rpm/macros.d/mandriva), вызываемый с параметрами: автоматческий макрос %{name} и пользовательский макрос %{major}.
 
			
					
				Re: Сборка RPM
				Добавлено: 17 ноя 2015, 22:56
				 tverskoy
				Код: Выделить всё
==> See: 'https://abf.io/build_lists/2598994'
Executing "/usr/bin/rpmlint -T -f /builddir/build/SOURCES/cinnamon-menus.rpmlintrc /builddir/build/SRPMS/cinnamon-menus-2.8.0-1.src.rpm":
cinnamon-menus.src:18: W: macro-in-comment %{name}
cinnamon-menus.src:18: W: macro-in-comment %{name}
cinnamon-menus.src:18: W: macro-in-comment %{version}
cinnamon-menus.src:18: W: macro-in-comment %{_internal_version}
cinnamon-menus.src:20: W: macro-in-comment %{name}
cinnamon-menus.src:20: W: macro-in-comment %{version}
1 packages and 0 specfiles checked; 0 errors, 6 warnings.
Executing "/usr/bin/rpmlint -T -f /builddir/build/SOURCES/cinnamon-menus.rpmlintrc /builddir/build/RPMS/cinnamon-menus-2.8.0-1-rosa2014.1.i586.rpm /builddir/build/RPMS/libcinnamon-menu-devel-2.8.0-1-rosa2014.1.i586.rpm /builddir/build/RPMS/cinnamon-menus-debuginfo-2.8.0-1-rosa2014.1.i586.rpm":
libcinnamon-menu-devel.i586: E: zero-length (Badness: 1) /usr/lib/pkgconfig/libcinnamon-menu-3.0.pc
libcinnamon-menu-devel.i586: W: no-documentation
libcinnamon-menu-devel.i586: W: no-dependency-on libcinnamon-menu/libcinnamon-menu-libs/liblibcinnamon-menu
cinnamon-menus.i586: E: incoherent-version-in-name (Badness: 50) 3
3 packages and 0 specfiles checked; 2 errors, 2 warnings.
В общем добился что src.rpm проходит. теперь вопросы badness 1 это что? 
"no-dependency-on libcinnamon-menu/libcinnamon-menu-libs/liblibcinnamon-menu" - это я так понимаю нужно альтернативные имена зависимостей задать?
спек:
Код: Выделить всё
%global enable_debugging 0
#global _internal_version f22e07d
%define api 3
%define major 0
%define libname %mklibname cinnamon-menu %{api} %{major}
%define devname %mklibname cinnamon-menu -d
Summary:  A menu system for the Cinnamon project
Name: cinnamon-menus
Version: 2.8.0
Release: %mkrel 1
License: LGPLv2+
Group: Graphical desktop/Cinnamon
URL: http://cinnamon.linuxmint.com 
# for git
# wget https://github.com/linuxmint/cinnamon-menus/tarball/%%{_internal_version} -O cinnamon-menus-%%{version}.git%%{_internal_version}.tar.gz
#Source0:        http://leigh123linux.fedorapeople.org/pub/%{name}/source/%{name}-%{version}.git%{_internal_version}.tar.gz
Source0:       %{name}-%{version}.tar.gz
#SourceGet0: https://github.com/linuxmint/%{name}/archive/%{version}.tar.gz
BuildRequires: glib2-devel
BuildRequires: pkgconfig
BuildRequires: python-devel
BuildRequires: intltool
BuildRequires: girepository-devel
BuildRequires: gnome-common
%description
cinnamon-menus is an implementation of the draft "Desktop
Menu Specification" from freedesktop.org. This package
also contains the Cinnamon menu layout configuration files,
.directory files and assorted menu related utility programs,
Python bindings, and a simple menu editor.
%package -n %{devname}
Summary: Libraries and include files for the Cinnamon menu system
Group: Development/C
Requires: %{libname} = %{version}-%{release}
%description -n %{devname}
This package provides the necessary development libraries for
writing applications that use the Cinnamon menu system.
%prep
%setup -q
NOCONFIGURE=1 ./autogen.sh
%build
%configure --disable-static \
   --enable-introspection \
%if %{enable_debugging}
   --enable-debug=yes
%else
   --enable-debug=no
%endif
%make V=1
%install
%{make_install}
find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
%files
%doc AUTHORS NEWS COPYING.LIB
%{_libdir}/lib*.so.*
%{_libdir}/girepository-1.0/C*-3.0.typelib
%files -n %{devname}
%{_libdir}/*.so
%{_libdir}/pkgconfig/*
%{_includedir}/cinnamon-menus-3.0
%{_datadir}/gir-1.0/C*-3.0.gir
%changelog
* Wed Oct 21 2015 joequant <joequant> 2.8.0-1.mga6
+ Revision: 893697
- upgrade to 2.8.0
* Fri Jun 26 2015 joequant <joequant> 2.6.0-1.mga6
+ Revision: 844318
- add gnome common
- upgrade to 2.6
* Wed Dec 03 2014 tmb <tmb> 2.4.0-2.mga5
+ Revision: 800483
- bump rel past testing
* Sun Nov 23 2014 joequant <joequant> 2.4.0-1.mga5
+ Revision: 798405
- upgrade to 2.4
* Wed Oct 15 2014 umeabot <umeabot> 2.2.0-5.mga5
+ Revision: 742819
- Second Mageia 5 Mass Rebuild
* Thu Sep 18 2014 umeabot <umeabot> 2.2.0-4.mga5
+ Revision: 693610
- Rebuild to fix library dependencies
* Tue Sep 16 2014 umeabot <umeabot> 2.2.0-3.mga5
+ Revision: 678398
- Mageia 5 Mass Rebuild
* Wed May 14 2014 joequant <joequant> 2.2.0-2.mga5
+ Revision: 622768
- rebuild for cauldron
* Sat Apr 19 2014 joequant <joequant> 2.2.0-1.mga5
+ Revision: 616949
- imported package cinnamon-menus
* Sat Apr 12 2014 Leigh Scott <leigh123linux@googlemail.com> - 2.2.0-1
- update to 2.2.0
* Sat Mar 22 2014 Leigh Scott <leigh123linux@googlemail.com> - 2.1-0.1.gitc740513
- inital release
ROSA Лаб. © 2015 · flag · О компании · Контакты · Условия использования · Служба поддержки · API для разработчиков · Идеи для ABF · Блог ABF
вот здесь поменял %name на %libname и добавил -n %{devname}, это правильно?
Код: Выделить всё
%package -n %{devname}
Summary: Libraries and include files for the Cinnamon menu system
Group: Development/C
Requires: %{libname} = %{version}-%{release}
чем отличается %devname от %{devname}      ?
 
			
					
				Re: Сборка RPM
				Добавлено: 17 ноя 2015, 23:20
				 tverskoy
				Добавил в %files
Всераано ошибки лезут
 
			
					
				Re: Сборка RPM
				Добавлено: 18 ноя 2015, 04:00
				 Pulfer
				tverskoy писал(а):libcinnamon-menu-devel.i586: E: zero-length (Badness: 1) /usr/lib/pkgconfig/libcinnamon-menu-3.0.pc?
В общем добился что src.rpm проходит. теперь вопросы badness 1 это что?
Тут пишет, что файл libcinnamon-menu-3.0.pc пустой. И вес этой ошибки 1. Если общий вес ошибок 50 и более, то сборка считается совсем некачественной и получает статус "ошибка сборки". Пока что с этой ошибкой ничего не надо делать
tverskoy писал(а):"no-dependency-on libcinnamon-menu/libcinnamon-menu-libs/liblibcinnamon-menu" - это я так понимаю нужно альтернативные имена зависимостей задать?
Это можно игнорировать. 
tverskoy писал(а):вот здесь поменял %name на %libname и добавил -n %{devname}, это правильно?
Ага. Но в спеке не хватает определения пакета %{libname}, надо добавить. И указать, что файлы из текущей секции %files на самом деле должны принадлежать пакету %{libname}.
Код: Выделить всё
%package -n %{libname}
Summary: Shared library for the Cinnamon menu system
Group: System/Libraries
%description -n %{libname}
This package provides shared library for the Cinnamon menu system.
...
%files -n %{libname}
%doc AUTHORS NEWS COPYING.LIB
%{_libdir}/libcinnamon-menu*%{api}.so.{major}*
%{_libdir}/girepository-1.0/C*-3.0.typelib
tverskoy писал(а):чем отличается %devname от %{devname}      ?
Функционально ничем. Но у нас так сложилось, что в скобки берутся макросы-переменные (например, %{name}), а не берутся макросы-команды (например, %configure и %make) и секции спека (%package, %files и т.д.). Редакторы обычно подсвечивают макросы в скобках и без скобок разным цветом, поэтому удобнее, когда за этой подсветкой есть ещё какой-то смысл. Конечно, есть ещё спеки, которые не приведены в соответствие с этим правилом, но их уже не так много (особенно по сравнению с другими дистрибутивами).
 
			
					
				Re: Сборка RPM
				Добавлено: 20 ноя 2015, 10:41
				 tverskoy
				Что-то странное на ABF у меня твориться, для i586 ошибка сборки, а для x86_64 больше 9 часов собирается
			 
			
					
				Re: Сборка RPM
				Добавлено: 20 ноя 2015, 10:58
				 keleg
				Попробуйте еще раз. Ночью были проблемы, когда добавляли несколько новых сборочных воркеров.
			 
			
					
				Re: Сборка RPM
				Добавлено: 28 ноя 2015, 20:05
				 fedan
				Всем Добрый вечер! Хочу задать вопрос такой: Читал что %define можно задавать только в начале .spec файла. Его можно определить в произвольном месте?
Например, недавно вышел fpc 3.0.0 , у них политика такая, что после релиза компилятора, идут fixes в branches текущего релиза из trunk. Они выкладывают их в 
ftp://ftp.freepascal.org/pub/fpc/snapsh ... ce/fpc.zip. (копия после внесения исправлений). Версия свежесобранного компилятора определяется так: fpc -iV. Хочется в buildroot определить версию %{version} и уже её подставлять в %{_prefix}/lib/fpc/%{version}.
 
			
					
				Re: Сборка RPM
				Добавлено: 28 ноя 2015, 21:10
				 Pulfer
				fedan писал(а):Всем Добрый вечер! Хочу задать вопрос такой: Читал что %define можно задавать только в начале .spec файла. Его можно определить в произвольном месте?
В произвольном месте, но до первого использования макроса.
Правильно:
Код: Выделить всё
%define oname FPC
Summary: %{oname} is a free Pascal compiler
Неправильно:
Код: Выделить всё
Summary: %{oname} is a free Pascal compiler
%define oname FPC
fedan писал(а):Например, недавно вышел fpc 3.0.0 , у них политика такая, что после релиза компилятора, идут fixes в branches текущего релиза из trunk. Они выкладывают их в 
ftp://ftp.freepascal.org/pub/fpc/snapsh ... ce/fpc.zip. (копия после внесения исправлений). Версия свежесобранного компилятора определяется так: fpc -iV. Хочется в buildroot определить версию %{version} и уже её подставлять в %{_prefix}/lib/fpc/%{version}.
 
Проблема в том, что значение макросов вычисляется до начала сборки пакета. Так что мы не можем сделать вот так, потому что до начала сборки файла fpc по указанному пути ещё не будет существовать:
Код: Выделить всё
%define fpc_version %(%{buildroot}%{_bindir}/fpc -iV)
Хотя версию текущего установленного fpc определить можем, т.к. файл уже будет существовать до начала сборки:
 
			
					
				Re: Сборка RPM
				Добавлено: 28 ноя 2015, 21:28
				 fedan
				Благодарю за разъяснение.
			 
			
					
				Re: Сборка RPM
				Добавлено: 05 дек 2015, 18:04
				 GiuX
				Hi at all,
I'm sorry for the intrusion but I would like to build some package for Rosa that I need for my degree but I'm a newbee about rpm packaging...
Someone could help me to end this spec file?
Код: Выделить всё
%define major		XX
%define libname		%mklibname %{name} %{major}
%define develname	%mklibname -d %{name}
%global commit0 fd5de11497edd7cdb28e7eef60fa998a2ebd7f84
%global gittag0 HEAD
%global shortcommit0 %(c=%{commit0}; echo ${c:0:7})
Name:			ndn-cxx
Summary:		NDN C++ library with eXperimental eXtensions
Version:		0.4.0
Release:		1
License:		LGPLv3
Group:			System/Libraries
Url:			http://named-data.net/doc/%{name}/current/index.html
Source0:		https://github.com/named-data/%{name}/archive/%{commit0}.tar.gz#/%{name}-%{shortcommit0}.tar.gz
BuildRequires:		git
BuildRequires:		pkgconfig(sqlite3)
BuildRequires:		pkgconfig(cryptopp)
BuildRequires:		boost-devel
# BReqs for documentation
BuildRequires:		doxygen
BuildRequires:		graphviz
BuildRequires:		python-sphinx
BuildRequires:		python-pip
# Requires:			python
# Requires:			sqlite3
# Requires:			cryptopp
# Requires:			pkgconfig
# Requires(post):		ldconfig
# Requires(postun):	ldconfig
%description
ndn-cxx is a C++ library, implementing Named Data Networking (NDN) primitives
that can be used to implement various NDN applications.
The library is currently being used as part of the following projects:
* [NFD - NDN Forwarding Daemon]
* [NLSR - Named-data Link-State Routing protocol]
* [repo-ng - Next generation of NDN repository]
* [ChronoChat - Multi-user NDN chat application]
* [ChronoSync - Sync library for multiuser realtime applications for NDN]
* [ndn-tlv-ping - Ping Application For NDN]
* [ndn-traffic-generator - Traffic Generator For NDN].
#-----------------------------------------------------------------------------
%package -n		%{libname}
Summary:	Shared libraries for %{name}
Group:		System/Libraries
%description -n	%{libname}
Shared libraries for %{name}.
%files -n %{libname}
%{_libdir}/lib%{name}.so.0.3.92
#-----------------------------------------------------------------------------
%package -n     %{develname}
%description -n %{develname}
This package contains the development library and header files for the 
%{name} library.
%files -n %{develname}
%dir %{_includedir}/%{name}
%{_includedir}/%{name}/common-pch.hpp
%{_includedir}/%{name}/common.hpp
%{_includedir}/%{name}/data.hpp
%{_includedir}/%{name}/encoding/block-helpers.hpp
%{_includedir}/%{name}/encoding/block.hpp
%{_includedir}/%{name}/encoding/buffer-stream.hpp
%{_includedir}/%{name}/encoding/buffer.hpp
%{_includedir}/%{name}/encoding/cryptopp/asn_ext.hpp
%{_includedir}/%{name}/encoding/encoder.hpp
%{_includedir}/%{name}/encoding/encoding-buffer-fwd.hpp
%{_includedir}/%{name}/encoding/encoding-buffer.hpp
%{_includedir}/%{name}/encoding/endian.hpp
%{_includedir}/%{name}/encoding/estimator.hpp
%{_includedir}/%{name}/encoding/nfd-constants.hpp
%{_includedir}/%{name}/encoding/oid.hpp
%{_includedir}/%{name}/encoding/tlv-nfd.hpp
%{_includedir}/%{name}/encoding/tlv-security.hpp
%{_includedir}/%{name}/encoding/tlv.hpp
%{_includedir}/%{name}/exclude.hpp
%{_includedir}/%{name}/face.hpp
%{_includedir}/%{name}/interest-filter.hpp
%{_includedir}/%{name}/interest.hpp
%{_includedir}/%{name}/key-locator.hpp
%{_includedir}/%{name}/link.hpp
%{_includedir}/%{name}/lp/cache-policy.hpp
%{_includedir}/%{name}/lp/detail/field-decl.hpp
%{_includedir}/%{name}/lp/detail/field-info.hpp
%{_includedir}/%{name}/lp/field.hpp
%{_includedir}/%{name}/lp/fields.hpp
%{_includedir}/%{name}/lp/nack-header.hpp
%{_includedir}/%{name}/lp/nack.hpp
%{_includedir}/%{name}/lp/packet.hpp
%{_includedir}/%{name}/lp/sequence.hpp
%{_includedir}/%{name}/lp/tlv.hpp
%{_includedir}/%{name}/management/nfd-channel-status.hpp
%{_includedir}/%{name}/management/nfd-command-options.hpp
%{_includedir}/%{name}/management/nfd-control-command.hpp
%{_includedir}/%{name}/management/nfd-control-parameters.hpp
%{_includedir}/%{name}/management/nfd-control-response.hpp
%{_includedir}/%{name}/management/nfd-controller.hpp
%{_includedir}/%{name}/management/nfd-face-event-notification.hpp
%{_includedir}/%{name}/management/nfd-face-monitor.hpp
%{_includedir}/%{name}/management/nfd-face-query-filter.hpp
%{_includedir}/%{name}/management/nfd-face-status.hpp
%{_includedir}/%{name}/management/nfd-face-traits.hpp
%{_includedir}/%{name}/management/nfd-fib-entry.hpp
%{_includedir}/%{name}/management/nfd-forwarder-status.hpp
%{_includedir}/%{name}/management/nfd-local-control-header.hpp
%{_includedir}/%{name}/management/nfd-rib-entry.hpp
%{_includedir}/%{name}/management/nfd-rib-flags.hpp
%{_includedir}/%{name}/management/nfd-strategy-choice.hpp
%{_includedir}/%{name}/meta-info.hpp
%{_includedir}/%{name}/mgmt/control-parameters.hpp
%{_includedir}/%{name}/mgmt/control-response.hpp
%{_includedir}/%{name}/mgmt/dispatcher.hpp
%{_includedir}/%{name}/mgmt/status-dataset-context.hpp
%{_includedir}/%{name}/name-component.hpp
%{_includedir}/%{name}/name.hpp
%{_includedir}/%{name}/%{name}-config.hpp
%{_includedir}/%{name}/security/additional-description.hpp
%{_includedir}/%{name}/security/certificate-cache-ttl.hpp
%{_includedir}/%{name}/security/certificate-cache.hpp
%{_includedir}/%{name}/security/certificate-container.hpp
%{_includedir}/%{name}/security/certificate-extension.hpp
%{_includedir}/%{name}/security/certificate-subject-description.hpp
%{_includedir}/%{name}/security/certificate.hpp
%{_includedir}/%{name}/security/conf/checker.hpp
%{_includedir}/%{name}/security/conf/common.hpp
%{_includedir}/%{name}/security/conf/filter.hpp
%{_includedir}/%{name}/security/conf/key-locator-checker.hpp
%{_includedir}/%{name}/security/conf/rule.hpp
%{_includedir}/%{name}/security/cryptopp.hpp
%{_includedir}/%{name}/security/digest-sha256.hpp
%{_includedir}/%{name}/security/identity-certificate.hpp
%{_includedir}/%{name}/security/identity-container.hpp
%{_includedir}/%{name}/security/identity.hpp
%{_includedir}/%{name}/security/key-chain.hpp
%{_includedir}/%{name}/security/key-container.hpp
%{_includedir}/%{name}/security/key-params.hpp
%{_includedir}/%{name}/security/key.hpp
%{_includedir}/%{name}/security/openssl.hpp
%{_includedir}/%{name}/security/pib-impl.hpp
%{_includedir}/%{name}/security/pib-memory.hpp
%{_includedir}/%{name}/security/pib-sqlite3.hpp
%{_includedir}/%{name}/security/pib.hpp
%{_includedir}/%{name}/security/public-key.hpp
%{_includedir}/%{name}/security/sec-public-info-sqlite3.hpp
%{_includedir}/%{name}/security/sec-public-info.hpp
%{_includedir}/%{name}/security/sec-rule-relative.hpp
%{_includedir}/%{name}/security/sec-rule-specific.hpp
%{_includedir}/%{name}/security/sec-rule.hpp
%{_includedir}/%{name}/security/sec-tpm-file.hpp
%{_includedir}/%{name}/security/sec-tpm.hpp
%{_includedir}/%{name}/security/secured-bag.hpp
%{_includedir}/%{name}/security/security-common.hpp
%{_includedir}/%{name}/security/signature-sha256-with-ecdsa.hpp
%{_includedir}/%{name}/security/signature-sha256-with-rsa.hpp
%{_includedir}/%{name}/security/signing-helpers.hpp
%{_includedir}/%{name}/security/signing-info.hpp
%{_includedir}/%{name}/security/validation-request.hpp
%{_includedir}/%{name}/security/validator-config.hpp
%{_includedir}/%{name}/security/validator-null.hpp
%{_includedir}/%{name}/security/validator-regex.hpp
%{_includedir}/%{name}/security/validator.hpp
%{_includedir}/%{name}/security/validity-period.hpp
%{_includedir}/%{name}/selectors.hpp
%{_includedir}/%{name}/signature-info.hpp
%{_includedir}/%{name}/signature.hpp
%{_includedir}/%{name}/tag-host.hpp
%{_includedir}/%{name}/tag.hpp
%{_includedir}/%{name}/transport/stream-transport.hpp
%{_includedir}/%{name}/transport/tcp-transport.hpp
%{_includedir}/%{name}/transport/transport.hpp
%{_includedir}/%{name}/transport/unix-transport.hpp
%{_includedir}/%{name}/util/backports.hpp
%{_includedir}/%{name}/util/command-interest-generator.hpp
%{_includedir}/%{name}/util/command-interest-validator.hpp
%{_includedir}/%{name}/util/concepts.hpp
%{_includedir}/%{name}/util/config-file.hpp
%{_includedir}/%{name}/util/crypto.hpp
%{_includedir}/%{name}/util/digest.hpp
%{_includedir}/%{name}/util/dns.hpp
%{_includedir}/%{name}/util/dummy-client-face.hpp
%{_includedir}/%{name}/util/ethernet.hpp
%{_includedir}/%{name}/util/face-uri.hpp
%{_includedir}/%{name}/util/in-memory-storage-entry.hpp
%{_includedir}/%{name}/util/in-memory-storage-fifo.hpp
%{_includedir}/%{name}/util/in-memory-storage-lfu.hpp
%{_includedir}/%{name}/util/in-memory-storage-lru.hpp
%{_includedir}/%{name}/util/in-memory-storage-persistent.hpp
%{_includedir}/%{name}/util/in-memory-storage.hpp
%{_includedir}/%{name}/util/indented-stream.hpp
%{_includedir}/%{name}/util/io.hpp
%{_includedir}/%{name}/util/monotonic_deadline_timer.hpp
%{_includedir}/%{name}/util/network-monitor.hpp
%{_includedir}/%{name}/util/notification-stream.hpp
%{_includedir}/%{name}/util/notification-subscriber.hpp
%{_includedir}/%{name}/util/random.hpp
%{_includedir}/%{name}/util/regex.hpp
%{_includedir}/%{name}/util/regex/regex-backref-manager.hpp
%{_includedir}/%{name}/util/regex/regex-backref-matcher.hpp
%{_includedir}/%{name}/util/regex/regex-component-matcher.hpp
%{_includedir}/%{name}/util/regex/regex-component-set-matcher.hpp
%{_includedir}/%{name}/util/regex/regex-matcher.hpp
%{_includedir}/%{name}/util/regex/regex-pattern-list-matcher.hpp
%{_includedir}/%{name}/util/regex/regex-pseudo-matcher.hpp
%{_includedir}/%{name}/util/regex/regex-repeat-matcher.hpp
%{_includedir}/%{name}/util/regex/regex-top-matcher.hpp
%{_includedir}/%{name}/util/scheduler-scoped-event-id.hpp
%{_includedir}/%{name}/util/scheduler.hpp
%{_includedir}/%{name}/util/segment-fetcher.hpp
%{_includedir}/%{name}/util/signal-connection.hpp
%{_includedir}/%{name}/util/signal-emit.hpp
%{_includedir}/%{name}/util/signal-scoped-connection.hpp
%{_includedir}/%{name}/util/signal-signal.hpp
%{_includedir}/%{name}/util/signal.hpp
%{_includedir}/%{name}/util/sqlite3-statement.hpp
%{_includedir}/%{name}/util/string-helper.hpp
%{_includedir}/%{name}/util/time-custom-clock.hpp
%{_includedir}/%{name}/util/time-unit-test-clock.hpp
%{_includedir}/%{name}/util/time.hpp
%{_includedir}/%{name}/version.hpp
%{_libdir}/lib%{name}.so
%{_libdir}/pkgconfig/lib%{name}.pc
#-----------------------------------------------------------------------------
%package -n	%{name}-tools
%files -n %{name}-tools
%dir %{_sysconfdir}/ndn
%{_sysconfdir}/ndn/client.conf.sample
%{_bindir}/ndncatchunks3
%{_bindir}/ndnputchunks3
%{_bindir}/ndnsec
%{_bindir}/ndnsec-cert-dump
%{_bindir}/ndnsec-cert-gen
%{_bindir}/ndnsec-cert-install
%{_bindir}/ndnsec-cert-revoke
%{_bindir}/ndnsec-certgen
%{_bindir}/ndnsec-delete
%{_bindir}/ndnsec-dsk-gen
%{_bindir}/ndnsec-dskgen
%{_bindir}/ndnsec-dump-certificate
%{_bindir}/ndnsec-export
%{_bindir}/ndnsec-get-default
%{_bindir}/ndnsec-import
%{_bindir}/ndnsec-install-cert
%{_bindir}/ndnsec-key-gen
%{_bindir}/ndnsec-keygen
%{_bindir}/ndnsec-list
%{_bindir}/ndnsec-ls-identity
%{_bindir}/ndnsec-op-tool
%{_bindir}/ndnsec-operator-tool
%{_bindir}/ndnsec-set-acl
%{_bindir}/ndnsec-set-default
%{_bindir}/ndnsec-sig-verify
%{_bindir}/ndnsec-sign-req
%{_bindir}/ndnsec-unlock-tpm
%{_bindir}/tlvdump
%{_mandir}/man1/ndnsec-cert-dump.1.xz
%{_mandir}/man1/ndnsec-cert-gen.1.xz
%{_mandir}/man1/ndnsec-cert-instal.1.xz
%{_mandir}/man1/ndnsec-cert-revoke.1.xz
%{_mandir}/man1/ndnsec-delete.1.xz
%{_mandir}/man1/ndnsec-export.1.xz
%{_mandir}/man1/ndnsec-get-default.1.xz
%{_mandir}/man1/ndnsec-import.1.xz
%{_mandir}/man1/ndnsec-key-gen.1.xz
%{_mandir}/man1/ndnsec-list.1.xz
%{_mandir}/man1/ndnsec-set-acl.1.xz
%{_mandir}/man1/ndnsec-set-default.1.xz
%{_mandir}/man1/ndnsec-sign-req.1.xz
%{_mandir}/man1/ndnsec-unlock-tpm.1.xz
%{_mandir}/man1/ndnsec.1.xz
%{_mandir}/man1/tlvdump.1.xz
%{_mandir}/man5/ndn-client.conf.5.xz
%{_mandir}/man5/ndnsec-validator.conf.5.xz
%prep
%setup -qn %{name}-%{commit0}
%build
CXXFLAGS="-O2" ./waf configure --prefix=%{buildroot}%{_prefix} \
	--destdir=%{buildroot} \
	--exec-prefix=%{buildroot}%{_prefix} \
	--sysconfdir=%{buildroot}%{_sysconfdir} \
	--localstatedir=%{buildroot}%{_localstatedir} \
	--with-examples \
	--disable-static \
	--enable-shared
# # Full set of documentation (tutorials + API) in build/docs
# ./waf docs
# 
# # Only tutorials in `build/docs`
# ./waf sphinx
# 
# # Only API docs in `build/docs/doxygen`
# ./waf doxygen
./waf
%install
./waf install
#%%pre -p ldconfig
#%%post -p /sbin/ldconfig
#%%postun -p /sbin/ldconfig
Thanks a lot for the help 

 
			
					
				Re: Сборка RPM
				Добавлено: 05 дек 2015, 20:47
				 VictorR2007
				А существует ли способ заменить в исходниках, во вложенном архиве, один файл в иерархии каталогов.
Или просто добавить туда папку со вложенной иерархией.
В смысле, командой в спеке.
Например,  в пакете есть архив UMS-5.1.0-Java7.tgz
который распаковывается при сборке.
В нём есть архив ums.jar.
В нём есть файл /resources/i18n/messages_ru.properties
который нужно заменить.
Можно заменить до сборки, если собирать локально.
Но вдруг есть возможность это сделать через спек.
Хотелось, что-бы всё было правильно.
			 
			
					
				Re: Сборка RPM
				Добавлено: 06 дек 2015, 15:15
				 Pulfer
				GiuX писал(а):%define major		XX
%define libname		%mklibname %{name} %{major}
...
%files -n %{libname}
%{_libdir}/lib%{name}.so.0.3.92
major should be 0, 0.3 or 0.3.92 here. Not XX. You need to use objdump command to check major version value.
For example, let's check libXext.so.6.4.0:
Код: Выделить всё
$ objdump -x /usr/lib/libXext.so.6.4.0 | grep SONAME
  SONAME               libXext.so.6
major is 6 here. Usually major is X in lib*.so.X.Y.Z. But sometimes it's X.Y or whole X.Y.Z.
You need to use major macro in %files for library to be sure you have libndn-cxx.so.0* in libndn-cxx0/lib64ndn-cxx0 package:
GiuX писал(а):# Requires:			python
# Requires:			sqlite3
# Requires:			cryptopp
# Requires:			pkgconfig
# Requires(post):		ldconfig
# Requires(postun):	ldconfig
Just drop these. No need to keep them commented out.
GiuX писал(а):%package -n	%{name}-tools
...
%files -n %{name}-tools
It's enough to use just 
"%package tools" does the same as "%package -n %{name}-tools". Option -n is needed when we don't want to have %{name}- part in package name. 
GiuX писал(а):#%%pre -p ldconfig
#%%post -p /sbin/ldconfig
#%%postun -p /sbin/ldconfig
Drop these. RPM in Rosa autoruns ldconfig when it's needed.
 
			
					
				Re: Сборка RPM
				Добавлено: 06 дек 2015, 15:19
				 Pulfer
				VictorR2007 писал(а):А существует ли способ заменить в исходниках, во вложенном архиве, один файл в иерархии каталогов.
Или просто добавить туда папку со вложенной иерархией.
В смысле, командой в спеке.
Например,  в пакете есть архив UMS-5.1.0-Java7.tgz
который распаковывается при сборке.
В нём есть архив ums.jar.
В нём есть файл /resources/i18n/messages_ru.properties
который нужно заменить.
Можно заменить до сборки, если собирать локально.
Но вдруг есть возможность это сделать через спек.
Хотелось, что-бы всё было правильно.
Теоретически можно, но как правильно работать с jar-файлами я не знаю, т.к. от Java очень далёк.  

 
			
					
				Re: Сборка RPM
				Добавлено: 06 дек 2015, 18:54
				 GiuX
				Pulfer писал(а):GiuX писал(а):%define major		XX
%define libname		%mklibname %{name} %{major}
...
%files -n %{libname}
%{_libdir}/lib%{name}.so.0.3.92
major should be 0, 0.3 or 0.3.92 here. Not XX. You need to use objdump command to check major version value.
For example, let's check libXext.so.6.4.0:
Код: Выделить всё
$ objdump -x /usr/lib/libXext.so.6.4.0 | grep SONAME
  SONAME               libXext.so.6
major is 6 here. Usually major is X in lib*.so.X.Y.Z. But sometimes it's X.Y or whole X.Y.Z.
You need to use major macro in %files for library to be sure you have libndn-cxx.so.0* in libndn-cxx0/lib64ndn-cxx0 package:
GiuX писал(а):# Requires:			python
# Requires:			sqlite3
# Requires:			cryptopp
# Requires:			pkgconfig
# Requires(post):		ldconfig
# Requires(postun):	ldconfig
Just drop these. No need to keep them commented out.
GiuX писал(а):%package -n	%{name}-tools
...
%files -n %{name}-tools
It's enough to use just 
"%package tools" does the same as "%package -n %{name}-tools". Option -n is needed when we don't want to have %{name}- part in package name. 
GiuX писал(а):#%%pre -p ldconfig
#%%post -p /sbin/ldconfig
#%%postun -p /sbin/ldconfig
Drop these. RPM in Rosa autoruns ldconfig when it's needed.
 
Thanks,
with these suggests I'm be able to build on my machine, but when I try to build on ABF this returns me an error, and I cannot understand why... This is the new spec...
Код: Выделить всё
%define major		0.3.4
%define libname		%mklibname %{name} %{major}
%define develname	%mklibname -d %{name}
%global commit0 157e225c8923f6ea1a4cd71462f712df9ba57726
%global gittag0 HEAD
%global shortcommit0 %(c=%{commit0}; echo ${c:0:7})
Name:			ndn-cxx
Summary:		NDN C++ library with eXperimental eXtensions
Version:		0.3.4
Release:		1
License:		LGPLv3
Group:			System/Libraries
Url:			http://named-data.net/doc/%{name}/current/index.html
Source0:		https://github.com/named-data/%{name}/archive/%{commit0}.tar.gz#/%{name}-%{shortcommit0}.tar.gz
Source100:		%{name}.rpmlintrc
BuildRequires:		coreutils
BuildRequires:		git
BuildRequires:		pkgconfig(sqlite3)
BuildRequires:		pkgconfig(cryptopp)
BuildRequires:		pkgconfig(libssl)
BuildRequires:		boost-devel
# BReqs for documentation
BuildRequires:		doxygen
BuildRequires:		graphviz
BuildRequires:		python-sphinx
BuildRequires:		python-pip
%description
ndn-cxx is a C++ library, implementing Named Data Networking (NDN) primitives
that can be used to implement various NDN applications.
The library is currently being used as part of the following projects:
* [NFD - NDN Forwarding Daemon]
* [NLSR - Named-data Link-State Routing protocol]
* [repo-ng - Next generation of NDN repository]
* [ChronoChat - Multi-user NDN chat application]
* [ChronoSync - Sync library for multiuser realtime applications for NDN]
* [ndn-tlv-ping - Ping Application For NDN]
* [ndn-traffic-generator - Traffic Generator For NDN].
#-----------------------------------------------------------------------------
%package -n		%{libname}
Summary:	Shared libraries for %{name}
Group:		System/Libraries
%description -n	%{libname}
Shared libraries for %{name}.
%files -n %{libname}
%{_libdir}/*.so.*
%dir %{_datadir}/%{name}
%{_datadir}/%{name}/README.md
%{_datadir}/%{name}/AUTHORS.md
%{_datadir}/%{name}/COPYING.md
#-----------------------------------------------------------------------------
%package -n     %{develname}
Summary:	Development headers for %{name}
Group:		Development/Other
%description -n %{develname}
Development headers of NDN C++ library with eXperimental eXtensions.
%files -n %{develname}
%dir %{_includedir}/%{name}
%{_includedir}/%{name}/*
%{_libdir}/*.so
%{_libdir}/pkgconfig/*
#-----------------------------------------------------------------------------
%package tools
Summary:	Utilities for %{name}
Group:		Development/Other
Requires:	%{libname} = %{version}
%description tools
Development utilities of NDN C++ library with eXperimental eXtensions.
%files tools
%dir %{_sysconfdir}/ndn
%{_sysconfdir}/ndn/client.conf.sample
%{_bindir}/*
%{_mandir}/man1/*
%{_mandir}/man5/*
#-----------------------------------------------------------------------------
%prep
%setup -qn %{name}-%{commit0}
%build
./waf configure --prefix=%{_prefix} \
	--exec-prefix=%{_prefix} \
	--sysconfdir=%{_sysconfdir} \
	--localstatedir=%{_localstatedir} \
	--with-examples \
	--with-debug \
	--disable-static \
	--enable-shared
# # Full set of documentation (tutorials + API) in build/docs
# ./waf docs
# 
# # Only tutorials in `build/docs`
# ./waf sphinx
# 
# # Only API docs in `build/docs/doxygen`
# ./waf doxygen
./waf build
%install
./waf install --destdir=%{buildroot}
mkdir %{buildroot}%{_datadir}/%{name}
install -m u=rw,go=r,a-s -t %{buildroot}%{_datadir}/%{name} ./AUTHORS.md
install -m u=rw,go=r,a-s -t %{buildroot}%{_datadir}/%{name} ./README.md
install -m u=rw,go=r,a-s -t %{buildroot}%{_datadir}/%{name} ./COPYING.md
 
			
					
				Re: Сборка RPM
				Добавлено: 06 дек 2015, 19:36
				 GiuX
				Now, ABF as builded the rpm for x64 platform... but there something strange with naming of the packages... the library package is named lib64ndn-cxx0.3.4-0.3.4-1-rosa2014.1.x86_64.rpm :O
			 
			
					
				Re: Сборка RPM
				Добавлено: 07 дек 2015, 04:19
				 Pulfer
				GiuX писал(а):Now, ABF as builded the rpm for x64 platform... but there something strange with naming of the packages... the library package is named lib64ndn-cxx0.3.4-0.3.4-1-rosa2014.1.x86_64.rpm :O
That's correct package name, because:
I don't know why they decided to use such SONAME (not only major (X), but also minor (Y) and micro (Z) versions). Maybe because ABI is really unstable and 0.3.5 won't be backwards compatible with 0.3.4. But package name is correct.
 
			
					
				Re: Сборка RPM
				Добавлено: 07 дек 2015, 04:25
				 GiuX
				Really the spec file is a build of mine at all, I've set the major macro so because the build system returns me a warning for an incorrect version in name 

However, I don't know if it's sure if I tried to install the package on my system... It's my default system 

 There's something that could go bad?
 
			
					
				Re: Сборка RPM
				Добавлено: 07 дек 2015, 04:27
				 GiuX
				In sense if uninstalling the packages could let garbage?
			 
			
					
				Re: Сборка RPM
				Добавлено: 08 дек 2015, 09:56
				 Pulfer
				GiuX писал(а):However, I don't know if it's sure if I tried to install the package on my system... It's my default system 

 There's something that could go bad?
In sense if uninstalling the packages could let garbage?
 
It should be safe to install and uninstall packages.
 
			
					
				Re: Сборка RPM
				Добавлено: 08 дек 2015, 18:37
				 GiuX
				Thanks 

However, I'm trying to rebuild the package with the same spec file and now it returns me that it cannot find the pkgconfig(sqlite3), but lib64sqlite3-devel is correctly installed... Also in ABF doesn't build anymore...
 
			
					
				Re: Сборка RPM
				Добавлено: 08 дек 2015, 19:38
				 Pulfer
				GiuX писал(а):Thanks 

However, I'm trying to rebuild the package with the same spec file and now it returns me that it cannot find the pkgconfig(sqlite3), but lib64sqlite3-devel is correctly installed... Also in ABF doesn't build anymore...
 
Thanx for reporting, it's a bug in 
sqlite 3.9.2-1. It's fixed in 3.9.2-2 build.
 
			
					
				Re: Сборка RPM
				Добавлено: 08 дек 2015, 19:55
				 GiuX
				Thanks for you that have built a great distro 

 I've used Ubuntu for a month (under contrition 

) and I'm runnaway from it... 

 
			
					
				Re: Сборка RPM
				Добавлено: 08 дек 2015, 21:10
				 GiuX
				Pulfer писал(а):GiuX писал(а):Thanks 

However, I'm trying to rebuild the package with the same spec file and now it returns me that it cannot find the pkgconfig(sqlite3), but lib64sqlite3-devel is correctly installed... Also in ABF doesn't build anymore...
 
Thanx for reporting, it's a bug in 
sqlite 3.9.2-1. It's fixed in 3.9.2-2 build.
 
Can I ask you a help for right writing of a spec file? Could you tell me if there's something wrong in this spec? In this case I've to launch some code in %pre and in %post and I don't want to make errors... Thanks a  lot... 
 
Код: Выделить всё
%define major		0.3.4
%global commit0 d4ecf094bf32dd88ffc939475ec85719eaef1b17
%global gittag0 refs/tags/0.3.4
%global shortcommit0 %(c=%{commit0}; echo ${c:0:7})
%global commit1 ac5d7ea5af9734de965688b54a7860259887b537
%global gittag1 refs/tags/0.5.1
%global shortcommit1 %(c=%{commit1}; echo ${c:0:7})
Name:			nfd
Summary:		NFD - Named Data Networking Forwarding Daemon
Version:		0.3.4
Release:		1
License:		LGPLv3
Group:			Networking/Other
Url:			http://named-data.net/doc/%{name}/current/index.html
Source0:		https://github.com/named-data/%{name}/archive/%{commit0}.tar.gz#/%{name}-%{shortcommit0}.tar.gz
Source1:		https://github.com/zaphoyd/websocketpp/archive/%{commit1}.tar.gz#/%{name}-%{shortcommit1}.tar.gz
# Source100:		%%{name}.rpmlintrc
BuildRequires:		coreutils
BuildRequires:		pkgconfig(python)
BuildRequires:		pkgconfig(libndn-cxx)
BuildRequires:		boost-devel
BuildRequires:		pcap-devel
# BReqs for documentation
BuildRequires:		doxygen
BuildRequires:		graphviz
BuildRequires:		python-sphinx
BuildRequires:		python-pip
%description
NFD is a network forwarder that implements and evolves together with the 
Named Data Networking (NDN) protocol.
#-----------------------------------------------------------------------------
%package task
Summary:	NFD and all related daemons
Group:		Networking/Other
Requires:	daemon = %{version}
Requires:	status-http-server = %{version}
Requires:	autoreg = %{version}
Requires:	ndn-autoconfig-server = %{version}
%description task
This package install NFD and all related daemon
(nfd-status-http-server, nfd-autoreg, ndn-autoconfig-server).
%files task
%{_mandir}/man1/*
%{_datadir}/ndn/*
#-----------------------------------------------------------------------------
%package daemon
Summary:	NFD - Named Data Networking Forwarding Daemon
Group:		Networking/Other
%description daemon
NFD is a network forwarder that implements and evolves together with the 
Named Data Networking (NDN) protocol.
%files daemon
%{_bindir}/nfd
%{_bindir}/nfd-start
%{_bindir}/nfd-stop
%{_bindir}/nfd-status
%{_bindir}/nfdc
%{_bindir}/nrd
#-----------------------------------------------------------------------------
%package status-http-server
Summary:	NFD HTTP status server
Group:		Networking/Other
Requires:	daemon = %{version}
%description status-http-server
NFD HTTP status server.
%files status-http-server
%{_bindir}/nfd-status-http-server
#-----------------------------------------------------------------------------
%package autoreg
Summary:	NFD autoreg server
Group:		Networking/Other
Requires:	daemon = %{version}
%description autoreg
NFD autoreg server.
%files autoreg
%{_bindir}/nfd-autoreg
#-----------------------------------------------------------------------------
%package -n ndn-autoconfig-server
Summary:	NDN autoconfig server
Group:		Networking/Other
Requires:	daemon = %{version}
%description -n ndn-autoconfig-server
NDN autoconfig server.
%files -n ndn-autoconfig-server
%{_bindir}/ndn-autoconfig*
#-----------------------------------------------------------------------------
%prep
%setup -qn NFD-%{commit0} -a 1
rmdir websocketpp
mv -f websocketpp-%{commit1} websocketpp
%build
./waf configure --prefix=%{_prefix} \
	--sysconfdir=%{_sysconfdir} \
	--localstatedir=%{_localstatedir} \
	--with-test \
	--with-debug \
# # Full set of documentation (tutorials + API) in build/docs
# ./waf docs
# 
# # Only tutorials in `build/docs`
# ./waf sphinx
# 
# # Only API docs in `build/docs/doxygen`
# ./waf doxygen
./waf build
%install
./waf install --destdir=%{buildroot}
# mkdir %%{buildroot}%%{_datadir}/%%{name}
# install -m u=rw,go=r,a-s -t %%{buildroot}%%{_datadir}/%%{name} ./AUTHORS.md
# install -m u=rw,go=r,a-s -t %%{buildroot}%%{_datadir}/%%{name} ./README.md
# install -m u=rw,go=r,a-s -t %%{buildroot}%%{_datadir}/%%{name} ./COPYING.md
%pre
set -e
if ! getent group ndn >/dev/null; then
# Adding system group: ndn.
addgroup --system ndn >/dev/null
fi
# creating ndn user if he isn't already there
if ! getent passwd ndn >/dev/null; then
# Adding system user: ndn.
adduser \
	--system \
	--disabled-login \
	--ingroup ndn \
	--home /nonexistent \
	--gecos "NDN User" \
	--shell /bin/false \
	ndn  >/dev/null
fi
%post
if [ "$1" != "configure" ]; then
	exit 0
fi
# Create log folder
mkdir -p "/var/log/ndn"
# Create HOME and generate self-signed NDN certificate
mkdir -p "/var/lib/ndn/nfd/.ndn"
(
	export HOME="/var/lib/ndn/nfd"
	if [ -z "$(ndnsec-get-default)" ]; then
		ndnsec-keygen "/localhost/daemons/nfd" | ndnsec-install-cert -
	fi
	mkdir -p "/etc/ndn/certs"
	ndnsec-dump-certificate -i "$(ndnsec-get-default)" > \
		"/etc/ndn/certs/localhost_daemons_nfd.ndncert"
)
chown -R ndn:ndn "/var/lib/ndn/nfd"
%postun
#remove the ndn user and group
userdel -r ndn
groupdel ndn
#remove the HOME
rm -r "/var/lib/ndn/nfd"
rm -r "/var/log/ndn"
rm -r "/etc/ndn/certs"
 
			
					
				Re: Сборка RPM
				Добавлено: 08 дек 2015, 21:39
				 Pulfer
				GiuX писал(а):Can I ask you a help for right writing of a spec file? Could you tell me if there's something wrong in this spec? In this case I've to launch some code in %pre and in %post and I don't want to make errors... Thanks a  lot... 

 
In general it seems to be good. But there are parts that can be done in a better way. Please ping this topic tomorrow in case I forget to write about it. Today it's too late for me, I have to go.
 
			
					
				Re: Сборка RPM
				Добавлено: 08 дек 2015, 22:03
				 GiuX
				Okok, thanks a lot for reply 

 
			
					
				Re: Сборка RPM
				Добавлено: 10 дек 2015, 16:10
				 Pulfer
				GiuX писал(а):%pre
set -e
if ! getent group ndn >/dev/null; then
# Adding system group: ndn.
addgroup --system ndn >/dev/null
fi
# creating ndn user if he isn't already there
if ! getent passwd ndn >/dev/null; then
# Adding system user: ndn.
adduser \
	--system \
	--disabled-login \
	--ingroup ndn \
	--home /nonexistent \
	--gecos "NDN User" \
	--shell /bin/false \
	ndn  >/dev/null
fi
There are rpm macros used to add and remove users:
Код: Выделить всё
%_pre_useradd ndn /nonexistent /bin/false
%_postun_userdel ndn
And groups:
Код: Выделить всё
%_pre_groupadd ndn ndn
%_postun_groupdel ndn
These scripts are stored in /usr/share/rpm-helper, you may want to check their sources to learn what exactly they do.
GiuX писал(а):# Create log folder
mkdir -p "/var/log/ndn"
It's better to avoid creating and removing files in %post/%postun scripts. I suggest to do in in %install section:
Код: Выделить всё
%install
...
mkdir -p %{buildroot}%{_var}/log/ndn
...
mkdir -p %{buildroot}%{_var}/lib/ndn/nfd/.ndn
And own these dirs in %files:
Код: Выделить всё
%files
%dir %{_var}/log/ndn
%dir %attr(0755,ndn,ndn) %{_var}/lib/ndn/nfd/
Please note that you should have %files section (even empty) to produce a package. 
Also note that it's recommended to add "Requires(post):", "Requires(pre):" and so on for commands used in %post, %pre etc parts. 
For example, for %_pre_useradd and %_postun_userdel we need:
 
			
					
				Re: Сборка RPM
				Добавлено: 12 дек 2015, 05:29
				 GiuX
				Pulfer писал(а):GiuX писал(а):%pre
set -e
if ! getent group ndn >/dev/null; then
# Adding system group: ndn.
addgroup --system ndn >/dev/null
fi
# creating ndn user if he isn't already there
if ! getent passwd ndn >/dev/null; then
# Adding system user: ndn.
adduser \
	--system \
	--disabled-login \
	--ingroup ndn \
	--home /nonexistent \
	--gecos "NDN User" \
	--shell /bin/false \
	ndn  >/dev/null
fi
There are rpm macros used to add and remove users:
Код: Выделить всё
%_pre_useradd ndn /nonexistent /bin/false
%_postun_userdel ndn
And groups:
Код: Выделить всё
%_pre_groupadd ndn ndn
%_postun_groupdel ndn
These scripts are stored in /usr/share/rpm-helper, you may want to check their sources to learn what exactly they do.
GiuX писал(а):# Create log folder
mkdir -p "/var/log/ndn"
It's better to avoid creating and removing files in %post/%postun scripts. I suggest to do in in %install section:
Код: Выделить всё
%install
...
mkdir -p %{buildroot}%{_var}/log/ndn
...
mkdir -p %{buildroot}%{_var}/lib/ndn/nfd/.ndn
And own these dirs in %files:
Код: Выделить всё
%files
%dir %{_var}/log/ndn
%dir %attr(0755,ndn,ndn) %{_var}/lib/ndn/nfd/
Please note that you should have %files section (even empty) to produce a package. 
Also note that it's recommended to add "Requires(post):", "Requires(pre):" and so on for commands used in %post, %pre etc parts. 
For example, for %_pre_useradd and %_postun_userdel we need:
 
Thanks a lot for teaching 

 
			
					
				Re: Сборка RPM
				Добавлено: 21 дек 2015, 20:44
				 Buagir
				Люди научите простого смертного собирать пакеты .rpm Есть много свободного времени и желание освоить это дело но нет навыков.
			 
			
					
				Re: Сборка RPM
				Добавлено: 21 дек 2015, 21:36
				 Pulfer
				Buagir писал(а):Люди научите простого смертного собирать пакеты .rpm Есть много свободного времени и желание освоить это дело но нет навыков.
Думаю, стоит с вот этой статьи начать: 
http://tigro.info/wp/?p=287
Она старая, но в целом всё ещё актуальная. А далее уже можно будет задавать конкретные вопросы, когда они будут возникать.
 
			
					
				Re: Сборка RPM
				Добавлено: 14 янв 2016, 17:18
				 Nemial
				У меня вопрос, а как собирать пакеты в abf. Ну то есть нужно ли класть исходники рядом со spec файлом, или он сам будет их выкачивать в процессе сборки?
			 
			
					
				Re: Сборка RPM
				Добавлено: 14 янв 2016, 17:28
				 DrXank
				Nemial писал(а):У меня вопрос, а как собирать пакеты в abf. Ну то есть нужно ли класть исходники рядом со spec файлом, или он сам будет их выкачивать в процессе сборки?
Можно закачать сюда 
http://file-store.rosalinux.ru/
а в 	.abf.yml прописать имя файла и его хеш сумму (после загрузки вым сайт сам выдаст её)
пример
Код: Выделить всё
sources:
  sqlitebrowser-3.8.0.tar.gz: 466ef6692c569e2e95158fcb6ac8a4f6ea38fc6f
А также он и сам будет скачивать, только в .spec надо прописать ссылку для скачивания.
пример
Но рекомендуют по первому варианту.
 
			
					
				Re: Сборка RPM
				Добавлено: 14 янв 2016, 17:42
				 Xakep
				Nemial писал(а):У меня вопрос, а как собирать пакеты в abf. Ну то есть нужно ли класть исходники рядом со spec файлом, или он сам будет их выкачивать в процессе сборки?
Почитай вот тут - 
http://wiki.rosalab.ru/ru/index.php/%D0 ... 0%A1%D0%95 
			
					
				Re: Сборка RPM
				Добавлено: 18 янв 2016, 22:22
				 Nemial
				Захотелось мне собрать btrfs-tool 4.1.2, взял клонировал себе проект, поправил спек, добавил исходник и возникла ошибка в сборке может кто поможет, что это такое?
Код: Выделить всё
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.11592
+ umask 022
+ cd /builddir/build/BUILD
+ cd btrfs-progs-v4.1.2
+ '[' 1 -eq 1 ']'
+ '[' 1 -eq 1 ']'
+ CFLAGS='-O2 -Wa,--compress-debug-sections -gdwarf-4 -fvar-tracking-assignments -frecord-gcc-switches -Wstrict-aliasing=2 -pipe -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -ffat-lto-objects -fno-delete-null-pointer-checks -fstack-protector --param=ssp-buffer-size=4 -fPIC'
+ export CFLAGS
+ CXXFLAGS='-O2 -Wa,--compress-debug-sections -gdwarf-4 -fvar-tracking-assignments -frecord-gcc-switches -Wstrict-aliasing=2 -pipe -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -ffat-lto-objects -fno-delete-null-pointer-checks -fstack-protector --param=ssp-buffer-size=4 -fPIC'
+ export CXXFLAGS
+ FFLAGS='-O2 -Wa,--compress-debug-sections -gdwarf-4 -fvar-tracking-assignments -frecord-gcc-switches -Wstrict-aliasing=2 -pipe -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -ffat-lto-objects -fno-delete-null-pointer-checks -fstack-protector --param=ssp-buffer-size=4 -fPIC'
+ export FFLAGS
+ LDFLAGS=' -Wl,--as-needed -Wl,--no-undefined -Wl,-z,now -Wl,-z,relro -Wl,-O1 -Wl,--build-id -Wl,--enable-new-dtags -Wl,--hash-style=gnu'
+ export LDFLAGS
+ CONFIGURE_TOP=.
+ /usr/lib/rpm/mandriva/force-as-needed-for-shared-lib-in-libtool
+ /usr/lib/rpm/mandriva/drop-ld-no-undefined-for-shared-lib-modules-in-libtool
+ /usr/lib/rpm/mandriva/fix-libtool-ltmain-from-overlinking
+ /usr/lib/rpm/mandriva/fix-libtool-from-moving-options-after-libs .
+ /usr/lib/rpm/mandriva/fix-dlsearch-path-in-libtool-for-multilib . lib64
+ '[' -f ./configure.in -o -f ./configure.ac ']'
+ CONFIGURE_XPATH='--x-includes=/usr/include --x-libraries=/usr/lib64'
+ ./configure --build=x86_64-unknown-linux-gnu --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/lib64 --localstatedir=/var --sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info --x-includes=/usr/include --x-libraries=/usr/lib64
RPM build errors:
/var/tmp/rpm-tmp.11592: line 45: ./configure: No such file or directory
error: Bad exit status from /var/tmp/rpm-tmp.11592 (%build)
    Bad exit status from /var/tmp/rpm-tmp.11592 (%build)
Child returncode was: 1
EXCEPTION: Command failed. See logs for output.
 # ['bash', '--login', '-c', 'rpmbuild -bb --target x86_64 --nodeps builddir/build/SPECS/btrfs-progs.spec']
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/mock_urpm/trace_decorator.py", line 70, in trace
    result = func(*args, **kw)
  File "/usr/lib/python2.7/site-packages/mock_urpm/util.py", line 377, in do
    raise mock_urpm.exception.Error, ("Command failed. See logs for output.\n # %s" % (command,), child.returncode)
Error: Command failed. See logs for output.
 # ['bash', '--login', '-c', 'rpmbuild -bb --target x86_64 --nodeps builddir/build/SPECS/btrfs-progs.spec']
LEAVE do --> EXCEPTION RAISED
Взял как мне кажется сам участок, с ошибкой сборки из файла abfworker::rpm-worker
 
			
					
				Re: Сборка RPM
				Добавлено: 18 янв 2016, 22:41
				 Nemial
				И еще вопрос, есть из вас кто собирает пакеты на своей рабочей машине и если есть, как вы это делаете(устанавливаете в виртуалке росу и начинаете в ней собирать, просто не хочется загрязнять систему сборочными зависимостями)
			 
			
					
				Re: Сборка RPM
				Добавлено: 20 янв 2016, 08:05
				 Pulfer
				Nemial писал(а):/var/tmp/rpm-tmp.11592: line 45: ./configure: No such file or directory
Тут ошибка в том, что в дереве исходников нет файла configure. Надо его сгенерировать, выполнив перед configure (%configure2_5x) команду 
autoreconf -fi или скрипт 
./autogen.sh, если он там есть.
 
			
					
				Re: Сборка RPM
				Добавлено: 20 янв 2016, 08:08
				 Pulfer
				Nemial писал(а):И еще вопрос, есть из вас кто собирает пакеты на своей рабочей машине и если есть, как вы это делаете(устанавливаете в виртуалке росу и начинаете в ней собирать, просто не хочется загрязнять систему сборочными зависимостями)
Я просто собираю на основной системе, так что  засорил её сборочными зависимостями  

 Чтобы не засорять, надо использовать mock-urpm, он создаёт чрут, ставит туда зависимости и собирает пакет. Получается дольше по времени, но зато основная система не засоряется. Виртуалку тоже можно использовать, но тогда значительная часть ресурсов системы будет тратиться на эмуляцию.
 
			
					
				Re: Сборка RPM
				Добавлено: 20 янв 2016, 22:26
				 VictorR2007
				Pulfer писал(а):Nemial писал(а):И еще вопрос, есть из вас кто собирает пакеты на своей рабочей машине и если есть, как вы это делаете(устанавливаете в виртуалке росу и начинаете в ней собирать, просто не хочется загрязнять систему сборочными зависимостями)
Я просто собираю на основной системе, так что  засорил её сборочными зависимостями  

 Чтобы не засорять, надо использовать mock-urpm, он создаёт чрут, ставит туда зависимости и собирает пакет. Получается дольше по времени, но зато основная система не засоряется. Виртуалку тоже можно использовать, но тогда значительная часть ресурсов системы будет тратиться на эмуляцию.
 
Немного дополню.
mock-urpm, это очень крутая вещь.
Если к ней привыкнуть.
На мой взгляд, это шедевр.
А на самом деле, это просто сборочная abf на локальной машине.
Если заинтересуетесь, могу поделиться нюансами в её использовании, или в решении проблем.
Но только нужно обсуждать это в другой теме.
Типа «Настройка mock-urpm»
 
			
					
				Re: Сборка RPM
				Добавлено: 06 фев 2016, 11:50
				 Buagir
				VictorR2007 писал(а):Pulfer писал(а):
Я просто собираю на основной системе, так что  засорил её сборочными зависимостями  

 Чтобы не засорять, надо использовать mock-urpm, он создаёт чрут, ставит туда зависимости и собирает пакет. Получается дольше по времени, но зато основная система не засоряется. Виртуалку тоже можно использовать, но тогда значительная часть ресурсов системы будет тратиться на эмуляцию.
 
Немного дополню.
mock-urpm, это очень крутая вещь.
Если к ней привыкнуть.
На мой взгляд, это шедевр.
А на самом деле, это просто сборочная abf на локальной машине.
Если заинтересуетесь, могу поделиться нюансами в её использовании, или в решении проблем.
Но только нужно обсуждать это в другой теме.
Типа «Настройка mock-urpm»
 
Да поделитесь! Мне как молодому сборщику кок раз нужно с этой штуки начать чтоб не эмуляторов не ставить ни уж тем более засорять систему.
 
			
					
				Re: Сборка RPM
				Добавлено: 06 фев 2016, 12:11
				 VictorR2007
				Buagir писал(а):
Да поделитесь! Мне как молодому сборщику кок раз нужно с этой штуки начать чтоб не эмуляторов не ставить ни уж тем более засорять систему.
http://forum.rosalab.ru/viewtopic.php?f=48&t=6767 
			
					
				Re: Сборка RPM
				Добавлено: 07 фев 2016, 01:56
				 Nemial
				А что делает данная строчка в спеке
 
			
					
				Re: Сборка RPM
				Добавлено: 08 фев 2016, 23:48
				 Nemial
				И почему именно 28iclear, а не что-нибудь другое?
И может не в тему, но все-таки, кто-нибудь может принять мой пул реквест насчет добавления логотипа росы в программу screenfetch-dev?
			 
			
					
				Re: Сборка RPM
				Добавлено: 09 фев 2016, 23:52
				 Nemial
				И ещё вопрос, как из основного проекта перенести в свой клонированный изменения(не хочу постоянно клонировать проект при появлении в нем изменений)
			 
			
					
				Re: Сборка RPM
				Добавлено: 10 фев 2016, 00:11
				 Nemial
				И еще при сборке calibre
Код: Выделить всё
 File listed twice: /usr/share/icons/hicolor/scalable/mimetypes/application-x-sony-bbeb.png
    R python(abi) (/usr/lib64/calibre/chardet/__init__.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/big5prober.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/chardistribution.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/charsetgroupprober.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/charsetprober.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/codingstatemachine.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/escprober.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/escsm.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/eucjpprober.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/euckrprober.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/euctwprober.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/gb2312prober.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/hebrewprober.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/latin1prober.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/mbcharsetprober.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/mbcsgroupprober.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/mbcssm.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/sbcharsetprober.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/sbcsgroupprober.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/sjisprober.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/test.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/universaldetector.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi)
    R python(abi) (/usr/lib64/calibre/chardet/utf8prober.py) overlaps R python(abi) = 2.7 (/usr/lib64/calibre/calibre/db/cache.py), removing R python(abi) 
Господа, не подскажете ли вы, что делать?
 
			
					
				Re: Сборка RPM
				Добавлено: 10 фев 2016, 01:11
				 VictorR2007
				Nemial писал(а):И еще при сборке calibre
Господа, не подскажете ли вы, что делать?
Вроде ругается на неупакованный файл
Код: Выделить всё
Installed (but unpackaged) file(s) found:
	/usr/share/icons/hicolor/scalable/mimetypes/application-x-sony-bbeb.png
 
			
					
				Re: Сборка RPM
				Добавлено: 10 фев 2016, 14:58
				 Nemial
				Не в пакете дело(я уже пробовал)
меня напрягает
Код: Выделить всё
File listed twice: /usr/share/icons/hicolor/scalable/mimetypes/application-x-sony-bbeb.png
Вот это и интересует как добавить файл в исключения(чтобы он не упаковывался)
 
			
					
				Re: Сборка RPM
				Добавлено: 10 фев 2016, 15:13
				 VictorR2007
				Nemial писал(а):Не в пакете дело(я уже пробовал)
меня напрягает
Код: Выделить всё
File listed twice: /usr/share/icons/hicolor/scalable/mimetypes/application-x-sony-bbeb.png
Вот это и интересует как добавить файл в исключения(чтобы он не упаковывался)
 
А почему не хотите его упаковать?
Исключить можно так.
Можно убрать из спека строку
Код: Выделить всё
cp -p resources/images/mimetypes/lrf.png \
	%{buildroot}%{_datadir}/icons/hicolor/scalable/mimetypes/application-x-sony-bbeb.png
или после неё добавить
Код: Выделить всё
rm -f %{buildroot}%{_iconsdir}/hicolor/scalable/mimetypes/application-x-sony-bbeb.png
 
			
					
				Re: Сборка RPM
				Добавлено: 10 фев 2016, 15:47
				 Nemial
				Я хочу его упаковать, но при его упаковке у меня выходит это
Код: Выделить всё
File listed twice: /usr/share/icons/hicolor/scalable/mimetypes/application-x-sony-bbeb.png
 
			
					
				Re: Сборка RPM
				Добавлено: 10 фев 2016, 17:59
				 VictorR2007
				Nemial писал(а):Я хочу его упаковать, но при его упаковке у меня выходит это
Код: Выделить всё
File listed twice: /usr/share/icons/hicolor/scalable/mimetypes/application-x-sony-bbeb.png
 
А он и указан дважды.
%{_datadir}/icons/hicolor/scalable/mimetypes/*
и
%{_datadir}/icons/hicolor/*/mimetypes/*
 
			
					
				Re: Сборка RPM
				Добавлено: 10 фев 2016, 18:01
				 Nemial
				И что можно сделать с этим?
			 
			
					
				Re: Сборка RPM
				Добавлено: 10 фев 2016, 18:16
				 VictorR2007
				Nemial писал(а):И что можно сделать с этим?
Удалить строку
%{_datadir}/icons/hicolor/scalable/mimetypes/*
Она лишняя и дублирует строку
%{_datadir}/icons/hicolor/*/mimetypes/*
 
			
					
				Re: Сборка RPM
				Добавлено: 10 фев 2016, 19:32
				 Nemial
				Спасибо
			 
			
					
				Re: Сборка RPM
				Добавлено: 16 фев 2016, 17:05
				 Nemial
				Господа, кто-нибудь мог бы отклонить мой пул реквест для calibre(он глючным отправился, не открывается)
			 
			
					
				Re: Сборка RPM
				Добавлено: 17 фев 2016, 13:12
				 Pulfer
				Nemial писал(а):Господа, кто-нибудь мог бы отклонить мой пул реквест для calibre(он глючным отправился, не открывается)
Передал просьбу разработчику ABF. Надеюсь, он удалит.
 
			
					
				Re: Сборка RPM
				Добавлено: 17 фев 2016, 20:34
				 Nemial
				Благодарю
			 
			
					
				Re: Сборка RPM
				Добавлено: 19 фев 2016, 00:12
				 Nemial
				У меня вопросы(может нубские)
В чем отличие указания в BuildRequires зависимости pkgconfig(sdl2) и просто название самой библиотеки без pkgconfig, и можно ли прописывать pkgconfig в обычные зависимости, а не только сборочные и будут ли от этого какие-то плюсы?
Что означает EOF и для чего это нужно в спеке.?
И как можно свой клонированный проект синхронизировать с изменениями основного проекта, без удаления и нового клонировая проекта?
			 
			
					
				Re: Сборка RPM
				Добавлено: 19 фев 2016, 10:02
				 Pulfer
				Nemial писал(а):В чем отличие указания в BuildRequires зависимости pkgconfig(sdl2) и просто название самой библиотеки без pkgconfig, и можно ли прописывать pkgconfig в обычные зависимости, а не только сборочные и будут ли от этого какие-то плюсы?
pkgconfig(XXX) - это автоматически генерируемая при сборке запись Provides пакета. Генерируется она на основе файла /usr/lib[64]/pkgconfig/XXX.pc или /usr/share/pkgconfig/XXX.pc. Как правило, эти файлы лежат в -devel пакетах библиотек. То есть если какому-то пакету нужна зависимость именно от -devel пакета, то можно и в обычных зависимостях прописать pkgconfig(XXX). Но такое случается крайне редко, обычно все нужные зависимости даже для -devel пакетов генерируются правильно автоматически.
В чём преимущество формата pkgconfig(XXX) перед XXX-devel?
Во-первых, это более универсальный способ, исключающий зависимость от имени пакета, которое в разных дистрибутивах может быть разным на усмотрение мейнтейнеров. Кто-то может пакет XXX-devel сделать, кто-то libXXX-devel или как-то ещё. А с pkgconfig(XXX) как в апстриме решили, так и будет.
Во-вторых, в pkgconfig-файле как правило содержится информация о версии библиотеки. А при использовании имени пакета используется версия пакета, а не библиотеки. Обычно эти версии совпадают, но не всегда. А программы при сборке, когда проверяют наличие зависимостей, ориентируются всё же на версии библиотек, а не пакетов.
Надеюсь, достаточно понятно объяснил, почему это самый предпочтительный формат записи зависимостей сборки.
Nemial писал(а):Что означает EOF и для чего это нужно в спеке.?
Как правило, это просто индикатор, используемый для указания конца ввода. Т.е. используем прямо в спеке при сборке пакета команду cat, которой говорим, что вот в такой файл записать такое содержимое. И EOF указывает, что на этом месте надо прекратить запись в файл и перейти к выполнению следующих команд из спека.
Код: Выделить всё
# install menu entry
mkdir -p %{buildroot}%{_datadir}/applications/
cat > %{buildroot}%{_datadir}/applications/%{name}.desktop << EOF
[Desktop Entry]
Name=PPSSPP
Comment=Sony PSP emulator
Exec=%{_gamesbindir}/%{name}-sdl
Icon=%{name}
Terminal=false
Type=Application
Categories=Game;Emulator;
EOF
Nemial писал(а):И как можно свой клонированный проект синхронизировать с изменениями основного проекта, без удаления и нового клонировая проекта?
Видимо, только стандартными средствами гита. Надо погуглить по запросу "git merge upstream" или как-то так. А там уже самый понятный текст взять. Может вот этот подойдёт: 
https://git-scm.com/book/en/v2/Git-Basi ... th-Remotes 
			
					
				Re: Сборка RPM
				Добавлено: 22 фев 2016, 18:36
				 Алзим
				Я «
собрал» игру. 
Нажимаю «Пул реквест». Потом нажимаю «Обновить коммиты», но ничего не происходит.
 
			
					
				Re: Сборка RPM
				Добавлено: 22 фев 2016, 18:48
				 Nemial
				Все верно, ведь вы собрали игру, но не вносили никаких изменений в проект, поэтому пул реквест и не отправиться.