26 (2012-10-24 14:52:14 отредактировано zrpg)

Консоль
$ cat .rpmmacros
%packager               zRPG при поддержке olelukoie  mail@example.com smile
%distribution           Mageia
%vendor                 Mageia Russian Community
%distsuffix             .mrc.mga2

$ cat skype-call-recorder.spec
Name: skype-call-recorder
Version: 0.8
Release: %mkrel 1
Summary: Skype call record
URL: http://atdot.ch/scr
Group: Networking/Other
License: GPL
Source: %{name}-%{version}.tar.gz
Patch: 1.patch

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildRequires: cmake
BuildRequires: lame-devel
BuildRequires: id3-devel
BuildRequires: qt4-devel

%description
Recording calls through Skype API

%prep
%setup -q
%apply_patches

%build
%cmake
%make

%install
cd ./build
%makeinstall_std
cd ..

%changelog

%files
/usr/bin/skype-call-recorder
/usr/share/applications/skype-call-recorder.desktop
/usr/share/icons/hicolor/128x128/apps/skype-call-recorder.png

А вот со значком похоже всё не так просто. ИМХО, дело в том что значок создаётся из трёх картинок которые и лежат в icon
Сам значок после запуска программы выглядит вот так. http://forum.mageia.org.ru/extensions/hcs_image_uploader/uploads/0/4500/4915/thumb/p17a97ir5jicciov1pk88gj12i11.png
Предположу что это сделано для того что-бы менять цвет у отдельных частей значка.

Консоль
$ rpmbuild -ba ./skype-call-recorder.spec
ошибка: Неудовлетворенные зависимости сборки:
        id3-devel нужен для skype-call-recorder-0.8-1.mrc.mga22.x86_64
$ su
Пароль:
# urpmi id3-devel
Нет пакета с названием id3-devel
Следующие пакеты содержат id3-devel: lib64id3-devel, libid3-devel
Чтобы выбрать все, используйте параметр «-a»
# urpmi lib64id3-devel
Пакет lib64id3-devel-3.8.3-20.mga2.x86_64 уже установлен
# exit
exit
$ rpmbuild -ba ./skype-call-recorder.spec
ошибка: Неудовлетворенные зависимости сборки:
        id3-devel нужен для skype-call-recorder-0.8-1.mrc.mga22.x86_64

x86_64, Xfce
английский язык скудный, невыразительный, торопливый, пишется и говорится по разному.

27

PREFIX не сменили

Аккаунт отключен по просьбе пользователя. (28.12.2014)

28 (2012-10-24 14:33:36 отредактировано zrpg)

если используется %cmake и %makeinstall_std то префикс не нужен. Или нет?

x86_64, Xfce
английский язык скудный, невыразительный, торопливый, пишется и говорится по разному.

29

Видите /usr/local, а надо /usr

Аккаунт отключен по просьбе пользователя. (28.12.2014)

30

romkaromka пишет:

Видите /usr/local, а надо /usr

поправил

x86_64, Xfce
английский язык скудный, невыразительный, торопливый, пишется и говорится по разному.

31 (2012-10-25 00:28:47 отредактировано olelukoie)

1) По поводу значков: надо выполнить такие команды:

convert -resize 32x32 -background none icon.svg icon32.png
convert -resize 48x48 -background none icon.svg icon48.png

Эти две команды сгенерят два значка 32х32 и 48х48 пикселей. Еще можно аналогичным способом добавить значки 16х16, 24х24 и 64х64 пикселя. Затем эти файлы надо скопировать в %{buildroot}%{_iconsdir}/hicolor/32x32/apps/skype-call-recorder.png, %{_iconsdir}/hicolor/48x48/apps/skype-call-recorder.png и т.п. При этом добавятся такие изменения в спеке:
- в зависимости сборки надо добавить imagemagick.
- в секции %build после сборки добавятся команды перехода в директорию icon и генерации картинок

cd ./icon
convert -resize 32x32 -background none icon.svg icon32.png
convert -resize 48x48 -background none icon.svg icon48.png
...

