diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-11-09 08:36:11 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-11-09 08:37:11 +0000 |
commit | 910c794ec6d0a364b4aabccf22b715cb45780e83 (patch) | |
tree | 561a9ef6b6a4668102674e1a52b3e7563c57ac61 /packaging | |
parent | Releasing debian version 1.47.5-1. (diff) | |
download | netdata-910c794ec6d0a364b4aabccf22b715cb45780e83.tar.xz netdata-910c794ec6d0a364b4aabccf22b715cb45780e83.zip |
Merging upstream version 2.0.0 (Closes: #923993, #1042533, #1045145).
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'packaging')
86 files changed, 2853 insertions, 1594 deletions
diff --git a/packaging/PLATFORM_SUPPORT.md b/packaging/PLATFORM_SUPPORT.md index ad1cd416..8fa2b977 100644 --- a/packaging/PLATFORM_SUPPORT.md +++ b/packaging/PLATFORM_SUPPORT.md @@ -1,14 +1,3 @@ -<!-- -title: "Platform support policy" -sidebar_label: "Platform support policy" -custom_edit_url: "https://github.com/netdata/netdata/edit/master/packaging/PLATFORM_SUPPORT.md" -learn_status: "Published" -sidebar_position: "1" -learn_topic_type: "Tasks" -learn_rel_path: "Installation" -learn_docs_purpose: "Present all the supported platform in the Netdata solution" ---> - # Platform support policy Netdata defines three tiers of official support: @@ -30,13 +19,13 @@ Any platforms not listed in any of these categories may or may not work. The following table shows a general outline of the various support tiers and categories. -| | Bug Support | Guaranteed Configurations | CI Coverage | Native Packages | Static Build Support | -| - | ----------- | ------------------------- | ----------- | --------------- | -------------------- | -| Core | High priority | Everything but rare edge cases | Full | Yes, if we can provide them | Full | -| Intermediate | Normal priority | Common cases | Partial (CI mostly equivalent to **Core**, but possibly with some gaps, and not required to pass) | Possibly | Full | -| Community | Best Effort | Default only | None | No | Best Effort | -| Third-party Supported | Users directed to platform maintainers | None | None | No | Best Effort | -| Previously Supported | Users asked to upgrade | None | None | Yes, but only already published versions | Best Effort | +| | Bug Support | Guaranteed Configurations | CI Coverage | Native Packages | Static Build Support | +|-----------------------|----------------------------------------|--------------------------------|---------------------------------------------------------------------------------------------------|------------------------------------------|----------------------| +| Core | High priority | Everything but rare edge cases | Full | Yes, if we can provide them | Full | +| Intermediate | Normal priority | Common cases | Partial (CI mostly equivalent to **Core**, but possibly with some gaps, and not required to pass) | Possibly | Full | +| Community | Best Effort | Default only | None | No | Best Effort | +| Third-party Supported | Users directed to platform maintainers | None | None | No | Best Effort | +| Previously Supported | Users asked to upgrade | None | None | Yes, but only already published versions | Best Effort | - ‘Bug Support’: How we handle of platform-specific bugs. - ‘Guaranteed Configurations’: Which runtime configurations for the agent we try to guarantee will work with minimal @@ -56,30 +45,29 @@ Our [static builds](#static-builds) are expected to work on these platforms if a expected to work on these platforms with minimal user effort. -| Platform | Version | Official Native Packages | Notes | -|--------------------------|----------------|----------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------| -| Alpine Linux | 3.18 | No | The latest release of Alpine Linux is guaranteed to remain at **Core** tier due to usage for our Docker images | -| Alma Linux | 9.x | x86\_64, AArch64 | Also includes support for Rocky Linux and other ABI compatible RHEL derivatives | -| Alma Linux | 8.x | x86\_64, AArch64 | Also includes support for Rocky Linux and other ABI compatible RHEL derivatives | -| Amazon Linux | 2023 | x86\_64, AArch64 | | -| Amazon Linux | 2 | x86\_64, AArch64 | | -| CentOS | 7.x | x86\_64 | | -| Docker | 19.03 or newer | x86\_64, i386, ARMv7, AArch64, POWER8+ | See our [Docker documentation](/packaging/docker/README.md) for more info on using Netdata on Docker | -| Debian | 12.x | x86\_64, i386, ARMv7, AArch64 | | -| Debian | 11.x | x86\_64, i386, ARMv7, AArch64 | | -| Fedora | 40 | x86\_64, AArch64 | | -| Fedora | 39 | x86\_64, AArch64 | | -| openSUSE | Leap 15.5 | x86\_64, AArch64 | | -| openSUSE | Leap 15.4 | x86\_64, AArch64 | | -| Oracle Linux | 9.x | x86\_64, AArch64 | | -| Oracle Linux | 8.x | x86\_64, AArch64 | | -| Red Hat Enterprise Linux | 9.x | x86\_64, AArch64 | | -| Red Hat Enterprise Linux | 8.x | x86\_64, AArch64 | | -| Red Hat Enterprise Linux | 7.x | x86\_64 | | -| Ubuntu | 24.04 | x86\_64, AArch64, ARMv7 | | -| Ubuntu | 22.04 | x86\_64, ARMv7, AArch64 | | -| Ubuntu | 20.04 | x86\_64, ARMv7, AArch64 | | - +| Platform | Version | Official Native Packages | Notes | +|--------------------------|----------------|----------------------------------------|----------------------------------------------------------------------------------------------------------------| +| Alpine Linux | 3.18 | No | The latest release of Alpine Linux is guaranteed to remain at **Core** tier due to usage for our Docker images | +| Alma Linux | 9.x | x86\_64, AArch64 | Also includes support for Rocky Linux and other ABI compatible RHEL derivatives | +| Alma Linux | 8.x | x86\_64, AArch64 | Also includes support for Rocky Linux and other ABI compatible RHEL derivatives | +| Amazon Linux | 2023 | x86\_64, AArch64 | | +| Amazon Linux | 2 | x86\_64, AArch64 | | +| CentOS | 7.x | x86\_64 | | +| Docker | 19.03 or newer | x86\_64, i386, ARMv7, AArch64, POWER8+ | See our [Docker documentation](/packaging/docker/README.md) for more info on using Netdata on Docker | +| Debian | 12.x | x86\_64, i386, ARMv7, AArch64 | | +| Debian | 11.x | x86\_64, i386, ARMv7, AArch64 | | +| Fedora | 40 | x86\_64, AArch64 | | +| Fedora | 39 | x86\_64, AArch64 | | +| openSUSE | Leap 15.5 | x86\_64, AArch64 | | +| openSUSE | Leap 15.4 | x86\_64, AArch64 | | +| Oracle Linux | 9.x | x86\_64, AArch64 | | +| Oracle Linux | 8.x | x86\_64, AArch64 | | +| Red Hat Enterprise Linux | 9.x | x86\_64, AArch64 | | +| Red Hat Enterprise Linux | 8.x | x86\_64, AArch64 | | +| Red Hat Enterprise Linux | 7.x | x86\_64 | | +| Ubuntu | 24.04 | x86\_64, AArch64, ARMv7 | | +| Ubuntu | 22.04 | x86\_64, ARMv7, AArch64 | | +| Ubuntu | 20.04 | x86\_64, ARMv7, AArch64 | | ### Intermediate @@ -106,16 +94,16 @@ to add support for a new platform, that platform generally will start in this ti are expected to work on these platforms if available. Source-based installs are usually expected to work on these platforms, but may require some extra effort from users. -| Platform | Version | Official Native Packages | Notes | -|--------------|------------|--------------------------|-----------------------------------------------------------------------------------------------------------| -| Clear Linux | Latest | No | | -| Debian | Sid | No | | -| Fedora | Rawhide | No | | -| FreeBSD | 13-STABLE | No | Netdata is included in the FreeBSD Ports Tree, and this is the recommended installation method on FreeBSD | -| Gentoo | Latest | No | | -| macOS | 13 | No | Currently only works for Intel-based hardware. Requires Homebrew for dependencies | -| macOS | 12 | No | Currently only works for Intel-based hardware. Requires Homebrew for dependencies | -| macOS | 11 | No | Currently only works for Intel-based hardware. Requires Homebrew for dependencies. | +| Platform | Version | Official Native Packages | Notes | +|-------------|-----------|--------------------------|-----------------------------------------------------------------------------------------------------------| +| Clear Linux | Latest | No | | +| Debian | Sid | No | | +| Fedora | Rawhide | No | | +| FreeBSD | 13-STABLE | No | Netdata is included in the FreeBSD Ports Tree, and this is the recommended installation method on FreeBSD | +| Gentoo | Latest | No | | +| macOS | 13 | No | Currently only works for Intel-based hardware. Requires Homebrew for dependencies | +| macOS | 12 | No | Currently only works for Intel-based hardware. Requires Homebrew for dependencies | +| macOS | 11 | No | Currently only works for Intel-based hardware. Requires Homebrew for dependencies. | ## Third-party supported platforms diff --git a/packaging/VERSIONING_AND_PUBLIC_API.md b/packaging/VERSIONING_AND_PUBLIC_API.md index dc0a5def..ce672a6f 100644 --- a/packaging/VERSIONING_AND_PUBLIC_API.md +++ b/packaging/VERSIONING_AND_PUBLIC_API.md @@ -36,7 +36,7 @@ will be as up-to-date as possible. Versions for nightly builds of the Netdata Agent consist of four parts, a major version, a minor version, a revision number, and an optional commit ID, presented like `<major>.<minor>.0-<revision>-<commit>`. For example, a version of `1.43.0-11-gb15437502` has a major version of 1, a minor version of 43, a revision of 11, and a commit ID of -`gb15437502`. A commit ID consists of a lowercaase letter `g`, followed by the short commit hash for the corresponding +`gb15437502`. A commit ID consists of a lowercase letter `g`, followed by the short commit hash for the corresponding commit. If the commit ID is not included, it may be replaced by the word ‘nightly’. The major and minor version numbers for a nightly build correspond exactly to an associated stable release. A @@ -80,9 +80,9 @@ notes at least one minor release prior to being merged: - All mandatory build dependencies which are not vendored in the Netdata Agent code. This includes, but is not limited to: - - The underlying build system (such as autotools or CMake). - - Primary library dependencies (such as libuv). - - Any external tooling that is required at build time. + - The underlying build system (such as autotools or CMake). + - Primary library dependencies (such as libuv). + - Any external tooling that is required at build time. - The REST API provided by the Netdata Agent’s internal web server, accessible via the `/api` endpoint. This does not extend to the charts, labels, or other system-specific data returned by some API endpoints. - The protocol used for streaming and replicating data between Netdata Agents. @@ -138,7 +138,7 @@ Any components which are not explicitly listed above as being part of the public API. This includes, but is not limited to: - Any mandatory build components which are vendored as part of the Netdata sources, such as SQLite3 or libJudy. This - extends to both the presence or abscence of such components, as well as the exact version being bundled. + extends to both the presence or absence of such components, as well as the exact version being bundled. - The exact installation mechanism that will be used on any given system when using our `kickstart.sh` installation script. - The exact underlying implementation of any data collection plugin. diff --git a/packaging/build-package.sh b/packaging/build-package.sh index 453e167f..a4feb59b 100755 --- a/packaging/build-package.sh +++ b/packaging/build-package.sh @@ -26,8 +26,7 @@ add_cmake_option() { add_cmake_option CMAKE_BUILD_TYPE RelWithDebInfo add_cmake_option CMAKE_INSTALL_PREFIX / -add_cmake_option ENABLE_ACLK On -add_cmake_option ENABLE_CLOUD On +add_cmake_option ENABLE_DASHBOARD on add_cmake_option ENABLE_DBENGINE On add_cmake_option ENABLE_H2O On add_cmake_option ENABLE_ML On @@ -37,6 +36,8 @@ add_cmake_option ENABLE_PLUGIN_CGROUP_NETWORK On add_cmake_option ENABLE_PLUGIN_DEBUGFS On add_cmake_option ENABLE_PLUGIN_FREEIPMI On add_cmake_option ENABLE_PLUGIN_GO On +add_cmake_option ENABLE_PLUGIN_PYTHON On +add_cmake_option ENABLE_PLUGIN_CHARTS On add_cmake_option ENABLE_PLUGIN_LOCAL_LISTENERS On add_cmake_option ENABLE_PLUGIN_NFACCT On add_cmake_option ENABLE_PLUGIN_PERF On diff --git a/packaging/building-native-packages-locally.md b/packaging/building-native-packages-locally.md index 6ad1d604..0c84f505 100644 --- a/packaging/building-native-packages-locally.md +++ b/packaging/building-native-packages-locally.md @@ -39,16 +39,16 @@ inspect the state of the container and look at build logs. ### Detailed explanation -The environments used for building our packages are fully self-contianed Docker images built from [Dockerfiles](https://github.com/netdata/helper-images/tree/master/package-builders) +The environments used for building our packages are fully self-contained Docker images built from [Dockerfiles](https://github.com/netdata/helper-images/tree/master/package-builders) These are published on Docker Hub with the image name `netdata/package-builders`, and tagged using the name and version of the distribution (with the tag corresponding to the suffix on the associated Dockerfile). The build code expects the following requirements to be met: -- It expects the source tree it should build from to be located at `/netdata`, and expects that said source tree +* It expects the source tree it should build from to be located at `/netdata`, and expects that said source tree is clean (no artifacts left over from previous builds). -- It expects an environment variable named `VERSION` to be defined, and uses this to control what version number +* It expects an environment variable named `VERSION` to be defined, and uses this to control what version number will be shown in the package metadata and filenames. Internally, the source tree gets copied to a temporary location for the build process so that the source tree can @@ -95,7 +95,7 @@ Once you have that set up, the command to build the packages is the same as abov `--platform` option to the `docker run` or `podman run` command. The current list of architectures we build for, and the correct value for the `--platform` option is: -- 32-bit ARMv7: `linux/arm/v7` -- 64-bit ARMv8: `linux/arm64/v8` -- 32-bit x86: `linux/i386` -- 64-bit x86: `linux/amd64` +* 32-bit ARMv7: `linux/arm/v7` +* 64-bit ARMv8: `linux/arm64/v8` +* 32-bit x86: `linux/i386` +* 64-bit x86: `linux/amd64` diff --git a/packaging/check-for-go-toolchain.sh b/packaging/check-for-go-toolchain.sh index fe5dabfa..2c629896 100644 --- a/packaging/check-for-go-toolchain.sh +++ b/packaging/check-for-go-toolchain.sh @@ -14,163 +14,163 @@ # GOLANG_FAILURE_REASON set to an error message indicating what went wrong. GOLANG_MIN_MAJOR_VERSION='1' -GOLANG_MIN_MINOR_VERSION='22' -GOLANG_MIN_PATCH_VERSION='0' +GOLANG_MIN_MINOR_VERSION='23' +GOLANG_MIN_PATCH_VERSION='3' GOLANG_MIN_VERSION="${GOLANG_MIN_MAJOR_VERSION}.${GOLANG_MIN_MINOR_VERSION}.${GOLANG_MIN_PATCH_VERSION}" GOLANG_TEMP_PATH="${TMPDIR}/go-toolchain" check_go_version() { - version="$("${go}" version | awk '{ print $3 }' | sed 's/^go//')" - version_major="$(echo "${version}" | cut -f 1 -d '.')" - version_minor="$(echo "${version}" | cut -f 2 -d '.')" - version_patch="$(echo "${version}" | cut -f 3 -d '.')" - - if [ -z "${version_major}" ] || [ "${version_major}" -lt "${GOLANG_MIN_MAJOR_VERSION}" ]; then - return 1 - elif [ "${version_major}" -gt "${GOLANG_MIN_MAJOR_VERSION}" ]; then - return 0 - fi - - if [ -z "${version_minor}" ] || [ "${version_minor}" -lt "${GOLANG_MIN_MINOR_VERSION}" ]; then - return 1 - elif [ "${version_minor}" -gt "${GOLANG_MIN_MINOR_VERSION}" ]; then - return 0 - fi + version="$("${go}" version | awk '{ print $3 }' | sed 's/^go//')" + version_major="$(echo "${version}" | cut -f 1 -d '.')" + version_minor="$(echo "${version}" | cut -f 2 -d '.')" + version_patch="$(echo "${version}" | cut -f 3 -d '.')" - if [ -n "${version_patch}" ] && [ "${version_patch}" -ge "${GOLANG_MIN_PATCH_VERSION}" ]; then - return 0 - fi + if [ -z "${version_major}" ] || [ "${version_major}" -lt "${GOLANG_MIN_MAJOR_VERSION}" ]; then + return 1 + elif [ "${version_major}" -gt "${GOLANG_MIN_MAJOR_VERSION}" ]; then + return 0 + fi + if [ -z "${version_minor}" ] || [ "${version_minor}" -lt "${GOLANG_MIN_MINOR_VERSION}" ]; then return 1 + elif [ "${version_minor}" -gt "${GOLANG_MIN_MINOR_VERSION}" ]; then + return 0 + fi + + if [ -n "${version_patch}" ] && [ "${version_patch}" -ge "${GOLANG_MIN_PATCH_VERSION}" ]; then + return 0 + fi + + return 1 } install_go_toolchain() { - GOLANG_ARCHIVE_NAME="${GOLANG_TEMP_PATH}/golang.tar.gz" - GOLANG_CHECKSUM_FILE="${GOLANG_TEMP_PATH}/golang.sha256sums" - - case "$(uname -s)" in - Linux) - case "$(uname -m)" in - i?86) - GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.22.0.linux-386.tar.gz" - GOLANG_ARCHIVE_CHECKSUM="1e209c4abde069067ac9afb341c8003db6a210f8173c77777f02d3a524313da3" - ;; - x86_64) - GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.22.0.linux-amd64.tar.gz" - GOLANG_ARCHIVE_CHECKSUM="f6c8a87aa03b92c4b0bf3d558e28ea03006eb29db78917daec5cfb6ec1046265" - ;; - aarch64) - GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.22.0.linux-arm64.tar.gz" - GOLANG_ARCHIVE_CHECKSUM="6a63fef0e050146f275bf02a0896badfe77c11b6f05499bb647e7bd613a45a10" - ;; - armv*) - GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.22.0.linux-armv6l.tar.gz" - GOLANG_ARCHIVE_CHECKSUM="0525f92f79df7ed5877147bce7b955f159f3962711b69faac66bc7121d36dcc4" - ;; - ppc64le) - GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.22.0.linux-ppc64le.tar.gz" - GOLANG_ARCHIVE_CHECKSUM="0e57f421df9449066f00155ce98a5be93744b3d81b00ee4c2c9b511be2a31d93" - ;; - riscv64) - GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.22.0.linux-riscv64.tar.gz" - GOLANG_ARCHIVE_CHECKSUM="afe9cedcdbd6fdff27c57efd30aa5ce0f666f471fed5fa96cd4fb38d6b577086" - ;; - s390x) - GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.22.0.linux-s390x.tar.gz" - GOLANG_ARCHIVE_CHECKSUM="2e546a3583ba7bd3988f8f476245698f6a93dfa9fe206a8ca8f85c1ceecb2446" - ;; - *) - GOLANG_FAILURE_REASON="Linux $(uname -m) platform is not supported out-of-box by Go, you must install a toolchain for it yourself." - return 1 - ;; - esac - ;; - FreeBSD) - case "$(uname -m)" in - 386) - GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.22.0.freebsd-386.tar.gz" - GOLANG_ARCHIVE_CHECKSUM="b8065da37783e8b9e7086365a54d74537e832c92311b61101a66989ab2458d8e" - ;; - amd64) - GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.22.0.freebsd-amd64.tar.gz" - GOLANG_ARCHIVE_CHECKSUM="50f421c7f217083ac94aab1e09400cb9c2fea7d337679ec11f1638a11460da30" - ;; - arm) - GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.22.0.freebsd-arm.tar.gz" - GOLANG_ARCHIVE_CHECKSUM="c9c8b305f90903536f4981bad9f029828c2483b3216ca1783777344fbe603f2d" - ;; - arm64) - GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.22.0.freebsd-arm64.tar.gz" - GOLANG_ARCHIVE_CHECKSUM="e23385e5c640787fa02cd58f2301ea09e162c4d99f8ca9fa6d52766f428a933d" - ;; - riscv64) - GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.22.0.freebsd-riscv64.tar.gz" - GOLANG_ARCHIVE_CHECKSUM="c8f94d1de6024546194d58e7b9370dc7ea06176aad94a675b0062c25c40cb645" - ;; - *) - GOLANG_FAILURE_REASON="FreeBSD $(uname -m) platform is not supported out-of-box by Go, you must install a toolchain for it yourself." - return 1 - ;; - esac - ;; + GOLANG_ARCHIVE_NAME="${GOLANG_TEMP_PATH}/golang.tar.gz" + GOLANG_CHECKSUM_FILE="${GOLANG_TEMP_PATH}/golang.sha256sums" + + case "$(uname -s)" in + Linux) + case "$(uname -m)" in + i?86) + GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.23.3.linux-386.tar.gz" + GOLANG_ARCHIVE_CHECKSUM="0c8e9f824bf443f51e06ac017b9ae402ea066d761b309d880dbb2ca5793db8a2" + ;; + x86_64) + GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.23.3.linux-amd64.tar.gz" + GOLANG_ARCHIVE_CHECKSUM="a0afb9744c00648bafb1b90b4aba5bdb86f424f02f9275399ce0c20b93a2c3a8" + ;; + aarch64) + GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.23.3.linux-arm64.tar.gz" + GOLANG_ARCHIVE_CHECKSUM="1f7cbd7f668ea32a107ecd41b6488aaee1f5d77a66efd885b175494439d4e1ce" + ;; + armv*) + GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.23.3.linux-armv6l.tar.gz" + GOLANG_ARCHIVE_CHECKSUM="5f0332754beffc65af65a7b2da76e9dd997567d0d81b6f4f71d3588dc7b4cb00" + ;; + ppc64le) + GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.23.3.linux-ppc64le.tar.gz" + GOLANG_ARCHIVE_CHECKSUM="e3b926c81e8099d3cee6e6e270b85b39c3bd44263f8d3df29aacb4d7e00507c8" + ;; + riscv64) + GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.23.3.linux-riscv64.tar.gz" + GOLANG_ARCHIVE_CHECKSUM="324e03b6f59be841dfbaeabc466224b0f0905f5ad3a225b7c0703090e6c4b1a5" + ;; + s390x) + GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.23.3.linux-s390x.tar.gz" + GOLANG_ARCHIVE_CHECKSUM="6bd72fcef72b046b6282c2d1f2c38f31600e4fe9361fcd8341500c754fb09c38" + ;; + *) + GOLANG_FAILURE_REASON="Linux $(uname -m) platform is not supported out-of-box by Go, you must install a toolchain for it yourself." + return 1 + ;; + esac + ;; + FreeBSD) + case "$(uname -m)" in + 386) + GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.23.3.freebsd-386.tar.gz" + GOLANG_ARCHIVE_CHECKSUM="69479fa016ec5b4605885643ce0c2dd5c583e02353978feb6de38c961863b9cc" + ;; + amd64) + GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.23.3.freebsd-amd64.tar.gz" + GOLANG_ARCHIVE_CHECKSUM="bf1de22a900646ef4f79480ed88337856d47089cc610f87e6fef46f6b8db0e1f" + ;; + arm) + GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.23.3.freebsd-arm.tar.gz" + GOLANG_ARCHIVE_CHECKSUM="e461f866479bc36bdd4cfec32bfecb1bb243152268a1b3223de109410dec3407" + ;; + arm64) + GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.23.3.freebsd-arm64.tar.gz" + GOLANG_ARCHIVE_CHECKSUM="24154b4018a45540aefeb6b5b9ffdcc8d9a8cdb78cd7fec262787b89fed19997" + ;; + riscv64) + GOLANG_ARCHIVE_URL="https://go.dev/dl/go1.23.3.freebsd-riscv64.tar.gz" + GOLANG_ARCHIVE_CHECKSUM="218f3f1532e61dd65c330c2a5fc85bec18cc3690489763e62ffa9bb9fc85a68e" + ;; *) - GOLANG_FAILURE_REASON="We do not support automatic handling of a Go toolchain on this system, you must install one manually." - return 1 - ;; - esac - - if [ -d '/usr/local/go' ]; then - if [ -f '/usr/local/go/.installed-by-netdata' ]; then - rm -rf /usr/local/go - else - GOLANG_FAILURE_REASON="Refusing to overwrite existing Go toolchain install at /usr/local/go, it needs to be updated manually." - return 1 - fi + GOLANG_FAILURE_REASON="FreeBSD $(uname -m) platform is not supported out-of-box by Go, you must install a toolchain for it yourself." + return 1 + ;; + esac + ;; + *) + GOLANG_FAILURE_REASON="We do not support automatic handling of a Go toolchain on this system, you must install one manually." + return 1 + ;; + esac + + if [ -d '/usr/local/go' ]; then + if [ -f '/usr/local/go/.installed-by-netdata' ]; then + rm -rf /usr/local/go + else + GOLANG_FAILURE_REASON="Refusing to overwrite existing Go toolchain install at /usr/local/go, it needs to be updated manually." + return 1 fi + fi - mkdir -p "${GOLANG_TEMP_PATH}" + mkdir -p "${GOLANG_TEMP_PATH}" - if ! curl --fail -q -sSL --connect-timeout 10 --retry 3 --output "${GOLANG_ARCHIVE_NAME}" "${GOLANG_ARCHIVE_URL}"; then - GOLANG_FAILURE_REASON="Failed to download Go toolchain." - return 1 - fi + if ! curl --fail -q -sSL --connect-timeout 10 --retry 3 --output "${GOLANG_ARCHIVE_NAME}" "${GOLANG_ARCHIVE_URL}"; then + GOLANG_FAILURE_REASON="Failed to download Go toolchain." + return 1 + fi - echo "${GOLANG_ARCHIVE_CHECKSUM} ${GOLANG_ARCHIVE_NAME}" > "${GOLANG_CHECKSUM_FILE}" + echo "${GOLANG_ARCHIVE_CHECKSUM} ${GOLANG_ARCHIVE_NAME}" >"${GOLANG_CHECKSUM_FILE}" - if ! sha256sum -c "${GOLANG_CHECKSUM_FILE}"; then - GOLANG_FAILURE_REASON="Invalid checksum for downloaded Go toolchain." - return 1 - fi + if ! sha256sum -c "${GOLANG_CHECKSUM_FILE}"; then + GOLANG_FAILURE_REASON="Invalid checksum for downloaded Go toolchain." + return 1 + fi - if ! tar -C /usr/local/ -xzf "${GOLANG_ARCHIVE_NAME}"; then - GOLANG_FAILURE_REASON="Failed to extract Go toolchain." - return 1 - fi + if ! tar -C /usr/local/ -xzf "${GOLANG_ARCHIVE_NAME}"; then + GOLANG_FAILURE_REASON="Failed to extract Go toolchain." + return 1 + fi - touch /usr/local/go/.installed-by-netdata + touch /usr/local/go/.installed-by-netdata - rm -rf "${GOLANG_TEMP_PATH}" + rm -rf "${GOLANG_TEMP_PATH}" } ensure_go_toolchain() { - go="$(PATH="/usr/local/go/bin:${PATH}" command -v go 2>/dev/null)" - - need_go_install=0 + go="$(PATH="/usr/local/go/bin:${PATH}" command -v go 2>/dev/null)" - if [ -z "${go}" ]; then - need_go_install=1 - elif ! check_go_version; then - need_go_install=1 - fi + need_go_install=0 - if [ "${need_go_install}" -eq 1 ]; then - if ! install_go_toolchain; then - return 1 - fi + if [ -z "${go}" ]; then + need_go_install=1 + elif ! check_go_version; then + need_go_install=1 + fi - rm -rf "${GOLANG_TEMP_PATH}" || true + if [ "${need_go_install}" -eq 1 ]; then + if ! install_go_toolchain; then + return 1 fi - return 0 + rm -rf "${GOLANG_TEMP_PATH}" || true + fi + + return 0 } diff --git a/packaging/cmake/Modules/NetdataDashboard.cmake b/packaging/cmake/Modules/NetdataDashboard.cmake new file mode 100644 index 00000000..070ce18e --- /dev/null +++ b/packaging/cmake/Modules/NetdataDashboard.cmake @@ -0,0 +1,85 @@ +# CMake module to handle fetching and installing the dashboard code +# +# Copyright (c) 2024 Netdata Inc. +# SPDX-License-Identifier: GPL-3.0-or-later + +include(NetdataUtil) + +function(handle_braindead_versioning_insanity prefix) + if(IS_DIRECTORY "${prefix}/v2" AND NOT IS_DIRECTORY "${prefix}/v3") + message(STATUS " Fixing incorrectly versioned paths generated by poorly written CI") + file(RENAME "${prefix}/v2" "${prefix}/v3") + + if(IS_DIRECTORY "${prefix}/v3" AND NOT IS_DIRECTORY "${prefix}/v2") + message(STATUS " Fixing incorrectly versioned paths generated by poorly written CI -- Done") + else() + message(FATAL_ERROR "Failed to fix incorrectly versioned paths") + endif() + endif() +endfunction() + +# Bundle the dashboard code for inclusion during install. +# +# This is unfortunately complicated due to how we need to handle the +# generation of the CMakeLists file for the dashboard code. +function(bundle_dashboard) + include(ExternalProject) + + set(dashboard_src_dir "${CMAKE_BINARY_DIR}/dashboard-src") + set(dashboard_src_prefix "${dashboard_src_dir}/dist/agent") + set(dashboard_bin_dir "${CMAKE_BINARY_DIR}/dashboard-bin") + set(DASHBOARD_URL "https://app.netdata.cloud/agent.tar.gz" CACHE STRING + "URL used to fetch the local agent dashboard code") + + message(STATUS "Preparing local agent dashboard code") + + message(STATUS " Fetching ${DASHBOARD_URL}") + file(DOWNLOAD + "${DASHBOARD_URL}" + "${CMAKE_BINARY_DIR}/dashboard.tar.gz" + TIMEOUT 180 + STATUS fetch_status) + + list(GET fetch_status 0 result) + + if(result) + message(FATAL_ERROR "Failed to fetch dashboard code") + else() + message(STATUS " Fetching ${DASHBOARD_URL} -- Done") + endif() + + message(STATUS " Extracting dashboard code") + extract_gzipped_tarball( + "${CMAKE_BINARY_DIR}/dashboard.tar.gz" + "${dashboard_src_dir}" + ) + message(STATUS " Extracting dashboard code -- Done") + + handle_braindead_versioning_insanity("${dashboard_src_prefix}") + + message(STATUS " Generating CMakeLists.txt file for dashboard code") + set(rules "") + + subdirlist(dash_dirs "${dashboard_src_prefix}") + + foreach(dir IN LISTS dash_dirs) + file(GLOB files + LIST_DIRECTORIES FALSE + RELATIVE "${dashboard_src_dir}" + "${dashboard_src_prefix}/${dir}/*") + + set(rules "${rules}install(FILES ${files} COMPONENT dashboard DESTINATION ${WEB_DEST}/${dir})\n") + endforeach() + + file(GLOB files + LIST_DIRECTORIES FALSE + RELATIVE "${dashboard_src_dir}" + "${dashboard_src_prefix}/*") + + set(rules "${rules}install(FILES ${files} COMPONENT dashboard DESTINATION ${WEB_DEST})\n") + + file(WRITE "${dashboard_src_dir}/CMakeLists.txt" "${rules}") + message(STATUS " Generating CMakeLists.txt file for dashboard code -- Done") + add_subdirectory("${dashboard_src_dir}" "${dashboard_bin_dir}") + message(STATUS "Preparing local agent dashboard code -- Done") +endfunction() diff --git a/packaging/cmake/Modules/NetdataEBPFCORE.cmake b/packaging/cmake/Modules/NetdataEBPFCORE.cmake index f4c918bf..bf98ce58 100644 --- a/packaging/cmake/Modules/NetdataEBPFCORE.cmake +++ b/packaging/cmake/Modules/NetdataEBPFCORE.cmake @@ -11,8 +11,8 @@ set(ebpf-co-re_SOURCE_DIR "${CMAKE_BINARY_DIR}/ebpf-co-re") function(netdata_fetch_ebpf_co_re) ExternalProject_Add( ebpf-co-re - URL https://github.com/netdata/ebpf-co-re/releases/download/v1.4.5.1/netdata-ebpf-co-re-glibc-v1.4.5.1.tar.xz - URL_HASH SHA256=10d49602c873932a4e0a3717a4af2137434b480d0170c2fb000ec70ae02f6e30 + URL https://github.com/netdata/ebpf-co-re/releases/download/v1.5.0/netdata-ebpf-co-re-glibc-v1.5.0.tar.xz + URL_HASH SHA256=9585a5a48853f70efa51c48f57df34b4e47b1af56eaaef731f57525ebd76b90c SOURCE_DIR "${ebpf-co-re_SOURCE_DIR}" CONFIGURE_COMMAND "" BUILD_COMMAND "" diff --git a/packaging/cmake/Modules/NetdataEBPFLegacy.cmake b/packaging/cmake/Modules/NetdataEBPFLegacy.cmake index 12dfce48..251ef464 100644 --- a/packaging/cmake/Modules/NetdataEBPFLegacy.cmake +++ b/packaging/cmake/Modules/NetdataEBPFLegacy.cmake @@ -20,19 +20,19 @@ function(netdata_fetch_legacy_ebpf_code) endif() if(need_static) - set(_hash 1c0c8f1177514e9e21a23c28841406595e57b7cfacd93746ff2d6b25987b94a6) + set(_hash ca0c6186b5c9c4640f8ba13ea375b66882203e8ca831a2e6e5e4e039b37f277a) set(_libc "static") elseif(_libc STREQUAL "glibc") - set(_hash e365a76a2bb25190f1d91e4dea2cfc5ff5db63b5238fbfbc89f72755cf85a12c) + set(_hash d3027685e15fdb6406fd36faf45287d79534d40601d388aca5ab87e90959846d) elseif(_libc STREQUAL "musl") - set(_hash ec14dcdfa29d4fba1cea6763740b9d37683515bde88a1a29b6e7c70ce01a604d) + set(_hash e2268ca1fa012e87d4d3d588e01b3a2389ad8a4b1c878508f6226ce1dad34acf) else() message(FATAL_ERROR "Could not determine libc implementation, unable to install eBPF legacy code.") endif() ExternalProject_Add( ebpf-code-legacy - URL https://github.com/netdata/kernel-collector/releases/download/v1.4.5.1/netdata-kernel-collector-${_libc}-v1.4.5.1.tar.xz + URL https://github.com/netdata/kernel-collector/releases/download/v1.5.0/netdata-kernel-collector-${_libc}-v1.5.0.tar.xz URL_HASH SHA256=${_hash} SOURCE_DIR "${ebpf-legacy_SOURCE_DIR}" CONFIGURE_COMMAND "" diff --git a/packaging/cmake/Modules/NetdataJSONC.cmake b/packaging/cmake/Modules/NetdataJSONC.cmake index 89ec7026..db18c14b 100644 --- a/packaging/cmake/Modules/NetdataJSONC.cmake +++ b/packaging/cmake/Modules/NetdataJSONC.cmake @@ -71,7 +71,7 @@ endfunction() # NETDATA_JSONC_* variables for later use. macro(netdata_detect_jsonc) if(NOT ENABLE_BUNDLED_JSONC) - pkg_check_modules(JSONC json-c) + pkg_check_modules(JSONC json-c>=0.14) endif() if(NOT JSONC_FOUND) diff --git a/packaging/cmake/Modules/NetdataLibBPF.cmake b/packaging/cmake/Modules/NetdataLibBPF.cmake index 9c3bf6d2..bc41e533 100644 --- a/packaging/cmake/Modules/NetdataLibBPF.cmake +++ b/packaging/cmake/Modules/NetdataLibBPF.cmake @@ -31,7 +31,7 @@ function(netdata_bundle_libbpf) if(USE_LEGACY_LIBBPF) set(_libbpf_tag 673424c56127bb556e64095f41fd60c26f9083ec) # v0.0.9_netdata-1 else() - set(_libbpf_tag 6923eb970e22682eaedff79f5be4f9934b99cf50) # v1.4.5p_netdata + set(_libbpf_tag ad7c3a4266bf5ce301a5691eb7b405dbb27c7f3d) # v1.5.0p_netdata endif() if(DEFINED BUILD_SHARED_LIBS) diff --git a/packaging/cmake/Modules/NetdataUtil.cmake b/packaging/cmake/Modules/NetdataUtil.cmake index c6a13309..0c1d803e 100644 --- a/packaging/cmake/Modules/NetdataUtil.cmake +++ b/packaging/cmake/Modules/NetdataUtil.cmake @@ -144,3 +144,78 @@ function(netdata_identify_libc _libc_name) set(${_libc_name} ${_ND_DETECTED_LIBC} PARENT_SCOPE) endif() endfunction() + +# Extract a tar archive. +# +# This will use CMake’s native support if available, but will still +# fall back cleanly if CMake is too old. +function(extract_gzipped_tarball tarball target) + if(CMAKE_VERSION VERSION_LESS 3.18) + find_program(TAR NAMES tar bsdtar DOC "TAR archive program") + + if(TAR STREQUAL "TAR-NOTFOUND") + message(FATAL_ERROR "Unable to find tar command") + endif() + + find_program(GZIP NAMES gzip DOC "GZIP compression program") + + if(GZIP STREQUAL "GZIP-NOTFOUND") + message(FATAL_ERROR "Unable to find gzip command") + endif() + + file(MAKE_DIRECTORY "${target}") + execute_process(COMMAND tar -x -z -f "${tarball}" -C "${target}" + RESULT_VARIABLE result) + + if(result) + message(FATAL_ERROR "Failed to extract ${tarball}") + endif() + else() + file(ARCHIVE_EXTRACT + INPUT "${tarball}" + DESTINATION "${target}") + endif() +endfunction() + +# Get a recursive list of all sub-directories of the specified directory, +# relative to that directory. +function(subdirlist result curdir) + file(GLOB_RECURSE children + LIST_DIRECTORIES TRUE + RELATIVE ${curdir} + ${curdir}/*) + + set(dirlist "") + + foreach(child ${children}) + if(IS_DIRECTORY ${curdir}/${child}) + list(APPEND dirlist ${child}) + endif() + endforeach() + + set(${result} ${dirlist} PARENT_SCOPE) +endfunction() + +# Precompile python code in the specified directory relative to the +# CMake install prefix at install time. +# This must be called _after_ the install directive for the python code +# in the specified directory +function(precompile_python dir component) + find_package(Python3) + + if(NOT ${Python3_Interpreter_FOUND}) + message(STATUS "Could not find Python3, skipping precompilation of Python code.") + return() + endif() + + set(prefix [=[${CMAKE_INSTALL_PREFIX}]=]) + + install( + CODE "message(STATUS \"Precompiling Python3 code in ${prefix}/${dir}\")" + COMPONENT ${component} + ) + install( + CODE "execute_process(COMMAND ${Python3_Interpreter} -O -m compileall -j0 -o2 ${prefix}/${dir} WORKING_DIRECTORY ${prefix}/${dir})" + COMPONENT ${component} + ) +endfunction() diff --git a/packaging/cmake/Modules/Packaging.cmake b/packaging/cmake/Modules/Packaging.cmake index 663dbe27..92960ca2 100644 --- a/packaging/cmake/Modules/Packaging.cmake +++ b/packaging/cmake/Modules/Packaging.cmake @@ -63,8 +63,17 @@ netdata-plugin-network-viewer") set(CPACK_DEBIAN_NETDATA_PACKAGE_CONFLICTS "netdata-core, netdata-plugins-bash, netdata-plugins-python, netdata-web") -list(APPEND _main_deps "netdata-plugin-chartsd") -list(APPEND _main_deps "netdata-plugin-pythond") +if(ENABLE_DASHBOARD) + list(APPEND _main_deps "netdata-dashboard") +endif() + +if(ENABLE_PLUGIN_CHARTS) + list(APPEND _main_deps "netdata-plugin-chartsd") +endif() + +if(ENABLE_PLUGIN_PYTHON) + list(APPEND _main_deps "netdata-plugin-pythond") +endif() if(ENABLE_PLUGIN_APPS) list(APPEND _main_deps "netdata-plugin-apps") @@ -105,6 +114,27 @@ set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA set(CPACK_DEBIAN_NETDATA_DEBUGINFO_PACKAGE On) # +# dashboard +# + +set(CPACK_COMPONENT_DASHBOARD_DEPENDS "netdata") +set(CPACK_COMPONENT_DASHBOARD_DESCRIPTION + "The local dashboard for the Netdata Agent. + This allows access to the dashboard on the local node without internet access.") + +set(CPACK_DEBIAN_DASHBOARD_PACKAGE_NAME "netdata-dashboard") +set(CPACK_DEBIAN_DASHBOARD_PACKAGE_SECTION "net") +set(CPACK_DEBIAN_DASHBOARD_PACKAGE_CONFLICTS "netdata (<< ${CPACK_PACKAGE_VERSION})") +set(CPACK_DEBIAN_DASHBOARD_PACKAGE_PREDEPENDS "adduser") + +set(CPACK_DEBIAN_DASHBOARD_PACKAGE_CONTROL_EXTRA + "${PKG_FILES_PATH}/deb/plugin-apps/preinst" + "${PKG_FILES_PATH}/deb/plugin-apps/postinst" + "${PKG_FILES_PATH}/deb/plugin-apps/postrm") + +set(CPACK_DEBIAN_DASHBOARD_DEBUGINFO_PACKAGE Off) + +# # apps.plugin # @@ -434,10 +464,15 @@ set(CPACK_DEBIAN_PLUGIN-XENSTAT_DEBUGINFO_PACKAGE On) # list(APPEND CPACK_COMPONENTS_ALL "netdata") +if(ENABLE_DASHBOARD) + list(APPEND CPACK_COMPONENTS_ALL "dashboard") +endif() if(ENABLE_PLUGIN_APPS) list(APPEND CPACK_COMPONENTS_ALL "plugin-apps") endif() -list(APPEND CPACK_COMPONENTS_ALL "plugin-chartsd") +if(ENABLE_PLUGIN_CHARTS) + list(APPEND CPACK_COMPONENTS_ALL "plugin-chartsd") +endif() if(ENABLE_PLUGIN_CUPS) list(APPEND CPACK_COMPONENTS_ALL "plugin-cups") endif() @@ -465,7 +500,9 @@ endif() if(ENABLE_PLUGIN_PERF) list(APPEND CPACK_COMPONENTS_ALL "plugin-perf") endif() -list(APPEND CPACK_COMPONENTS_ALL "plugin-pythond") +if(ENABLE_PLUGIN_PYTHON) + list(APPEND CPACK_COMPONENTS_ALL "plugin-pythond") +endif() if(ENABLE_PLUGIN_SLABINFO) list(APPEND CPACK_COMPONENTS_ALL "plugin-slabinfo") endif() diff --git a/packaging/cmake/config.cmake.h.in b/packaging/cmake/config.cmake.h.in index 57d03269..0ea6ddd2 100644 --- a/packaging/cmake/config.cmake.h.in +++ b/packaging/cmake/config.cmake.h.in @@ -67,6 +67,12 @@ #cmakedefine HAVE_GETPRIORITY #cmakedefine HAVE_SETENV #cmakedefine HAVE_DLSYM +#cmakedefine HAVE_LIBCURL + +#cmakedefine HAVE_ARC4RANDOM_BUF +#cmakedefine HAVE_ARC4RANDOM_UNIFORM +#cmakedefine HAVE_RAND_S +#cmakedefine HAVE_GETRANDOM #cmakedefine HAVE_BACKTRACE #cmakedefine HAVE_CLOSE_RANGE @@ -103,14 +109,10 @@ // enabled features -#cmakedefine ENABLE_OPENSSL -#cmakedefine ENABLE_CLOUD -#cmakedefine ENABLE_ACLK #cmakedefine ENABLE_ML #cmakedefine ENABLE_EXPORTING_MONGODB #cmakedefine ENABLE_H2O #cmakedefine ENABLE_DBENGINE -#cmakedefine ENABLE_HTTPS #cmakedefine ENABLE_LZ4 #cmakedefine ENABLE_ZSTD #cmakedefine ENABLE_BROTLI @@ -172,6 +174,10 @@ #cmakedefine HAVE_LIBYAML #cmakedefine HAVE_LIBMNL +#cmakedefine HAVE_WEL +#cmakedefine HAVE_ETW +#cmakedefine RUN_UNDER_CLION + // /* Enable GNU extensions on systems that have them. */ // #ifndef _GNU_SOURCE // # define _GNU_SOURCE 1 @@ -182,7 +188,6 @@ // #cmakedefine ENABLE_PROMETHEUS_REMOTE_WRITE // /* NSA spy stuff */ -// #define ENABLE_HTTPS 1 // #cmakedefine01 HAVE_X509_VERIFY_PARAM_set1_host #define HAVE_CRYPTO diff --git a/packaging/cmake/pkg-files/deb/dashboard/postinst b/packaging/cmake/pkg-files/deb/dashboard/postinst new file mode 100755 index 00000000..320a649d --- /dev/null +++ b/packaging/cmake/pkg-files/deb/dashboard/postinst @@ -0,0 +1,11 @@ +#!/bin/sh + +set -e + +case "$1" in + configure|reconfigure) + if ! dpkg-statoverride --list /usr/share/netdata/www > /dev/null 2>&1; then + dpkg-statoverride --update --add root netdata 0755 /usr/share/netdata/www + fi + ;; +esac diff --git a/packaging/cmake/pkg-files/deb/dashboard/postrm b/packaging/cmake/pkg-files/deb/dashboard/postrm new file mode 100755 index 00000000..85438ad1 --- /dev/null +++ b/packaging/cmake/pkg-files/deb/dashboard/postrm @@ -0,0 +1,17 @@ +#!/bin/sh + +set -e + +case "$1" in + remove) ;; + + purge) + if dpkg-statoverride --list | grep -qw /var/lib/netdata/www; then + dpkg-statoverride --remove /var/lib/netdata/www + fi + + if dpkg-statoverride --list | grep -qw /usr/share/netdata/www; then + dpkg-statoverride --remove /usr/share/netdata/www + fi + ;; +esac diff --git a/packaging/cmake/pkg-files/deb/dashboard/preinst b/packaging/cmake/pkg-files/deb/dashboard/preinst new file mode 100755 index 00000000..57615ec0 --- /dev/null +++ b/packaging/cmake/pkg-files/deb/dashboard/preinst @@ -0,0 +1,11 @@ +#!/bin/sh + +set -e + +case "$1" in + install) + if ! getent group netdata > /dev/null; then + addgroup --quiet --system netdata + fi + ;; +esac diff --git a/packaging/cmake/pkg-files/deb/netdata/postinst b/packaging/cmake/pkg-files/deb/netdata/postinst index 97593c23..7d2f0690 100755 --- a/packaging/cmake/pkg-files/deb/netdata/postinst +++ b/packaging/cmake/pkg-files/deb/netdata/postinst @@ -20,10 +20,6 @@ case "$1" in dpkg-statoverride --update --add netdata adm 02750 /var/log/netdata fi - if ! dpkg-statoverride --list /usr/share/netdata/www > /dev/null 2>&1; then - dpkg-statoverride --update --add root netdata 0755 /usr/share/netdata/www - fi - dpkg-statoverride --force --update --add root netdata 0775 /var/lib/netdata/registry > /dev/null 2>&1 grep /usr/libexec/netdata /var/lib/dpkg/info/netdata.list | xargs -n 30 chown root:netdata diff --git a/packaging/cmake/pkg-files/deb/netdata/postrm b/packaging/cmake/pkg-files/deb/netdata/postrm index 7a636863..daf28b74 100755 --- a/packaging/cmake/pkg-files/deb/netdata/postrm +++ b/packaging/cmake/pkg-files/deb/netdata/postrm @@ -10,14 +10,6 @@ case "$1" in dpkg-statoverride --remove /var/cache/netdata fi - if dpkg-statoverride --list | grep -qw /var/lib/netdata/www; then - dpkg-statoverride --remove /var/lib/netdata/www - fi - - if dpkg-statoverride --list | grep -qw /usr/share/netdata/www; then - dpkg-statoverride --remove /usr/share/netdata/www - fi - if dpkg-statoverride --list | grep -qw /var/lib/netdata/registry; then dpkg-statoverride --remove /var/lib/netdata/registry fi diff --git a/packaging/dag/files/child_stream.conf b/packaging/dag/files/child_stream.conf index ed78bd3f..4e37d0a9 100644 --- a/packaging/dag/files/child_stream.conf +++ b/packaging/dag/files/child_stream.conf @@ -2,9 +2,9 @@ enabled = {{ enabled }} destination = {{ destination }} api key = {{ api_key }} - timeout seconds = {{ timeout_seconds }} + timeout = {{ timeout_seconds }} default port = {{ default_port }} send charts matching = {{ send_charts_matching }} buffer size bytes = {{ buffer_size_bytes }} - reconnect delay seconds = {{ reconnect_delay_seconds }} + reconnect delay = {{ reconnect_delay_seconds }} initial clock resync iterations = {{ initial_clock_resync_iterations }} diff --git a/packaging/dag/files/parent_stream.conf b/packaging/dag/files/parent_stream.conf index 15f303f9..4c190a75 100644 --- a/packaging/dag/files/parent_stream.conf +++ b/packaging/dag/files/parent_stream.conf @@ -1,7 +1,7 @@ [{{ api_key }}] enabled = {{ enabled }} allow from = {{ allow_from }} - default history = {{ default_history }} + retention = {{ default_history }} health enabled by default = {{ health_enabled_by_default }} - default postpone alarms on connect seconds = {{ default_postpone_alarms_on_connect_seconds }} + postpone alerts on connect = {{ default_postpone_alarms_on_connect_seconds }} multiple connections = {{ multiple_connections }} diff --git a/packaging/dag/imageutils.py b/packaging/dag/imageutils.py index fd1e8ad2..42aba077 100644 --- a/packaging/dag/imageutils.py +++ b/packaging/dag/imageutils.py @@ -345,7 +345,6 @@ def static_build_netdata( "--dont-wait", "--dont-start-it", "--disable-exporting-mongodb", - "--require-cloud", "--use-system-protobuf", "--dont-scrub-cflags-even-though-it-may-break-things", "--one-time-build", diff --git a/packaging/docker/Dockerfile b/packaging/docker/Dockerfile index b12af313..bbc223a2 100644 --- a/packaging/docker/Dockerfile +++ b/packaging/docker/Dockerfile @@ -3,7 +3,7 @@ # This image contains preinstalled dependencies # hadolint ignore=DL3007 -FROM netdata/builder:v2 as builder +FROM netdata/builder:v2 AS builder # One of 'nightly' or 'stable' ARG RELEASE_CHANNEL=nightly @@ -47,7 +47,6 @@ RUN mkdir -p /app/usr/sbin/ \ mv /var/lib/netdata /app/var/lib/ && \ mv /etc/netdata /app/etc/ && \ mv /usr/sbin/netdata /app/usr/sbin/ && \ - mv /usr/sbin/netdata-claim.sh /app/usr/sbin/ && \ mv /usr/sbin/netdatacli /app/usr/sbin/ && \ mv /usr/sbin/systemd-cat-native /app/usr/sbin/ && \ mv packaging/docker/run.sh /app/usr/sbin/ && \ @@ -60,7 +59,7 @@ RUN mkdir -p /app/usr/sbin/ \ ##################################################################### # This image contains preinstalled dependencies # hadolint ignore=DL3007 -FROM netdata/base:v2 as base +FROM netdata/base:v2 AS base LABEL org.opencontainers.image.authors="Netdatabot <bot@netdata.cloud>" LABEL org.opencontainers.image.url="https://netdata.cloud" @@ -77,11 +76,11 @@ ONBUILD ENV NETDATA_OFFICIAL_IMAGE=false ARG NETDATA_UID=201 ARG NETDATA_GID=201 -ENV DOCKER_GRP netdata -ENV DOCKER_USR netdata +ENV DOCKER_GRP=netdata +ENV DOCKER_USR=netdata # If DISABLE_TELEMETRY is set, it will disable anonymous stats collection and reporting #ENV DISABLE_TELEMETRY=1 -ENV NETDATA_LISTENER_PORT 19999 +ENV NETDATA_LISTENER_PORT=19999 EXPOSE $NETDATA_LISTENER_PORT ENV NETDATA_EXTRA_DEB_PACKAGES="" diff --git a/packaging/docker/README.md b/packaging/docker/README.md index 6deb0cfa..0f9ad23d 100644 --- a/packaging/docker/README.md +++ b/packaging/docker/README.md @@ -1,12 +1,3 @@ -<!-- -title: "Install Netdata with Docker" -custom_edit_url: "https://github.com/netdata/netdata/edit/master/packaging/docker/README.md" -sidebar_label: "Docker" -learn_status: "Published" -learn_rel_path: "Installation/Installation methods" -sidebar_position: 40 ---> - import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; @@ -34,7 +25,7 @@ along with their descriptions. <details open> <summary>Privileges</summary> -| Component | Privileges | Description | +| Component | Privileges | Description | |:---------------------:|:-----------------------------:|--------------------------------------------------------------------------------------------------------------------------| | cgroups.plugin | host PID mode, SYS_ADMIN | Container network interfaces monitoring. Map virtual interfaces in the system namespace to interfaces inside containers. | | proc.plugin | host network mode | Host system networking stack monitoring. | @@ -47,7 +38,7 @@ along with their descriptions. <details open> <summary>Mounts</summary> -| Component | Mounts | Description | +| Component | Mounts | Description | |:----------------------:|:--------------------------:|--------------------------------------------------------------------------------------------------------------------------------------------| | netdata | /etc/os-release | Host info detection. | | diskspace.plugin | / | Host mount points monitoring. | @@ -177,14 +168,12 @@ Add `- /run/dbus:/run/dbus:ro` to the netdata service `volumes`. ### With NVIDIA GPUs monitoring - Monitoring NVIDIA GPUs requires: - Using official [NVIDIA driver](https://www.nvidia.com/Download/index.aspx). - Installing [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html). - Allowing the Netdata container to access GPU resources. - <Tabs> <TabItem value="docker_run" label="docker run"> @@ -366,6 +355,7 @@ services: volumes: caddy_data: caddy_config: + netdataconfig: netdatalib: netdatacache: ``` diff --git a/packaging/docker/run.sh b/packaging/docker/run.sh index 6ba16d1c..56a818d2 100755 --- a/packaging/docker/run.sh +++ b/packaging/docker/run.sh @@ -110,14 +110,4 @@ if [ -w "/etc/netdata" ]; then fi fi -if [ -n "${NETDATA_CLAIM_URL}" ] && [ -n "${NETDATA_CLAIM_TOKEN}" ] && [ ! -f /var/lib/netdata/cloud.d/claimed_id ]; then - # shellcheck disable=SC2086 - /usr/sbin/netdata-claim.sh -token="${NETDATA_CLAIM_TOKEN}" \ - -url="${NETDATA_CLAIM_URL}" \ - ${NETDATA_CLAIM_ROOMS:+-rooms="${NETDATA_CLAIM_ROOMS}"} \ - ${NETDATA_CLAIM_PROXY:+-proxy="${NETDATA_CLAIM_PROXY}"} \ - ${NETDATA_EXTRA_CLAIM_OPTS} \ - -daemon-not-running -fi - exec /usr/sbin/netdata -u "${DOCKER_USR}" -D -s /host -p "${NETDATA_LISTENER_PORT}" "$@" diff --git a/packaging/installer/README.md b/packaging/installer/README.md index d15925dc..1c43cdf8 100644 --- a/packaging/installer/README.md +++ b/packaging/installer/README.md @@ -6,150 +6,15 @@ Netdata is very flexible and can be used to monitor all kinds of infrastructure. The easiest way to install Netdata on your system is via Netdata Cloud, to do so: -1. Sign up to <https://app.netdata.cloud/>. -2. You will be presented with an empty space, and a prompt to "Connect Nodes" with the install command for each platform. -3. Select the platform you want to install Netdata to, copy and paste the script into your node's terminal, and run it. +1. Sign in to <https://app.netdata.cloud/>. +2. Select a [Space](/docs/netdata-cloud/organize-your-infrastructure-invite-your-team.md#netdata-cloud-spaces), and click the "Connect Nodes" prompt, which will show the install command for your platform of choice. +3. Copy and paste the script into your node's terminal, and run it. Once Netdata is installed, you can see the node live in your Netdata Space and charts in the [Metrics tab](/docs/dashboards-and-charts/metrics-tab-and-single-node-tabs.md). -Take a look at our [Dashboards and Charts](/docs/dashboards-and-charts/README.md) section to read more about Netdata's features. +## Anonymous statistics -## Post-install - -### Configuration - -If you are looking to configure your Netdata Agent installation, refer to the [respective section in our Documentation](/docs/netdata-agent/configuration/README.md). - -### Data collection - -If Netdata didn't autodetect all the hardware, containers, services, or applications running on your node, you should learn more about [how data collectors work](/src/collectors/README.md). If there's a [supported integration](/src/collectors/COLLECTORS.md) for metrics you need, refer to its respective page and read about its requirements to configure your endpoint to publish metrics in the correct format and endpoint. - -### Alerts & notifications - -Netdata comes with hundreds of pre-configured alerts, designed by our monitoring gurus in parallel with our open-source community, but you may want to [edit alerts](/src/health/REFERENCE.md) or [enable notifications](/docs/alerts-and-notifications/notifications/README.md) to customize your Netdata experience. - -### Make your deployment production ready - -Go through our [deployment guides](/docs/deployment-guides/README.md), for suggested configuration changes for production deployments. - -## Advanced installation options and troubleshooting - -### Automatic updates - -By default, Netdata's installation scripts enable automatic updates for both nightly and stable release channels. - -If you preferred to update your Netdata Agent manually, you can disable automatic updates by using the `--no-updates` -option when you install or update Netdata using the [automatic one-line installation script](/packaging/installer/methods/kickstart.md). - -```bash -wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --no-updates -``` - -With automatic updates disabled, you can choose exactly when and how you [update Netdata](/packaging/installer/UPDATE.md). - -### Nightly vs. Stable Releases - -**Nightly**: We create nightly builds every 24 hours. They contain fully-tested code that fixes bugs or security flaws, -or introduces new features to Netdata. Every nightly release is a candidate for then becoming a stable release—when -we're ready, we simply change the release tags on GitHub. That means nightly releases are stable and proven to function -correctly in the vast majority of Netdata use cases. That's why nightly is the _best choice for most Netdata users_. - -**Stable**: We create stable releases whenever we believe the code has reached a major milestone. Most often, stable -releases correlate with the introduction of new, significant features. Stable releases might be a better choice for -those who run Netdata in _mission-critical production systems_, as updates will come more infrequently, and only after -the community helps fix any bugs that might have been introduced in previous releases. - -**Pros of using nightly releases:** - -- Get the latest features and bug fixes as soon as they're available -- Receive security-related fixes immediately -- Use stable, fully-tested code that's always improving -- Leverage the same Netdata experience our community is using - -**Pros of using stable releases:** - -- Protect yourself from the rare instance when major bugs slip through our testing and negatively affect a Netdata installation -- Retain more control over the Netdata version you use - -### Anonymous statistics - -Starting with v1.30, Netdata collects anonymous usage information by default and sends it to a self-hosted PostHog instance within the Netdata infrastructure. Read about the information collected, and learn how to-opt, on our [anonymous statistics](/docs/netdata-agent/configuration/anonymous-telemetry-events.md) page. +Netdata collects anonymous usage information by default and sends it to a self-hosted PostHog instance within the Netdata infrastructure. Read about the information collected on our [anonymous statistics](/docs/netdata-agent/configuration/anonymous-telemetry-events.md) documentation page. The usage statistics are _vital_ for us, as we use them to discover bugs and prioritize new features. We thank you for _actively_ contributing to Netdata's future. - -### Troubleshooting and known issues - -We are tracking a few issues related to installation and packaging. - -#### Installs on hosts without IPv4 connectivity - -Our regular installation process requires access to a number of GitHub services that do not have IPv6 connectivity. As -such, using the kickstart install script on such hosts generally does not work, and will typically fail with an -error from cURL or wget about connection timeouts. You can check if your system is affected by this by attempting -to connect to (or ping) `https://api.github.com/`. Failing to connect indicates that you are affected by this issue. - -There are three potential workarounds for this: - -1. You can configure your system with a proper IPv6 transition mechanism, such as NAT64. GitHub’s anachronisms - affect many projects other than just Netdata, and there are unfortunately a number of other services out there - that do not provide IPv6 connectivity, so taking this route is likely to save you time in the future as well. -2. If you are using a system that we publish native packages for (see our [platform support - policy](/docs/netdata-agent/versions-and-platforms.md) for more details), - you can manually set up our native package repositories as outlined in our [native package install - documentation](/packaging/installer/methods/packages.md). Our official - package repositories do provide service over IPv6, so they work without issue on hosts without IPv4 connectivity. -3. If neither of the above options work for you, you can still install using our [offline installation - instructions](/packaging/installer/methods/offline.md), though - do note that the offline install source must be prepared from a system with IPv4 connectivity. - -#### Older distributions (Ubuntu 14.04, Debian 8, CentOS 6) and OpenSSL - -If you're running an older Linux distribution or one that has reached EOL, such as Ubuntu 14.04 LTS, Debian 8, or CentOS -6, your Agent may not be able to securely connect to Netdata Cloud due to an outdated version of OpenSSL. These old -versions of OpenSSL cannot perform [hostname validation](https://wiki.openssl.org/index.php/Hostname_validation), which -helps securely encrypt SSL connections. - -If you choose to continue using the outdated version of OpenSSL, your node will still connect to Netdata Cloud, albeit -with hostname verification disabled. Without verification, your Netdata Cloud connection could be vulnerable to -man-in-the-middle attacks. - -#### CentOS 6 and CentOS 8 - -To install the Agent on certain CentOS and RHEL systems, you must enable non-default repositories, such as EPEL or -PowerTools, to gather hard dependencies. See the [CentOS 6](/packaging/installer/methods/manual.md#centos--rhel-6x) and -[CentOS 8](/packaging/installer/methods/manual.md#centos--rhel-8x) sections for more information. - -#### Access to file is not permitted - -If you see an error similar to `Access to file is not permitted: /usr/share/netdata/web/index.html` when you try to -visit the Agent dashboard at `http://NODE:19999`, you need to update Netdata's permissions to match those of your -system. - -Run `ls -la /usr/share/netdata/web/index.html` to find the file's permissions. You may need to change this path based on -the error you're seeing in your browser. In the below example, the file is owned by the user `root` and the group -`root`. - -```bash -ls -la /usr/share/netdata/web/index.html --rw-r--r--. 1 root root 89377 May 5 06:30 /usr/share/netdata/web/index.html -``` - -These files need to have the same user and group used to install your netdata. Suppose you installed netdata with user -`netdata` and group `netdata`, in this scenario you will need to run the following command to fix the error: - -```bash -# chown -R netdata:netdata /usr/share/netdata/web -``` - -#### Multiple versions of OpenSSL - -We've received reports from the community about issues with running the `kickstart.sh` script on systems that have both -a distribution-installed version of OpenSSL and a manually-installed local version. The Agent's installer cannot handle -both. - -#### Clang compiler on Linux - -Our current build process has some issues when using certain configurations of the `clang` C compiler on Linux. See [the -section on `nonrepresentable section on output` -errors](/packaging/installer/methods/manual.md#nonrepresentable-section-on-output-errors) for a workaround. diff --git a/packaging/installer/REINSTALL.md b/packaging/installer/REINSTALL.md deleted file mode 100644 index eeb0e231..00000000 --- a/packaging/installer/REINSTALL.md +++ /dev/null @@ -1,65 +0,0 @@ -# Reinstall Netdata - -In certain situations, such as needing to enable a feature or troubleshoot an issue, you may need to reinstall the -Netdata Agent on your node. - -## One-line installer script (`kickstart.sh`) - -### Reinstalling with the same install type - -Run the one-line installer script with the `--reinstall` parameter to reinstall the Netdata Agent. This will preserve -any [user configuration](/docs/netdata-agent/configuration/README.md) in `netdata.conf` or other files, and will keep the same install -type that was used for the original install. - -If you used any [optional -parameters](/packaging/installer/methods/kickstart.md#optional-parameters-to-alter-your-installation) during initial -installation, you need to pass them to the script again during reinstallation. If you cannot remember which options you -used, read the contents of the `.environment` file and look for a `REINSTALL_OPTIONS` line. This line contains a list of -optional parameters. - -```bash -wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --reinstall -``` - -### Performing a clean reinstall - -Run the one-line installer script with the `--reinstall-clean` parameter to perform a clean reinstall of the -Netdata Agent. This will wipe all existing configuration and historical data, but can be useful sometimes for -getting a badly broken installation working again. Unlike the regular `--reinstall` parameter, this may use a -different install type than the original install used. - -If you used any [optional -parameters](/packaging/installer/methods/kickstart.md#optional-parameters-to-alter-your-installation) during initial -installation, you need to pass them to the script again during reinstallation. If you cannot remember which options you -used, read the contents of the `.environment` file and look for a `REINSTALL_OPTIONS` line. This line contains a list of -optional parameters. - -```bash -wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --reinstall-clean -``` - -### Changing the install type of an existing installation - -The clean reinstall procedure outlined above can also be used to manually change the install type for an existing -installation. Without any extra parameters, it will automatically pick the preferred installation type for your -system, even if that has changed since the original install. If you want to force use of a specific install type, -you can use the `--native-only`, `--static-only`, or `--build-only` parameter to control which install type gets -used, just like with a new install. - -When using the `--reinstall-clean` option to change the install type, you will need to manually preserve any -configuration or historical data you want to keep. The following directories may need to be preserved: - -- `/etc/netdata` (`/opt/netdata/etc/netdata` for static installs): For agent configuration. -- `/var/lib/netdata` (`/opt/netdata/var/lib/netdata` for static installs): For claiming configuration. -- `/var/cache/netdata` (`/opt/netdata/var/cache/netdata` for static installs): For historical data. - -When copying these directories back after the reinstall, you may need to update file ownership by running `chown --R netdata:netdata` on them. - -## Troubleshooting - -If you still experience problems with your Netdata Agent installation after following one of these processes, the next -best route is to [uninstall](/packaging/installer/UNINSTALL.md) and then try a fresh installation using the [one-line -installer](/packaging/installer/methods/kickstart.md). - -You can also post to our [community forums](https://community.netdata.cloud) or create a new [bug report](https://github.com/netdata/netdata/issues/new?assignees=&labels=bug%2Cneeds+triage&template=BUG_REPORT.yml). diff --git a/packaging/installer/UNINSTALL.md b/packaging/installer/UNINSTALL.md index c7de90d9..87fe9395 100644 --- a/packaging/installer/UNINSTALL.md +++ b/packaging/installer/UNINSTALL.md @@ -1,77 +1,76 @@ # Uninstall Netdata -> ### Note -> -> If you're having trouble updating Netdata, moving from one installation method to another, or generally having -> issues with your Netdata Agent installation, consider our [reinstalling Netdata](/packaging/installer/REINSTALL.md) instead of removing the Netdata Agent entirely. +## UNIX -The recommended method to uninstall Netdata on a system is to use our kickstart installer script with the `--uninstall` option like so: +> **Note** +> +> This method assumes you installed Netdata using the `kickstart.sh` or `netdata-installer.sh` script. +> If you used a different method, it might not work and could complicate the removal process. -```sh +Similarly with our documentation on updating Netdata, you need to [determine your installation type](/packaging/installer/UPDATE.md). + +**If your installation type indicates a native package, then proceed to uninstall Netdata using your package manager.** + +The recommended way to uninstall Netdata is to use the same script you used for installation. Just add the `--uninstall` flag: + +```bash wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --uninstall ``` -Or (if you have curl but not wget): +<details> +<summary>if you have curl but not wget</summary> ```sh curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --uninstall ``` -This will work in most cases without you needing to do anything more other than accepting removal of configuration -and data files. +</details> -If you used a non-standard installation prefix, you may need to specify that prefix using the `--old-install-prefix` -option when uninstalling this way. -## Unofficial installs +**What to Expect**: -If you used a third-party package to install Netdata, then the above method will usually not work, and you will -need to use whatever mechanism you used to originally install Netdata to uninstall it. +In most cases, these commands will guide you through the uninstallation process and remove configuration and data files automatically. -## Uninstalling manually +**Non-Standard Installations**: -Most official installs of Netdata include an uninstaller script that can be manually invoked instead of using the -kickstart script (internally, the kickstart script also uses this uninstaller script, it just handles the process -outlined below for you). +If you installed Netdata with a custom prefix (different directory location), you may need to specify the original prefix during uninstallation with the `--old-install-prefix` option. -This uninstaller script is self-contained other than requiring a `.environment` file that was generated during -installation. In most cases, this will be found in `/etc/netdata/.environment`, though if you used a non-standard -installation prefix it will usually be located in a similar place under that prefix. +### Uninstalling manually -A workflow for uninstallation looks like this: +Most official installations of Netdata include an uninstaller script that can be manually invoked instead of using the kickstart script (internally, the kickstart script also uses this uninstaller script, it just handles the process outlined below for you). -1. Find your `.environment` file, which is usually `/etc/netdata/.environment` in a default installation. -2. If you cannot find that file and would like to uninstall Netdata, then create a new file with the following content: +This uninstaller script is self-contained, other than requiring a `.environment` file that was generated during installation. In most cases, this will be found in `/etc/netdata/.environment`, though if you used a custom installation prefix it be located under that directory. -```sh -NETDATA_PREFIX="<installation prefix>" # put what you used as a parameter to shell installed `--install-prefix` flag. Otherwise it should be empty -NETDATA_ADDED_TO_GROUPS="<additional groups>" # Additional groups for a user running the Netdata process -``` +1. Find your `.environment` file +2. If you can’t find that file and would like to uninstall Netdata, then create a new file with the following content: + + ```sh + NETDATA_PREFIX="<installation prefix>" # put what you used as a parameter to shell installed `--install-prefix` flag. Otherwise it should be empty + NETDATA_ADDED_TO_GROUPS="<additional groups>" # Additional groups for a user running the Netdata process + ``` -3. Run `netdata-uninstaller.sh` as follows +3. Run `netdata-uninstaller.sh` as follows - 3.1 **Interactive mode (Default)** + - **Interactive mode (Default)** - The default mode in the uninstaller script is **interactive**. This means that the script provides you - the option to reply with "yes" (`y`/`Y`) or "no" (`n`/`N`) to control the removal of each Netdata asset in - the filesystem. + The default mode in the uninstaller script is **interactive**. This means that the script provides you the option to reply with "yes" (`y`/`Y`) or "no" (`n`/`N`) to control the removal of each Netdata asset in the filesystem. - ```sh - ${NETDATA_PREFIX}/usr/libexec/netdata/netdata-uninstaller.sh --yes --env <environment_file> - ``` + ```sh + ${NETDATA_PREFIX}/usr/libexec/netdata/netdata-uninstaller.sh --yes --env <environment_file> + ``` - 3.2 **Non-interactive mode** + - **Non-interactive mode** - If you are sure and you know what you are doing, you can speed up the removal of the Netdata assets from the - filesystem without any questions by using the force option (`-f`/`--force`). This option will remove all the - Netdata assets in a **non-interactive** mode. + If you’re sure, and you know what you’re doing, you can speed up the removal of the Netdata assets from the filesystem without any questions by using the force option (`-f`/`--force`). This option will remove all the + Netdata assets in a **non-interactive** mode. - ```sh - ${NETDATA_PREFIX}/usr/libexec/netdata/netdata-uninstaller.sh --yes --force --env <environment_file> - ``` + ```sh + ${NETDATA_PREFIX}/usr/libexec/netdata/netdata-uninstaller.sh --yes --force --env <environment_file> + ``` -Note: Existing installations may still need to download the file if it's not present. To execute uninstall in that case, -run the following commands: +> **Note** +> +> Existing installations may still need to download the file if it's not present. To execute the uninstaller in that case, run the following commands: ```sh wget https://raw.githubusercontent.com/netdata/netdata/master/packaging/installer/netdata-uninstaller.sh @@ -79,7 +78,9 @@ chmod +x ./netdata-uninstaller.sh ./netdata-uninstaller.sh --yes --env <environment_file> ``` -The default `environment_file` is `/etc/netdata/.environment`. +## Windows + +Currently, the Windows version of Netdata is in beta. To uninstall Netdata on Windows: -> Note: This uninstallation method assumes previous installation with `netdata-installer.sh` or the kickstart script. -> Using it when Netdata was installed in some other way will usually not work correctly, and may make it harder to uninstall Netdata. +1. Locate the `Uninstall.exe` file in your Netdata installation directory. +2. Double-click the `Uninstall.exe` file and follow the on-screen instructions. diff --git a/packaging/installer/UPDATE.md b/packaging/installer/UPDATE.md index 94faa881..d77e9c62 100644 --- a/packaging/installer/UPDATE.md +++ b/packaging/installer/UPDATE.md @@ -1,31 +1,15 @@ # Update Netdata -By default, the Netdata Agent automatically updates with the latest nightly or stable version depending on which -you installed. If you opted out of automatic updates, you need to update your Netdata Agent to the latest nightly -or stable version. You can also [enable or disable automatic updates on an existing install](#control-automatic-updates). +The update process can differ based on the install type: -> 💡 Looking to reinstall the Netdata Agent to enable a feature, update an Agent that cannot update automatically, or -> troubleshoot an error during the installation process? See our [reinstallation doc](/packaging/installer/REINSTALL.md) -> for reinstallation steps. - -Before you update the Netdata Agent, check to see if your Netdata Agent is already up-to-date by clicking on the update -icon in the local Agent dashboard's top navigation. This modal informs you whether your Agent needs an update or not. - -The exact update method to use depends on the install type: - -- Installs with an install type of 'custom' usually indicate installing a third-party package through the system - package manager. To update these installs, you should update the package just like you would any other package - on your system. -- Installs with an install type starting with `binpkg` or ending with `build` or `static` can be updated using - our [regular update method](#updates-for-most-systems). -- Installs with an install type of 'oci' were created from our official Docker images, and should be updated - using our [Docker](#docker) update procedure. -- macOS users should check [our update instructions for macOS](#macos). -- Manually built installs should check [our update instructions for manual builds](#manual-installation-from-git). +- Install types starting with `binpkg` or ending with `build` or `static` can be updated using our [kickstart script update method](#unix). +- Installs with an install type of `custom` usually indicate installing a third-party package through the system package manager. To update these installs, you should update the package just like you would any other package on your system. +- macOS users should check [our update instructions for macOS](#macos). +- Manually built installs should check [our update instructions for manual builds](#manual-installation-from-git). ## Determine which installation method you used -Starting with netdata v1.33.0, you can use Netdata itself to determine the installation type by running: +You can run the following to determine your installation type: ```bash netdata -W buildinfo | grep -E 'Installation Type|Install type:' @@ -46,82 +30,38 @@ The following table contains all possible installation types: | custom | Anything not covered by the other identifiers, including manual builds, manually running netdata-installer.sh, and third-party packages (community). | | Unknown | Same as custom. | - -If you are using an older version of Netdata, or the above command produces no output, you can run our one-line -installation script in dry-run mode to attempt to determine what method to use to update by running the following -command: +If you're using an older Netdata version or the above command doesn't output anything, try our one-line installation script in dry-run mode. Run the following command to determine the appropriate update method: ```bash wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --dry-run ``` -Note that if you installed Netdata using an installation prefix, you will need to add an `--install-prefix` option -specifying that prefix to make sure it finds the existing install. +> **Note** +> +> if you installed Netdata using an installation prefix, you will need to add an `--install-prefix` option specifying that prefix to make sure it finds the existing install. -If you see a line starting with `--- Would attempt to update existing installation by running the updater script -located at:`, then our [regular update method](#updates-for-most-systems) will work for you. +If you see a line starting with `--- Would attempt to update existing installation by running the updater script located at:`, then our [kickstart script update method](#unix) will work for you. -Otherwise, it should either indicate that the installation type is not supported (which probably means you either -have a `custom` install or built Netdata manually) or indicate that it would create a new install (which means that -you either used a non-standard install path, or that you don’t actually have Netdata installed). +Otherwise, it should either indicate that the installation type is not supported (which probably means you either have a `custom` install or built Netdata manually) or indicate that it would create a new install (which means that you either used a non-standard install path, or that you don’t actually have Netdata installed). -## Updates for most systems +## UNIX -In most cases, you can update netdata using our one-line installation script. This script will automatically -run the update script that was installed as part of the initial install (even if you disabled automatic updates) -and preserve the existing install options you specified. +In most cases, you can update Netdata using our one-line kickstart script. This script will automatically +run the update script installed as part of the initial install and preserve the existing install options you specified. -If you installed Netdata using an installation prefix, you will need to add an `--install-prefix` option specifying -that prefix to this command to make sure it finds Netdata. +If you installed Netdata using an installation prefix, you will need to add an `--install-prefix` option specifying that prefix to this command to make sure it finds Netdata. ```bash wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh ``` -### Issues with older binpkg installs - -The above command is known not to work with binpkg type installs for stable releases with a version number of -v1.33.1 or earlier, and nightly builds with a version number of v1.33.1-93 or earlier. If you have such a system, -the above command will report that it found an existing install, and then issue a warning about not being able to -find the updater script. - -On such installs, you can update Netdata using your distribution package manager. - -### Updates on hosts without IPv4 connectivity - -The update process outlined above suffers from the same issues that installing on hosts without IPv4 -connectivity does, and requires similar workarounds. For more details check [the explanation in our install -documentation](/packaging/installer/README.md#installs-on-hosts-without-ipv4-connectivity). - -### If the kickstart script does not work - -If the above command fails, you can [reinstall -Netdata](/packaging/installer/REINSTALL.md#one-line-installer-script-kickstartsh) to get the latest version. This -also preserves your [configuration](/docs/netdata-agent/configuration/README.md) in `netdata.conf` or other files just like updating -normally would, though you will need to specify any installation options you used originally again. +## Windows -## Docker - -Docker-based installations do not update automatically. To update an Netdata Agent running in a Docker container, you -must pull the [latest image from Docker Hub](https://hub.docker.com/r/netdata/netdata), stop and remove the container, -and re-create it using the latest image. - -First, pull the latest version of the image. - -```bash -docker pull netdata/netdata:latest -``` - -Next, to stop and remove any containers using the `netdata/netdata` image. Replace `netdata` if you changed it from the -default. - -```bash -docker stop netdata -docker rm netdata -``` +To update a Windows Netdata installation, download the executable and proceed to reinstall the Agent. This will update the installation. -You can now re-create your Netdata container using the `docker` command or a `docker-compose.yml` file. See our [Docker -installation instructions](/packaging/docker/README.md#create-a-new-netdata-agent-container) for details. +> **Note** +> +> The Windows Agent is currently under beta and only available for Nightly releases, and the installer can be found in our [nightlies repo](https://github.com/netdata/netdata-nightlies). A stable version will be released soon. ## macOS @@ -131,25 +71,17 @@ If you installed Netdata on your macOS system using Homebrew, you can explicitly brew upgrade netdata ``` -Homebrew downloads the latest Netdata via the -[formulae](https://github.com/Homebrew/homebrew-core/blob/master/Formula/n/netdata.rb), ensures all dependencies are met, -and updates Netdata via reinstallation. - -If you instead installed Netdata using our one-line installation script, you can use our [regular update -instructions](#updates-for-most-systems) to update Netdata. +Homebrew downloads the latest Netdata via the [formula](https://github.com/Homebrew/homebrew-core/blob/master/Formula/n/netdata.rb), ensures all dependencies are met, and updates Netdata via reinstallation. ## Manual installation from Git -If you installed [Netdata manually from Git](/packaging/installer/methods/manual.md), you can run that installer again -to update your agent. First, run our automatic requirements installer, which works on many Linux distributions, to -ensure your system has the dependencies necessary for new features. +If you installed [Netdata manually from Git](/packaging/installer/methods/manual.md) run our automatic requirements installer, which works on many Linux distributions, to ensure your system has the dependencies necessary for new features. ```bash bash <(curl -sSL https://raw.githubusercontent.com/netdata/netdata/master/packaging/installer/install-required-packages.sh) ``` -Navigate to the directory where you first cloned the Netdata repository, pull the latest source code, and run -`netdata-install.sh` again. This process compiles Netdata with the latest source code and updates it via reinstallation. +Navigate to the directory where you first cloned the Netdata repository, pull the latest source code, and run `netdata-install.sh` again. This process compiles Netdata with the latest source code and updates it via reinstallation. ```bash cd /path/to/netdata/git @@ -157,55 +89,20 @@ git pull origin master sudo ./netdata-installer.sh ``` -> ⚠️ If you installed Netdata with any optional parameters, such as `--no-updates` to disable automatic updates, and -> want to retain those settings, you need to set them again during this process. - -## Control automatic updates - -Starting with Netdata v1.34.0, you can easily enable or disable automatic updates on an existing installation -using the updater script. - -For most installs on Linux, you can enable auto-updates with: - -```bash -/usr/libexec/netdata/netdata-updater.sh --enable-auto-updates -``` - -and disable them with: - -```bash -/usr/libexec/netdata/netdata-updater.sh --disable-auto-updates -``` - -For static installs, instead use: +> **Note** +> +> If you installed Netdata with any optional parameters, such as `--install-prefix` to install under a specific directory, you need to set them again during this process. -```bash -/opt/netdata/usr/libexec/netdata/netdata-updater.sh --enable-auto-updates -``` - -and: - -```bash -/opt/netdata/usr/libexec/netdata/netdata-updater.sh --disable-auto-updates -``` +## Additional info -## Control runtime behavior of the updater script. +### Control runtime behavior of the updater script -Starting with v1.40.0, the `netdata-updater.sh` script supports a config file called `netdata-updater.conf`, -located in the same directory as the main `netdata.conf` file. This file uses POSIX shell script syntax to define -variables that are used by the updater. +Starting with v1.40.0, the `netdata-updater.sh` script supports a config file called `netdata-updater.conf`, located in the same directory as the main `netdata.conf` file. This file uses POSIX shell script syntax to define variables that are used by the updater. -This configuration file can be edited [using our `edit-config` -script](/docs/netdata-agent/configuration/README.md). +This configuration file can be edited using our [`edit-config` script](/docs/netdata-agent/configuration/README.md). The following configuration options are currently supported: -- `NETDATA_UPDATER_JITTER`: Sets an upper limit in seconds on the random delay in the updater script when running - as a scheduled task. This random delay helps avoid issues resulting from too many nodes trying to reconnect to - the Cloud at the same time. The default value is 3600, which corresponds to one hour. Most users should not ever - need to change this. -- `NETDATA_MAJOR_VERSION_UPDATES`: If set to a value other than 0, then new major versions will be installed - without user confirmation. Must be set to a non-zero value for automated updates to install new major versions. -- `NETDATA_NO_SYSTEMD_JOURNAL`: If set to a value other than 0, skip attempting to install the - `netdata-plugin-systemd-journal` package on supported systems on update. This optional package will be installed - by default on supported systems by the updater if this option is not set. Only affects systems using native packages. +- `NETDATA_UPDATER_JITTER`: Sets an upper limit in seconds on the random delay in the updater script when running as a scheduled task. This random delay helps avoid issues resulting from too many nodes trying to reconnect to the Cloud at the same time. The default value is 3600, which corresponds to one hour. Most users shouldn’t ever need to change this. +- `NETDATA_MAJOR_VERSION_UPDATES`: If set to a value other than 0, then new major versions will be installed without user confirmation. Must be set to a non-zero value for automated updates to install new major versions. +- `NETDATA_NO_SYSTEMD_JOURNAL`: If set to a value other than 0, skip attempting to install the `netdata-plugin-systemd-journal` package on supported systems on update. The updater will install this optional package by default on supported systems if this option is not set. It only affects systems using native packages. diff --git a/packaging/installer/functions.sh b/packaging/installer/functions.sh index c339ac87..23328a7a 100644 --- a/packaging/installer/functions.sh +++ b/packaging/installer/functions.sh @@ -303,6 +303,18 @@ prepare_cmake_options() { enable_feature PLUGIN_GO 0 fi + if [ "${ENABLE_PYTHON:-1}" -eq 1 ]; then + enable_feature PLUGIN_PYTHON 1 + else + enable_feature PLUGIN_PYTHON 0 + fi + + if [ "${ENABLE_CHARTS:-1}" -eq 1 ]; then + enable_feature PLUGIN_CHARTS 1 + else + enable_feature PLUGIN_CHARTS 0 + fi + if [ "${USE_SYSTEM_PROTOBUF:-0}" -eq 1 ]; then enable_feature BUNDLED_PROTOBUF 0 else @@ -341,8 +353,6 @@ prepare_cmake_options() { enable_feature PLUGIN_NETWORK_VIEWER "${IS_LINUX}" enable_feature PLUGIN_EBPF "${ENABLE_EBPF:-0}" - enable_feature ACLK "${ENABLE_CLOUD:-1}" - enable_feature CLOUD "${ENABLE_CLOUD:-1}" enable_feature BUNDLED_JSONC "${NETDATA_BUILD_JSON_C:-0}" enable_feature DBENGINE "${ENABLE_DBENGINE:-1}" enable_feature H2O "${ENABLE_H2O:-1}" diff --git a/packaging/installer/install-required-packages.sh b/packaging/installer/install-required-packages.sh index e9790202..f6d6a3e2 100755 --- a/packaging/installer/install-required-packages.sh +++ b/packaging/installer/install-required-packages.sh @@ -411,25 +411,35 @@ detect_package_manager_from_distribution() { centos* | clearos* | rocky* | almalinux*) package_installer="" tree="centos" - [[ -n "${yum}" ]] && package_installer="install_yum" [[ -n "${dnf}" ]] && package_installer="install_dnf" + [[ -n "${yum}" ]] && package_installer="install_yum" if [[ "${IGNORE_INSTALLED}" -eq 0 ]] && [[ -z "${package_installer}" ]]; then echo >&2 "command 'yum' or 'dnf' is required to install packages on a '${distribution} ${version}' system." exit 1 fi ;; - fedora* | redhat* | red\ hat* | rhel*) + redhat* | red\ hat* | rhel*) package_installer= tree="rhel" - [[ -n "${yum}" ]] && package_installer="install_yum" [[ -n "${dnf}" ]] && package_installer="install_dnf" + [[ -n "${yum}" ]] && package_installer="install_yum" + if [[ "${IGNORE_INSTALLED}" -eq 0 ]] && [[ -z "${package_installer}" ]]; then + echo >&2 "command 'yum' or 'dnf' is required to install packages on a '${distribution} ${version}' system." + exit 1 + fi + ;; + + fedora*) + package_installer="install_dnf" + tree="rhel" if [[ "${IGNORE_INSTALLED}" -eq 0 ]] && [[ -z "${package_installer}" ]]; then echo >&2 "command 'yum' or 'dnf' is required to install packages on a '${distribution} ${version}' system." exit 1 fi ;; + ol*) package_installer= tree="ol" @@ -825,6 +835,18 @@ declare -A pkg_libuuid_dev=( ['default']="" ) +declare -A pkg_libcurl_dev=( + ['alpine']="curl-dev" + ['arch']="curl" + ['clearlinux']="devpkg-curl" + ['debian']="libcurl4-openssl-dev" + ['gentoo']="net-misc/curl" + ['ubuntu']="libcurl4-openssl-dev" + ['macos']="curl" + ['freebsd']="curl" + ['default']="libcurl-devel" +) + declare -A pkg_libmnl_dev=( ['alpine']="libmnl-dev" ['arch']="libmnl" @@ -1246,6 +1268,7 @@ packages() { suitable_package libyaml-dev suitable_package libsystemd-dev suitable_package pcre2 + suitable_package libcurl-dev fi # ------------------------------------------------------------------------- @@ -1531,7 +1554,7 @@ install_yum() { validate_install_dnf() { echo >&2 " > Checking if package '${*}' is installed..." - dnf list installed "${*}" > /dev/null 2>&1 || echo "${*}" + dnf list --installed "${*}" > /dev/null 2>&1 || echo "${*}" } install_dnf() { diff --git a/packaging/installer/installer.nsi b/packaging/installer/installer.nsi deleted file mode 100644 index c14ccb59..00000000 --- a/packaging/installer/installer.nsi +++ /dev/null @@ -1,128 +0,0 @@ -!include "MUI2.nsh" -!include "nsDialogs.nsh" -!include "FileFunc.nsh" - -Name "Netdata" -Outfile "netdata-installer.exe" -InstallDir "$PROGRAMFILES\Netdata" -RequestExecutionLevel admin - -!define MUI_ICON "NetdataWhite.ico" -!define MUI_UNICON "NetdataWhite.ico" - -!define ND_UININSTALL_REG "Software\Microsoft\Windows\CurrentVersion\Uninstall\Netdata" - -!define MUI_ABORTWARNING -!define MUI_UNABORTWARNING - -!insertmacro MUI_PAGE_WELCOME -!insertmacro MUI_PAGE_LICENSE "C:\msys64\gpl-3.0.txt" -!insertmacro MUI_PAGE_DIRECTORY -!insertmacro MUI_PAGE_INSTFILES -!insertmacro MUI_PAGE_FINISH - -!insertmacro MUI_UNPAGE_CONFIRM -!insertmacro MUI_UNPAGE_INSTFILES -!insertmacro MUI_UNPAGE_FINISH - -!insertmacro MUI_LANGUAGE "English" - -Function .onInit - nsExec::ExecToLog '$SYSDIR\sc.exe stop Netdata' - pop $0 - ${If} $0 == 0 - nsExec::ExecToLog '$SYSDIR\sc.exe delete Netdata' - pop $0 - ${EndIf} -FunctionEnd - -Function NetdataUninstallRegistry - ClearErrors - WriteRegStr HKLM "${ND_UININSTALL_REG}" \ - "DisplayName" "Netdata - Real-time system monitoring." - WriteRegStr HKLM "${ND_UININSTALL_REG}" \ - "DisplayIcon" "$INSTDIR\Uninstall.exe,0" - WriteRegStr HKLM "${ND_UININSTALL_REG}" \ - "UninstallString" "$INSTDIR\Uninstall.exe" - WriteRegStr HKLM "${ND_UININSTALL_REG}" \ - "RegOwner" "Netdata Inc." - WriteRegStr HKLM "${ND_UININSTALL_REG}" \ - "RegCompany" "Netdata Inc." - WriteRegStr HKLM "${ND_UININSTALL_REG}" \ - "Publisher" "Netdata Inc." - WriteRegStr HKLM "${ND_UININSTALL_REG}" \ - "HelpLink" "https://learn.netdata.cloud/" - WriteRegStr HKLM "${ND_UININSTALL_REG}" \ - "URLInfoAbout" "https://www.netdata.cloud/" - WriteRegStr HKLM "${ND_UININSTALL_REG}" \ - "DisplayVersion" "${CURRVERSION}" - WriteRegStr HKLM "${ND_UININSTALL_REG}" \ - "VersionMajor" "${MAJORVERSION}" - WriteRegStr HKLM "${ND_UININSTALL_REG}" \ - "VersionMinor" "${MINORVERSION}" - - IfErrors 0 +2 - MessageBox MB_ICONEXCLAMATION|MB_OK "Unable to create an entry in the Control Panel!" IDOK end - - ClearErrors - ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 - IntFmt $0 "0x%08X" $0 - WriteRegDWORD HKLM "${ND_UININSTALL_REG}" "EstimatedSize" "$0" - - IfErrors 0 +2 - MessageBox MB_ICONEXCLAMATION|MB_OK "Cannot estimate the installation size." IDOK end - end: -FunctionEnd - -Section "Install Netdata" - SetOutPath $INSTDIR - SetCompress off - - File /r "C:\msys64\opt\netdata\*.*" - - ClearErrors - nsExec::ExecToLog '$SYSDIR\sc.exe create Netdata binPath= "$INSTDIR\usr\bin\netdata.exe" start= delayed-auto' - pop $0 - ${If} $0 != 0 - DetailPrint "Warning: Failed to create Netdata service." - ${EndIf} - - ClearErrors - nsExec::ExecToLog '$SYSDIR\sc.exe description Netdata "Real-time system monitoring service"' - pop $0 - ${If} $0 != 0 - DetailPrint "Warning: Failed to add Netdata service description." - ${EndIf} - - ClearErrors - nsExec::ExecToLog '$SYSDIR\sc.exe start Netdata' - pop $0 - ${If} $0 != 0 - DetailPrint "Warning: Failed to start Netdata service." - ${EndIf} - - WriteUninstaller "$INSTDIR\Uninstall.exe" - - Call NetdataUninstallRegistry -SectionEnd - -Section "Uninstall" - ClearErrors - nsExec::ExecToLog '$SYSDIR\sc.exe stop Netdata' - pop $0 - ${If} $0 != 0 - DetailPrint "Warning: Failed to stop Netdata service." - ${EndIf} - - ClearErrors - nsExec::ExecToLog '$SYSDIR\sc.exe delete Netdata' - pop $0 - ${If} $0 != 0 - DetailPrint "Warning: Failed to delete Netdata service." - ${EndIf} - - RMDir /r "$INSTDIR" - - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Netdata" -SectionEnd - diff --git a/packaging/installer/kickstart.sh b/packaging/installer/kickstart.sh index 72b82be2..6b967678 100755 --- a/packaging/installer/kickstart.sh +++ b/packaging/installer/kickstart.sh @@ -53,11 +53,9 @@ INSTALL_PREFIX="" NETDATA_AUTO_UPDATES="default" NETDATA_CLAIM_URL="https://app.netdata.cloud" NETDATA_COMMAND="default" -NETDATA_DISABLE_CLOUD=0 NETDATA_INSTALLER_OPTIONS="" NETDATA_FORCE_METHOD="" NETDATA_OFFLINE_INSTALL_SOURCE="" -NETDATA_REQUIRE_CLOUD=1 NETDATA_WARNINGS="" RELEASE_CHANNEL="default" @@ -149,8 +147,6 @@ main() { if [ -n "${NETDATA_CLAIM_TOKEN}" ]; then claim - elif [ "${NETDATA_DISABLE_CLOUD}" -eq 1 ]; then - soft_disable_cloud fi set_auto_updates @@ -185,8 +181,6 @@ USAGE: kickstart.sh [options] --native-only Only install if native binary packages are available. --static-only Only install if a static build is available. --build-only Only install using a local build. - --disable-cloud Disable support for Netdata Cloud (default: detect) - --require-cloud Only install if Netdata Cloud can be enabled. Overrides --disable-cloud. --install-prefix <path> Specify an installation prefix for local builds (default: autodetect based on system type). --old-install-prefix <path> Specify an old local builds installation prefix for uninstall/reinstall (if it's not default). --install-version <version> Specify the version of Netdata to install. @@ -1183,41 +1177,6 @@ handle_existing_install() { esac } -soft_disable_cloud() { - set_tmpdir - - cloud_prefix="${INSTALL_PREFIX}/var/lib/netdata/cloud.d" - - run_as_root mkdir -p "${cloud_prefix}" - - cat > "${tmpdir}/cloud.conf" << EOF -[global] - enabled = no -EOF - - run_as_root cp "${tmpdir}/cloud.conf" "${cloud_prefix}/cloud.conf" - - if [ -z "${NETDATA_NO_START}" ]; then - case "${SYSTYPE}" in - Darwin) run_as_root launchctl kickstart -k com.github.netdata ;; - FreeBSD) run_as_root service netdata restart ;; - Linux) - initpath="$(run_as_root readlink /proc/1/exe)" - - if command -v service > /dev/null 2>&1; then - run_as_root service netdata restart - elif command -v rc-service > /dev/null 2>&1; then - run_as_root rc-service netdata restart - elif [ "$(basename "${initpath}" 2> /dev/null)" = "systemd" ]; then - run_as_root systemctl restart netdata - elif [ -f /etc/init.d/netdata ]; then - run_as_root /etc/init.d/netdata restart - fi - ;; - esac - fi -} - confirm_install_prefix() { if [ -n "${INSTALL_PREFIX}" ] && [ "${NETDATA_FORCE_METHOD}" != 'build' ]; then fatal "The --install-prefix option is only supported together with the --build-only option." F0204 @@ -1246,10 +1205,9 @@ check_claim_opts() { # shellcheck disable=SC2235,SC2030 if [ -z "${NETDATA_CLAIM_TOKEN}" ] && [ -n "${NETDATA_CLAIM_ROOMS}" ]; then fatal "Invalid claiming options, claim rooms may only be specified when a token is specified." F0204 - elif [ -z "${NETDATA_CLAIM_TOKEN}" ] && [ -n "${NETDATA_CLAIM_EXTRA}" ]; then + elif [ -z "${NETDATA_CLAIM_TOKEN}" ] && [ -n "${NETDATA_CLAIM_EXTRA}${NETDATA_CLAIM_PROXY}${NETDATA_CLAIM_NORELOAD}${NETDATA_CLAIM_INSECURE}" ]; then + # The above condition checks if _any_ claiming options other than the rooms have been set when the token is unset. fatal "Invalid claiming options, a claiming token must be specified." F0204 - elif [ "${NETDATA_DISABLE_CLOUD}" -eq 1 ] && [ -n "${NETDATA_CLAIM_TOKEN}" ]; then - fatal "Cloud explicitly disabled, but automatic claiming requested. Either enable Netdata Cloud, or remove the --claim-* options." F0204 fi } @@ -1277,6 +1235,93 @@ is_netdata_running() { fi } +write_claim_config() { + if [ -z "${INSTALL_PREFIX}" ] || [ "${INSTALL_PREFIX}" = "/" ]; then + config_path="/etc/netdata" + netdatacli="$(command -v netdatacli)" + elif [ "${INSTALL_PREFIX}" = "/opt/netdata" ]; then + config_path="/opt/netdata/etc/netdata" + netdatacli="/opt/netdata/bin/netdatacli" + elif [ ! -d "${INSTALL_PREFIX}/netdata" ]; then + config_path="${INSTALL_PREFIX}/etc/netdata" + netdatacli="${INSTALL_PREFIX}/usr/sbin/netdatacli" + else + config_path="${INSTALL_PREFIX}/netdata/etc/netdata" + netdatacli="${INSTALL_PREFIX}/netdata/usr/sbin/netdatacli" + fi + + claim_config="${config_path}/claim.conf" + + if [ "${DRY_RUN}" -eq 1 ]; then + progress "Would attempt to write claiming configuration to ${claim_config}" + return 0 + fi + + progress "Writing claiming configuration to ${claim_config}" + + config="[global]" + config="${config}\n url = ${NETDATA_CLAIM_URL}" + config="${config}\n token = ${NETDATA_CLAIM_TOKEN}" + if [ -n "${NETDATA_CLAIM_ROOMS}" ]; then + config="${config}\n rooms = ${NETDATA_CLAIM_ROOMS}" + fi + if [ -n "${NETDATA_CLAIM_PROXY}" ]; then + config="${config}\n proxy = ${NETDATA_CLAIM_PROXY}" + fi + if [ -n "${NETDATA_CLAIM_INSECURE}" ]; then + config="${config}\n insecure = ${NETDATA_CLAIM_INSECURE}" + fi + + run_as_root touch "${claim_config}.tmp" || return 1 + run_as_root chmod 0640 "${claim_config}.tmp" || return 1 + run_as_root chown ":${NETDATA_CLAIM_GROUP:-netdata}" "${claim_config}.tmp" || return 1 + run_as_root sh -c "printf '${config}\\n' > \"${claim_config}.tmp\"" || return 1 + run_as_root mv -f "${claim_config}.tmp" "${claim_config}" || return 1 + + if [ -z "${NETDATA_CLAIM_NORELOAD}" ]; then + run_as_root "${netdatacli}" reload-claiming-state || return 1 + fi +} + +run_claim_script() { + if [ -n "${NETDATA_CLAIM_NORELOAD}" ]; then + NETDATA_CLAIM_EXTRA="${NETDATA_CLAIM_EXTRA} -daemon-not-running" + fi + + if [ -n "${NETDATA_CLAIM_INSECURE}" ]; then + NETDATA_CLAIM_EXTRA="${NETDATA_CLAIM_EXTRA} -insecure" + fi + + if [ -n "${NETDATA_CLAIM_PROXY}" ]; then + if [ "${NETDATA_CLAIM_PROXY}" = "none" ]; then + NETDATA_CLAIM_EXTRA="${NETDATA_CLAIM_EXTRA} -noproxy" + else + NETDATA_CLAIM_EXTRA="${NETDATA_CLAIM_EXTRA} -proxy=${NETDATA_CLAIM_PROXY}" + fi + fi + + # shellcheck disable=SC2086 + run_as_root "${NETDATA_CLAIM_PATH}" -token="${NETDATA_CLAIM_TOKEN}" -rooms="${NETDATA_CLAIM_ROOMS}" -url="${NETDATA_CLAIM_URL}" ${NETDATA_CLAIM_EXTRA} + case $? in + 0) progress "Successfully claimed node" ;; + 1) warning "Unable to claim node due to invalid claiming options. If you are seeing this message, you’ve probably found a bug and should open a bug report at ${AGENT_BUG_REPORT_URL}" ;; + 2) warning "Unable to claim node due to issues creating the claiming directory or preparing the local claiming key. Make sure you have a working openssl command and that ${INSTALL_PREFIX}/var/lib/netdata/cloud.d exists, then try again." ;; + 3) warning "Unable to claim node due to missing dependencies. Usually this means that the Netdata Agent was built without support for Netdata Cloud. If you built the agent from source, please install all needed dependencies for Cloud support. If you used the regular installation script and see this error, please file a bug report at ${AGENT_BUG_REPORT_URL}." ;; + 4) warning "Failed to claim node due to inability to connect to ${NETDATA_CLAIM_URL}. Usually this either means that the specified claiming URL is wrong, or that you are having networking problems." ;; + 5) progress "Successfully claimed node, but was not able to notify the Netdata Agent. You will need to restart the Netdata service on this node before it will show up in the Cloud." ;; + 8) warning "Failed to claim node due to an invalid agent ID. You can usually resolve this by removing ${INSTALL_PREFIX}/var/lib/netdata/registry/netdata.public.unique.id and restarting the agent. Then try to claim it again using the same options." ;; + 9) warning "Failed to claim node due to an invalid node name. This probably means you tried to specify a custom name for this node (for example, using the --claim-hostname option), but the hostname itself was either empty or consisted solely of whitespace. You can resolve this by specifying a valid host name and trying again." ;; + 10) warning "Failed to claim node due to an invalid room ID. This issue is most likely caused by a typo. Please check if the room(s) you are trying to add appear on the list of rooms provided to the --claim-rooms option ('${NETDATA_CLAIM_ROOMS}'). Then verify if the rooms are visible in Netdata Cloud and try again." ;; + 11) warning "Failed to claim node due to an issue with the generated RSA key pair. You can usually resolve this by removing all files in ${INSTALL_PREFIX}/var/lib/netdata/cloud.d and then trying again." ;; + 12) warning "Failed to claim node due to an invalid or expired claiming token. Please check that the token specified with the --claim-token option ('${NETDATA_CLAIM_TOKEN}') matches what you see in the Cloud and try again." ;; + 13) warning "Failed to claim node because the Cloud thinks it is already claimed. If this node was created by cloning a VM or as a container from a template, please remove the file ${INSTALL_PREFIX}/var/lib/netdata/registry/netdata.public.unique.id and restart the agent. Then try to claim it again with the same options. Otherwise, if you are certain this node has never been claimed before, you can use the --claim-id option to specify a new node ID to use for claiming, for example by using the uuidgen command like so: --claim-id \"\$(uuidgen)\"" ;; + 14) warning "Failed to claim node because the node is already in the process of being claimed. You should not need to do anything to resolve this, the node should show up properly in the Cloud soon. If it does not, please report a bug at ${AGENT_BUG_REPORT_URL}." ;; + 15|16|17) warning "Failed to claim node due to an internal server error in the Cloud. Please retry claiming this node later, and if you still see this message file a bug report at ${CLOUD_BUG_REPORT_URL}." ;; + 18) warning "Unable to claim node because this Netdata installation does not have a unique ID yet. Make sure the agent is running and started up correctly, and then try again." ;; + *) warning "Failed to claim node for an unknown reason. This usually means either networking problems or a bug. Please retry claiming later, and if you still see this message file a bug report at ${AGENT_BUG_REPORT_URL}" ;; + esac +} + claim() { if [ "${DRY_RUN}" -eq 1 ]; then progress "Would attempt to claim agent to ${NETDATA_CLAIM_URL}" @@ -1300,17 +1345,18 @@ claim() { NETDATA_CLAIM_PATH="${INSTALL_PREFIX}/netdata/usr/sbin/netdata-claim.sh" fi + method="script" err_msg= err_code= if [ -z "${NETDATA_CLAIM_PATH}" ]; then - err_msg="Unable to claim node: could not find usable claiming script. Reinstalling Netdata may resolve this." - err_code=F050B + method="config" elif [ ! -e "${NETDATA_CLAIM_PATH}" ]; then - err_msg="Unable to claim node: ${NETDATA_CLAIM_PATH} does not exist." - err_code=F0512 + method="config" elif [ ! -f "${NETDATA_CLAIM_PATH}" ]; then err_msg="Unable to claim node: ${NETDATA_CLAIM_PATH} is not a file." err_code=F0513 + elif grep -q '%%NEW_CLAIMING_METHOD%%' "${NETDATA_CLAIM_PATH}"; then + method="config" elif [ ! -x "${NETDATA_CLAIM_PATH}" ]; then err_msg="Unable to claim node: claiming script at ${NETDATA_CLAIM_PATH} is not executable. Reinstalling Netdata may resolve this." err_code=F0514 @@ -1326,34 +1372,16 @@ claim() { fi if ! is_netdata_running; then - NETDATA_CLAIM_EXTRA="${NETDATA_CLAIM_EXTRA} -daemon-not-running" + NETDATA_CLAIM_NORELOAD=1 fi - # shellcheck disable=SC2086 - run_as_root "${NETDATA_CLAIM_PATH}" -token="${NETDATA_CLAIM_TOKEN}" -rooms="${NETDATA_CLAIM_ROOMS}" -url="${NETDATA_CLAIM_URL}" ${NETDATA_CLAIM_EXTRA} - case $? in - 0) - progress "Successfully claimed node" - return 0 - ;; - 1) warning "Unable to claim node due to invalid claiming options. If you are seeing this message, you’ve probably found a bug and should open a bug report at ${AGENT_BUG_REPORT_URL}" ;; - 2) warning "Unable to claim node due to issues creating the claiming directory or preparing the local claiming key. Make sure you have a working openssl command and that ${INSTALL_PREFIX}/var/lib/netdata/cloud.d exists, then try again." ;; - 3) warning "Unable to claim node due to missing dependencies. Usually this means that the Netdata Agent was built without support for Netdata Cloud. If you built the agent from source, please install all needed dependencies for Cloud support. If you used the regular installation script and see this error, please file a bug report at ${AGENT_BUG_REPORT_URL}." ;; - 4) warning "Failed to claim node due to inability to connect to ${NETDATA_CLAIM_URL}. Usually this either means that the specified claiming URL is wrong, or that you are having networking problems." ;; - 5) - progress "Successfully claimed node, but was not able to notify the Netdata Agent. You will need to restart the Netdata service on this node before it will show up in the Cloud." - return 0 + case ${method} in + script) run_claim_script ;; + config) + if ! write_claim_config; then + warning "Failed to write claiming configuration. This usually means you do not have permissions to access the configuration directory." + fi ;; - 8) warning "Failed to claim node due to an invalid agent ID. You can usually resolve this by removing ${INSTALL_PREFIX}/var/lib/netdata/registry/netdata.public.unique.id and restarting the agent. Then try to claim it again using the same options." ;; - 9) warning "Failed to claim node due to an invalid node name. This probably means you tried to specify a custom name for this node (for example, using the --claim-hostname option), but the hostname itself was either empty or consisted solely of whitespace. You can resolve this by specifying a valid host name and trying again." ;; - 10) warning "Failed to claim node due to an invalid room ID. This issue is most likely caused by a typo. Please check if the room(s) you are trying to add appear on the list of rooms provided to the --claim-rooms option ('${NETDATA_CLAIM_ROOMS}'). Then verify if the rooms are visible in Netdata Cloud and try again." ;; - 11) warning "Failed to claim node due to an issue with the generated RSA key pair. You can usually resolve this by removing all files in ${INSTALL_PREFIX}/var/lib/netdata/cloud.d and then trying again." ;; - 12) warning "Failed to claim node due to an invalid or expired claiming token. Please check that the token specified with the --claim-token option ('${NETDATA_CLAIM_TOKEN}') matches what you see in the Cloud and try again." ;; - 13) warning "Failed to claim node because the Cloud thinks it is already claimed. If this node was created by cloning a VM or as a container from a template, please remove the file ${INSTALL_PREFIX}/var/lib/netdata/registry/netdata.public.unique.id and restart the agent. Then try to claim it again with the same options. Otherwise, if you are certain this node has never been claimed before, you can use the --claim-id option to specify a new node ID to use for claiming, for example by using the uuidgen command like so: --claim-id \"\$(uuidgen)\"" ;; - 14) warning "Failed to claim node because the node is already in the process of being claimed. You should not need to do anything to resolve this, the node should show up properly in the Cloud soon. If it does not, please report a bug at ${AGENT_BUG_REPORT_URL}." ;; - 15|16|17) warning "Failed to claim node due to an internal server error in the Cloud. Please retry claiming this node later, and if you still see this message file a bug report at ${CLOUD_BUG_REPORT_URL}." ;; - 18) warning "Unable to claim node because this Netdata installation does not have a unique ID yet. Make sure the agent is running and started up correctly, and then try again." ;; - *) warning "Failed to claim node for an unknown reason. This usually means either networking problems or a bug. Please retry claiming later, and if you still see this message file a bug report at ${AGENT_BUG_REPORT_URL}" ;; esac if [ "${ACTION}" = "claim" ]; then @@ -1938,12 +1966,6 @@ build_and_install() { opts="${opts} --stable-channel" fi - if [ "${NETDATA_REQUIRE_CLOUD}" -eq 1 ]; then - opts="${opts} --require-cloud" - elif [ "${NETDATA_DISABLE_CLOUD}" -eq 1 ]; then - opts="${opts} --disable-cloud" - fi - # shellcheck disable=SC2086 run_script ./netdata-installer.sh ${opts} @@ -2392,12 +2414,10 @@ parse_args() { esac ;; "--disable-cloud") - NETDATA_DISABLE_CLOUD=1 - NETDATA_REQUIRE_CLOUD=0 + warning "Cloud cannot be disabled" ;; "--require-cloud") - NETDATA_DISABLE_CLOUD=0 - NETDATA_REQUIRE_CLOUD=1 + warning "Cloud is always required" ;; "--dont-start-it") NETDATA_NO_START=1 @@ -2447,26 +2467,21 @@ parse_args() { "--native-only") NETDATA_FORCE_METHOD="native" ;; "--static-only") NETDATA_FORCE_METHOD="static" ;; "--build-only") NETDATA_FORCE_METHOD="build" ;; - "--claim-token") - NETDATA_CLAIM_TOKEN="${2}" - shift 1 - ;; - "--claim-rooms") - NETDATA_CLAIM_ROOMS="${2}" - shift 1 - ;; - "--claim-url") - NETDATA_CLAIM_URL="${2}" - shift 1 - ;; "--claim-"*) optname="$(echo "${1}" | cut -d '-' -f 4-)" case "${optname}" in - id|proxy|user|hostname) + token) NETDATA_CLAIM_TOKEN="${2}"; shift 1 ;; + rooms) NETDATA_CLAIM_ROOMS="${2}"; shift 1 ;; + url) NETDATA_CLAIM_URL="${2}"; shift 1 ;; + proxy) NETDATA_CLAIM_PROXY="${2}"; shift 1 ;; + noproxy) NETDATA_CLAIM_PROXY="none" ;; + insecure) NETDATA_CLAIM_INSECURE=yes ;; + noreload) NETDATA_CLAIM_NORELOAD=1 ;; + id|user|hostname) NETDATA_CLAIM_EXTRA="${NETDATA_CLAIM_EXTRA} -${optname}=${2}" shift 1 ;; - verbose|insecure|noproxy|noreload|daemon-not-running) NETDATA_CLAIM_EXTRA="${NETDATA_CLAIM_EXTRA} -${optname}" ;; + verbose|daemon-not-running) NETDATA_CLAIM_EXTRA="${NETDATA_CLAIM_EXTRA} -${optname}" ;; *) warning "Ignoring unrecognized claiming option ${optname}" ;; esac ;; diff --git a/packaging/installer/methods/ansible.md b/packaging/installer/methods/ansible.md index 0aadeff9..82e4095f 100644 --- a/packaging/installer/methods/ansible.md +++ b/packaging/installer/methods/ansible.md @@ -1,16 +1,6 @@ -<!-- -title: "Deploy Netdata with Ansible" -description: "Deploy an infrastructure monitoring solution in minutes with the Netdata Agent and Ansible. Use and customize a simple playbook for monitoring as code." -image: /img/seo/guides/deploy/ansible.png -custom_edit_url: https://github.com/netdata/netdata/edit/master/packaging/installer/methods/ansible.md -sidebar_label: "Ansible" -learn_status: "Published" -learn_rel_path: "Installation/Install on specific environments" ---> - # Deploy Netdata with Ansible -Netdata's [one-line kickstart](/packaging/installer/README.md#install-on-linux-with-one-line-installer) is zero-configuration, highly adaptable, and compatible with tons +Netdata's [one-line kickstart](/packaging/installer/README.md) is zero-configuration, highly adaptable, and compatible with tons of different operating systems and Linux distributions. You can use it on bare metal, VMs, containers, and everything in-between. @@ -22,7 +12,7 @@ code? Enter [Ansible](https://ansible.com), a popular system provisioning, configuration management, and infrastructure as code (IaC) tool. Ansible uses **playbooks** to glue many standardized operations together with a simple syntax, then run those operations over standard and secure SSH connections. There's no agent to install on the remote system, so all you -have to worry about is your application and your monitoring software. +have to worry about is your application and your monitoring software. Ansible has some competition from the likes of [Puppet](https://puppet.com/) or [Chef](https://www.chef.io/), but the most valuable feature about Ansible is **idempotent**. From the [Ansible @@ -42,9 +32,9 @@ minutes. ## Prerequisites -- A Netdata Cloud account. [Sign in and create one](https://app.netdata.cloud) if you don't have one already. -- An administration system with [Ansible](https://www.ansible.com/) installed. -- One or more nodes that your administration system can access via [SSH public +- A Netdata Cloud account. [Sign in and create one](https://app.netdata.cloud) if you don't have one already. +- An administration system with [Ansible](https://www.ansible.com/) installed. +- One or more nodes that your administration system can access via [SSH public keys](https://git-scm.com/book/en/v2/Git-on-the-Server-Generating-Your-SSH-Public-Key) (preferably password-less). ## Download and configure the playbook @@ -71,9 +61,9 @@ cd ansible-quickstart The `hosts` file contains a list of IP addresses or hostnames that Ansible will try to run the playbook against. The `hosts` file that comes with the repository contains two example IP addresses, which you should replace according to the -IP address/hostname of your nodes. +IP address/hostname of your nodes. -```conf +```text 203.0.113.0 hostname=node-01 203.0.113.1 hostname=node-02 ``` @@ -86,7 +76,7 @@ omit the `hostname=` string entirely to use the system's default hostname. If you SSH into your nodes as a user other than `root`, you need to configure `hosts` according to those user names. Use the `ansible_user` variable to set the login user. For example: -```conf +```text 203.0.113.0 hostname=ansible-01 ansible_user=example ``` @@ -96,7 +86,7 @@ If you use an SSH key other than `~/.ssh/id_rsa` for logging into your nodes, yo the `hosts` file with the `ansible_ssh_private_key_file` variable. For example, to log into a Lightsail instance using two different SSH keys supplied by AWS. -```conf +```text 203.0.113.0 hostname=ansible-01 ansible_ssh_private_key_file=~/.ssh/LightsailDefaultKey-us-west-2.pem 203.0.113.1 hostname=ansible-02 ansible_ssh_private_key_file=~/.ssh/LightsailDefaultKey-us-east-1.pem ``` @@ -110,7 +100,7 @@ and `claim_room` variables. To find your `claim_token` and `claim_room`, go to Netdata Cloud, then click on your Space's name in the top navigation, then click on **Manage your Space**. Click on the **Nodes** tab in the panel that appears, which displays a script with -`token` and `room` strings. +`token` and `room` strings. ![Animated GIF of finding the claiming script and the token and room strings](https://user-images.githubusercontent.com/1153921/98740235-f4c3ac00-2367-11eb-8ffd-e9ab0f04c463.gif) @@ -123,7 +113,7 @@ claim_rooms: XXXXX ``` Change the `dbengine_multihost_disk_space` if you want to change the metrics retention policy by allocating more or less -disk space for storing metrics. The default is 2048 Mib, or 2 GiB. +disk space for storing metrics. The default is 2048 Mib, or 2 GiB. Because we're connecting this node to Netdata Cloud, and will view its dashboards there instead of via the IP address or hostname of the node, the playbook disables that local dashboard by setting `web_mode` to `none`. This gives a small diff --git a/packaging/installer/methods/aws.md b/packaging/installer/methods/aws.md index 8648a8f0..b6818709 100644 --- a/packaging/installer/methods/aws.md +++ b/packaging/installer/methods/aws.md @@ -1,12 +1,3 @@ -<!-- -title: "Install Netdata on AWS" -description: "The Netdata Agent runs on all popular cloud providers, but often requires additional steps and configuration for full functionality." -custom_edit_url: https://github.com/netdata/netdata/edit/master/packaging/installer/methods/aws.md -sidebar_label: "AWS" -learn_status: "Published" -learn_rel_path: "Installation/Install on specific environments" ---> - # Install Netdata on AWS Netdata is fully compatible with Amazon Web Services (AWS). @@ -41,11 +32,11 @@ command from a remote system, and it fails, it's likely that a firewall is block Another option is to put Netdata behind web server, which will proxy requests through standard HTTP/HTTPS ports (80/443), which are likely already open on your instance. We have a number of guides available: -- [Apache](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-apache.md) -- [Nginx](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-nginx.md) -- [Caddy](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-caddy.md) -- [HAProxy](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-haproxy.md) -- [lighttpd](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-lighttpd.md) +- [Apache](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-apache.md) +- [Nginx](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-nginx.md) +- [Caddy](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-caddy.md) +- [HAProxy](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-haproxy.md) +- [lighttpd](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-lighttpd.md) Sign in to the [AWS console](https://console.aws.amazon.com/) and navigate to the EC2 dashboard. Click on the **Security Groups** link in the navigation, beneath the **Network & Security** heading. Find the Security Group your instance @@ -54,7 +45,7 @@ inbound rules**. Add a new rule with the following options: -```conf +```text Type: Custom TCP Protocol: TCP Port Range: 19999 diff --git a/packaging/installer/methods/azure.md b/packaging/installer/methods/azure.md index 94590eec..baccacd9 100644 --- a/packaging/installer/methods/azure.md +++ b/packaging/installer/methods/azure.md @@ -1,15 +1,6 @@ -<!-- -title: "Install Netdata on Azure" -description: "The Netdata Agent runs on all popular cloud providers, but often requires additional steps and configuration for full functionality." -custom_edit_url: https://github.com/netdata/netdata/edit/master/packaging/installer/methods/azure.md -sidebar_label: "Azure" -learn_status: "Published" -learn_rel_path: "Installation/Install on specific environments" ---> - # Install Netdata on Azure -Netdata is fully compatible with Azure. +Netdata is fully compatible with Azure. You can install Netdata on cloud instances to monitor the apps/services running there, or use multiple instances in a [parent-child streaming](/src/streaming/README.md) configuration. @@ -41,18 +32,18 @@ command from a remote system, and it fails, it's likely that a firewall is block Another option is to put Netdata behind web server, which will proxy requests through standard HTTP/HTTPS ports (80/443), which are likely already open on your instance. We have a number of guides available: -- [Apache](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-apache.md) -- [Nginx](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-nginx.md) -- [Caddy](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-caddy.md) -- [HAProxy](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-haproxy.md) -- [lighttpd](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-lighttpd.md) +- [Apache](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-apache.md) +- [Nginx](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-nginx.md) +- [Caddy](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-caddy.md) +- [HAProxy](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-haproxy.md) +- [lighttpd](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-lighttpd.md) Sign in to the [Azure portal](https://portal.azure.com) and open the virtual machine running Netdata. Click on the **Networking** link beneath the **Settings** header, then click on the **Add inbound security rule** button. Add a new rule with the following options: -```conf +```text Source: Any Source port ranges: 19999 Destination: Any @@ -64,5 +55,3 @@ Name: Netdata ``` Click **Add** to apply your new inbound security rule. - - diff --git a/packaging/installer/methods/freebsd.md b/packaging/installer/methods/freebsd.md index 3a33d2e9..05137598 100644 --- a/packaging/installer/methods/freebsd.md +++ b/packaging/installer/methods/freebsd.md @@ -1,12 +1,3 @@ -<!-- -title: "Install Netdata on FreeBSD" -description: "Install Netdata on FreeBSD to monitor the health and performance of bare metal or VMs with thousands of real-time, per-second metrics." -custom_edit_url: https://github.com/netdata/netdata/edit/master/packaging/installer/methods/freebsd.md -sidebar_label: "FreeBSD" -learn_status: "Published" -learn_rel_path: "Installation/Install on specific environments" ---> - # Install Netdata on FreeBSD > 💡 This document is maintained by Netdata's community, and may not be completely up-to-date. Please double-check the @@ -24,7 +15,7 @@ This step needs root privileges. pkg install bash e2fsprogs-libuuid git curl autoconf automake pkgconf pidof liblz4 libuv json-c cmake gmake ``` -Please respond in the affirmative for any relevant prompts during the installation process. +Please respond in the affirmative for any relevant prompts during the installation process. ## Install Netdata @@ -35,9 +26,10 @@ If you have a Netdata cloud account then clicking on the **Connect Nodes** butto ```sh wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh && sh /tmp/netdata-kickstart.sh --claim-token <CLAIM_TOKEN> --claim-url https://app.netdata.cloud ``` -Please respond in the affirmative for any relevant prompts during the installation process. -Once the installation is completed, you should be able to start monitoring the FreeBSD server using Netdata. +Please respond in the affirmative for any relevant prompts during the installation process. + +Once the installation is completed, you should be able to start monitoring the FreeBSD server using Netdata. Netdata can also be installed via [FreeBSD ports](https://www.freshports.org/net-mgmt/netdata). @@ -67,7 +59,7 @@ gunzip netdata*.tar.gz && tar xf netdata*.tar && rm -rf netdata*.tar Install Netdata in `/opt/netdata`. If you want to enable automatic updates, add `--auto-update` or `-u` to install `netdata-updater` in `cron` (**need root permission**): ```sh -cd netdata-v* && ./netdata-installer.sh --install-prefix /opt && cp /opt/netdata/usr/sbin/netdata-claim.sh /usr/sbin/ +cd netdata-v* && ./netdata-installer.sh --install-prefix /opt ``` You also need to enable the `netdata` service in `/etc/rc.conf`: @@ -89,7 +81,8 @@ more about the information collected and how to opt-out, check the [anonymous st page](/docs/netdata-agent/configuration/anonymous-telemetry-events.md). ## Updating the Agent on FreeBSD -If you have not passed the `--auto-update` or `-u` parameter for the installer to enable automatic updating, repeat the last step to update Netdata whenever a new version becomes available. + +If you have not passed the `--auto-update` or `-u` parameter for the installer to enable automatic updating, repeat the last step to update Netdata whenever a new version becomes available. The `netdata-updater.sh` script will update your Agent. ## Optional parameters to alter your installation @@ -102,9 +95,9 @@ The `kickstart.sh` script accepts a number of optional parameters to control how - `--dry-run`: Show what the installer would do, but don’t actually do any of it. - `--dont-start-it`: Don’t auto-start the daemon after installing. This parameter is not guaranteed to work. - `--release-channel`: Specify a particular release channel to install from. Currently supported release channels are: - - `nightly`: Installs a nightly build (this is currently the default). - - `stable`: Installs a stable release. - - `default`: Explicitly request whatever the current default is. + - `nightly`: Installs a nightly build (this is currently the default). + - `stable`: Installs a stable release. + - `default`: Explicitly request whatever the current default is. - `--nightly-channel`: Synonym for `--release-channel nightly`. - `--stable-channel`: Synonym for `--release-channel stable`. - `--auto-update`: Enable automatic updates (this is the default). @@ -113,24 +106,21 @@ The `kickstart.sh` script accepts a number of optional parameters to control how - `--native-only`: Only install if native binary packages are available. - `--static-only`: Only install if a static build is available. - `--build-only`: Only install using a local build. -- `--disable-cloud`: For local builds, don’t build any of the cloud code at all. For native packages and static builds, - use runtime configuration to disable cloud support. -- `--require-cloud`: Only install if Netdata Cloud can be enabled. Overrides `--disable-cloud`. - `--install-prefix`: Specify an installation prefix for local builds (by default, we use a sane prefix based on the type of system). - `--install-version`: Specify the version of Netdata to install. - `--old-install-prefix`: Specify the custom local build's installation prefix that should be removed. - `--local-build-options`: Specify additional options to pass to the installer code when building locally. Only valid if `--build-only` is also specified. - `--static-install-options`: Specify additional options to pass to the static installer code. Only valid if --static-only is also specified. -The following options are mutually exclusive and specifiy special operations other than trying to install Netdata normally or update an existing install: +The following options are mutually exclusive and specify special operations other than trying to install Netdata normally or update an existing install: - `--reinstall`: If there is an existing install, reinstall it instead of trying to update it. If there is not an existing install, install netdata normally. -- `--reinstall-even-if-unsafe`: If there is an existing install, reinstall it instead of trying to update it, even if doing so is known to potentially break things (for example, if we cannot detect what tyep of installation it is). If there is not an existing install, install Netdata normally. +- `--reinstall-even-if-unsafe`: If there is an existing install, reinstall it instead of trying to update it, even if doing so is known to potentially break things (for example, if we cannot detect what type of installation it is). If there is not an existing install, install Netdata normally. - `--reinstall-clean`: If there is an existing install, uninstall it before trying to install Netdata. Fails if there is no existing install. - `--uninstall`: Uninstall an existing installation of Netdata. Fails if there is no existing install. - `--claim-only`: If there is an existing install, only try to claim it without attempting to update it. If there is no existing install, install and claim Netdata normally. - `--repositories-only`: Only install repository configuration packages instead of doing a full install of Netdata. Automatically sets --native-only. -- `--prepare-offline-install-source`: Instead of insallling the agent, prepare a directory that can be used to install on another system without needing to download anything. See our [offline installation documentation](/packaging/installer/methods/offline.md) for more info. +- `--prepare-offline-install-source`: Instead of installing the agent, prepare a directory that can be used to install on another system without needing to download anything. See our [offline installation documentation](/packaging/installer/methods/offline.md) for more info. Additionally, the following environment variables may be used to further customize how the script runs (most users should not need to use special values for any of these): diff --git a/packaging/installer/methods/gcp.md b/packaging/installer/methods/gcp.md index 5003decb..59e29369 100644 --- a/packaging/installer/methods/gcp.md +++ b/packaging/installer/methods/gcp.md @@ -1,13 +1,3 @@ -<!-- -title: "Install Netdata on GCP" -description: "The Netdata Agent runs on all popular cloud providers, but often requires additional steps and configuration for full functionality." -custom_edit_url: https://github.com/netdata/netdata/edit/master/packaging/installer/methods/gcp.md -sidebar_label: "GCP" -learn_status: "Published" -learn_topic_type: "Tasks" -learn_rel_path: "Installation/Install on specific environments" ---> - # Install Netdata on GCP Netdata is fully compatible with the Google Cloud Platform (GCP). @@ -42,12 +32,11 @@ command from a remote system, and it fails, it's likely that a firewall is block Another option is to put Netdata behind web server, which will proxy requests through standard HTTP/HTTPS ports (80/443), which are likely already open on your instance. We have a number of guides available: -- [Apache](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-apache.md) -- [Nginx](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-nginx.md) -- [Caddy](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-caddy.md) -- [HAProxy](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-haproxy.md) -- [lighttpd](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-lighttpd.md) - +- [Apache](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-apache.md) +- [Nginx](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-nginx.md) +- [Caddy](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-caddy.md) +- [HAProxy](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-haproxy.md) +- [lighttpd](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-lighttpd.md) To add a firewall rule, go to the [Firewall rules page](https://console.cloud.google.com/networking/firewalls/list) and click **Create firewall rule**. @@ -55,7 +44,7 @@ click **Create firewall rule**. The following configuration has previously worked for Netdata running on GCP instances ([see #7786](https://github.com/netdata/netdata/issues/7786)): -```conf +```text Name: <name> Type: Ingress Targets: <name-tag> @@ -67,4 +56,3 @@ Priority: 1000 Read GCP's [firewall documentation](https://cloud.google.com/vpc/docs/using-firewalls) for specific instructions on how to create a new firewall rule. - diff --git a/packaging/installer/methods/kickstart.md b/packaging/installer/methods/kickstart.md index a525cc70..ed5a4ae4 100644 --- a/packaging/installer/methods/kickstart.md +++ b/packaging/installer/methods/kickstart.md @@ -5,17 +5,29 @@ import TabItem from '@theme/TabItem'; # Install Netdata with kickstart.sh -![](https://registry.my-netdata.io/api/v1/badge.svg?chart=web_log_nginx.requests_by_url_pattern&options=unaligned&dimensions=kickstart&group=sum&after=-3600&label=last+hour&units=kickstart%20downloads&value_color=orange&precision=0) ![](https://registry.my-netdata.io/api/v1/badge.svg?chart=web_log_nginx.requests_by_url_pattern&options=unaligned&dimensions=kickstart&group=sum&after=-86400&label=today&units=kickstart%20downloads&precision=0) +![last hour badge](https://registry.my-netdata.io/api/v1/badge.svg?chart=web_log_nginx.requests_by_url_pattern&options=unaligned&dimensions=kickstart&group=sum&after=-3600&label=last+hour&units=kickstart%20downloads&precision=0) ![today badge](https://registry.my-netdata.io/api/v1/badge.svg?chart=web_log_nginx.requests_by_url_pattern&options=unaligned&dimensions=kickstart&group=sum&after=-86400&label=today&units=kickstart%20downloads&precision=0) -`kickstart.sh` is the recommended way of installing Netdata. +**`kickstart.sh` is the recommended way of installing Netdata.** This script works on all Linux distributions and macOS environments, by detecting the optimal method of installing Netdata directly to the operating system. +## What does `kickstart.sh` do? + +The `kickstart.sh` script does the following after being downloaded and run using `sh`: + +- Determines what platform you’re running on. +- Checks for an existing installation, and if found updates that instead of creating a new installation. +- Attempts to install Netdata using our [official native binary packages](/packaging/installer/methods/packages.md). +- If there are no official native binary packages for your system (or installing that way failed), tries to install using a [static build of Netdata](/packaging/makeself/README.md) if one is available. +- If no static build is available, installs required dependencies and then attempts to install by building Netdata locally (by downloading the sources and building them directly). +- Installs `netdata-updater.sh` to `cron.daily`, so your Netdata installation will be updated with new nightly versions, unless you override that with an [optional parameter](#optional-parameters-to-alter-your-installation). +- Prints a message whether installation succeeded or failed for QA purposes. + ## Installation -> :bulb: Tip +> **Tip** > -> If you are unsure whether you want nightly or stable releases, read the [related section](/packaging/installer/README.md#nightly-vs-stable-releases) of our Documentation, detailing the pros and cons of each release type. +> If you are unsure whether you want nightly or stable releases, read the [related section](/docs/netdata-agent/versions-and-platforms.md) of our Documentation, detailing the pros and cons of each release type. To install Netdata, run the following as your normal user: @@ -32,146 +44,10 @@ To install Netdata, run the following as your normal user: </TabItem> </Tabs> -> :bookmark_tabs: Note +> **Note** > > If you plan to also connect the node to Netdata Cloud, make sure to replace `YOUR_CLAIM_TOKEN` with the claim token of your space, -> and `YOUR_ROOM_ID` with the ID of the Room you are willing to connect the node to. - -## Verify script integrity - -To use `md5sum` to verify the integrity of the `kickstart.sh` script you will download using the one-line command above, -run the following: - -```bash -[ "@KICKSTART_CHECKSUM@" = "$(curl -Ss https://get.netdata.cloud/kickstart.sh | md5sum | cut -d ' ' -f 1)" ] && echo "OK, VALID" || echo "FAILED, INVALID" -``` - -If the script is valid, this command will return `OK, VALID`. - -## What does `kickstart.sh` do? - -The `kickstart.sh` script does the following after being downloaded and run using `sh`: - -- Determines what platform you are running on. -- Checks for an existing installation, and if found updates that instead of creating a new install. -- Attempts to install Netdata using our [official native binary packages](#native-packages). -- If there are no official native binary packages for your system (or installing that way failed), tries to install - using a [static build of Netdata](#static-builds) if one is available. -- If no static build is available, installs required dependencies and then attempts to install by - [building Netdata locally](#local-builds) (by downloading the sources and building them directly). -- Installs `netdata-updater.sh` to `cron.daily`, so your Netdata installation will be updated with new nightly - versions, unless you override that with an [optional parameter](#optional-parameters-to-alter-your-installation). -- Prints a message whether installation succeeded or failed for QA purposes. - -## Start stop or restart the Netdata Agent - -You will most often need to _restart_ the Agent to load new or edited configuration files. - -> **Note** -> Stopping or restarting the Netdata Agent will cause gaps in stored metrics until the `netdata` process initiates collectors and the database engine. -> -> You do not need to restart the Netdata Agent between changes to health configuration files, see the relevant section on [reloading health configuration](/src/health/REFERENCE.md#reload-health-configuration). - -### Using `systemctl` or `service` - -This is the recommended way to start, stop, or restart the Netdata daemon. - -- To **start** Netdata, run `sudo systemctl start netdata`. -- To **stop** Netdata, run `sudo systemctl stop netdata`. -- To **restart** Netdata, run `sudo systemctl restart netdata`. - -If the above commands fail, or you know that you're using a non-systemd system, try using the `service` command: - -- Starting: `sudo service netdata start`. -- Stopping: `sudo service netdata stop`. -- Restarting: `sudo service netdata restart`. - -### Using the `netdata` command - -Use the `netdata` command, typically located at `/usr/sbin/netdata`, to start the Netdata daemon: - -```bash -sudo netdata -``` - -If you start the daemon this way, close it with `sudo killall netdata`. - -### Shutdown using `netdatacli` - -The Netdata Agent also comes with a [CLI tool](/src/cli/README.md) capable of performing shutdowns. Start the Agent back up using your preferred method listed above. - -```bash -sudo netdatacli shutdown-agent -``` - -## Starting Netdata at boot - -In the `system` directory you can find scripts and configurations for the -various distros. - -### systemd - -The installer already installs `netdata.service` if it detects a systemd system. - -To install `netdata.service` by hand, run: - -```sh -# stop Netdata -killall netdata - -# copy netdata.service to systemd -cp system/netdata.service /etc/systemd/system/ - -# let systemd know there is a new service -systemctl daemon-reload - -# enable Netdata at boot -systemctl enable netdata - -# start Netdata -systemctl start netdata -``` - -### init.d - -In the system directory you can find `netdata-lsb`. Copy it to the proper place according to your distribution's documentation. For Ubuntu, this can be done via running the following commands as root. - -```sh -# copy the Netdata startup file to /etc/init.d -cp system/netdata-lsb /etc/init.d/netdata - -# make sure it is executable -chmod +x /etc/init.d/netdata - -# enable it -update-rc.d netdata defaults -``` - -### openrc / Gentoo Linux - -In the `system` directory you can find `netdata-openrc`. Copy it to the proper -place according to your distribution documentation. - -### CentOS / Red Hat Enterprise Linux - -For older versions of RHEL/CentOS that don't have systemd, an init script is included in the system directory. This can be installed by running the following commands as root. - -```sh -# copy the Netdata startup file to /etc/init.d -cp system/netdata-init-d /etc/init.d/netdata - -# make sure it is executable -chmod +x /etc/init.d/netdata - -# enable it -chkconfig --add netdata -``` - -_There have been some recent work on the init script, see the following PR <https://github.com/netdata/netdata/pull/403>_ - -### Other operating systems - -You can start Netdata by running it from `/etc/rc.local` or your system's equivalent. +> and `YOUR_ROOM_ID` with the ID of the Room you’re willing to connect the node to. ## Optional parameters to alter your installation @@ -180,9 +56,9 @@ The `kickstart.sh` script accepts a number of optional parameters to control how ### destination directory - `--install-prefix` - Specify an installation prefix for local builds (by default, we use a sane prefix based on the type of system). + Specify a custom installation directory for local builds. If not provided, a default directory will be used based on your system. - `--old-install-prefix` - Specify the custom local build's installation prefix that should be removed. + Specify the previous custom installation directory to be removed during the update process. ### interactivity @@ -211,7 +87,7 @@ By default, the script installs the nightly channel of Netdata, providing you wi ### install type -By default the script will prefer native builds when they are available, and then static builds. It will fallback to build from source when all others are not available. +By default, the script will prefer native builds when they’re available, and then static builds. It will fallback to build from source when all others aren’t available. - `--native-only` Only install if native binary packages are available. It fails otherwise. @@ -224,7 +100,7 @@ By default the script will prefer native builds when they are available, and the ### automatic updates -By default the script installs a cron job to automatically update Netdata to the latest version of the release channel used. +By default, the script installs a cron job to automatically update Netdata to the latest version of the release channel used. - `--auto-update` Enable automatic updates (this is the default). @@ -233,22 +109,18 @@ By default the script installs a cron job to automatically update Netdata to the ### Netdata Cloud related options -By default, the kickstart script will provide a Netdata agent installation that can potentially communicate with Netdata Cloud, if of course the Netdata agent is further configured to do so. +By default, the kickstart script will provide a Netdata agent installation that can potentially communicate with Netdata Cloud if the Netdata agent is further configured to do so. - `--claim-token` - Specify a unique claiming token associated with your Space in Netdata Cloud to be used to connect to the node after the install. This will enable, connect and claim the Netdata agent, to Netdata Cloud. + Specify a unique claiming token associated with your Space in Netdata Cloud to be used to connect to the node after the installation. This will connect and claim the Netdata Agent to Netdata Cloud. - `--claim-url` Specify a URL to use when connecting to the cloud. Defaults to `https://app.netdata.cloud`. Use this option to change the Netdata Cloud URL to point to your Netdata Cloud installation. - `--claim-rooms` Specify a comma-separated list of tokens for each Room this node should appear in. - `--claim-proxy` - Specify a proxy to use when connecting to the cloud in the form of `http://[user:pass@]host:ip` for an HTTP(S) proxy. See [connecting through a proxy](/src/claim/README.md#connect-through-a-proxy) for details. + Specify a proxy to use when connecting to the cloud in the form of `http://[user:pass@]host:ip` for an HTTP(S) proxy. See [connecting through a proxy](/src/claim/README.md#automatically-via-a-provisioning-system-or-the-command-line) for details. - `--claim-only` - If there is an existing install, only try to claim it without attempting to update it. If there is no existing install, install and claim Netdata normally. -- `--require-cloud` - Only install if Netdata Cloud can be enabled. -- `--disable-cloud` - For local builds, don’t build any of the Netdata Cloud code at all. For native packages and static builds, use runtime configuration to disable Netdata Cloud support. + If there is an existing installation, only try to claim it without attempting to update it. If there is no existing installation, install and claim Netdata normally. ### anonymous telemetry @@ -260,11 +132,11 @@ By default, the agent is sending anonymous telemetry data to help us take identi ### reinstalling - `--reinstall` - If there is an existing install, reinstall it instead of trying to update it. If there is not an existing install, install netdata normally. + If there is an existing installation, reinstall it instead of trying to update it. If there is not an existing installation, install netdata normally. - `--reinstall-even-if-unsafe` - If there is an existing install, reinstall it instead of trying to update it, even if doing so is known to potentially break things (for example, if we cannot detect what type of installation it is). If there is not an existing install, install Netdata normally. + If there is an existing installation, reinstall it instead of trying to update it, even if doing so is known to potentially break things (for example, if we can’t detect what type of installation it is). If there is not an existing install, install Netdata normally. - `--reinstall-clean` - If there is an existing install, uninstall it before trying to install Netdata. Fails if there is no existing install. + If there is an existing installation, uninstall it before trying to install Netdata. Fails if there is no existing installation. ### uninstall @@ -274,7 +146,7 @@ By default, the agent is sending anonymous telemetry data to help us take identi ### other options - `--dry-run` - Show what the installer would do, but don’t actually do any of it. + Simulates the installation process without making any changes to your system. This allows you to review the steps and potential impacts before proceeding with the actual installation. - `--dont-start-it` Don’t auto-start the daemon after installing. This parameter is not guaranteed to work. - `--distro-override` @@ -285,48 +157,28 @@ The following options are mutually exclusive and specify special operations othe - `--repositories-only` Only install repository configuration packages instead of doing a full install of Netdata. Automatically sets --native-only. - `--prepare-offline-install-source` - Instead of insallling the agent, prepare a directory that can be used to install on another system without needing to download anything. See our [offline installation documentation](/packaging/installer/methods/offline.md) for more info. + Instead of installing the agent, prepare a directory that can be used to install on another system without needing to download anything. See our [offline installation documentation](/packaging/installer/methods/offline.md) for more info. ### environment variables Additionally, the following environment variables may be used to further customize how the script runs (most users -should not need to use special values for any of these): +shouldn’t need to use special values for any of these): - `TMPDIR`: Used to specify where to put temporary files. On most systems, the default we select automatically should be fine. The user running the script needs to both be able to write files to the temporary directory, and run files from that location. -- `ROOTCMD`: Used to specify a command to use to run another command with root privileges if needed. By default - we try to use sudo, doas, or pkexec (in that order of preference), but if you need special options for one of +- `ROOTCMD`: Used to specify a command to use to run another command with root privileges if needed. By default, + we try to use sudo, doas, or pkexec (in that order of preference). However, if you need special options for one of those to work, or have a different tool to do the same thing on your system, you can specify it here. - `DISABLE_TELEMETRY`: If set to a value other than 0, behave as if `--disable-telemetry` was specified. -## Native packages - -We publish [official DEB/RPM packages](/packaging/installer/methods/packages.md) for a number of common Linux distributions as part of our releases and nightly -builds. These packages are available for 64-bit x86 systems. Depending on the distribution and release they may -also be available for 32-bit x86, ARMv7, and AArch64 systems. If a native package is available, it will be used as the -default installation method. This allows you to handle Netdata updates as part of your usual system update procedure. - -If you want to enforce the usage of native packages and have the installer return a failure if they are not available, -you can do so by adding `--native-only` to the options you pass to the installer. - -## Static builds - -We publish pre-built [static builds](/packaging/makeself/README.md) of Netdata for Linux systems. Currently, these are published for 64-bit x86, ARMv7, -AArch64, and POWER8+ hardware. These static builds are able to operate in a mostly self-contained manner and only -require a POSIX compliant shell and a supported init system. These static builds install under `/opt/netdata`. If -you are on a platform which we provide static builds for but do not provide native packages for, a static build -will be used by default for installation. - -If you want to enforce the usage of a static build and have the installer return a failure if one is not available, -you can do so by adding `--static-only` to the options you pass to the installer. +## Verify script integrity -## Local builds +To use `md5sum` to verify the integrity of the `kickstart.sh` script you will download using the one-line command above, +run the following: -For systems which do not have available native packages or static builds, we support building Netdata locally on -the system it will be installed on. When using this approach, the installer will attempt to install any required -dependencies for building Netdata, though this may not always work correctly. +```bash +[ "@KICKSTART_CHECKSUM@" = "$(curl -Ss https://get.netdata.cloud/kickstart.sh | md5sum | cut -d ' ' -f 1)" ] && echo "OK, VALID" || echo "FAILED, INVALID" +``` -If you want to enforce the usage of a local build (perhaps because you require a custom installation prefix, -which is not supported with native packages or static builds), you can do so by adding `--build-only` to the -options you pass to the installer. +If the script is valid, this command will return `OK, VALID`. diff --git a/packaging/installer/methods/kubernetes.md b/packaging/installer/methods/kubernetes.md index 6a0dee98..3740dcf0 100644 --- a/packaging/installer/methods/kubernetes.md +++ b/packaging/installer/methods/kubernetes.md @@ -35,21 +35,21 @@ The installation process securely connects your Kubernetes cluster to stream met 1. Add the Netdata Helm chart repository by running: - ```bash - helm repo add netdata https://netdata.github.io/helmchart/ - ``` + ```bash + helm repo add netdata https://netdata.github.io/helmchart/ + ``` 2. To install Netdata using the `helm install` command, run: - ```bash - helm install netdata netdata/netdata - ``` + ```bash + helm install netdata netdata/netdata + ``` - > ### Note - > - > If you plan to connect the node to Netdata Cloud, you can find the command with the right parameters by clicking the "Add Nodes" button in your Space's Nodes tab. + > **Note** + > + > If you plan to connect the node to Netdata Cloud, you can find the command with the right parameters by clicking the "Add Nodes" button in your Space's Nodes tab. - For more installation options, please read our [Netdata Helm chart for Kubernetes](https://github.com/netdata/helmchart/blob/master/charts/netdata/README.md) reference. + For more installation options, please read our [Netdata Helm chart for Kubernetes](https://github.com/netdata/helmchart/blob/master/charts/netdata/README.md) reference. #### Expected Result @@ -66,50 +66,50 @@ On an existing installation, in order to connect it to Netdata Cloud you will ne 1. You can start with creating a file called `override.yml` - ```bash - touch override.yml - ``` - + ```bash + touch override.yml + ``` + 2. Paste the following into your `override.yml` file. - ```yaml - parent: - claiming: - enabled: true - token: YOUR_CLAIM_TOKEN - rooms: YOUR_ROOM_ID_A,YOUR_ROOM_ID_B - - child: - claiming: - enabled: true - token: YOUR_CLAIM_TOKEN - rooms: YOUR_ROOM_ID_A,YOUR_ROOM_ID_B - configs: - netdata: - data: | - [global] - memory mode = ram - history = 3600 - [health] - enabled = no - ``` - - > :bookmark_tabs: Note - > - > Make sure to replace `YOUR_CLAIM_TOKEN` with the claim token of your space, - > and `YOUR_ROOM_ID` with the ID of the Room you are willing to connect to. - - These settings connect your `parent`/`child` nodes to Netdata Cloud and store more metrics in the nodes' time-series databases. - - > :bookmark_tabs: Info - > - > These override settings, along with the Helm chart's defaults, will retain an hour's worth of metrics (`history = 3600`, or `3600 seconds`) on each child node. Based on your metrics retention needs, and the resources available on your cluster, you may want to increase the `history` setting. + ```yaml + parent: + claiming: + enabled: true + token: YOUR_CLAIM_TOKEN + rooms: YOUR_ROOM_ID_A,YOUR_ROOM_ID_B + + child: + claiming: + enabled: true + token: YOUR_CLAIM_TOKEN + rooms: YOUR_ROOM_ID_A,YOUR_ROOM_ID_B + configs: + netdata: + data: | + [db] + db = ram + retention = 3600 + [health] + enabled = no + ``` + + > **Note** + > + > Make sure to replace `YOUR_CLAIM_TOKEN` with the claim token of your space, + > and `YOUR_ROOM_ID` with the ID of the Room you are willing to connect to. + + These settings connect your `parent`/`child` nodes to Netdata Cloud and store more metrics in the nodes' time-series databases. + + > **Info** + > + > These override settings, along with the Helm chart's defaults, will retain an hour's worth of metrics (`retention = 3600`, or `3600 seconds`) on each child node. Based on your metrics retention needs, and the resources available on your cluster, you may want to increase the `history` setting. 3. To apply these new settings, run: - ```bash - helm upgrade -f override.yml netdata netdata/netdata - ``` + ```bash + helm upgrade -f override.yml netdata netdata/netdata + ``` #### Expected Result @@ -188,13 +188,3 @@ To update Netdata's Helm chart to the latest version, run `helm repo update`, th helm repo update helm upgrade netdata netdata/netdata ``` - -## What's next? - -[Start Kubernetes monitoring](/docs/dashboards-and-charts/kubernetes-tab.md) in Netdata Cloud, which comes with meaningful visualizations out of the box. - -### Related reference documentation - -- [Netdata Cloud · Kubernetes monitoring](/docs/dashboards-and-charts/kubernetes-tab.md) -- [Netdata Helm chart](https://github.com/netdata/helmchart) -- [Netdata service discovery](https://github.com/netdata/agent-service-discovery/) diff --git a/packaging/installer/methods/macos.md b/packaging/installer/methods/macos.md index 31aaebf9..0843753b 100644 --- a/packaging/installer/methods/macos.md +++ b/packaging/installer/methods/macos.md @@ -1,39 +1,33 @@ -<!-- -title: "Install Netdata on macOS" -custom_edit_url: "https://github.com/netdata/netdata/edit/master/packaging/installer/methods/macos.md" -sidebar_label: "macOS" -learn_status: "Published" -learn_rel_path: "Installation/Install on specific environments" ---> - # Install Netdata on macOS -Netdata works on macOS, albeit with some limitations. -The number of charts displaying system metrics is limited, but you can use any of Netdata's [external plugins](/src/collectors/plugins.d/README.md) to monitor any services you might have installed on your macOS system. +Netdata works on macOS, albeit with some limitations. +The number of charts displaying system metrics is limited, but you can use any of Netdata's [external plugins](/src/plugins.d/README.md) to monitor any services you might have installed on your macOS system. You could also use a macOS system as the parent node in a [streaming configuration](/src/streaming/README.md). -You can install Netdata in one of the three following ways: +You can install Netdata in one of the three following ways: -- **[Install Netdata with the our automatic one-line installation script (recommended)](#install-netdata-with-our-automatic-one-line-installation-script)**, +- **[Install Netdata with the our automatic one-line installation script (recommended)](#install-netdata-with-our-automatic-one-line-installation-script)**, - [Install Netdata via Homebrew](#install-netdata-via-homebrew) - [Install Netdata from source](#install-netdata-from-source) -Each of these installation option requires [Homebrew](https://brew.sh/) for handling dependencies. +Each of these installation option requires [Homebrew](https://brew.sh/) for handling dependencies. > The Netdata Homebrew package is community-created and -maintained. > Community-maintained packages _may_ receive support from Netdata, but are only a best-effort affair. Learn more about [Netdata's platform support policy](/docs/netdata-agent/versions-and-platforms.md). ## Install Netdata with our automatic one-line installation script -**Local Netdata Agent installation** -To install Netdata using our automatic [kickstart](/packaging/installer/README.md#automatic-one-line-installation-script) open a new terminal and run: +### Local Netdata Agent installation + +To install Netdata using our automatic [kickstart](/packaging/installer/methods/kickstart.md) open a new terminal and run: ```bash curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh ``` + The Netdata Agent is installed under `/usr/local/netdata`. Dependencies are handled via Homebrew. -**Automatically connect to Netdata Cloud during installation** +### Automatically connect to Netdata Cloud during installation The `kickstart.sh` script accepts additional parameters to automatically [connect](/src/claim/README.md) your node to Netdata Cloud immediately after installation. Find the `token` and `rooms` strings by [signing in to Netdata @@ -44,38 +38,42 @@ area](/docs/netdata-cloud/organize-your-infrastructure-invite-your-team.md#netda after the install. - `--claim-rooms`: Specify a comma-separated list of tokens for each Room this node should appear in. - `--claim-proxy`: Specify a proxy to use when connecting to the cloud in the form of `http://[user:pass@]host:ip` for an HTTP(S) proxy. - See [connecting through a proxy](/src/claim/README.md#connect-through-a-proxy) for details. + See [connecting through a proxy](/src/claim/README.md#automatically-via-a-provisioning-system-or-the-command-line) for details. - `--claim-url`: Specify a URL to use when connecting to the cloud. Defaults to `https://app.netdata.cloud`. -For example: +For example: + ```bash curl https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh --install-prefix /usr/local/ --claim-token TOKEN --claim-rooms ROOM1,ROOM2 --claim-url https://app.netdata.cloud ``` + The Netdata Agent is installed under `/usr/local/netdata` on your machine. Your machine will also show up as a node in your Netdata Cloud. -If you experience issues while claiming your node, follow the steps in our [Troubleshooting](/src/claim/README.md#troubleshooting) documentation. +If you experience issues while claiming your node, follow the steps in our [Troubleshoot](/src/claim/README.md#troubleshoot) documentation. + ## Install Netdata via Homebrew ### For macOS Intel -To install Netdata and all its dependencies, run Homebrew using the following command: +To install Netdata and all its dependencies, run Homebrew using the following command: ```sh brew install netdata ``` -Homebrew will place your Netdata configuration directory at `/usr/local/etc/netdata/`. + +Homebrew will place your Netdata configuration directory at `/usr/local/etc/netdata/`. Use the `edit-config` script and the files in this directory to configure Netdata. For reference, you can find stock configuration files at `/usr/local/Cellar/netdata/{NETDATA_VERSION}/lib/netdata/conf.d/`. ### For Apple Silicon -To install Netdata and all its dependencies, run Homebrew using the following command: +To install Netdata and all its dependencies, run Homebrew using the following command: ```sh brew install netdata ``` -Homebrew will place your Netdata configuration directory at `/opt/homebrew/etc/netdata/`. +Homebrew will place your Netdata configuration directory at `/opt/homebrew/etc/netdata/`. Use the `edit-config` script and the files in this directory to configure Netdata. For reference, you can find stock configuration files at `/opt/homebrew/Cellar/netdata/{NETDATA_VERSION}/lib/netdata/conf.d/`. @@ -89,13 +87,13 @@ We don't recommend installing Netdata from source on macOS, as it can be difficu xcode-select --install ``` -2. Click **Install** on the Software Update popup window that appears. +2. Click **Install** on the Software Update popup window that appears. 3. Use the same terminal session to install some of Netdata's prerequisites using Homebrew. If you don't want to use [Netdata Cloud](/docs/netdata-cloud/README.md), you can omit `cmake`. ```bash brew install ossp-uuid autoconf automake pkg-config libuv lz4 json-c openssl libtool cmake ``` - + 4. Download Netdata from our GitHub repository: ```bash @@ -109,6 +107,6 @@ We don't recommend installing Netdata from source on macOS, as it can be difficu sudo ./netdata-installer.sh --install-prefix /usr/local ``` -> Your Netdata configuration directory will be at `/usr/local/netdata/`. +> Your Netdata configuration directory will be at `/usr/local/netdata/`. > Your stock configuration directory will be at `/usr/local/lib/netdata/conf.d/`. > The installer will also install a startup plist to start Netdata when your macOS system boots. diff --git a/packaging/installer/methods/manual.md b/packaging/installer/methods/manual.md index 31bc392e..0b7bdb27 100644 --- a/packaging/installer/methods/manual.md +++ b/packaging/installer/methods/manual.md @@ -1,22 +1,12 @@ -<!-- -title: "Install Netdata on Linux from a Git checkout" -description: "Use the Netdata Agent source code from GitHub, plus helper scripts to set up your system, to install Netdata without packages or binaries." -custom_edit_url: "https://github.com/netdata/netdata/edit/master/packaging/installer/methods/manual.md" -sidebar_label: "From a Git checkout" -learn_status: "Published" -learn_rel_path: "Installation/Installation methods" -sidebar_position: 30 ---> - # Install Netdata on Linux from a Git checkout To install the latest git version of Netdata, please follow these 2 steps: -1. [Prepare your system](#prepare-your-system) +1. [Prepare your system](#prepare-your-system) Install the required packages on your system. -2. [Install Netdata](#install-netdata) +2. [Install Netdata](#install-netdata) Download and install Netdata. You can also update it the same way. @@ -29,23 +19,23 @@ Use our automatic requirements installer (_no need to be `root`_), which attempt should be installed on your system to build and run Netdata. It supports a large variety of major Linux distributions and other operating systems and is regularly tested. You can find this tool [here](https://raw.githubusercontent.com/netdata/netdata/master/packaging/installer/install-required-packages.sh) or run it directly with `bash <(curl -sSL https://raw.githubusercontent.com/netdata/netdata/master/packaging/installer/install-required-packages.sh)`. Otherwise read on for how to get requires packages manually: -- **Alpine** Linux and its derivatives - - You have to install `bash` yourself, before using the installer. +- **Alpine** Linux and its derivatives + - You have to install `bash` yourself, before using the installer. -- **Gentoo** Linux and its derivatives +- **Gentoo** Linux and its derivatives -- **Debian** Linux and its derivatives (including **Ubuntu**, **Mint**) +- **Debian** Linux and its derivatives (including **Ubuntu**, **Mint**) -- **Red Hat Enterprise Linux** and its derivatives (including **Fedora**, **CentOS**, **Amazon Machine Image**) - - Please note that for RHEL/CentOS you need +- **Red Hat Enterprise Linux** and its derivatives (including **Fedora**, **CentOS**, **Amazon Machine Image**) + - Please note that for RHEL/CentOS you need [EPEL](http://www.tecmint.com/how-to-enable-epel-repository-for-rhel-centos-6-5/). In addition, RHEL/CentOS version 6 also need [OKay](https://okay.com.mx) for package libuv version 1. - - CentOS 8 / RHEL 8 requires a bit of extra work. See the dedicated section below. + - CentOS 8 / RHEL 8 requires a bit of extra work. See the dedicated section below. -- **SUSE** Linux and its derivatives (including **openSUSE**) +- **SUSE** Linux and its derivatives (including **openSUSE**) -- **SLE12** Must have your system registered with SUSE Customer Center or have the DVD. See +- **SLE12** Must have your system registered with SUSE Customer Center or have the DVD. See [#1162](https://github.com/netdata/netdata/issues/1162) Install the packages for having a **basic Netdata installation** (system monitoring and many applications, without `mysql` / `mariadb`, `named`, hardware sensors and `SNMP`): @@ -85,51 +75,51 @@ zypper install zlib-devel libuuid-devel libuv-devel liblz4-devel libopenssl-deve Once Netdata is compiled, to run it the following packages are required (already installed using the above commands): -| package | description| -|:-----:|-----------| -| `libuuid` | part of `util-linux` for GUIDs management| -| `zlib` | gzip compression for the internal Netdata web server| -| `libuv` | Multi-platform support library with a focus on asynchronous I/O, version 1 or greater| +| package | description | +|:---------:|---------------------------------------------------------------------------------------| +| `libuuid` | part of `util-linux` for GUIDs management | +| `zlib` | gzip compression for the internal Netdata web server | +| `libuv` | Multi-platform support library with a focus on asynchronous I/O, version 1 or greater | -*Netdata will fail to start without the above.* +_Netdata will fail to start without the above._ Netdata plugins and various aspects of Netdata can be enabled or benefit when these are installed (they are optional): -| package |description| -|:-----:|-----------| -| `bash`|for shell plugins and **alert notifications**| -| `curl`|for shell plugins and **alert notifications**| -| `iproute` or `iproute2`|for monitoring **Linux traffic QoS**<br/>use `iproute2` if `iproute` reports as not available or obsolete| -| `python`|for most of the external plugins| -| `python-yaml`|used for monitoring **beanstalkd**| -| `python-beanstalkc`|used for monitoring **beanstalkd**| -| `python-mysqldb`<br/>or<br/>`python-pymysql`|used for monitoring **mysql** or **mariadb** databases<br/>`python-mysqldb` is a lot faster and thus preferred| -| `nodejs`|used for `node.js` plugins for monitoring **named** and **SNMP** devices| -| `lm-sensors`|for monitoring **hardware sensors**| -| `libelf`|for monitoring kernel-level metrics using eBPF| -| `libmnl`|for collecting netfilter metrics| -| `netcat`|for shell plugins to collect metrics from remote systems| - -*Netdata will greatly benefit if you have the above packages installed, but it will still work without them.* +| package | description | +|:--------------------------------------------:|----------------------------------------------------------------------------------------------------------------| +| `bash` | for shell plugins and **alert notifications** | +| `curl` | for shell plugins and **alert notifications** | +| `iproute` or `iproute2` | for monitoring **Linux traffic QoS**<br/>use `iproute2` if `iproute` reports as not available or obsolete | +| `python` | for most of the external plugins | +| `python-yaml` | used for monitoring **beanstalkd** | +| `python-beanstalkc` | used for monitoring **beanstalkd** | +| `python-mysqldb`<br/>or<br/>`python-pymysql` | used for monitoring **mysql** or **mariadb** databases<br/>`python-mysqldb` is a lot faster and thus preferred | +| `nodejs` | used for `node.js` plugins for monitoring **named** and **SNMP** devices | +| `lm-sensors` | for monitoring **hardware sensors** | +| `libelf` | for monitoring kernel-level metrics using eBPF | +| `libmnl` | for collecting netfilter metrics | +| `netcat` | for shell plugins to collect metrics from remote systems | + +_Netdata will greatly benefit if you have the above packages installed, but it will still work without them._ Netdata DB engine can be enabled when these are installed (they are optional): -| package | description| -|:-----:|-----------| -| `liblz4` | Extremely fast compression algorithm, version r129 or greater| -| `openssl`| Cryptography and SSL/TLS toolkit| +| package | description | +|:---------:|---------------------------------------------------------------| +| `liblz4` | Extremely fast compression algorithm, version r129 or greater | +| `openssl` | Cryptography and SSL/TLS toolkit | -*Netdata will greatly benefit if you have the above packages installed, but it will still work without them.* +_Netdata will greatly benefit if you have the above packages installed, but it will still work without them._ Netdata Cloud support may require the following packages to be installed: -| package | description | -|:---------:|--------------------------------------------------------------------------------------------------------------------------------------| -| `cmake` | Needed at build time if you aren't using your distribution's version of libwebsockets or are building on a platform other than Linux | -| `openssl` | Needed to secure communications with the Netdata Cloud | -| `protobuf`| Used for the new Cloud<->Agent binary protocol | +| package | description | +|:----------:|--------------------------------------------------------------------------------------------------------------------------------------| +| `cmake` | Needed at build time if you aren't using your distribution's version of libwebsockets or are building on a platform other than Linux | +| `openssl` | Needed to secure communications with the Netdata Cloud | +| `protobuf` | Used for the new Cloud<->Agent binary protocol | -*Netdata will greatly benefit if you have the above packages installed, but it will still work without them.* +_Netdata will greatly benefit if you have the above packages installed, but it will still work without them._ ### CentOS / RHEL 6.x @@ -189,28 +179,28 @@ cd netdata ./netdata-installer.sh ``` -- If you don't want to run it straight-away, add `--dont-start-it` option. +- If you don't want to run it straight-away, add `--dont-start-it` option. -- You can also append `--stable-channel` to fetch and install only the official releases from GitHub, instead of the nightly builds. +- You can also append `--stable-channel` to fetch and install only the official releases from GitHub, instead of the nightly builds. -- If you don't want to install it on the default directories, you can run the installer like this: `./netdata-installer.sh --install-prefix /opt`. This one will install Netdata in `/opt/netdata`. +- If you don't want to install it on the default directories, you can run the installer like this: `./netdata-installer.sh --install-prefix /opt`. This one will install Netdata in `/opt/netdata`. -- If your server does not have access to the internet and you have manually put the installation directory on your server, you will need to pass the option `--disable-go` to the installer. The option will prevent the installer from attempting to download and install `go.d.plugin`. +- If your server does not have access to the internet and you have manually put the installation directory on your server, you will need to pass the option `--disable-go` to the installer. The option will prevent the installer from attempting to download and install `go.d.plugin`. ## Optional parameters to alter your installation `netdata-installer.sh` accepts a few parameters to customize your installation: -- `--dont-wait`: Enable automated installs by not prompting for permission to install any required packages. -- `--dont-start-it`: Prevent the installer from starting Netdata automatically. -- `--stable-channel`: Automatically update only on the release of new major versions. -- `--nightly-channel`: Automatically update on every new nightly build. -- `--disable-telemetry`: Opt-out of [anonymous statistics](/docs/netdata-agent/configuration/anonymous-telemetry-events.md) we use to make +- `--dont-wait`: Enable automated installs by not prompting for permission to install any required packages. +- `--dont-start-it`: Prevent the installer from starting Netdata automatically. +- `--stable-channel`: Automatically update only on the release of new major versions. +- `--nightly-channel`: Automatically update on every new nightly build. +- `--disable-telemetry`: Opt-out of [anonymous statistics](/docs/netdata-agent/configuration/anonymous-telemetry-events.md) we use to make Netdata better. -- `--no-updates`: Prevent automatic updates of any kind. -- `--reinstall`: If an existing install is detected, reinstall instead of trying to update it. Note that this +- `--no-updates`: Prevent automatic updates of any kind. +- `--reinstall`: If an existing install is detected, reinstall instead of trying to update it. Note that this cannot be used to change installation types. -- `--local-files`: Used for [offline installations](/packaging/installer/methods/offline.md). Pass four file paths: the Netdata +- `--local-files`: Used for [offline installations](/packaging/installer/methods/offline.md). Pass four file paths: the Netdata tarball, the checksum file, the go.d plugin tarball, and the go.d plugin config tarball, to force kickstart run the process using those files. This option conflicts with the `--stable-channel` option. If you set this _and_ `--stable-channel`, Netdata will use the local files. @@ -226,23 +216,19 @@ See the [connect to cloud](/src/claim/README.md) doc for details on connecting a Our current build process unfortunately has some issues when using certain configurations of the `clang` C compiler on Linux. -If the installation fails with errors like `/bin/ld: externaldeps/libwebsockets/libwebsockets.a(context.c.o): relocation R_X86_64_32 against '.rodata.str1.1' can not be used when making a PIE object; recompile with -fPIC`, and you are trying to build with `clang` on Linux, you will need to build Netdata using GCC to get a fully functional install. +If the installation fails with errors like `/bin/ld: externaldeps/libwebsockets/libwebsockets.a(context.c.o): relocation R_X86_64_32 against '.rodata.str1.1' can not be used when making a PIE object; recompile with -fPIC`, and you are trying to build with `clang` on Linux, you will need to build Netdata using GCC to get a fully functional install. In most cases, you can do this by running `CC=gcc ./netdata-installer.sh`. - ### Perform a cleanup in your netdata repo The Netdata repo consist of the main git tree and it's submodules. Either working on a fork or on the main repo you need to make sure that there are no "leftover" artifacts from previous builds and that your submodules are up to date to the **corresponding checkouts**. -> #### Important: Make sure that you have commited any work in progress, before you proceed the with the clean up instruction below - +> #### Important: Make sure that you have committed any work in progress, before you proceed the with the clean up instruction below ```sh git clean -dfx && git submodule foreach 'git clean -dfx' && git submodule update --recursive --init ``` - -> Note: In previous builds, you may have created artifacts belonging to an another user (e.g root), so you may need to run -> each of the _git clean_ commands as sudoer. +> Note: In previous builds, you may have created artifacts belonging to an another user (e.g root), so you may need to run each of the _git clean_ commands as a sudoer. diff --git a/packaging/installer/methods/methods.md b/packaging/installer/methods/methods.md index bc6e879a..701f3b93 100644 --- a/packaging/installer/methods/methods.md +++ b/packaging/installer/methods/methods.md @@ -1,13 +1,3 @@ -<!-- -title: "Installation methods" -description: "Netdata can be installed as a DEB/RPM package, a static binary, a docker container or from source" -custom_edit_url: https://github.com/netdata/netdata/edit/master/packaging/installer/methods/methods.md -sidebar_label: "Installation methods" -learn_status: "Published" -learn_rel_path: "Installation/Installation methods" -sidebar_position: 30 ---> - # Installation methods Netdata can be installed: @@ -21,6 +11,4 @@ The [one line installer kickstart.sh](/packaging/installer/methods/kickstart.md) picks the most appropriate method out of the first three for any system and is the recommended installation method, if you don't use containers. -`kickstart.sh` can also be used for -[offline installation](/packaging/installer/methods/offline.md), -suitable for air-gapped systems. +`kickstart.sh` can also be used for [offline installation](/packaging/installer/methods/offline.md), suitable for air-gapped systems. diff --git a/packaging/installer/methods/no_ipv4.md b/packaging/installer/methods/no_ipv4.md new file mode 100644 index 00000000..c22b6408 --- /dev/null +++ b/packaging/installer/methods/no_ipv4.md @@ -0,0 +1,13 @@ +# Installing on hosts without IPv4 connectivity + +Our regular installation process requires access to a number of GitHub services that do not have IPv6 connectivity. + +As such, using the kickstart install script on such hosts generally does not work, and will typically fail with an error from cURL or wget about connection timeouts. + +You can check if your system is affected by this by attempting to connect to (or ping) `https://api.github.com/`. Failing to connect indicates that this issue affects you. + +There are three potential workarounds for this: + +1. You can configure your system with a proper IPv6 transition mechanism, such as NAT64. GitHub’s anachronisms affect many projects other than just Netdata. There are, unfortunately, a number of other services out there that do not provide IPv6 connectivity, so taking this route is likely to save you time in the future as well. +2. If you are using a system that we publish native packages for (see our [platform support policy](/docs/netdata-agent/versions-and-platforms.md) for more details), you can manually set up our native package repositories as outlined in our [native package install documentation](/packaging/installer/methods/packages.md). Our official package repositories do provide service over IPv6, so they work without issue on hosts without IPv4 connectivity. +3. If neither of the above options work for you, you can still install using our [offline installation instructions](/packaging/installer/methods/offline.md), though do note that the offline install source must be prepared from a system with IPv4 connectivity. diff --git a/packaging/installer/methods/offline.md b/packaging/installer/methods/offline.md index 83155848..3a64135d 100644 --- a/packaging/installer/methods/offline.md +++ b/packaging/installer/methods/offline.md @@ -1,13 +1,3 @@ -<!-- -title: "Install Netdata on offline systems" -description: "Install the Netdata Agent on offline/air gapped systems to benefit from real-time, per-second monitoring without connecting to the internet." -custom_edit_url: "https://github.com/netdata/netdata/edit/master/packaging/installer/methods/offline.md" -sidebar_label: "Offline systems" -learn_status: "Published" -learn_rel_path: "Installation/Installation methods" -sidebar_position: 50 ---> - # Install Netdata on offline systems Our kickstart install script provides support for installing the Netdata Agent on air-gapped systems which do not have a @@ -53,7 +43,6 @@ Once you have prepared the offline install source, you need to copy the offline target system. This can be done in any manner you like, as long as filenames are not changed. After copying the files, simply run the `install.sh` script located in the -offline install source directory. It accepts all the [same options as the kickstart -script](/packaging/installer/methods/kickstart.md#optional-parameters-to-alter-your-installation) for further +offline install source directory. It accepts all the [same options as the kickstart script](/packaging/installer/methods/kickstart.md#optional-parameters-to-alter-your-installation) for further customization of the installation, though it will default to not enabling automatic updates (as they are not supported on offline installs). diff --git a/packaging/installer/methods/packages.md b/packaging/installer/methods/packages.md index 90556c1a..eff33118 100644 --- a/packaging/installer/methods/packages.md +++ b/packaging/installer/methods/packages.md @@ -1,13 +1,3 @@ -<!-- -title: "Install Netdata using native DEB/RPM packages." -description: "Instructions for how to install Netdata using native DEB or RPM packages." -custom_edit_url: "https://github.com/netdata/netdata/edit/master/packaging/installer/methods/packages.md" -sidebar_label: "Native DEB/RPM packages" -learn_status: "Published" -learn_rel_path: "Installation/Installation methods" -sidebar_position: 20 ---> - # Install Netdata using native DEB/RPM packages For most common Linux distributions that use either DEB or RPM packages, Netdata provides pre-built native packages @@ -20,7 +10,7 @@ When using the kickstart script, you can force usage of native DEB or RPM packag `--native-only` when invoking the script. This will cause it to only attempt to use native packages for the install, and fail if it cannot do so. -> ### Note +> **Note** > > In July 2022, we switched hosting of our native packages from Package Cloud to self-hosted repositories. > We still maintain the Package cloud repositories, but they are not guaranteed to work and may be removed @@ -63,9 +53,9 @@ appropriate repository configuration package from <https://repo.netdata.cloud/re directly on the target system using the system package manager. This will ensure any packages needed to use the repository are also installed, and will help enable a seamless transition if we ever need to change our infrastructure. -> ### Note +> **Note** > -> On RHEL and other systems that use the `el` repostiroies, some of the dependencies for Netdata can only be found +> On RHEL and other systems that use the `el` repositories, some of the dependencies for Netdata can only be found > in the EPEL repository, which is not enabled or installed by default on most of these systems. This additional > repository _should_ be pulled in automatically by our repository config packages, but if it is not you may need > to manually install `epel-release` to be able to successfully install the Netdata packages. @@ -91,7 +81,7 @@ These repositories are set up as what Debian calls ‘flat repositories’, and As a result of this structure, the required APT sources entry for stable packages for Debian 11 (Bullseye) is: -``` +```text deb http://repo.netdata.cloud/repos/stable/debian/ bullseye/ ``` @@ -134,7 +124,7 @@ but we do have some tips for anyone looking to do so: - A full mirror of all of our repositories currently requires up to 100 GB of storage space, though the exact amount of space needed fluctuates over time. Because of this, users seeking to mirror our repositories are encouraged to mirror only those repositories they actually need instead of mirroring everything. -- If syncing daily (or less frequently), some time between 05:00 and 08:00 UTC each day is usually the saftest +- If syncing daily (or less frequently), some time between 05:00 and 08:00 UTC each day is usually the safest time to do so, as publishing nightly packages will almost always be done by this point, and publishing of stable releases typically happens after that time window. - If you intend to use our existing GPG signatures on the repository metadata and packages, you probably also want diff --git a/packaging/installer/methods/pfsense.md b/packaging/installer/methods/pfsense.md index 965fba8d..2cc1842b 100644 --- a/packaging/installer/methods/pfsense.md +++ b/packaging/installer/methods/pfsense.md @@ -1,15 +1,8 @@ -<!-- -title: "Install Netdata on pfSense" -description: "Install Netdata on pfSense to monitor the health and performance of firewalls with thousands of real-time, per-second metrics." -custom_edit_url: https://github.com/netdata/netdata/edit/master/packaging/installer/methods/pfsense.md -sidebar_label: "pfSense" -learn_status: "Published" -learn_rel_path: "Installation/Install on specific environments" ---> - # Install Netdata on pfSense CE -> 💡 This document is maintained by Netdata's community, and may not be completely up-to-date. Please double-check the +> **Info** +> +> This document is maintained by Netdata's community, and may not be completely up-to-date. Please double-check the > details of the installation process, such as version numbers for downloadable packages, before proceeding. > > You can help improve this document by [submitting a @@ -46,10 +39,10 @@ pkg install py39-yaml > ⚠️ If any of the above commands return a `Not Found` error, you need to manually search for the latest package in the > [FreeBSD repository](https://www.freebsd.org/ports/) or by running `pkg search`. Search for the package's name, such as `py37-cffi`, find the > latest version number, and update the command accordingly. - +> > ⚠️ On pfSense 2.4.5, Python version 3.7 may be installed by the system, in which case you should should not install > Python from the FreeBSD repository as instructed above. - +> > ⚠️ If you are using the `apcupsd` collector, you need to make sure that apcupsd is up before starting Netdata. > Otherwise a infinitely running `cat` process triggered by the default activated apcupsd charts plugin will eat up CPU > and RAM (`/tmp/.netdata-charts.d-*/run-*`). This also applies to `OPNsense`. @@ -75,7 +68,7 @@ Visit the Netdata dashboard to confirm it's working: `http://<pfsenseIP>:19999` To start Netdata automatically every boot, add `service netdata onestart` as a Shellcmd entry within the pfSense web interface under **Services/Shellcmd**. You'll need to install the Shellcmd package beforehand under **System/Package Manager/Available Packages**. The Shellcmd Type should be set to `Shellcmd`. -![](https://i.imgur.com/wcKiPe1.png) Alternatively more information can be found in +![interface](https://i.imgur.com/wcKiPe1.png) Alternatively more information can be found in <https://doc.pfsense.org/index.php/Installing_FreeBSD_Packages>, for achieving the same via the command line and scripts. @@ -83,5 +76,3 @@ If you experience an issue with `/usr/bin/install` being absent in pfSense 2.3 o workaround from <https://redmine.pfsense.org/issues/6643> **Note:** In pfSense, the Netdata configuration files are located under `/usr/local/etc/netdata`. - - diff --git a/packaging/installer/methods/source.md b/packaging/installer/methods/source.md index c6ff6e6f..f09db53d 100644 --- a/packaging/installer/methods/source.md +++ b/packaging/installer/methods/source.md @@ -1,13 +1,3 @@ -<!-- -title: "Manually build Netdata from source" -description: "Package maintainers and power users may be interested in manually building Netdata from source without using any of our installation scripts." -custom_edit_url: "https://github.com/netdata/netdata/edit/master/packaging/installer/methods/source.md" -sidebar_label: "Manually build Netdata from source" -learn_status: "Published" -learn_rel_path: "Installation/Package maintainers" -sidebar_position: 100 ---> - # Manually build Netdata from source These instructions are for advanced users and distribution package @@ -20,33 +10,33 @@ checkout](/packaging/installer/methods/manual.md) instead. At a bare minimum, Netdata requires the following libraries and tools to build and run successfully: -- libuuid -- libuv version 1.0 or newer -- zlib -- CMake 3.13 or newer -- GCC or Xcode (Clang is known to have issues in certain configurations, see [Using Clang](#using-clang)) -- Ninja or Make (Ninja is preferred as it results in significantly faster builds) -- Git (we use git in the build system to generate version info, you don't need a full install, just a working `git show` command) +- libuuid +- libuv version 1.0 or newer +- zlib +- CMake 3.13 or newer +- GCC or Xcode (Clang is known to have issues in certain configurations, see [Using Clang](#using-clang)) +- Ninja or Make (Ninja is preferred as it results in significantly faster builds) +- Git (we use git in the build system to generate version info, you don't need a full install, just a working `git show` command) The following additional dependencies are also needed, but will be prepared automatically by CMake if they are not available on the build system. -- libyaml -- JSON-C +- libyaml +- JSON-C Additionally, the following build time features require additional dependencies: -- TLS support for the web GUI: - - OpenSSL 1.0.2 or newer _or_ LibreSSL 3.0.0 or newer. -- dbengine metric storage: - - liblz4 r129 or newer - - OpenSSL 1.0 or newer (LibreSSL _amy_ work, but is largely untested). -- Netdata Cloud support: - - A working internet connection - - OpenSSL 1.0.2 or newer _or_ LibreSSL 3.0.0 or newer. - - protobuf (Google Protocol Buffers) and protoc compiler. If protobuf is not available on the system, +- TLS support for the web GUI: + - OpenSSL 1.0.2 or newer _or_ LibreSSL 3.0.0 or newer. +- dbengine metric storage: + - liblz4 r129 or newer + - OpenSSL 1.0 or newer (LibreSSL _amy_ work, but is largely untested). +- Netdata Cloud support: + - A working internet connection + - OpenSSL 1.0.2 or newer _or_ LibreSSL 3.0.0 or newer. + - protobuf (Google Protocol Buffers) and protoc compiler. If protobuf is not available on the system, CMake can be instructed to fetch and build a usable version for Netdata. -- Netdata Go collectors: - - Go 1.21 or newer +- Netdata Go collectors: + - Go 1.21 or newer ## Preparing the source tree @@ -111,12 +101,12 @@ a pre-built copy of the required code, or build it locally. We provide pre-built copies of the eBPF code for 64-bit x86 systems using glibc or musl. To use one of these: -1. Verify the release version that Netdata expects to be used by checking +1. Verify the release version that Netdata expects to be used by checking the contents of `packaging/ebpf.version` in your Netdata sources. -2. Go to https://github.com/netdata/kernel-collector/releases, select the +2. Go to <https://github.com/netdata/kernel-collector/releases>, select the required release, and download the `netdata-kernel-collector-*.tar.xz` file for the libc variant your system uses (either rmusl or glibc). -3. Extract the contents of the archive to a temporary location, and then +3. Extract the contents of the archive to a temporary location, and then copy all of the `.o` and `.so.*` files and the contents of the `library/` directory to `/usr/libexec/netdata/plugins.d` or the equivalent location for your build of Netdata. @@ -128,5 +118,3 @@ instructions, please consult [the README file for our kernel-collector repository](https://github.com/netdata/kernel-collector/#readme), which outlines both the required dependencies, as well as multiple options for building the code. - - diff --git a/packaging/installer/methods/synology.md b/packaging/installer/methods/synology.md index 742b3abb..10c13fe8 100644 --- a/packaging/installer/methods/synology.md +++ b/packaging/installer/methods/synology.md @@ -1,24 +1,14 @@ -<!-- -title: "Install Netdata on Synology" -description: "The Netdata Agent can be installed on AMD64-compatible NAS systems using the 64-bit pre-compiled static binary." -custom_edit_url: https://github.com/netdata/netdata/edit/master/packaging/installer/methods/synology.md -sidebar_label: "Synology" -learn_status: "Published" -learn_rel_path: "Installation/Install on specific environments" ---> - # Install Netdata on Synology > 💡 This document is maintained by Netdata's community, and may not be completely up-to-date. Please double-check the > details of the installation process, before proceeding. > -> You can help improve this document by -> [submitting a PR](https://github.com/netdata/netdata/edit/master/packaging/installer/methods/synology.md) +> You can help improve this document by +> [submitting a PR](https://github.com/netdata/netdata/edit/master/packaging/installer/methods/synology.md) > with your recommended improvements or changes. Thank you! - -The good news is that our -[one-line installation script](/packaging/installer/methods/kickstart.md) +The good news is that our +[one-line installation script](/packaging/installer/methods/kickstart.md) works fine if your NAS is one that uses the amd64 architecture. It will install the content into `/opt/netdata`, making future removal safe and simple. @@ -49,15 +39,13 @@ installations run it as the `netdata` user, you might wish to do the same. This Additionally, as of 2018/06/24, the Netdata installer doesn't recognize DSM as an operating system, so no init script is installed. You'll have to do this manually: -1. Add [this file](https://gist.github.com/oskapt/055d474d7bfef32c49469c1b53e8225f) as `/etc/rc.netdata`. Make it +1. Add [this file](https://gist.github.com/oskapt/055d474d7bfef32c49469c1b53e8225f) as `/etc/rc.netdata`. Make it executable with `chmod 0755 /etc/rc.netdata`. -2. Add or edit `/etc/rc.local` and add a line calling `/etc/rc.netdata` to have it start on boot: +2. Add or edit `/etc/rc.local` and add a line calling `/etc/rc.netdata` to have it start on boot: -```conf -# Netdata startup -[ -x /etc/rc.netdata ] && /etc/rc.netdata start -``` + ```text + # Netdata startup + [ -x /etc/rc.netdata ] && /etc/rc.netdata start + ``` 3. Make sure `/etc/rc.local` is executable: `chmod 0755 /etc/rc.local`. - - diff --git a/packaging/installer/methods/systems.md b/packaging/installer/methods/systems.md index 8715a57a..0f4c104a 100644 --- a/packaging/installer/methods/systems.md +++ b/packaging/installer/methods/systems.md @@ -1,12 +1,3 @@ -<!-- -title: "Install on specific environments" -description: "Netdata can be installed as a DEB/RPM package, a static binary, a docker container or from source" -custom_edit_url: https://github.com/netdata/netdata/edit/master/packaging/installer/methods/systems.md -sidebar_label: "Install on specific environments" -learn_status: "Published" -learn_rel_path: "Installation/Install on specific environments" ---> - # Install on specific environments This category contains specific instructions for some popular environments. diff --git a/packaging/installer/netdata-updater.sh b/packaging/installer/netdata-updater.sh index 5ebb6baa..51b5b14a 100755 --- a/packaging/installer/netdata-updater.sh +++ b/packaging/installer/netdata-updater.sh @@ -590,7 +590,9 @@ self_update() { export ENVIRONMENT_FILE="${ENVIRONMENT_FILE}" force_update="" [ "$NETDATA_FORCE_UPDATE" = "1" ] && force_update="--force-update" - exec ./netdata-updater.sh --not-running-from-cron --no-updater-self-update "$force_update" --tmpdir-path "$(pwd)" + interactive="" + [ "$INTERACTIVE" = "0" ] && interactive="--non-interactive" + exec ./netdata-updater.sh --not-running-from-cron --no-updater-self-update "$force_update" "$interactive" --tmpdir-path "$(pwd)" else error "Failed to download newest version of updater script, continuing with current version." fi diff --git a/packaging/maintainers/README.md b/packaging/maintainers/README.md index 612c7d0d..30b56e7d 100644 --- a/packaging/maintainers/README.md +++ b/packaging/maintainers/README.md @@ -8,72 +8,63 @@ This page tracks the package maintainers for Netdata, for various operating syst ## Official Linux Distributions -| Linux Distribution | Netdata Version | Maintainer | Related URL | -| :-: | :-: | :-: | :-- | -| Arch Linux | Release | @svenstaro | [netdata @ Arch Linux](https://www.archlinux.org/packages/community/x86_64/netdata/) | -| Arch Linux AUR | Git | @sanskritfritz | [netdata @ AUR](https://aur.archlinux.org/packages/netdata-git/) | -| Gentoo Linux | Release + Git | @candrews | [netdata @ gentoo](https://github.com/gentoo/gentoo/tree/master/net-analyzer/netdata) | -| Debian | Release | @lhw @FedericoCeratto | [netdata @ debian](http://salsa.debian.org/debian/netdata) | -| Slackware | Release | @willysr | [netdata @ slackbuilds](https://slackbuilds.org/repository/14.2/system/netdata/) | -| Ubuntu | | | | -| Red Hat / Fedora / CentOS | | | | -| SUSE SLE / openSUSE Tumbleweed & Leap | | | [netdata @ SUSE OpenBuildService](https://software.opensuse.org/package/netdata) | +| Linux Distribution | Netdata Version | Maintainer | Related URL | +|:-------------------------------------:|:---------------:|:---------------------:|:--------------------------------------------------------------------------------------| +| Arch Linux | Release | @svenstaro | [netdata @ Arch Linux](https://www.archlinux.org/packages/community/x86_64/netdata/) | +| Arch Linux AUR | Git | @sanskritfritz | [netdata @ AUR](https://aur.archlinux.org/packages/netdata-git/) | +| Gentoo Linux | Release + Git | @candrews | [netdata @ gentoo](https://github.com/gentoo/gentoo/tree/master/net-analyzer/netdata) | +| Debian | Release | @lhw @FedericoCeratto | [netdata @ debian](http://salsa.debian.org/debian/netdata) | +| Slackware | Release | @willysr | [netdata @ slackbuilds](https://slackbuilds.org/repository/14.2/system/netdata/) | +| Ubuntu | | | | +| Red Hat / Fedora / CentOS | | | | +| SUSE SLE / openSUSE Tumbleweed & Leap | | | [netdata @ SUSE OpenBuildService](https://software.opensuse.org/package/netdata) | --- ## FreeBSD -| System | Initial PR | Core Developer | Package Maintainer -|:-:|:-:|:-:|:-:| -| FreeBSD | #1321 | @vlvkobal|@mmokhi +| System | Initial PR | Core Developer | Package Maintainer | +|:-------:|:----------:|:--------------:|:------------------:| +| FreeBSD | #1321 | | @mmokhi | --- ## macOS -| System | URL | Core Developer | Package Maintainer -|:-:|:-:|:-:|:-:| -| macOS Homebrew Formula|[link](https://github.com/Homebrew/homebrew-core/blob/master/Formula/n/netdata.rb)|@vlvkobal|@rickard-von-essen +| System | URL | Core Developer | Package Maintainer | +|:----------------------:|:----------------------------------------------------------------------------------:|:--------------:|:------------------:| +| macOS Homebrew Formula | [link](https://github.com/Homebrew/homebrew-core/blob/master/Formula/n/netdata.rb) | | | --- ## Unofficial Linux Packages -| Linux Distribution | Netdata Version | Maintainer | Related URL | -| :-: | :-: | :-: | :-- | -| Ubuntu | Release | @gslin | [netdata @ gslin ppa](https://launchpad.net/~gslin/+archive/ubuntu/netdata) https://github.com/netdata/netdata/issues/69#issuecomment-217458543 | ---- - -## Embedded Linux - -| Embedded Linux | Netdata Version | Maintainer | Related URL | -| :-: | :-: | :-: | :-- | -| OpenWRT | Release | @nitroshift | [openwrt package](https://github.com/openwrt/packages/tree/master/admin/netdata) | -| ReadyNAS | Release | @NAStools | https://github.com/nastools/netdata | -| QNAP | Release | QNAP_Stephane | https://forum.qnap.com/viewtopic.php?t=121518 | -| DietPi | Release | @Fourdee | https://github.com/Fourdee/DietPi | +| Linux Distribution | Netdata Version | Maintainer | Related URL | +|:------------------:|:---------------:|:----------:|:--------------------------------------------------------------------------------------------------------------------------------------------------| +| Ubuntu | Release | @gslin | [netdata @ gslin ppa](https://launchpad.net/~gslin/+archive/ubuntu/netdata) <https://github.com/netdata/netdata/issues/69#issuecomment-217458543> | --- -## Linux Containers +## Embedded Linux -| Containers | Netdata Version | Maintainer | Related URL | -| :-: | :-: | :-: | :-- | -| Docker | Git | @titpetric | https://github.com/titpetric/netdata | +| Embedded Linux | Netdata Version | Maintainer | Related URL | +|:--------------:|:---------------:|:-------------:|:---------------------------------------------------------------------------------| +| OpenWRT | Release | @nitroshift | [openwrt package](https://github.com/openwrt/packages/tree/master/admin/netdata) | +| ReadyNAS | Release | @NAStools | <https://github.com/nastools/netdata> | +| QNAP | Release | QNAP_Stephane | <https://forum.qnap.com/viewtopic.php?t=121518> | +| DietPi | Release | @Fourdee | <https://github.com/Fourdee/DietPi> | --- ## Automation Systems -| Automation Systems | Netdata Version | Maintainer | Related URL | -| :-: | :-: | :-: | :-- | -| Ansible | git | @jffz | https://galaxy.ansible.com/jffz/netdata/ | -| Chef | ? | @sergiopena | https://github.com/sergiopena/netdata-cookbook | +| Automation Systems | Netdata Version | Maintainer | Related URL | +|:------------------:|:---------------:|:-----------:|:-------------------------------------------------| +| Ansible | git | @jffz | <https://galaxy.ansible.com/jffz/netdata/> | +| Chef | ? | @sergiopena | <https://github.com/sergiopena/netdata-cookbook> | --- ## Packages summary from repology.org [![Packaging status](https://repology.org/badge/vertical-allrepos/netdata.svg)](https://repology.org/metapackage/netdata/versions) - - diff --git a/packaging/makeself/README.md b/packaging/makeself/README.md index d1c492f6..7344f338 100644 --- a/packaging/makeself/README.md +++ b/packaging/makeself/README.md @@ -1,13 +1,3 @@ -<!-- -title: "Netdata static binary build" -description: "Users can build the static 64-bit binary package that we ship with every release of the open-source Netdata Agent for debugging or specialize purposes." -custom_edit_url: https://github.com/netdata/netdata/edit/master/packaging/makeself/README.md -sidebar_label: "Static binary packages" -learn_status: "Published" -learn_rel_path: "Installation/Installation methods" -sidebar_position: 30 ---> - # Netdata static binary build We publish pre-built static builds of Netdata for Linux systems. Currently, these are published for 64-bit x86, ARMv7, diff --git a/packaging/makeself/jobs/70-netdata-git.install.sh b/packaging/makeself/jobs/70-netdata-git.install.sh index 59074ec5..33531608 100755 --- a/packaging/makeself/jobs/70-netdata-git.install.sh +++ b/packaging/makeself/jobs/70-netdata-git.install.sh @@ -32,7 +32,6 @@ run ./netdata-installer.sh \ --dont-wait \ --dont-start-it \ --disable-exporting-mongodb \ - --require-cloud \ --use-system-protobuf \ --dont-scrub-cflags-even-though-it-may-break-things \ --one-time-build \ diff --git a/packaging/makeself/jobs/99-makeself.install.sh b/packaging/makeself/jobs/99-makeself.install.sh index 2695e8eb..3b060838 100755 --- a/packaging/makeself/jobs/99-makeself.install.sh +++ b/packaging/makeself/jobs/99-makeself.install.sh @@ -104,13 +104,13 @@ run mkdir -p artifacts run mv "${NETDATA_INSTALL_PATH}.gz.run" "artifacts/${FILE}" [ -f "netdata-${BUILDARCH}-latest.gz.run" ] && rm "netdata-${BUILDARCH}-latest.gz.run" -run ln -s "artifacts/${FILE}" "netdata-${BUILDARCH}-latest.gz.run" +run cp "artifacts/${FILE}" "netdata-${BUILDARCH}-latest.gz.run" if [ "${BUILDARCH}" = "x86_64" ]; then [ -f "netdata-latest.gz.run" ] && rm "netdata-latest.gz.run" - run ln -s "artifacts/${FILE}" "netdata-latest.gz.run" + run cp "artifacts/${FILE}" "netdata-latest.gz.run" [ -f "artifacts/netdata-${VERSION}.gz.run" ] && rm "netdata-${VERSION}.gz.run" - run ln -s "./${FILE}" "artifacts/netdata-${VERSION}.gz.run" + run cp "artifacts/${FILE}" "artifacts/netdata-${VERSION}.gz.run" fi # shellcheck disable=SC2015 diff --git a/packaging/repoconfig/CMakeLists.txt b/packaging/repoconfig/CMakeLists.txt index 415ad880..54ac3c49 100644 --- a/packaging/repoconfig/CMakeLists.txt +++ b/packaging/repoconfig/CMakeLists.txt @@ -9,8 +9,8 @@ list(APPEND DEB_DISTROS debian ubuntu) set(DEB_GPG_KEY_SOURCE "https://repo.netdata.cloud/netdatabot.gpg.key") -set(PACKAGE_VERSION 3) -set(PACKAGE_RELEASE 4) +set(PACKAGE_VERSION 4) +set(PACKAGE_RELEASE 1) set(CPACK_THREADS 0) set(CPACK_STRIP_FILES NO) diff --git a/packaging/repoconfig/deb.changelog b/packaging/repoconfig/deb.changelog index 6d1dca88..28f44705 100644 --- a/packaging/repoconfig/deb.changelog +++ b/packaging/repoconfig/deb.changelog @@ -1,3 +1,15 @@ +@PKG_NAME@ (4-1) unstable; urgency=medium + + * Update repositories to new subdomain + + -- Austin Hemmelgarn <austin@netdata.cloud> Thu, 31 Oct 2024 11:00:00 -0400 + +@PKG_NAME@ (3-5) unstable; urgency=medium + + * Switch DEB packages to fetch repo metadata by hash. + + -- Austin Hemmelgarn <austin@netdata.cloud> Thu, 12 Sep 2024 07:27:00 -0400 + @PKG_NAME@ (3-4) unstable; urgency=medium * Convert sources to DEB822 format diff --git a/packaging/repoconfig/netdata.repo.dnf b/packaging/repoconfig/netdata.repo.dnf index 3a64a2a5..42fed9b4 100644 --- a/packaging/repoconfig/netdata.repo.dnf +++ b/packaging/repoconfig/netdata.repo.dnf @@ -1,19 +1,19 @@ [netdata] name=Netdata -baseurl=https://repo.netdata.cloud/repos/@VARIANT@/@DIST_NAME@/@DIST_VERSION@/$basearch +baseurl=https://repository.netdata.cloud/repos/@VARIANT@/@DIST_NAME@/@DIST_VERSION@/$basearch repo_gpgcheck=1 gpgcheck=1 -gpgkey=https://repo.netdata.cloud/netdatabot.gpg.key +gpgkey=https://repository.netdata.cloud/netdatabot.gpg.key enabled=1 sslverify=1 priority=50 [netdata-repoconfig] name=Netdata Repository Config -baseurl=https://repo.netdata.cloud/repos/repoconfig/@DIST_NAME@/@DIST_VERSION@/$basearch +baseurl=https://repository.netdata.cloud/repos/repoconfig/@DIST_NAME@/@DIST_VERSION@/$basearch repo_gpgcheck=1 gpgcheck=1 -gpgkey=https://repo.netdata.cloud/netdatabot.gpg.key +gpgkey=https://repository.netdata.cloud/netdatabot.gpg.key enabled=1 sslverify=1 priority=50 diff --git a/packaging/repoconfig/netdata.repo.zypp b/packaging/repoconfig/netdata.repo.zypp index 9ab84734..c352f9c4 100644 --- a/packaging/repoconfig/netdata.repo.zypp +++ b/packaging/repoconfig/netdata.repo.zypp @@ -1,19 +1,19 @@ [netdata] name=Netdata -baseurl=https://repo.netdata.cloud/repos/@VARIANT@/@DIST_NAME@/@DIST_VERSION@/$basearch +baseurl=https://repository.netdata.cloud/repos/@VARIANT@/@DIST_NAME@/@DIST_VERSION@/$basearch repo_gpgcheck=1 pkg_gpgcheck=1 -gpgkey=https://repo.netdata.cloud/netdatabot.gpg.key +gpgkey=https://repository.netdata.cloud/netdatabot.gpg.key enabled=1 type=rpm-md autorefresh=1 [netdata-repoconfig] name=Netdata Repoconfig -baseurl=https://repo.netdata.cloud/repos/repoconfig/@DIST_NAME@/@DIST_VERSION@/$basearch +baseurl=https://repository.netdata.cloud/repos/repoconfig/@DIST_NAME@/@DIST_VERSION@/$basearch repo_gpgcheck=1 pkg_gpgcheck=1 -gpgkey=https://repo.netdata.cloud/netdatabot.gpg.key +gpgkey=https://repository.netdata.cloud/netdatabot.gpg.key enabled=1 type=rpm-md autorefresh=1 diff --git a/packaging/repoconfig/netdata.sources.in b/packaging/repoconfig/netdata.sources.in index 926b2c45..6579a4f0 100644 --- a/packaging/repoconfig/netdata.sources.in +++ b/packaging/repoconfig/netdata.sources.in @@ -1,15 +1,15 @@ X-Repolib-Name: Netdata @VARIANT@ repository Types: deb -URIs: http://repo.netdata.cloud/repos/@VARIANT@/@DIST_NAME@/ +URIs: http://repository.netdata.cloud/repos/@VARIANT@/@DIST_NAME@/ Suites: @SUITE@/ Signed-By: /usr/share/keyrings/netdata-archive-keyring.gpg -By-Hash: No +By-Hash: Yes Enabled: Yes X-Repolib-Name: Netdata repository configuration repository Types: deb -URIs: http://repo.netdata.cloud/repos/repoconfig/@DIST_NAME@/ +URIs: http://repository.netdata.cloud/repos/repoconfig/@DIST_NAME@/ Suites: @SUITE@/ Signed-By: /usr/share/keyrings/netdata-archive-keyring.gpg -By-Hash: No +By-Hash: Yes Enabled: Yes diff --git a/packaging/repoconfig/rpm.changelog b/packaging/repoconfig/rpm.changelog index dab81a2c..7469eb26 100644 --- a/packaging/repoconfig/rpm.changelog +++ b/packaging/repoconfig/rpm.changelog @@ -1,4 +1,8 @@ -* Mon Aug 19 2024 Austin Hemmelgarn <austin@netdata.cloud +* Thu Oct 31 2024 Austin Hemmelgarn <austin@netdata.cloud> 4-1 +- Switch repos to new subdomain. +* Thu Sep 17 2024 Austin Hemmelgarn <austin@netdata.cloud> 3-5 +- Fix changelog formatting. +* Mon Aug 19 2024 Austin Hemmelgarn <austin@netdata.cloud> 3-4 - Version bump to stay in sync with DEB packages. * Fri Aug 9 2024 Austin Hemmelgarn <austin@netdata.cloud> 3-3 - Use system certificate config for Yum/DNF repos. diff --git a/packaging/utils/compile-and-run-windows.sh b/packaging/utils/compile-and-run-windows.sh new file mode 100644 index 00000000..2d540eee --- /dev/null +++ b/packaging/utils/compile-and-run-windows.sh @@ -0,0 +1,92 @@ +#!/bin/sh + +# On MSYS2, install these dependencies to build netdata: +install_dependencies() { + pacman -S \ + git cmake ninja clang base-devel msys2-devel \ + libyaml-devel libzstd-devel libutil-linux libutil-linux-devel \ + mingw-w64-x86_64-toolchain mingw-w64-ucrt-x86_64-toolchain \ + mingw64/mingw-w64-x86_64-mold ucrt64/mingw-w64-ucrt-x86_64-mold \ + msys/gdb ucrt64/mingw-w64-ucrt-x86_64-gdb mingw64/mingw-w64-x86_64-gdb \ + msys/zlib-devel mingw64/mingw-w64-x86_64-zlib ucrt64/mingw-w64-ucrt-x86_64-zlib \ + msys/libuv-devel ucrt64/mingw-w64-ucrt-x86_64-libuv mingw64/mingw-w64-x86_64-libuv \ + liblz4-devel mingw64/mingw-w64-x86_64-lz4 ucrt64/mingw-w64-ucrt-x86_64-lz4 \ + openssl-devel mingw64/mingw-w64-x86_64-openssl ucrt64/mingw-w64-ucrt-x86_64-openssl \ + protobuf-devel mingw64/mingw-w64-x86_64-protobuf ucrt64/mingw-w64-ucrt-x86_64-protobuf \ + msys/pcre2-devel mingw64/mingw-w64-x86_64-pcre2 ucrt64/mingw-w64-ucrt-x86_64-pcre2 \ + msys/brotli-devel mingw64/mingw-w64-x86_64-brotli ucrt64/mingw-w64-ucrt-x86_64-brotli \ + msys/ccache ucrt64/mingw-w64-ucrt-x86_64-ccache mingw64/mingw-w64-x86_64-ccache \ + mingw64/mingw-w64-x86_64-go ucrt64/mingw-w64-ucrt-x86_64-go \ + mingw64/mingw-w64-x86_64-nsis \ + msys/libcurl msys/libcurl-devel +} + +if [ "${1}" = "install" ] +then + install_dependencies || exit 1 + exit 0 +fi + +BUILD_FOR_PACKAGING="Off" +if [ "${1}" = "package" ] +then + BUILD_FOR_PACKAGING="On" +fi + +export PATH="/usr/local/bin:${PATH}" + +WT_ROOT="$(pwd)" +BUILD_TYPE="Debug" +NULL="" + +if [ -z "${MSYSTEM}" ]; then + build="${WT_ROOT}/build-${OSTYPE}" +else + build="${WT_ROOT}/build-${OSTYPE}-${MSYSTEM}" +fi + +if [ "$USER" = "vk" ]; then + build="${WT_ROOT}/build" +fi + +set -exu -o pipefail + +if [ ! -d "${build}" ] +then + /usr/bin/cmake -S "${WT_ROOT}" -B "${build}" \ + -G Ninja \ + -DCMAKE_INSTALL_PREFIX="/opt/netdata" \ + -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \ + -DCMAKE_C_FLAGS="-fstack-protector-all -O0 -ggdb -Wall -Wextra -Wno-char-subscripts -Wa,-mbig-obj -pipe -DNETDATA_INTERNAL_CHECKS=1 -D_FILE_OFFSET_BITS=64 -D__USE_MINGW_ANSI_STDIO=1" \ + -DBUILD_FOR_PACKAGING=${BUILD_FOR_PACKAGING} \ + -DUSE_MOLD=Off \ + -DNETDATA_USER="${USER}" \ + -DDEFAULT_FEATURE_STATE=Off \ + -DENABLE_H2O=Off \ + -DENABLE_ML=On \ + -DENABLE_BUNDLED_JSONC=On \ + -DENABLE_BUNDLED_PROTOBUF=Off \ + -DENABLE_PLUGIN_APPS=On \ + ${NULL} +fi + +ninja -v -C "${build}" || ninja -v -C "${build}" -j 1 + +echo "Stopping service Netdata" +sc stop "Netdata" || echo "Failed" + +ninja -v -C "${build}" install || ninja -v -C "${build}" -j 1 + +# register the event log publisher +cmd.exe //c "$(cygpath -w -a "/opt/netdata/usr/bin/wevt_netdata_install.bat")" + +#echo +#echo "Compile with:" +#echo "ninja -v -C \"${build}\" install || ninja -v -C \"${build}\" -j 1" + +echo "starting netdata..." +# enable JIT debug with gdb +export MSYS="error_start:$(cygpath -w /usr/bin/gdb)" + +rm -rf /opt/netdata/var/log/netdata/*.log || echo +/opt/netdata/usr/bin/netdata -D diff --git a/packaging/version b/packaging/version index 3ea09128..46b105a3 100644 --- a/packaging/version +++ b/packaging/version @@ -1 +1 @@ -v1.47.5 +v2.0.0 diff --git a/packaging/windows/BackGround.bmp b/packaging/windows/BackGround.bmp Binary files differnew file mode 100644 index 00000000..bceebb41 --- /dev/null +++ b/packaging/windows/BackGround.bmp diff --git a/packaging/windows/Top.bmp b/packaging/windows/Top.bmp Binary files differnew file mode 100644 index 00000000..ef12f7a0 --- /dev/null +++ b/packaging/windows/Top.bmp diff --git a/packaging/windows/WINDOWS_INSTALLER.md b/packaging/windows/WINDOWS_INSTALLER.md new file mode 100644 index 00000000..fb727bb3 --- /dev/null +++ b/packaging/windows/WINDOWS_INSTALLER.md @@ -0,0 +1,64 @@ +# Netdata Windows Installer + +Netdata offers a convenient Windows installer for easy setup. This executable provides two distinct installation modes, outlined below. + +> **Note** +> +> This feature is currently under beta and only available for Nightly releases, and the installer can be found in our [nightlies repo](https://github.com/netdata/netdata-nightlies). A stable version will be released soon. + +## Graphical User Interface (GUI) + +Double-clicking the installer initiates the setup process. Since Netdata adds a service to your system, you'll need to provide administrator privileges. + +The installer will then guide you through these steps: + +1. **Welcome**: This screen provides a summary of the actions the installer will perform. +2. **License Agreements**: + - [Netdata Cloud UI License](https://app.netdata.cloud/LICENSE.txt): Review and accept the license terms to proceed. + - [GPLv3 License](/LICENSE): Read the GNU General Public License v3, which governs the Netdata software. +3. **Destination**: Choose the installation directory. By default, Netdata installs in `C:\Program Files\Netdata`. +4. **Installation**: The installer will copy the necessary files to the chosen directory. +5. **Connect to Netdata Cloud**: To [connect](/src/claim/README.md) your Agent to your Netdata Cloud Space you need to provide the following: + - **Claim Token**: The Claim Token that securely authenticates and links your Agent to your Space. + - **Room IDs**: A comma-separated list of Room IDs where you want to add your Agent. + - **Proxy address**: The address of a proxy server, if one is required for communication with Netdata Cloud. + - **Insecure connection**: By default, Netdata verifies the server's certificate. Enabling this option bypasses verification (use only if necessary). + - **Open Terminal**: Select this option to launch the `MSYS2` terminal after installation completes. +6. **Finish**: The installation process is complete! + +## Silent Mode (Command line) + +This section provides instructions for installing Netdata in silent mode, which is ideal for automated deployments. + +> **Info** +> +> Run the installer as admin to avoid the Windows prompt. +> +> Silent mode skips displaying license agreements, but requires explicitly accepting them using the `/A` option. + +### Available Options + +| Option | Description | +|-----------|--------------------------------------------------------------------------------------------------| +| `/S` | Enables silent mode installation. | +| `/A` | Accepts all Netdata licenses. This option is mandatory for silent installations. | +| `/D` | Specifies the desired installation directory (defaults to `C:\Program Files\Netdata`). | +| `/T` | Opens the `MSYS2` terminal after installation. | +| `/I` | Forces insecure connections, bypassing hostname verification (use only if absolutely necessary). | +| `/TOKEN=` | Sets the Claim Token for your Netdata Cloud Space. | +| `/ROOMS=` | Comma-separated list of Room IDs where you want your node to appear. | +| `/PROXY=` | Sets the proxy server address if your network requires one. | + +### Example Usage + +Connect your Agent to your Netdata Cloud Space with token `<YOUR_TOKEN>` and room `<YOUR_ROOM>`: + +```bash +netdata-installer-x64.exe /S /A /TOKEN=<YOUR_TOKEN> /ROOMS=<YOUR_ROOM> +``` + +Replace `<YOUR_TOKEN>` and `<YOUR_ROOM>` with your actual Netdata Cloud Space claim token and room ID, respectively. + +> **Note** +> +> The Windows version of Netdata is intended for users on paid plans. diff --git a/packaging/windows/clion-msys-msys-environment.bat b/packaging/windows/clion-msys-msys-environment.bat index 9f0c095d..16934951 100644 --- a/packaging/windows/clion-msys-msys-environment.bat +++ b/packaging/windows/clion-msys-msys-environment.bat @@ -13,7 +13,9 @@ set MSYSTEM=MSYS :: go exists only mingw64 / ucrt64 / etc, not under msys profile
set GOROOT=C:\msys64\mingw64
-set PATH="%PATH%;C:\msys64\usr\bin;C:\msys64\bin;C:\msys64\mingw64\bin"
+set "PATH=%PATH%;C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64"
+set "PATH=%PATH%;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\bin\Hostx64\x64"
+set "PATH=%PATH%;C:\msys64\usr\bin;C:\msys64\bin;C:\msys64\mingw64\bin"
::set PKG_CONFIG_EXECUTABLE=C:\msys64\mingw64\bin\pkg-config.exe
::set CMAKE_C_COMPILER=C:\msys64\mingw64\bin\gcc.exe
::set CMAKE_CC_COMPILER=C:\msys64\mingw64\bin\g++.exe
diff --git a/packaging/windows/compile-on-windows.sh b/packaging/windows/compile-on-windows.sh index ceb4f550..a2c66a2e 100755 --- a/packaging/windows/compile-on-windows.sh +++ b/packaging/windows/compile-on-windows.sh @@ -6,7 +6,7 @@ CMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE:-RelWithDebInfo}" # shellcheck source=./win-build-dir.sh . "${REPO_ROOT}/packaging/windows/win-build-dir.sh" -set -exu -o pipefail +set -eu -o pipefail if [ -d "${build}" ]; then rm -rf "${build}" diff --git a/packaging/windows/find-sdk-path.sh b/packaging/windows/find-sdk-path.sh new file mode 100644 index 00000000..fb0eb600 --- /dev/null +++ b/packaging/windows/find-sdk-path.sh @@ -0,0 +1,217 @@ +#!/bin/bash + +# Function to output the path in Windows format (convert from MSYS2/Unix format using cygpath) +convert_to_windows_format() { + cygpath -w -a "$1" +} + +# Function to display help message +display_help() { + echo "Usage: $0 [-s|--sdk] [-v|--visualstudio] [-w|--windows] [--help]" + echo + echo "Options:" + echo " -s, --sdk Search for tools in the Windows SDK." + echo " -v, --visualstudio Search for tools in Visual Studio." + echo " -w, --windows Output the path in Windows format (using cygpath)." + echo " --help Display this help message." + exit 0 +} + +# Function to find tools in the Windows SDK +find_sdk_tools() { + sdk_base_path="/c/Program Files (x86)/Windows Kits/10/bin" + + if [ ! -d "$sdk_base_path" ]; then + echo "ERROR: SDK base path \"$sdk_base_path\" does not exist. No SDK installations found." >&2 + echo "$system_root" + return 1 + fi + + echo "SDK base path exists: \"$sdk_base_path\"" >&2 + + # Find all SDK versions + sdk_versions=($(ls "$sdk_base_path" | tr ' ' '\n' | grep -E "^[0-9]+\..*$")) + echo "Found SDK versions: ${sdk_versions[*]}" >&2 + + if [ ${#sdk_versions[@]} -eq 0 ]; then + echo "ERROR: No valid Windows SDK versions found in \"$sdk_base_path\"." >&2 + echo "$system_root" + return 1 + fi + + # Sort versions and pick the latest + sorted_versions=$(printf '%s\n' "${sdk_versions[@]}" | sort -V) + latest_sdk_version=$(echo "$sorted_versions" | tail -n 1) + sdk_tool_path="$sdk_base_path/$latest_sdk_version/x64" + + echo "Latest SDK version: \"$latest_sdk_version\"" >&2 + + if [ ! -d "$sdk_tool_path" ]; then + echo "ERROR: Tool path \"$sdk_tool_path\" does not exist." >&2 + echo "$system_root" + return 1 + fi + + # Check if required tools exist + tools=("mc.exe" "rc.exe") + for tool in "${tools[@]}"; do + if [ ! -f "$sdk_tool_path/$tool" ]; then + echo "ERROR: $tool not found in \"$sdk_tool_path\"" >&2 + echo "$system_root" + return 1 + else + echo "$tool found in \"$sdk_tool_path\"" >&2 + fi + done + + echo >&2 + echo "DONE: All required tools found in \"$sdk_tool_path\"" >&2 + echo >&2 + + echo "$sdk_tool_path" +} + +# Function to find tools in Visual Studio +find_visual_studio_tools() { + studio_base_path="/c/Program Files/Microsoft Visual Studio/2022" + echo "Checking for Visual Studio installations in: \"$studio_base_path\"" >&2 + + if [ ! -d "$studio_base_path" ]; then + echo "ERROR: Visual Studio base path \"$studio_base_path\" does not exist. No Visual Studio installations found." >&2 + echo "$system_root" + return 1 + fi + + # Visual Studio editions we want to check + editions=("Enterprise" "Professional" "Community") + available_editions=() + + # Loop through each edition and check for tools + for edition in "${editions[@]}"; do + edition_path="$studio_base_path/$edition/VC/Tools/MSVC" + if [ -d "$edition_path" ]; then + available_editions+=("$edition") + echo "Checking edition: $edition in $studio_base_path" >&2 + + # Find all MSVC versions and sort them + msvc_versions=($(ls "$edition_path" | tr ' ' '\n' | grep -E "^[0-9]+\..*$")) + echo "Found MSVC versions in $edition: ${msvc_versions[*]}" >&2 + + if [ ${#msvc_versions[@]} -gt 0 ]; then + sorted_versions=$(printf '%s\n' "${msvc_versions[@]}" | sort -V) + latest_msvc_version=$(echo "${sorted_versions[@]}" | tail -n 1) + vs_tool_path="$edition_path/$latest_msvc_version/bin/Hostx64/x64" + + echo "Latest MSVC version: \"$latest_msvc_version\" in $edition" >&2 + + if [ ! -d "$vs_tool_path" ]; then + echo "WARNING: Tool path \"$vs_tool_path\" does not exist." >&2 + continue + fi + + # Check if required tools exist + tools=("link.exe") + missing_tool=0 + + for tool in "${tools[@]}"; do + if [ ! -f "$vs_tool_path/$tool" ]; then + echo "WARNING: $tool not found in \"$vs_tool_path\" for $edition" >&2 + missing_tool=1 + else + echo "$tool found in \"$vs_tool_path\"" >&2 + fi + done + + if [ $missing_tool -eq 0 ]; then + echo >&2 + echo "All required tools found in \"$vs_tool_path\"" >&2 + echo >&2 + + echo "$vs_tool_path" + return 0 + else + echo "WARNING: skipping edition '$edition', directory does not exist." >&2 + fi + else + echo "WARNING: skipping edition '$edition', MSVC directory does not exist." >&2 + fi + else + echo "WARNING: skipping edition '$edition', directory does not exist." >&2 + fi + done + + echo "ERROR: No valid Visual Studio editions found in \"$studio_base_path\"." >&2 + echo "$system_root" + return 1 +} + +# Parse options using getopt +TEMP=$(getopt -o svwh --long sdk,visualstudio,windows,help -- "$@") +if [ $? != 0 ]; then + echo "ERROR: Invalid options provided." >&2 + exit 1 +fi + +eval set -- "$TEMP" + +search_mode="sdk" +windows_format=0 +system_root="/usr/bin" + +# Process getopt options +while true; do + case "$1" in + -s|--sdk) + search_mode="sdk" + shift + ;; + -v|--visualstudio) + search_mode="visualstudio" + shift + ;; + -w|--windows) + system_root="%SYSTEMROOT%" + windows_format=1 + shift + ;; + --help|-h) + display_help + ;; + --) + shift + break + ;; + *) + echo "ERROR: Invalid option: $1" >&2 + exit 1 + ;; + esac +done + +# Ensure that one of --sdk or --visualstudio is selected +if [ -z "$search_mode" ]; then + echo "ERROR: You must specify either --sdk or --visualstudio." >&2 + display_help +fi + +# Determine which function to call based on the search mode +if [ "$search_mode" = "sdk" ]; then + tool_path=$(find_sdk_tools) +else + tool_path=$(find_visual_studio_tools) +fi + +# If a valid path is found, output it +if [ "$tool_path" != "$system_root" ]; then + if [ "$windows_format" -eq 1 ]; then + windows_tool_path=$(convert_to_windows_format "$tool_path") + echo "$windows_tool_path" + else + echo "$tool_path" + fi +else + echo "$system_root" + exit 1 +fi + +exit 0 diff --git a/packaging/windows/get-convert-licenses.sh b/packaging/windows/get-convert-licenses.sh new file mode 100755 index 00000000..b5d5191d --- /dev/null +++ b/packaging/windows/get-convert-licenses.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0-or-later + +set -e + +function txt_to_rtf() { + INPUT="$1" + OUTPUT="$2" + + echo '{\rtf1\ansi\deff0 {\fonttbl {\f0 Times New Roman;}}' > "$OUTPUT" + echo '\paperh15840 \paperw12240' >> "$OUTPUT" + echo '\margl720 \margr720 \margt720 \margb720' >> "$OUTPUT" + echo '\f0\fs24' >> "$OUTPUT" + + sed s/\$/'\\line'/ "$INPUT" | sed s/\\f/'\\page'/ >> "$OUTPUT" + echo '}' >> "$OUTPUT" +} + +function check_and_get_file() { + if [ ! -f "$1" ]; then + curl -o "tmp.txt" "$2" + txt_to_rtf "tmp.txt" "$1" + rm "tmp.txt" + fi +} + +check_and_get_file "gpl-3.0.rtf" "https://www.gnu.org/licenses/gpl-3.0.txt" +check_and_get_file "ncul1.rtf" "https://app.netdata.cloud/LICENSE.txt" + diff --git a/packaging/windows/get-win-build-path.sh b/packaging/windows/get-win-build-path.sh new file mode 100755 index 00000000..0f05f26d --- /dev/null +++ b/packaging/windows/get-win-build-path.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +REPO_ROOT="$(dirname "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" > /dev/null && pwd -P)")")" + +# shellcheck source=./win-build-dir.sh +. "${REPO_ROOT}/packaging/windows/win-build-dir.sh" + +cygpath -wa "${build}" diff --git a/packaging/windows/gpl-3.0.rtf b/packaging/windows/gpl-3.0.rtf new file mode 100644 index 00000000..3cffae8a --- /dev/null +++ b/packaging/windows/gpl-3.0.rtf @@ -0,0 +1,679 @@ +{\rtf1\ansi\deff0 {\fonttbl {\f0 Times New Roman;}} +\paperh15840 \paperw12240 +\margl720 \margr720 \margt720 \margb720 +\f0\fs24 + GNU GENERAL PUBLIC LICENSE\line + Version 3, 29 June 2007\line +\line + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\line + Everyone is permitted to copy and distribute verbatim copies\line + of this license document, but changing it is not allowed.\line +\line + Preamble\line +\line + The GNU General Public License is a free, copyleft license for\line +software and other kinds of works.\line +\line + The licenses for most software and other practical works are designed\line +to take away your freedom to share and change the works. By contrast,\line +the GNU General Public License is intended to guarantee your freedom to\line +share and change all versions of a program--to make sure it remains free\line +software for all its users. We, the Free Software Foundation, use the\line +GNU General Public License for most of our software; it applies also to\line +any other work released this way by its authors. You can apply it to\line +your programs, too.\line +\line + When we speak of free software, we are referring to freedom, not\line +price. Our General Public Licenses are designed to make sure that you\line +have the freedom to distribute copies of free software (and charge for\line +them if you wish), that you receive source code or can get it if you\line +want it, that you can change the software or use pieces of it in new\line +free programs, and that you know you can do these things.\line +\line + To protect your rights, we need to prevent others from denying you\line +these rights or asking you to surrender the rights. Therefore, you have\line +certain responsibilities if you distribute copies of the software, or if\line +you modify it: responsibilities to respect the freedom of others.\line +\line + For example, if you distribute copies of such a program, whether\line +gratis or for a fee, you must pass on to the recipients the same\line +freedoms that you received. You must make sure that they, too, receive\line +or can get the source code. And you must show them these terms so they\line +know their rights.\line +\line + Developers that use the GNU GPL protect your rights with two steps:\line +(1) assert copyright on the software, and (2) offer you this License\line +giving you legal permission to copy, distribute and/or modify it.\line +\line + For the developers' and authors' protection, the GPL clearly explains\line +that there is no warranty for this free software. For both users' and\line +authors' sake, the GPL requires that modified versions be marked as\line +changed, so that their problems will not be attributed erroneously to\line +authors of previous versions.\line +\line + Some devices are designed to deny users access to install or run\line +modified versions of the software inside them, although the manufacturer\line +can do so. This is fundamentally incompatible with the aim of\line +protecting users' freedom to change the software. The systematic\line +pattern of such abuse occurs in the area of products for individuals to\line +use, which is precisely where it is most unacceptable. Therefore, we\line +have designed this version of the GPL to prohibit the practice for those\line +products. If such problems arise substantially in other domains, we\line +stand ready to extend this provision to those domains in future versions\line +of the GPL, as needed to protect the freedom of users.\line +\line + Finally, every program is threatened constantly by software patents.\line +States should not allow patents to restrict development and use of\line +software on general-purpose computers, but in those that do, we wish to\line +avoid the special danger that patents applied to a free program could\line +make it effectively proprietary. To prevent this, the GPL assures that\line +patents cannot be used to render the program non-free.\line +\line + The precise terms and conditions for copying, distribution and\line +modification follow.\line +\line + TERMS AND CONDITIONS\line +\line + 0. Definitions.\line +\line + "This License" refers to version 3 of the GNU General Public License.\line +\line + "Copyright" also means copyright-like laws that apply to other kinds of\line +works, such as semiconductor masks.\line +\line + "The Program" refers to any copyrightable work licensed under this\line +License. Each licensee is addressed as "you". "Licensees" and\line +"recipients" may be individuals or organizations.\line +\line + To "modify" a work means to copy from or adapt all or part of the work\line +in a fashion requiring copyright permission, other than the making of an\line +exact copy. The resulting work is called a "modified version" of the\line +earlier work or a work "based on" the earlier work.\line +\line + A "covered work" means either the unmodified Program or a work based\line +on the Program.\line +\line + To "propagate" a work means to do anything with it that, without\line +permission, would make you directly or secondarily liable for\line +infringement under applicable copyright law, except executing it on a\line +computer or modifying a private copy. Propagation includes copying,\line +distribution (with or without modification), making available to the\line +public, and in some countries other activities as well.\line +\line + To "convey" a work means any kind of propagation that enables other\line +parties to make or receive copies. Mere interaction with a user through\line +a computer network, with no transfer of a copy, is not conveying.\line +\line + An interactive user interface displays "Appropriate Legal Notices"\line +to the extent that it includes a convenient and prominently visible\line +feature that (1) displays an appropriate copyright notice, and (2)\line +tells the user that there is no warranty for the work (except to the\line +extent that warranties are provided), that licensees may convey the\line +work under this License, and how to view a copy of this License. If\line +the interface presents a list of user commands or options, such as a\line +menu, a prominent item in the list meets this criterion.\line +\line + 1. Source Code.\line +\line + The "source code" for a work means the preferred form of the work\line +for making modifications to it. "Object code" means any non-source\line +form of a work.\line +\line + A "Standard Interface" means an interface that either is an official\line +standard defined by a recognized standards body, or, in the case of\line +interfaces specified for a particular programming language, one that\line +is widely used among developers working in that language.\line +\line + The "System Libraries" of an executable work include anything, other\line +than the work as a whole, that (a) is included in the normal form of\line +packaging a Major Component, but which is not part of that Major\line +Component, and (b) serves only to enable use of the work with that\line +Major Component, or to implement a Standard Interface for which an\line +implementation is available to the public in source code form. A\line +"Major Component", in this context, means a major essential component\line +(kernel, window system, and so on) of the specific operating system\line +(if any) on which the executable work runs, or a compiler used to\line +produce the work, or an object code interpreter used to run it.\line +\line + The "Corresponding Source" for a work in object code form means all\line +the source code needed to generate, install, and (for an executable\line +work) run the object code and to modify the work, including scripts to\line +control those activities. However, it does not include the work's\line +System Libraries, or general-purpose tools or generally available free\line +programs which are used unmodified in performing those activities but\line +which are not part of the work. For example, Corresponding Source\line +includes interface definition files associated with source files for\line +the work, and the source code for shared libraries and dynamically\line +linked subprograms that the work is specifically designed to require,\line +such as by intimate data communication or control flow between those\line +subprograms and other parts of the work.\line +\line + The Corresponding Source need not include anything that users\line +can regenerate automatically from other parts of the Corresponding\line +Source.\line +\line + The Corresponding Source for a work in source code form is that\line +same work.\line +\line + 2. Basic Permissions.\line +\line + All rights granted under this License are granted for the term of\line +copyright on the Program, and are irrevocable provided the stated\line +conditions are met. This License explicitly affirms your unlimited\line +permission to run the unmodified Program. The output from running a\line +covered work is covered by this License only if the output, given its\line +content, constitutes a covered work. This License acknowledges your\line +rights of fair use or other equivalent, as provided by copyright law.\line +\line + You may make, run and propagate covered works that you do not\line +convey, without conditions so long as your license otherwise remains\line +in force. You may convey covered works to others for the sole purpose\line +of having them make modifications exclusively for you, or provide you\line +with facilities for running those works, provided that you comply with\line +the terms of this License in conveying all material for which you do\line +not control copyright. Those thus making or running the covered works\line +for you must do so exclusively on your behalf, under your direction\line +and control, on terms that prohibit them from making any copies of\line +your copyrighted material outside their relationship with you.\line +\line + Conveying under any other circumstances is permitted solely under\line +the conditions stated below. Sublicensing is not allowed; section 10\line +makes it unnecessary.\line +\line + 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\line +\line + No covered work shall be deemed part of an effective technological\line +measure under any applicable law fulfilling obligations under article\line +11 of the WIPO copyright treaty adopted on 20 December 1996, or\line +similar laws prohibiting or restricting circumvention of such\line +measures.\line +\line + When you convey a covered work, you waive any legal power to forbid\line +circumvention of technological measures to the extent such circumvention\line +is effected by exercising rights under this License with respect to\line +the covered work, and you disclaim any intention to limit operation or\line +modification of the work as a means of enforcing, against the work's\line +users, your or third parties' legal rights to forbid circumvention of\line +technological measures.\line +\line + 4. Conveying Verbatim Copies.\line +\line + You may convey verbatim copies of the Program's source code as you\line +receive it, in any medium, provided that you conspicuously and\line +appropriately publish on each copy an appropriate copyright notice;\line +keep intact all notices stating that this License and any\line +non-permissive terms added in accord with section 7 apply to the code;\line +keep intact all notices of the absence of any warranty; and give all\line +recipients a copy of this License along with the Program.\line +\line + You may charge any price or no price for each copy that you convey,\line +and you may offer support or warranty protection for a fee.\line +\line + 5. Conveying Modified Source Versions.\line +\line + You may convey a work based on the Program, or the modifications to\line +produce it from the Program, in the form of source code under the\line +terms of section 4, provided that you also meet all of these conditions:\line +\line + a) The work must carry prominent notices stating that you modified\line + it, and giving a relevant date.\line +\line + b) The work must carry prominent notices stating that it is\line + released under this License and any conditions added under section\line + 7. This requirement modifies the requirement in section 4 to\line + "keep intact all notices".\line +\line + c) You must license the entire work, as a whole, under this\line + License to anyone who comes into possession of a copy. This\line + License will therefore apply, along with any applicable section 7\line + additional terms, to the whole of the work, and all its parts,\line + regardless of how they are packaged. This License gives no\line + permission to license the work in any other way, but it does not\line + invalidate such permission if you have separately received it.\line +\line + d) If the work has interactive user interfaces, each must display\line + Appropriate Legal Notices; however, if the Program has interactive\line + interfaces that do not display Appropriate Legal Notices, your\line + work need not make them do so.\line +\line + A compilation of a covered work with other separate and independent\line +works, which are not by their nature extensions of the covered work,\line +and which are not combined with it such as to form a larger program,\line +in or on a volume of a storage or distribution medium, is called an\line +"aggregate" if the compilation and its resulting copyright are not\line +used to limit the access or legal rights of the compilation's users\line +beyond what the individual works permit. Inclusion of a covered work\line +in an aggregate does not cause this License to apply to the other\line +parts of the aggregate.\line +\line + 6. Conveying Non-Source Forms.\line +\line + You may convey a covered work in object code form under the terms\line +of sections 4 and 5, provided that you also convey the\line +machine-readable Corresponding Source under the terms of this License,\line +in one of these ways:\line +\line + a) Convey the object code in, or embodied in, a physical product\line + (including a physical distribution medium), accompanied by the\line + Corresponding Source fixed on a durable physical medium\line + customarily used for software interchange.\line +\line + b) Convey the object code in, or embodied in, a physical product\line + (including a physical distribution medium), accompanied by a\line + written offer, valid for at least three years and valid for as\line + long as you offer spare parts or customer support for that product\line + model, to give anyone who possesses the object code either (1) a\line + copy of the Corresponding Source for all the software in the\line + product that is covered by this License, on a durable physical\line + medium customarily used for software interchange, for a price no\line + more than your reasonable cost of physically performing this\line + conveying of source, or (2) access to copy the\line + Corresponding Source from a network server at no charge.\line +\line + c) Convey individual copies of the object code with a copy of the\line + written offer to provide the Corresponding Source. This\line + alternative is allowed only occasionally and noncommercially, and\line + only if you received the object code with such an offer, in accord\line + with subsection 6b.\line +\line + d) Convey the object code by offering access from a designated\line + place (gratis or for a charge), and offer equivalent access to the\line + Corresponding Source in the same way through the same place at no\line + further charge. You need not require recipients to copy the\line + Corresponding Source along with the object code. If the place to\line + copy the object code is a network server, the Corresponding Source\line + may be on a different server (operated by you or a third party)\line + that supports equivalent copying facilities, provided you maintain\line + clear directions next to the object code saying where to find the\line + Corresponding Source. Regardless of what server hosts the\line + Corresponding Source, you remain obligated to ensure that it is\line + available for as long as needed to satisfy these requirements.\line +\line + e) Convey the object code using peer-to-peer transmission, provided\line + you inform other peers where the object code and Corresponding\line + Source of the work are being offered to the general public at no\line + charge under subsection 6d.\line +\line + A separable portion of the object code, whose source code is excluded\line +from the Corresponding Source as a System Library, need not be\line +included in conveying the object code work.\line +\line + A "User Product" is either (1) a "consumer product", which means any\line +tangible personal property which is normally used for personal, family,\line +or household purposes, or (2) anything designed or sold for incorporation\line +into a dwelling. In determining whether a product is a consumer product,\line +doubtful cases shall be resolved in favor of coverage. For a particular\line +product received by a particular user, "normally used" refers to a\line +typical or common use of that class of product, regardless of the status\line +of the particular user or of the way in which the particular user\line +actually uses, or expects or is expected to use, the product. A product\line +is a consumer product regardless of whether the product has substantial\line +commercial, industrial or non-consumer uses, unless such uses represent\line +the only significant mode of use of the product.\line +\line + "Installation Information" for a User Product means any methods,\line +procedures, authorization keys, or other information required to install\line +and execute modified versions of a covered work in that User Product from\line +a modified version of its Corresponding Source. The information must\line +suffice to ensure that the continued functioning of the modified object\line +code is in no case prevented or interfered with solely because\line +modification has been made.\line +\line + If you convey an object code work under this section in, or with, or\line +specifically for use in, a User Product, and the conveying occurs as\line +part of a transaction in which the right of possession and use of the\line +User Product is transferred to the recipient in perpetuity or for a\line +fixed term (regardless of how the transaction is characterized), the\line +Corresponding Source conveyed under this section must be accompanied\line +by the Installation Information. But this requirement does not apply\line +if neither you nor any third party retains the ability to install\line +modified object code on the User Product (for example, the work has\line +been installed in ROM).\line +\line + The requirement to provide Installation Information does not include a\line +requirement to continue to provide support service, warranty, or updates\line +for a work that has been modified or installed by the recipient, or for\line +the User Product in which it has been modified or installed. Access to a\line +network may be denied when the modification itself materially and\line +adversely affects the operation of the network or violates the rules and\line +protocols for communication across the network.\line +\line + Corresponding Source conveyed, and Installation Information provided,\line +in accord with this section must be in a format that is publicly\line +documented (and with an implementation available to the public in\line +source code form), and must require no special password or key for\line +unpacking, reading or copying.\line +\line + 7. Additional Terms.\line +\line + "Additional permissions" are terms that supplement the terms of this\line +License by making exceptions from one or more of its conditions.\line +Additional permissions that are applicable to the entire Program shall\line +be treated as though they were included in this License, to the extent\line +that they are valid under applicable law. If additional permissions\line +apply only to part of the Program, that part may be used separately\line +under those permissions, but the entire Program remains governed by\line +this License without regard to the additional permissions.\line +\line + When you convey a copy of a covered work, you may at your option\line +remove any additional permissions from that copy, or from any part of\line +it. (Additional permissions may be written to require their own\line +removal in certain cases when you modify the work.) You may place\line +additional permissions on material, added by you to a covered work,\line +for which you have or can give appropriate copyright permission.\line +\line + Notwithstanding any other provision of this License, for material you\line +add to a covered work, you may (if authorized by the copyright holders of\line +that material) supplement the terms of this License with terms:\line +\line + a) Disclaiming warranty or limiting liability differently from the\line + terms of sections 15 and 16 of this License; or\line +\line + b) Requiring preservation of specified reasonable legal notices or\line + author attributions in that material or in the Appropriate Legal\line + Notices displayed by works containing it; or\line +\line + c) Prohibiting misrepresentation of the origin of that material, or\line + requiring that modified versions of such material be marked in\line + reasonable ways as different from the original version; or\line +\line + d) Limiting the use for publicity purposes of names of licensors or\line + authors of the material; or\line +\line + e) Declining to grant rights under trademark law for use of some\line + trade names, trademarks, or service marks; or\line +\line + f) Requiring indemnification of licensors and authors of that\line + material by anyone who conveys the material (or modified versions of\line + it) with contractual assumptions of liability to the recipient, for\line + any liability that these contractual assumptions directly impose on\line + those licensors and authors.\line +\line + All other non-permissive additional terms are considered "further\line +restrictions" within the meaning of section 10. If the Program as you\line +received it, or any part of it, contains a notice stating that it is\line +governed by this License along with a term that is a further\line +restriction, you may remove that term. If a license document contains\line +a further restriction but permits relicensing or conveying under this\line +License, you may add to a covered work material governed by the terms\line +of that license document, provided that the further restriction does\line +not survive such relicensing or conveying.\line +\line + If you add terms to a covered work in accord with this section, you\line +must place, in the relevant source files, a statement of the\line +additional terms that apply to those files, or a notice indicating\line +where to find the applicable terms.\line +\line + Additional terms, permissive or non-permissive, may be stated in the\line +form of a separately written license, or stated as exceptions;\line +the above requirements apply either way.\line +\line + 8. Termination.\line +\line + You may not propagate or modify a covered work except as expressly\line +provided under this License. Any attempt otherwise to propagate or\line +modify it is void, and will automatically terminate your rights under\line +this License (including any patent licenses granted under the third\line +paragraph of section 11).\line +\line + However, if you cease all violation of this License, then your\line +license from a particular copyright holder is reinstated (a)\line +provisionally, unless and until the copyright holder explicitly and\line +finally terminates your license, and (b) permanently, if the copyright\line +holder fails to notify you of the violation by some reasonable means\line +prior to 60 days after the cessation.\line +\line + Moreover, your license from a particular copyright holder is\line +reinstated permanently if the copyright holder notifies you of the\line +violation by some reasonable means, this is the first time you have\line +received notice of violation of this License (for any work) from that\line +copyright holder, and you cure the violation prior to 30 days after\line +your receipt of the notice.\line +\line + Termination of your rights under this section does not terminate the\line +licenses of parties who have received copies or rights from you under\line +this License. If your rights have been terminated and not permanently\line +reinstated, you do not qualify to receive new licenses for the same\line +material under section 10.\line +\line + 9. Acceptance Not Required for Having Copies.\line +\line + You are not required to accept this License in order to receive or\line +run a copy of the Program. Ancillary propagation of a covered work\line +occurring solely as a consequence of using peer-to-peer transmission\line +to receive a copy likewise does not require acceptance. However,\line +nothing other than this License grants you permission to propagate or\line +modify any covered work. These actions infringe copyright if you do\line +not accept this License. Therefore, by modifying or propagating a\line +covered work, you indicate your acceptance of this License to do so.\line +\line + 10. Automatic Licensing of Downstream Recipients.\line +\line + Each time you convey a covered work, the recipient automatically\line +receives a license from the original licensors, to run, modify and\line +propagate that work, subject to this License. You are not responsible\line +for enforcing compliance by third parties with this License.\line +\line + An "entity transaction" is a transaction transferring control of an\line +organization, or substantially all assets of one, or subdividing an\line +organization, or merging organizations. If propagation of a covered\line +work results from an entity transaction, each party to that\line +transaction who receives a copy of the work also receives whatever\line +licenses to the work the party's predecessor in interest had or could\line +give under the previous paragraph, plus a right to possession of the\line +Corresponding Source of the work from the predecessor in interest, if\line +the predecessor has it or can get it with reasonable efforts.\line +\line + You may not impose any further restrictions on the exercise of the\line +rights granted or affirmed under this License. For example, you may\line +not impose a license fee, royalty, or other charge for exercise of\line +rights granted under this License, and you may not initiate litigation\line +(including a cross-claim or counterclaim in a lawsuit) alleging that\line +any patent claim is infringed by making, using, selling, offering for\line +sale, or importing the Program or any portion of it.\line +\line + 11. Patents.\line +\line + A "contributor" is a copyright holder who authorizes use under this\line +License of the Program or a work on which the Program is based. The\line +work thus licensed is called the contributor's "contributor version".\line +\line + A contributor's "essential patent claims" are all patent claims\line +owned or controlled by the contributor, whether already acquired or\line +hereafter acquired, that would be infringed by some manner, permitted\line +by this License, of making, using, or selling its contributor version,\line +but do not include claims that would be infringed only as a\line +consequence of further modification of the contributor version. For\line +purposes of this definition, "control" includes the right to grant\line +patent sublicenses in a manner consistent with the requirements of\line +this License.\line +\line + Each contributor grants you a non-exclusive, worldwide, royalty-free\line +patent license under the contributor's essential patent claims, to\line +make, use, sell, offer for sale, import and otherwise run, modify and\line +propagate the contents of its contributor version.\line +\line + In the following three paragraphs, a "patent license" is any express\line +agreement or commitment, however denominated, not to enforce a patent\line +(such as an express permission to practice a patent or covenant not to\line +sue for patent infringement). To "grant" such a patent license to a\line +party means to make such an agreement or commitment not to enforce a\line +patent against the party.\line +\line + If you convey a covered work, knowingly relying on a patent license,\line +and the Corresponding Source of the work is not available for anyone\line +to copy, free of charge and under the terms of this License, through a\line +publicly available network server or other readily accessible means,\line +then you must either (1) cause the Corresponding Source to be so\line +available, or (2) arrange to deprive yourself of the benefit of the\line +patent license for this particular work, or (3) arrange, in a manner\line +consistent with the requirements of this License, to extend the patent\line +license to downstream recipients. "Knowingly relying" means you have\line +actual knowledge that, but for the patent license, your conveying the\line +covered work in a country, or your recipient's use of the covered work\line +in a country, would infringe one or more identifiable patents in that\line +country that you have reason to believe are valid.\line +\line + If, pursuant to or in connection with a single transaction or\line +arrangement, you convey, or propagate by procuring conveyance of, a\line +covered work, and grant a patent license to some of the parties\line +receiving the covered work authorizing them to use, propagate, modify\line +or convey a specific copy of the covered work, then the patent license\line +you grant is automatically extended to all recipients of the covered\line +work and works based on it.\line +\line + A patent license is "discriminatory" if it does not include within\line +the scope of its coverage, prohibits the exercise of, or is\line +conditioned on the non-exercise of one or more of the rights that are\line +specifically granted under this License. You may not convey a covered\line +work if you are a party to an arrangement with a third party that is\line +in the business of distributing software, under which you make payment\line +to the third party based on the extent of your activity of conveying\line +the work, and under which the third party grants, to any of the\line +parties who would receive the covered work from you, a discriminatory\line +patent license (a) in connection with copies of the covered work\line +conveyed by you (or copies made from those copies), or (b) primarily\line +for and in connection with specific products or compilations that\line +contain the covered work, unless you entered into that arrangement,\line +or that patent license was granted, prior to 28 March 2007.\line +\line + Nothing in this License shall be construed as excluding or limiting\line +any implied license or other defenses to infringement that may\line +otherwise be available to you under applicable patent law.\line +\line + 12. No Surrender of Others' Freedom.\line +\line + If conditions are imposed on you (whether by court order, agreement or\line +otherwise) that contradict the conditions of this License, they do not\line +excuse you from the conditions of this License. If you cannot convey a\line +covered work so as to satisfy simultaneously your obligations under this\line +License and any other pertinent obligations, then as a consequence you may\line +not convey it at all. For example, if you agree to terms that obligate you\line +to collect a royalty for further conveying from those to whom you convey\line +the Program, the only way you could satisfy both those terms and this\line +License would be to refrain entirely from conveying the Program.\line +\line + 13. Use with the GNU Affero General Public License.\line +\line + Notwithstanding any other provision of this License, you have\line +permission to link or combine any covered work with a work licensed\line +under version 3 of the GNU Affero General Public License into a single\line +combined work, and to convey the resulting work. The terms of this\line +License will continue to apply to the part which is the covered work,\line +but the special requirements of the GNU Affero General Public License,\line +section 13, concerning interaction through a network will apply to the\line +combination as such.\line +\line + 14. Revised Versions of this License.\line +\line + The Free Software Foundation may publish revised and/or new versions of\line +the GNU General Public License from time to time. Such new versions will\line +be similar in spirit to the present version, but may differ in detail to\line +address new problems or concerns.\line +\line + Each version is given a distinguishing version number. If the\line +Program specifies that a certain numbered version of the GNU General\line +Public License "or any later version" applies to it, you have the\line +option of following the terms and conditions either of that numbered\line +version or of any later version published by the Free Software\line +Foundation. If the Program does not specify a version number of the\line +GNU General Public License, you may choose any version ever published\line +by the Free Software Foundation.\line +\line + If the Program specifies that a proxy can decide which future\line +versions of the GNU General Public License can be used, that proxy's\line +public statement of acceptance of a version permanently authorizes you\line +to choose that version for the Program.\line +\line + Later license versions may give you additional or different\line +permissions. However, no additional obligations are imposed on any\line +author or copyright holder as a result of your choosing to follow a\line +later version.\line +\line + 15. Disclaimer of Warranty.\line +\line + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\line +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\line +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY\line +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\line +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\line +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\line +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\line +ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\line +\line + 16. Limitation of Liability.\line +\line + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\line +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\line +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\line +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\line +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\line +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\line +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\line +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\line +SUCH DAMAGES.\line +\line + 17. Interpretation of Sections 15 and 16.\line +\line + If the disclaimer of warranty and limitation of liability provided\line +above cannot be given local legal effect according to their terms,\line +reviewing courts shall apply local law that most closely approximates\line +an absolute waiver of all civil liability in connection with the\line +Program, unless a warranty or assumption of liability accompanies a\line +copy of the Program in return for a fee.\line +\line + END OF TERMS AND CONDITIONS\line +\line + How to Apply These Terms to Your New Programs\line +\line + If you develop a new program, and you want it to be of the greatest\line +possible use to the public, the best way to achieve this is to make it\line +free software which everyone can redistribute and change under these terms.\line +\line + To do so, attach the following notices to the program. It is safest\line +to attach them to the start of each source file to most effectively\line +state the exclusion of warranty; and each file should have at least\line +the "copyright" line and a pointer to where the full notice is found.\line +\line + <one line to give the program's name and a brief idea of what it does.>\line + Copyright (C) <year> <name of author>\line +\line + This program is free software: you can redistribute it and/or modify\line + it under the terms of the GNU General Public License as published by\line + the Free Software Foundation, either version 3 of the License, or\line + (at your option) any later version.\line +\line + This program is distributed in the hope that it will be useful,\line + but WITHOUT ANY WARRANTY; without even the implied warranty of\line + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\line + GNU General Public License for more details.\line +\line + You should have received a copy of the GNU General Public License\line + along with this program. If not, see <https://www.gnu.org/licenses/>.\line +\line +Also add information on how to contact you by electronic and paper mail.\line +\line + If the program does terminal interaction, make it output a short\line +notice like this when it starts in an interactive mode:\line +\line + <program> Copyright (C) <year> <name of author>\line + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\line + This is free software, and you are welcome to redistribute it\line + under certain conditions; type `show c' for details.\line +\line +The hypothetical commands `show w' and `show c' should show the appropriate\line +parts of the General Public License. Of course, your program's commands\line +might be different; for a GUI interface, you would use an "about box".\line +\line + You should also get your employer (if you work as a programmer) or school,\line +if any, to sign a "copyright disclaimer" for the program, if necessary.\line +For more information on this, and how to apply and follow the GNU GPL, see\line +<https://www.gnu.org/licenses/>.\line +\line + The GNU General Public License does not permit incorporating your program\line +into proprietary programs. If your program is a subroutine library, you\line +may consider it more useful to permit linking proprietary applications with\line +the library. If this is what you want to do, use the GNU Lesser General\line +Public License instead of this License. But first, please read\line +<https://www.gnu.org/licenses/why-not-lgpl.html>.\line +} diff --git a/packaging/windows/install-dependencies.ps1 b/packaging/windows/install-dependencies.ps1 index 66ec7316..7250e2bc 100644 --- a/packaging/windows/install-dependencies.ps1 +++ b/packaging/windows/install-dependencies.ps1 @@ -82,3 +82,24 @@ if ($LastExitcode -ne 0) { exit 1 } } + +Write-Host "Installing WiX toolset" +dotnet tool install -g wix + +if ($LastExitcode -ne 0) { + exit 1 +} + +Write-Host "Adding WiX extensions" + +wix extension -g add WixToolset.Util.wixext + +if ($LastExitcode -ne 0) { + exit 1 +} + +wix extension -g add WixToolset.UI.wixext + +if ($LastExitcode -ne 0) { + exit 1 +} diff --git a/packaging/windows/installer.nsi b/packaging/windows/installer.nsi index 88d160a1..a462d499 100644 --- a/packaging/windows/installer.nsi +++ b/packaging/windows/installer.nsi @@ -3,7 +3,7 @@ !include "FileFunc.nsh" Name "Netdata" -Outfile "netdata-installer.exe" +Outfile "netdata-installer-x64.exe" InstallDir "$PROGRAMFILES\Netdata" RequestExecutionLevel admin @@ -19,8 +19,8 @@ RequestExecutionLevel admin !insertmacro MUI_PAGE_LICENSE "C:\msys64\cloud.txt" !insertmacro MUI_PAGE_LICENSE "C:\msys64\gpl-3.0.txt" !insertmacro MUI_PAGE_DIRECTORY -!insertmacro MUI_PAGE_INSTFILES Page Custom NetdataConfigPage NetdataConfigLeave +!insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_CONFIRM @@ -29,15 +29,60 @@ Page Custom NetdataConfigPage NetdataConfigLeave !insertmacro MUI_LANGUAGE "English" +!define INSTALLERLOCKFILEGUID "f787d5ef-5c41-4dc0-a115-a1fb654fad1c" + +# https://nsis.sourceforge.io/Allow_only_one_installer_instance +!macro SingleInstanceFile + !if "${NSIS_PTR_SIZE}" > 4 + !include "Util.nsh" + !else ifndef IntPtrCmp + !define IntPtrCmp IntCmp + !endif + + !ifndef NSIS_PTR_SIZE & SYSTYPE_PTR + !define SYSTYPE_PTR i ; NSIS v2.x + !else + !define /ifndef SYSTYPE_PTR p ; NSIS v3.0+ + !endif + + !if "${NSIS_CHAR_SIZE}" < 2 + Push "$TEMP\${INSTALLERLOCKFILEGUID}.lock" + !else + Push "$APPDATA\${INSTALLERLOCKFILEGUID}.lock" + !endif + + System::Call 'KERNEL32::CreateFile(ts,i0x40000000,i0,${SYSTYPE_PTR}0,i4,i0x04000000,${SYSTYPE_PTR}0)${SYSTYPE_PTR}.r0' + ${IntPtrCmp} $0 -1 "" launch launch + System::Call 'kernel32::AttachConsole(i -1)i.r0' + ${If} $0 != 0 + System::Call 'kernel32::GetStdHandle(i -11)i.r0' + FileWrite $0 "The installer is already running.$\r$\n" + ${EndIf} + Quit + launch: +!macroend + +var hCtrlButton var hStartMsys var startMsys +var hCloudURL +var cloudURL var hCloudToken var cloudToken -var hCloudRoom -var cloudRoom +var hCloudRooms +var cloudRooms +var hProxy +var proxy +var hInsecure +var insecure +var accepted + +var avoidClaim Function .onInit + !insertmacro SingleInstanceFile + nsExec::ExecToLog '$SYSDIR\sc.exe stop Netdata' pop $0 ${If} $0 == 0 @@ -46,10 +91,71 @@ Function .onInit ${EndIf} StrCpy $startMsys ${BST_UNCHECKED} + StrCpy $insecure ${BST_UNCHECKED} + StrCpy $avoidClaim ${BST_UNCHECKED} + StrCpy $accepted ${BST_UNCHECKED} + + ${GetParameters} $R0 + ${GetOptions} $R0 "/s" $0 + IfErrors +2 0 + SetSilent silent + ClearErrors + + ${GetOptions} $R0 "/t" $0 + IfErrors +2 0 + StrCpy $startMsys ${BST_CHECKED} + ClearErrors + + ${GetOptions} $R0 "/i" $0 + IfErrors +2 0 + StrCpy $insecure ${BST_CHECKED} + ClearErrors + + ${GetOptions} $R0 "/a" $0 + IfErrors +2 0 + StrCpy $accepted ${BST_CHECKED} + ClearErrors + + ${GetOptions} $R0 "/token=" $0 + IfErrors +2 0 + StrCpy $cloudToken $0 + ClearErrors + + ${GetOptions} $R0 "/rooms=" $0 + IfErrors +2 0 + StrCpy $cloudRooms $0 + ClearErrors + + ${GetOptions} $R0 "/proxy=" $0 + IfErrors +2 0 + StrCpy $proxy $0 + ClearErrors + + IfSilent checklicense goahead + checklicense: + ${If} $accepted == ${BST_UNCHECKED} + System::Call 'kernel32::AttachConsole(i -1)i.r0' + ${If} $0 != 0 + System::Call 'kernel32::GetStdHandle(i -11)i.r0' + FileWrite $0 "You must accept the licenses (/A) to continue.$\r$\n" + ${EndIf} + Quit + ${EndIf} + goahead: +FunctionEnd + +Function un.onInit +!insertmacro SingleInstanceFile +FunctionEnd + +Function ShowHelp +Pop $0 + MessageBox MB_ICONQUESTION|MB_OK "$\"Cloud URL$\" The Netdata Cloud base URL.$\n$\n$\"Proxy URL$\" set the proxy server address to use if your network requires one.$\n$\n$\"Insecure connection$\" disable verification of the server's certificate chain and host name.$\n$\n$\"Open Terminal$\" open MSYS2 terminal to run additional commands after installation." IDOK endHelp + endHelp: FunctionEnd Function NetdataConfigPage - !insertmacro MUI_HEADER_TEXT "Netdata configuration" "Claim your agent on Netdata Cloud" + !insertmacro MUI_HEADER_TEXT "Netdata configuration" "Connect your Agent to your Netdata Cloud Space" nsDialogs::Create 1018 Pop $0 @@ -57,40 +163,59 @@ Function NetdataConfigPage Abort ${EndIf} - ${NSD_CreateLabel} 0 0 100% 12u "Enter your Token and Cloud Room." - ${NSD_CreateLabel} 0 15% 100% 12u "Optionally, you can open a terminal to execute additional commands." + IfFileExists "$INSTDIR\etc\netdata\claim.conf" NotNeeded - ${NSD_CreateLabel} 0 35% 20% 10% "Token" + ${NSD_CreateLabel} 0 0 100% 12u "Enter your Space's Claim Token and the Room IDs where you want to add the Agent." + ${NSD_CreateLabel} 0 12% 100% 12u "If no Room IDs are specified, the Agent will be added to the $\"All nodes$\" Room." + + ${NSD_CreateLabel} 0 30% 20% 10% "Claim Token" Pop $0 - ${NSD_CreateText} 21% 35% 79% 10% "" + ${NSD_CreateText} 21% 30% 79% 10% "" Pop $hCloudToken - ${NSD_CreateLabel} 0 55% 20% 10% "Room" + ${NSD_CreateLabel} 0 45% 20% 10% "Room ID(s)" + Pop $0 + ${NSD_CreateText} 21% 45% 79% 10% "" + Pop $hCloudRooms + + ${NSD_CreateLabel} 0 60% 20% 10% "Proxy URL" Pop $0 - ${NSD_CreateText} 21% 55% 79% 10% "" - Pop $hCloudRoom + ${NSD_CreateText} 21% 60% 79% 10% "" + Pop $hProxy - ${NSD_CreateCheckbox} 0 70% 100% 10u "Open terminal" + ${NSD_CreateLabel} 0 75% 20% 10% "Cloud URL" + Pop $0 + ${NSD_CreateText} 21% 75% 79% 10% "https://app.netdata.cloud" + Pop $hCloudURL + + ${NSD_CreateCheckbox} 0 92% 25% 10u "Insecure connection" + Pop $hInsecure + + ${NSD_CreateCheckbox} 50% 92% 25% 10u "Open terminal" Pop $hStartMsys + + ${NSD_CreateButton} 90% 90% 30u 15u "&Help" + Pop $hCtrlButton + ${NSD_OnClick} $hCtrlButton ShowHelp + + Goto EndDialogDraw + + NotNeeded: + StrCpy $avoidClaim ${BST_CHECKED} + ${NSD_CreateLabel} 0 0 100% 12u "Your host has already been claimed. You can proceed with the update." + + EndDialogDraw: nsDialogs::Show FunctionEnd Function NetdataConfigLeave - ${NSD_GetText} $hCloudToken $cloudToken - ${NSD_GetText} $hCloudRoom $cloudRoom - ${NSD_GetState} $hStartMsys $startMsys - - StrLen $0 $cloudToken - StrLen $1 $cloudRoom - ${If} $0 == 125 - ${AndIf} $0 == 36 - # We should start our new claiming software here - MessageBox MB_OK "$cloudToken | $cloudRoom | $startMsys" - ${EndIf} - - ${If} $startMsys == 1 - nsExec::ExecToLog '$INSTDIR\msys2.exe' - pop $0 + ${If} $avoidClaim == ${BST_UNCHECKED} + ${NSD_GetText} $hCloudToken $cloudToken + ${NSD_GetText} $hCloudURL $cloudURL + ${NSD_GetText} $hCloudRooms $cloudRooms + ${NSD_GetText} $hProxy $proxy + ${NSD_GetState} $hStartMsys $startMsys + ${NSD_GetState} $hInsecure $insecure ${EndIf} FunctionEnd @@ -132,36 +257,125 @@ Function NetdataUninstallRegistry end: FunctionEnd +Function InstallDLL + ; Check if certutil is available + nsExec::ExecToStack 'where certutil' + Pop $R0 + StrCmp $R0 "" NoCertUtil FoundCertUtil + + NoCertUtil: + DetailPrint "certutil not found, assuming files are different." + Goto CopyDLL + + FoundCertUtil: + ; Calculate hash of the existing DLL + nsExec::ExecToStack 'certutil -hashfile "$SYSDIR\wevt_netdata.dll" MD5' + Pop $R0 + + ; Calculate hash of the new DLL + nsExec::ExecToStack 'certutil -hashfile "$INSTDIR\usr\bin\wevt_netdata.dll" MD5' + Pop $R1 + + StrCmp $R0 $R1 SetPermissions + + CopyDLL: + ClearErrors + CopyFiles /SILENT "$INSTDIR\usr\bin\wevt_netdata.dll" "$SYSDIR" + IfErrors RetryPrompt SetPermissions + + RetryPrompt: + MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "Failed to copy wevt_netdata.dll probably because it is in use. Please close the Event Viewer (or other Event Log applications) and press Retry." + StrCmp $R0 IDRETRY CopyDLL + StrCmp $R0 IDCANCEL ExitInstall + + Goto End + + SetPermissions: + nsExec::ExecToLog 'icacls "$SYSDIR\wevt_netdata.dll" /grant "NT SERVICE\EventLog":R' + Goto End + + ExitInstall: + Abort + + End: +FunctionEnd + +Function InstallManifest + IfFileExists "$INSTDIR\usr\bin\wevt_netdata_manifest.xml" CopyManifest End + + CopyManifest: + ClearErrors + CopyFiles /SILENT "$INSTDIR\usr\bin\wevt_netdata_manifest.xml" "$SYSDIR" + IfErrors RetryPrompt InstallManifest + + RetryPrompt: + MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "Failed to copy wevt_netdata_manifest.xml." + StrCmp $R0 IDRETRY CopyManifest + StrCmp $R0 IDCANCEL ExitInstall + + InstallManifest: + nsExec::ExecToLog 'wevtutil im "$SYSDIR\wevt_netdata_manifest.xml" "/mf:$SYSDIR\wevt_netdata.dll" "/rf:$SYSDIR\wevt_netdata.dll"' + Goto End + + ExitInstall: + Abort + + End: +FunctionEnd + Section "Install Netdata" - SetOutPath $INSTDIR - SetCompress off + SetOutPath $INSTDIR + SetCompress off - File /r "C:\msys64\opt\netdata\*.*" + File /r "C:\msys64\opt\netdata\*.*" - ClearErrors + ClearErrors nsExec::ExecToLog '$SYSDIR\sc.exe create Netdata binPath= "$INSTDIR\usr\bin\netdata.exe" start= delayed-auto' pop $0 ${If} $0 != 0 - DetailPrint "Warning: Failed to create Netdata service." + DetailPrint "Warning: Failed to create Netdata service." ${EndIf} - ClearErrors + ClearErrors nsExec::ExecToLog '$SYSDIR\sc.exe description Netdata "Real-time system monitoring service"' pop $0 ${If} $0 != 0 - DetailPrint "Warning: Failed to add Netdata service description." + DetailPrint "Warning: Failed to add Netdata service description." ${EndIf} - ClearErrors + WriteUninstaller "$INSTDIR\Uninstall.exe" + + Call NetdataUninstallRegistry + Call InstallDLL + Call InstallManifest + + StrLen $0 $cloudToken + StrLen $1 $cloudRooms + ${If} $0 == 0 + ${OrIf} $1 == 0 + Goto runCmds + ${EndIf} + + ${If} $0 == 135 + ${AndIf} $1 >= 36 + nsExec::ExecToLog '$INSTDIR\usr\bin\NetdataClaim.exe /T $cloudToken /R $cloudRooms /P $proxy /I $insecure /U $cloudURL' + pop $0 + ${Else} + MessageBox MB_OK "The Cloud information does not have the expected length." + ${EndIf} + + runCmds: + ClearErrors nsExec::ExecToLog '$SYSDIR\sc.exe start Netdata' pop $0 ${If} $0 != 0 - DetailPrint "Warning: Failed to start Netdata service." + MessageBox MB_OK "Warning: Failed to start Netdata service." ${EndIf} - WriteUninstaller "$INSTDIR\Uninstall.exe" - - Call NetdataUninstallRegistry + ${If} $startMsys == ${BST_CHECKED} + nsExec::ExecToLog '$INSTDIR\msys2.exe' + pop $0 + ${EndIf} SectionEnd Section "Uninstall" @@ -179,8 +393,27 @@ Section "Uninstall" DetailPrint "Warning: Failed to delete Netdata service." ${EndIf} - RMDir /r "$INSTDIR" + ; Check if the manifest exists before uninstalling it + IfFileExists "$SYSDIR\wevt_netdata_manifest.xml" ManifestExistsForUninstall ManifestNotExistsForUninstall + +ManifestExistsForUninstall: + nsExec::ExecToLog 'wevtutil um "$SYSDIR\wevt_netdata_manifest.xml"' + pop $0 + ${If} $0 != 0 + DetailPrint "Warning: Failed to uninstall the event manifest." + ${EndIf} + Delete "$SYSDIR\wevt_netdata_manifest.xml" + Delete "$SYSDIR\wevt_netdata.dll" + Goto DoneUninstall + +ManifestNotExistsForUninstall: + DetailPrint "Manifest not found, skipping manifest uninstall." + +DoneUninstall: + + ; Remove files + SetOutPath "$PROGRAMFILES" + RMDir /r /REBOOTOK "$INSTDIR" DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Netdata" SectionEnd - diff --git a/packaging/windows/msi-extension.bat b/packaging/windows/msi-extension.bat new file mode 100644 index 00000000..73707f4e --- /dev/null +++ b/packaging/windows/msi-extension.bat @@ -0,0 +1,2 @@ +wix extension -g add WixToolset.Util.wixext/5.0.2 +wix extension -g add WixToolset.UI.wixext/5.0.2 diff --git a/packaging/windows/msys2-dependencies.sh b/packaging/windows/msys2-dependencies.sh index 95a1952d..9a32ea4e 100755 --- a/packaging/windows/msys2-dependencies.sh +++ b/packaging/windows/msys2-dependencies.sh @@ -15,11 +15,23 @@ pacman -S --noconfirm --needed \ base-devel \ cmake \ git \ + ninja \ + python \ liblz4-devel \ libutil-linux \ libutil-linux-devel \ libyaml-devel \ libzstd-devel \ + msys2-devel \ + msys/brotli-devel \ + msys/libuv-devel \ + msys/pcre2-devel \ + msys/zlib-devel \ + msys/libcurl-devel \ + openssl-devel \ + protobuf-devel \ + mingw-w64-x86_64-toolchain \ + mingw-w64-ucrt-x86_64-toolchain \ mingw64/mingw-w64-x86_64-brotli \ mingw64/mingw-w64-x86_64-go \ mingw64/mingw-w64-x86_64-libuv \ @@ -29,16 +41,6 @@ pacman -S --noconfirm --needed \ mingw64/mingw-w64-x86_64-pcre2 \ mingw64/mingw-w64-x86_64-protobuf \ mingw64/mingw-w64-x86_64-zlib \ - mingw-w64-ucrt-x86_64-toolchain \ - mingw-w64-x86_64-toolchain \ - msys2-devel \ - msys/brotli-devel \ - msys/libuv-devel \ - msys/pcre2-devel \ - msys/zlib-devel \ - openssl-devel \ - protobuf-devel \ - python \ ucrt64/mingw-w64-ucrt-x86_64-brotli \ ucrt64/mingw-w64-ucrt-x86_64-go \ ucrt64/mingw-w64-ucrt-x86_64-libuv \ diff --git a/packaging/windows/ncul1.rtf b/packaging/windows/ncul1.rtf new file mode 100644 index 00000000..983f0d84 --- /dev/null +++ b/packaging/windows/ncul1.rtf @@ -0,0 +1,47 @@ +{\rtf1\ansi\deff0 {\fonttbl {\f0 Times New Roman;}} +\paperh15840 \paperw12240 +\margl720 \margr720 \margt720 \margb720 +\f0\fs24 +# Netdata Cloud UI License v1.0 (NCUL1)\line +\line +## Acceptance\line +By using the software, you agree to all of the terms and conditions below.\line +\line +## Copyright License\line +The licensor grants you a non-exclusive, royalty-free, worldwide, non-sublicensable, non-transferable license to use, copy, distribute, make available the software, in each case subject to the limitations, restrictions and conditions below.\line +\line +## Limitations\line +This license allows you to use the Software only to interface with the licensor's other software components, such as Netdata Agents and Netdata Cloud. Any use with replacements for these components is not permitted.\line +\line +## Restrictions\line +The Software is provided in a binary form for use by end-users. You may not reverse engineer, decompile, disassemble, or modify the Software. The Software is licensed as a single product and its component parts may not be separated.\line +\line +## Patents\line +If you or your company make any written claim that the software infringes or contributes to infringement of any patent, your license for the software granted under these terms ends immediately. If your company makes such a claim, your license ends immediately for work on behalf of your company.\line +\line +## Notices\line +You must ensure that anyone who gets a copy of the Software from you also gets a copy of these terms.\line +\line +## No Other Rights\line +These terms do not imply any licenses other than those expressly granted in these terms.\line +\line +## Termination\line +If you use the Software in violation of any of these terms, such use is not licensed, and your licenses will automatically terminate. If the licensor provides you with a notice of your violation, and you cease all violations of this license no later than 30 days after you receive that notice, your licenses will be reinstated retroactively. However, if you violate these terms after such reinstatement, any additional violation of these terms will cause your licenses to terminate automatically and permanently.\line +\line +## No Warranties and No Liability\line +The software comes "As Is", without any express or implied warranties of any kind, including but not limited to any warranties of merchantability, non-infringement, or fitness for a particular purpose. The licensor will not be liable to you for any damages arising out of these terms or the use or nature of the Software, under any kind of legal claim.\line +\line +## Open Source Components\line +The software includes certain third party open source components. Each of these components is subject to its own license. The list of open-source components used by Netdata Cloud UI is [here](https://app.netdata.cloud/3D_PARTY_LICENSES.txt).\line +\line +## Definitions\line +The "licensor" is Netdata Inc., the entity offering these terms, and the "**software**" is the Netdata Cloud UI software the licensor makes available under these terms, including any portion of it.\line +\line +"**you**" refers to the individual or entity agreeing to these terms.\line +\line +"**your company**" is any legal entity, sole proprietorship, or other kind of organization that you work for, plus all organizations that have control over, are under the control of, or are under common control with that organization. "**Control**" means ownership of substantially all the assets of an entity, or the power to direct its management and policies by vote, contract, or otherwise. Control can be direct or indirect.\line +\line +"**your licenses**" are all the licenses granted to you for the software under these terms.\line +\line +"**use**" means anything you do with the software requiring one of your licenses.\line +} diff --git a/packaging/windows/netdata.wxs.in b/packaging/windows/netdata.wxs.in new file mode 100644 index 00000000..44638a42 --- /dev/null +++ b/packaging/windows/netdata.wxs.in @@ -0,0 +1,257 @@ +<Wix + xmlns="http://wixtoolset.org/schemas/v4/wxs" + xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util" + xmlns:ui="http://wixtoolset.org/schemas/v4/wxs/ui"> + + <Package Name="Netdata Agent" + Manufacturer="Netdata Inc." + Version="@CMAKE_PROJECT_VERSION@" + UpgradeCode="0d949b90-a54d-4aae-9616-e15fbc410530"> + + <Media Id="1" Cabinet="netdata" EmbedCab="yes" /> + + <MajorUpgrade Schedule="afterInstallInitialize" DowngradeErrorMessage="A newer version of [ProductName] is already installed." AllowSameVersionUpgrades="yes" /> + <Icon Id="NetdataIcon.ico" SourceFile="NetdataWhite.ico"/> + <Property Id="ARPPRODUCTICON" Value="NetdataIcon.ico" /> + + <Property Id="TOKEN" Secure="yes" /> + <Property Id="ROOMS" Secure="yes" /> + <Property Id="INSECURE" Secure="yes" /> + <Property Id="PROXY" Secure="yes" /> + <Property Id="URL" Value="https://app.netdata.cloud" /> + + <Property Id="GPLLICENSE" Value="0" /> + <Property Id="CLOUDUILICENSE" Value="0" /> + + <Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" /> + + <Feature Id="Main"> + <ComponentGroupRef Id="NetdataComponents" /> + <ComponentRef Id="NetdataVarCache" /> + <ComponentRef Id="NetdataVarLib" /> + <ComponentGroupRef Id="WevtComponents" /> + <ComponentRef Id="NetdataService" /> + </Feature> + + <WixVariable Id="WixUIBannerBmp" Value="Top.bmp" /> + <WixVariable Id="WixUIDialogBmp" Value="BackGround.bmp" /> + <UIRef Id="WixUI_ErrorProgressText" /> + <ui:WixUI Id="FeatureTree_ViewLicense" /> + </Package> + + <Fragment> + <StandardDirectory Id="ProgramFiles64Folder"> + <Directory Id="INSTALLFOLDER" Name="Netdata"> + <Directory Id="USRDIR" Name="usr"> + <Directory Id="USRBINDIR" Name="bin" /> + </Directory> + <Directory Id="VARDIR" Name="var"> + <Directory Id="VARCACHEDIR" Name="cache" /> + <Directory Id="VARLIBDIR" Name="lib" /> + </Directory> + <Directory Id="ETCDIR" Name="etc"> + <Directory Id="ETCDIRNETDATA" Name="netdata" /> + </Directory> + </Directory> + </StandardDirectory> + + <Property Id="ETCNETDATACLAIMFILE"> + <DirectorySearch Id="NetCoreDirectoryFoundx64" Path="[ETCDIRNETDATA]" > + <FileSearch Id="NetdataClaim" Name="claim.conf"/> + </DirectorySearch> + </Property> + + <StandardDirectory Id="System64Folder"> + </StandardDirectory> + + <!-- All the files except for the ones we need to handle specially --> + <ComponentGroup Id="NetdataComponents" Directory="INSTALLFOLDER"> + <Files Include="C:\msys64\opt\netdata\**"> + <Exclude Files="C:\msys64\opt\netdata\usr\bin\netdata.exe" /> + <Exclude Files="C:\msys64\opt\netdata\usr\bin\wevt_netdata_manifest.xml" /> + <Exclude Files="C:\msys64\opt\netdata\usr\bin\wevt_netdata.dll" /> + </Files> + </ComponentGroup> + + <Component Id="NetdataVarCache" Directory="VARCACHEDIR" Guid="a41bc888-60d4-4d99-bb4f-da92614a8f72"> + <CreateFolder /> + </Component> + + <Component Id="NetdataVarLib" Directory="VARLIBDIR" Guid="c72d7ea8-c848-46c4-a983-589044f2eec9"> + <CreateFolder /> + </Component> + + <CustomAction Id="ClaimAgent" Directory="USRBINDIR" ExeCommand='[USRBINDIR]NetdataClaim.exe /T "[TOKEN]" /R "[ROOMS]" /U "[URL]" /I [INSECURE] /P "[PROXY]" /F "[INSTALLFOLDER]etc\netdata\claim.conf"' Execute="deferred" Return="ignore" Impersonate="no"/> + <InstallExecuteSequence> + <Custom Action="ClaimAgent" After="InstallFiles" /> + </InstallExecuteSequence> + + <!-- Install wevt manifest/dll files --> + <ComponentGroup Id="WevtComponents" Directory="System64Folder"> + <File Id="WevtDll" Name="wevt_netdata.dll" Source="C:\msys64\opt\netdata\usr\bin\wevt_netdata.dll"> + </File> + + <File Id="WevtManifest" Name="wevt_netdata_manifest.xml" Source="C:\msys64\opt\netdata\usr\bin\wevt_netdata_manifest.xml"> + </File> + </ComponentGroup> + + <Component Id="NetdataService" Directory="USRBINDIR"> + <File Id="netdata.exe" Source="C:\msys64\opt\netdata\usr\bin\netdata.exe" KeyPath="yes" /> + + <ServiceInstall Id="InstallService" + Name="Netdata" + DisplayName="Netdata Agent" + Description="Distributed, real-time, performance and health monitoring for systems and applications." + Type="ownProcess" + Start="auto" + ErrorControl="normal" /> + + <ServiceControl Id="ControlService" + Start="install" + Stop="both" + Remove="uninstall" + Name="Netdata" + Wait="yes" /> + </Component> + </Fragment> + + <Fragment> + <UI Id="FeatureTree_ViewLicense_X64"> + <Publish Dialog="ViewLicenseDlg1" Control="Print" Event="DoAction" Value="WixUIPrintEula_X64" /> + <Publish Dialog="ViewLicenseDlg2" Control="Print" Event="DoAction" Value="WixUIPrintEula_X64" /> + </UI> + + <UIRef Id="FeatureTree_ViewLicense" /> + </Fragment> + + <Fragment> + <UI Id="file FeatureTree_ViewLicense"> + <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" /> + <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" /> + <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" /> + + <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" /> + + <DialogRef Id="ErrorDlg" /> + <DialogRef Id="FatalError" /> + <DialogRef Id="FilesInUse" /> + <DialogRef Id="MsiRMFilesInUse" /> + <DialogRef Id="PrepareDlg" /> + <DialogRef Id="ProgressDlg" /> + <DialogRef Id="ResumeDlg" /> + <DialogRef Id="UserExit" /> + + <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999" /> + + <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="ViewLicenseDlg1" Condition="NOT Installed" /> + <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Condition="Installed AND PATCH" /> + + <Publish Dialog="ViewLicenseDlg1" Control="Back" Event="NewDialog" Value="WelcomeDlg" /> + <Publish Dialog="ViewLicenseDlg1" Control="Next" Event="NewDialog" Value="ViewLicenseDlg2" /> + + <Publish Dialog="ViewLicenseDlg2" Control="Back" Event="NewDialog" Value="ViewLicenseDlg1" /> + <Publish Dialog="ViewLicenseDlg2" Control="Next" Event="NewDialog" Value="NDConfigDialog" Condition="NOT ETCNETDATACLAIMFILE" /> + <Publish Dialog="ViewLicenseDlg2" Control="Next" Event="NewDialog" Value="NDConfigDialog" Condition="ETCNETDATACLAIMFILE" /> + + <Publish Dialog="NDConfigDialog" Control="Back" Event="NewDialog" Value="ViewLicenseDlg2" /> + <Publish Dialog="NDConfigDialog" Control="Next" Event="NewDialog" Value="InstallDirDlg" /> + + <Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="NDConfigDialog" /> + <Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="20" /> + <Publish Dialog="InstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="10" /> + <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Property="_BrowseProperty" Value="[WIXUI_INSTALLDIR]" Order="10" /> + <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="20" /> + + + <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="InstallDirDlg" Order="1" Condition="NOT Installed OR WixUI_InstallMode = "Change"" /> + <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2" Condition="Installed AND NOT PATCH" /> + <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="3" Condition="Installed AND PATCH" /> + <Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg" /> + <Publish Dialog="MaintenanceTypeDlg" Control="ChangeButton" Event="NewDialog" Value="InstallDirDlg" /> + <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg" /> + <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg" /> + <Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg" /> + </UI> + + <UIRef Id="WixUI_Common" /> + </Fragment> + + <Fragment> + <UI> + <Dialog Id="ViewLicenseDlg1" Width="370" Height="270" Title="!(loc.LicenseAgreementDlg_Title)"> + <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.LicenseAgreementDlgBannerBitmap)" /> + <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" /> + <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" /> + <Control Id="Description" Type="Text" X="25" Y="23" Width="340" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.LicenseAgreementDlgDescription)" /> + <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="The Cloud UI License covers the Netdata User Interface." /> + <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)" /> + <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="I &Accept"> + <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg" Condition="!(wix.WixUICostingPopupOptOut) OR CostingComplete = 1" /> + </Control> + <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)"> + <Publish Event="SpawnDialog" Value="CancelDlg" /> + </Control> + <Control Id="LicenseText" Type="ScrollableText" X="20" Y="60" Width="330" Height="158" Sunken="yes" TabSkip="no"> + <Text SourceFile="ncul1.rtf" /> + </Control> + </Dialog> + </UI> + </Fragment> + + <Fragment> + <UI> + <Dialog Id="ViewLicenseDlg2" Width="370" Height="270" Title="!(loc.LicenseAgreementDlg_Title)"> + <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.LicenseAgreementDlgBannerBitmap)" /> + <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" /> + <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" /> + <Control Id="Description" Type="Text" X="25" Y="23" Width="340" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.LicenseAgreementDlgDescription)" /> + <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="The GPL-3.0 License covers the Agent source code." /> + + <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)" /> + <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="I &Accept"> + <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg" Condition="!(wix.WixUICostingPopupOptOut) OR CostingComplete = 1" /> + </Control> + <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)"> + <Publish Event="SpawnDialog" Value="CancelDlg" /> + </Control> + <Control Id="LicenseText" Type="ScrollableText" X="20" Y="60" Width="330" Height="158" Sunken="yes" TabSkip="no"> + <Text SourceFile="gpl-3.0.rtf" /> + </Control> + </Dialog> + </UI> + </Fragment> + + <Fragment> + <UI> + <Dialog Id="NDConfigDialog" Width="370" Height="270" Title="Netdata Cloud"> + <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.LicenseAgreementDlgBannerBitmap)" /> + <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" /> + <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" /> + <Control Id="Description" Type="Text" X="25" Y="23" Width="340" Height="15" Transparent="yes" NoPrefix="yes" Text="Enter your Space's Claim Token and the Room IDs where you want to add the Agent." /> + <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="Connect to the Cloud" /> + + <Control Id="WarningLabel" Type="Text" X="10" Y="60" Width="290" Height="15" Text="Agent already claimed? Click Next." /> + + <Control Id="TokenLabel" Type="Text" X="10" Y="90" Width="55" Height="15" Text="Claim Token:" /> + <Control Id="Token" Type="Edit" X="65" Y="90" Width="290" Height="18" Property="TOKEN" /> + + <Control Id="RoomsLabel" Type="Text" X="10" Y="105" Width="55" Height="15" Text="Rooms ID(s):" /> + <Control Id="Rooms" Type="Edit" X="65" Y="105" Width="290" Height="18" Property="ROOMS" /> + + <Control Id="ProxyLabel" Type="Text" X="10" Y="120" Width="55" Height="15" Text="Proxy URL:" /> + <Control Id="Proxy" Type="Edit" X="65" Y="120" Width="290" Height="18" Property="PROXY" /> + + <Control Id="URLLabel" Type="Text" X="10" Y="135" Width="55" Height="15" Text="Cloud URL:" /> + <Control Id="URL" Type="Edit" X="65" Y="135" Width="290" Height="18" Property="URL" /> + + <Control Id="InsecureCheckbox" Type="CheckBox" X="10" Y="150" Width="290" Height="15" Property="INSECURE" CheckBoxValue="0" Text="Insecure" /> + + <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)" /> + <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)" /> + <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)"> + <Publish Event="SpawnDialog" Value="CancelDlg" /> + </Control> + </Dialog> + </UI> + </Fragment> +</Wix> diff --git a/packaging/windows/package-windows.sh b/packaging/windows/package-windows.sh index 03f72a69..997bb7d4 100755 --- a/packaging/windows/package-windows.sh +++ b/packaging/windows/package-windows.sh @@ -2,21 +2,20 @@ repo_root="$(dirname "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" > /dev/null && pwd -P)")")" -if [ -n "${BUILD_DIR}" ]; then - build="${BUILD_DIR}" -elif [ -n "${OSTYPE}" ]; then - if [ -n "${MSYSTEM}" ]; then - build="${repo_root}/build-${OSTYPE}-${MSYSTEM}" - else - build="${repo_root}/build-${OSTYPE}" - fi -elif [ "$USER" = "vk" ]; then - build="${repo_root}/build" -else - build="${repo_root}/build" +# shellcheck source=./win-build-dir.sh +. "${repo_root}/packaging/windows/win-build-dir.sh" + +set -eu -o pipefail + +# Regenerate keys everytime there is an update +if [ -d /opt/netdata/etc/pki/ ]; then + rm -rf /opt/netdata/etc/pki/ fi -set -exu -o pipefail +# Remove previous installation of msys2 script +if [ -f /opt/netdata/usr/bin/bashbug ]; then + rm -rf /opt/netdata/usr/bin/bashbug +fi ${GITHUB_ACTIONS+echo "::group::Installing"} cmake --install "${build}" @@ -34,18 +33,12 @@ if [ ! -f "/gpl-3.0.txt" ]; then fi if [ ! -f "/cloud.txt" ]; then - curl -o /cloud.txt "https://raw.githubusercontent.com/netdata/netdata/master/src/web/gui/v2/LICENSE.md" + curl -o /cloud.txt "https://app.netdata.cloud/LICENSE.txt" fi ${GITHUB_ACTIONS+echo "::endgroup::"} -${GITHUB_ACTIONS+echo "::group::Packaging"} +${GITHUB_ACTIONS+echo "::group::Copy Files"} tar -xf /msys2-latest.tar.zst -C /opt/netdata/ || exit 1 cp -R /opt/netdata/msys64/* /opt/netdata/ || exit 1 rm -rf /opt/netdata/msys64/ -NDVERSION=$"$(grep 'CMAKE_PROJECT_VERSION:STATIC' "${build}/CMakeCache.txt"| cut -d= -f2)" -NDMAJORVERSION=$"$(grep 'CMAKE_PROJECT_VERSION_MAJOR:STATIC' "${build}/CMakeCache.txt"| cut -d= -f2)" -NDMINORVERSION=$"$(grep 'CMAKE_PROJECT_VERSION_MINOR:STATIC' "${build}/CMakeCache.txt"| cut -d= -f2)" - -/mingw64/bin/makensis.exe -DCURRVERSION="${NDVERSION}" -DMAJORVERSION="${NDMAJORVERSION}" -DMINORVERSION="${NDMINORVERSION}" "${repo_root}/packaging/windows/installer.nsi" ${GITHUB_ACTIONS+echo "::endgroup::"} - diff --git a/packaging/windows/package.ps1 b/packaging/windows/package.ps1 index 828e105f..15ee29a1 100644 --- a/packaging/windows/package.ps1 +++ b/packaging/windows/package.ps1 @@ -14,3 +14,26 @@ $env:CHERE_INVOKING = 'yes' if ($LastExitcode -ne 0) { exit 1 } + +if ($null -eq $env:BUILD_DIR) { + $builddir = & $msysbash -l "$PSScriptRoot\get-win-build-path.sh" + + if ($LastExitcode -ne 0) { + exit 1 + } +} else { + $builddir = $env:BUILD_DIR +} + +Push-Location "$builddir" + +$wixarch = "x64" + +wix build -arch $wixarch -ext WixToolset.Util.wixext -ext WixToolset.UI.wixext -out "$PSScriptRoot\netdata-$wixarch.msi" netdata.wxs + +if ($LastExitcode -ne 0) { + Pop-Location + exit 1 +} + +Pop-Location diff --git a/packaging/windows/resources/netdata.manifest.in b/packaging/windows/resources/netdata.manifest.in new file mode 100644 index 00000000..15796e74 --- /dev/null +++ b/packaging/windows/resources/netdata.manifest.in @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> + <assemblyIdentity version="@CMAKE_PROJECT_VERSION@" + processorArchitecture="*" + name="netdata" + type="win32"/> + <description>Netdata is a high-performance, cloud-native, and on-premises observability platform designed to monitor metrics and logs with unparalleled efficiency.</description> + <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> + <application> + <!-- Windows 10 and Windows 11 --> + <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/> + <!-- Windows 8.1 --> + <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> + <!-- Windows 8 --> + <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> + <!-- Windows 7 --> + <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> + <!-- Windows Vista --> + <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> + </application> + </compatibility> + <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> + <security> + <requestedPrivileges> + <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> + </requestedPrivileges> + </security> + </trustInfo> +</assembly> diff --git a/packaging/windows/resources/netdata.rc b/packaging/windows/resources/netdata.rc new file mode 100644 index 00000000..0bc75d99 --- /dev/null +++ b/packaging/windows/resources/netdata.rc @@ -0,0 +1,3 @@ +#include "winuser.h" +1 RT_MANIFEST "netdata.manifest" +11 ICON "../NetdataWhite.ico" diff --git a/packaging/windows/resources/netdata_claim.manifest.in b/packaging/windows/resources/netdata_claim.manifest.in new file mode 100644 index 00000000..ae4e040c --- /dev/null +++ b/packaging/windows/resources/netdata_claim.manifest.in @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> + <assemblyIdentity version="@CMAKE_PROJECT_VERSION@" + processorArchitecture="*" + name="netdata_claim" + type="win32"/> + <description>Netdata Claim!</description> + <!-- Identify the application security requirements. --> + <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> + <security> + <requestedPrivileges> + <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> + </requestedPrivileges> + </security> + </trustInfo> +</assembly> diff --git a/packaging/windows/resources/netdata_claim.rc b/packaging/windows/resources/netdata_claim.rc new file mode 100644 index 00000000..7ba02833 --- /dev/null +++ b/packaging/windows/resources/netdata_claim.rc @@ -0,0 +1,3 @@ +#include "winuser.h" +1 RT_MANIFEST "netdata_claim.manifest" +11 ICON "../NetdataWhite.ico" diff --git a/packaging/windows/resources/netdatacli.manifest.in b/packaging/windows/resources/netdatacli.manifest.in new file mode 100644 index 00000000..ff2f48d3 --- /dev/null +++ b/packaging/windows/resources/netdatacli.manifest.in @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> + <assemblyIdentity version="@CMAKE_PROJECT_VERSION@" + processorArchitecture="*" + name="netdatacli" + type="win32"/> + <description>The netdatacli executable provides a simple way to control the Netdata agent's operation.</description> + <!-- Identify the application security requirements. --> + <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> + <security> + <requestedPrivileges> + <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> + </requestedPrivileges> + </security> + </trustInfo> +</assembly> diff --git a/packaging/windows/resources/netdatacli.rc b/packaging/windows/resources/netdatacli.rc new file mode 100644 index 00000000..baa9e8d6 --- /dev/null +++ b/packaging/windows/resources/netdatacli.rc @@ -0,0 +1,3 @@ +#include "winuser.h" +1 RT_MANIFEST "netdatacli.manifest" +11 ICON "../NetdataWhite.ico" diff --git a/packaging/windows/win-build-dir.sh b/packaging/windows/win-build-dir.sh index 09dd6b97..035ab7d9 100644 --- a/packaging/windows/win-build-dir.sh +++ b/packaging/windows/win-build-dir.sh @@ -1,11 +1,7 @@ #!/bin/bash if [ -n "${BUILD_DIR}" ]; then - if (echo "${BUILD_DIR}" | grep -q -E "^[A-Z]:\\\\"); then - build="$(echo "${BUILD_DIR}" | sed -e 's/\\/\//g' -e 's/^\([A-Z]\):\//\/\1\//' -)" - else - build="${BUILD_DIR}" - fi + build="$(cygpath -u "${BUILD_DIR}")" elif [ -n "${OSTYPE}" ]; then if [ -n "${MSYSTEM}" ]; then build="${REPO_ROOT}/build-${OSTYPE}-${MSYSTEM}" |