digiwhite 08.03.2010 11:59

Я maintainerDebian-way: сборка Flighgear 2.0 из исходников в deb пакеты

Flightgear это кросс платформенный авиационный симулятор, изначально создававшийся под Linux. Совсем недавно вышла версия 2.0 и я захотел посмотреть на эту игру более близко (смотрел более ранние версии когда-то давно, не очень впечатлило и я остался на все том же творении тех о ком мы не говорим, под названием Flight Simulator). Т.к. пользуюсь Ubuntu, то сначала все-таки глянул, а что у нас имеется по этому поводу в репозиториях. Там я обнаружил версию Flightgear 1.9, поиск по лаунчпаду так же не привел меня к уже готовой сборке версии 2.0, поэтому я решил совместить полезное с приятным: устанавливая игру за одно немножко освоиться с процессом сборки deb пакетов и почувствовать себя "в шкуре" мейнтейнера.

И так начнем. Прежде чем приступить к сборке пакетов нам понадобится для этого соответствующий набор программ и скриптов, а так же gpg ключ для подписывания deb пакетов.

Создание gpg ключа.


Для создания gpg ключа необходимо в терминале набрать достаточно простую команду и ответить на несколько вопросов, которые будут заданны программой:
1
gpg --gen-key


Далее выбрать:
тип ключа - RSA
размер ключа - 2048 бит
срок действия ключа - без ограничений

После этого будет предложено ввести настоящее имя (для примера я буду вводить ненастоящие свои данные):
Настоящее имя - digiwhite
e-mail: digiwhite@babylon5.net
Комментарий: оставлю пустым


После этого будет предложено дважды ввести пароль для ключа. На этом все. Ключ сгенерирован. Как все выглядит в консоли можно увидеть под спойлером:


digiwhite@mollari-desktop:~/tmp$ gpg --gen-key
gpg (GnuPG) 1.4.9; Copyright (C) 2008 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Выберите тип ключа:
(1) DSA и ElGamal (по умолчанию)
(2) DSA (только для подписи)
(5) RSA (только для подписи)
Ваш выбор (?-подробнее)? 5
ключи RSA могут иметь длину от 1024 до 4096 бит.
Какой размер ключа Вам необходим? (2048) 2048
Запрашиваемый размер ключа 2048 бит
Выберите срок действия ключа.
0 = без ограничения срока действительности
<n> = срок действительности n дней
<n>w = срок действительности n недель
<n>m = срок действительности n месяцев
<n>y = срок действительности n лет
Ключ действителен до? (0) 0
Ключ не имеет ограничения срока действительности
Все верно? (y/N) y

Для идентификации Вашего ключа необходим User ID
Программа создаст его из Вашего имени, комментария и адреса e-mail в виде:
"Baba Yaga (pensioner) <yaga@deepforest.ru>"

Ваше настоящее имя: digiwhite
Email-адрес: digiwhite@babylon5.net
Комментарий:
Вы выбрали следующий User ID:
"digiwhite <digiwhite@babylon5.net>"

Сменить (N)Имя, (C)Комментарий, (E)email-адрес или (O)Принять/(Q)Выход? O
Для защиты секретного ключа необходим пароль.

Необходимо сгенерировать много случайных чисел. Желательно, что бы Вы
выполняли некоторые другие действия (печать на клавиатуре, движения мыши,
обращения к дискам) в процессе генерации; это даст генератору
случайных чисел возможность получить лучшую энтропию.
.+++++
.................+++++
gpg: ключ 00BEFC4D помечен как абсолютно доверяемый.
открытый и закрытый ключи созданы и подписаны.

gpg: проверка таблицы доверий
gpg: 3 ограниченных необходимо, 1 выполненных необходимо, PGP модель доверия
gpg: глубина: 0 корректных: 2 подписанных: 0 доверия: 0-, 0q, 0n, 0m, 0f, 2u
pub 2048R/00BEFC4D 2010-03-05
Отпечаток ключа = CAD9 904F 45F9 FB6B 9145 B0D8 3975 6908 00BE FC4D
uid digiwhite <digiwhite@babylon5.net>

Учтите, что данный ключ не может использоваться для шифрования. Вы можете
воспользоваться командой "--edit-key" и создать подключ для этих целей.



Увидеть информацию о существующих ключах можно с помощью следующей команды:
1
gpg --list-keys


Для получения дополнительной информации, смотрите справку по утилите gpg.

Подготовка к сборке


