modular static build on alpine
Costa Tsaousis (ktsaou) committed
Mar 27, 2017 at 00:39 UTC
833da72e1ccf538cb2a65653f43491ec37ff3a06
8 files changed
+230
makeself/build.sh
new
+53
@@ -0,0 +1,53 @@
1
+#!/usr/bin/env sh
2
+
3
+# this script should be running in alpine linux
4
+# install the required packages
5
+apk add \
6
+ bash \
7
+ wget \
8
+ curl \
9
+ ncurses \
10
+ git \
11
+ netcat-openbsd \
12
+ alpine-sdk \
13
+ autoconf \
14
+ automake \
15
+ gcc \
16
+ make \
17
+ pkgconfig \
18
+ util-linux-dev \
19
+ zlib-dev \
20
+ libmnl-dev \
21
+ libnetfilter_acct-dev \
22
+ || exit 1
23
+
24
+cd $(dirname "$0") || exit 1
25
+
26
+# if we don't run inside the netdata repo
27
+# download it and run from it
28
+if [ ! -f ../netdata-installer.sh ]
29
+then
30
+ git clone https://github.com/firehol/netdata.git netdata.git || exit 1
31
+ cd netdata.git/makeself || exit 1
32
+ ./build.sh "$@"
33
+ exit $?
34
+fi
35
+
36
+cat >&2 <EOF
37
+
38
+This program will create a self-extracting shell package containing
39
+a statically linked netdata, able to run on any 64bit Linux system,
40
+without any dependencies from the target system.
41
+
42
+It can be used to have netdata running in no-time, or in cases the
43
+target Linux system cannot compile netdata.
44
+
45
+EOF
46
+
47
+
48
+read "Press ENTER to continue > "
49
+
50
+mkdir tmp || exit 1
51
+
52
+./run-all-jobs.sh "$@"
53
+exit $?
makeself/functions.sh
new
+29
@@ -0,0 +1,29 @@
1
+#!/usr/bin/env bash
2
+
3
+# bash strict mode
4
+set -euo pipefail
5
+
6
+# -----------------------------------------------------------------------------
7
+
8
+# allow running the jobs by hand
9
+[ -z "${NETDATA_INSTALL_PATH}" ] && export NETDATA_INSTALL_PATH="${1-/opt/netdata}"
10
+[ -z "${NETDATA_MAKESELF_PATH}" ] export NETDATA_MAKESELF_PATH="$(dirname "${0}")"
11
+[ -z "${NETDATA_SOURCE_PATH}" ] && export NETDATA_SOURCE_PATH="${NETDATA_MAKESELF_PATH}/.."
12
+[ -z "${PROCESSORS}" ] && export PROCESSORS=$(cat /proc/cpuinfo 2>/dev/null | grep ^processor | wc -l)
13
+[ -z "${PROCESSORS}" -o $((PROCESSORS)) -lt 1 ] && export PROCESSORS=1
14
+
15
+# -----------------------------------------------------------------------------
16
+
17
+fetch() {
18
+ local dir="${1}" url="${2}"
19
+ local tar="${dir}.tar.gz"
20
+
21
+ [ ! -f "tmp/${tar}" ] && run wget -O "tmp/${tar}" "${url}"
22
+ [ ! -d "tmp/${dir}" ] && cd tmp && run tar -zxvpf "${tar}"
23
+ run cd "tmp/${dir}"
24
+}
25
+
26
+# -----------------------------------------------------------------------------
27
+
28
+# load the functions of the netdata-installer.sh
29
+. "${NETDATA_SOURCE_PATH}/installer/functions.sh"
makeself/jobs/10-prepare-destination.install.sh
new
+16
@@ -0,0 +1,16 @@
1
+#!/usr/bin/env bash
2
+
3
+. ${NETDATA_MAKESELF_PATH}/functions.sh "${@}" || exit 1
4
+
5
+[ -d "${NETDATA_INSTALL_PATH}.old" ] && run rm -rf "${NETDATA_INSTALL_PATH}.old"
6
+[ -d "${NETDATA_INSTALL_PATH}" ] && run mv -f "${NETDATA_INSTALL_PATH}" "${NETDATA_INSTALL_PATH}.old"
7
+
8
+run mkdir -p "${NETDATA_INSTALL_PATH}/bin"
9
+run mkdir -p "${NETDATA_INSTALL_PATH}/usr"
10
+run cd "${NETDATA_INSTALL_PATH}"
11
+run ln -s bin sbin
12
+run cd "${NETDATA_INSTALL_PATH}/usr"
13
+run ln -s ../bin bin
14
+run ln -s ../sbin sbin
15
+run ln -s . local
16
+
makeself/jobs/50-bash-4.4.install.sh
new
+46
@@ -0,0 +1,46 @@
1
+#!/usr/bin/env bash
2
+
3
+. ${NETDATA_MAKESELF_PATH}/functions.sh "${@}" || exit 1
4
+
5
+fetch "bash-4.4" "http://ftp.gnu.org/gnu/bash/bash-4.4.tar.gz"
6
+
7
+run ./configure \
8
+ --prefix=${NETDATA_INSTALL_PATH} \
9
+ --enable-static-link \
10
+ --disable-nls \
11
+ --without-bash-malloc \
12
+# --disable-rpath \
13
+# --enable-alias \
14
+# --enable-arith-for-command \
15
+# --enable-array-variables \
16
+# --enable-brace-expansion \
17
+# --enable-casemod-attributes \
18
+# --enable-casemod-expansions \
19
+# --enable-command-timing \
20
+# --enable-cond-command \
21
+# --enable-cond-regexp \
22
+# --enable-directory-stack \
23
+# --enable-dparen-arithmetic \
24
+# --enable-function-import \
25
+# --enable-glob-asciiranges-default \
26
+# --enable-help-builtin \
27
+# --enable-job-control \
28
+# --enable-net-redirections \
29
+# --enable-process-substitution \
30
+# --enable-progcomp \
31
+# --enable-prompt-string-decoding \
32
+# --enable-readline \
33
+# --enable-select \
34
+
35
+
36
+run make clean
37
+run make -j${PROCESSORS}
38
+
39
+cat >examples/loadables/Makefile <<EOF
40
+all:
41
+clean:
42
+install:
43
+EOF
44
+
45
+run make install
46
+
makeself/jobs/50-fping-3.16.install.sh
new
+26
@@ -0,0 +1,26 @@
1
+#!/usr/bin/env bash
2
+
3
+. ${NETDATA_MAKESELF_PATH}/functions.sh "${@}" || exit 1
4
+
5
+fetch "fping-3.16" "https://github.com/schweikert/fping/archive/3.16.tar.gz"
6
+
7
+export CFLAGS="-static"
8
+
9
+run ./autogen.sh
10
+
11
+run ./configure \
12
+ --prefix=${NETDATA_INSTALL_PATH} \
13
+ --enable-ipv4 \
14
+ --enable-ipv6 \
15
+ ${NULL}
16
+
17
+cat >doc/Makefile <<EOF
18
+all:
19
+clean:
20
+install:
21
+EOF
22
+
23
+run make clean
24
+run make -j${PROCESSORS}
25
+run make install
26
+
makeself/jobs/70-netdata-git.install.sh
new
+19
@@ -0,0 +1,19 @@
1
+#!/usr/bin/env bash
2
+
3
+. ${NETDATA_MAKESELF_PATH}/functions.sh "${@}" || exit 1
4
+
5
+cd .. || exit 1
6
+
7
+export CFLAGS="-O3 -static"
8
+run ./netdata-installer.sh --install /opt --dont-wait --dont-start-it
9
+
10
+mkdir -p "${NETDATA_INSTALL_PATH}/system"
11
+
12
+cp \
13
+ system/netdata-init-d \
14
+ system/netdata-lsb \
15
+ system/netdata-openrc \
16
+ system/netdata.logrotate \
17
+ system/netdata.service \
18
+ "${NETDATA_INSTALL_PATH}/system/"
19
+
makeself/jobs/80-netdata-links.install.sh
new
+13
@@ -0,0 +1,13 @@
1
+#!/usr/bin/env bash
2
+
3
+. ${NETDATA_MAKESELF_PATH}/functions.sh "${@}" || exit 1
4
+
5
+run cd "${NETDATA_INSTALL_PATH}"
6
+run ln -s etc/netdata netdata-configs
7
+run ln -s usr/share/netdata/web netdata-web-files
8
+run ln -s usr/libexec/netdata netdata-plugins
9
+run ln -s var/lib/netdata netdata-dbs
10
+run ln -s var/cache/netdata netdata-metrics
11
+run ln -s var/log/netdata netdata-logs
12
+
13
+
makeself/run-all-jobs.sh
new
+28
@@ -0,0 +1,28 @@
1
+#!/usr/bin/env bash
2
+
3
+LC_ALL=C
4
+umask 002
5
+
6
+# be nice
7
+renice 19 $$ >/dev/null 2>/dev/null
8
+
9
+# prepare the environment for the jobs
10
+export NETDATA_INSTALL_PATH="${1-/opt/netdata}"
11
+export NETDATA_MAKESELF_PATH="$(pwd)"
12
+export NETDATA_SOURCE_PATH="${NETDATA_MAKESELF_PATH}/.."
13
+
14
+PROCESSORS=$(cat /proc/cpuinfo 2>/dev/null | grep ^processor | wc -l)
15
+[ -z "${PROCESSORS}" -o $(( PROCESSORS )) -lt 1 ] && PROCESSORS=1
16
+export PROCESSORS
17
+
18
+# make sure ${NULL} is empty
19
+export NULL=
20
+
21
+. $(dirname "${0}")/functions.sh "${@}" || exit 1
22
+
23
+for x in $(dirname "${0}")/*.install.sh
24
+do
25
+ progress "running ${x}"
26
+ "${x}" "${NETDATA_INSTALL_PATH}"
27
+done
28
+