From 5179dfafbeeaf4e678d42dd9bd9902e11a29bcac Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 7 Nov 2013 14:51:26 -0500 Subject: Installer work... --- installer.cpp | 52 +++++++------ installer/linux/init.d/zerotier-one | 115 +++++++++++++++++++++++++++++ installer/linux/redhat/init.d/zerotier-one | 115 ----------------------------- 3 files changed, 143 insertions(+), 139 deletions(-) create mode 100755 installer/linux/init.d/zerotier-one delete mode 100755 installer/linux/redhat/init.d/zerotier-one diff --git a/installer.cpp b/installer.cpp index 3a6d7df7..ff26fa87 100644 --- a/installer.cpp +++ b/installer.cpp @@ -62,8 +62,7 @@ // Linux init.d script #ifdef __LINUX__ -#include "installer-build/redhat__init_d__zerotier_one.c" -#include "installer-build/debian__init_d__zerotier_one.c" +#include "installer-build/init_d__zerotier_one.c" #endif // Apple Tap device driver @@ -99,6 +98,11 @@ static bool _instFile(const void *lz4,int decompressedLen,const char *path) unsigned char *data = unlzr(lz4,decompressedLen); if (!data) return false; +#ifdef __WINDOWS__ + DeleteFileA(path); +#else + unlink(path); +#endif FILE *f = fopen(path,"w"); if (!f) { delete [] data; @@ -107,7 +111,11 @@ static bool _instFile(const void *lz4,int decompressedLen,const char *path) if (fwrite(data,decompressedLen,1,f) != 1) { fclose(f); delete [] data; - Utils::rm(path); +#ifdef __WINDOWS__ + DeleteFileA(path); +#else + unlink(path); +#endif return false; } fclose(f); @@ -134,11 +142,14 @@ int main(int argc,char **argv) const char *zthome; #ifdef __APPLE__ mkdir("/Library/Application Support/ZeroTier",0755); + chmod("/Library/Application Support/ZeroTier",0755); + chown("/Library/Application Support/ZeroTier",0,0); mkdir(zthome = "/Library/Application Support/ZeroTier/One",0755); #else mkdir("/var/lib",0755); mkdir(zthome = "/var/lib/zerotier-one",0755); #endif + chmod(zthome,0755); chown(zthome,0,0); sprintf(buf,"%s/zerotier-one",zthome); @@ -146,7 +157,7 @@ int main(int argc,char **argv) fprintf(stderr,"Unable to write %s\n",buf); return 1; } - chmod(buf,0700); + chmod(buf,0755); chown(buf,0,0); fprintf(stdout,"%s\n",buf); @@ -191,27 +202,20 @@ int main(int argc,char **argv) #endif #ifdef __LINUX__ - struct stat st; - if (stat("/etc/redhat-release",&st) == 0) { - // Redhat-derived distribution - sprintf(buf,"/etc/init.d/zerotier-one"); - if (!instFile(redhat__init_d__zerotier_one,buf)) { - fprintf(stderr,"Unable to write %s\n",buf); - return 1; - } - chmod(buf,0755); - fprintf(stdout,"%s (version for RedHat-derived distros)\n",buf); - } - if (stat("/etc/debian_version",&st) == 0) { - // Debian-derived distribution - sprintf(buf,"/etc/init.d/zerotier-one"); - if (!instFile(debian__init_d__zerotier_one,buf)) { - fprintf(stderr,"Unable to write %s\n",buf); - return 1; - } - chmod(buf,0755); - fprintf(stdout,"%s (version for Debian-derived distros)\n",buf); + sprintf(buf,"/etc/init.d/zerotier-one"); + if (!instFile(init_d__zerotier_one,buf)) { + fprintf(stderr,"Unable to write %s\n",buf); + return 1; } + chown(buf,0,0); + chmod(buf,0755); + fprintf(stdout,"%s\n",buf); + + symlink("/etc/init.d/zerotier-one","/etc/rc0.d/K89zerotier-one"); + symlink("/etc/init.d/zerotier-one","/etc/rc2.d/S11zerotier-one"); + symlink("/etc/init.d/zerotier-one","/etc/rc3.d/S11zerotier-one"); + symlink("/etc/init.d/zerotier-one","/etc/rc4.d/S11zerotier-one"); + symlink("/etc/init.d/zerotier-one","/etc/rc5.d/S11zerotier-one"); #endif #endif // __UNIX_LIKE__ diff --git a/installer/linux/init.d/zerotier-one b/installer/linux/init.d/zerotier-one new file mode 100755 index 00000000..5457d43b --- /dev/null +++ b/installer/linux/init.d/zerotier-one @@ -0,0 +1,115 @@ +#!/bin/sh +# +# zerotier-one Virtual distributed Ethernet service +# +# chkconfig: 2345 11 89 +# description: ZeroTier One provides public and private distributed ethernet \ +# networks. See https://www.zerotier.com/ for more information. + +### BEGIN INIT INFO +# Provides: zerotier-one +# Required-Start: $local_fs $network +# Required-Stop: $local_fs +# Default-Start: 2345 +# Default-Stop: 90 +# Short-Description: start ZeroTier One +# Description: ZeroTier One provides public and private distributed ethernet \ +# networks. See https://www.zerotier.com/ for more information. +### END INIT INFO + +RETVAL=0 +prog="zerotier-one" +exec="/var/lib/zerotier-one/zerotier-one" +lockfile="/var/lock/subsys/zerotier-one" +pidfile="/var/lib/zerotier-one/zerotier-one.pid" + +# Source function library. +. /etc/rc.d/init.d/functions + +start() { + if [ $UID -ne 0 ] ; then + echo "User has insufficient privilege." + exit 4 + fi + [ -x $exec ] || exit 5 + echo -n $"Starting $prog: " + daemon $exec + retval=$? + echo + [ $retval -eq 0 ] && touch $lockfile +} + +stop() { + if [ $UID -ne 0 ] ; then + echo "User has insufficient privilege." + exit 4 + fi + echo -n $"Stopping $prog: " + pid=0 + if [ -f "$pidfile" ]; then + pid=`cat $pidfile` + fi + if [ "$pid" -gt 0 ]; then + kill -TERM $pid + RETVAL=3 + else + failure $"Stopping $prog" + fi + retval=$? + echo + [ $retval -eq 0 ] && rm -f $lockfile +} + +restart() { + stop + start +} + +reload() { + stop + start +} + +force_reload() { + restart +} + +rh_status() { + status -p $pidfile $prog +} + +rh_status_q() { + rh_status >/dev/null 2>&1 +} + +case "$1" in + start) + rh_status_q && exit 0 + $1 + ;; + stop) + rh_status_q || exit 0 + $1 + ;; + restart) + $1 + ;; + reload) + rh_status_q || exit 7 + $1 + ;; + force-reload) + force_reload + ;; + status) + rh_status + ;; + condrestart|try-restart) + rh_status_q || exit 0 + restart + ;; + *) + echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" + exit 2 +esac +exit $? diff --git a/installer/linux/redhat/init.d/zerotier-one b/installer/linux/redhat/init.d/zerotier-one deleted file mode 100755 index 09962704..00000000 --- a/installer/linux/redhat/init.d/zerotier-one +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/sh -# -# zerotier-one Virtual distributed Ethernet service -# -# chkconfig: 2345 90 60 -# description: ZeroTier One provides public and private distributed ethernet \ -# networks. See https://www.zerotier.com/ for more information. - -### BEGIN INIT INFO -# Provides: zerotier-one -# Required-Start: $local_fs $network -# Required-Stop: $local_fs -# Default-Start: 2345 -# Default-Stop: 90 -# Short-Description: start ZeroTier One -# Description: ZeroTier One provides public and private distributed ethernet \ -# networks. See https://www.zerotier.com/ for more information. -### END INIT INFO - -RETVAL=0 -prog="zerotier-one" -exec="/var/lib/zerotier-one/zerotier-one" -lockfile="/var/lock/subsys/zerotier-one" -pidfile="/var/lib/zerotier-one/zerotier-one.pid" - -# Source function library. -. /etc/rc.d/init.d/functions - -start() { - if [ $UID -ne 0 ] ; then - echo "User has insufficient privilege." - exit 4 - fi - [ -x $exec ] || exit 5 - echo -n $"Starting $prog: " - daemon $exec - retval=$? - echo - [ $retval -eq 0 ] && touch $lockfile -} - -stop() { - if [ $UID -ne 0 ] ; then - echo "User has insufficient privilege." - exit 4 - fi - echo -n $"Stopping $prog: " - pid=0 - if [ -f "$pidfile" ]; then - pid=`cat $pidfile` - fi - if [ "$pid" -gt 0 ]; then - kill -TERM $pid - RETVAL=3 - else - failure $"Stopping $prog" - fi - retval=$? - echo - [ $retval -eq 0 ] && rm -f $lockfile -} - -restart() { - stop - start -} - -reload() { - stop - start -} - -force_reload() { - restart -} - -rh_status() { - status -p $pidfile $prog -} - -rh_status_q() { - rh_status >/dev/null 2>&1 -} - -case "$1" in - start) - rh_status_q && exit 0 - $1 - ;; - stop) - rh_status_q || exit 0 - $1 - ;; - restart) - $1 - ;; - reload) - rh_status_q || exit 7 - $1 - ;; - force-reload) - force_reload - ;; - status) - rh_status - ;; - condrestart|try-restart) - rh_status_q || exit 0 - restart - ;; - *) - echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" - exit 2 -esac -exit $? -- cgit v1.2.3