diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-01-09 22:58:31 -0800 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-01-09 22:58:31 -0800 |
commit | 15854a1b1416b5b2072114882e9bed06a14aae3c (patch) | |
tree | 5bd24518d3404bf183f9497532d05c3d7b27e97f /ext/installfiles | |
parent | 12a0a9deddfc85e3ae6fc3a41c14ff58c13dc468 (diff) | |
download | infinitytier-15854a1b1416b5b2072114882e9bed06a14aae3c.tar.gz infinitytier-15854a1b1416b5b2072114882e9bed06a14aae3c.zip |
Mac installer work...
Diffstat (limited to 'ext/installfiles')
-rw-r--r-- | ext/installfiles/mac/install.tmpl.sh | 48 | ||||
-rwxr-xr-x | ext/installfiles/mac/launch.sh | 27 | ||||
-rwxr-xr-x | ext/installfiles/mac/uninstall.sh | 42 |
3 files changed, 54 insertions, 63 deletions
diff --git a/ext/installfiles/mac/install.tmpl.sh b/ext/installfiles/mac/install.tmpl.sh index 4fa7b0c7..24934d8d 100644 --- a/ext/installfiles/mac/install.tmpl.sh +++ b/ext/installfiles/mac/install.tmpl.sh @@ -16,15 +16,17 @@ if [ $dryRun -gt 0 ]; then alias ln="echo '>> dry run: ln'" alias rm="echo '>> dry run: rm'" alias mv="echo '>> dry run: mv'" + alias cp="echo '>> dry run: cp'" alias chown="echo '>> dry run: chown'" alias chgrp="echo '>> dry run: chgrp'" + alias chmod="echo '>> dry run: chmod'" alias launchctl="echo '>> dry run: launchctl'" alias zerotier-cli="echo '>> dry run: zerotier-cli'" fi zthome="/Library/Application Support/ZeroTier/One" -ztapp=`mdfind kMDItemCFBundleIdentifier == 'com.zerotier.ZeroTierOne' | grep -E '.+[.]app$' | sort | head -n 1` -if [ ! -d "$ztapp" ]; then +ztapp=`mdfind kMDItemCFBundleIdentifier == 'com.zerotier.ZeroTierOne' | grep -E '.*ZeroTier One[.]app$' | sort | head -n 1` +if [ -z "$ztapp" -o ! -d "$ztapp" ]; then ztapp="/Applications/ZeroTier One.app" fi @@ -52,35 +54,49 @@ echo 'Extracting files...' if [ $dryRun -gt 0 ]; then echo ">> dry run: tail -c +$blobStart \"$scriptPath\" | bunzip2 -c | tar -xvop -C / -f -" else - tail -c +$blobStart "$scriptPath" | bunzip2 -c | tar -xvop -C / -f - + rm -rf '/tmp/_zt1tmp' + mkdir '/tmp/_zt1tmp' + tail -c +$blobStart "$scriptPath" | bunzip2 -c | tar -xop -C '/tmp/_zt1tmp' -f - fi -if [ $dryRun -eq 0 -a ! -d "/Applications/ZeroTier One_app.LATEST" ]; then +cd '/tmp/_zt1tmp' + +if [ $dryRun -eq 0 -a ! -d './Applications/ZeroTier One.app' ]; then echo 'Archive extraction failed, cannot find zerotier-one binary.' exit 2 fi +echo 'Installing zerotier-one service...' + +mkdir -p "$zthome" +chown root:admin "$zthome" +chmod 0750 "$zthome" +cp -fa ./Library/Application\ Support/ZeroTier/One/* "$zthome" +chown -R root:wheel "$zthome/tap.kext" +chown -R root:wheel "$zthome/pre10.8/tap.kext" + echo 'Installing/updating ZeroTier One.app...' -if [ -d "$ztapp" ]; then - # Preserve ownership of existing .app and install new version in the - # same location. +if [ ! -z "$ztapp" -a -d "$ztapp" ]; then currentAppOwner=`stat -f '%u' "$ztapp"` currentAppGroup=`stat -f '%g' "$ztapp"` + + rm -rf "$ztapp" + mv -f './Applications/ZeroTier One.app' "$ztapp" + if [ ! -z "$currentAppOwner" -a ! -z "$currentAppGroup" ]; then - rm -rf "$ztapp" - mv -f "/Application/ZeroTier One_app.LATEST" "$ztapp" chown -R $currentAppOwner "$ztapp" chgrp -R $currentAppGroup "$ztapp" - else - rm -rf "$ztapp" - mv -f "/Application/ZeroTier One_app.LATEST" "$ztapp" fi else # If there is no existing app, just drop the shipped one into place - mv -f "/Applications/ZeroTier One_app.LATEST" "/Applications/ZeroTier One.app" + mv -f './Applications/ZeroTier One.app' "/Applications/ZeroTier One.app" fi +# Set up symlink that watches for app deletion +rm -f "$zthome/shutdownIfUnreadable" +ln -sf "$ztapp/Contents/Info.plist" "$zthome/shutdownIfUnreadable" + echo 'Installing zerotier-cli command line utility...' ln -sf "/Library/Application Support/ZeroTier/One/zerotier-one" /usr/bin/zerotier-cli @@ -96,13 +112,17 @@ fi echo 'Installing and (re-)starting zerotier-one service via launchctl...' +mv -f './Library/LaunchDaemons/com.zerotier.one.plist' '/Library/LaunchDaemons/' if [ ! -z "`launchctl list | grep -F com.zerotier.one`" ]; then launchctl unload /Library/LaunchDaemons/com.zerotier.one.plist fi launchctl load /Library/LaunchDaemons/com.zerotier.one.plist sleep 1 -zerotier-cli info +/usr/bin/zerotier-cli info + +cd /tmp +rm -rf _zt1tmp exit 0 diff --git a/ext/installfiles/mac/launch.sh b/ext/installfiles/mac/launch.sh index 1ce21efd..ef22ccbd 100755 --- a/ext/installfiles/mac/launch.sh +++ b/ext/installfiles/mac/launch.sh @@ -2,28 +2,13 @@ zthome="/Library/Application Support/ZeroTier/One" export PATH="/bin:/usr/bin:/sbin:/usr/sbin:$zthome" -ztapp=`mdfind kMDItemCFBundleIdentifier == 'com.zerotier.ZeroTierOne' | grep -E '.+[.]app$' | sort | head -n 1` -# Clean all other stuff off the system if the user has trashed the .app -if [ -z "$ztapp" -o ! -d "$ztapp" ]; then - # Double-check default location just in case there is some issue with mdfind - ztapp="/Applications/ZeroTier One.app" - if [ ! -d "$ztapp" ]; then - if [ -e "$zthome/uninstall.sh" ]; then - cd "$zthome" - nohup "$zthome/uninstall.sh" >/tmp/ZeroTierOneUninstall.log 2>&1 & - disown %1 - exit 0 - fi - fi -fi - -# Create the app deletion notification symlink if it does -# not already exist. -shutdownIfUnreadablePointsTo=`readlink "$zthome/shutdownIfUnreadable"` -if [ -z "$shutdownIfUnreadablePointsTo" -o "$shutdownIfUnreadablePointsTo" != "$ztapp/Contents/Info.plist" ]; then - rm -f "$zthome/shutdownIfUnreadable" - ln -sf "$ztapp/Contents/Info.plist" "$zthome/shutdownIfUnreadable" +# If the app has been deleted, uninstall the service +cd "$zthome" +if [ -L './shutdownIfUnreadable' -a ! -f "`readlink ./shutdownIfUnreadable`" ]; then + rm -f /tmp/ZeroTierOneUninstall.log + /bin/bash "$zthome/uninstall.sh" >/tmp/ZeroTierOneUninstall.log 2>&1 + exit 0 fi # Launch ZeroTier One (not as daemon... launchd monitors it) diff --git a/ext/installfiles/mac/uninstall.sh b/ext/installfiles/mac/uninstall.sh index c2219a98..546360b4 100755 --- a/ext/installfiles/mac/uninstall.sh +++ b/ext/installfiles/mac/uninstall.sh @@ -3,37 +3,16 @@ export PATH=/bin:/usr/bin:/sbin:/usr/sbin zthome="/Library/Application Support/ZeroTier/One" -ztapp=`mdfind kMDItemCFBundleIdentifier == 'com.zerotier.ZeroTierOne' | grep -E '.+[.]app$' | sort | head -n 1` +ztapp=`mdfind kMDItemCFBundleIdentifier == 'com.zerotier.ZeroTierOne' | grep -E '.*/ZeroTier One[.]app$' | sort | head -n 1` +if [ -z "$ztapp" -o ! -d "$ztapp" ]; then + ztapp="/Applications/ZeroTier One.app" +fi if [ "$UID" -ne 0 ]; then echo "Must be run as root; try: sudo $0" exit 1 fi -# Try default location if something's up with mdfind -if [ ! -d "$ztapp" ]; then - ztapp="/Applications/ZeroTier One.app" -fi - -# Run with -q to be quieter and run without delay -quickAndQuiet=0 -if [ "$1" = "-q" ]; then - quickAndQuiet=1 - echo() { :; } -fi - -echo - -if [ $quickAndQuiet -eq 0 ]; then - echo "This will uninstall ZeroTier One, hit CTRL+C to abort." - echo "Waiting 5 seconds..." - sleep 5 -fi - -echo "Unloading and removing LaunchDaemons item..." -launchctl unload /Library/LaunchDaemons/com.zerotier.one.plist -rm -f /Library/LaunchDaemons/com.zerotier.one.plist - echo "Killing any running zerotier-one service..." killall -TERM zerotier-one >>/dev/null 2>&1 sleep 3 @@ -41,16 +20,23 @@ killall -KILL zerotier-one >>/dev/null 2>&1 sleep 1 echo "Unloading kernel extension..." +kextunload "$zthome/pre10.8/tap.kext" >>/dev/null 2>&1 kextunload "$zthome/tap.kext" >>/dev/null 2>&1 echo "Erasing GUI app (if installed)..." -if [ -d "$ztapp" ]; then - rm -rfv "$ztapp" +if [ ! -z "$ztapp" -a -d "$ztapp" ]; then + rm -rf "$ztapp" fi echo "Erasing service and support files..." +rm -f /usr/bin/zerotier-cli cd "$zthome" -rm -rfv zerotier-one *.persist authtoken.secret identity.public *.log *.pid *.kext *.sh networks.d updates.d shutdownIfUnreadable pre10.8 +rm -f zerotier-one *.persist identity.public *.log *.pid *.sh shutdownIfUnreadable +rm -rf pre10.8 tap.kext updates.d networks.d + +echo "Removing LaunchDaemons item..." +rm -f /Library/LaunchDaemons/com.zerotier.one.plist +launchctl remove com.zerotier.one echo "Done." echo |