From 65602f78016a1335fcc196b4acc9c3a5c0228819 Mon Sep 17 00:00:00 2001 From: Heather Anderson Date: Fri, 31 Jan 2020 07:36:10 +0000 Subject: [PATCH] First pass adding Ubuntu DEB package builder --- pkg-scripts/README | 23 +++++++++ pkg-scripts/make-deb-server | 93 +++++++++++++++++++++++++++++++++++++ pkg-scripts/new-server | 0 pkg-scripts/server-control | 15 ++++++ pkg-scripts/server-postinst | 53 +++++++++++++++++++++ pkg-scripts/server-prerm | 42 +++++++++++++++++ pkg-scripts/server-rules | 53 +++++++++++++++++++++ 7 files changed, 279 insertions(+) create mode 100644 pkg-scripts/README create mode 100755 pkg-scripts/make-deb-server mode change 100644 => 100755 pkg-scripts/new-server create mode 100644 pkg-scripts/server-control create mode 100755 pkg-scripts/server-postinst create mode 100755 pkg-scripts/server-prerm create mode 100755 pkg-scripts/server-rules diff --git a/pkg-scripts/README b/pkg-scripts/README new file mode 100644 index 0000000000..6db1076e36 --- /dev/null +++ b/pkg-scripts/README @@ -0,0 +1,23 @@ +Collection of scripts to create server distribution packages. Most of these scripts assume +use of the build script at https://github.com/daleglass/athena-builder, specifically that +the following directory structure exists + +base folder/ + source/ git checkout + build/ result of cmake build + qt5-install/ installed or built Qt5 installation + + +Ubuntu: + DEBEMAIL="your-email@somewhere.com" DEBFULLNAME="Your Full Name" ./make-deb-server + + This script will retrieve the current git commit date and hash and assemble a version from it. + It will attempt construct a .deb file in the pkg-scripts folder, assuming the Athena base folder + is located at ../.. + +Amazon Linux 2: + ATHENA=~/Athena rpmbuild --target x86_64 -bb ./athena-server.spec + + This command takes an ATHENA environment variable set to the base folder and attempts to build + an .rpm file. The result will be in ~/rpmbuild/RPMS. The version number is currently + hardcoded inside of the athena-server.spec file diff --git a/pkg-scripts/make-deb-server b/pkg-scripts/make-deb-server new file mode 100755 index 0000000000..35cd9550b4 --- /dev/null +++ b/pkg-scripts/make-deb-server @@ -0,0 +1,93 @@ +#!/bin/sh + +ATHENA=`realpath ../..` +GITDATE=`git log -n 1 --format=raw | grep author | cut -d' ' -f 4 | xargs -I {} date -d @{} +"%Y%m%d"` +GITCOMMIT=`git rev-parse HEAD | cut -c 1-7` +VERSION=0.86.0-k1-$GITDATE-$GITCOMMIT + +sudo apt-get install chrpath binutils + +DEB_BUILD_ROOT=temp-make-deb/athena-server-$VERSION-0ubuntu1 +rm -r temp-make-deb +mkdir -p $DEB_BUILD_ROOT + +# copy the files over +cp $ATHENA/build/assignment-client/assignment-client $DEB_BUILD_ROOT +cp $ATHENA/build/domain-server/domain-server $DEB_BUILD_ROOT +#cp $ATHENA/build/ice-server/ice-server $DEB_BUILD_ROOT +chrpath -d $DEB_BUILD_ROOT/* +cp $ATHENA/qt5-install/lib/libQt5Network.so.*.*.* $DEB_BUILD_ROOT +cp $ATHENA/qt5-install/lib/libQt5Core.so.*.*.* $DEB_BUILD_ROOT +cp $ATHENA/qt5-install/lib/libQt5Widgets.so.*.*.* $DEB_BUILD_ROOT +cp $ATHENA/qt5-install/lib/libQt5Gui.so.*.*.* $DEB_BUILD_ROOT +cp $ATHENA/qt5-install/lib/libQt5Script.so.*.*.* $DEB_BUILD_ROOT +cp $ATHENA/qt5-install/lib/libQt5Quick.so.*.*.* $DEB_BUILD_ROOT +cp $ATHENA/qt5-install/lib/libQt5WebSockets.so.*.*.* $DEB_BUILD_ROOT +cp $ATHENA/qt5-install/lib/libQt5Qml.so.*.*.* $DEB_BUILD_ROOT +cp $ATHENA/qt5-install/lib/libQt5ScriptTools.so.*.*.* $DEB_BUILD_ROOT +cp $ATHENA/build/ext/makefiles/quazip/project/lib/libquazip5.so.*.*.* $DEB_BUILD_ROOT +strip --strip-all $DEB_BUILD_ROOT/* +cp $ATHENA/source/pkg-scripts/new-server $DEB_BUILD_ROOT +cp -a $ATHENA/source/domain-server/resources $DEB_BUILD_ROOT +find $DEB_BUILD_ROOT/resources -name ".gitignore" -delete +cp $ATHENA/source/README.md $DEB_BUILD_ROOT +cp $ATHENA/source/README_hifi.md $DEB_BUILD_ROOT + +#begin the debian package construction +cd $DEB_BUILD_ROOT +dh_make -p athena-server_$VERSION-0ubuntu1 -c apache -s --createorig -y + +cp $ATHENA/source/pkg-scripts/athena-assignment-client.service debian +cp $ATHENA/source/pkg-scripts/athena-assignment-client@.service debian +cp $ATHENA/source/pkg-scripts/athena-domain-server.service debian +cp $ATHENA/source/pkg-scripts/athena-domain-server@.service debian +#cp $ATHENA/source/pkg-scripts/athena-ice-server.service debian +#cp $ATHENA/source/pkg-scripts/athena-ice-server@.service debian +cp $ATHENA/source/pkg-scripts/athena-server.target debian +cp $ATHENA/source/pkg-scripts/athena-server@.target debian + +cp $ATHENA/source/pkg-scripts/server-control debian/control +cp $ATHENA/source/pkg-scripts/server-prerm debian/prerm +cp $ATHENA/source/pkg-scripts/server-postinst debian/postinst +cp $ATHENA/source/LICENSE debian/copyright + +echo /etc/opt/athena > debian/dirs +echo /var/lib/athena >> debian/dirs + +echo README.md > debian/docs +echo README_hifi.md >> debian/docs + +echo assignment-client opt/athena > debian/install +echo domain-server opt/athena >> debian/install +#echo ice-server opt/athena >> debian/install +echo new-server opt/athena >> debian/install +for so in *.so.*.*.*; do + echo $so opt/athena/lib >> debian/install +done +#for service in *.service; do +# echo $service opt/athena/systemd >> debian/install +#done +#for target in *.target; do +# echo $target opt/athena/systemd >> debian/install +#done +find resources -type f -exec sh -c 'echo {} opt/athena/$(dirname "{}") >> debian/install' \; + +#echo usr/lib/systemd/system/athena-assignment-client.service opt/athena/systemd/athena-assignment-client.service > debian/athena-server.links +#echo usr/lib/systemd/system/athena-assignment-client@.service opt/athena/systemd/athena-assignment-client@.service >> debian/athena-server.links +#echo usr/lib/systemd/system/athena-domain-server.service opt/athena/systemd/athena-domain-server.service >> debian/athena-server.links +#echo usr/lib/systemd/system/athena-domain-server@.service opt/athena/systemd/athena-domain-server@.service >> debian/athena-server.links +##echo usr/lib/systemd/system/athena-ice-server.service opt/athena/systemd/athena-ice-server.service >> debian/athena-server.links +##echo usr/lib/systemd/system/athena-ice-server@.service opt/athena/systemd/athena-ice-server@.service >> debian/athena-server.links +#echo usr/lib/systemd/system/athena-server.target opt/athena/systemd/athena-server.target >> debian/athena-server.links +#echo usr/lib/systemd/system/athena-server@.target opt/athena/systemd/athena-server@.target >> debian/athena-server.links + +DEPENDS=`find * -maxdepth 0 -type f -executable -exec sh -c 'objdump -p {} | grep NEEDED' \; | awk '{print $2}' | sort | uniq | grep -v ^libQt5 | grep -v ^libquazip | xargs -n 1 -I {} sh -c 'dpkg -S {} | head -n 1' | cut -d ':' -f 1 | sort | uniq | paste -d',' -s` + +cp $ATHENA/source/pkg-scripts/server-rules debian/rules +sed "s/{DEPENDS}/$DEPENDS/" $ATHENA/source/pkg-scripts/server-control > debian/control + +dpkg-buildpackage -us -uc + +cd .. +mv *.deb .. +cd .. diff --git a/pkg-scripts/new-server b/pkg-scripts/new-server old mode 100644 new mode 100755 diff --git a/pkg-scripts/server-control b/pkg-scripts/server-control new file mode 100644 index 0000000000..70383891bd --- /dev/null +++ b/pkg-scripts/server-control @@ -0,0 +1,15 @@ +Source: athena-server +Section: comm +Priority: optional +Maintainer: Heather Anderson +Build-Depends: debhelper (>= 10) +Standards-Version: 4.1.2 +Homepage: https://www.projectathena.dev +Vcs-Git: https://github.com/kasenvr/project-athena.git +Vcs-Browser: https://github.com/kasenvr/project-athena + +Package: athena-server +Architecture: any +Depends: adduser, {DEPENDS} +Description: Project Athena allows creation and sharing of VR experiences. + The Project Athena metaverse provides built-in social features, including avatar interactions, spatialized audio and interactive physics. Additionally, you have the ability to import any 3D object into your virtual environment. diff --git a/pkg-scripts/server-postinst b/pkg-scripts/server-postinst new file mode 100755 index 0000000000..fa14e8175f --- /dev/null +++ b/pkg-scripts/server-postinst @@ -0,0 +1,53 @@ +#!/bin/sh +# postinst script for athena-server +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-remove' +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + configure) + ldconfig -n /opt/athena/lib + adduser --system --quiet --gecos "Project Athena" --home /var/lib/athena --group --no-create-home athena + mkdir -p /var/lib/athena + chown athena:athena /var/lib/athena + chmod 775 /var/lib/athena + if [ ! -d "/var/lib/athena/default" ]; then + /opt/athena/new-server default 40100 + systemctl enable athena-server@default.target + systemctl start athena-server@default.target + fi + ;; + + abort-remove|abort-deconfigure) + ldconfig -n /opt/athena/lib + ;; + + abort-upgrade) + ;; + + *) + 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 diff --git a/pkg-scripts/server-prerm b/pkg-scripts/server-prerm new file mode 100755 index 0000000000..cdeddd308e --- /dev/null +++ b/pkg-scripts/server-prerm @@ -0,0 +1,42 @@ +#!/bin/sh +# prerm script for athena-server +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `remove' +# * `upgrade' +# * `failed-upgrade' +# * `remove' `in-favour' +# * `deconfigure' `in-favour' +# `removing' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + remove) + find -P /opt/athena/lib -type l -delete + ;; + + upgrade|deconfigure) + ;; + + failed-upgrade) + ;; + + *) + echo "prerm 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 diff --git a/pkg-scripts/server-rules b/pkg-scripts/server-rules new file mode 100755 index 0000000000..9cf9dc1396 --- /dev/null +++ b/pkg-scripts/server-rules @@ -0,0 +1,53 @@ +#!/usr/bin/make -f +# See debhelper(7) (uncomment to enable) +# output every command that modifies files on the build system. +#export DH_VERBOSE = 1 + + +# see FEATURE AREAS in dpkg-buildflags(1) +#export DEB_BUILD_MAINT_OPTIONS = hardening=+all + +# see ENVIRONMENT in dpkg-buildflags(1) +# package maintainers to append CFLAGS +#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic +# package maintainers to append LDFLAGS +#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed + + +%: + dh $@ --with=systemd + +override_dh_systemd_enable: + dh_systemd_enable --no-enable --name athena-assignment-client athena-assignment-client.service + dh_systemd_enable --no-enable --name athena-assignment-client@ athena-assignment-client@.service + dh_systemd_enable --no-enable --name athena-domain-server athena-domain-server.service + dh_systemd_enable --no-enable --name athena-domain-server@ athena-domain-server@.service + #dh_systemd_enable --no-enable --name athena-ice-server athena-ice-server.service + #dh_systemd_enable --no-enable --name athena-ice-server@ athena-ice-server@.service + dh_systemd_enable --no-enable --name athena-server athena-server.target + dh_systemd_enable --no-enable --name athena-server@ athena-server@.target + #dh_systemd_enable --name athena-server@default athena-server@default.target + +override_dh_systemd_start: + dh_systemd_start --restart-after-upgrade --no-start athena-assignment-client.service + dh_systemd_start --restart-after-upgrade --no-start athena-assignment-client@.service + dh_systemd_start --restart-after-upgrade --no-start athena-domain-server.service + dh_systemd_start --restart-after-upgrade --no-start athena-domain-server@.service + #dh_systemd_start --restart-after-upgrade --no-start athena-ice-server.service + #dh_systemd_start --restart-after-upgrade --no-start athena-ice-server@.service + dh_systemd_start --restart-after-upgrade --no-start athena-server.target + dh_systemd_start --restart-after-upgrade --no-start athena-server@.target + #dh_systemd_start --restart-after-upgrade athena-server@default.target + +override_dh_installinit: + dh_installinit --noscripts + +override_dh_shlibdeps: + # don't run sh_shlibdeps, it REALLY won't work. We do it ourselves anyhow + + +# dh_make generated override targets +# This is example for Cmake (See https://bugs.debian.org/641051 ) +#override_dh_auto_configure: +# dh_auto_configure -- # -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH) +