Теперь нам необходимо скачать исходные коды Flightgear 2.0, исходные коды библиотеки Simgear 2.0, которая используется для сборки программы (и соответствующей версии так же нет в репозиториях) и бинарные данные для Flightgear (звуки, текстуры и т.п.). Исходники для:
Flightgear 2.0 берем здесь
бинарные данные с текстурами, звуками и прочим для Flightgear 2.0 - берем здесь (295 Мб);
SimGear 2.0 - берем здесь.

Все остальные библиотеки, требующиеся для сборки можно доставить из репозитория, установив следующие dev пакеты:
библиотека Open Scene Graph - пакет libopenscenegraph-dev;
библиотека Boost - пакеты libboost-serialization1.40-dev и libboost1.40-dev;
библиотека Glut(FreeGlut) - freeglut3-dev;
библиотека OpenAL - libopenal-dev;
библиотека plib - libplib-dev;

Для установки в терминале можно выполнить команду:
1
sudo apt-get install libopenscenegraph-dev libboost1.40-dev libboost-serialization1.40-dev freeglut3-dev libopenal-dev libplib-dev



Подготовка исходных кодов


Пришла пора заняться непосредственно исходными кодами. Для этого надо распаковать ранее скачанные архивы, которые я положил себе в ~/tmp. Распаковываем и переименовываем каталоги (это продиктовано требованиям сборщика пакетов Debian - имя пакета должно состоять из букв в нижнем регистре, цифр, знаков "+", "-" и "."):
1
2
3
4
5
6
7
8
tar -xzvf SimGear2.0.0.tar.gz 
mv SimGear-2.0.0 simgear-2.0.0

tar -xzvf FlightFear2.0.0.tar.gz
mv FlightGear-2.0.0 flightgear-2.0.0

mkdir -p flightgear-data_2.0.0-1/usr/share/FlightGear
tar xjvf FlightGear-data-2.0.0.tar.bz2 -C flightgear-data_2.0.0-1/usr/share/FlightGear


И так, как мы видим, у нас вырисовывается для сборки 3 deb пакета:
simgear-dev_2.0.0-1_amd64.deb - нужен для сборки FlightGear 2.0, поэтому будем создавать dev пакет (т.е. пакет для разработчиков);
flightgear-data_2.0.0-1_all.deb - данные с текстурами и прочим для FlightGear 2.0;
flightgear_2.0.0-1_amd64.deb - непосредственно исполняемые файлы игры. Этот пакет будет зависеть от flightgear-data_2.0.0-1_all.deb.

Так же, для сборки deb пакетов нам понадобятся следующие (каламбур!) пакеты: debhelper, dh-make, devscripts, fakeroot. Ну и компилятор языка С++.


Сборка пакета simgear-dev_2.0.0-1_amd64.deb


Прежде чем перейти к сборке, сначала выполним экспорт некоторых переменных окружения, связанных с GPG ключем (с тем самым, который мы создали в начале) :
1
2
3
export EMAIL=digiwhite@babylon5.net
export DEBFULLNAME="digiwhite"
export DEBEMAIL=digiwhite@babylon5.net


Эти действия помогут избежать нам необходимости править некоторые поля в разных настроечных файлах.

Ну-с, приступим-с :). Делаем:
1
2
cd simgear-2.0.0
dh_make -r


После вызова dh_make -r нас сначала спросят, пакет какого типа мы хотим создавать. В данном случае нам нужен тип "library", поэтому нажимаем кнопку "l". В терминале все это выглядит следующим образом:

digiwhite@mollari-desktop:~/tmp$ cd simgear-2.0.0/
digiwhite@mollari-desktop:~/tmp/simgear-2.0.0$ dh_make -r

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch or cdbs?
im/l/k/n/b> l

Maintainer name : digiwhite
Email-Address : digiwhite@babylon5.net
Date : Sat, 06 Mar 2010 01:10:31 +0300
Package Name : simgear
Version : 2.0.0
License : blank
Using dpatch : no
Using quilt : no
Type of Package : Library
Hit <enter> to confirm:
Done. Please edit the files in the debian/ subdirectory now. simgear
uses a configure script, so you probably don't have to edit the Makefiles.
Make sure you change the package name from simgearBROKEN to something
else, such as simgear1 in the debian/control file.


В результате выполнения вышеописанных действий в каталоге simgear-2.0.0 будет создан каталог debian, содержащий набор конфигурационных файлов, необходимых для создания deb пакета. Итак, делаем cd debian, удаляем все файлы с расширением .ex и EX, т.к. они нам не понадобятся и, затем начинаем редактировать файл control. В своем любимом текстовом редакторе вам нужно привести содержимое этого файла к следующему виду:

