Для того, чтобы не создавать с нуля весь набор метафайлов пакета, воспользуемся для этого утилитой dh_make:
$ mkdir arta-synergy-interpreter-1.1.0 $ cd arta-synergy-interpreter-1.1.0 $ dh_make --native --indep --copyright blank Maintainer name : Sergey Korobitsin Email-Address : undertaker@arta.kz Date : Wed, 25 Feb 2015 16:38:29 +0600 Package Name : arta-synergy-interpreter Version : 1.0 License : blank Type of Package : Independent Hit <enter> to confirm: Currently there is no top level Makefile. This may require additional tuning. Done. Please edit the files in the debian/ subdirectory now. You should also check that the arta-synergy-interpreter Makefiles install into $DESTDIR and not in / .
Теперь посмотрим, что получилось в каталоге
debian/:
$ ls debian arta-synergy-interpreter.cron.d.ex arta-synergy-interpreter.default.ex arta-synergy-interpreter.doc-base.EX changelog compat control copyright docs emacsen-install.ex emacsen-remove.ex emacsen-startup.ex init.d.ex manpage.1.ex manpage.sgml.ex manpage.xml.ex menu.ex postinst.ex postrm.ex preinst.ex prerm.ex README README.Debian README.source rules source watch.ex
С назначением каждого из этих файлов (*.ex -
это файлы-примеры и не будут обработаны при сборке пакета) можно
ознакомиться по вышеприведённым ссылкам. Нам же для сборки
достаточно следующего набора:
$ ls debian/ changelog compat control copyright docs postinst preinst README README.Debian README.source rules source templates
Для начала исправляем сгенерированный файл
control и приводим его содержимое к
следующему виду:
Source: arta-synergy-interpreter
Section: non-free
Priority: extra
Maintainer: Sergey Korobitsin <undertaker@arta.kz>
Build-Depends: debhelper (>= 8.0.0)
Standards-Version: 3.9.2
Homepage: http://arta.kz/
Package: arta-synergy-interpreter
Architecture: all
Depends: arta-synergy-jboss, mysql-server (>= 5.5), libxml-xpath-perl, ${misc:Depends}
Description: ARTA Synergy additional Interpreter module
ARTA Synergy additional Interpreter module
Нам также нужно произвести некоторые действия перед -
preinst и после -
postinst, поэтому исправляем также эти файлы.
Например, файл postinst для Интерпретатора
получился таким:
#!/bin/sh
# postinst script for arta-synergy-interpreter
#
# see: dh_installdeb(1)
set -e
# summary of how this script can be called:
# * <postinst> `configure' <most-recently-configured-version>
# * <old-postinst> `abort-upgrade' <new version>
# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
# <new-version>
# * <postinst> `abort-remove'
# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
# <failed-install-package> <version> `removing'
# <conflicting-package> <version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package
case "$1" in
configure)
chown -R jboss:synergy /opt/synergy/jboss/standalone/deployments
;;
abort-upgrade|abort-remove|abort-deconfigure)
;;
*)
echo "postinst called with unknown argument `$1'" >&2
exit 1
;;
esac
# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.
#DEBHELPER#
exit 0
Перейдём в дерево исходных кодов интерпретатора и создадим необходимые подкаталоги:
$ cd interpreter $ mkdir dpkg $ cp -av /tmp/arta-synergy-interpreter-1.1.0/debian dpkg/
Также создадим в каталоге dpkg наш
стандартный Makefile (см. выше).
Далее создадим подготовительный сценарий
prepare.sh. Он получился довольно простым:
#!/bin/bash
CP="cp -v"
GIT="git"
WGET="wget -q"
ARTIFACTORY_REPO="http://192.168.1.30:8081/artifactory"
PACKAGE_NAME="arta-synergy-interpreter"
DEFAULT_REPO="unstable"
DEFAULT_URGENCY="low"
AUTHOR="ARTA Synergy Development Team <ai-dev@arta.kz>"
SYNERGYPATH="opt/synergy"
JBOSSPATH="${SYNERGYPATH}/jboss/standalone"
JBOSSDEPLOY="${JBOSSPATH}/deployments"
UPSTREAM_VERSION=$(
$WGET "${ARTIFACTORY_REPO}/synergy-libs/kz/arta/synergy-interpreter/maven-metadata.xml"
-O - |
xpath -q -e '/metadata/versioning/latest/text()'
)
# Определение номера билда
# Если мы на Jenkins, BUILD_NUMBER приходит в переменных окружения
if [ -z "$BUILD_NUMBER" ]; then
BUILD_NUMBER="000"
fi
if [ -z "$WORKSPACE" ]; then
WORKSPACE=".."
fi
# Каталог, в котором будет собран пакет
PKG_DIR="${WORKSPACE}/PACKAGE"
DSTDIR="${PKG_DIR}/${PACKAGE_NAME}-${UPSTREAM_VERSION}"
rm -rf "${PKG_DIR}"
mkdir -p "${DSTDIR}"
mkdir -p "${DSTDIR}/src/${JBOSSDEPLOY}"
$CP -a dpkg/debian dpkg/Makefile "$DSTDIR"
# Достаём артефакт
cd "${DSTDIR}/src/${JBOSSDEPLOY}"
$WGET "${ARTIFACTORY_REPO}/synergy-libs/kz/arta/synergy-interpreter/${UPSTREAM_VERSION}/synergy-interpreter-${UPSTREAM_VERSION}.ear"
cd - > /dev/null
# Генерируем запись changelog
rm -f "$DSTDIR/changelog.entry"
touch "$DSTDIR/changelog.entry"
echo "${PACKAGE_NAME} (${UPSTREAM_VERSION}) ${DEFAULT_REPO}; urgency=${DEFAULT_URGENCY}" >> "${DSTDIR}/changelog.entry"
echo "" >> "${DSTDIR}/changelog.entry" >> "${DSTDIR}/changelog.entry"
echo " * Automatic build with number ${BUILD_NUMBER}" >> "${DSTDIR}/changelog.entry"
echo "" >> "${DSTDIR}/changelog.entry"
echo " -- ${AUTHOR} $(date -R)" >> "${DSTDIR}/changelog.entry"
echo "" >> "${DSTDIR}/changelog.entry"
# Присоединяем её к старому changelog
cat "$DSTDIR/changelog.entry" dpkg/debian/changelog > "${DSTDIR}/debian/changelog"
rm "${DSTDIR}/changelog.entry"
Можно проверить сборку пакета, запустив
prepare.sh из корневого каталога исходников:
$ dpkg/prepare.sh $ ls ../PACKAGE/arta-synergy-interpreter-1.1.0/ debian Makefile src
И собрать его:
$ cd ../PACKAGE/arta-synergy-interpreter-1.1.0/ $ dpkg-buildpackage -rfakeroot dpkg-buildpackage: экспорт CFLAGS из dpkg-buildflags (происхождение: vendor): -g -O2 dpkg-buildpackage: экспорт CPPFLAGS из dpkg-buildflags (происхождение: vendor): dpkg-buildpackage: экспорт CXXFLAGS из dpkg-buildflags (происхождение: vendor): -g -O2 dpkg-buildpackage: экспорт FFLAGS из dpkg-buildflags (происхождение: vendor): -g -O2 dpkg-buildpackage: экспорт LDFLAGS из dpkg-buildflags (происхождение: vendor): dpkg-buildpackage: пакет исходных текстов arta-synergy-interpreter dpkg-buildpackage: версия исходных текстов 1.0-b000 dpkg-buildpackage: исходные тексты изменены ARTA Synergy Development Team <ai-dev@arta.kz> [... пропущено ...] dpkg-genchanges: в закачку включён весь исходный код dpkg-source --after-build arta-synergy-interpreter-1.1.0 dpkg-buildpackage: закачка всего; родной пакет Debian (включены все пакеты исходного кода)
Как мы видим, пакет успешно собрался и готов к загрузке:
$ ls .. arta-synergy-interpreter-1.1.0 arta-synergy-interpreter_1.1.0-b000_all.deb arta-synergy-interpreter_1.1.0-b000_amd64.changes arta-synergy-interpreter_1.1.0-b000.dsc arta-synergy-interpreter_1.1.0-b000.tar.gz
Теперь в сборочную задачу Интерпретатора на Jenkins нужно добавить ещё один сборочный шаг типа «Выполнить команду shell» со следующим содержимым:
dpkg/prepare.sh cd PACKAGE/arta-synergy-interpreter-* dpkg-buildpackage -rfakeroot
и запустить сборку задачи. Если пакет был собран правильно, то нужно сделать автоматический upload в репозиторий unstable.
Для этого нужно добавить послесборочную операцию «Publish
artifacts to SCP Repository» на сайт
repo.lan.arta.kz. Важно загружать на
репозиторий файлы в таком порядке:
Вначале *.deb
Затем *.tar.gz
Затем *.dsc
И последним *.changes - именно он даёт
сигнал демону репозитария на upload пакета
Основные таски собраны в http://192.168.1.30:8080/view/Debs/.
Последним собирается arta-synergy-synergy. После его сборки
выполняется еще один скрипт wait-package.sh.
Он ждет появление пакета в репозиторий. Для этого потребуется
несколько минут. Если так не ждат то в интеграционные тесты
могут прогнаться в старом сборке.
Версия многих пакетов, как arta-synergy-esb,
arta-synergy-indexator., зависит от номера
билда в jenkins-е. Например, текущая версия пакета
arta-synergy-esb: 3.4-b444.
b444 и есть номер билда.