Browse Source

Ground work for reincorporating software updater for select platforms.

Adam Ierymenko 10 years ago
parent
commit
b6698d8415
5 changed files with 60 additions and 11 deletions
  1. 3 3
      ext/installfiles/mac/get-proxy-settings.sh
  2. 12 8
      make-mac.mk
  3. 3 0
      one.cpp
  4. 28 0
      service/OneService.cpp
  5. 14 0
      service/OneService.hpp

+ 3 - 3
ext/installfiles/mac/get-proxy-settings.sh

@@ -5,9 +5,9 @@
 
 
 export PATH=/bin:/usr/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin
 export PATH=/bin:/usr/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin
 
 
-enabled=`system_profiler SPNetworkDataType|grep "HTTP Proxy Enabled"|awk {'sub(/^.*:[ \t]*/, "", $0); print $0;'}`
-port=`system_profiler SPNetworkDataType|grep "HTTP Proxy Port"|awk {'sub(/^.*:[ \t]*/, "", $0); print $0;'}`
-serv=`system_profiler SPNetworkDataType|grep "HTTP Proxy Server"|awk {'sub(/^.*:[ \t]*/, "", $0); print $0;'}`
+enabled=`system_profiler SPNetworkDataType|grep "HTTP Proxy Enabled"|awk {'sub(/^.*:[ \t]*/, "", $0); print $0;'} 2>/dev/null`
+port=`system_profiler SPNetworkDataType|grep "HTTP Proxy Port"|awk {'sub(/^.*:[ \t]*/, "", $0); print $0;'} 2>/dev/null`
+serv=`system_profiler SPNetworkDataType|grep "HTTP Proxy Server"|awk {'sub(/^.*:[ \t]*/, "", $0); print $0;'} 2>/dev/null`
 
 
 if [ "$enabled" = "Yes" ]; then
 if [ "$enabled" = "Yes" ]; then
 	if [ "$serv" ]; then
 	if [ "$serv" ]; then

+ 12 - 8
make-mac.mk

@@ -13,18 +13,13 @@ OBJS+=osdep/OSXEthernetTap.o
 CODESIGN=echo
 CODESIGN=echo
 CODESIGN_CERT=
 CODESIGN_CERT=
 
 
+# For internal use only -- signs everything with ZeroTier's developer cert
 ifeq ($(ZT_OFFICIAL_RELEASE),1)
 ifeq ($(ZT_OFFICIAL_RELEASE),1)
-	# For use by ZeroTier Networks -- sign with developer cert
-	ZT_AUTO_UPDATE=1
-	DEFS+=-DZT_OFFICIAL_RELEASE 
+	DEFS+=-DZT_OFFICIAL_RELEASE -DZT_AUTO_UPDATE 
 	CODESIGN=codesign
 	CODESIGN=codesign
 	CODESIGN_CERT="Developer ID Application: ZeroTier Networks LLC (8ZD9JUCZ4V)"
 	CODESIGN_CERT="Developer ID Application: ZeroTier Networks LLC (8ZD9JUCZ4V)"
 endif
 endif
 
 
-ifeq ($(ZT_AUTO_UPDATE),1)
-	DEFS+=-DZT_AUTO_UPDATE 
-endif
-
 # Build with ZT_ENABLE_NETWORK_CONTROLLER=1 to build with the Sqlite network controller
 # Build with ZT_ENABLE_NETWORK_CONTROLLER=1 to build with the Sqlite network controller
 ifeq ($(ZT_ENABLE_NETWORK_CONTROLLER),1)
 ifeq ($(ZT_ENABLE_NETWORK_CONTROLLER),1)
 	DEFS+=-DZT_ENABLE_NETWORK_CONTROLLER 
 	DEFS+=-DZT_ENABLE_NETWORK_CONTROLLER 
@@ -35,6 +30,7 @@ endif
 # Enable SSE-optimized Salsa20 -- all Intel macs support SSE2
 # Enable SSE-optimized Salsa20 -- all Intel macs support SSE2
 DEFS+=-DZT_SALSA20_SSE
 DEFS+=-DZT_SALSA20_SSE
 
 