Source: simgear
Priority: extra
Maintainer: digiwhite <digiwhite@babylon5.net>
Build-Depends: debhelper (>= 7), autotools-dev
Standards-Version: 3.8.1
Section: libs
Homepage: http://www.welinux.ru/digiwhite

Package: simgear-dev
Section: libdevel
Architecture: any
Depends: ${misc:Depends}
Description: Open-source libraries for quickly assembling 3d simulations.
Used for build realistic open-source simulator Flightgear 2.0.

Важно отметить, что поле Description в первой строке содержит краткое описание пакета, а остальные строки, начиная со следующей строки содержат "развернутое" описание пакета. Каждая строка "развернутого" описания должна обязательно начинаться с пробела, иначе при сборке пакета с помощью debuildмы получим ошибку.

Далее правим файл copyright, содержащий информацию о лицензии и авторе пакета и исходного кода, из которого был собран пакет (хотя если вы не будете распространять данный пакет, а будете использовать только для себя, то думаю, этот файл можно не менять). У меня получилось вот что:

This package was debianized by digiwhite <digiwhite@babylon5.net> on
Sat, 06 Mar 2010 01:10:31 +0300.

It was downloaded from http://www.simgear.org/

Upstream Author(s):

Curtis L. Olson

Copyright:

<Copyright (C) 2010 Curtis L. Olson>

License:

GNU Library General Public License 3

The Debian packaging is:

Copyright (C) 2010 digiwhite <digiwhite@babylon5.net>

and is licensed under the GPL version 3,
see `/usr/share/common-licenses/GPL-3'.

# Please also look if there are files or directories which have a
# different copyright/license attached and list them here.

Следующий файл, который нам нужно изменить - это файл rules. Этот файл представляет собой Makefile для утилиты make и содержит инструкции по сборке, установке и прочему для исходного кода и пакета. Весь файл приводить не буду, а покажу только строчки которые заменил:
Строчку
1
./configure $(CROSS) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info CFLAGS="$(CFLAGS)" LDFLAGS="-Wl,-z,defs"


я заменил на
1
./configure $(CROSS) --prefix=/usr --with-jpeg-factory --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info CFLAGS="$(CFLAGS)" LDFLAGS="-Wl,-z,defs"

;
строчку
1
$(MAKE) DESTDIR=$(CURDIR)/debian/temp install


я заменил на
1
$(MAKE) DESTDIR=$(CURDIR)/debian/simgear-dev install




Теперь меняем файл changelog, содержащий историю изменения пакета. После внесенных изменений у меня этот файл выглядит так:

simgear (2.0.0-1) stable; urgency=low

* Initial release

-- digiwhite <digiwhite@babylon5.net> Sat, 06 Mar 2010 01:37:11 +0300


На данном этапе с правками конфигурационных файлов покончено. Делаем
1
2
cd ..
debuild

и ждем некоторое время, поглядывая на то, что выводится на экран, пока соберется пакет. Перед окончанием сборки выскочит окно для ввода пароля pgp ключа, который мы создали в самом начале и данные которого мы прописывали в файле control.

По завершению сборки надо подняться еще на один уровень выше в каталоге (делаем cd ..) и там мы увидим наш только-что созданный пакет с именем simgear-dev_2.0.0-1_amd64.deb (архитектура процессоар у вас будет своя, т.к. в файле control параметр Architecture мы прописали как any(т.е. автоматически выбирается ваша архитектура). Теперь этот файл нужно установить с помощью утилиты dpkg из терминала или с помощью графической утилиты GDebi. Все, теперь унас есть все для того, чтобы собрать FlightGear 2.0 :).


Сборка пакета flightgear-data_2.0.0-1_all.deb


Сборка данного пакета несколько отличается (что стало для меня неожиданностью) от того, что было описано в сборке пакета simgear_2.0.0-1_amd6.deb.

Итак, переходим в каталог flightgear-data_2.0.0-1_all и создаем в нем папку с именем DEBIAN и переходим в нее:
1
2
3
cd flightgear-data_2.0.0-1_all
mkdir DEBIAN
cd DEBIAN


В этом каталоге мы создадим (руками!) следующие файлы:
control - смысле этого файла такой же, как и для пакета simgear-dev, только содержимое будет несколько отличаться;
copyright - файл аналогичный файлу из пакета simgear-dev, даже автор тот же самый, так что просто позаимствуем его (на самом деле с авторами тут может быть все гораздо сложнее, т.к. делать звуки, текстуры и т.п. могли разные люди);
changelog - файл аналогичный файлу из пакета simgear-dev.
dirs - файл с указанием директорий, который мы создавать не должны.


Файл control будет содержать следующее:

Package: flightgear-data
Version: 2.0.0-1
Section: games
Architecture: all
Priority: extra
Depends:
Maintainer: digiwhite <digiwhite@babylon5.net>
Description: FlightGear 2.0 media data package.
Contains FlightGear 2.0 sounds, textures, aircraft models, scnery scenarios and configuration files.
Installed-size: 1148928

Здесь стоит отметить следующую особенность, в качестве архитектуры для сборки пакета мы указали all, это значит, что пакет содержит файлы, которые не зависят от того, на какой архитектуре будет устанавливаться пакет. Сделали мы это потому, что пакет содержит только файлы данных, а именно: текстуры, звуки, файлы настроек моделей самолетов, модели самолетов и т.п.

Файл copyright:

This package was debianized by digiwhite <digiwhite@babylon5.net> on
Sat, 06 Mar 2010 01:10:31 +0300.

It was downloaded from http://www.simgear.org/

Upstream Author(s):

Curtis L. Olson

Copyright:

<Copyright (C) 2010 Curtis L. Olson>

License:

GNU Library General Public License 3

The Debian packaging is:

Copyright (C) 2010 digiwhite <digiwhite@babylon5.net>

and is licensed under the GPL version 3,
see `/usr/share/common-licenses/GPL-3'.

