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