diff --git a/Jenkinsfile b/Jenkinsfile index 4f1d4b39a..21e4523d5 100644 --- a/Jenkinsfile +++ b/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 } diff --git a/Makefile b/Makefile index 7a8e4f40a..f072b80f8 100644 --- a/Makefile +++ b/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} diff --git a/controller/CMakeLists.txt b/controller/CMakeLists.txt index dc1cd0671..7f0d533fe 100644 --- a/controller/CMakeLists.txt +++ b/controller/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.0) project(zt_controller) diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index fb04daab2..4a58379db 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required (VERSION 2.8) +cmake_minimum_required (VERSION 3.0) project(zt_core) configure_file( diff --git a/core/Constants.hpp b/core/Constants.hpp index f8e1a562d..693ba02d8 100644 --- a/core/Constants.hpp +++ b/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. diff --git a/dockerbuild/Dockerfile.centos6 b/dockerbuild/Dockerfile.centos6 deleted file mode 100644 index 6b8f023ed..000000000 --- a/dockerbuild/Dockerfile.centos6 +++ /dev/null @@ -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"] diff --git a/dockerbuild/Dockerfile.centos6-i386 b/dockerbuild/Dockerfile.centos6-i386 deleted file mode 100644 index c6a47072b..000000000 --- a/dockerbuild/Dockerfile.centos6-i386 +++ /dev/null @@ -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"] diff --git a/dockerbuild/Dockerfile.centos7-i386 b/dockerbuild/Dockerfile.centos7-i386 index f7ee9a0c4..182aa7699 100644 --- a/dockerbuild/Dockerfile.centos7-i386 +++ b/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 diff --git a/dockerbuild/Dockerfile.centos8 b/dockerbuild/Dockerfile.centos8 index 0f612347f..6387e2fb6 100644 --- a/dockerbuild/Dockerfile.centos8 +++ b/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 diff --git a/dockerbuild/Dockerfile.debian-bullseye b/dockerbuild/Dockerfile.debian-bullseye index 04a1530ee..0592cc42f 100644 --- a/dockerbuild/Dockerfile.debian-bullseye +++ b/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 && \ diff --git a/dockerbuild/Dockerfile.debian-jessie b/dockerbuild/Dockerfile.debian-jessie index 66ddf6f1c..7dbbfc52f 100644 --- a/dockerbuild/Dockerfile.debian-jessie +++ b/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 && \ diff --git a/dockerbuild/Dockerfile.debian-sid b/dockerbuild/Dockerfile.debian-sid index 03102418f..90e96ec54 100644 --- a/dockerbuild/Dockerfile.debian-sid +++ b/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 && \ diff --git a/dockerbuild/Dockerfile.ubuntu-trusty b/dockerbuild/Dockerfile.ubuntu-trusty index a434d6892..778eb02a3 100644 --- a/dockerbuild/Dockerfile.ubuntu-trusty +++ b/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 && \ diff --git a/dockerbuild/Makefile b/dockerbuild/Makefile index cb54f9bc6..596f271c5 100644 --- a/dockerbuild/Makefile +++ b/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 diff --git a/osdep/CMakeLists.txt b/osdep/CMakeLists.txt index 8411a2df9..5921cf65b 100644 --- a/osdep/CMakeLists.txt +++ b/osdep/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.0) project(zt_osdep) set(src diff --git a/packaging/debian.cmake b/packaging/debian.cmake new file mode 100644 index 000000000..e03845101 --- /dev/null +++ b/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. ") +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) diff --git a/packaging/debian/postinst b/packaging/debian/postinst new file mode 100644 index 000000000..a409d66fb --- /dev/null +++ b/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# diff --git a/packaging/debian/zerotier.init b/packaging/debian/zerotier.init new file mode 100644 index 000000000..dd7ed7b45 --- /dev/null +++ b/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 diff --git a/packaging/debian/zerotier.service b/packaging/debian/zerotier.service new file mode 100644 index 000000000..85c15b4a2 --- /dev/null +++ b/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 diff --git a/packaging/rpm.cmake b/packaging/rpm.cmake new file mode 100644 index 000000000..ff7f25613 --- /dev/null +++ b/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) diff --git a/packaging/rpm/rpm.changelog b/packaging/rpm/rpm.changelog new file mode 100644 index 000000000..9d1429ca0 --- /dev/null +++ b/packaging/rpm/rpm.changelog @@ -0,0 +1,2 @@ +* Mon Jun 22, 2020 ZeroTier, Inc. - 1.9.0-0 +- see https://github.com/zerotier/ZeroTierOne for release notes diff --git a/packaging/rpm/rpm.post b/packaging/rpm/rpm.post new file mode 100644 index 000000000..6b54239e0 --- /dev/null +++ b/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 diff --git a/packaging/rpm/rpm.postun b/packaging/rpm/rpm.postun new file mode 100644 index 000000000..714bad0a6 --- /dev/null +++ b/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 diff --git a/packaging/rpm/rpm.pre b/packaging/rpm/rpm.pre new file mode 100644 index 000000000..f1c474d7d --- /dev/null +++ b/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 diff --git a/packaging/rpm/rpm.preun b/packaging/rpm/rpm.preun new file mode 100644 index 000000000..ee4a5cda1 --- /dev/null +++ b/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 diff --git a/serviceiocore/CMakeLists.txt b/serviceiocore/CMakeLists.txt index 8e30b57f6..c7db87c9e 100644 --- a/serviceiocore/CMakeLists.txt +++ b/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