Pull to refresh

Собираем GNU Emacs для Ubuntu

Reading time 6 min
Views 6.3K
Вопросы связанные с администрированием ОС лежат вне области моих интересов, поэтому когда возникает необходимость решить один из таких вопросов, я сначала стараюсь найти краткое howto, если же ничего не найдено, сажусь за чтиво руководств, которые после решения проблемы благополучно забываю. Поэтому для редко решаемых, но всё же время от времени возникающиx проблем, я пишу себе шпаргалки. Эта статья — одна из них. Чем она в большей мере является: «quick'n'dirty создание deb пакета» или «кратко о сборке emacs.deb» — судить не берусь, подойдёт как в качестве одного так и другого. Ниже описана сборка GNU Emacs 24.0.92 из исxодных кодов в Ubuntu 11.10.

Начинаем с подготовки места:

mkdir ~/build
cd ~/build


и создания, в случае его отсутствия, GPG-ключа, которым будет подписан собранный пакет:

gpg --gen-key
gpg -a --output ~/.gnupg/john_doe.gpg --export 'John Doe'


Будет задан ряд вопросов, ответы на которые интуитивно-понятны. Есть только один тонкий момент, при создании ключа — указывайте такое же имя, которое будете использовать потом при создании пакета.

Установим пакеты, необходимые для сборки .deb:

sudo apt-get install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder

Теперь надо получить исxодные коды GNU Emacs:

bzr co --lightweight -v bzr://bzr.savannah.gnu.org/emacs/trunk emacs-24.0.92

Обратите внимание, что имя директории для получения исxодныx кодов — emacs-24.0.92 — должно быть выбрано в соответствии с требованиями предъявляемыми к именованию директории, в которой содержатся исходные коды для сборки .deb пакета: packagename-packageversion в нижнем регистре. Узнать номер версии программы в транке можно посмотрев файл README здесь: http://bzr.savannah.gnu.org/lh/emacs/trunk/files.

Приведём в состояние готовности к сборке директорию с исxодными кодами. Состояние готовности — это наличие скрипта configure. Запускаем для его генерации:

cd emacs-24.0.92
./autogen.sh


Теперь надо сделать архив-копию имеющейся директории и поместить его на один уровень с ней:

tar -czvf ../emacs-24.0.92.tgz ../emacs-24.0.92/

Начинаем дебианизацию:

dh_make -p emacs -e john.doe@gmail.com -c gpl3 -f ../emacs-24.0.92.tgz

где john.doe@gmail.com заменяем на свой e-mail, отвечаем на вопрос:

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch?

Выбираем «single binary».

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

dpkg-depcheck -d ./configure

Если в системе не хватает чего-то для сборки:

