From 663ab312a7a0fd1db9dc8df599ae77fb0bfebf60 Mon Sep 17 00:00:00 2001 From: Craig Comstock Date: Thu, 23 Jul 2026 11:56:16 -0500 Subject: [PATCH 1/3] Refactor setup-cfengine-build-host.sh for bootstrap-host to run a script instead of using CFEngine policy Ticket: ENT-14330 Changelog: none --- ci/linux-install-node.sh | 29 ++++++++++++++++++++++++++++ ci/linux-install-php.sh | 30 +++++++++++++++++++++++++++++ ci/setup-bootstrap-host.sh | 34 +++++++++++++++++++++++++++++++++ ci/setup-cfengine-build-host.sh | 6 ++++++ 4 files changed, 99 insertions(+) create mode 100755 ci/linux-install-node.sh create mode 100755 ci/linux-install-php.sh create mode 100755 ci/setup-bootstrap-host.sh diff --git a/ci/linux-install-node.sh b/ci/linux-install-node.sh new file mode 100755 index 000000000..4c6f047bc --- /dev/null +++ b/ci/linux-install-node.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +node_version=20.10.0 + +npm install compare-versions + +node -e "import pkg from 'compare-versions'; const { compareVersions } = pkg; process.exit(compareVersions('$node_version', process.version));" +result=$? +echo "result: $result" +if [ "$result" != "1" ]; then + echo "node version is >= $node_version, no install will be performed." + exit +fi + +cd /opt +sudo curl -k -O https://unofficial-builds.nodejs.org/download/release/v$node_version/node-v$node_version-linux-x64-glibc-217.tar.xz +echo "dcfc5dfcdea4d0883bb35a4f2e09bc4745b6e689d88f4ad09d9ccc252024049b node-v$node_version-linux-x64-glibc-217.tar.xz" | sudo tee node-v$node_version-linux-x64-glibc-217.tar.xz.sha256 +sudo sha256sum --check node-v$node_version-linux-x64-glibc-217.tar.xz.sha256 +sudo tar xf node-v$node_version-linux-x64-glibc-217.tar.xz +sudo tee /etc/profile.d/nodejs.sh << EOF +export NODE_HOME=/opt/node-v$node_version-linux-x64-glibc-217 +export PATH=\$PATH:\$NODE_HOME/bin +EOF +sudo update-alternatives --install /usr/bin/node node /opt/node-v$node_version-linux-x64-glibc-217/bin/node 1 +sudo update-alternatives --install /usr/bin/npm npm /opt/node-v$node_version-linux-x64-glibc-217/bin/npm 1 +sudo update-alternatives --install /usr/bin/npx npx /opt/node-v$node_version-linux-x64-glibc-217/bin/npx 1 +sudo update-alternatives --install /usr/bin/corepack corepack /opt/node-v$node_version-linux-x64-glibc-217/bin/corepack 1 +cd /root + diff --git a/ci/linux-install-php.sh b/ci/linux-install-php.sh new file mode 100755 index 000000000..00716357e --- /dev/null +++ b/ci/linux-install-php.sh @@ -0,0 +1,30 @@ +#!/usr/bin/bash + +php_version=8.3.20 + +if command -v php; then + if php 'version_compare(PHP_VERSION, "$php_version") > 0 || exit(1);'; then + exit + fi +fi + +# TODO: query the package manager to see if a sufficient php version is available + +# install PHP 8.3 from source +sudo apt-get -y install gcc g++ make pkg-config libxml2-dev libsqlite3-dev \ +libcurl4-openssl-dev libpng-dev libonig-dev libldap2-dev libzip-dev \ +zlib1g-dev libssl-dev + +cd /tmp +wget https://www.php.net/distributions/php-$php_version.tar.gz +tar xzf php-$php_version.tar.gz +cd php-$php_version + +# --enable-bcmath is needed by tecnickcom/tc-lib-barcode and tecnickcom/tc-lib-pdf +./configure --prefix=/usr/local --with-curl --enable-bcmath --enable-gd --enable-mbstring --with-ldap --with-openssl --with-zlib + +make -j"$(nproc)" +sudo make install + +php -v +# END of PHP installation diff --git a/ci/setup-bootstrap-host.sh b/ci/setup-bootstrap-host.sh new file mode 100755 index 000000000..cd12cc170 --- /dev/null +++ b/ci/setup-bootstrap-host.sh @@ -0,0 +1,34 @@ +#!/usr/bin/bash +set -e +thisdir="$(dirname "$0")" + +rm -f /etc/apt/sources.list.d/*; echo 'deb http://archive.debian.org/debian/ stretch main contrib non-free' >/etc/apt/sources.list +apt-get -qy update +apt-get -qy upgrade +apt-get -y install git autogen autoconf automake m4 make bison flex binutils libtool gcc g++ libc-dev \ + liblmdb-dev libpam0g-dev python libssl-dev libpcre3-dev psmisc curl jq unzip \ + pigz parallel libpcre2-dev php-zip + +if ! command -v php; then + bash "$thisdir"/linux-install-php.sh +fi + +if ! command -v node; then + bash "$thisdir"/linux-install-node.sh +fi + +curl -sSfL https://raw.githubusercontent.com/cfengine/buildscripts/refs/heads/master/user-scripts/composer-install.sh | \ +COMPOSER_INSTALL_DIR="/usr/bin" \ +bash + +# install jdk "manually" +cd /opt +wget https://download.java.net/java/GA/jdk21.0.1/415e3f918a1f4062a0074a2794853d0d/12/GPL/openjdk-21.0.1_linux-x64_bin.tar.gz +echo "7e80146b2c3f719bf7f56992eb268ad466f8854d5d6ae11805784608e458343f openjdk-21.0.1_linux-x64_bin.tar.gz" > openjdk-21.0.1_linux-x64_bin.tar.gz.sha256 +sha256sum --check openjdk-21.0.1_linux-x64_bin.tar.gz.sha256 +sudo tar xf openjdk-21.0.1_linux-x64_bin.tar.gz +sudo tee /etc/profile.d/jdk.sh << EOF +export JAVA_HOME=/opt/jdk-21.0.1 +export PATH=\$PATH:\$JAVA_HOME/bin +EOF +sudo update-alternatives --install /usr/bin/java java /opt/jdk-21.0.1/bin/java 1 diff --git a/ci/setup-cfengine-build-host.sh b/ci/setup-cfengine-build-host.sh index 03626ff02..cac131fde 100755 --- a/ci/setup-cfengine-build-host.sh +++ b/ci/setup-cfengine-build-host.sh @@ -139,6 +139,12 @@ if grep -q 6.10 /etc/issue 2>/dev/null; then urlget https://cfengine-package-repos.s3.amazonaws.com/enterprise/Enterprise-3.24.3/misc/cfengine-masterfiles-3.24.3-1.pkg.tar.gz fi +# Here we start replacing the use of CFEngine policy with scripts. See ENT-14330 +if [ -f /etc/cfengine-bootstrap-pr-host.flag ]; then + "$thisdir"/setup-bootstrap-host.sh + exit +fi + if grep -q ubuntu /etc/os-release; then if grep -qi version=\"16 /etc/os-release; then urlget https://cfengine-package-repos.s3.amazonaws.com/enterprise/Enterprise-3.21.8/agent/agent_ubuntu16_x86_64/cfengine-nova_3.21.8-1.ubuntu16_amd64.deb From 0136971c104536840a362fc943c3675c41a97d20 Mon Sep 17 00:00:00 2001 From: Craig Comstock Date: Fri, 24 Jul 2026 07:16:36 -0500 Subject: [PATCH 2/3] Renamed linux-install-jdk21.sh to linux-install-jdk.sh and adjusted related code including github workflow update-deps.py Ticket: ENT-14330 Changelog: none --- .github/workflows/update-deps.py | 10 +++++----- ci/cfengine-build-host-setup.cf | 2 +- ci/{linux-install-jdk21.sh => linux-install-jdk.sh} | 0 3 files changed, 6 insertions(+), 6 deletions(-) rename ci/{linux-install-jdk21.sh => linux-install-jdk.sh} (100%) diff --git a/.github/workflows/update-deps.py b/.github/workflows/update-deps.py index ee6b523f4..e2725fd5d 100644 --- a/.github/workflows/update-deps.py +++ b/.github/workflows/update-deps.py @@ -60,7 +60,7 @@ def parse_args(): "--root", default=".", help="specify build scripts root directory" ) parser.add_argument( - "--jdk21", + "--jdk", action="store_true", help="update SDK 21 on build hosts (needed by Jenkins)", ) @@ -270,10 +270,10 @@ def update_deps(root, bump, skip): exit(1) -def update_jdk21(root): +def update_jdk(root): base_url = "https://download.oracle.com/java/21/archive/" - filename = os.path.join(root, "ci/linux-install-jdk21.sh") + filename = os.path.join(root, "ci/linux-install-jdk.sh") with open(filename, "r") as f: content = f.read() @@ -471,8 +471,8 @@ def main(): ) update_deps(args.root, args.bump, args.skip) - if args.jdk21: - update_jdk21(args.root) + if args.jdk: + update_jdk(args.root) if args.rust: update_rust(args.root) if args.protobuf: diff --git a/ci/cfengine-build-host-setup.cf b/ci/cfengine-build-host-setup.cf index 207ecbd72..96540ba6a 100644 --- a/ci/cfengine-build-host-setup.cf +++ b/ci/cfengine-build-host-setup.cf @@ -390,7 +390,7 @@ bundle agent cfengine_build_host_setup "sh $(this.promise_dirname)/linux-install-groovy.sh" contain => in_shell; missing_java|insufficient_java_version:: - "sh $(this.promise_dirname)/linux-install-jdk21.sh" + "sh $(this.promise_dirname)/linux-install-jdk.sh" contain => in_shell, classes => results("bundle", "java"); diff --git a/ci/linux-install-jdk21.sh b/ci/linux-install-jdk.sh similarity index 100% rename from ci/linux-install-jdk21.sh rename to ci/linux-install-jdk.sh From 749b4bbaab677b3eb230f411096397ab65a24047 Mon Sep 17 00:00:00 2001 From: Craig Comstock Date: Fri, 24 Jul 2026 07:19:06 -0500 Subject: [PATCH 3/3] Refactored bootstrap host setup to scripts Ticket: ENT-14330 Changelog: none --- .../linux-install-composer.sh | 3 ++ ci/linux-install-jdk.sh | 6 ++++ ci/linux-install-node.sh | 2 +- ci/linux-install-php.sh | 8 +++--- ci/setup-bootstrap-host.sh | 28 +++++-------------- 5 files changed, 21 insertions(+), 26 deletions(-) rename user-scripts/composer-install.sh => ci/linux-install-composer.sh (92%) diff --git a/user-scripts/composer-install.sh b/ci/linux-install-composer.sh similarity index 92% rename from user-scripts/composer-install.sh rename to ci/linux-install-composer.sh index b496d9ba8..7f9fc8e56 100644 --- a/user-scripts/composer-install.sh +++ b/ci/linux-install-composer.sh @@ -1,5 +1,8 @@ #!/bin/bash +if command -v composer >/dev/null; then + exit +fi VERSION="${COMPOSER_VERSION:-2.9.5}" INSTALL_DIR="${COMPOSER_INSTALL_DIR:-/usr/local/bin}" PHP_PATH="${PHP_BIN:-php}" diff --git a/ci/linux-install-jdk.sh b/ci/linux-install-jdk.sh index cc2c836b1..849afd737 100755 --- a/ci/linux-install-jdk.sh +++ b/ci/linux-install-jdk.sh @@ -36,6 +36,12 @@ EOF cd - } +if command -v java; then + echo "java already installed, will skip install." + exit +fi + +# TODO check version if [ "$(whoami)" = "root" ]; then install_jdk else diff --git a/ci/linux-install-node.sh b/ci/linux-install-node.sh index 4c6f047bc..930dde304 100755 --- a/ci/linux-install-node.sh +++ b/ci/linux-install-node.sh @@ -4,7 +4,7 @@ node_version=20.10.0 npm install compare-versions -node -e "import pkg from 'compare-versions'; const { compareVersions } = pkg; process.exit(compareVersions('$node_version', process.version));" +node -e "const cv = require('compare-versions'); process.exit(cv.compareVersions('$node_version', process.version));" result=$? echo "result: $result" if [ "$result" != "1" ]; then diff --git a/ci/linux-install-php.sh b/ci/linux-install-php.sh index 00716357e..9012238ee 100755 --- a/ci/linux-install-php.sh +++ b/ci/linux-install-php.sh @@ -1,15 +1,15 @@ -#!/usr/bin/bash +#!/usr/bin/env bash +set -e php_version=8.3.20 if command -v php; then - if php 'version_compare(PHP_VERSION, "$php_version") > 0 || exit(1);'; then + if php -r "version_compare(PHP_VERSION, \""$php_version"\") >= 0 || exit(1);"; then + echo "host has php version >= $php_version. will skip install." exit fi fi -# TODO: query the package manager to see if a sufficient php version is available - # install PHP 8.3 from source sudo apt-get -y install gcc g++ make pkg-config libxml2-dev libsqlite3-dev \ libcurl4-openssl-dev libpng-dev libonig-dev libldap2-dev libzip-dev \ diff --git a/ci/setup-bootstrap-host.sh b/ci/setup-bootstrap-host.sh index cd12cc170..4cc4a1a33 100755 --- a/ci/setup-bootstrap-host.sh +++ b/ci/setup-bootstrap-host.sh @@ -1,34 +1,20 @@ -#!/usr/bin/bash +#!/usr/bin/env bash set -e thisdir="$(dirname "$0")" +# current standard of debian-9 for bootstrap requires using archive.debian.org rm -f /etc/apt/sources.list.d/*; echo 'deb http://archive.debian.org/debian/ stretch main contrib non-free' >/etc/apt/sources.list + apt-get -qy update apt-get -qy upgrade apt-get -y install git autogen autoconf automake m4 make bison flex binutils libtool gcc g++ libc-dev \ liblmdb-dev libpam0g-dev python libssl-dev libpcre3-dev psmisc curl jq unzip \ pigz parallel libpcre2-dev php-zip -if ! command -v php; then - bash "$thisdir"/linux-install-php.sh -fi +bash "$thisdir"/linux-install-php.sh -if ! command -v node; then - bash "$thisdir"/linux-install-node.sh -fi +bash "$thisdir"/linux-install-node.sh -curl -sSfL https://raw.githubusercontent.com/cfengine/buildscripts/refs/heads/master/user-scripts/composer-install.sh | \ -COMPOSER_INSTALL_DIR="/usr/bin" \ -bash +bash "$thisdir"/linux-install-composer.sh -# install jdk "manually" -cd /opt -wget https://download.java.net/java/GA/jdk21.0.1/415e3f918a1f4062a0074a2794853d0d/12/GPL/openjdk-21.0.1_linux-x64_bin.tar.gz -echo "7e80146b2c3f719bf7f56992eb268ad466f8854d5d6ae11805784608e458343f openjdk-21.0.1_linux-x64_bin.tar.gz" > openjdk-21.0.1_linux-x64_bin.tar.gz.sha256 -sha256sum --check openjdk-21.0.1_linux-x64_bin.tar.gz.sha256 -sudo tar xf openjdk-21.0.1_linux-x64_bin.tar.gz -sudo tee /etc/profile.d/jdk.sh << EOF -export JAVA_HOME=/opt/jdk-21.0.1 -export PATH=\$PATH:\$JAVA_HOME/bin -EOF -sudo update-alternatives --install /usr/bin/java java /opt/jdk-21.0.1/bin/java 1 +bash "$thisdir"/linux-install-jdk.sh