@cryptotaxi247 / netdata-1 / commits / d596b2530

Add first class support for FreeBSD (#9413)

* Add FreeBSD system detection and package manager support * Add suitable package selections for FreeBSD * Add non-interactive mode for pkg * Use gmake to buiold on FreeBSD and --disable-dependency-tracking

James Mills committed Jun 26, 2020 at 09:28 UTC d596b2530ab6b36c6cf1f1b294b91d214e230e07
2 files changed +86 -6
netdata-installer.sh
+10 -3
@@ -297,6 +297,13 @@ while [ -n "${1}" ]; do
297 shift 1
298 done
299
300 +make="make"
301 +# See: https://github.com/netdata/netdata/issues/9163
302 +if [ "$(uname -s)" = "FreeBSD" ]; then
303 + make="gmake"
304 + NETDATA_CONFIGURE_OPTIONS="$NETDATA_CONFIGURE_OPTIONS --disable-dependency-tracking"
305 +fi
306 +
307 # replace multiple spaces with a single space
308 NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS// / }"
309
@@ -705,12 +712,12 @@ trap - EXIT
712 # -----------------------------------------------------------------------------
713 progress "Cleanup compilation directory"
714
708 -run make clean
715 +run $make clean
716
717 # -----------------------------------------------------------------------------
718 progress "Compile netdata"
719
713 -run make -j$(find_processors) || exit 1
720 +run $make -j$(find_processors) || exit 1
721
722 # -----------------------------------------------------------------------------
723 progress "Migrate configuration files for node.d.plugin and charts.d.plugin"
@@ -817,7 +824,7 @@ touch "${NETDATA_PREFIX}/etc/netdata/.installer-cleanup-of-stock-configs-done"
824 # -----------------------------------------------------------------------------
825 progress "Install netdata"
826
820 -run make install || exit 1
827 +run $make install || exit 1
828
829 # -----------------------------------------------------------------------------
830 progress "Fix generated files permissions"
packaging/installer/install-required-packages.sh
+76 -3
@@ -40,6 +40,7 @@ lsb_release=$(command -v lsb_release 2> /dev/null)
40 apk=$(command -v apk 2> /dev/null)
41 apt_get=$(command -v apt-get 2> /dev/null)
42 brew=$(command -v brew 2> /dev/null)
43 +pkg=$(command -v pkg 2> /dev/null)
44 dnf=$(command -v dnf 2> /dev/null)
45 emerge=$(command -v emerge 2> /dev/null)
46 equo=$(command -v equo 2> /dev/null)
@@ -92,6 +93,7 @@ Supported installers (IN):
93 - apk all Alpine derivatives
94 - swupd all Clear Linux derivatives
95 - brew macOS Homebrew
96 + - pkg FreeBSD Ports
97
98 Supported packages (you can append many of them):
99
@@ -275,18 +277,24 @@ autodetect_distribution() {
277 "Linux")
278 get_os_release || get_lsb_release || find_etc_any_release
279 ;;
280 + "FreeBSD")
281 + distribution="freebsd"
282 + version="$(uname -r)"
283 + detection="uname"
284 + ;;
285 "Darwin")
286 distribution="macos"
287 version="$(uname -r)"
288 detection="uname"
289
283 - if [ ${EUID} -eq 0 ] ; then
290 + if [ ${EUID} -eq 0 ]; then
291 echo >&2 "This script does not support running as EUID 0 on macOS. Please run it as a regular user."
292 exit 1
293 fi
294 ;;
295 *)
296 return 1
297 + ;;
298 esac
299 }
300
@@ -322,6 +330,7 @@ user_picks_distribution() {
330 [ -n "${apk}" ] && echo >&2 " - Alpine Linux based (installer is: apk)" && opts="apk ${opts}"
331 [ -n "${swupd}" ] && echo >&2 " - Clear Linux based (installer is: swupd)" && opts="swupd ${opts}"
332 [ -n "${brew}" ] && echo >&2 " - macOS based (installer is: brew)" && opts="brew ${opts}"
333 + # XXX: This is being removed in another PR.
334 echo >&2
335
336 REPLY=
@@ -446,6 +455,14 @@ detect_package_manager_from_distribution() {
455 fi
456 ;;
457
458 + freebsd)
459 + package_installer="install_pkg"
460 + tree="freebsd"
461 + if [ "${IGNORE_INSTALLED}" -eq 0 ] && [ -z "${pkg}" ]; then
462 + echo >&2 "command 'pkg' is required to install packages on a '${distribution} ${version}' system."
463 + exit 1
464 + fi
465 + ;;
466 macos)
467 package_installer="install_brew"
468 tree="macos"
@@ -462,6 +479,7 @@ detect_package_manager_from_distribution() {
479 esac
480 }
481
482 +# XXX: This is being removed in another PR.
483 check_package_manager() {
484 # This is called only when the user is selecting a package manager
485 # It is used to verify the user selection is right
@@ -585,6 +603,7 @@ declare -A pkg_find=(
603 ['fedora']="findutils"
604 ['clearlinux']="findutils"
605 ['macos']="NOTREQUIRED"
606 + ['freebsd']="NOTREQUIRED"
607 ['default']="WARNING|"
608 )
609
@@ -646,6 +665,7 @@ declare -A pkg_json_c_dev=(
665 ['gentoo']="dev-libs/json-c"
666 ['sabayon']="dev-libs/json-c"
667 ['suse']="libjson-c-devel"
668 + ['freebsd']="json-c"
669 ['default']="json-c-devel"
670 )
671
@@ -748,6 +768,7 @@ declare -A pkg_libz_dev=(
768 ['suse']="zlib-devel"
769 ['clearlinux']="devpkg-zlib"
770 ['macos']="NOTREQUIRED"
771 + ['freebsd']="lzlib"
772 ['default']=""
773 )
774
@@ -762,6 +783,7 @@ declare -A pkg_libuuid_dev=(
783 ['rhel']="libuuid-devel"
784 ['suse']="libuuid-devel"
785 ['macos']="NOTREQUIRED"
786 + ['freebsd']="e2fsprogs-libuuid"
787 ['default']=""
788 )
789
@@ -790,6 +812,7 @@ declare -A pkg_lm_sensors=(
812 ['suse']="sensors"
813 ['clearlinux']="lm-sensors"
814 ['macos']="WARNING|"
815 + ['freebsd']="NOTREQUIRED"
816 ['default']="lm_sensors"
817 )
818
@@ -817,6 +840,7 @@ declare -A pkg_mailutils=(
840 declare -A pkg_make=(
841 ['gentoo']="sys-devel/make"
842 ['macos']="NOTREQUIRED"
843 + ['freebsd']="gmake"
844 ['default']="make"
845 )
846
@@ -847,6 +871,7 @@ declare -A pkg_nginx=(
871 declare -A pkg_nodejs=(
872 ['gentoo']="net-libs/nodejs"
873 ['clearlinux']="nodejs-basic"
874 + ['freebsd']="node"
875 ['default']="nodejs"
876
877 # exceptions
@@ -872,6 +897,7 @@ declare -A pkg_pkg_config=(
897 ['sabayon']="virtual/pkgconfig"
898 ['rhel']="pkgconfig"
899 ['suse']="pkg-config"
900 + ['freebsd']="pkgconf"
901 ['clearlinux']="c-basic"
902 ['default']="pkg-config"
903 )
@@ -999,6 +1025,7 @@ declare -A pkg_python3_pymongo=(
1025 ['gentoo']="dev-python/pymongo"
1026 ['suse']="python3-pymongo"
1027 ['clearlinux']="WARNING|"
1028 + ['freebsd']="py37-pymongo"
1029 ['macos']="WARNING|"
1030 ['default']="python3-pymongo"
1031 )
@@ -1042,6 +1069,7 @@ declare -A pkg_lz4=(
1069 ['clearlinux']="devpkg-lz4"
1070 ['arch']="lz4"
1071 ['macos']="lz4"
1072 + ['freebsd']="liblz4"
1073 ['default']="lz4-devel"
1074 )
1075
@@ -1053,6 +1081,7 @@ declare -A pkg_libuv=(
1081 ['arch']="libuv"
1082 ['clearlinux']="devpkg-libuv"
1083 ['macos']="libuv"
1084 + ['freebsd']="libuv"
1085 ['default']="libuv-devel"
1086 )
1087
@@ -1064,6 +1093,7 @@ declare -A pkg_openssl=(
1093 ['clearlinux']="devpkg-openssl"
1094 ['gentoo']="dev-libs/openssl"
1095 ['arch']="openssl"
1096 + ['freebsd']="openssl"
1097 ['macos']="openssl@1.1"
1098 ['default']="openssl-devel"
1099 )
@@ -1077,6 +1107,7 @@ declare -A pkg_judy=(
1107 ['suse']="judy-devel"
1108 ['gentoo']="dev-libs/judy"
1109 ['arch']="judy"
1110 + ['freebsd']="Judy"
1111 ['default']="Judy-devel"
1112 )
1113
@@ -1360,7 +1391,7 @@ run() {
1391 }
1392
1393 sudo=
1363 -if [ ${UID} -ne 0 ] ; then
1394 +if [ ${UID} -ne 0 ]; then
1395 sudo="sudo"
1396 fi
1397
@@ -1423,6 +1454,24 @@ prompt() {
1454 done
1455 }
1456
1457 +validate_tree_freebsd() {
1458 + local opts=
1459 + if [ "${NON_INTERACTIVE}" -eq 1 ]; then
1460 + echo >&2 "Running in non-interactive mode"
1461 + opts="-y"
1462 + fi
1463 +
1464 + echo >&2 " > FreeBSD Version: ${version} ..."
1465 +
1466 + make="make"
1467 + echo >&2 " > Checking for gmake ..."
1468 + if ! pkg query %n-%v | grep -q gmake; then
1469 + if prompt "gmake is required to build on FreeBSD and is not installed. Shall I install it?"; then
1470 + run ${sudo} pkg install ${opts} gmake
1471 + fi
1472 + fi
1473 +}
1474 +
1475 validate_tree_centos() {
1476 local opts=
1477 if [ "${NON_INTERACTIVE}" -eq 1 ]; then
@@ -1736,10 +1785,34 @@ install_swupd() {
1785 # -----------------------------------------------------------------------------
1786 # macOS
1787
1788 +validate_install_pkg() {
1789 + pkg query %n-%v | grep -q "${*}" || echo "${*}"
1790 +}
1791 +
1792 validate_install_brew() {
1793 brew list | grep -q "${*}" || echo "${*}"
1794 }
1795
1796 +install_pkg() {
1797 + # download the latest package info
1798 + if [ "${DRYRUN}" -eq 1 ]; then
1799 + echo >&2 " >> IMPORTANT << "
1800 + echo >&2 " Please make sure your system is up to date"
1801 + echo >&2 " by running: pkg update "
1802 + echo >&2
1803 + fi
1804 +
1805 + local opts=
1806 + if [ "${NON_INTERACTIVE}" -eq 1 ]; then
1807 + echo >&2 "Running in non-interactive mode"
1808 + opts="-y"
1809 + fi
1810 +
1811 + read -r -a pkg_opts <<< "${opts}"
1812 +
1813 + run ${sudo} pkg install "${pkg_opts[@]}" "${@}"
1814 +}
1815 +
1816 install_brew() {
1817 # download the latest package info
1818 if [ "${DRYRUN}" -eq 1 ]; then
@@ -1796,7 +1869,7 @@ if [ -z "${1}" ]; then
1869 fi
1870
1871 pv=$(python --version 2>&1)
1799 -if [ "${tree}" = macos ] ; then
1872 +if [ "${tree}" = macos ]; then
1873 pv=3
1874 elif [[ "${pv}" =~ ^Python\ 2.* ]]; then
1875 pv=2