- в секции %install после установки добавятся команды создания каталогов %{buildroot}%{_iconsdir}/hicolor/*/apps/ и копирования в них соответствующих png-файлов из директории icon:

%__mkdir_p %{buildroot}%{_iconsdir}/hicolor/32x32/apps/
%__mkdir_p %{buildroot}%{_iconsdir}/hicolor/48x48/apps/
...
%__cp ./icon/icon32.png %{buildroot}%{_iconsdir}/hicolor/32x32/apps/%{name}.png
%__cp ./icon/icon48.png %{buildroot}%{_iconsdir}/hicolor/48x48/apps/%{name}.png
...

- в секции %files вместо /usr/share/icons/hicolor/128x128/apps/skype-call-recorder.png надо записать %{_iconsdir}/hicolor/*/apps/%{name}.png
2. Зависимости сборки надо ставить командой 'urpmi --buildrequires --no-suggests spec-файл'.
3. Ошибка с  id3-devel вызвана опечаткой: должно быть id3lib-devel.
4. Файл spec должен лежать в ~/rpmbuild/SPECS, исходники и патч - в ~/rpmbuild/SOURCES. Если это так, то указывать './' перед именем спека в командах не требуется, rpm и так его найдет.
5. Строка BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root в современных магее, мандриве и других родственных дистрах не требуется.
6. В секции %files вместо путей к файлам надо использовать макросы: /usr/bin -> %{_bindir}, /usr/share -> %{_datadir}, /usr/share/icons -> %{_iconsdir}
7. И еще у Вас в rpmmacros лишняя двойка указана в макросе distsuffix, в результате чего магея у Вас уже имеет номер версии 22 smile

32 (2012-10-26 17:54:18 отредактировано zrpg)

Чем дальше, тем я понимаю всё меньше и меньше sad
Вот например
непонятно где конкретно находится %{buildroot}?
Раньше я думал что он находится здесь, %{_tmppath}/%{name}-%{version}-%{release}-root, (хотя тут тоже непонятно, где находится %{_tmppath}  ?, пока что думаю что это папка /tmp ), теперь когда надо убрать строку
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root, то где теперь будет {%buildroot}?

Тоже самое с %{_iconsdir}.  Где это?

Может есть где-то таблица в которой указано что каждый %<имя> означает? Если да, поделитесь ссылкой пожалуйста.

