diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 4a33e4b61..412bca6ba 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -23,6 +23,7 @@ #include "../version.h" #include +#include using json = nlohmann::json; namespace { @@ -200,6 +201,10 @@ void PostgreSQL::initializeNetworks(PGconn *conn) json empty; json config; + const char *nwidparam[1] = { + PQgetvalue(res, i, 0) + }; + config["id"] = PQgetvalue(res, i, 0); config["nwid"] = PQgetvalue(res, i, 0); config["creationTime"] = std::stoull(PQgetvalue(res, i, 1)); @@ -225,7 +230,7 @@ void PostgreSQL::initializeNetworks(PGconn *conn) "SELECT host(ip_range_start), host(ip_range_end) FROM ztc_network_assignment_pool WHERE network_id = $1", 1, NULL, - params, + nwidparam, NULL, NULL, 0); @@ -252,7 +257,7 @@ void PostgreSQL::initializeNetworks(PGconn *conn) "SELECT host(address), bits, host(via) FROM ztc_network_route WHERE network_id = $1", 1, NULL, - params, + nwidparam, NULL, NULL, 0); @@ -284,6 +289,8 @@ void PostgreSQL::initializeNetworks(PGconn *conn) PQclear(r2); _networkChanged(empty, config, false); + + fprintf(stderr, "%s", OSUtils::jsonDump(config, 2).c_str()); } PQclear(res); @@ -1234,4 +1241,4 @@ void PostgreSQL::onlineNotificationThread() } PQfinish(conn); } -#endif //ZT_CONTROLLER_USE_LIBPQ \ No newline at end of file +#endif //ZT_CONTROLLER_USE_LIBPQ diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 000000000..3b01b2ad5 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,15 @@ +# Dockerfile for ZeroTier Central Controllers +FROM centos:7 +MAINTAINER Adam Ierymekno , Grant Limberg + +RUN yum update -y +RUN yum install -y https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm +RUN yum install -y postgresql10 + +ADD zerotier-one /usr/local/bin/zerotier-one +RUN chmod a+x /usr/local/bin/zerotier-one + +ADD docker/main.sh / +RUN chmod a+x /main.sh + +ENTRYPOINT /main.sh diff --git a/docker/main.sh b/docker/main.sh new file mode 100644 index 000000000..f0054a94f --- /dev/null +++ b/docker/main.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +if [ -z "$ZT_IDENTITY_PATH" ]; then + echo '*** FAILED: ZT_IDENTITY_PATH environment variable is not defined' + exit 1 +fi +if [ -z "$ZT_DB_HOST" ]; then + echo '*** FAILED: ZT_DB_HOST environment variable not defined' + exit 1 +fi +if [ -z "$ZT_DB_PORT" ]; then + echo '*** FAILED: ZT_DB_PORT environment variable not defined' + exit 1 +fi +if [ -z "$ZT_DB_USER" ]; then + echo '*** FAILED: ZT_DB_USER environment variable not defined' + exit 1 +fi +if [ -z "$ZT_DB_PASSWORD" ]; then + echo '*** FAILED: ZT_DB_PASSWORD environment variable not defined' + exit 1 +fi + +mkdir -p /var/lib/zerotier-one + +pushd /var/lib/zerotier-one +ln -s $ZT_IDENTITY_PATH/identity.public identity.public +ln -s $ZT_IDENTITY_PATH/identity.secret identity.secret +popd + +echo "{ + \"settings\": { + \"portMappingEnabled\": true, + \"softwareUpdate\": \"disable\", + \"interfadePrefixBlacklist\": [ + \"inot\", + \"nat64\" + ], + \"controllerDbPath\": \"postgres:host=${ZT_DB_HOST} port=${ZT_DB_PORT} dbname=ztc user=${ZT_DB_USER} password=${ZT_DB_PASSWORD}\" + } +} +" > /var/lib/zerotier-one/local.conf + +exec /usr/local/bin/zerotier-one /var/lib/zerotier-one diff --git a/make-linux.mk b/make-linux.mk index 9b128f1de..78ea98dea 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -22,6 +22,9 @@ ONE_OBJS+=osdep/LinuxNetLink.o NLTEST_OBJS+=osdep/LinuxNetLink.o node/InetAddress.o node/Utils.o node/Salsa20.o NLTEST_OBJS+=nltest.o +# for central controller builds +TIMESTAMP=$(shell date +"%Y%m%d%H%M") + # Auto-detect miniupnpc and nat-pmp as well and use system libs if present, # otherwise build into binary as done on Mac and Windows. ONE_OBJS+=osdep/PortMapper.o @@ -318,6 +321,9 @@ official: FORCE central-controller: FORCE make -j4 LDLIBS="-L/usr/pgsql-10/lib/ -lpq" CXXFLAGS="-I/usr/pgsql-10/include -fPIC" DEFS="-DZT_CONTROLLER_USE_LIBPQ" ZT_OFFICIAL=1 ZT_USE_X64_ASM_ED25519=1 one +central-controller-docker: central-controller + docker build -t gcr.io/zerotier-central/ztcentral-controller:${TIMESTAMP} -f docker/Dockerfile . + debug: FORCE make ZT_DEBUG=1 one make ZT_DEBUG=1 selftest