Автор Тема: Вопрос по сборке пакета с помощью rpmbuild  (Прочитано 11107 раз)

Оффлайн Koi

  • alt linux team
  • ***
  • Сообщений: 1 893
  • валар дохаэрис
    • Канал на youtube
http://sisyphus.ru/ru/srpm/Sisyphus/genspec/spec
А я могу в %install запустить просто скрипт установки программы например:
%install
./install-it.sh
Потом расписать пути в %files?

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 159
    • Домашняя страница
http://sisyphus.ru/ru/srpm/Sisyphus/genspec/spec
А я могу в %install запустить просто скрипт установки программы например:
%install
./install-it.sh
Потом расписать пути в %files?
Можно. Хотя нагляднее устанавливать самому через install -D...
Андрей Черепанов (cas@)

Оффлайн Koi

  • alt linux team
  • ***
  • Сообщений: 1 893
  • валар дохаэрис
    • Канал на youtube
Не, это скучно.

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 361
  • Учиться .... Телепатами не рождаются, ими ....
Не, это скучно.
Какая тебе разница - помещать скрипт внутри спека, или отдельным файлом?

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 159
    • Домашняя страница
Андрей Черепанов (cas@)

Оффлайн Koi

  • alt linux team
  • ***
  • Сообщений: 1 893
  • валар дохаэрис
    • Канал на youtube
Какая тебе разница - помещать скрипт внутри спека, или отдельным файлом?
«Не следует множить сущее без необходимости» © У.Оккам
Просто я хотел упаковать две программы в один rpm, а теперь думаю, обновляются они по разному, и в результате все равно придется ставить отдельно.

Оффлайн kostyalamer

  • Мастер
  • ***
  • Сообщений: 432
    • Сайт клуба активных пользователей ALT Linux
Пересобрал Pinta. В репозитории версия 1.4 только.
https://yadi.sk/d/sgItoup2doaUT в папке rpm версия 1.5 если кому нужна.
1) Привет новому поколению сборщиков от старого :)  Если нормально собирается в хашере могу пересобрать в репозитарий клуба для p7/t7. http://altclub.100ms.ru/%D0%A0%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%B0%D1%80%D0%B8%D0%B8-%D0%BA%D0%BB%D1%83%D0%B1%D0%B0/
2) Приглашаю вступить к нам в клуб, кодеры / сборщики и тестеры нужны всегда.
Если готов отпишись тут , примем : http://forum.russ2.com/index.php?showtopic=2735&pid=35257&st=60&#entry35257
3) Понять чем примерно занимается клуб можно тут: http://forum.russ2.com/index.php?showforum=203
или более официально здесь : http://www.altlinux.org/Alt_Linux_Active_Users_Club
Archlinux  / Altlinux Free Mate p8

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 361
  • Учиться .... Телепатами не рождаются, ими ....
Так дай в багзиле ссылку на твою сборку, а ещё лучше исходники на git где-нибудь помести.

Оффлайн Koi

  • alt linux team
  • ***
  • Сообщений: 1 893
  • валар дохаэрис
    • Канал на youtube
Как собрать пакет, чтоб он распаковывал файлы в Хом пользователя?
Например есть Source называющийся %name.desktop
Надо чтобы устонавливался в /home/user/.kde4/Autostart/

В %install пишу такое:
%install
install -D -m 0644 %SOURCE2 %buildroot%homedir/.kde4/Autostart/%name.desktop

В %files:
%files
%homedir/.kde4/Autostart/%name.desktop

Создается пакет в котором файл %name.desktop лежит в папке /home/koi/.kde4/Autostart/%name.desktop
Это конечно замечательно, но у других людей вряд ли есть пользователь koi.
Как сделать, что установка была в .kde4/Autostart/ любого кто ставит пакет?

Пытался:
%install
install -D -m 0644 %SOURCE2 %buildroot%datadir/autostart/%name.desktop
%files
/usr/share/autostart/%name.desktop

Но тогда программа не хочет автостартовать. Запускаемой делать пытался, все равно из этой директории не стартует.
На самом деле мне все равно где будет находится ярлык %name.desktop , лишь бы он запускался со стартом kde.




Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 159
    • Домашняя страница
