123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- #!/bin/bash
- export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin
- shopt -s expand_aliases
- dryRun=0
- echo "*** ZeroTier One install/update ***"
- echo
- if [ "$UID" -ne 0 ]; then
- echo "Not running as root so doing dry run (no modifications to system)..."
- dryRun=1
- fi
- if [ $dryRun -gt 0 ]; then
- alias ln="echo '>> ln'"
- alias rm="echo '>> rm'"
- alias mv="echo '>> mv'"
- alias cp="echo '>> cp'"
- alias chown="echo '>> chown'"
- alias chgrp="echo '>> chgrp'"
- alias chmod="echo '>> chmod'"
- alias chkconfig="echo '>> chkconfig'"
- alias zerotier-cli="echo '>> zerotier-cli'"
- alias service="echo '>> service'"
- alias systemctl="echo '>> systemctl'"
- fi
- scriptPath="`dirname "$0"`/`basename "$0"`"
- if [ ! -r "$scriptPath" ]; then
- scriptPath="$0"
- if [ ! -r "$scriptPath" ]; then
- echo "Installer cannot determine its own path; $scriptPath is not readable."
- exit 2
- fi
- fi
- # Check for systemd vs. old school SysV init
- SYSTEMDUNITDIR=
- if [ -e /bin/systemctl -o -e /usr/bin/systemctl -o -e /usr/local/bin/systemctl -o -e /sbin/systemctl -o -e /usr/sbin/systemctl ]; then
- # Second check: test if systemd appears to actually be running. Apparently Ubuntu
- # thought it was a good idea to ship with systemd installed but not used. Issue #133
- if [ -d /var/run/systemd/system -o -d /run/systemd/system ]; then
- if [ -e /usr/bin/pkg-config ]; then
- SYSTEMDUNITDIR=`/usr/bin/pkg-config systemd --variable=systemdsystemunitdir`
- fi
- if [ -z "$SYSTEMDUNITDIR" -o ! -d "$SYSTEMDUNITDIR" ]; then
- if [ -d /usr/lib/systemd/system ]; then
- SYSTEMDUNITDIR=/usr/lib/systemd/system
- fi
- if [ -d /etc/systemd/system ]; then
- SYSTEMDUNITDIR=/etc/systemd/system
- fi
- fi
- fi
- fi
- # Find the end of this script, which is where we have appended binary data.
- endMarkerIndex=`grep -a -b -E '^################' "$scriptPath" | head -c 16 | cut -d : -f 1`
- if [ "$endMarkerIndex" -le 100 ]; then
- echo 'Internal error: unable to find end of script / start of binary data marker.'
- exit 2
- fi
- blobStart=`expr $endMarkerIndex + 17`
- if [ "$blobStart" -le "$endMarkerIndex" ]; then
- echo 'Internal error: unable to find end of script / start of binary data marker.'
- exit 2
- fi
- echo -n 'Getting version of existing install... '
- origVersion=NONE
- if [ -x /var/lib/zerotier-one/zerotier-one ]; then
- origVersion=`/var/lib/zerotier-one/zerotier-one -v`
- fi
- echo $origVersion
- echo 'Extracting files...'
- if [ $dryRun -gt 0 ]; then
- echo ">> tail -c +$blobStart \"$scriptPath\" | gunzip -c | tar -xvop -C / -f -"
- tail -c +$blobStart "$scriptPath" | gunzip -c | tar -t -f - | sed 's/^/>> /'
- else
- tail -c +$blobStart "$scriptPath" | gunzip -c | tar -xvop --no-overwrite-dir -C / -f -
- fi
- if [ $dryRun -eq 0 -a ! -x "/var/lib/zerotier-one/zerotier-one" ]; then
- echo 'Archive extraction failed, cannot find zerotier-one binary in "/var/lib/zerotier-one".'
- exit 2
- fi
- echo -n 'Getting version of new install... '
- newVersion=`/var/lib/zerotier-one/zerotier-one -v`
- echo $newVersion
- echo 'Creating symlinks...'
- rm -f /usr/bin/zerotier-cli /usr/bin/zerotier-idtool
- ln -sf /var/lib/zerotier-one/zerotier-one /usr/bin/zerotier-cli
- ln -sf /var/lib/zerotier-one/zerotier-one /usr/bin/zerotier-idtool
- echo 'Installing zerotier-one service...'
- if [ -n "$SYSTEMDUNITDIR" -a -d "$SYSTEMDUNITDIR" ]; then
- # SYSTEMD
- # If this was updated or upgraded from an init.d based system, clean up the old
- # init.d stuff before installing directly via systemd.
- if [ -f /etc/init.d/zerotier-one ]; then
- if [ -e /sbin/chkconfig -o -e /usr/sbin/chkconfig -o -e /bin/chkconfig -o -e /usr/bin/chkconfig ]; then
- chkconfig zerotier-one off
- fi
- rm -f /etc/init.d/zerotier-one
- fi
- cp -f /tmp/systemd_zerotier-one.service "$SYSTEMDUNITDIR/zerotier-one.service"
- chown 0 "$SYSTEMDUNITDIR/zerotier-one.service"
- chgrp 0 "$SYSTEMDUNITDIR/zerotier-one.service"
- chmod 0644 "$SYSTEMDUNITDIR/zerotier-one.service"
- rm -f /tmp/systemd_zerotier-one.service /tmp/init.d_zerotier-one
- systemctl enable zerotier-one.service
- echo
- echo 'Done! Installed and service configured to start at system boot.'
- echo
- echo "To start now or restart the service if it's already running:"
- echo ' sudo systemctl restart zerotier-one.service'
- else
- # SYSV INIT -- also covers upstart which supports SysVinit backward compatibility
- cp -f /tmp/init.d_zerotier-one /etc/init.d/zerotier-one
- chmod 0755 /etc/init.d/zerotier-one
- rm -f /tmp/systemd_zerotier-one.service /tmp/init.d_zerotier-one
- if [ -f /sbin/chkconfig -o -f /usr/sbin/chkconfig -o -f /usr/bin/chkconfig -o -f /bin/chkconfig ]; then
- chkconfig zerotier-one on
- else
- # Yes Virginia, some systems lack chkconfig.
- if [ -d /etc/rc0.d ]; then
- rm -f /etc/rc0.d/???zerotier-one
- ln -sf /etc/init.d/zerotier-one /etc/rc0.d/K89zerotier-one
- fi
- if [ -d /etc/rc1.d ]; then
- rm -f /etc/rc1.d/???zerotier-one
- ln -sf /etc/init.d/zerotier-one /etc/rc1.d/K89zerotier-one
- fi
- if [ -d /etc/rc2.d ]; then
- rm -f /etc/rc2.d/???zerotier-one
- ln -sf /etc/init.d/zerotier-one /etc/rc2.d/S11zerotier-one
- fi
- if [ -d /etc/rc3.d ]; then
- rm -f /etc/rc3.d/???zerotier-one
- ln -sf /etc/init.d/zerotier-one /etc/rc3.d/S11zerotier-one
- fi
- if [ -d /etc/rc4.d ]; then
- rm -f /etc/rc4.d/???zerotier-one
- ln -sf /etc/init.d/zerotier-one /etc/rc4.d/S11zerotier-one
- fi
- if [ -d /etc/rc5.d ]; then
- rm -f /etc/rc5.d/???zerotier-one
- ln -sf /etc/init.d/zerotier-one /etc/rc5.d/S11zerotier-one
- fi
- if [ -d /etc/rc6.d ]; then
- rm -f /etc/rc6.d/???zerotier-one
- ln -sf /etc/init.d/zerotier-one /etc/rc6.d/K89zerotier-one
- fi
- fi
- echo
- echo 'Done! Installed and service configured to start at system boot.'
- echo
- echo "To start now or restart the service if it's already running:"
- echo ' sudo service zerotier-one restart'
- fi
- exit 0
- # Do not remove the last line or add a carriage return to it! The installer
- # looks for an unterminated line beginning with 16 #'s in itself to find
- # the binary blob data, which is appended after it.
- ################
|