Building Cruise Control - linux-on-ibm-z/docs GitHub Wiki

Building Cruise Control

The instructions provided below specify the steps to build Cruise Control 2.5.137 on Linux on IBM Z for following distributions:

  • RHEL (7.8, 7.9, 8.6, 8.8, 8.9, 9.0, 9.2, 9.3)
  • SLES (12 SP5, 15 SP5)
  • Ubuntu (20.04, 22.04, 23.10)

General Notes:

  • When following the steps below please use a standard permission user unless otherwise specified.

  • A directory /<source_root>/ will be referred to in these instructions, this is a temporary writable directory anywhere you'd like to place it.

Build and Install Cruise Control

Step 1: Build using script

If you want to build Cruise Control using manual steps, go to STEP 2.

Use the following commands to build Cruise Control using the build script. Please make sure you have wget installed.

wget -q https://raw.githubusercontent.com/linux-on-ibm-z/scripts/master/CruiseControl/2.5.137/build_cruise_control.sh

# Build Cruise Control
bash build_cruise_control.sh [Provide -j (Temurin11|Semeru11|OpenJDK11) option for building with specific java, Provide -t option for executing build with tests ]

If the build completes successfully, go to STEP 6 for test execution. In case of error, check logs for more details or go to STEP 2 to follow manual build steps.

Step 2: Install Dependencies

export SOURCE_ROOT=/<source_root>/
  • RHEL (7.8, 7.9, 8.6, 8.8, 8.9)

    sudo yum install -y wget tar git curl gzip procps-ng
    
  • RHEL (9.0, 9.2, 9.3)

    sudo yum install -y --allowerasing wget tar git curl gzip procps-ng
    
  • SLES (12 SP5, 15 SP5)

    sudo zypper install -y wget tar git-core curl gzip gawk
    
  • Ubuntu (20.04, 22.04, 23.10)

    sudo apt-get update
    sudo apt-get install -y wget tar git curl gzip
    

Note: If you are building Apache Kafka from source, it is recommended to choose the same JDK variant for building Cruise Control.

Step 3: Install Java

  • With IBM Semeru Runtime

    • Download and install IBM Semeru Runtime (Java 11) from here.
  • With Eclipse Adoptium Temurin Runtime

    • Download and install Eclipse Adoptium Temurin Runtime (Java 11) from here.
  • With OpenJDK 11

    • RHEL (7.8, 7.9, 8.6, 8.8, 8.9, 9.0, 9.2, 9.3)
      sudo yum install -y java-11-openjdk java-11-openjdk-devel
      
    • SLES (12 SP5, 15 SP5)
      sudo zypper install -y java-11-openjdk java-11-openjdk-devel
      
    • Ubuntu (20.04, 22.04, 23.10)
      sudo apt-get install -y openjdk-11-jdk
      

Note: At the time of creation of these build instructions, Cruise Control was verified with Semeru and Temurin runtime version 11.0.21.0 (build 11.0.21+9). If you are building Apache Kafka from source, it is recommended to choose the same JDK variant for building Cruise Control.

Step 4: Set environment variables

export JAVA_HOME=<path to java>
export PATH=$JAVA_HOME/bin:$PATH

Step 5: Download and build Cruise Control

cd $SOURCE_ROOT
git clone https://github.com/linkedin/cruise-control.git
cd cruise-control
git checkout 2.5.137
./gradlew jar

Step 6: Testing (Optional)

cd $SOURCE_ROOT/cruise-control
./gradlew test --continue

Notes:

  • When using the Semeru JDK 11.0.15 or newer, the following tests fail becauseof a bug in a dependency of the MiniKDC test server that tries to load a class that does not exist in the Semeru JDKs:
    com.linkedin.kafka.cruisecontrol.servlet.security.trustedproxy.TrustedProxySecurityProviderIntegrationTest > testNotAdminServiceLogin 
    com.linkedin.kafka.cruisecontrol.servlet.security.trustedproxy.TrustedProxySecurityProviderIntegrationTest > testNoDoAsParameter 
    com.linkedin.kafka.cruisecontrol.servlet.security.trustedproxy.TrustedProxySecurityProviderIntegrationTest > testSuccessfulAuthentication 
    com.linkedin.kafka.cruisecontrol.servlet.security.trustedproxy.TrustedProxySecurityProviderSpnegoFallbackIntegrationTest > testSuccessfulAuthentication 
    com.linkedin.kafka.cruisecontrol.servlet.security.trustedproxy.TrustedProxySecurityProviderSpnegoFallbackIntegrationTest > testUnsuccessfulAuthentication 
    com.linkedin.kafka.cruisecontrol.servlet.security.spnego.SpnegoSecurityProviderIntegrationTest > testNotAdminServiceLogin 
    com.linkedin.kafka.cruisecontrol.servlet.security.spnego.SpnegoSecurityProviderIntegrationTest > testSuccessfulAuthentication
    
    The bug is only in a test dependency and is not part of the deployed cruise-control. The same tests also fail on x86_64 when running with Semeru JDK 11.0.16 or newer.
  • When using the distribution's openjdk-11 packages on RHEL 9.x and SLES 15 SP5, the following tests will fail if the DEFAULT system wide crypto-policy mode is in effect:
    com.linkedin.kafka.cruisecontrol.metricsreporter.CruiseControlMetricsReporterSslTest > testUpdatingMetricsTopicConfig
    com.linkedin.kafka.cruisecontrol.metricsreporter.CruiseControlMetricsReporterSslTest > testReportingMetrics
    com.linkedin.kafka.cruisecontrol.metricsreporter.CruiseControlMetricsReporterSslTest > testGetKafkaBootstrapServersConfigure
    
    The tests will pass if the LEGACY crypto-policy mode is in effect or if the crypto-policy package is not installed. The same tests also fail on x86_64 RHEL 9.x and SLES 15 SP5.

Step 7: Verification

Follow official quickstart guide given here to verify the installation. The Cruise Control server requires connection to one or more Apache Kafka servers, instructions for building Apache Kafka v3.4.0 can be found here

Notes:

  • The default capacity configuration file (config/capacityJBOD.json) assumes that at least two Kafka brokers should be present, so you might need to modify the Kafka server configuration accordingly. Please check the wiki page for more configuration options.

References: