Как собрать RPM пакет с произвольным содержимым
Как собрать RPM пакет с произвольным содержимым
Вопрос который меня мучает уже долгое время, никак не могу собрать пакет .
Имеем файлы и папки с бинарниками
ну пусть будет
/SETTLER2
/SETTLER2/DATA
/SETTLER2/s2.sh
подскажите как мне все это упаковать rpm пакет?
Имеем файлы и папки с бинарниками
ну пусть будет
/SETTLER2
/SETTLER2/DATA
/SETTLER2/s2.sh
подскажите как мне все это упаковать rpm пакет?
Re: Как собрать RPM пакет с произвольным содержимым
Пакеты собираются не из папок, а из тарболов, поэтому первым делом надо создать архив. Причём кроме имени нужна версия. Пусть будет settler-2.tar.xz, внуртри которого папака SETTLER2.Legun писал(а):Вопрос который меня мучает уже долгое время, никак не могу собрать пакет .
Имеем файлы и папки с бинарниками
ну пусть будет
/SETTLER2
/SETTLER2/DATA
/SETTLER2/s2.sh
подскажите как мне все это упаковать rpm пакет?
Теперь создадим файл settler.spec, из которого будем собирать пакет. Начнём с заголовка (несколько произвольного, т.к. для удобства будем считать, что это игра Settlers II, только называется settler):
Код: Выделить всё
Name: settler
Version: 2
Release: 1
Summary: Settler 2 is a game about economics of settlers
License: Commercial
Group: Games/Strategy
Url: http://settlers2.net/
Source: %{name}-%{version}.tar.xz
%description
The Settlers II: Veni, Vidi, Vici is a real-time strategy computer game,
released by Blue Byte Software in 1996. Its gameplay is very similar to
that of its predecessor, The Settlers, albeit with a Roman theme and
improved graphics. It is the second game in The Settlers series.
Теперь перейдём к сборке.
Код: Выделить всё
%prep
%setup -q -n SETTLER2
%build
# nothing to build
%install
mkdir -p %{buildroot}%{_datadir}/%{name}%{version}
cp -r * %{buildroot}%{_datadir}/%{name}%{version}
mkdir -p %{buildroot}%{_bindir}
cat > %{buildroot}%{_bindir}/%{name}%{version} <<EOF
#!/bin/sh
cd %{_datadir}/%{name}%{version}
./s2.sh
EOF
chmod +x %{buildroot}%{_bindir}/%{name}%{version}
В секции %prep просто распаковываем тарбол (%setup -q) и заходим в распакованную папку для дальнейшей работы (-n SETTLER2). Когда папка соответствует шаблону %{name}-%{version}, то можно её явно не указывать, а ограничиться %setup -q. Параметр -q нужен для того, чтобы не выводить на экран ход распаковки тарбола.
Далее, т.к. компилировать никакой код нам не надо, то в секции %build нам делать нечего.
В секции %install мы описываем, куда копировать распакованные или скомпилированные файлы. Везде указываем префикс %{buildroot} - временная папка, на основе подпапок которой потом будет запакован RPM-пакет. Значение %{buildroot} генерируется автоматически, но можно и явно задавать через поле Buildroot: в заголовочной части (в очень старых спеках это можно встретить).
Стандартные каталоги принято указывать через макросы:
/usr/bin - %{_bindir}
/usr/share - %{_datadir}
/usr/lib (или /usr/lib64, в зависимости от текущей архитектуры) - %{_libdir}
и так далее. Это справочная информация, весь список приводить тут смысла нет.
Итак, первым делом мы создаём во временном каталоге сборки каталог /usr/share/settler2, куда копируем всё содержимое текущего каталога (а мы, напомню, распаковали тарбол и находимся в каталоге SETTER2).
Далее создаём файл /usr/bin/settler2, куда командой cat записываем небольшой скрипт для запуска игры. И делаем этот файл исполняемым.
Для завершения сборки нам остаётся только описать файлы в пакете.
Код: Выделить всё
%files
%{_bindir}/%{name}%{version}
%{_datadir}/%{name}%{version}
/usr/bin/settler2
/usr/share/settler2
По-хорошему, можно добавить в пакет ещё иконку и .desktop-файл, чтобы для игры появился пункт в меню. С точки зрения сборки пакетов это просто копирование/создание двух файлов по тому же принципу, что было описано выше. Надо только знать, как устроены .desktop-файлы, а это отдельная тема.
Потом запускаем rpmbuild -ba settler.spec, чтобы из спека собрался пакет.
P.S. Надеюсь, ничего не забыл и обошлось без опечаток, но мало ли

