Иногда возникают веселые проблемы: нам нужно поставить определенную программу, а нужной нам версии нет (например, PHP-5.3) и мы не можем (не хотим, нам нельзя) добавлять лишние (нестабильные, ненадежные) репозитории в нашу систему либо просто не нашли. Зато имеем исходники с оффсайта. Казалось бы что проще: взял и собрал из исходников. Но мы ведь люди ленивые и понимаем, что надо будет и в следующий раз собирать из исходников или надо будет то же самое проделать еще на нескольких машинах. Зачем?
И мы идем иным путем - собираем сам пакет для себя. Весь процесс описан в официальном руководстве, а в данной статье рассмотрим его проще.
Подготавливаем систему.
Для компиляции программы и сборки пакета нам нужны будут инструменты разработчика:
# aptitude install binutils cpp cpio dpkg-dev file gcc libc6-dev make patch perl5-5.005 dh-make debhelper devscripts fakeroot lintian debian-policy developers-reference
(подробнее о каждом пакете можно узнать в официальном руководстве руководстве)
Чтобы было удобно создадим отдельную папку, например packages, затем поместим в нее дерево исходников пакета, который будем собирать.
Итак получаем ~/pkg/pkg-1.1
Каталог с исходниками обязательно должен иметь имя типа: <packetName>-<version>.
Подготовим пакет к сборке
cd ~/pkg/
tar -c packet-3.2|gzip -9 >pkg-1.1.tar.gz
cd pkg-1.1/
dh_make -e your@email.com -f ../pkg-1.1.tar.gz
Или для архива:
mv ~/Downloads/pkg-1.1.tar.gz ~/pkg/
cd ~/pkg/
tar xvzf pkg-1.1.tar.gz
cd pkg-1.1
dh_make -e your@email.com -f ../pkg-1.1.tar.gz
Во время выполнения dh_make он спросит о паре вещей на которых мы не будем заострять внимания - все понятно, если вы дружите с английским языком.
Будут созданы архив pkg.tar.gz и дополнительная директория ~/pkg/pkg-1.1/debian с необходимыми файлами.
$ ls
changelog
compat
control
copyright
cron.d.ex
dirs
docs
emacsen-install.ex
emacsen-remove.ex
emacsen-startup.ex
init.d.ex
init.d.lsb.ex
manpage.1.ex
manpage.sgml.ex
manpage.xml.ex
menu.ex
postinst.ex
postrm.ex
preinst.ex
prerm.ex
README.Debian
rules
packet-default.ex
packet.doc-base.EX
watch.ex
dh_make хорошо потрудился в создании файлов, вот только не все они нам нужны.
Файл control
Source: Имя пакета
Section: contrib/net - раздел
Priority: optional
Maintainer: Andry Bel <name@mail.domain>
Build-Depends: debhelper (>= 7) зависимости для построения пакета
Standards-Version: 3.7.3 - версия Debian Policy - тут я не стал вдаваться в подробности
Homepage: http://your.domain.name/name/of/project - url откуда можно скачать пакет
Package: Имя пакета
Architecture: any - архитектура для которой собран (i386,ppc,sparc и т.д.)
Depends: ${shlibs:Depends}, ${misc:Depends} - от каких пакетов зависит
Description: apache log analyzer
Apache log files analyzer, generates single-file-report in html format
Description - краткое описание пакета. На следующей строке должно быть полное описание. Внимание, первый символ должен быть пробелом.
Файл changelog:
packet (3.2-1) unstable; urgency=low
* Initial release (Closes: #nnnn) <nnnn is the bug number of your ITP>
-- Your Name <your@mail.name> Wed, 03 Sep 2008 11:02:51 +0400
Вроде все понятно.
Файл copyright - вопросов нет, пример:
This package was debianized by Andry Bel <zaezzz@how-it.ru> on
Wed, 03 Sep 2008 11:02:51 +0400.
It was downloaded from http://yourdomain.name/project/name
Upstream Author(s):
Andry Bel <zaezzz@how-it.ru>
Copyright: Copyright (C) 2011 Andry Bel License: GPL The Debian packaging is (C) 2011, Andry Bel <zaezzz@how-it.ru> and is licensed under the GPL, see `/usr/share/common-licenses/GPL'. # Please also look if there are files or directories which have a # different copyright/license attached and list them here.
Тут отступы обязательны.
Файл dirs - имена директорий, которые должны существовать для установки. Начальный слэш опущен.
usr/bin
usr/sbin
Не все файлы могут нам пригодиться, можно их удалить, предварительно прочитав комментарии в самих файлах.
rm docs init.d.ex init.d.lsb.ex cron.d.ex manpage.* menu.ex README.Debian watch.ex packet-default.ex packet.doc-base.EX
Файлы emacsen-install.ex, emacsen-remove.ex, emacsen-startup.ex оставляем без изменений.
Файлы postinst.ex postrm.ex preinst.ex prerm.ex являются скриптами выполняющиеся до/после установки/удаления. Содержат исчерпывающие комментарии и пустой каркас.
Главный файл, rules.
Изменен:
#$(MAKE) DESTDIR=$(CURDIR)/debian/pkg install
install -m 0755 pkg $(dstdir)/usr/bin
Если его не менять, то наш пакет будет устанавливаться в корень, что естественно неприемлимо
Все готово.
Собираем:
cd ~/pkg/pkg-1.1/
dpkg-buildpackage -rfakeroot
Готово. В каталоге ~/pkg/ появился установочный файл pkg-1.1.deb.
Просмотрим его, чтобы убедиться все-ли прошло правильно:
dpkg-deb -I ../packet_3.2-1_i386.deb
dpkg --contents ../packet_3.2-1_i386.deb
Вроде все нормально. Ставим.
sudo dpkg -i ../packet_3.2-1_i386.deb
Комментарии
Оставить комментарий
Операционная система LINUX
Термины: Операционная система LINUX