checking for library containing tputs... no
configure: error: The required function `tputs' was not found in any library.
These libraries were tried: libncurses, libterminfo, libtermcap, libcurses.
Please try installing whichever of these libraries is most appropriate
for your system, together with its header files.
For example, a libncurses-dev(el) or similar package.


то просто доустанавливаем необxодимое:

sudo apt-get install libncurses5-dev

Поиск необходимого (можно использовать регулярные выражения):

apt-cache search .*libncurses.*dev

Посмотрим на вывод команды (dpkg-depcheck -d ./configure) в самом конце длинного листинга:

Packages needed:
libgtk-3-dev


Это надо будет добавить к перечисленным пакетам в файле debian/control в строке «Build-Depends», разделяя перечисленные пакеты запятой и пробелом. Посмотрите на остальные поля в этом файле, отредактируйте их при необходимости. Вот содержимое моего файла для сравнения:

Source: emacs
Section: editors
Priority: extra
Maintainer: John Doe <john.doe@gmail.com>
Build-Depends: debhelper (>= 8.0.0), autotools-dev, libgtk-3-dev
Standards-Version: 3.9.2
Homepage: www.gnu.org/software/emacs

Package: emacs
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: GNU Emacs is an extensible, customizable text editor.


Подробную информацию о содержимом файла debian/control можно найти тут: http://www.debian.org/doc/manuals/maint-guide/dreq.ru.html#control.

Возвращаясь к выводу команды configure, посмотрите, с чем будет собран GNU Emacs, найдите следующие строки:

What operating system and machine description files should Emacs use?
`s/gnu-linux.h' and `m/amdx86-64.h'
What compiler should emacs be built with? gcc -std=gnu99 -g -O2
Should Emacs use the GNU version of malloc? yes
(Using Doug Lea's new malloc from the GNU C Library.)
Should Emacs use a relocating allocator for buffers? no
Should Emacs use mmap(2) for buffer allocation? no
What window system should Emacs use? x11
What toolkit should Emacs use? GTK
Where do we find X Windows header files? Standard dirs
Where do we find X Windows libraries? Standard dirs
Does Emacs use -lXaw3d? no
Does Emacs use -lXpm? yes
Does Emacs use -ljpeg? yes
Does Emacs use -ltiff? yes
Does Emacs use a gif library? yes -lgif
Does Emacs use -lpng? yes
Does Emacs use -lrsvg-2? yes
Does Emacs use imagemagick? yes
Does Emacs use -lgpm? yes
Does Emacs use -ldbus? yes
Does Emacs use -lgconf? no
Does Emacs use GSettings? yes
Does Emacs use -lselinux? yes
Does Emacs use -lgnutls? yes
Does Emacs use -lxml2? yes
Does Emacs use -lfreetype? yes
Does Emacs use -lm17n-flt? yes
Does Emacs use -lotf? yes
Does Emacs use -lxft? yes
Does Emacs use toolkit scroll bars? yes


Если требуется поддержка какой-то библиотеки (там где стоит «no»), доставьте нужные -dev пакеты в систему. В файле INSTALL описаны опции для скрипта configure, используя которые можно по-разному сконфигурировать сборку GNU Emacs. Имейте в виду, что сейчас вы делаете пробные запуски configure и делая dpkg-depcheck -d ./configure --without-png, к примеру, вы не оказываете влияние на создаваемый .deb пакет с скомпилированным GNU Emacs. Чтобы передать необxодимые параметры скрипту configure во время сборки .deb пакета, добавьте следующие строки в debian/rules:

override_dh_auto_configure:
dh_auto_configure -- --without-png


Обратите вниманиие, что вторая строка должна и начинается с символа табуляции (здесь парсер сожрал всё и отступа не видно).

А сейчас пара слов о содержимом debian/. Для сборки необходимы debian/{control, rules, copyright, changelog} все они сгенерированы запуском dh_make. В принципе, можно больше ничего не редактировать, но отдавая дань труду людей предлагаю привести в порядок файл debian/copyright. Вот пример:

Format: dep.debian.net/deps/dep5
Upstream-Name: emacs
Source: savannah.gnu.org/bzr/?group=emacs
Maintainer: John Doe <john.doe@gmail.com>

Files: *
Copyright: Copyright (C) 2007 Free Software Foundation, Inc. <fsf.org>
License: GPL-3.0+

Files: debian/*
Copyright: 2011 John Doe <john.doe@gmail.com>
License: GPL-3.0+

License: GPL-3.0+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
.
This package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
.
You should have received a copy of the GNU General Public License
along with this program. If not, see <www.gnu.org/licenses>.
.
On Debian systems, the complete text of the GNU General
Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".


Теперь, у нас всё готово для сборки. Осталась одна проблема — «make check». Makefile построен таким образом, что там есть цель check и она будет запущена системой сборки .deb. А поскольку мы слили транк, а не подготовленный релиз, то тесты могут и не пройти. По крайней мере, у меня сейчас так. Для пропуска тестов надо установить переменную среды DEB_BUILD_OPTIONS="nocheck". Итак, запуск сборки:

DEB_BUILD_OPTIONS="nocheck" dpkg-buildpackage -rfakeroot

без пропуска тестов команда выглядит так:

dpkg-buildpackage -rfakeroot

По-умолчанию GNU Emacs собирается с поддержкой тулкита gtk3, параметризировать configure для сборки приятного для глаз GUI варианта с поддержкой Gtk3 и Xft (freetype шрифты) не требуется, достаточно повторить шаги в статье as is и получить нормальную полную сборку GNU Emacs. Если вы всё сделали правильно, то завершится создание пакета вопросом секретной фразы, которую задали при генерации PGP-ключа. После чего уровнем выше текущей директории появится собранный .deb пакет, который можно установить в систему:

dpkg -i ../emacs_24.0.92-1_amd64.deb

На этом всё.

Источники информации:
www.debian.org/doc/manuals/maint-guide/index.ru.html
www.webupd8.org/2010/01/how-to-create-deb-package-ubuntu-debian.html
Tags:
Hubs:
-3
Comments 14
Comments Comments 14

Articles