# Please also look if there are files or directories which have a
# different copyright/license attached and list them here.


Файл changelog:

flightgear-data (2.0.0-1) stable; urgency=low

* Initial release.

-- digiwhite <digiwhite@babylon5.net> Sat, 06 Mar 2010 15:29:12 +0300


И наконец файл dirs:

/usr/share


Теперь вернемся на один уровень выше (выйдем из кталога DEBIAN) и создадим файл, содержащий набор контрольных сумм "полезной нагрузки" нашего пакета(т.е. тех данных, которые будут непосредственно устанавливаться - напомню, что их мы положили еще в тот момент, когда проделывали манипуляции с архивами исходников в пункте Подготовка исходных кодов):
1
2
cd ..
find usr -type f -exec md5sum {} >> DEBIAN/md5sums \;


По завершению работы последней вышеописанной команды мы в кталоге DEBIAN получим файл md5sums, содержащий контрольные суммы. Если файл нужно будет пересоздать, то его нужно будет предварительно удалить (т.к. в команде используется операция добавления в файл ">>").

Теперь нам необходимо сменить права на устанавливаемые файлы:
1
sudo chown -R root:root usr



Теперь можно непосредственно приступать к созданию deb пакета. Делаем следующее:
1
2
cd ..
dpkg-deb --build flightgear-data_2.0.0-1_all


и в результате получим файл flighgear-data_2.0.0-1_all.deb. Сборка данного пакета звершена. Можно переходить к сборке крайнего оставшегося пакета.

Примечание: данный пакет получится не подписанным. Как его подписать - не искал, т.к. пока что для меня это не так важно. Однако, буду рад, если кто-нибудь подскажет.


Cборка пакета flightgear_2.0.0-1_amd64.deb


Вот мы и подошли к "финальному" пакету в нашей сборке. Сначала вспомним, что первым пакетом, который мы собирали был simgear-dev_2.0.0-1.deb, который теперь нам нужно установить:
dpkg -i simgear-dev_2.0.0-1.deb
После установки этого пакета можно приступать к сборке непосредственно нашего "финального" пакета. Для этого делаем следующее:
1
2
cd flight_gear_2.0.0
dh_make -r


Получаем запрос по выбору типа пакета, аналогичный тому, что был в нашем описании по сборке пакета simgear_2.0.0-1_amd64.deb и выбираем тип пакета indep binary:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
digiwhite@mollari-desktop:~/tmp/flightgear-2.0.0$ dh_make -r 

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch or cdbs?
<s>i</s>m/l/k/n/b> i

Maintainer name : digiwhite
Email-Address : digiwhite@babylon5.net
Date : Mon, 08 Mar 2010 11:06:46 +0300
Package Name : flightgear
Version : 2.0.0
License : blank
Using dpatch : no
Using quilt : no
Type of Package : unknown
Hit <enter> to confirm:
Skipping creating ../flightgear_2.0.0.orig.tar.gz because it already exists
Done. Please edit the files in the debian/ subdirectory now. flightgear
uses a configure script, so you probably don't have to edit the Makefiles.


