Automating Java Runtime Selection: How to Use `alternatives –config` Non-Interactively in RHEL Kickstart


2 views

When automating RHEL installations through kickstart, you'll often need to configure system alternatives without user interaction. The standard alternatives --config command requires manual selection, which breaks the automation flow during %post installation.

The alternatives system maintains symbolic links that determine default commands. For Java installations, it manages:

  • /usr/bin/java
  • /usr/bin/javac
  • /usr/bin/javaws

Here are three approaches to automate this process:

Method 1: Using --set

First identify the alternative you want:

alternatives --display java

Then set it directly:

alternatives --set java /path/to/jre/bin/java

Method 2: Using --install

You can install and set the alternative in one command:

alternatives --install /usr/bin/java java /path/to/jre/bin/java 2000 \
    --slave /usr/share/man/man1/java.1.gz java.1.gz /path/to/jre/man/man1/java.1

Method 3: Using --auto

If you want the system to automatically select the highest priority:

alternatives --auto java

Here's a full %post section example:

%post
# Install Java
yum install -y java-11-openjdk-devel

# Configure alternatives
alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el8_4.x86_64/bin/java 2000 \
    --slave /usr/bin/javac javac /usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el8_4.x86_64/bin/javac \
    --slave /usr/bin/javaws javaws /usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el8_4.x86_64/bin/javaws \
    --slave /usr/share/man/man1/java.1.gz java.1.gz /usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el8_4.x86_64/man/man1/java.1

alternatives --set java /usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el8_4.x86_64/bin/java
%end

After installation, verify with:

java -version
update-alternatives --display java
  • Ensure paths exist before running alternatives commands
  • Check priority values when multiple versions are installed
  • Verify symbolic links point to the correct locations

When automating RHEL installations through kickstart, the interactive nature of alternatives --config poses a significant hurdle. Manual intervention defeats the purpose of automated deployment, especially when setting up Java runtime environments.

The alternatives system maintains symbolic links to determine default commands. For Java, it typically manages:

/usr/bin/java
/usr/bin/javac
/usr/bin/javaws

Three reliable approaches exist for automating this process:

Method 1: Using --set Directly

The most straightforward solution:

alternatives --set java /path/to/jre/bin/java
alternatives --set javac /path/to/jre/bin/javac

Method 2: --install with --slave Options

For complete configuration during installation:

alternatives --install /usr/bin/java java /path/to/java/bin/java 1 \
    --slave /usr/bin/javac javac /path/to/java/bin/javac \
    --slave /usr/bin/javaws javaws /path/to/java/bin/javaws

Method 3: Using --auto

When you want to automatically select the highest priority alternative:

alternatives --auto java

Here's how to implement this in a kickstart %post section:

%post
# Install JRE
yum install -y java-1.8.0-openjdk

# Configure alternatives non-interactively
alternatives --install /usr/bin/java java /usr/lib/jvm/jre-1.8.0-openjdk/bin/java 200000 \
    --slave /usr/bin/javac javac /usr/lib/jvm/jre-1.8.0-openjdk/bin/javac \
    --slave /usr/bin/javaws javaws /usr/lib/jvm/jre-1.8.0-openjdk/bin/javaws \
    --slave /usr/bin/jconsole jconsole /usr/lib/jvm/jre-1.8.0-openjdk/bin/jconsole

alternatives --set java /usr/lib/jvm/jre-1.8.0-openjdk/bin/java
%end

After installation, verify with:

java -version
update-alternatives --display java

For systems requiring multiple Java versions, use priority values strategically:

# Java 8
alternatives --install /usr/bin/java java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 2

# Java 11
alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1

# Set default
alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java