Prechádzať zdrojové kódy

Merge edge, still need to resolve CMakeLists.txt

Adam Ierymenko 5 rokov pred
rodič
commit
aa9ca845e8

+ 172 - 82
Jenkinsfile

@@ -22,18 +22,20 @@ pipeline {
                     tasks << buildDebianNative()
                     tasks << buildCentosNative()
                     tasks << buildMacOS()
+                    tasks << buildWindows()
+                    // tasks << buildFreeBSD()
 
                     parallel tasks
                 }
             }
         }
-        // stage ("Package Static") {
-        //     steps {
-        //         script {
-        //             parallel packageStatic()
-        //         }
-        //     }
-        // }
+        stage ("Package Static") {
+            steps {
+                script {
+                    parallel packageStatic()
+                }
+            }
+        }
     }
 }
 
@@ -41,16 +43,68 @@ def buildMacOS() {
     def tasks = [:]
     tasks << getTasks(['mac'],['amd64'], {unused1, unused2 ->
         def myNode = {
+            env.PATH = env.PATH + ":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/jenkins-build/go/bin"
             node ('mac') {
                 dir("build") {
                     checkout scm
                     sh 'make'
+                }
+                cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
+            }
+        }
+        return myNode
+    })
+    return tasks
+}
+
+def buildWindows() {
+    def tasks = [:]
+    tasks << getTasks(['windows'], ['amd64', 'i386'], { unused1, platform ->
+        def myNode = {
+            node ('windows') {
+                env.SHELL = 'C:/Windows/System32/cmd.exe'
+                dir ("build") {
+                    checkout scm
+                    
+                    dir ("build") {
+                        withEnv(["PATH=C:\\TDM-GCC-64\\bin;C:\\WINDOWS;C:\\Windows\\system32;C:\\CMake\\bin;C:\\Go\\bin"]) {
+                            def cmakeFlags = ""
+                            if (platform == "i386") {
+                                cmakeFlags = '-DBUILD_32BIT=1'
+                            }
+                            bat """
+                            cmake -G"MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release ${cmakeFlags} ..
+                            mingw32-make -j8
+                            """
+                        }
+                    }
                     cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
                 }
             }
         }
         return myNode
     })
+
+    return tasks
+}
+
+def buildFreeBSD() {
+    def tasks = [:]
+    tasks << getTasks(['freebsd12'], ['amd64'], { unused1, unused2 ->
+        def myNode = {
+            node ('freebsd12') {
+                dir('build') {
+                    checkout scm
+                    sh 'make setup'
+                    dir('build') {
+                        sh 'make -j4'
+                    }
+                }
+                cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
+            }
+        }
+        return myNode
+    })
     return tasks
 }
 
