diff --git a/ci-scripts/template-vars.yaml b/ci-scripts/template-vars.yaml
index 36c1ba2..6edcdaf 100644
--- a/ci-scripts/template-vars.yaml
+++ b/ci-scripts/template-vars.yaml
@@ -176,6 +176,23 @@ multiImages:
- src/oracle9/xfce/.config/xfce4/xfconf/xfce-perchannel-xml/**
- src/oracle9/xfce/.config/xfce4/xfconf/single-application-xfce-perchannel-xml/**
- src/ubuntu/sysbox/**
+ - name1: rhel
+ name2: 9
+ base: registry.access.redhat.com/ubi9/ubi
+ bg: bg_rhel.png
+ distro: rhel9
+ dockerfile: dockerfile-kasm-core-oracle
+ changeFiles:
+ - dockerfile-kasm-core-oracle
+ - src/rhel9/**
+ - src/rhel9/xfce/**
+ - src/rhel9/xfce/.config/**
+ - src/rhel9/xfce/.config/xfce4/**
+ - src/rhel9/xfce/.config/xfce4/xfconf/**
+ - src/rhel9/xfce/.config/xfce4/xfconf/xfce-perchannel-xml/**
+ - src/rhel9/xfce/.config/xfce4/xfconf/single-application-xfce-perchannel-xml/**
+ - src/ubuntu/install/rhel/**
+ - src/ubuntu/sysbox/**
- name1: rockylinux
name2: 8
base: rockylinux:8
diff --git a/dockerfile-kasm-core-oracle b/dockerfile-kasm-core-oracle
index 42f1a8e..34f5b05 100644
--- a/dockerfile-kasm-core-oracle
+++ b/dockerfile-kasm-core-oracle
@@ -16,7 +16,7 @@ FROM install_tools AS squid_builder
ARG DISTRO=oracle8
-RUN if [ "${DISTRO}" == "oracle8" ] || [ "${DISTRO}" == "oracle9" ] || [ "${DISTRO}" == "rockylinux9" ] || [ "${DISTRO}" == "rockylinux8" ] || [ "${DISTRO}" == "almalinux8" ] || [ "${DISTRO}" == "almalinux9" ]; then \
+RUN if [ "${DISTRO}" == "oracle8" ] || [ "${DISTRO}" == "oracle9" ] || [ "${DISTRO}" == "rockylinux9" ] || [ "${DISTRO}" == "rockylinux8" ] || [ "${DISTRO}" == "almalinux8" ] || [ "${DISTRO}" == "almalinux9" ] || [ "${DISTRO}" == "rhel9" ]; then \
ARCH=$(arch | sed 's/aarch64/arm64/g' | sed 's/x86_64/amd64/g') && \
wget --progress=dot:giga "https://kasmweb-build-artifacts.s3.amazonaws.com/kasm-squid-builder/1149fc830c7edcb383eec390cce2beba16befde5/output/kasm-squid-builder_${ARCH}.tar.gz"; \
else \
@@ -59,7 +59,7 @@ RUN mkdir -p $HOME/Desktop
### (should be nss_wrapper), and yum would just ignore it. Thus, a necessary
### package would be missing. With skip_missing_names_on_install, yum will exit
### with 1 exit code and that will stop image building.
-RUN if [ "${DISTRO}" == "oracle8" ] || [ "${DISTRO}" == "oracle9" ] || [ "${DISTRO}" == "rockylinux9" ] || [ "${DISTRO}" == "rockylinux8" ] || [ "${DISTRO}" == "almalinux8" ] || [ "${DISTRO}" == "almalinux9" ]; then \
+RUN if [ "${DISTRO}" == "oracle8" ] || [ "${DISTRO}" == "oracle9" ] || [ "${DISTRO}" == "rockylinux9" ] || [ "${DISTRO}" == "rockylinux8" ] || [ "${DISTRO}" == "almalinux8" ] || [ "${DISTRO}" == "almalinux9" ] || [ "${DISTRO}" == "rhel9" ]; then \
dnf install -y 'dnf-command(config-manager)' && \
dnf config-manager --setopt=skip_missing_names_on_install=False --save && \
dnf clean all; \
@@ -67,6 +67,10 @@ else \
yum-config-manager --setopt=skip_missing_names_on_install=False --save; \
fi
+### RHEL Tweaks
+COPY ./src/ubuntu/install/rhel $INST_SCRIPTS/rhel/
+RUN bash $INST_SCRIPTS/rhel/install_rhel.sh && rm -rf $INST_SCRIPTS/rhel/
+
### Copy over the maximization script to our startup dir for use by app images.
COPY ./src/ubuntu/install/maximize_script $STARTUPDIR/
diff --git a/docs/core-rhel-9/README.md b/docs/core-rhel-9/README.md
new file mode 100644
index 0000000..9d27c7b
--- /dev/null
+++ b/docs/core-rhel-9/README.md
@@ -0,0 +1,7 @@
+# About This Image
+
+This Image contains a browser-accessible Red Hat Linux 9 with XFCE desktop environment.
+
+![Screenshot][Image_Screenshot]
+
+[Image_Screenshot]: https://5856039.fs1.hubspotusercontent-na1.net/hubfs/5856039/dockerhub/image-screenshots/core-rhel-9.png "Image Screenshot"
diff --git a/docs/core-rhel-9/demo.txt b/docs/core-rhel-9/demo.txt
new file mode 100644
index 0000000..bf7fabc
--- /dev/null
+++ b/docs/core-rhel-9/demo.txt
@@ -0,0 +1,7 @@
+# Live Demo
+
+**Launch a real-time demo in a new browser window:** Live Demo.
+
+
+
+∗*Note: Demo is limited to 3 minutes and has upload/downloads restricted for security purposes.*
diff --git a/docs/core-rhel-9/description.txt b/docs/core-rhel-9/description.txt
new file mode 100644
index 0000000..423e4fc
--- /dev/null
+++ b/docs/core-rhel-9/description.txt
@@ -0,0 +1 @@
+Red Hat Linux 9 base image for Kasm Workspaces
diff --git a/src/common/resources/images/bg_rhel.png b/src/common/resources/images/bg_rhel.png
new file mode 100644
index 0000000..bb6b374
Binary files /dev/null and b/src/common/resources/images/bg_rhel.png differ
diff --git a/src/rhel9/xfce/.config/.blank b/src/rhel9/xfce/.config/.blank
new file mode 100644
index 0000000..e69de29
diff --git a/src/rhel9/xfce/.config/xfce4/fedora-logo-icon.png b/src/rhel9/xfce/.config/xfce4/fedora-logo-icon.png
new file mode 100644
index 0000000..ae8fe7b
Binary files /dev/null and b/src/rhel9/xfce/.config/xfce4/fedora-logo-icon.png differ
diff --git a/src/rhel9/xfce/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml b/src/rhel9/xfce/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml
new file mode 100644
index 0000000..a34dc3c
--- /dev/null
+++ b/src/rhel9/xfce/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/rhel9/xfce/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml b/src/rhel9/xfce/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
new file mode 100644
index 0000000..3638ad1
--- /dev/null
+++ b/src/rhel9/xfce/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/rhel9/xfce/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml b/src/rhel9/xfce/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml
new file mode 100644
index 0000000..ba3c831
--- /dev/null
+++ b/src/rhel9/xfce/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/rhel9/xfce/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml b/src/rhel9/xfce/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml
new file mode 100644
index 0000000..d60e3c4
--- /dev/null
+++ b/src/rhel9/xfce/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/ubuntu/install/audio/install_audio.sh b/src/ubuntu/install/audio/install_audio.sh
index 3cd80fc..a13203e 100644
--- a/src/ubuntu/install/audio/install_audio.sh
+++ b/src/ubuntu/install/audio/install_audio.sh
@@ -15,8 +15,8 @@ elif [ "${DISTRO}" == "oracle8" ]; then
dnf config-manager --set-enabled ol8_codeready_builder
dnf localinstall -y --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm
dnf install -y ffmpeg pulseaudio-utils
-elif [ "${DISTRO}" == "oracle9" ]; then
- dnf install -y curl git
+elif [[ "${DISTRO}" == @(oracle9|rhel9) ]]; then
+ dnf install -y --allowerasing curl git
dnf config-manager --set-enabled ol9_codeready_builder
dnf localinstall -y --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-9.noarch.rpm
dnf install -y --allowerasing ffmpeg pulseaudio-utils pulseaudio
diff --git a/src/ubuntu/install/cleanup/cleanup.sh b/src/ubuntu/install/cleanup/cleanup.sh
index 77aca86..87b84ef 100644
--- a/src/ubuntu/install/cleanup/cleanup.sh
+++ b/src/ubuntu/install/cleanup/cleanup.sh
@@ -4,7 +4,7 @@ set -ex
# Distro package cleanup
if [[ "${DISTRO}" == @(centos|oracle7) ]] ; then
yum clean all
-elif [[ "${DISTRO}" == @(almalinux8|almalinux9|fedora37|fedora38|fedora39|fedora40|oracle8|oracle9|rockylinux8|rockylinux9) ]]; then
+elif [[ "${DISTRO}" == @(almalinux8|almalinux9|fedora37|fedora38|fedora39|fedora40|oracle8|oracle9|rhel9|rockylinux8|rockylinux9) ]]; then
dnf clean all
elif [ "${DISTRO}" == "opensuse" ]; then
zypper clean --all
diff --git a/src/ubuntu/install/fonts/install_custom_fonts.sh b/src/ubuntu/install/fonts/install_custom_fonts.sh
index a3fa448..da8d9d2 100644
--- a/src/ubuntu/install/fonts/install_custom_fonts.sh
+++ b/src/ubuntu/install/fonts/install_custom_fonts.sh
@@ -31,7 +31,7 @@ elif [[ "${DISTRO}" == @(fedora37|fedora38|fedora39|fedora40) ]]; then
echo "Generating Locale for ${LOCALE}"
localedef -i ${LOCALE} -f UTF-8 ${LOCALE}.UTF-8
done
-elif [[ "${DISTRO}" == @(oracle8|oracle9|rockylinux9|rockylinux8|almalinux9|almalinux8) ]]; then
+elif [[ "${DISTRO}" == @(oracle8|oracle9|rhel9|rockylinux9|rockylinux8|almalinux9|almalinux8) ]]; then
dnf install -y \
glibc-locale-source \
google-noto-emoji-fonts \
diff --git a/src/ubuntu/install/kasm_vnc/install_kasm_vnc.sh b/src/ubuntu/install/kasm_vnc/install_kasm_vnc.sh
index a7a4c66..70f3431 100644
--- a/src/ubuntu/install/kasm_vnc/install_kasm_vnc.sh
+++ b/src/ubuntu/install/kasm_vnc/install_kasm_vnc.sh
@@ -7,7 +7,7 @@ prepare_rpm_repo_dependencies() {
elif [[ "$DISTRO" = "oracle8" ]]; then
dnf config-manager --set-enabled ol8_codeready_builder
dnf install -y oracle-epel-release-el8
- elif [[ "$DISTRO" = "oracle9" ]]; then
+ elif [[ "${DISTRO}" == @(oracle9|rhel9) ]]; then
dnf config-manager --set-enabled ol9_codeready_builder
dnf install -y oracle-epel-release-el9
fi
@@ -45,7 +45,7 @@ elif [[ "${DISTRO}" == @(rockylinux8|oracle8|almalinux8) ]] ; then
else
BUILD_URL="https://kasmweb-build-artifacts.s3.amazonaws.com/kasmvnc/${COMMIT_ID}/kasmvncserver_oracle_8_${KASM_VER_NAME_PART}_aarch64.rpm"
fi
-elif [[ "${DISTRO}" == @(rockylinux9|oracle9|almalinux9) ]] ; then
+elif [[ "${DISTRO}" == @(rockylinux9|oracle9|rhel9|almalinux9) ]] ; then
if [[ "$(arch)" =~ ^x86_64$ ]] ; then
BUILD_URL="https://kasmweb-build-artifacts.s3.amazonaws.com/kasmvnc/${COMMIT_ID}/kasmvncserver_oracle_9_${KASM_VER_NAME_PART}_x86_64.rpm"
else
@@ -136,7 +136,7 @@ if [[ "${DISTRO}" == @(centos|oracle7) ]] ; then
wget "${BUILD_URL}" -O kasmvncserver.rpm
yum localinstall -y kasmvncserver.rpm
rm kasmvncserver.rpm
-elif [[ "${DISTRO}" == @(oracle8|oracle9|rockylinux9|rockylinux8|almalinux8|almalinux9) ]] ; then
+elif [[ "${DISTRO}" == @(oracle8|oracle9|rhel9|rockylinux9|rockylinux8|almalinux8|almalinux9) ]] ; then
wget "${BUILD_URL}" -O kasmvncserver.rpm
dnf localinstall -y kasmvncserver.rpm
dnf install -y mesa-dri-drivers
diff --git a/src/ubuntu/install/kde/install_kde.sh b/src/ubuntu/install/kde/install_kde.sh
index 5e29bb5..5864d8d 100644
--- a/src/ubuntu/install/kde/install_kde.sh
+++ b/src/ubuntu/install/kde/install_kde.sh
@@ -30,7 +30,7 @@ EOL
}
echo "Install KDE UI components"
-if [[ "${DISTRO}" != @(centos|oracle7|oracle8|opensuse|fedora37|fedora38|oracle9|rockylinux9|rockylinux8|almalinux8|almalinux9|alpine) ]]; then
+if [[ "${DISTRO}" != @(centos|oracle7|oracle8|opensuse|fedora37|fedora38|oracle9|rhel9|rockylinux9|rockylinux8|almalinux8|almalinux9|alpine) ]]; then
apt-get update
fi
@@ -81,7 +81,7 @@ elif [ "$DISTRO" = "oracle8" ]; then
wmctrl \
xclip \
xset
-elif [ "$DISTRO" = "oracle9" ]; then
+elif [[ "${DISTRO}" == @(oracle9|rhel9) ]]; then
dnf config-manager --set-enabled ol9_codeready_builder
dnf config-manager --set-enabled ol9_distro_builder
dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
@@ -134,7 +134,7 @@ elif [ "$DISTRO" = "alpine" ]; then
mesa-gl
fi
-if [[ "${DISTRO}" != @(centos|oracle7|oracle8|fedora37|fedora38|oracle9|rockylinux9|rockylinux8|almalinux8|almalinux9|alpine) ]]; then
+if [[ "${DISTRO}" != @(centos|oracle7|oracle8|fedora37|fedora38|oracle9|rhel9|rockylinux9|rockylinux8|almalinux8|almalinux9|alpine) ]]; then
replace_default_xinit
if [ "${START_XFCE4}" == "1" ] ; then
replace_default_99x11_common_start
diff --git a/src/ubuntu/install/openbox/install_openbox.sh b/src/ubuntu/install/openbox/install_openbox.sh
index 780f335..f5aa040 100644
--- a/src/ubuntu/install/openbox/install_openbox.sh
+++ b/src/ubuntu/install/openbox/install_openbox.sh
@@ -30,7 +30,7 @@ EOL
}
echo "Install Openbox UI components"
-if [[ "${DISTRO}" != @(centos|oracle7|oracle8|opensuse|fedora37|fedora38|oracle9|rockylinux9|rockylinux8|almalinux8|almalinux9|alpine) ]]; then
+if [[ "${DISTRO}" != @(centos|oracle7|oracle8|opensuse|fedora37|fedora38|oracle9|rhel9|rockylinux9|rockylinux8|almalinux8|almalinux9|alpine) ]]; then
apt-get update
fi
@@ -68,7 +68,7 @@ elif [ "$DISTRO" = "oracle8" ]; then
xclip \
xset \
xterm
-elif [ "$DISTRO" = "oracle9" ]; then
+elif [[ "${DISTRO}" == @(oracle9|rhel9) ]]; then
dnf config-manager --set-enabled ol9_codeready_builder
dnf config-manager --set-enabled ol9_distro_builder
dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
@@ -133,7 +133,7 @@ elif [ "$DISTRO" = "alpine" ]; then
xterm
fi
-if [[ "${DISTRO}" != @(centos|oracle7|oracle8|fedora37|fedora38|oracle9|rockylinux9|rockylinux8|almalinux8|almalinux9|alpine) ]]; then
+if [[ "${DISTRO}" != @(centos|oracle7|oracle8|fedora37|fedora38|oracle9|rhel9|rockylinux9|rockylinux8|almalinux8|almalinux9|alpine) ]]; then
replace_default_xinit
if [ "${START_XFCE4}" == "1" ] ; then
replace_default_99x11_common_start
diff --git a/src/ubuntu/install/package_rules/package_rules.sh b/src/ubuntu/install/package_rules/package_rules.sh
index 6795321..b72c63b 100644
--- a/src/ubuntu/install/package_rules/package_rules.sh
+++ b/src/ubuntu/install/package_rules/package_rules.sh
@@ -9,7 +9,7 @@ elif [[ "${DISTRO}" == "debian" ]] ; then
sed -i \
'/locale/d' \
/etc/dpkg/dpkg.cfg.d/docker
-elif [[ "${DISTRO}" == @(almalinux8|almalinux9|fedora37|fedora38|fedora39|fedora40|oracle8|oracle9|rockylinux8|rockylinux9) ]]; then
+elif [[ "${DISTRO}" == @(almalinux8|almalinux9|fedora37|fedora38|fedora39|fedora40|oracle8|oracle9|rhel9|rockylinux8|rockylinux9) ]]; then
rm -f /etc/rpm/macros.image-language-conf
elif [[ "${DISTRO}" == @(centos|oracle7) ]]; then
sed -i \
@@ -22,7 +22,7 @@ fi
echo "Upgrading packages from upstream base image"
if [[ "${DISTRO}" == @(centos|oracle7) ]] ; then
yum update -y
-elif [[ "${DISTRO}" == @(fedora37|fedora38|fedora39|fedora40|oracle8|oracle9|rockylinux9|rockylinux8|almalinux8|almalinux9) ]]; then
+elif [[ "${DISTRO}" == @(fedora37|fedora38|fedora39|fedora40|oracle8|oracle9|rhel9|rockylinux9|rockylinux8|almalinux8|almalinux9) ]]; then
dnf upgrade -y --refresh
elif [ "${DISTRO}" == "opensuse" ]; then
zypper --non-interactive patch --auto-agree-with-licenses
diff --git a/src/ubuntu/install/printer/install_printer.sh b/src/ubuntu/install/printer/install_printer.sh
index 86db7ee..7820e86 100755
--- a/src/ubuntu/install/printer/install_printer.sh
+++ b/src/ubuntu/install/printer/install_printer.sh
@@ -6,7 +6,7 @@ echo $DISTRO
if [ "${DISTRO}" == "oracle7" ] || [ "${DISTRO}" == "centos" ]; then
yum install -y cups cups-client cups-pdf
-elif [[ "${DISTRO}" == @(almalinux8|almalinux9|oracle8|oracle9|rockylinux8|rockylinux9|fedora37|fedora38|fedora39|fedora40) ]]; then
+elif [[ "${DISTRO}" == @(almalinux8|almalinux9|oracle8|oracle9|rhel9|rockylinux8|rockylinux9|fedora37|fedora38|fedora39|fedora40) ]]; then
dnf install -y cups cups-client cups-pdf
elif [ "${DISTRO}" == "opensuse" ]; then
zypper install -y cups cups-client cups-pdf
diff --git a/src/ubuntu/install/profile_sync/install_profile_sync.sh b/src/ubuntu/install/profile_sync/install_profile_sync.sh
index 0c58bfc..f3271ca 100755
--- a/src/ubuntu/install/profile_sync/install_profile_sync.sh
+++ b/src/ubuntu/install/profile_sync/install_profile_sync.sh
@@ -58,6 +58,9 @@ handle_other_distros_conversion() {
almalinux*)
profile_distro=$(echo "$profile_distro" | sed -e 's/linux//')
;;
+ rhel*)
+ profile_distro=$(echo "$profile_distro" | sed -e 's/rhel/oracle/')
+ ;;
esac
}
diff --git a/src/ubuntu/install/rhel/install_rhel.sh b/src/ubuntu/install/rhel/install_rhel.sh
new file mode 100644
index 0000000..2866337
--- /dev/null
+++ b/src/ubuntu/install/rhel/install_rhel.sh
@@ -0,0 +1,147 @@
+#! /bin/bash
+
+set -e
+
+# Bail if this is not really RHEL
+if ! grep -q 'REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"' /etc/os-release; then
+ exit 0
+fi
+
+# Add OL9 repos to RHEL
+cat >>/etc/yum.repos.d/oracle-linux-ol9.repo <>/etc/pki/rpm-gpg/RPM-GPG-KEY-oracle <