digiwhite — Debian-way: сборка Flighgear 2.0 из исходников в deb пакеты
Flightgear это кросс платформенный авиационный симулятор, изначально создававшийся под Linux. Совсем недавно вышла версия 2.0 и я захотел посмотреть на эту игру более близко (смотрел более ранние версии когда-то давно, не очень впечатлило и я остался на все том же творении тех о ком мы не говорим, под названием Flight Simulator). Т.к. пользуюсь Ubuntu, то сначала все-таки глянул, а что у нас имеется по этому поводу в репозиториях. Там я обнаружил версию Flightgear 1.9, поиск по лаунчпаду так же не привел меня к уже готовой сборке версии 2.0, поэтому я решил совместить полезное с приятным: устанавливая игру за одно немножко освоиться с процессом сборки deb пакетов и почувствовать себя "в шкуре" мейнтейнера.
И так начнем. Прежде чем приступить к сборке пакетов нам понадобится для этого соответствующий набор программ и скриптов, а так же gpg ключ для подписывания deb пакетов.
Для создания gpg ключа необходимо в терминале набрать достаточно простую команду и ответить на несколько вопросов, которые будут заданны программой:
Далее выбрать:
После этого будет предложено ввести настоящее имя (для примера я буду вводить ненастоящие свои данные):
После этого будет предложено дважды ввести пароль для ключа. На этом все. Ключ сгенерирован. Как все выглядит в консоли можно увидеть под спойлером:
Увидеть информацию о существующих ключах можно с помощью следующей команды:
Для получения дополнительной информации, смотрите справку по утилите gpg.
Теперь нам необходимо скачать исходные коды Flightgear 2.0, исходные коды библиотеки Simgear 2.0, которая используется для сборки программы (и соответствующей версии так же нет в репозиториях) и бинарные данные для Flightgear (звуки, текстуры и т.п.). Исходники для:
Все остальные библиотеки, требующиеся для сборки можно доставить из репозитория, установив следующие dev пакеты:
Для установки в терминале можно выполнить команду:
Пришла пора заняться непосредственно исходными кодами. Для этого надо распаковать ранее скачанные архивы, которые я положил себе в ~/tmp. Распаковываем и переименовываем каталоги (это продиктовано требованиям сборщика пакетов Debian - имя пакета должно состоять из букв в нижнем регистре, цифр, знаков "+", "-" и "."):
И так, как мы видим, у нас вырисовывается для сборки 3 deb пакета:
Так же, для сборки deb пакетов нам понадобятся следующие (каламбур!) пакеты: debhelper, dh-make, devscripts, fakeroot. Ну и компилятор языка С++.
Прежде чем перейти к сборке, сначала выполним экспорт некоторых переменных окружения, связанных с GPG ключем (с тем самым, который мы создали в начале) :
Эти действия помогут избежать нам необходимости править некоторые поля в разных настроечных файлах.
Ну-с, приступим-с :). Делаем:
После вызова dh_make -r нас сначала спросят, пакет какого типа мы хотим создавать. В данном случае нам нужен тип "library", поэтому нажимаем кнопку "l". В терминале все это выглядит следующим образом:
В результате выполнения вышеописанных действий в каталоге simgear-2.0.0 будет создан каталог debian, содержащий набор конфигурационных файлов, необходимых для создания deb пакета. Итак, делаем
, удаляем все файлы с расширением .ex и EX, т.к. они нам не понадобятся и, затем начинаем редактировать файл control. В своем любимом текстовом редакторе вам нужно привести содержимое этого файла к следующему виду:
Важно отметить, что поле Description в первой строке содержит краткое описание пакета, а остальные строки, начиная со следующей строки содержат "развернутое" описание пакета. Каждая строка "развернутого" описания должна обязательно начинаться с пробела, иначе при сборке пакета с помощью debuildмы получим ошибку.
Далее правим файл copyright, содержащий информацию о лицензии и авторе пакета и исходного кода, из которого был собран пакет (хотя если вы не будете распространять данный пакет, а будете использовать только для себя, то думаю, этот файл можно не менять). У меня получилось вот что:
Следующий файл, который нам нужно изменить - это файл rules. Этот файл представляет собой Makefile для утилиты make и содержит инструкции по сборке, установке и прочему для исходного кода и пакета. Весь файл приводить не буду, а покажу только строчки которые заменил:
Теперь меняем файл changelog, содержащий историю изменения пакета. После внесенных изменений у меня этот файл выглядит так:
На данном этапе с правками конфигурационных файлов покончено. Делаем
и ждем некоторое время, поглядывая на то, что выводится на экран, пока соберется пакет. Перед окончанием сборки выскочит окно для ввода пароля pgp ключа, который мы создали в самом начале и данные которого мы прописывали в файле control.
По завершению сборки надо подняться еще на один уровень выше в каталоге (делаем cd ..) и там мы увидим наш только-что созданный пакет с именем simgear-dev_2.0.0-1_amd64.deb (архитектура процессоар у вас будет своя, т.к. в файле control параметр Architecture мы прописали как any(т.е. автоматически выбирается ваша архитектура). Теперь этот файл нужно установить с помощью утилиты dpkg из терминала или с помощью графической утилиты GDebi. Все, теперь унас есть все для того, чтобы собрать FlightGear 2.0 :).
Сборка данного пакета несколько отличается (что стало для меня неожиданностью) от того, что было описано в сборке пакета simgear_2.0.0-1_amd6.deb.
Итак, переходим в каталог flightgear-data_2.0.0-1_all и создаем в нем папку с именем DEBIAN и переходим в нее:
В этом каталоге мы создадим (руками!) следующие файлы:
Файл control будет содержать следующее:
Здесь стоит отметить следующую особенность, в качестве архитектуры для сборки пакета мы указали all, это значит, что пакет содержит файлы, которые не зависят от того, на какой архитектуре будет устанавливаться пакет. Сделали мы это потому, что пакет содержит только файлы данных, а именно: текстуры, звуки, файлы настроек моделей самолетов, модели самолетов и т.п.
Файл copyright:
Файл changelog:
И наконец файл dirs:
Теперь вернемся на один уровень выше (выйдем из кталога DEBIAN) и создадим файл, содержащий набор контрольных сумм "полезной нагрузки" нашего пакета(т.е. тех данных, которые будут непосредственно устанавливаться - напомню, что их мы положили еще в тот момент, когда проделывали манипуляции с архивами исходников в пункте Подготовка исходных кодов):
По завершению работы последней вышеописанной команды мы в кталоге DEBIAN получим файл md5sums, содержащий контрольные суммы. Если файл нужно будет пересоздать, то его нужно будет предварительно удалить (т.к. в команде используется операция добавления в файл ">>").
Теперь нам необходимо сменить права на устанавливаемые файлы:
Теперь можно непосредственно приступать к созданию deb пакета. Делаем следующее:
и в результате получим файл flighgear-data_2.0.0-1_all.deb. Сборка данного пакета звершена. Можно переходить к сборке крайнего оставшегося пакета.
Примечание: данный пакет получится не подписанным. Как его подписать - не искал, т.к. пока что для меня это не так важно. Однако, буду рад, если кто-нибудь подскажет.
Вот мы и подошли к "финальному" пакету в нашей сборке. Сначала вспомним, что первым пакетом, который мы собирали был simgear-dev_2.0.0-1.deb, который теперь нам нужно установить:
После установки этого пакета можно приступать к сборке непосредственно нашего "финального" пакета. Для этого делаем следующее:
Получаем запрос по выбору типа пакета, аналогичный тому, что был в нашем описании по сборке пакета simgear_2.0.0-1_amd64.deb и выбираем тип пакета indep binary:
Далее переходим в каталог debian, удаляем все файлы с расширением .ex и .EX (они нам не понадобятся):
И снова редактируем файл control, приведя его к следующему виду:
Заметьте, что мы указали в зависимостях пакета (поле 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 здесь так же не привожу.
Теперь все готово для сборки этого пакета. Делаем:
и ждем некоторое время, пока соберется пакет (на моей машинке 4 ядрами в Ubuntu этот процесс занял порядка 10 минут, на ноутбуке под упралением той-же Ubuntu это заняло минут 25). По окончании процесса сборки снова нас попросят ввести пароль для gpg ключа для подписи пакета. На этом все. Сборка игры FlightGear 2.0 завершена. Осталось только установить пакеты flightgear-data_2.0.0-1_all.deb и flightgear_2.0.0-1_amd64.deb (и именно в таком порядке) и набрав в консоли команду
сесть разбираться в данном авиационном симуляторе.
Собиравши все это дело пришлось изрядно полазить по ссылкам и даже кое что спросить на форуме. Поэтому тут приведу набор ссылок, который мне оказался полезным:
Вместо заключения хочу сказать, что в общем-то получилось может и не очень, но работает :). Можно так же собрать еще по дополнительному пакету для GNOME и KDE, которые бы зависели от flightgear_2.0.0-X_Arch.deb и устанавливали для DE ярылки и создавали бы соответствующие пункты меню. Но на данный вариант у меня уже не осталось времени, хотя желание есть. Еще есть такое понятие как мета-пакеты, его бы тоже не мешало освоить.
Для тех же, кому собирать это дело лень, то собранные пакеты для обеих архитектур (i386 и amd64) можно скачать с сайта flightgear.ru (точнее скоро можно будет скачать, т.к. не готова еще страничка downloads) или с ftp здесь.
И так начнем. Прежде чем приступить к сборке пакетов нам понадобится для этого соответствующий набор программ и скриптов, а так же gpg ключ для подписывания deb пакетов.
Создание gpg ключа.
Для создания gpg ключа необходимо в терминале набрать достаточно простую команду и ответить на несколько вопросов, которые будут заданны программой:
1 2 3 |
|
Далее выбрать:
- тип ключа - RSA
- размер ключа - 2048 бит
- срок действия ключа - без ограничений
После этого будет предложено ввести настоящее имя (для примера я буду вводить ненастоящие свои данные):
- Настоящее имя - digiwhite
- e-mail: [email protected]
- Комментарий: оставлю пустым
После этого будет предложено дважды ввести пароль для ключа. На этом все. Ключ сгенерирован. Как все выглядит в консоли можно увидеть под спойлером:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
|
Увидеть информацию о существующих ключах можно с помощью следующей команды:
1 2 3 |
|
Для получения дополнительной информации, смотрите справку по утилите 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 2 3 |
|
Подготовка исходных кодов
Пришла пора заняться непосредственно исходными кодами. Для этого надо распаковать ранее скачанные архивы, которые я положил себе в ~/tmp. Распаковываем и переименовываем каталоги (это продиктовано требованиям сборщика пакетов Debian - имя пакета должно состоять из букв в нижнем регистре, цифр, знаков "+", "-" и "."):
1 2 3 4 5 6 7 8 9 10 |
|
И так, как мы видим, у нас вырисовывается для сборки 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 4 5 |
|
Эти действия помогут избежать нам необходимости править некоторые поля в разных настроечных файлах.
Ну-с, приступим-с :). Делаем:
1 2 3 4 |
|
После вызова dh_make -r нас сначала спросят, пакет какого типа мы хотим создавать. В данном случае нам нужен тип "library", поэтому нажимаем кнопку "l". В терминале все это выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
В результате выполнения вышеописанных действий в каталоге simgear-2.0.0 будет создан каталог debian, содержащий набор конфигурационных файлов, необходимых для создания deb пакета. Итак, делаем
cd debian
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Важно отметить, что поле Description в первой строке содержит краткое описание пакета, а остальные строки, начиная со следующей строки содержат "развернутое" описание пакета. Каждая строка "развернутого" описания должна обязательно начинаться с пробела, иначе при сборке пакета с помощью debuildмы получим ошибку.
Далее правим файл copyright, содержащий информацию о лицензии и авторе пакета и исходного кода, из которого был собран пакет (хотя если вы не будете распространять данный пакет, а будете использовать только для себя, то думаю, этот файл можно не менять). У меня получилось вот что:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
Следующий файл, который нам нужно изменить - это файл rules. Этот файл представляет собой Makefile для утилиты make и содержит инструкции по сборке, установке и прочему для исходного кода и пакета. Весь файл приводить не буду, а покажу только строчки которые заменил:
- Строчку
./configure $(CROSS) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info CFLAGS="$(CFLAGS)" LDFLAGS="-Wl,-z,defs"
я заменил на./configure $(CROSS) --prefix=/usr --with-jpeg-factory --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info CFLAGS="$(CFLAGS)" LDFLAGS="-Wl,-z,defs"
- строчку
$(MAKE) DESTDIR=$(CURDIR)/debian/temp install
я заменил на$(MAKE) DESTDIR=$(CURDIR)/debian/simgear-dev install
Теперь меняем файл changelog, содержащий историю изменения пакета. После внесенных изменений у меня этот файл выглядит так:
1 2 3 4 5 6 7 8 |
|
На данном этапе с правками конфигурационных файлов покончено. Делаем
1 2 3 4 |
|
По завершению сборки надо подняться еще на один уровень выше в каталоге (делаем 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 4 5 |
|
В этом каталоге мы создадим (руками!) следующие файлы:
- control - смысле этого файла такой же, как и для пакета simgear-dev, только содержимое будет несколько отличаться;
- copyright - файл аналогичный файлу из пакета simgear-dev, даже автор тот же самый, так что просто позаимствуем его (на самом деле с авторами тут может быть все гораздо сложнее, т.к. делать звуки, текстуры и т.п. могли разные люди);
- changelog - файл аналогичный файлу из пакета simgear-dev.
- dirs - файл с указанием директорий, который мы создавать не должны.
Файл control будет содержать следующее:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Здесь стоит отметить следующую особенность, в качестве архитектуры для сборки пакета мы указали all, это значит, что пакет содержит файлы, которые не зависят от того, на какой архитектуре будет устанавливаться пакет. Сделали мы это потому, что пакет содержит только файлы данных, а именно: текстуры, звуки, файлы настроек моделей самолетов, модели самолетов и т.п.
Файл copyright:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
Файл changelog:
1 2 3 4 5 6 7 |
|
И наконец файл dirs:
1 2 3 |
|
Теперь вернемся на один уровень выше (выйдем из кталога DEBIAN) и создадим файл, содержащий набор контрольных сумм "полезной нагрузки" нашего пакета(т.е. тех данных, которые будут непосредственно устанавливаться - напомню, что их мы положили еще в тот момент, когда проделывали манипуляции с архивами исходников в пункте Подготовка исходных кодов):
1 2 3 4 |
|
По завершению работы последней вышеописанной команды мы в кталоге DEBIAN получим файл md5sums, содержащий контрольные суммы. Если файл нужно будет пересоздать, то его нужно будет предварительно удалить (т.к. в команде используется операция добавления в файл ">>").
Теперь нам необходимо сменить права на устанавливаемые файлы:
1 2 3 |
|
Теперь можно непосредственно приступать к созданию deb пакета. Делаем следующее:
1 2 3 4 |
|
и в результате получим файл 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 3 4 |
|
Получаем запрос по выбору типа пакета, аналогичный тому, что был в нашем описании по сборке пакета 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 19 20 |
|
Далее переходим в каталог debian, удаляем все файлы с расширением .ex и .EX (они нам не понадобятся):
1 2 3 4 5 |
|
И снова редактируем файл control, приведя его к следующему виду:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Заметьте, что мы указали в зависимостях пакета (поле 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 3 4 |
|
и ждем некоторое время, пока соберется пакет (на моей машинке 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 здесь.