+# Debug mode -- dump trace output, build binary with -g
 ifeq ($(ZT_DEBUG),1)
 ifeq ($(ZT_DEBUG),1)
 	DEFS+=-DZT_TRACE 
 	DEFS+=-DZT_TRACE 
 	CFLAGS=-Wall -g -pthread $(INCLUDES) $(DEFS)
 	CFLAGS=-Wall -g -pthread $(INCLUDES) $(DEFS)
@@ -63,10 +59,18 @@ selftest: $(OBJS) selftest.o
 	$(CXX) $(CXXFLAGS) -o zerotier-selftest selftest.o $(OBJS) $(LIBS)
 	$(CXX) $(CXXFLAGS) -o zerotier-selftest selftest.o $(OBJS) $(LIBS)
 	$(STRIP) zerotier-selftest
 	$(STRIP) zerotier-selftest
 
 
-sign-pkg: FORCE
+# Requires Packages: http://s.sudre.free.fr/Software/Packages/about.html
+mac-dist-pkg: FORCE
+	cd ext/installfiles/mac ; packagesbuild "ZeroTier One.pkgproj"
 	$(CODESIGN) -f -s $(CODESIGN_CERT) "ZeroTier One.pkg"
 	$(CODESIGN) -f -s $(CODESIGN_CERT) "ZeroTier One.pkg"
 	$(CODESIGN) -vvv "ZeroTier One.pkg"
 	$(CODESIGN) -vvv "ZeroTier One.pkg"
 
 
