Постараюсь как можно доступнее изложить процесс создания 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