diff --git a/Dockerfile b/Dockerfile index 4d32696158..2e1cb7ed0b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1326,6 +1326,106 @@ COPY --from=questing-build /tmp/google-cloud-ops-agent.tgz /google-cloud-ops-age COPY --from=questing-build /google-cloud-ops-agent*.deb / COPY --from=questing-build /google-cloud-ops-agent-plugin*.tar.gz / +# ====================================== +# Build Ops Agent for ubuntu-resolute +# ====================================== + +FROM ubuntu:resolute AS resolute-build-base +ARG OPENJDK_MAJOR_VERSION + +RUN set -x; apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get -y install git systemd \ + autoconf libtool libcurl4-openssl-dev libltdl-dev libssl-dev libyajl-dev \ + build-essential cmake bison flex file systemd-dev debhelper libsystemd-dev tzdata \ + devscripts cdbs pkg-config openjdk-${OPENJDK_MAJOR_VERSION}-jdk zip + +SHELL ["/bin/bash", "-c"] + +# Install golang +ARG TARGETARCH +ARG GO_VERSION +ADD https://go.dev/dl/go${GO_VERSION}.linux-${TARGETARCH}.tar.gz /tmp/go${GO_VERSION}.tar.gz +RUN set -xe; \ + tar -xf /tmp/go${GO_VERSION}.tar.gz -C /usr/local +ENV PATH="${PATH}:/usr/local/go/bin" + + +FROM resolute-build-base AS resolute-build-otel +WORKDIR /work +# Download golang deps +COPY ./submodules/opentelemetry-operations-collector/go.mod ./submodules/opentelemetry-operations-collector/go.sum submodules/opentelemetry-operations-collector/ +RUN cd submodules/opentelemetry-operations-collector && go mod download + +COPY ./submodules/opentelemetry-java-contrib submodules/opentelemetry-java-contrib +# Install gradle. The first invocation of gradlew does this +RUN cd submodules/opentelemetry-java-contrib && ./gradlew --no-daemon -Djdk.lang.Process.launchMechanism=vfork tasks +COPY ./submodules/opentelemetry-operations-collector submodules/opentelemetry-operations-collector +COPY ./builds/otel.sh . +RUN \ + unset OTEL_TRACES_EXPORTER && \ + unset OTEL_EXPORTER_OTLP_TRACES_ENDPOINT && \ + unset OTEL_EXPORTER_OTLP_TRACES_PROTOCOL && \ + ./otel.sh /work/cache/ + +FROM resolute-build-base AS resolute-build-fluent-bit +WORKDIR /work +COPY ./submodules/fluent-bit submodules/fluent-bit +COPY ./builds/fluent_bit.sh . +RUN ./fluent_bit.sh /work/cache/ + + +FROM resolute-build-base AS resolute-build-systemd +WORKDIR /work +COPY ./systemd systemd +COPY ./builds/systemd.sh . +RUN ./systemd.sh /work/cache/ + + +FROM resolute-build-base AS resolute-build-golang-base +WORKDIR /work +COPY go.mod go.sum ./ +# Fetch dependencies +RUN go mod download +COPY confgenerator confgenerator +COPY apps apps +COPY internal internal + + +FROM resolute-build-golang-base AS resolute-build-wrapper +WORKDIR /work +COPY cmd/agent_wrapper cmd/agent_wrapper +COPY ./builds/agent_wrapper.sh . +RUN ./agent_wrapper.sh /work/cache/ + + +FROM resolute-build-golang-base AS resolute-build +WORKDIR /work +COPY . /work + +# Run the build script once to build the ops agent engine to a cache +RUN mkdir -p /tmp/cache_run/golang && cp -r . /tmp/cache_run/golang +WORKDIR /tmp/cache_run/golang +RUN ./pkg/deb/build.sh &> /dev/null || true +WORKDIR /work + +COPY ./confgenerator/default-config.yaml /work/cache/etc/google-cloud-ops-agent/config.yaml +COPY --from=resolute-build-otel /work/cache /work/cache +COPY --from=resolute-build-fluent-bit /work/cache /work/cache +COPY --from=resolute-build-systemd /work/cache /work/cache +COPY --from=resolute-build-wrapper /work/cache /work/cache +RUN ./pkg/deb/build.sh + +COPY cmd/ops_agent_uap_plugin cmd/ops_agent_uap_plugin +COPY ./builds/ops_agent_plugin.sh . +RUN ./ops_agent_plugin.sh /work/cache/ +RUN ./pkg/plugin/build.sh /work/cache resolute + + +FROM scratch AS resolute +COPY --from=resolute-build /tmp/google-cloud-ops-agent.tgz /google-cloud-ops-agent-ubuntu-resolute.tgz +COPY --from=resolute-build /google-cloud-ops-agent*.deb / +COPY --from=resolute-build /google-cloud-ops-agent-plugin*.tar.gz / + FROM scratch COPY --from=centos8 /* / COPY --from=rockylinux9 /* / @@ -1338,4 +1438,5 @@ COPY --from=sles15 /* / COPY --from=sles16 /* / COPY --from=jammy /* / COPY --from=noble /* / -COPY --from=questing /* / \ No newline at end of file +COPY --from=questing /* / +COPY --from=resolute /* / \ No newline at end of file diff --git a/dockerfiles/compile.go b/dockerfiles/compile.go index e1a861b20b..10d418d713 100644 --- a/dockerfiles/compile.go +++ b/dockerfiles/compile.go @@ -246,6 +246,18 @@ RUN ln -fs /usr/lib/systemd /lib/systemd` + installJava + installCMake, tar_distro_name: "ubuntu-questing", package_extension: "deb", }, + { + from_image: "ubuntu:resolute", + target_name: "resolute", + install_packages: `RUN set -x; apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get -y install git systemd \ + autoconf libtool libcurl4-openssl-dev libltdl-dev libssl-dev libyajl-dev \ + build-essential cmake bison flex file systemd-dev debhelper libsystemd-dev tzdata \ + devscripts cdbs pkg-config openjdk-${OPENJDK_MAJOR_VERSION}-jdk zip`, + package_build: "RUN ./pkg/deb/build.sh", + tar_distro_name: "ubuntu-resolute", + package_extension: "deb", + }, } func getDockerfileFooter() string { diff --git a/integration_test/third_party_apps_test/applications/aerospike/metadata.yaml b/integration_test/third_party_apps_test/applications/aerospike/metadata.yaml index b9e9824a4d..e8d662c2e8 100644 --- a/integration_test/third_party_apps_test/applications/aerospike/metadata.yaml +++ b/integration_test/third_party_apps_test/applications/aerospike/metadata.yaml @@ -175,4 +175,6 @@ platforms_to_skip: - ml-images:common-cu129-ubuntu-2404-nvidia-580 # 24.04 only has Aerospike 7.2.0+ - ubuntu-os-cloud:ubuntu-2510-amd64 # aerospike not available for 25.10 yet: https://download.aerospike.com/artifacts/aerospike-server-community/7.2.0/ - ubuntu-os-cloud:ubuntu-2510-arm64 # aerospike not available for 25.10 yet: https://download.aerospike.com/artifacts/aerospike-server-community/7.2.0/ + - ubuntu-os-cloud:ubuntu-2604-lts-amd64 # aerospike not available for 26.04 yet: https://download.aerospike.com/artifacts/aerospike-server-community/7.2.0/ + - ubuntu-os-cloud:ubuntu-2604-lts-arm64 # aerospike not available for 26.04 yet: https://download.aerospike.com/artifacts/aerospike-server-community/7.2.0/ public_url: https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/third-party/aerospike diff --git a/integration_test/third_party_apps_test/applications/couchdb/metadata.yaml b/integration_test/third_party_apps_test/applications/couchdb/metadata.yaml index 743d1a51bf..0bab3fd76b 100644 --- a/integration_test/third_party_apps_test/applications/couchdb/metadata.yaml +++ b/integration_test/third_party_apps_test/applications/couchdb/metadata.yaml @@ -77,6 +77,8 @@ platforms_to_skip: - ubuntu-os-cloud:ubuntu-2404-lts-arm64 - ubuntu-os-cloud:ubuntu-2510-amd64 # couchdb not available for 25.10 yet: https://docs.couchdb.org/en/stable/install/unix.html - ubuntu-os-cloud:ubuntu-2510-arm64 + - ubuntu-os-cloud:ubuntu-2604-lts-amd64 # couchdb not available for 26.04 yet: https://docs.couchdb.org/en/stable/install/unix.html + - ubuntu-os-cloud:ubuntu-2604-lts-arm64 # couchdb not available for 26.04 yet: https://docs.couchdb.org/en/stable/install/unix.html - debian-cloud:debian-12 - debian-cloud:debian-12-arm64 # couchdb does not support Debian 13 yet: https://apache.jfrog.io/ui/native/couchdb-deb/dists/. diff --git a/integration_test/third_party_apps_test/applications/hadoop/debian_ubuntu/install b/integration_test/third_party_apps_test/applications/hadoop/debian_ubuntu/install index 4b6730fc0b..870cd53b75 100644 --- a/integration_test/third_party_apps_test/applications/hadoop/debian_ubuntu/install +++ b/integration_test/third_party_apps_test/applications/hadoop/debian_ubuntu/install @@ -3,7 +3,7 @@ set -e sudo apt-get update # Debian 12 very specifically wants openjdk-17-jdk for installing Java via apt source /etc/os-release -if [[ $ID == debian && "${VERSION_ID}" == 12 ]]; then +if [[ $ID == debian && "${VERSION_ID}" == 12 ]] || [[ $ID == ubuntu && "${VERSION_ID}" == "26.04" ]]; then sudo apt-get install -y openjdk-17-jdk openjdk-17-jdk-headless wget else sudo apt-get install -y default-jdk default-jdk-headless wget diff --git a/integration_test/third_party_apps_test/applications/mariadb/metadata.yaml b/integration_test/third_party_apps_test/applications/mariadb/metadata.yaml index 5cde719041..d8483141da 100644 --- a/integration_test/third_party_apps_test/applications/mariadb/metadata.yaml +++ b/integration_test/third_party_apps_test/applications/mariadb/metadata.yaml @@ -64,6 +64,8 @@ platforms_to_skip: - suse-cloud:sles-15-arm64 - ubuntu-os-cloud:ubuntu-2510-amd64 # Possible support in the future - ubuntu-os-cloud:ubuntu-2510-arm64 # Possible support in the future + - ubuntu-os-cloud:ubuntu-2604-lts-amd64 # TODO(b/512442712): Skipped on Ubuntu 26.04 due to systemd/AppArmor custom directory blockages + - ubuntu-os-cloud:ubuntu-2604-lts-arm64 # TODO(b/512442712): Skipped on Ubuntu 26.04 due to systemd/AppArmor custom directory blockages supported_app_version: ["10.1.X through 10.7.X", ""] # Indicate multiple versions. expected_metrics: - type: workload.googleapis.com/mysql.buffer_pool_data_pages diff --git a/integration_test/third_party_apps_test/applications/mongodb/metadata.yaml b/integration_test/third_party_apps_test/applications/mongodb/metadata.yaml index 31104d7289..6a8f17e5bf 100644 --- a/integration_test/third_party_apps_test/applications/mongodb/metadata.yaml +++ b/integration_test/third_party_apps_test/applications/mongodb/metadata.yaml @@ -33,7 +33,7 @@ minimum_supported_agent_version: logging: 2.10.0 supported_operating_systems: linux platforms_to_skip: - # mongodb is not currently supported on various distros. + # mongodb is not currently supported on various distros: https://www.mongodb.com/docs/manual/installation/ - debian-cloud:debian-13 - debian-cloud:debian-13-arm64 - debian-cloud:debian-12 @@ -45,6 +45,8 @@ platforms_to_skip: - rocky-linux-cloud:rocky-linux-10-optimized-gcp-arm64 - ubuntu-os-cloud:ubuntu-2510-amd64 - ubuntu-os-cloud:ubuntu-2510-arm64 + - ubuntu-os-cloud:ubuntu-2604-lts-amd64 # mongodb is not available on Ubuntu 26.04 yet + - ubuntu-os-cloud:ubuntu-2604-lts-arm64 # mongodb is not available on Ubuntu 26.04 yet supported_app_version: ["2.6", "3.x", "4.x", "5.0", "6.0"] expected_metrics: - type: workload.googleapis.com/mongodb.cache.operations diff --git a/integration_test/third_party_apps_test/applications/mongodb3.6/metadata.yaml b/integration_test/third_party_apps_test/applications/mongodb3.6/metadata.yaml index 930072e684..024edbea97 100644 --- a/integration_test/third_party_apps_test/applications/mongodb3.6/metadata.yaml +++ b/integration_test/third_party_apps_test/applications/mongodb3.6/metadata.yaml @@ -59,6 +59,8 @@ platforms_to_skip: - ml-images:common-cu129-ubuntu-2404-nvidia-580 - ubuntu-os-cloud:ubuntu-2510-amd64 - ubuntu-os-cloud:ubuntu-2510-arm64 + - ubuntu-os-cloud:ubuntu-2604-lts-amd64 # EOL version, doesn't support resolute. + - ubuntu-os-cloud:ubuntu-2604-lts-arm64 # EOL version, doesn't support resolute. supported_app_version: ["2.6", "3.0+", "4.0+", "5.0"] expected_metrics: - type: workload.googleapis.com/mongodb.cache.operations diff --git a/integration_test/third_party_apps_test/applications/mysql/metadata.yaml b/integration_test/third_party_apps_test/applications/mysql/metadata.yaml index 57b40b0060..379e037fb4 100644 --- a/integration_test/third_party_apps_test/applications/mysql/metadata.yaml +++ b/integration_test/third_party_apps_test/applications/mysql/metadata.yaml @@ -32,7 +32,7 @@ minimum_supported_agent_version: logging: 2.5.0 supported_operating_systems: linux platforms_to_skip: - # MySQL is not currently supported on various distros. + # MySQL is not currently supported on various distros: https://www.mysql.com/support/supportedplatforms/database.html - debian-cloud:debian-12 - debian-cloud:debian-12-arm64 - debian-cloud:debian-13 @@ -42,6 +42,8 @@ platforms_to_skip: - suse-sap-cloud:sles-12-sp5-sap - ubuntu-os-cloud:ubuntu-2510-amd64 # MySQL is not available on Ubuntu 25.10 yet - ubuntu-os-cloud:ubuntu-2510-arm64 # MySQL is not available on Ubuntu 25.10 yet + - ubuntu-os-cloud:ubuntu-2604-lts-amd64 # MySQL is not available on Ubuntu 26.04 yet + - ubuntu-os-cloud:ubuntu-2604-lts-arm64 # MySQL is not available on Ubuntu 26.04 yet supported_app_version: ["5.7", "8.0"] expected_metrics: - type: workload.googleapis.com/mysql.buffer_pool_data_pages diff --git a/integration_test/third_party_apps_test/applications/mysql5.7/metadata.yaml b/integration_test/third_party_apps_test/applications/mysql5.7/metadata.yaml index 925a4875d3..20507383e3 100644 --- a/integration_test/third_party_apps_test/applications/mysql5.7/metadata.yaml +++ b/integration_test/third_party_apps_test/applications/mysql5.7/metadata.yaml @@ -67,6 +67,8 @@ platforms_to_skip: - ml-images:common-cu129-ubuntu-2404-nvidia-580 - ubuntu-os-cloud:ubuntu-2510-amd64 - ubuntu-os-cloud:ubuntu-2510-arm64 + - ubuntu-os-cloud:ubuntu-2604-lts-amd64 # EOL version, doesn't support resolute. + - ubuntu-os-cloud:ubuntu-2604-lts-arm64 # EOL version, doesn't support resolute. supported_app_version: ["5.7", "8.0"] expected_metrics: - type: workload.googleapis.com/mysql.buffer_pool_data_pages diff --git a/integration_test/third_party_apps_test/applications/oracledb/metadata.yaml b/integration_test/third_party_apps_test/applications/oracledb/metadata.yaml index f1a063302f..3dd00bce7d 100644 --- a/integration_test/third_party_apps_test/applications/oracledb/metadata.yaml +++ b/integration_test/third_party_apps_test/applications/oracledb/metadata.yaml @@ -76,6 +76,8 @@ platforms_to_skip: - ml-images:common-cu129-ubuntu-2404-nvidia-580 - ubuntu-os-cloud:ubuntu-2510-amd64 - ubuntu-os-cloud:ubuntu-2510-arm64 + - ubuntu-os-cloud:ubuntu-2604-lts-amd64 + - ubuntu-os-cloud:ubuntu-2604-lts-arm64 supported_app_version: ["12.2", "18c", "19c", "21c"] expected_metrics: - type: workload.googleapis.com/oracle.backup.latest diff --git a/integration_test/third_party_apps_test/applications/rabbitmq/debian_ubuntu/install b/integration_test/third_party_apps_test/applications/rabbitmq/debian_ubuntu/install index 3d9ef86099..dca6903dbc 100644 --- a/integration_test/third_party_apps_test/applications/rabbitmq/debian_ubuntu/install +++ b/integration_test/third_party_apps_test/applications/rabbitmq/debian_ubuntu/install @@ -20,7 +20,7 @@ case $VERSION_ID in 22.04) echo "deb http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list ;; - 24.04|25.10) + 24.04|25.10|26.04) echo "deb http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu noble main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list ;; # debian @@ -36,7 +36,7 @@ case $VERSION_ID in ;; esac -if [[ "${VERSION_ID}" != "24.04" && "${VERSION_ID}" != "22.04" && "${VERSION_ID}" != "12" && "${VERSION_ID}" != "25.10" ]]; then +if [[ "${VERSION_ID}" != "24.04" && "${VERSION_ID}" != "22.04" && "${VERSION_ID}" != "12" && "${VERSION_ID}" != "25.10" && "${VERSION_ID}" != "26.04" ]]; then # Ubuntu Noble, Jammy and Debian 12 do not require the extra repo, and adding the extra repo # would sometime cause package conflicts - b/433254435 curl -s \ @@ -44,7 +44,7 @@ if [[ "${VERSION_ID}" != "24.04" && "${VERSION_ID}" != "22.04" && "${VERSION_ID} sudo bash fi -if [[ "${VERSION_ID}" == "25.10" ]]; then +if [[ "${VERSION_ID}" == "25.10" || "${VERSION_ID}" == "26.04" ]]; then curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.deb.sh > install_rabbitmq.sh chmod +x install_rabbitmq.sh sudo PLUGINS_DIR="/usr/lib/rabbitmq/lib/rabbitmq_server-4.0.5/plugins" os=ubuntu dist=noble ./install_rabbitmq.sh @@ -63,7 +63,7 @@ fi sudo systemctl daemon-reload sudo systemctl enable rabbitmq-server sudo systemctl restart rabbitmq-server -if [[ "${VERSION_ID}" == "25.10" ]]; then +if [[ "${VERSION_ID}" == "25.10" || "${VERSION_ID}" == "26.04" ]]; then sudo PLUGINS_DIR="/usr/lib/rabbitmq/lib/rabbitmq_server-4.0.5/plugins" rabbitmq-plugins enable rabbitmq_management else sudo rabbitmq-plugins enable rabbitmq_management @@ -92,7 +92,7 @@ curl -i -u admin:admin \ -X POST "${endpoint}/api/bindings/dev/e/webex/q/webq1" \ -d'{"routing_key":"webq1","arguments":{}}' -if [[ "${VERSION_ID}" == "25.10" ]]; then +if [[ "${VERSION_ID}" == "25.10" || "${VERSION_ID}" == "26.04" ]]; then sudo PLUGINS_DIR="/usr/lib/rabbitmq/lib/rabbitmq_server-4.0.5/plugins" rabbitmq-plugins enable rabbitmq_management else sudo rabbitmq-plugins enable rabbitmq_management diff --git a/integration_test/third_party_apps_test/applications/tomcat/debian_ubuntu/install b/integration_test/third_party_apps_test/applications/tomcat/debian_ubuntu/install index 71c663303f..2f24482aff 100644 --- a/integration_test/third_party_apps_test/applications/tomcat/debian_ubuntu/install +++ b/integration_test/third_party_apps_test/applications/tomcat/debian_ubuntu/install @@ -10,17 +10,11 @@ if [[ $ID == debian && "${VERSION_ID}" == 13 ]]; then elif [[ $ID == debian && "${VERSION_ID}" == 12 ]]; then sudo apt-get install -y openjdk-17-jdk openjdk-17-jdk-headless TOMCAT_VERSION=tomcat10 -elif [[ $ID == ubuntu && "${VERSION_ID}" == 24* ]]; then +elif [[ $ID == ubuntu && "${VERSION_ID}" =~ ^(24|25|26) ]]; then sudo apt-get install -y default-jdk default-jdk-headless TOMCAT_VERSION=tomcat10 else - if [[ $ID == ubuntu && "${VERSION_ID}" == 24* ]]; then - TOMCAT_VERSION=tomcat10 - elif [[ $ID == ubuntu && "${VERSION_ID}" == 25* ]]; then - TOMCAT_VERSION=tomcat10 - else - TOMCAT_VERSION=tomcat9 - fi + TOMCAT_VERSION=tomcat9 sudo apt-get install -y curl default-jdk default-jdk-headless fi diff --git a/integration_test/third_party_apps_test/applications/vault/metadata.yaml b/integration_test/third_party_apps_test/applications/vault/metadata.yaml index b216f183ea..3a197d45fa 100644 --- a/integration_test/third_party_apps_test/applications/vault/metadata.yaml +++ b/integration_test/third_party_apps_test/applications/vault/metadata.yaml @@ -75,6 +75,8 @@ platforms_to_skip: - rocky-linux-cloud:rocky-linux-10-optimized-gcp-arm64 - ubuntu-os-cloud:ubuntu-2510-amd64 # vault not available for 25.10 yet: https://www.hashicorp.com/en/official-packaging-guide - ubuntu-os-cloud:ubuntu-2510-arm64 # vault not available for 25.10 yet: https://www.hashicorp.com/en/official-packaging-guide + - ubuntu-os-cloud:ubuntu-2604-lts-amd64 # vault not available for 26.04 yet: https://www.hashicorp.com/en/official-packaging-guide + - ubuntu-os-cloud:ubuntu-2604-lts-arm64 # vault not available for 26.04 yet: https://www.hashicorp.com/en/official-packaging-guide supported_app_version: ["1.6+"] expected_metrics: - type: workload.googleapis.com/vault.core.request.count diff --git a/integration_test/third_party_apps_test/applications/wildfly/debian_ubuntu/install b/integration_test/third_party_apps_test/applications/wildfly/debian_ubuntu/install index e9e4680db4..043932542b 100644 --- a/integration_test/third_party_apps_test/applications/wildfly/debian_ubuntu/install +++ b/integration_test/third_party_apps_test/applications/wildfly/debian_ubuntu/install @@ -3,7 +3,7 @@ set -e sudo apt-get update # Debian 12 very specifically wants openjdk-17-jdk for installing Java via apt source /etc/os-release -if [[ $ID == debian && "${VERSION_ID}" == 12 ]]; then +if [[ $ID == debian && "${VERSION_ID}" == 12 ]] || [[ $ID == ubuntu && "${VERSION_ID}" == "26.04" ]]; then sudo apt-get install -y curl openjdk-17-jdk else sudo apt-get install -y curl default-jre diff --git a/integration_test/third_party_apps_test/applications/zookeeper/debian_ubuntu/install b/integration_test/third_party_apps_test/applications/zookeeper/debian_ubuntu/install index 7db3dce54d..6ea22d9ad3 100644 --- a/integration_test/third_party_apps_test/applications/zookeeper/debian_ubuntu/install +++ b/integration_test/third_party_apps_test/applications/zookeeper/debian_ubuntu/install @@ -17,7 +17,7 @@ sudo apt install -y zookeeper-bin zookeeperd # For some reason the zookeeper package doesn't set the CLASSPATH in the environment file # on Ubuntu 23.04 and Debian 12, which it does on previous versions of Ubuntu and Debian. source /etc/os-release -if [[ "${VERSION_ID}" == 23* || "${VERSION_ID}" == 24* || "${VERSION_ID}" == 25* || "${VERSION_ID}" == 12 || "${VERSION_ID}" == 13 ]]; then +if [[ "${VERSION_ID}" =~ ^(23|24|25|26|12|13) ]]; then sudo tee -a /etc/zookeeper/conf/environment >/dev/null <