Если уже сгенерировали иконки других размеров, и положили их в %{_iconsdir}/hicolor/*/apps/ то зачем потом, в спеке их снова генерировать?

По какому принципу ставиться 0, 1 или несколько символов "_" перед именем макроса?
%__mkdir_p, %{_iconsdir}, %{name}
Как отличить макрос от раздела, если все они начинаются с "%" ?

olelukoie⇓ пишет:

7. И еще у Вас в rpmmacros лишняя двойка указана в макросе distsuffix, в результате чего магея у Вас уже имеет номер версии 22 smile

А это именно потому что я делаю без понимания происходящего. Пытаюсь разобраться, вот и пробую что-то от себя smile

И ещё один вопрос именно к вам, уважаемый Olelukoie. Почему вы не сказали сразу что конкретно надо изменить, а добавляете изменения в спеке и даже иногда меняете собственные изменения, на протяжении вот уже десятка сообщений? Думаю вряд ли ваша цель меня запутать wink

Добавлено:
Вот ещё не понял чем %__mkdir_p лучше просто команды "mkdir -p"
Я так понимаю, что макросы мы используем для того чтобы спек был дистронезависимым или независил от версии mageia. Но ведь если надо будет собирать для следующей версии mageia то придётся редактировать spec, или архитектуры, или другого дистрибутива. Так зачем тогда эти макросы?
Откуда взялась ещё одна двойка, из-за которой получилась mageia22 ?

x86_64, Xfce
английский язык скудный, невыразительный, торопливый, пишется и говорится по разному.

33 (2012-10-26 15:23:12 отредактировано romkaromka)

Показать текущее значение rpmrc и макросов:

rpm --showrc

Сборка идет в директории BUILD, затем раскладывается в BUILDROOT.
%{_iconsdir} эквивалентно /usr/share/icons
zRPG, можно забить на иконки, достаточно одной.
Любой пакет, будь то rpm или deb - это архив, при распаковке которого всё раскладывается относительно корня /, а в сборочной роль корня играет BUILDROOT.
Поэтому, когда нам надо положить не в /, а в BUILDROOT, то мы пишем %{buildroot} вместо /.
Затем всё лежащее в BUILDROOT заворачивается в архив - rpm-пакет.

Аккаунт отключен по просьбе пользователя. (28.12.2014)
Спасибо сказали: zrpg1

34 (2012-10-26 18:15:45 отредактировано zrpg)

romkaromka пишет:

zRPG, можно забить на иконки, достаточно одной.

если начали, то ИМХО надо до победы smile

olelukoie,

Консоль
$ cat ~/.rpmmacros | grep suffix
%distsuffix             .mrc.mga
$ cat SPECS/skype-call-recorder.spec
Name: skype-call-recorder
Version: 0.8
Release: %mkrel 1
Summary: Skype call record
URL: http://atdot.ch/scr
Group: Networking/Other
License: GPL
Source: %{name}-%{version}.tar.gz
Patch: 1.patch

BuildRequires: cmake
BuildRequires: lame-devel
BuildRequires: id3lib-devel
BuildRequires: qt4-devel
BuildRequires: imagemagick

%description
Recording calls through Skype API

%prep
%setup -q
%apply_patches

%build
%cmake
%make
cd ./icon
convert -resize 16x16 --background none icon.svg icon16.png
convert -resize 24x24 --background none icon.svg icon24.png
convert -resize 32x32 --background none icon.svg icon32.png
convert -resize 48x48 --background none icon.svg icon48.png
convert -resize 64x64 --background none icon.svg icon64.png

%install
cd ./build
%makeinstall_std
cd ..
%__mkdir_p %{buildroot}/%{iconsdir}/hicolor/16x16/apps/
%__mkdir_p %{buildroot}/%{iconsdir}/hicolor/24x24/apps/
%__mkdir_p %{buildroot}/%{iconsdir}/hicolor/32x32/apps/
%__mkdir_p %{buildroot}/%{iconsdir}/hicolor/48x48/apps/
%__mkdir_p %{buildroot}/%{iconsdir}/hicolor/64x64/apps/
%__cp icon16.png %{buildroot}/%{iconsdir}/hicolor/16x16/apps/%{name}.png
%__cp icon24.png %{buildroot}/%{iconsdir}/hicolor/24x24/apps/%{name}.png
%__cp icon32.png %{buildroot}/%{iconsdir}/hicolor/32x32/apps/%{name}.png
%__cp icon48.png %{buildroot}/%{iconsdir}/hicolor/48x48/apps/%{name}.png
%__cp icon64.png %{buildroot}/%{iconsdir}/hicolor/64x64/apps/%{name}.png

%changelog

%files
%{_bindir}/skype-call-recorder
%{_datadir}/applications/skype-call-recorder.desktop
%{_iconsdir}/hicolor/16x16/apps/skype-call-recorder.png
%{_iconsdir}/hicolor/24x24/apps/skype-call-recorder.png
%{_iconsdir}/hicolor/32x32/apps/skype-call-recorder.png
%{_iconsdir}/hicolor/48x48/apps/skype-call-recorder.png
%{_iconsdir}/hicolor/64x64/apps/skype-call-recorder.png
$

x86_64, Xfce
английский язык скудный, невыразительный, торопливый, пишется и говорится по разному.

35 (2012-10-26 18:40:59 отредактировано romkaromka)

Фразу "skype-call-recorder" можно не писать, а писать %{name}.
Не забудьте дать права верные на каждый файл.
Чтобы не создавать директории mkdir и не копировать cp и не давать права chmod - используйте install, который делает всё сразу:

rpm --showrc|grep install

install -D -m 644 %1-48.png $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/48x48/apps/%{name}.png
install -D -m 644 %1-32.png $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/32x32/apps/%{name}.png
install -D -m 644 %1-16.png $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/16x16/apps/%{name}.png

Аккаунт отключен по просьбе пользователя. (28.12.2014)

36 (2012-10-26 18:44:26 отредактировано romkaromka)

$RPM_BUILD_ROOT и %{buildroot} - это синонимы.
%{_datadir}/icons - это %{_iconsdir}
Еще обратите внимание, что после %{buildroot} не пишут / (хотя работает и так и так)

Аккаунт отключен по просьбе пользователя. (28.12.2014)

37 (2012-10-26 19:43:22 отредактировано olelukoie)

zRPG пишет:

Чем дальше, тем я понимаю всё меньше и меньше sad

Это не страшно smile
Все, что начинается c % - это макрос, который при обработке спека rpm'ом разворачивается в некоторый текст. То, как этот текст интерпретируется (путь, команда, имя файла или некая числовая константа), зависит от самого текста и контекста. "Язык" rpm довольно развит и чем-то напоминает shell-скрипт, в нем даже есть условные операторы.

Стандартные макросы лежат в директории /usr/lib/rpm (независимо от архитектуры) в файлах macros и некоторых других. Почитайте содержимое этой директории и ее поддиректорий, найдете много интересного. Архитектурно-зависимые макросы лежат в /usr/lib/rpm/platform/<архитектура>-linux/macros. Вот как  описаны некоторые макросы (включая %__mkdir_p и %__cp):

$ cat /usr/lib/rpm/macros | grep __mkdir
%__mkdir                /bin/mkdir
%__mkdir_p              /bin/mkdir -p
$ cat /usr/lib/rpm/macros | grep __cp
%__cp                   /bin/cp
%__cpio                 /bin/cpio
%__cpp                  gcc -E
$ cat /usr/lib/rpm/platform/x86_64-linux/macros | grep %_arch
%_arch                  x86_64

Почему они начинаются с двух подчеркиваний, я не знаю, видимо просто такое соглашение принято для команд. Если вместо них использовать сами команды, то ничего страшного не случится, но это будет не красиво.
А вот как определены макросы с путями:

$ cat /usr/lib/rpm/macros | grep prefix
%_prefix                /usr
%_exec_prefix           %{_prefix}
%_bindir                %{_exec_prefix}/bin
%_sbindir               %{_exec_prefix}/sbin
%_libexecdir            %{_exec_prefix}/libexec
%_datadir               %{_prefix}/share
%_sharedstatedir        %{_prefix}/com
%_localstatedir         %{_prefix}/var
%_libdir                %{_exec_prefix}/%{_lib}
%_includedir            %{_prefix}/include
$ cat /usr/lib/rpm/platform/x86_64-linux/macros | grep %_lib
%_libexecdir            /usr/lib64
%_lib                   lib64
%_libdir                /usr/lib64

(я немного почистил вывод этой команды, поскольку prefix там встречается много где еще.)
Кроме того есть макросы пользователя (в ~/.rpmmacros, с ним Вы уже знакомы) и дополнительные системные макросы, добавляемые теми или иными пакетами, которые лежат в /etc/rpm и ее поддиректории macros.d. Например, макрос %cmake описан в файле /etc/rpm/macros.d/cmake.macros. Почитайте содержимое этих файлов, это тоже интересно и поможет Вам понять, что же происходит при использовании этих макросов.

Использовать ли фигурные скобки вокруг имен макросов (как я показал выше) или нет (например, %_lib или %buildroot) определяется выбранным стилем написания спека. В некоторых случаях скобки необходимы как разделитель (например %{name}1 - это не то же самое, что %name1), но по большей части это вопрос стиля и политики. Например, макросы, определяющие начало разделов (%description, %prep, %build, %install, %files и т.п.) обычно пишут без скобок, как и стандартные макросы конфигурирования, сборки и установки (%configure2_5x, %cmake, %qmake, %make, %makeinstall_std и т.п.), а макросы, описывающие некие константы, имена файлов, пути - со скобками.

Что же до моих замечаний и предложений, то, во-первых, я тоже иногда ошибаюсь smile, а во-вторых, я далеко не все могу сразу увидеть и выдать предложения. Про значки, например, я подумал только тогда, когда сам скачал, собрал, установил прогу и посмотрел, что там установилось.

И да, мой ник - это не имя и писать его с большой буквы не надо smile

Спасибо сказали: zrpg1

38

olelukoie, если собрал, то положи в репозиторий.

Аккаунт отключен по просьбе пользователя. (28.12.2014)

39 (2012-10-26 20:25:02 отредактировано olelukoie)

romkaromka пишет:

olelukoie, если собрал, то положи в репозиторий.

Я в пакет не собирал, я так собрал и сделал тестовую установку.

Версия спека из 34-ого поста на глаз нормальная, можно пробовать собрать.

40

%apply_patches что-то работает плохо, создает лишний файл .0001
Лучше так для патча №1:
%patch1 -p0
или
%patch1 -p1
Лучше так для патча №2:
%patch2 -p0
или
%patch2 -p1

Аккаунт отключен по просьбе пользователя. (28.12.2014)

41

romkaromka пишет:

%apply_patches что-то работает плохо, создает лишний файл .0001
Лучше так для патча №1:
%patch1 -p0
или
%patch1 -p1
Лучше так для патча №2:
%patch2 -p0
или
%patch2 -p1

Если патч один, то можно и по старинке. Если у патчей разные уровни опции -p - тоже приходится применять их по отдельности. В остальных случаях лучше использовать %apply_patches (этот макрос подразумевает -p1). А файл .0001 - это просто автоматический бэк'ап оригинальной версии файла.

42

Дело в том, что файл .0001, если не доглядеть, попадет в rpm пакет. Например, в случаях когда патчится что-нибудь на python и не требует компиляции. А по старинке об этом думать не надо.

Аккаунт отключен по просьбе пользователя. (28.12.2014)