zoneminder/utils/packpack/startpackpack.sh

232 lines
7.0 KiB
Bash
Raw Normal View History

2017-01-16 22:36:46 +08:00
#!/bin/bash
# packpack setup file for the ZoneMinder project
2017-01-15 04:14:41 +08:00
# Written by Andrew Bauer
2017-03-05 00:16:05 +08:00
###############
# SUBROUTINES #
###############
# General sanity checks
checksanity () {
# Check to see if this script has access to all the commands it needs
2017-05-11 01:08:33 +08:00
for CMD in set echo curl repoquery git ln mkdir rmdir cat patch; do
2017-03-05 00:16:05 +08:00
type $CMD 2>&1 > /dev/null
if [ $? -ne 0 ]; then
echo
echo "ERROR: The script cannot find the required command \"${CMD}\"."
echo
exit 1
2017-03-05 00:16:05 +08:00
fi
done
2017-03-05 00:16:05 +08:00
# Verify OS & DIST environment variables have been set before calling this script
2017-03-07 08:56:44 +08:00
if [ -z "${OS}" ] || [ -z "${DIST}" ]; then
2017-03-05 00:16:05 +08:00
echo "ERROR: both OS and DIST environment variables must be set"
exit 1
fi
2017-03-08 04:24:06 +08:00
if [ -z "${ARCH}" ]; then
ARCH="x86_64"
fi
if [[ "${ARCH}" != "x86_64" && "${ARCH}" != "i386" && "${ARCH}" != "armhf" ]]; then
echo
echo "ERROR: Unsupported architecture specified \"${ARCH}\"."
echo
exit 1
fi
2017-03-05 00:16:05 +08:00
}
2017-03-05 00:16:05 +08:00
# Steps common to all builds
commonprep () {
mkdir -p build
if [ -e "packpack/Makefile" ]; then
echo "Checking packpack github repo for changes..."
git -C packpack pull origin master
else
2017-03-05 00:16:05 +08:00
echo "Cloning pakcpack github repo..."
git clone https://github.com/packpack/packpack.git packpack
fi
2017-05-11 01:08:33 +08:00
# Patch packpack
patch --dry-run --silent -f -p1 < utils/packpack/packpack-rpm.patch
if [ $? -eq 0 ]; then
patch -p1 < utils/packpack/packpack-rpm.patch
fi
2017-03-05 00:16:05 +08:00
# The rpm specfile requires we download the tarball and manually move it into place
# Might as well do this for Debian as well, rather than git submodule init
CRUDVER="3.0.10"
if [ -e "build/crud-${CRUDVER}.tar.gz" ]; then
echo "Found existing Crud ${CRUDVER} tarball..."
else
2017-03-05 00:16:05 +08:00
echo "Retrieving Crud ${CRUDVER} submodule..."
curl -L https://github.com/FriendsOfCake/crud/archive/v${CRUDVER}.tar.gz > build/crud-${CRUDVER}.tar.gz
if [ $? -ne 0 ]; then
echo "ERROR: Crud tarball retreival failed..."
exit 1
fi
fi
}
# Uncompress the Crud tarball and move it into place
movecrud () {
if [ -e "web/api/app/Plugin/Crud/LICENSE.txt" ]; then
echo "Crud plugin already installed..."
else
echo "Unpacking Crud plugin..."
tar -xzf build/crud-${CRUDVER}.tar.gz
rmdir web/api/app/Plugin/Crud
mv -f crud-${CRUDVER} web/api/app/Plugin/Crud
fi
}
# previsouly part of installzm.sh
# install the trusty deb and test zoneminder
installtrusty () {
# Check we've got gdebi installed
type gdebi 2>&1 > /dev/null
if [ $? -ne 0 ]; then
echo
echo "ERROR: The script cannot find the required command \"gdebi\"."
echo
exit 1
fi
# Install and test the zoneminder package (only) for Ubuntu Trusty
pkgname="build/zoneminder_${VERSION}-${RELEASE}_amd64.deb"
if [ -e $pkgname ]; then
sudo gdebi --non-interactive $pkgname
mysql -uzmuser -pzmpass zm < db/test.monitor.sql
sudo /usr/bin/zmpkg.pl start
sudo /usr/bin/zmfilter.pl -f purgewhenfull
else
echo
echo "ERROR: The script cannot find the package $pkgname"
echo "Check the Travis log for a build failure."
echo
exit 99
fi
}
2017-03-07 08:54:55 +08:00
# This sets the naming convention for the deb packages
setdebpkgver () {
# Set VERSION to x.xx.x+x e.g. 1.30.2+15
# the last x is number of commits since release
# Creates zoneminder packages in the format: zoneminder-{version}-{release}
zmver=$(git describe --long --always | sed -n 's/^\([0-9\.]*\)-\([0-9]*\)-\([a-z0-9]*\)/\1/p')
commitnum=$(git describe --long --always | sed -n 's/^\([0-9\.]*\)-\([0-9]*\)-\([a-z0-9]*\)/\2/p')
export VERSION="$zmver+$commitnum"
export RELEASE="${DIST}"
echo
echo "Packpack VERSION has been set to: ${VERSION}"
echo "Packpack RELEASE has been set to: ${RELEASE}"
echo
}
2017-03-05 00:16:05 +08:00
################
# MAIN PROGRAM #
################
checksanity
# We don't want to build packages for all supported distros after every commit
# Only build all packages when executed via cron
# See https://docs.travis-ci.com/user/cron-jobs/
if [ "${TRAVIS_EVENT_TYPE}" == "cron" ] || [ "${TRAVIS}" != "true" ]; then
2017-03-05 00:16:05 +08:00
commonprep
# Steps common to Redhat distros
if [ "${OS}" == "el" ] || [ "${OS}" == "fedora" ]; then
echo "Begin Redhat build..."
# Set VERSION to x.xx.x e.g. 1.30.2
# Set RELEASE to x where x is number of commits since release
2017-03-07 05:25:54 +08:00
# Creates zoneminder packages in the format: zoneminder-{version}-{release}
export VERSION=$(git describe --long --always | sed -n 's/^\([0-9\.]*\)-\([0-9]*\)-\([a-z0-9]*\)/\1/p')
2017-03-07 05:25:54 +08:00
export RELEASE=$(git describe --long --always | sed -n 's/^\([0-9\.]*\)-\([0-9]*\)-\([a-z0-9]*\)/\2/p')
2017-03-07 08:27:45 +08:00
echo
echo "Packpack VERSION has been set to: ${VERSION}"
echo "Packpack RELEASE has been set to: ${RELEASE}"
echo
ln -sfT distros/redhat rpm
2017-03-05 00:16:05 +08:00
# The rpm specfile requires the Crud submodule folder to be empty
rm -rf web/api/app/Plugin/Crud
mkdir web/api/app/Plugin/Crud
2017-03-05 00:16:05 +08:00
if [ "${OS}" == "el" ]; then
zmrepodistro=${OS}
else
zmrepodistro="f"
fi
# Let repoquery determine the full url and filename of the zmrepo rpm we are interested in
result=`repoquery --repofrompath=zmpackpack,https://zmrepo.zoneminder.com/${zmrepodistro}/"${DIST}"/x86_64/ --repoid=zmpackpack --qf="%{location}" zmrepo 2> /dev/null`
2017-03-05 00:16:05 +08:00
if [ -n "$result" ] && [ $? -eq 0 ]; then
echo "Retrieving ZMREPO rpm..."
curl $result > build/zmrepo.noarch.rpm
else
echo "ERROR: Failed to retrieve zmrepo rpm..."
2017-03-06 03:41:17 +08:00
exit 1
2017-03-05 00:16:05 +08:00
fi
echo "Starting packpack..."
packpack/packpack -f utils/packpack/redhat_package.mk redhat_package
# Steps common to Debian based distros
elif [ "${OS}" == "debian" ] || [ "${OS}" == "ubuntu" ]; then
2017-03-07 08:54:55 +08:00
echo "Begin ${OS} ${DIST} build..."
2017-03-07 08:27:45 +08:00
2017-03-07 08:54:55 +08:00
setdebpkgver
movecrud
2017-03-05 00:16:05 +08:00
if [ "${DIST}" == "trusty" ] || [ "${DIST}" == "precise" ]; then
ln -sfT distros/ubuntu1204 debian
elif [ "${DIST}" == "wheezy" ]; then
ln -sfT distros/debian debian
2017-03-05 00:16:05 +08:00
else
ln -sfT distros/ubuntu1604 debian
2017-03-05 00:16:05 +08:00
fi
echo "Starting packpack..."
packpack/packpack
2017-03-08 04:24:06 +08:00
if [ "${OS}" == "ubuntu" ] && [ "${DIST}" == "trusty" ] && [ "${ARCH}" == "x86_64" ] && [ "${TRAVIS}" == "true" ]; then
installtrusty
fi
fi
2017-03-05 00:16:05 +08:00
# We were not triggered via cron so just build and test trusty
2017-03-08 04:43:14 +08:00
elif [ "${OS}" == "ubuntu" ] && [ "${DIST}" == "trusty" ] && [ "${ARCH}" == "x86_64" ]; then
echo "Begin Ubuntu Trusty build..."
2017-03-07 08:41:48 +08:00
commonprep
2017-03-07 08:54:55 +08:00
setdebpkgver
movecrud
ln -sfT distros/ubuntu1204 debian
echo "Starting packpack..."
packpack/packpack
# If we are running inside Travis then attempt to install the deb we just built
2017-03-08 04:43:14 +08:00
if [ "${TRAVIS}" == "true" ]; then
installtrusty
fi
fi
exit 0