Fix Static Netdata to correctly build with Netdata Cloud support. (#9381)
* Revert "Revert "Override linker and include paths for static builds. (#9311)" (#9343)" This reverts commit 36d5e40dca91a93963e4d96f07af3e38803615d0. * Run git clean before building anything * Fix checking out openssl and skip if bind-mounted sources already exist at the given path * Add --require-cloud flag to the static build scripts * Add CMAKEFLAGS support to the installer to customize how to build libwebsockets for static builds * Update packaging/makeself/jobs/50-bash-4.4.18.install.sh Co-authored-by: Andrew Moss <1043609+amoss@users.noreply.github.com> * Fix remaining other two tyos Co-authored-by: Andrew Moss <1043609+amoss@users.noreply.github.com>
James Mills committed
Aug 6, 2020 at 13:09 UTC
79c56b71c4567ce947e755b5fbe6d0b4eeffd046
9 files changed
+62
-28
.github/scripts/build-artifacts.sh
+2
@@ -23,6 +23,7 @@ prepare_build() {
23
build_dist() {
24
progress "Building dist"
25
(
26
+ command -v git > /dev/null && [ -d .git ] && git clean -d -f
27
autoreconf -ivf
28
./configure \
29
--prefix=/usr \
@@ -41,6 +42,7 @@ build_dist() {
42
build_static_x86_64() {
43
progress "Building static x86_64"
44
(
45
+ command -v git > /dev/null && [ -d .git ] && git clean -d -f
46
USER="" ./packaging/makeself/build-x86_64-static.sh
47
) >&2
48
}
.travis/create_artifacts.sh
+8
-7
@@ -17,15 +17,14 @@ set -e
17
TOP_LEVEL=$(basename "$(git rev-parse --show-toplevel)")
18
CWD=$(git rev-parse --show-cdup || echo "")
19
if [ -n "${CWD}" ] || [ ! "${TOP_LEVEL}" == "netdata" ]; then
20
- echo "Run as .travis/$(basename "$0") from top level directory of netdata git repository"
21
- exit 1
20
+ echo "Run as .travis/$(basename "$0") from top level directory of netdata git repository"
21
+ exit 1
22
fi
23
24
if [ ! "${TRAVIS_REPO_SLUG}" == "netdata/netdata" ]; then
25
- echo "Beta mode on ${TRAVIS_REPO_SLUG}, not running anything here"
26
- exit 0
27
-fi;
28
-
25
+ echo "Beta mode on ${TRAVIS_REPO_SLUG}, not running anything here"
26
+ exit 0
27
+fi
28
29
echo "--- Initialize git configuration ---"
30
git checkout "${1-master}"
@@ -46,12 +45,14 @@ BASENAME="netdata-$(git describe)"
45
# See https://github.com/travis-ci/travis-ci/issues/4704#issuecomment-348435959 for details.
46
python -c 'import os,sys,fcntl; flags = fcntl.fcntl(sys.stdout, fcntl.F_GETFL); fcntl.fcntl(sys.stdout, fcntl.F_SETFL, flags&~os.O_NONBLOCK);'
47
echo "--- Create tarball ---"
48
+command -v git > /dev/null && [ -d .git ] && git clean -d -f
49
autoreconf -ivf
50
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --libexecdir=/usr/libexec --with-zlib --with-math --with-user=netdata CFLAGS=-O2
51
make dist
52
mv "${BASENAME}.tar.gz" artifacts/
53
54
echo "--- Create self-extractor ---"
55
+command -v git > /dev/null && [ -d .git ] && git clean -d -f
56
./packaging/makeself/build-x86_64-static.sh
57
58
# Needed for GCS
@@ -61,6 +62,6 @@ cp packaging/version artifacts/latest-version.txt
62
cd artifacts
63
ln -s "${BASENAME}.tar.gz" netdata-latest.tar.gz
64
ln -s "${BASENAME}.gz.run" netdata-latest.gz.run
64
-sha256sum -b ./* >"sha256sums.txt"
65
+sha256sum -b ./* > "sha256sums.txt"
66
echo "checksums:"
67
cat sha256sums.txt
netdata-installer.sh
+29
-9
@@ -235,6 +235,7 @@ while [ -n "${1}" ]; do
235
case "${1}" in
236
"--zlib-is-really-here") LIBS_ARE_HERE=1 ;;
237
"--libs-are-really-here") LIBS_ARE_HERE=1 ;;
238
+ "--dont-scrub-cflags-even-though-it-may-break-things") DONT_SCRUB_CFLAGS_EVEN_THOUGH_IT_MAY_BREAK_THINGS=1 ;;
239
"--dont-start-it") DONOTSTART=1 ;;
240
"--dont-wait") DONOTWAIT=1 ;;
241
"--auto-update" | "-u") AUTOUPDATE=1 ;;
@@ -467,20 +468,26 @@ trap build_error EXIT
468
# -----------------------------------------------------------------------------
469
470
build_libmosquitto() {
471
+ local env_cmd=''
472
+
473
+ if [ -z "${DONT_SCRUB_CFLAGS_EVEN_THOUGH_IT_MAY_BREAK_THINGS}" ]; then
474
+ env_cmd="env CFLAGS= CXXFLAGS= LDFLAGS="
475
+ fi
476
+
477
if [ "$(uname -s)" = Linux ]; then
471
- run env CFLAGS= CXXFLAGS= LDFLAGS= make -C "${1}/lib"
478
+ run ${env_cmd} make -C "${1}/lib"
479
else
480
pushd ${1} > /dev/null || return 1
481
if [ "$(uname)" = "Darwin" ] && [ -d /usr/local/opt/openssl ]; then
475
- run env CFLAGS= CXXFLAGS= LDFLAGS= cmake \
482
+ run ${env_cmd} cmake \
483
-D OPENSSL_ROOT_DIR=/usr/local/opt/openssl \
484
-D OPENSSL_LIBRARIES=/usr/local/opt/openssl/lib \
485
-D WITH_STATIC_LIBRARIES:boolean=YES \
486
.
487
else
481
- run env CFLAGS= CXXFLAGS= LDFLAGS= cmake -D WITH_STATIC_LIBRARIES:boolean=YES .
488
+ run ${env_cmd} cmake -D WITH_STATIC_LIBRARIES:boolean=YES .
489
fi
483
- run env CFLAGS= CXXFLAGS= LDFLAGS= make -C lib
490
+ run ${env_cmd} make -C lib
491
run mv lib/libmosquitto_static.a lib/libmosquitto.a
492
popd || return 1
493
fi
@@ -541,17 +548,24 @@ bundle_libmosquitto
548
# -----------------------------------------------------------------------------
549
550
build_libwebsockets() {
551
+ local env_cmd=''
552
+
553
+ if [ -z "${DONT_SCRUB_CFLAGS_EVEN_THOUGH_IT_MAY_BREAK_THINGS}" ]; then
554
+ env_cmd="env CFLAGS= CXXFLAGS= LDFLAGS="
555
+ fi
556
+
557
pushd "${1}" > /dev/null || exit 1
558
if [ "$(uname)" = "Darwin" ] && [ -d /usr/local/opt/openssl ]; then
546
- run env CFLAGS= CXXFLAGS= LDFLAGS= cmake \
559
+ run ${env_cmd} cmake \
560
-D OPENSSL_ROOT_DIR=/usr/local/opt/openssl \
561
-D OPENSSL_LIBRARIES=/usr/local/opt/openssl/lib \
562
-D LWS_WITH_SOCKS5:bool=ON \
563
+ $CMAKE_FLAGS \
564
.
565
else
552
- run env CFLAGS= CXXFLAGS= LDFLAGS= cmake -D LWS_WITH_SOCKS5:bool=ON .
566
+ run ${env_cmd} cmake -D LWS_WITH_SOCKS5:bool=ON $CMAKE_FLAGS .
567
fi
554
- run env CFLAGS= CXXFLAGS= LDFLAGS= make
568
+ run ${env_cmd} make
569
popd > /dev/null || exit 1
570
}
571
@@ -615,9 +629,15 @@ bundle_libwebsockets
629
# -----------------------------------------------------------------------------
630
631
build_jsonc() {
632
+ local env_cmd=''
633
+
634
+ if [ -z "${DONT_SCRUB_CFLAGS_EVEN_THOUGH_IT_MAY_BREAK_THINGS}" ]; then
635
+ env_cmd="env CFLAGS= CXXFLAGS= LDFLAGS="
636
+ fi
637
+
638
pushd "${1}" > /dev/null || exit 1
619
- run env CFLAGS= CXXFLAGS= LDFLAGS= cmake -DBUILD_SHARED_LIBS=OFF .
620
- run env CFLAGS= CXXFLAGS= LDFLAGS= make
639
+ run ${env_cmd} cmake -DBUILD_SHARED_LIBS=OFF .
640
+ run ${env_cmd} make
641
popd > /dev/null || exit 1
642
}
643
packaging/makeself/install-alpine-packages.sh
-2
@@ -24,14 +24,12 @@ apk add --no-cache -U \
24
libtool \
25
pkgconfig \
26
util-linux-dev \
27
- openssl-dev \
27
gnutls-dev \
28
zlib-dev \
29
libmnl-dev \
30
libnetfilter_acct-dev \
31
libuv-dev \
32
lz4-dev \
34
- openssl-dev \
33
snappy-dev \
34
protobuf-dev \
35
binutils \
packaging/makeself/jobs/20-openssl.install.sh
+4
-1
@@ -9,7 +9,10 @@ version="$(cat "$(dirname "${0}")/../openssl.version")"
9
export LDFLAGS='-static'
10
export PKG_CONFIG="pkg-config --static"
11
12
-run git clone --branch "${version}" --single-branch git://git.openssl.org/openssl.git "${NETDATA_MAKESELF_PATH}/tmp/openssl"
12
+# Might be bind-mounted
13
+if [ ! -d "${NETDATA_MAKESELF_PATH}/tmp/openssl" ]; then
14
+ run git clone --branch "${version}" --single-branch git://git.openssl.org/openssl.git "${NETDATA_MAKESELF_PATH}/tmp/openssl"
15
+fi
16
cd "${NETDATA_MAKESELF_PATH}/tmp/openssl" || exit 1
17
18
run ./config no-shared no-tests --prefix=/openssl-static --openssldir=/opt/netdata/etc/ssl
packaging/makeself/jobs/50-bash-4.4.18.install.sh
+1
-1
@@ -6,7 +6,7 @@
6
7
fetch "bash-4.4.18" "http://ftp.gnu.org/gnu/bash/bash-4.4.18.tar.gz"
8
9
-export PKG_CONFIG_PATH="/opnessl/lib/pkgconfig"
9
+export PKG_CONFIG_PATH="/openssl-static/lib/pkgconfig"
10
11
run ./configure \
12
--prefix="${NETDATA_INSTALL_PATH}" \
packaging/makeself/jobs/50-curl-7.60.0.install.sh
+3
-2
@@ -6,9 +6,10 @@
6
7
fetch "curl-curl-7_60_0" "https://github.com/curl/curl/archive/curl-7_60_0.tar.gz"
8
9
-export LDFLAGS="-static"
9
+export CFLAGS="-I/openssl-static/include"
10
+export LDFLAGS="-static -L/openssl-static/lib"
11
export PKG_CONFIG="pkg-config --static"
11
-export PKG_CONFIG_PATH="/opnessl/lib/pkgconfig"
12
+export PKG_CONFIG_PATH="/openssl-static/lib/pkgconfig"
13
14
run ./buildconf
15
packaging/makeself/jobs/50-fping-4.2.install.sh
+3
-2
@@ -6,8 +6,9 @@
6
7
fetch "fping-4.2" "https://github.com/schweikert/fping/releases/download/v4.2/fping-4.2.tar.gz"
8
9
-export CFLAGS="-static"
10
-export PKG_CONFIG_PATH="/opnessl/lib/pkgconfig"
9
+export CFLAGS="-static -I/openssl-static/include"
10
+export LDFLAGS="-static -L/openssl-static/lib"
11
+export PKG_CONFIG_PATH="/openssl-static/lib/pkgconfig"
12
13
run ./configure \
14
--prefix="${NETDATA_INSTALL_PATH}" \
packaging/makeself/jobs/70-netdata-git.install.sh
+12
-4
@@ -7,23 +7,31 @@
7
cd "${NETDATA_SOURCE_PATH}" || exit 1
8
9
if [ ${NETDATA_BUILD_WITH_DEBUG} -eq 0 ]; then
10
- export CFLAGS="-static -O3"
10
+ export CFLAGS="-static -O3 -I/openssl-static/include"
11
else
12
- export CFLAGS="-static -O1 -ggdb -Wall -Wextra -Wformat-signedness -fstack-protector-all -D_FORTIFY_SOURCE=2 -DNETDATA_INTERNAL_CHECKS=1"
12
+ export CFLAGS="-static -O1 -ggdb -Wall -Wextra -Wformat-signedness -fstack-protector-all -D_FORTIFY_SOURCE=2 -DNETDATA_INTERNAL_CHECKS=1 -I/openssl-static/include"
13
fi
14
15
+export LDFLAGS="-static -L/openssl-static/lib"
16
+
17
# We export this to 'yes', installer sets this to .environment.
18
# The updater consumes this one, so that it can tell whether it should update a static install or a non-static one
19
export IS_NETDATA_STATIC_BINARY="yes"
20
21
# Set eBPF LIBC to "static" to bundle the `-static` variant of the kernel-collector
22
export EBPF_LIBC="static"
21
-export PKG_CONFIG_PATH="/opnessl/lib/pkgconfig"
23
+export PKG_CONFIG_PATH="/openssl-static/lib/pkgconfig"
24
+
25
+# Set correct CMake flags for building against non-System OpenSSL
26
+# See: https://github.com/warmcat/libwebsockets/blob/master/READMEs/README.build.md
27
+export CMAKE_FLAGS="-DOPENSSL_ROOT_DIR=/openssl-static -DOPENSSL_LIBRARIES=/openssl-static/lib -DCMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE=/openssl-static -DLWS_OPENSSL_INCLUDE_DIRS=/openssl-static/include -DLWS_OPENSSL_LIBRARIES=/openssl-static/lib/libssl.a;/openssl-static/lib/libcrypto.a"
28
29
run ./netdata-installer.sh \
30
--install "${NETDATA_INSTALL_PARENT}" \
31
--dont-wait \
26
- --dont-start-it
32
+ --dont-start-it \
33
+ --require-cloud \
34
+ --dont-scrub-cflags-even-though-it-may-break-things
35
36
# Remove the netdata.conf file from the tree. It has hard-coded sensible defaults builtin.
37
run rm -f "${NETDATA_INSTALL_PATH}/etc/netdata/netdata.conf"