diff --git a/modules/rpm-ostree/bluebuild-optfix.service b/modules/rpm-ostree/bluebuild-optfix.service new file mode 100644 index 0000000..6470559 --- /dev/null +++ b/modules/rpm-ostree/bluebuild-optfix.service @@ -0,0 +1,11 @@ +[Unit] +Description=Create symbolic links for directories in /usr/lib/opt/ to /var/opt/ +After=multi-user.target + +[Service] +Type=oneshot +ExecStart=/usr/libexec/bluebuild/optfix.sh +RemainAfterExit=no + +[Install] +WantedBy=default.target diff --git a/modules/rpm-ostree/optfix.sh b/modules/rpm-ostree/optfix.sh new file mode 100644 index 0000000..fcec512 --- /dev/null +++ b/modules/rpm-ostree/optfix.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +set -euo pipefail + +SOURCE_DIR="/usr/lib/opt/" +TARGET_DIR="/var/opt/" + +# Ensure the target directory exists +mkdir -p "$TARGET_DIR" + +# Loop through directories in the source directory +for dir in "$SOURCE_DIR"*/; do + if [ -d "$dir" ]; then + # Get the base name of the directory + dir_name=$(basename "$dir") + + # Check if the symlink already exists in the target directory + if [ -L "$TARGET_DIR/$dir_name" ]; then + echo "Symlink already exists for $dir_name, skipping." + continue + fi + + # Create the symlink + ln -s "$dir" "$TARGET_DIR/$dir_name" + echo "Created symlink for $dir_name" + fi +done diff --git a/modules/rpm-ostree/rpm-ostree.sh b/modules/rpm-ostree/rpm-ostree.sh index 266814c..42e94cf 100644 --- a/modules/rpm-ostree/rpm-ostree.sh +++ b/modules/rpm-ostree/rpm-ostree.sh @@ -42,16 +42,32 @@ fi # Create symlinks to fix packages that create directories in /opt get_json_array OPTFIX 'try .["optfix"][]' "$1" if [[ ${#OPTFIX[@]} -gt 0 ]]; then + LIB_EXEC_DIR="/usr/libexec/bluebuild" + SYSTEMD_DIR="/etc/systemd/system" + MODULE_DIR="/tmp/modules/rpm-ostree" + + if ! [ -x "${LIB_EXEC_DIR}/optfix.sh" ]; then + mkdir -p "${LIB_EXEC_DIR}" + cp "${MODULE_DIR}/optfix.sh" "${LIB_EXEC_DIR}/" + chmod +x "${LIB_EXEC_DIR}/optfix.sh" + fi + + if ! [ -f "${SYSTEMD_DIR}/bluebuild-optfix.service" ]; then + cp "${MODULE_DIR}/bluebuild-optfix.service" "${SYSTEMD_DIR}/" + systemctl enable bluebuild-optfix.service + fi + echo "Creating symlinks to fix packages that install to /opt" # Create symlink for /opt to /var/opt since it is not created in the image yet mkdir -p "/var/opt" - ln -s "/var/opt" "/opt" + ln -fs "/var/opt" "/opt" + # Create symlinks for each directory specified in recipe.yml for OPTPKG in "${OPTFIX[@]}"; do OPTPKG="${OPTPKG%\"}" OPTPKG="${OPTPKG#\"}" mkdir -p "/usr/lib/opt/${OPTPKG}" - ln -s "../../usr/lib/opt/${OPTPKG}" "/var/opt/${OPTPKG}" + ln -fs "/usr/lib/opt/${OPTPKG}" "/var/opt/${OPTPKG}" echo "Created symlinks for ${OPTPKG}" done fi