Intel Core i7-6700 / 8 Gb RAM / GeForce GTX 750 Ti / Rosa 2016.1 i586
Re: Как собрать RPM пакет с произвольным содержимым
Большое спасибо, вроде все начало получаться. 1 пакет с дикими ошибками, башенными плясками с бубном, но собрался, повторная операция со слегка измененным нутром (просто привел все в надлежащий вид /usr/share/games) выдает ошибку

Код: Выделить всё
+ /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot
/var/tmp/rpm-tmp.66984: line 45: /usr/lib/rpm/check-rpaths: No such file or directory

Re: Как собрать RPM пакет с произвольным содержимым
Хмм, ну это какая-то экзотика. Возможно, в ходе предыдущих попыток сборки пакетов создавались какие-нибудь левые файлы? Например, Гугл первым делом находит аналогичную ошибку в багзилле Red Hat и там оказывается, что у человека был файл .rpmmacros с левым макросом %__arch_install_postLegun писал(а):Большое спасибо, вроде все начало получаться. 1 пакет с дикими ошибками, башенными плясками с бубном, но собрался, повторная операция со слегка измененным нутром (просто привел все в надлежащий вид /usr/share/games) выдает ошибкуКод: Выделить всё
+ /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot /var/tmp/rpm-tmp.66984: line 45: /usr/lib/rpm/check-rpaths: No such file or directory
Intel Core i7-6700 / 8 Gb RAM / GeForce GTX 750 Ti / Rosa 2016.1 i586
Re: Как собрать RPM пакет с произвольным содержимым
Ладно, с багом, черт с ним, есть другой вопрос, а как же мне указать свой путь установки, если например надо установить архив не в /usr/share/ а куда нибудь в /opt или /home/_username/ ?
Re: Как собрать RPM пакет с произвольным содержимым
Ну, там же просто набор стандартных команд, так что вместоLegun писал(а):Ладно, с багом, черт с ним, есть другой вопрос, а как же мне указать свой путь установки, если например надо установить архив не в /usr/share/ а куда нибудь в /opt или /home/_username/ ?
mkdir -p %{buildroot}%{_datadir}/%{name}%{version}
cp -r * %{buildroot}%{_datadir}/%{name}%{version}
можно
mkdir -p %{buildroot}/opt/%{name}%{version}
cp -r * %{buildroot}/opt/%{name}%{version}
С путями на /home/_username/ пакет лучше не собирать, это идеологически неправильно.

Intel Core i7-6700 / 8 Gb RAM / GeForce GTX 750 Ti / Rosa 2016.1 i586
Re: Как собрать RPM пакет с произвольным содержимым
спасибо, я случайно %{_bindir} затер, подправил, все собралось
Re: Как собрать RPM пакет с произвольным содержимым
ну вот и с первым собранным пакетом меня 

Re: Как собрать RPM пакет с произвольным содержимым
Поздравляю.Legun писал(а):ну вот и с первым собранным пакетом меня


Intel Core i7-6700 / 8 Gb RAM / GeForce GTX 750 Ti / Rosa 2016.1 i586
Re: Как собрать RPM пакет с произвольным содержимым
да, я так когда то и начал изучать Linux. Никакого интернета, только пара справочников, коробка ASPLinux 10 и Mandrake 10 Powerpack, ну и диски от журнала ХАКЕР.