Для того, чтобы не создавать с нуля весь набор метафайлов пакета, воспользуемся для этого утилитой 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
и есть номер билда.