autostart переехал в /etc/xdg. Сначала вручную туда поместите, потом пакетьте.
Андрей Черепанов (cas@)

Оффлайн Koi

  • alt linux team
  • ***
  • Сообщений: 1 893
  • валар дохаэрис
    • Канал на youtube
autostart переехал в /etc/xdg
Точно, из xdg/autostart действительно работает.

Оффлайн Koi

  • alt linux team
  • ***
  • Сообщений: 1 893
  • валар дохаэрис
    • Канал на youtube
Может кто подсказать как вылечить ошибку.
Запускаю поиск зависимостей , получаю безобразие:
$ rpmbb -r obs-studio.spec
 $ nice buildreq -bc /home/rupor/RPM/SPECS/obs-studio.spec
WARNING: %post_ldconfig is obsolete and will be removed soon
WARNING: %post_ldconfig is obsolete and will be removed soon
Выполняется(%prep): /bin/sh -e /home/rupor/tmp/rpm-tmp.70335
+ umask 022
+ /bin/mkdir -p /home/rupor/RPM/BUILD
+ cd /home/rupor/RPM/BUILD
+ cd /home/rupor/RPM/BUILD
+ rm -rf obs-studio-0.9.1
+ echo 'Source #0 (obs-studio-0.9.1.tar.gz):'
Source #0 (obs-studio-0.9.1.tar.gz):
+ /bin/gzip -dc /home/rupor/RPM/SOURCES/obs-studio-0.9.1.tar.gz
+ /bin/tar -xf -
/bin/tar: Ignoring unknown extended header keyword 'SCHILY.fflags'
+ cd obs-studio-0.9.1
+ /bin/chmod -c -Rf u+rwX,go-w .
+ exit 0
Выполняется(%build): /bin/sh -e /home/rupor/tmp/rpm-tmp.84161
+ umask 022
+ /bin/mkdir -p /home/rupor/RPM/BUILD
+ cd /home/rupor/RPM/BUILD
+ cd obs-studio-0.9.1
+ mkdir -p build
+ cd build
+ cmake -DUNIX_STRUCTURE=1 -DCMAKE_INSTALL_PREFIX=/usr -DOBS_VERSION_OVERRIDE=0.9.1 ..
-- The C compiler identification is GNU 4.7.2
-- The CXX compiler identification is GNU 4.7.2
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- OBS_VERSION: 0.9.1
-- Try C++11 flag = [-std=gnu++11]
-- Performing Test CXX11_FLAG_DETECTED
-- Performing Test CXX11_FLAG_DETECTED - Success
-- Found CXX11: -std=gnu++11 
-- Looking for XOpenDisplay in /usr/lib64/libX11.so;/usr/lib64/libXext.so
-- Looking for XOpenDisplay in /usr/lib64/libX11.so;/usr/lib64/libXext.so - found
-- Looking for gethostbyname
-- Looking for gethostbyname - found
-- Looking for connect
-- Looking for connect - found
-- Looking for remove
-- Looking for remove - found
-- Looking for shmat
-- Looking for shmat - found
-- Looking for IceConnectionNumber in ICE
-- Looking for IceConnectionNumber in ICE - found
-- Found X11: /usr/lib64/libX11.so
-- Found OpenGL: /usr/lib64/libGL.so 
CMake Error at deps/glad/CMakeLists.txt:30 (target_include_directories):
  Unknown CMake command "target_include_directories".


-- Configuring incomplete, errors occurred!
ошибка: Неверный код возврата из /home/rupor/tmp/rpm-tmp.84161 (%build)


Ошибки сборки пакетов:
    Неверный код возврата из /home/rupor/tmp/rpm-tmp.84161 (%build)
You can run with -R param for search a dependences for install section of the package (as with buildreq -bi)

Спек такой:
Name: obs-studio
Version: 0.9.1
Release: alt1

Summary: A recording/broadcasting program
Summary(ru_RU.UTF-8): Записи / программа вещания стрим

License: GPL-2.0
Group: Multimedia
Url: https://obsproject.com/
Packager: Koi <eg.evgeniy@gmail.com>

Source: %name-%version.tar.gz

BuildRequires: cmake

%description
Open Broadcaster Software is free and open source software for video recording and live streaming.

