#!/bin/bash # This script builds the installer for *nix systems. Windows must do everything # completely differently, as usual. export PATH=/bin:/usr/bin:/sbin:/usr/sbin if [ ! -f zerotier-one ]; then echo "Could not find 'zerotier-one' binary, please build before running this script." exit 2 fi machine=`uname -m` system=`uname -s` vmajor=`cat version.h | grep -F ZEROTIER_ONE_VERSION_MAJOR | cut -d ' ' -f 3` vminor=`cat version.h | grep -F ZEROTIER_ONE_VERSION_MINOR | cut -d ' ' -f 3` revision=`cat version.h | grep -F ZEROTIER_ONE_VERSION_REVISION | cut -d ' ' -f 3` if [ -z "$vmajor" -o -z "$vminor" -o -z "$revision" ]; then echo "Unable to extract version info from version.h, aborting installer build." exit 2 fi rm -rf build-installer mkdir build-installer case "$system" in Linux) # Canonicalize $machine for some architectures... we use x86 # and x64 for Intel stuff. ARM and others should be fine if # we ever ship officially for those. debian_arch=$machine case "$machine" in i386|i486|i586|i686) machine="x86" debian_arch="i386" ;; x86_64|amd64|x64) machine="x64" debian_arch="amd64" ;; armv6l|arm|armhf) machine="armv6l" debian_arch="armhf" ;; esac echo "Assembling Linux installer for $machine and version $vmajor.$vminor.$revision" mkdir -p 'build-installer/var/lib/zerotier-one/ui' cp -fp 'ext/installfiles/linux/uninstall.sh' 'build-installer/var/lib/zerotier-one' cp -fp 'zerotier-one' 'build-installer/var/lib/zerotier-one' for f in ui/*.html ui/*.js ui/*.css ui/*.jsx ; do cp -fp "$f" 'build-installer/var/lib/zerotier-one/ui' done mkdir -p 'build-installer/tmp' cp -fp 'ext/installfiles/linux/init.d/zerotier-one' 'build-installer/tmp/init.d_zerotier-one' cp -fp 'ext/installfiles/linux/systemd/zerotier-one.service' 'build-installer/tmp/systemd_zerotier-one.service' targ="ZeroTierOneInstaller-linux-${machine}-${vmajor}_${vminor}_${revision}" # Use gzip in Linux since some minimal Linux systems do not have bunzip2 rm -f build-installer-tmp.tar.gz cd build-installer tar -cf - * | gzip -9 >../build-installer-tmp.tar.gz cd .. rm -f $targ cat ext/installfiles/linux/install.tmpl.sh build-installer-tmp.tar.gz >$targ chmod 0755 $targ rm -f build-installer-tmp.tar.gz ls -l $targ if [ -f /usr/bin/dpkg-deb -a "$UID" -eq 0 ]; then echo echo Found dpkg-deb and you are root, trying to build Debian package. rm -rf build-installer-deb debbase="build-installer-deb/zerotier-one_${vmajor}.${vminor}.${revision}_$debian_arch" debfolder="${debbase}/DEBIAN" mkdir -p $debfolder cat 'ext/installfiles/linux/DEBIAN/control.in' | sed "s/__VERSION__/${vmajor}.${vminor}.${revision}/" | sed "s/__ARCH__/${debian_arch}/" >$debfolder/control cat $debfolder/control cp -f 'ext/installfiles/linux/DEBIAN/conffiles' "${debfolder}/conffiles" mkdir -p "${debbase}/var/lib/zerotier-one/updates.d" cp -f $targ "${debbase}/var/lib/zerotier-one/updates.d" rm -f "${debfolder}/postinst" "${debfolder}/prerm" echo '#!/bin/bash' >${debfolder}/postinst echo "/var/lib/zerotier-one/updates.d/${targ}" >>${debfolder}/postinst echo "/bin/rm -f /var/lib/zerotier-one/updates.d/*" >>${debfolder}/postinst chmod a+x ${debfolder}/postinst echo '#!/bin/bash' >${debfolder}/prerm echo 'export PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin' >>${debfolder}/prerm echo 'if [ "$1" != "upgrade" ]; then' >>${debfolder}/prerm echo ' /var/lib/zerotier-one/uninstall.sh' >>${debfolder}/prerm echo 'fi' >>${debfolder}/prerm chmod a+x ${debfolder}/prerm dpkg-deb --build $debbase mv -f build-installer-deb/*.deb . rm -rf build-installer-deb fi if [ -f /usr/bin/rpmbuild ]; then echo echo Found rpmbuild, trying to build RedHat/CentOS package. rm -f /tmp/zerotier-one.spec curr_dir=`pwd` cat ext/installfiles/linux/RPM/zerotier-one.spec.in | sed "s/__VERSION__/${vmajor}.${vminor}.${revision}/g" | sed "s/__INSTALLER__/${targ}/g" >/tmp/zerotier-one.spec rpmbuild -ba /tmp/zerotier-one.spec rm -f /tmp/zerotier-one.spec fi ;; *) echo "Unsupported platform: $system" exit 2 esac rm -rf build-installer exit 0