Legun писал(а):Вопрос который меня мучает уже долгое время, никак не могу собрать пакет .
Имеем файлы и папки с бинарниками
ну пусть будет
/SETTLER2
/SETTLER2/DATA
/SETTLER2/s2.sh
подскажите как мне все это упаковать rpm пакет?
Пакеты собираются не из папок, а из тарболов, поэтому первым делом надо создать архив. Причём кроме имени нужна версия. Пусть будет settler-2.tar.xz, внуртри которого папака SETTLER2.
Теперь создадим файл 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.
Тут Version - это версия программы в апстриме, а Release - это версия нашего пакета для текущей версии из апстрима. Строки в Summary и %description должны быть короче 80 символов, иначе после сборки пакет будет признан некачественным (не пройдёт контроль rpmlint). Значение %{name} берётся из поля Name, а %{version} - из поля Version. В дальнейшем эти значения будут активно использоваться, хотя можно писать каждый раз явно settler и 2, а не %{name} и %{version}.
Теперь перейдём к сборке.
Код: Выделить всё
%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. Надеюсь, ничего не забыл и обошлось без опечаток, но мало ли