%description -l UTF-8
Открытое программное обеспечение, является бесплатным и открытым исходным кодом для записи видео и потокового вещания ( live streaming ).

%package devel
Summary: A recording/broadcasting program - Development Files
Summary(ru_RU.UTF-8): Файлы для разработки
Group: Multimedia
Requires: %name = %version

%description devel
Open Broadcaster Software is free and open source software for video recording and live streaming.

%description -l UTF-8
Открытое программное обеспечение, является бесплатным и открытым исходным кодом для записи видео и потокового вещания ( live streaming ).

%prep
%setup

%build
mkdir -p build && cd build
# does not like cmake macro as it fails to link in math.h (-lm)
cmake \
  -DUNIX_STRUCTURE=1 \
  -DCMAKE_INSTALL_PREFIX=/usr \
  -DOBS_VERSION_OVERRIDE="%version" \
  ..

%install
cd build
%make_install

# fix lib package locations which are inconsistent since they are 64bit libs, but placed in lib/
%ifarch x86_64
mkdir -p %buildroot%_libdir/obs-plugins
# needs obs-plugins in lib/ even though 64bit
# mv %%{buildroot}%_libdir/obs-plugins/* %%{buildroot}%%{_libdir}/obs-plugins
mv %buildroot%_libdir/libobs*.so* %buildroot%_libdir
%endif

%post -n %name -p %post_ldconfig
%postun -n %name -p %post_ldconfig

%files
%_bindir/obs
# needs obs-plugins in lib/ even though 64bit
%_usr/lib/obs-plugins
%_libdir/libobs.so.0
%_libdir/libobs-opengl.so*
%_libdir/libobsglad.so.0
%_desktopdir/obs.desktop
%_iconsdir/hicolor/256x256/apps/obs.png
%_datadir/obs

%files devel
%_usr/lib/cmake
%_libdir/libobs.so
%_libdir/libobsglad.so
%_includedir/obs

%changelog

obs-studio-0.9.1/deps/glad/CMakeLists.txt
Такого содержания:
project(glad)

find_package(OpenGL)

if(NOT WIN32 AND NOT APPLE)
find_package(X11)
endif()

set(glad_SOURCES
src/glad.c
include/glad/glad.h)

if(WIN32)
set(glad_PLATFORM_SOURCES
src/glad_wgl.c
include/glad/glad_wgl.h)
elseif(NOT APPLE)
set(glad_PLATFORM_SOURCES
src/glad_glx.c
include/glad/glad_glx.h)
endif()

add_library(glad SHARED
${glad_SOURCES}
${glad_PLATFORM_SOURCES})
set_target_properties(glad PROPERTIES
OUTPUT_NAME obsglad
VERSION "0"
SOVERSION "0")
target_include_directories(glad
PUBLIC include
PRIVATE ${X11_X11_INCLUDE_PATH} ${OPENGL_INCLUDE_DIR})
target_compile_definitions(glad
PRIVATE GLAD_GLAPI_EXPORT_BUILD)

if(NOT MSVC)
target_compile_options(glad
PRIVATE -DPIC -fvisibility=hidden)
if(NOT MINGW)
target_compile_options(glad PRIVATE -fPIC)
endif()
endif()

if(NOT WIN32 AND NOT APPLE)
set(glad_PLATFORM_DEPS
-ldl
${X11_X11_LIB})
endif()

target_link_libraries(glad
${glad_PLATFORM_DEPS}
${OPENGL_gl_LIBRARY})

install_obs_core(glad)
Строчка 30 с ошибкой :
target_include_directories(glad
PUBLIC include
PRIVATE ${X11_X11_INCLUDE_PATH} ${OPENGL_INCLUDE_DIR})
Понятно, что ему надо, но в следствии нубизма, без малейшего понятия как ему это дать.

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 159
    • Домашняя страница
Вот что только люди не делают, лишь бы макросы не использовать.

%build
%cmake
%cmake_build

%install
%cmakeinstall_std

Это по минимуму. Можно добавить красивостей и полезностей типа отключения сборки статических библиотек:
%cmake  -DBUILD_STATIC=OFF
%cmake_build VERBOSE=1

И уберите %post_ldconfig, он не нужен, файлтриггеры сами всё делают.
Андрей Черепанов (cas@)

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 361
  • Учиться .... Телепатами не рождаются, ими ....