Далее переходим в каталог debian, удаляем все файлы с расширением .ex и .EX (они нам не понадобятся):
1
2
3
cd DEBIAN
rm *.ex
rm *.EX


И снова редактируем файл control, приведя его к следующему виду:

Source: flightgear
Section: games
Priority: extra
Maintainer: digiwhite <digiwhite@babylon5.net>
Build-Depends: debhelper (>= 7), autotools-dev
Standards-Version: 3.8.1
Homepage: http://www.welinux.ru/users/digiwhite

Package: flightgear
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, flightgear-data (>=2.0.0)
Description: FlightGear 2.0 flight simulator game.
FligthGear is a open-source flight simulator based on SimGear open source library.

Заметьте, что мы указали в зависимостях пакета (поле Depends) то, что наш пакет зависит от другого пакета, под названием flightgear-data, версия которого должна быть равной или больше чем 2.0.0. Таким образом, мы не сможем установить данный пакет, если до этого не был установлен ранее собранный нами (или кем-то другим?) пакет flightgear-data_2.0.0-1_all.deb.

Файл copyright возьмем тот же, что и в пакете flightgear-data_2.0.0-1_all.deb или simgear-2.0.0-1_amd64.deb, поэтому его содержимое приводить снова я не буду.

Как это ни странно, но в данном случае файл rules нам менять не придется, если конечно мы не хотим включить каких-то дополнительных опций при сборке. Лично я этого делать не стал, так что файл rules здесь так же не привожу.

Теперь все готово для сборки этого пакета. Делаем:
1
2
cd ..
debuild


и ждем некоторое время, пока соберется пакет (на моей машинке 4 ядрами в Ubuntu этот процесс занял порядка 10 минут, на ноутбуке под упралением той-же Ubuntu это заняло минут 25). По окончании процесса сборки снова нас попросят ввести пароль для gpg ключа для подписи пакета. На этом все. Сборка игры FlightGear 2.0 завершена. Осталось только установить пакеты flightgear-data_2.0.0-1_all.deb и flightgear_2.0.0-1_amd64.deb (и именно в таком порядке) и набрав в консоли команду fgfs сесть разбираться в данном авиационном симуляторе.


Ссылки


Собиравши все это дело пришлось изрядно полазить по ссылкам и даже кое что спросить на форуме. Поэтому тут приведу набор ссылок, который мне оказался полезным:
Сборка простого deb`а (Англ)
Как собрать бинарный deb (подробное HowTo) (Рус)
Debian Library Packaging guide (Англ)
Уголок разработчика Debian (Рус/Англ)
Записки о Linux: Сборка пакетов. Глава 2. DEB. Часть 2. Сборка пакетов (Рус)
Как работать с gpg (Англ)

Вместо заключения


Вместо заключения хочу сказать, что в общем-то получилось может и не очень, но работает :). Можно так же собрать еще по дополнительному пакету для GNOME и KDE, которые бы зависели от flightgear_2.0.0-X_Arch.deb и устанавливали для DE ярылки и создавали бы соответствующие пункты меню. Но на данный вариант у меня уже не осталось времени, хотя желание есть. Еще есть такое понятие как мета-пакеты, его бы тоже не мешало освоить.

Для тех же, кому собирать это дело лень, то собранные пакеты для обеих архитектур (i386 и amd64) можно скачать с сайта flightgear.ru (точнее скоро можно будет скачать, т.к. не готова еще страничка downloads) или с ftp здесь.


Тэги: deb debian debuild dh_make dpkg dpkg-deb FlightGear gpg ubuntu
+ 7 -
Похожие Поделиться

booley 08.03.2010 15:19 #
Эх, как-нибудь собраться надо будет.
(эй, мэинтейнеры! Соберите пакет booley!)
digiwhite 08.03.2010 15:22 #
Мета-пакет? :)
booley 08.03.2010 17:16 #
Лучше конечно разнести по отдельным пакетам.

booley-core - основное обеспечение жизнедеятельности, общие файлы
booley-welinux - флуд-бот для welinux.ru
booley-guitar - модуль для использования гитары
booley-talks - разговоры.
Sinner 09.03.2010 00:46 #
Именно из-за #pacman -S flightgear, я полюбил Arch.
digiwhite 09.03.2010 06:27 #
У каждого свои недостатки. По теме есть что сказать?
PaulRed 07.10.2010 00:05 #
Благодарен. Узнал много нового. Может сам попробую что-то собрать.
digiwhite 07.10.2010 22:53 #
На здоровье :)