+# For internal use only
+official: FORCE
+	make clean
+	make -j 4 ZT_OFFICIAL_RELEASE=1
+	make ZT_OFFICIAL_RELEASE=1 mac-dist-pkg
+
 clean:
 clean:
 	rm -rf *.dSYM build-* *.pkg *.dmg *.o node/*.o controller/*.o service/*.o osdep/*.o ext/http-parser/*.o ext/lz4/*.o ext/json-parser/*.o zerotier-one zerotier-idtool zerotier-selftest zerotier-cli ZeroTierOneInstaller-*
 	rm -rf *.dSYM build-* *.pkg *.dmg *.o node/*.o controller/*.o service/*.o osdep/*.o ext/http-parser/*.o ext/lz4/*.o ext/json-parser/*.o zerotier-one zerotier-idtool zerotier-selftest zerotier-cli ZeroTierOneInstaller-*
 
 

+ 3 - 0
one.cpp

@@ -888,6 +888,9 @@ static void printHelp(const char *cn,FILE *out)
 {
 {
 	fprintf(out,"ZeroTier One version %d.%d.%d"ZT_EOL_S"(c)2011-2015 ZeroTier, Inc."ZT_EOL_S,ZEROTIER_ONE_VERSION_MAJOR,ZEROTIER_ONE_VERSION_MINOR,ZEROTIER_ONE_VERSION_REVISION);
 	fprintf(out,"ZeroTier One version %d.%d.%d"ZT_EOL_S"(c)2011-2015 ZeroTier, Inc."ZT_EOL_S,ZEROTIER_ONE_VERSION_MAJOR,ZEROTIER_ONE_VERSION_MINOR,ZEROTIER_ONE_VERSION_REVISION);
 	fprintf(out,"Licensed under the GNU General Public License v3"ZT_EOL_S""ZT_EOL_S);
 	fprintf(out,"Licensed under the GNU General Public License v3"ZT_EOL_S""ZT_EOL_S);
+	std::string updateUrl(OneService::autoUpdateUrl());
+	if (updateUrl.length())
+		fprintf(out,"Automatic update enabled:"ZT_EOL_S"  %s"ZT_EOL_S""ZT_EOL_S,updateUrl.c_str());
 	fprintf(out,"Usage: %s [-switches] [home directory]"ZT_EOL_S""ZT_EOL_S,cn);
 	fprintf(out,"Usage: %s [-switches] [home directory]"ZT_EOL_S""ZT_EOL_S,cn);
 	fprintf(out,"Available switches:"ZT_EOL_S);
 	fprintf(out,"Available switches:"ZT_EOL_S);
 	fprintf(out,"  -h                - Display this help"ZT_EOL_S);
 	fprintf(out,"  -h                - Display this help"ZT_EOL_S);

+ 28 - 0
service/OneService.cpp

@@ -96,6 +96,8 @@ namespace ZeroTier { typedef BSDEthernetTap EthernetTap; }
 
 
 namespace ZeroTier {
 namespace ZeroTier {
 
 
+namespace {
+
 class OneServiceImpl;
 class OneServiceImpl;
 
 
 static int SnodeVirtualNetworkConfigFunction(ZT1_Node *node,void *uptr,uint64_t nwid,enum ZT1_VirtualNetworkConfigOperation op,const ZT1_VirtualNetworkConfig *nwconf);
 static int SnodeVirtualNetworkConfigFunction(ZT1_Node *node,void *uptr,uint64_t nwid,enum ZT1_VirtualNetworkConfigOperation op,const ZT1_VirtualNetworkConfig *nwconf);
@@ -903,6 +905,8 @@ static int ShttpOnMessageComplete(http_parser *parser)
 	return 0;
 	return 0;
 }
 }
 
 
+} // anonymous namespace
+
 std::string OneService::platformDefaultHomePath()
 std::string OneService::platformDefaultHomePath()
 {
 {
 #ifdef __UNIX_LIKE__
 #ifdef __UNIX_LIKE__
@@ -939,6 +943,30 @@ std::string OneService::platformDefaultHomePath()
 #endif // __UNIX_LIKE__ or not...
 #endif // __UNIX_LIKE__ or not...
 }
 }
 
 
+std::string OneService::autoUpdateUrl()
+{
+#ifdef ZT_AUTO_UPDATE
+
+/*
+#if defined(__LINUX__) && ( defined(__i386__) || defined(__x86_64) || defined(__x86_64__) || defined(__amd64) || defined(__i386) )
+	if (sizeof(void *) == 8)
+		return "http://download.zerotier.com/ZeroTierOneInstaller-linux-x64-LATEST.nfo";
+	else return "http://download.zerotier.com/ZeroTierOneInstaller-linux-x86-LATEST.nfo";
+#endif
+*/
+
+#if defined(__APPLE__) && ( defined(__i386__) || defined(__x86_64) || defined(__x86_64__) || defined(__amd64) || defined(__i386) )
+	return "http://download.zerotier.com/update/mac_intel/LATEST.nfo";
+#endif
+
+#ifdef __WINDOWS__
+	return "http://download.zerotier.com/update/win_intel/LATEST.nfo";
+#endif
+
+#endif // ZT_AUTO_UPDATE
+	return std::string();
+}
+
 OneService *OneService::newInstance(const char *hp,unsigned int port,const char *overrideRootTopology) { return new OneServiceImpl(hp,port,overrideRootTopology); }
 OneService *OneService::newInstance(const char *hp,unsigned int port,const char *overrideRootTopology) { return new OneServiceImpl(hp,port,overrideRootTopology); }
 OneService::~OneService() {}
 OneService::~OneService() {}
 
 

+ 14 - 0
service/OneService.hpp

@@ -34,6 +34,15 @@ namespace ZeroTier {
 
 
 /**
 /**
  * Local service for ZeroTier One as system VPN/NFV provider
  * Local service for ZeroTier One as system VPN/NFV provider
+ *
+ * If built with ZT_ENABLE_NETWORK_CONTROLLER defined, this includes and
+ * runs controller/SqliteNetworkController with a database called
+ * controller.db in the specified home directory.
+ *
+ * If built with ZT_AUTO_UPDATE, an official ZeroTier update URL is
+ * periodically checked and updates are automatically downloaded, verified
+ * against a built-in list of update signing keys, and installed. This is
+ * only supported for certain platforms.
  */
  */
 class OneService
 class OneService
 {
 {
@@ -69,6 +78,11 @@ public:
 	 */
 	 */
 	static std::string platformDefaultHomePath();
 	static std::string platformDefaultHomePath();
 
 
+	/**
+	 * @return Auto-update URL or empty string if auto-updates unsupported or not enabled
+	 */
+	static std::string autoUpdateUrl();
+
 	/**
 	/**
 	 * Create a new instance of the service
 	 * Create a new instance of the service
 	 *
 	 *