Оффлайн Koi

  • alt linux team
  • ***
  • Сообщений: 1 893
  • валар дохаэрис
    • Канал на youtube
Вот что только люди не делают, лишь бы макросы не использовать.
Я ж только учусь.

Спек поправил, но на ошибку выше это никак не повлияло. Она абсолютно та же.
$ rpmbb -r obs-studio.spec                           
 $ nice buildreq -bc /home/rupor/RPM/SPECS/obs-studio.spec
Выполняется(%prep): /bin/sh -e /home/rupor/tmp/rpm-tmp.30954
+ umask 022
+ /bin/mkdir -p /home/rupor/RPM/BUILD
+ cd /home/rupor/RPM/BUILD
+ cd /home/rupor/RPM/BUILD
+ rm -rf obs-studio-0.9.1
+ echo 'Source #0 (obs-studio-0.9.1.zip):'
Source #0 (obs-studio-0.9.1.zip):
+ /usr/bin/unzip -qq /home/rupor/RPM/SOURCES/obs-studio-0.9.1.zip
+ cd obs-studio-0.9.1
+ /bin/chmod -c -Rf u+rwX,go-w .
+ exit 0
Выполняется(%build): /bin/sh -e /home/rupor/tmp/rpm-tmp.42947
+ umask 022
+ /bin/mkdir -p /home/rupor/RPM/BUILD
+ cd /home/rupor/RPM/BUILD
+ cd obs-studio-0.9.1
+ mkdir -p BUILD
+ __cmake -DBUILD_STATIC=OFF
+ pushd BUILD
~/RPM/BUILD/obs-studio-0.9.1/BUILD ~/RPM/BUILD/obs-studio-0.9.1
+ cmake .. -DCMAKE_SKIP_RPATH:BOOL=yes '-DCMAKE_C_FLAGS:STRING=-pipe -Wall -g -O2' '-DCMAKE_CXX_FLAGS:STRING=-pipe -Wall -g -O2' '-DCMAKE_Fortran_FLAGS:STRING=-pipe -Wall -g -O2' -DCMAKE_INSTALL_PREFIX=/usr -DLIB_DESTINATION=lib64 -DLIB_SUFFIX=64 -DBUILD_STATIC=OFF
-- The C compiler identification is GNU 4.7.2
-- The CXX compiler identification is GNU 4.7.2
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- OBS_VERSION: 0.0.1
-- Try C++11 flag = [-std=gnu++11]
-- Performing Test CXX11_FLAG_DETECTED
-- Performing Test CXX11_FLAG_DETECTED - Success
-- Found CXX11: -std=gnu++11 
-- Looking for XOpenDisplay in /usr/lib64/libX11.so;/usr/lib64/libXext.so
-- Looking for XOpenDisplay in /usr/lib64/libX11.so;/usr/lib64/libXext.so - found
-- Looking for gethostbyname
-- Looking for gethostbyname - found
-- Looking for connect
-- Looking for connect - found
-- Looking for remove
-- Looking for remove - found
-- Looking for shmat
-- Looking for shmat - found
-- Looking for IceConnectionNumber in ICE
-- Looking for IceConnectionNumber in ICE - found
-- Found X11: /usr/lib64/libX11.so
-- Found OpenGL: /usr/lib64/libGL.so 
CMake Error at deps/glad/CMakeLists.txt:30 (target_include_directories):
  Unknown CMake command "target_include_directories".


-- Configuring incomplete, errors occurred!
ошибка: Неверный код возврата из /home/rupor/tmp/rpm-tmp.42947 (%build)


Ошибки сборки пакетов:
    Неверный код возврата из /home/rupor/tmp/rpm-tmp.42947 (%build)
You can run with -R param for search a dependences for install section of the package (as with buildreq -bi)

CMake Error at deps/glad/CMakeLists.txt:30 (target_include_directories):
  Unknown CMake command "target_include_directories".
В инете не смог найти решения.
Наверно надо как-то переписать 30 строчку.

target_include_directories(glad
   PUBLIC include
   PRIVATE ${X11_X11_INCLUDE_PATH} ${OPENGL_INCLUDE_DIR})