как собрать deb пакет


Постараюсь как можно доступнее изложить процесс создания deb пакетов на примере ruby-zookeper. Предупреждаю сразу, что описанный мной метод пакетирования ruby gems неправильный, лучше использовать gem2deb для этого, но т.к. из исходников с помощью gem2deb собрать ruby-zookeper последней версии у меня не получилось, то вот самый простой метод сборки.

Если вы будете собирать ruby пакеты, как рекомендуется, через gem2deb, то лучше добавьте строку

export DH_RUBY_IGNORE_TESTS=all/export DH_RUBY_IGNORE_TESTS=all

в debian/rules.

Т.к. мы будем собирать ruby код, то нам понадобится ruby и набор инструментов для сборки deb пакетов.

sudo apt-get install ruby dpkg-dev

Если у вас старая версия ruby, то в ней нет команды gem, придется устанавливать еще и пакет rubygems или обновлять ruby.

Теперь установим гем fpm, который соберет за нас deb пакет.

sudo gem install fpm
fpm -s gem -t deb zookeeper

В текущей директории у нас появился пакет rubygem-zookeeper_1.4.11_amd64.deb, казалось бы, что дело уже в шляпе, но т.к. нам нужен source пакет, для того, чтобы можно было собрать из него deb, например в OBS, то мы будем продолжать.

Создадим сборочную директорию

cp rubygem-zookeeper_1.4.11_amd64.deb ~/
cd
mkdir -p ruby-zookeeper/fakeroot
cd ruby-zookeeper/fakeroot

Извлечем в нее содержание только что собранного пакета

dpkg-deb -R ~/rubygem-zookeeper_1.4.11_amd64.deb ruby-zookeeper_1.4.11-1

Теперь будем создавать файлы, необходимые для сборки пакета. Они должны находиться в директории debian. Часть файлов мы можем скопировать из распакованного пакета.

mkdir debian
cp rubygem-zookeeper_1.4.11-1/DEBIAN/control debian/control

Отредактируем его до следующего состояния. Не забудьте поменять Maintainer

Source: ruby-zookeeper
Maintainer: <insider@prolinux.org>
Section: ruby
Build-Depends: debhelper (>= 7.0.50~)
Priority: extra
Homepage: https://github.com/slyphon/zookeeper

Package: ruby-zookeeper
Architecture: amd64
Depends: ${shlibs:Depends}, ${misc:Depends}, ruby
Description: A low-level multi-Ruby wrapper around the ZooKeeper API bindings. For a
 friendlier interface, see http://github.com/slyphon/zk. Currently supported:
 MRI: {1.8.7, 1.9.2, 1.9.3}, JRuby: ~> 1.6.7, Rubinius: 2.0.testing, REE 1.8.7.
 .
 This library uses version 3.4.5 of zookeeper bindings.

Нам еще нужен debian/rules. Создадим его. override_dh_shlibdeps нужен, чтоб не проверять линковку библиотек zookeeper, т.к. она не проходит.

#!/usr/bin/make -f
# -*- makefile -*-

%:
	dh  $@

override_dh_shlibdeps:
	true

Табуляции в debian/rules обязательны, заменить их на пробелы нельзя. Сделаем его исполняемым.

chmod +x debian/rules

Изучим содержание директории ruby-zookeeper_1.4.11-1 и запишем все нужные файлы, кроме DEBIAN в файл debian/install. Он будет выглядеть вот так.

usr/*
var/*

Теперь создадим debian/changelog и запишем туда:

ruby-zookeeper (1.4.11-1) UNRELEASED; urgency=medium

 * Initial release

  -- root <insider@prolinux.org>  Wed, 25 Nov 2015 20:01:55 +0300

Также нам еще нужен debian/compat

echo 7 > debian/compat

Скопируем файлы, которые будут установлены, в локальную директорию и удалим папку с распакованным пакетом, она нам больше не пригодится.

mv ruby-zookeeper_1.4.11-1/{usr,var} .
rm -r ruby-zookeeper_1.4.11-1

Соберем новый пакет, а также source пакет.

dpkg-buildpackage -rfakeroot -uc -F

В директории выше у нас появятся все необходимые файлы.

ll ..
total 5528
drwxr-xr-x  3 root root    4096 Dec 20 13:32 ./
drwx------ 12 root root    4096 Dec 20 13:31 ../
drwxr-xr-x  5 root root    4096 Dec 20 13:28 fakeroot/
-rw-r--r--  1 root root    1261 Dec 20 13:32 ruby-zookeeper_1.4.11-1_amd64.changes
-rw-r--r--  1 root root 2375044 Dec 20 13:32 ruby-zookeeper_1.4.11-1_amd64.deb
-rw-r--r--  1 root root     565 Dec 20 13:32 ruby-zookeeper_1.4.11-1.dsc
-rw-r--r--  1 root root 3263381 Dec 20 13:32 ruby-zookeeper_1.4.11-1.tar.gz

Можно проверить содержимое получившегося deb пакета

dpkg -c ../ruby-zookeeper_1.4.11-1_amd64.deb

Cсылки: https://www.debian.org/doc/manuals/maint-guide/dother.ru.html https://debian-handbook.info/browse/stable/sect.source-package-structure.html

comments powered by Disqus