@@ -67,6 +121,7 @@ def buildStaticBinaries() {
     tasks << getTasks(dist, archs, { distro, platform -> 
         def myNode = {
             node ('linux-build') {
+                env.PATH = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/jenkins-build/go/bin"
                 dir ("build") {
                     checkout scm
                 }
@@ -76,8 +131,12 @@ def buildStaticBinaries() {
 
                         def cmakeFlags = 'CMAKE_ARGS="-DBUILD_STATIC=1"'
                         if (platform == "i386") {
-                            cmakeFlags = 'CMAKE_ARGS="-DBUILD_32BIT=1 -DBUILD_STATIC=1"'
-                         }
+                            cmakeFlags = 'CMAKE_ARGS="-DBUILD_STATIC=1"'
+                        } else if (platform == "armel") {
+                            cmakeFlags = 'CMAKE_ARGS="-DBUILD_STATIC=1 -DBUILD_ARM_V5=1"'
+                        } else if (platform == "armhf") {
+                            cmakeFlags = 'CMAKE_ARGS="-DBUILD_STATIC=1 -DBUILD_ARM_V6=1"'
+                        }
                    
                         sh "${cmakeFlags} make"
                         dir("build") {
@@ -109,37 +168,13 @@ def getTasks(axisDistro, axisPlatform, task) {
 
 def packageStatic() {
     def tasks = [:]
-    
-    def centos6 = ["centos6"]
-    def centos6Arch = ["i386", "amd64"]
-    tasks << getTasks(centos6, centos6Arch, { distro, arch -> 
-        def myNode = {
-            node ('linux-build') {
-                dir ("build") {
-                    checkout scm
-                }
-                def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
-                runtime.inside {
-                    dir("build") {
-                        unstash "static-${arch}"
-                        sh "mv zerotier-static-${arch} zerotier && chmod +x zerotier" 
-                        sh "make redhat"
-                        sh "mkdir -p ${distro}"
-                        sh "cp -av `find ~/rpmbuild/ -type f -name \"*.rpm\"` ${distro}/"
-                        archiveArtifacts artifacts: "${distro}/*.rpm", onlyIfSuccessful: true
-                    }
-                }
-                cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
-            }
-        }
-        return myNode
-    })
-    
+        
     def centos7 = ["centos7"]
     def centos7Arch = ["i386"]
     tasks << getTasks(centos7, centos7Arch, { distro, arch -> 
         def myNode = {
             node ('linux-build') {
+                env.PATH = env.PATH + ":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/jenkins-build/go/bin"
                 dir ("build") {
                     checkout scm
                 }
@@ -147,10 +182,14 @@ def packageStatic() {
                 runtime.inside {
                     dir("build") {
                         unstash "static-${arch}"
-                        sh "mv zerotier-static-${arch} zerotier && chmod +x zerotier" 
-                        sh "make redhat"
+                        sh "mkdir -p build"
+                        sh "mv zerotier-static-${arch} build/zerotier && chmod +x build/zerotier" 
+                        sh 'CMAKE_ARGS="-DBUILD_32BIT=1 -DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=RPM" make setup'
+                        dir("build") {
+                            sh 'make package -j4 VERBOSE=1'
+                        }
                         sh "mkdir -p ${distro}"
-                        sh "cp -av `find ~/rpmbuild/ -type f -name \"*.rpm\"` ${distro}/"
+                        sh "cp -av build/*.rpm ${distro}/"
                         archiveArtifacts artifacts: "${distro}/*.rpm", onlyIfSuccessful: true
                     }
                 }
@@ -166,6 +205,7 @@ def packageStatic() {
         tasks << getTasks(clefos7, clefos7Arch, { distro, arch -> 
             def myNode = {
                 node ('linux-build') {
+                    env.PATH = env.PATH + ":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/jenkins-build/go/bin"
                     dir ("build") {
                         checkout scm
                     }
@@ -173,10 +213,14 @@ def packageStatic() {
                     runtime.inside {
                         dir("build/") {
                             unstash "static-${arch}"
-                            sh "mv zerotier-static-${arch} zerotier && chmod +x zerotier" 
-                            sh "make redhat"
+                            sh "mkdir -p build"
+                            sh "mv zerotier-static-${arch} build/zerotier && chmod +x build/zerotier" 
+                            sh 'CMAKE_ARGS="-DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=RPM" make setup'
+                            dir("build") {
+                                sh 'make package -j4 VERBOSE=1'
+                            }
                             sh "mkdir -p ${distro}"
-                            sh "cp -av `find ~/rpmbuild/ -type f -name \"*.rpm\"` ${distro}/"
+                            sh "cp -av build/*.rpm ${distro}/"
                             archiveArtifacts artifacts: "${distro}/*.rpm", onlyIfSuccessful: true
                         }
                     }
@@ -197,23 +241,33 @@ def packageStatic() {
     tasks << getTasks(debianJessie, debianJessieArch, { distro, arch -> 
         def myNode = {
             node ('linux-build') {
+                env.PATH = env.PATH + ":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/jenkins-build/go/bin"
                 dir ("build") {
                     checkout scm
                 }
                 def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
                 runtime.inside {
-                    sh "ls -la ."
                     dir('build/') {
-                        sh "ls -la ."
+                        def cmakeFlags = 'CMAKE_ARGS="-DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB"'
+                        if (arch == "i386") {
+                            cmakeFlags = 'CMAKE_ARGS="-DBUILD_32BIT=1 -DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB"'
+                        } else if (arch == "armel") {
+                            cmakeFlags = 'CMAKE_ARGS="-DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB -DBUILD_ARM_V5=1"'
+                        } else if (arch == "armhf") {
+                            cmakeFlags = 'CMAKE_ARGS="-DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB -DBUILD_ARM_V6=1"'
+                        }
+                   
                         unstash "static-${arch}"
-                        sh "pwd"
-                        sh "mv zerotier-static-${arch} zerotier && chmod +x zerotier && file ./zerotier" 
-                        sh "mv -f debian/rules.static debian/rules"
-                        sh "make debian"
+                        sh "mkdir -p build"
+                        sh "mv zerotier-static-${arch} build/zerotier && chmod +x build/zerotier" 
+                        sh "${cmakeFlags} make setup"
+                        dir("build") {
+                            sh 'make package -j4 VERBOSE=1'
+                        }
+                        sh "mkdir -p ${distro}"
+                        sh "cp -av build/*.deb ${distro}/"
+                        archiveArtifacts artifacts: "${distro}/*.deb", onlyIfSuccessful: true
                     }
-                    sh "mkdir -p ${distro}"
-                    sh "mv *.deb ${distro}"
-                    archiveArtifacts artifacts: "${distro}/*.deb", onlyIfSuccessful: true
                 }
                 cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
             }
@@ -231,23 +285,33 @@ def packageStatic() {
     tasks << getTasks(ubuntuTrusty, ubuntuTrustyArch, { distro, arch -> 
         def myNode = {
             node ('linux-build') {
+                env.PATH = env.PATH + ":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/jenkins-build/go/bin"
                 dir ("build") {
                     checkout scm
                 }
                 def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
                 runtime.inside {
-                    sh "ls -la ."
                     dir('build/') {
-                        sh "ls -la ."
+                        def cmakeFlags = 'CMAKE_ARGS="-DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB"'
+                        if (arch == "i386") {
+                            cmakeFlags = 'CMAKE_ARGS="-DBUILD_32BIT=1 -DBUILD_STATIC=1 -DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB"'
+                        } else if (arch == "armel") {
+                            cmakeFlags = 'CMAKE_ARGS="-DBUILD_STATIC=1 -DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB -DBUILD_ARM_V5=1"'
+                        } else if (arch == "armhf") {
+                            cmakeFlags = 'CMAKE_ARGS="-DBUILD_STATIC=1 -DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB -DBUILD_ARM_V6=1"'
+                        }
+
                         unstash "static-${arch}"
-                        sh "pwd"
-                        sh "mv zerotier-static-${arch} zerotier && chmod +x zerotier && file ./zerotier" 
-                        sh "mv -f debian/rules.static debian/rules"
-                        sh "make debian"
+                        sh "mkdir -p build"
+                        sh "mv zerotier-static-${arch} build/zerotier && chmod +x build/zerotier" 
+                        sh "${cmakeFlags} make setup"
+                        dir("build") {
+                            sh 'make package -j4 VERBOSE=1'
+                        }
+                        sh "mkdir -p ${distro}"
+                        sh "cp -av build/*.deb ${distro}/"
+                        archiveArtifacts artifacts: "${distro}/*.deb", onlyIfSuccessful: true
                     }
-                    sh "mkdir -p ${distro}"
-                    sh "mv *.deb ${distro}"
-                    archiveArtifacts artifacts: "${distro}/*.deb", onlyIfSuccessful: true
                 }
                 cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
             }
@@ -265,21 +329,32 @@ def packageStatic() {
     tasks << getTasks(debianJessie, debianJessieArch, { distro, arch -> 
         def myNode = {
             node ('linux-build') {
+                env.PATH = env.PATH + ":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/jenkins-build/go/bin"
                 dir ("build") {
                     checkout scm
                 }
                 def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
                 runtime.inside {
                     dir('build/') {
+                        def cmakeFlags = 'CMAKE_ARGS="-DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB"'
+                        if (arch == "i386") {
+                            cmakeFlags = 'CMAKE_ARGS="-DBUILD_32BIT=1 -DBUILD_STATIC=1 -DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB"'
+                        } else if (arch == "armel") {
+                            cmakeFlags = 'CMAKE_ARGS="-DBUILD_STATIC=1 -DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB -DBUILD_ARM_V5=1"'
+                        } else if (arch == "armhf") {
+                            cmakeFlags = 'CMAKE_ARGS="-DBUILD_STATIC=1 -DPACKAGE_STATIC=1 -DZT_PACKAGE_FORMAT=DEB -DBUILD_ARM_V6=1"'
+                        }
                         unstash "static-${arch}"
-                        sh "mv zerotier-static-${arch} zerotier && chmod +x zerotier && file ./zerotier" 
-                        sh "mv -f debian/rules.wheezy.static debian/rules"
-                        sh "mv -f debian/control.wheezy debian/control"
-                        sh "make debian"
+                        sh "mkdir -p build"
+                        sh "mv zerotier-static-${arch} build/zerotier && chmod +x build/zerotier" 
+                        sh "${cmakeFlags} make setup"
+                        dir("build") {
+                            sh 'make package -j4 VERBOSE=1'
+                        }
+                        sh "mkdir -p ${distro}"
+                        sh "cp -av build/*.deb ${distro}/"
+                        archiveArtifacts artifacts: "${distro}/*.deb", onlyIfSuccessful: true
                     }
-                    sh "mkdir -p ${distro}"
-                    sh "mv *.deb ${distro}"
-                    archiveArtifacts artifacts: "${distro}/*.deb", onlyIfSuccessful: true
                 }
                 cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
             }
@@ -292,7 +367,7 @@ def packageStatic() {
 
 def buildDebianNative() {
     def tasks = [:]
-    def buster = ["debian-buster", "debian-stretch", "debian-bullseye", "debian-sid"]
+    def buster = ["debian-buster", /*"debian-stretch",*/ "debian-bullseye", "debian-sid"]
     def busterArchs = []
     if (params.BUILD_ALL) {
         busterArchs = ["s390x", "ppc64le", "i386", "armhf", "armel", "arm64", "amd64"]
@@ -303,23 +378,31 @@ def buildDebianNative() {
     def build = { distro, arch -> 
         def myNode = {
             node ('linux-build') {
+                env.PATH = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/jenkins-build/go/bin"
                 dir ("build") {
                     checkout scm
                 }
                 def runtime = docker.image("ztbuild/${distro}-${arch}:latest")
                 runtime.inside {
-                    def cmakeFlags = ""
+                    def cmakeFlags = 'CMAKE_ARGS="-DZT_PACKAGE_FORMAT=DEB"'
                     if (arch == "i386") {
-                        cmakeFlags = 'CMAKE_ARGS="-DBUILD_32BIT=1"'
+                        cmakeFlags = 'CMAKE_ARGS="-DBUILD_32BIT=1 -DZT_PACKAGE_FORMAT=DEB"'
+                    } else if (arch == "armel") {
+                        cmakeFlags = 'CMAKE_ARGS="-DZT_PACKAGE_FORMAT=DEB -DBUILD_ARM_V5=1"'
+                    } else if (arch == "armhf") {
+                        cmakeFlags = 'CMAKE_ARGS="-DZT_PACKAGE_FORMAT=DEB -DBUILD_ARM_V6=1"'
                     }
                    
                     sh 'whoami'
                     dir("build") {
-                        sh "${cmakeFlags} make -j4"
+                        sh "${cmakeFlags} make setup"
+                        dir("build") {
+                            sh "make package -j4 VERBOSE=1"
+                        }
                     }
-                    // sh "mkdir -p ${distro}"
-                    // sh "mv *.deb ${distro}"
-                    // archiveArtifacts artifacts: "${distro}/*.deb", onlyIfSuccessful: true
+                    sh "mkdir -p ${distro}"
+                    sh "mv build/build/*.deb ${distro}"
+                    archiveArtifacts artifacts: "${distro}/*.deb", onlyIfSuccessful: true
                     cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
                 }
             }
@@ -337,21 +420,21 @@ def buildDebianNative() {
     } else {
         xenialArchs = ["i386", "amd64"]
     }
-    tasks << getTasks(xenial, xenialArchs, build)
+    //tasks << getTasks(xenial, xenialArchs, build)
     
     def ubuntu = ["ubuntu-bionic", "ubuntu-eoan"]
     def ubuntuArchs = []
     if (params.BUILD_ALL == true) {
         ubuntuArchs = ["i386", "amd64", "armhf", "arm64", "ppc64le", "s390x"]
     } else {
-        ubuntuArchs = ["i386", "amd64"]
+        ubuntuArchs = ["i386" /*, "amd64"*/]
     }
     tasks << getTasks(ubuntu, ubuntuArchs, build)
     
     def ubuntuFocal = ["ubuntu-focal"]
     def ubuntuFocalArchs = []
     if (params.BUILD_ALL == true) {
-        ubuntuFocalArchs = ["amd64", "armhf", "arm64", "ppc64le", "s390x"]
+        ubuntuFocalArchs = ["amd64", "arm64", "ppc64le", "s390x"]
     } else {
         ubuntuFocalArchs = ["amd64"]
     }
@@ -370,6 +453,7 @@ def buildCentosNative() {
     def build = { distro, arch -> 
         def myNode = {
             node ('linux-build') {
+                env.PATH = env.PATH + ":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/jenkins-build/go/bin"
                 dir ("build") {
                     checkout scm
                 }
@@ -377,15 +461,21 @@ def buildCentosNative() {
                 runtime.inside {
                     dir("build") {
                         if (distro == 'centos7' && arch == 'amd64') {
-                            sh 'source scl_source enable devtoolset-8 llvm-toolset-7 && make'
+                            sh 'source scl_source enable devtoolset-8 llvm-toolset-7 && CMAKE_ARGS="-DZT_PACKAGE_FORMAT=RPM" make setup'
                         } else {
-                            sh 'make'
+                            sh 'CMAKE_ARGS="-DZT_PACKAGE_FORMAT=RPM" make setup'
+                        }
+                        dir ("build") {
+                            if (distro == 'centos7' && arch == 'amd64') {
+                                sh 'source scl_source enable devtoolset-8 llvm-toolset-7 && make package -j4 VERBOSE=1'
+                            } else {
+                                sh 'make package -j4 VERBOSE=1'
+                            }
                         }
-                        // sh 'make redhat'
-                        // sh "mkdir -p ${distro}"
-                        // sh "cp -av `find ~/rpmbuild/ -type f -name \"*.rpm\"` ${distro}/"
-                        // archiveArtifacts artifacts: "${distro}/*.rpm", onlyIfSuccessful: true
                     }
+                    sh "mkdir -p ${distro}"
+                    sh "cp -av build/build/*.rpm ${distro}/"
+                    archiveArtifacts artifacts: "${distro}/*.rpm", onlyIfSuccessful: true
                     
                     cleanWs deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true
                 }

+ 1 - 1
Makefile

@@ -4,7 +4,7 @@ TIMESTAMP=$(shell date +"%Y%m%d%H%M")
 .PHONY: all
 
 all:	setup
-	cd ${BUILDDIR} && $(MAKE) -j$(shell getconf _NPROCESSORS_ONLN) VERBOSE=1
+	cd ${BUILDDIR} && $(MAKE) -j4 VERBOSE=1
 
 setup:
 	mkdir -p ${BUILDDIR} && cd ${BUILDDIR} && cmake .. -DCMAKE_BUILD_TYPE=Release ${CMAKE_ARGS}

+ 1 - 1
controller/CMakeLists.txt

@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 2.8)
+cmake_minimum_required(VERSION 3.0)
 project(zt_controller)
 
 

+ 1 - 1
core/CMakeLists.txt

@@ -1,4 +1,4 @@
-cmake_minimum_required (VERSION 2.8)
+cmake_minimum_required (VERSION 3.0)
 project(zt_core)
 
 configure_file(

+ 0 - 2
core/Constants.hpp

@@ -17,9 +17,7 @@
 #include "zerotier.h"
 #include "OS.hpp"
 
-#if __has_include("version.h")
 #include "version.h"
-#endif
 
 /**
  * Version bit packed into four 16-bit fields in a 64-bit unsigned integer.

+ 0 - 20
dockerbuild/Dockerfile.centos6

@@ -1,20 +0,0 @@
-FROM centos:6
-
-ARG go_pkg_url
-
-RUN yum update -y
-RUN yum install -y curl git wget openssh-server sudo make rpmdevtools && yum clean all
-
-RUN curl -s $go_pkg_url -o go.tar.gz && \
-    tar -C /usr/local -xzf go.tar.gz && \
-   rm go.tar.gz
-
-RUN groupadd -g 1000 jenkins-build && useradd -u 1000 -g 1000 jenkins-build
-
-RUN echo $'\n\
-  export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin\n'\
-  >> ~/.bash_profile
-
-RUN mkdir /rpmbuild && chmod 777 /rpmbuild
-
-CMD ["/usr/sbin/sshd", "-D"]

+ 0 - 21
dockerbuild/Dockerfile.centos6-i386

@@ -1,21 +0,0 @@
-FROM i386/centos:6
-
-ARG go_pkg_url
-
-RUN echo i386 > /etc/yum/vars/basearch && echo i686 > /etc/yum/vars/arch
-
-RUN yum install -y curl git wget openssh-server sudo make rpmdevtools && yum clean all
-
-RUN curl -s $go_pkg_url -o go.tar.gz && \
-    tar -C /usr/local -xzf go.tar.gz && \
-    rm go.tar.gz
-
-RUN groupadd -g 1000 jenkins-build && useradd -u 1000 -g 1000 jenkins-build
-
-RUN echo $'\n\
-  export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin\n'\
-  >> ~/.bash_profile
-
-RUN mkdir /rpmbuild && chmod 777 /rpmbuild
-
-CMD ["/usr/sbin/sshd", "-D"]

+ 5 - 2
dockerbuild/Dockerfile.centos7-i386

@@ -2,8 +2,11 @@ FROM centos:7
 
 ARG go_pkg_url
 
-RUN yum install -y curl git wget openssh-server sudo make development-tools rpmdevtools clang gcc-c++ ruby ruby-devel && yum clean all
-
+RUN yum install -y curl git wget openssh-server sudo make development-tools rpmdevtools clang gcc-c++ ruby ruby-devel openssl openssl-devel && yum clean all
+RUN curl -s -k -L https://github.com/Kitware/CMake/releases/download/v3.17.3/cmake-3.17.3.tar.gz -o cmake-3.17.3.tar.gz && tar -xzf cmake-3.17.3.tar.gz
+WORKDIR /cmake-3.17.3
+RUN ./bootstrap && make -j8 && make install
+WORKDIR /
 RUN curl -s $go_pkg_url -o go.tar.gz && \
     tar -C /usr/local -xzf go.tar.gz && \
     rm go.tar.gz

+ 1 - 3
dockerbuild/Dockerfile.centos8

@@ -3,14 +3,12 @@ FROM centos:8
 ARG go_pkg_url
 
 RUN yum install -y epel-release
-RUN yum install -y curl git wget openssh-server sudo make rpmdevtools clang gcc-c++ ruby ruby-devel && yum clean all
+RUN yum install -y curl git wget openssh-server sudo make cmake rpmdevtools clang gcc-c++ ruby ruby-devel && yum clean all
 
 RUN curl -s $go_pkg_url -o go.tar.gz && \
     tar -C /usr/local -xzf go.tar.gz && \
     rm go.tar.gz
 
-RUN wget -qO- "https://cmake.org/files/v3.15/cmake-3.15.1-Linux-x86_64.tar.gz" | tar --strip-components=1 -xz -C /usr/local
-
 RUN /usr/bin/ssh-keygen -A
 RUN useradd jenkins-build
 

+ 5 - 1
dockerbuild/Dockerfile.debian-bullseye

@@ -2,7 +2,11 @@ FROM debian:bullseye-20191224
 
 ARG go_pkg_url
 
-RUN apt-get update && apt-get upgrade -y && apt-get -y install build-essential curl cmake ca-certificates devscripts dh-systemd
+RUN apt-get update && apt-get upgrade -y && apt-get -y install build-essential curl ca-certificates devscripts dh-systemd libssl-dev
+RUN curl -s -k -L https://github.com/Kitware/CMake/releases/download/v3.17.3/cmake-3.17.3.tar.gz -o cmake-3.17.3.tar.gz && tar -xzf cmake-3.17.3.tar.gz
+WORKDIR /cmake-3.17.3
+RUN ./bootstrap --parallel=8 && make -j8 && make install
+WORKDIR /
 
 RUN curl -s -k $go_pkg_url -o go.tar.gz && \
     tar -C /usr/local -xzf go.tar.gz && \

+ 5 - 1
dockerbuild/Dockerfile.debian-jessie

@@ -2,7 +2,11 @@ FROM debian:jessie-20191224
 
 ARG go_pkg_url
 
-RUN apt-get update && apt-get -y install build-essential curl cmake ca-certificates devscripts dh-systemd
+RUN apt-get update && apt-get -y install build-essential curl ca-certificates devscripts dh-systemd libssl-dev
+RUN curl -s -k -L https://github.com/Kitware/CMake/releases/download/v3.17.3/cmake-3.17.3.tar.gz -o cmake-3.17.3.tar.gz && tar -xzf cmake-3.17.3.tar.gz
+WORKDIR /cmake-3.17.3
+RUN ./bootstrap && make -j8 && make install
+WORKDIR /
 
 RUN curl -s -k $go_pkg_url -o go.tar.gz && \
     tar -C /usr/local -xzf go.tar.gz && \

+ 5 - 1
dockerbuild/Dockerfile.debian-sid

@@ -2,7 +2,11 @@ FROM debian:sid-20191224
 
 ARG go_pkg_url
 
-RUN apt-get update && apt-get upgrade -y && apt-get -y install build-essential curl cmake ca-certificates devscripts dh-systemd
+RUN apt-get update && apt-get upgrade -y && apt-get -y install build-essential curl ca-certificates devscripts dh-systemd
+RUN curl -s -k -L https://github.com/Kitware/CMake/releases/download/v3.17.3/cmake-3.17.3.tar.gz -o cmake-3.17.3.tar.gz && tar -xzf cmake-3.17.3.tar.gz
+WORKDIR /cmake-3.17.3
+RUN ./bootstrap && make -j8 && make install
+WORKDIR /
 
 RUN curl -s -k $go_pkg_url -o go.tar.gz && \
     tar -C /usr/local -xzf go.tar.gz && \

+ 5 - 1
dockerbuild/Dockerfile.ubuntu-trusty

@@ -2,7 +2,11 @@ FROM ubuntu:trusty-20191217
 
 ARG go_pkg_url
 
-RUN apt-get update && apt-get upgrade -y && apt-get -y install build-essential curl cmake ca-certificates devscripts dh-systemd
+RUN apt-get update && apt-get upgrade -y && apt-get -y install build-essential curl cmake ca-certificates devscripts dh-systemd libssl-dev
+RUN curl -s -k -L https://github.com/Kitware/CMake/releases/download/v3.17.3/cmake-3.17.3.tar.gz -o cmake-3.17.3.tar.gz && tar -xzf cmake-3.17.3.tar.gz
+WORKDIR /cmake-3.17.3
+RUN ./bootstrap && make -j8 && make install
+WORKDIR /
 
 RUN curl -s -k $go_pkg_url -o go.tar.gz && \
     tar -C /usr/local -xzf go.tar.gz && \

+ 0 - 2
dockerbuild/Makefile

@@ -16,8 +16,6 @@ alpine:
 centos:
 	@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz" --platform linux/amd64 -f Dockerfile.centos7 . -t ztbuild/centos7-amd64 --load
 	@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go${GO_VERSION}.linux-386.tar.gz" --platform linux/386 -f Dockerfile.centos7-i386 . -t ztbuild/centos7-i386 --load
-	@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz" --platform linux/amd64 -f Dockerfile.centos6 . -t ztbuild/centos6-amd64 --load
-	@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go${GO_VERSION}.linux-386.tar.gz" --platform linux/386 -f Dockerfile.centos6-i386 . -t ztbuild/centos6-i386 --load
 	@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz" --platform linux/amd64 -f Dockerfile.centos8 . -t ztbuild/centos8-amd64 --load
 	@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go${GO_VERSION}.linux-arm64.tar.gz" --platform linux/arm64 -f Dockerfile.centos8 . -t ztbuild/centos8-arm64 --load
 	@docker buildx build --build-arg go_pkg_url="https://dl.google.com/go/go${GO_VERSION}.linux-ppc64le.tar.gz" --platform linux/ppc64le -f Dockerfile.centos8 . -t ztbuild/centos8-ppc64le --load

+ 1 - 1
osdep/CMakeLists.txt

@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 2.8)
+cmake_minimum_required(VERSION 3.0)
 project(zt_osdep)
 
 set(src

+ 28 - 0
packaging/debian.cmake

@@ -0,0 +1,28 @@
+set(CPACK_PACKAGE_VENDOR "ZeroTier, Inc.")
+set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "ZeroTier network virtualization service ZeroTier One lets you join ZeroTier virtual networks and have them appear as tun/tap ports on your system. See https://www.zerotier.com/ for instructions and documentation.")
+set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
+set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
+set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
+set(CPACK_PACKAGE_VERSION_RELEASE ${PROJECT_VERSION_RELEASE})
+set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt")
+set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
+set(CPACK_GENERATOR "DEB")
+set(CPACK_DEBIAN_PACKAGE_MAINTAINER "ZeroTier, Inc. <[email protected]>")
+set(CPACK_DEBIAN_PACKAGE_SECTION "net")
+set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
+set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://www.zerotier.com")
+set(CPACK_DEBIAN_PACKAGE_DEPENDS "iproute2, adduser")
+set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
+set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS ON)
+set(CPACK_DEBIAN_PACKAGE_REPLACES "zerotier-one")
+set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/packaging/debian/postinst")
+
+set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT")
+
+if(BUILD_ARM_V5)
+    set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "armel")
+elseif(BUILD_ARM_V6)
+    set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "armhf")
+endif()
+
+include(CPack)

+ 11 - 0
packaging/debian/postinst

@@ -0,0 +1,11 @@
+#!/bin/sh -e
+
+case "$1" in
+  configure)
+      if ! id zerotier >>/dev/null 2>&1; then
+        useradd --system --user-group --home-dir /var/lib/zerotier --no-create-home zerotier
+      fi
+      ;;
+esac
+
+#DEBHELPER#

+ 49 - 0
packaging/debian/zerotier.init

@@ -0,0 +1,49 @@
+#!/bin/sh
+
+### BEGIN INIT INFO
+# Provides:          zerotier
+# Required-Start:    $remote_fs $syslog
+# Required-Stop:     $remote_fs $syslog
+# Default-Start:     2 3 4 5
+# Default-Stop:
+# Short-Description: ZeroTier One network virtualization service
+### END INIT INFO
+
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+DESC="zerotier daemon"
+NAME=zerotier
+DAEMON=/usr/sbin/zerotier
+PIDFILE=/var/lib/zerotier/zerotier.pid
+SCRIPTNAME=/etc/init.d/"$NAME"
+EXTRA_OPTS=service -d
+
+test -f $DAEMON || exit 0
+
+. /lib/lsb/init-functions
+
+case "$1" in
+start)	log_daemon_msg "Starting ZeroTier One" "zerotier-one"
+        start_daemon -p $PIDFILE $DAEMON $EXTRA_OPTS
+        log_end_msg $?
+	;;
+stop)	log_daemon_msg "Stopping ZeroTier One" "zerotier-one"
+        killproc -p $PIDFILE $DAEMON
+        RETVAL=$?
+        [ $RETVAL -eq 0 ] && [ -e "$PIDFILE" ] && rm -f $PIDFILE
+        log_end_msg $RETVAL
+        ;;
+restart) log_daemon_msg "Restarting ZeroTier One" "zerotier-one" 
+        $0 stop
+        $0 start
+        ;;
+reload|force-reload) log_daemon_msg "Reloading ZeroTier One" "zerotier-one"
+        log_end_msg 0
+        ;;
+status)
+        status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
+        ;;
+*)	log_action_msg "Usage: /etc/init.d/cron {start|stop|status|restart|reload|force-reload}"
+        exit 2
+        ;;
+esac
+exit 0

+ 12 - 0
packaging/debian/zerotier.service

@@ -0,0 +1,12 @@
+[Unit]
+Description=ZeroTier One
+After=network-online.target
+Wants=network-online.target
+
+[Service]
+ExecStart=/usr/sbin/zerotier service
+Restart=always
+KillMode=process
+
+[Install]
+WantedBy=multi-user.target

+ 33 - 0
packaging/rpm.cmake

@@ -0,0 +1,33 @@
+set(CPACK_PACKAGE_VENDOR "ZeroTier, Inc.")
+set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "zerotier")
+set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
+set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
+set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
+set(CPACK_PACKAGE_VERSION_RELEASE ${PROJECT_VERSION_RELEASE})
+set(CPACK_RPM_PACKAGE_DESCRIPTION "ZeroTier network virtualization service ZeroTier One lets you join ZeroTier virtual networks and have them appear as tun/tap ports on your system. See https://www.zerotier.com/ for instructions and documentation.")
+set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt")
+set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
+set(CPACK_GENERATOR "RPM")
+set(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
+set(CPACK_RPM_PACKAGE_RELEASE_DIST "%{dist}")
+set(CPACK_RPM_PACKAGE_VENDOR "ZeroTier, Inc.")
+set(CPACK_RPM_PACKAGE_AUTOREQ 1)
+set(CPACK_RPM_PACKAGE_REQUIRES "systemd, iproute, libstdc++")
+set(CPACK_RPM_PACKAGE_REQUIRES_PRE "/usr/sbin/useradd, /usr/bin/getent")
+set(CPACK_RPM_PACKAGE_OBSOLETES "zerotier-one")
+set(CPACK_PACKAGE_RELOCATABLE FALSE)
+if(BUILD_32BIT)
+    set(CPACK_RPM_PACKAGE_ARCHITECTURE "i386")
+elseif(BUILD_ARM_V5)
+    set(CPACK_RPM_PACKAGE_ARCHITECTURE "armel")
+elseif(BUILD_ARM_V6)
+    set(CPACK_RPM_PACKAGE_ARCHITECTURE "armhf")
+endif()
+
+set(CPACK_RPM_PRE_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/packaging/rpm/rpm.pre")
+set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/packaging/rpm/rpm.post")
+set(CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/packaging/rpm/rpm.postun")
+set(CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/packaging/rpm/rpm.preun")
+set(CPACK_RPM_CHANGELOG_FILE" ${CMAKE_CURRENT_SOURCE_DIR}/packaging/rpm/rpm.changelog")
+
+include(CPack)

+ 2 - 0
packaging/rpm/rpm.changelog

@@ -0,0 +1,2 @@
+* Mon Jun 22, 2020 ZeroTier, Inc. <[email protected]> - 1.9.0-0
+- see https://github.com/zerotier/ZeroTierOne for release notes

+ 17 - 0
packaging/rpm/rpm.post

@@ -0,0 +1,17 @@
+%if 0%{?rhel} >= 7
+%systemd_post zerotier-one.service
+%endif
+%if 0%{?fedora} >= 21
+%systemd_post zerotier-one.service
+%endif
+%if 0%{?rhel} <= 6
+case "$1" in
+  1)
+    chkconfig --add zerotier-one
+  ;;
+  2)
+    chkconfig --del zerotier-one
+    chkconfig --add zerotier-one
+  ;;
+esac
+%endif

+ 6 - 0
packaging/rpm/rpm.postun

@@ -0,0 +1,6 @@
+%if 0%{?rhel} >= 7
+%systemd_postun_with_restart zerotier-one.service
+%endif
+%if 0%{?fedora} >= 21
+%systemd_postun_with_restart zerotier-one.service
+%endif

+ 6 - 0
packaging/rpm/rpm.pre

@@ -0,0 +1,6 @@
+%if 0%{?rhel} >= 7
+/usr/bin/getent passwd zerotier-one || /usr/sbin/useradd -r -d /var/lib/zerotier-one -s /sbin/nologin zerotier-one
+%endif
+%if 0%{?fedora} >= 21
+/usr/bin/getent passwd zerotier-one || /usr/sbin/useradd -r -d /var/lib/zerotier-one -s /sbin/nologin zerotier-one
+%endif

+ 18 - 0
packaging/rpm/rpm.preun

@@ -0,0 +1,18 @@
+%if 0%{?rhel} >= 7
+%systemd_preun zerotier-one.service
+%endif
+%if 0%{?fedora} >= 21
+%systemd_preun zerotier-one.service
+%endif
+%if 0%{?rhel} <= 6
+case "$1" in
+  0)
+    service zerotier-one stop
+    chkconfig --del zerotier-one
+  ;;
+  1)
+    # This is an upgrade.
+    :
+  ;;
+esac
+%endif

+ 1 - 1
serviceiocore/CMakeLists.txt

@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 2.8)
+cmake_minimum_required(VERSION 3.0)
 project(zt_service_io_core)
 
 set(src