12e9116
#!/bin/bash
12e9116
12e9116
# Simple script to set up Edition defaults for Fedora
12e9116
# Keep this in sync with convert-to-edition.lua
12e9116
12e9116
OPTIND=1
12e9116
12e9116
VARIANT_FILE=/usr/lib/variant
12e9116
12e9116
# Defaults are set to provide the fewest suprises for anyone running this
12e9116
# script manually to convert their own system. In nearly all cases, it should
12e9116
# be possible to run `convert-to-edition -e <edition>` and get expected results
12e9116
12e9116
# By default, install new packages to ensure that all the necessary files are
12e9116
# available before symlinking. This must be skipped when running this file as
12e9116
# part of an RPM scriptlet.
12e9116
do_installation=1
12e9116
12e9116
# By default, do not modify the enabled or disabled state of any service on the
12e9116
# system. This should only be done when this script is run as part of system
12e9116
# installation or if the user is certain that they want to apply the changes to
12e9116
# the presets to their system.
12e9116
enable_presets=0
12e9116
12e9116
exit_usage() {
12e9116
    echo "Usage: convert-to-edition [options] -e cloud|non-edition|server|workstation"
12e9116
    echo "    Options:"
12e9116
    echo "        -e: The edition to install (atomichost, cloud, non-edition, server or workstation)"
12e9116
    echo "        -i: Skip installing additional files and just update symlinks"
12e9116
    echo "        -p: Also enable newly-added systemd presets"
12e9116
    exit 1
12e9116
}
12e9116
12e9116
while getopts "e:ihp" opt; do
12e9116
    case "$opt" in
12e9116
    e)
12e9116
        EDITION=$OPTARG
12e9116
        ;;
12e9116
    i)
12e9116
        do_installation=0
12e9116
        ;;
12e9116
    p)
12e9116
        enable_presets=1
12e9116
        ;;
12e9116
    h)
12e9116
        exit_usage
12e9116
        ;;
12e9116
    esac
12e9116
done
12e9116
12e9116
# None of the actions below can be run by a non-root user
12e9116
if [[ $EUID -ne 0 ]]; then
12e9116
   echo "This script must be run as root" 1>&2
12e9116
   exit 1
12e9116
fi
12e9116
12e9116
case $EDITION in
12e9116
  atomichost)
12e9116
    if [ $do_installation -gt 0 ]; then
12e9116
        dnf install -y fedora-release-atomichost
12e9116
    fi
12e9116
12e9116
    echo "VARIANT_ID=atomic.host" > $VARIANT_FILE
12e9116
12e9116
    # Ensure that the os-release file is pointing to the correct version
12e9116
    ln -sf ./os.release.d/os-release-atomichost /usr/lib/os-release || :
12e9116
12e9116
    # Ensure that the issue file is pointing to the correct version
12e9116
    ln -sf ./os.release.d/issue-fedora /usr/lib/issue
12e9116
12e9116
    # Remove any presets from other Editions.
12e9116
    rm -f /usr/lib/systemd/system-preset/80-*.preset
12e9116
    ;;
12e9116
12e9116
  cloud)
12e9116
    if [ $do_installation -gt 0 ]; then
12e9116
        echo "Installing Fedora Cloud Packages"
12e9116
        dnf install -y fedora-release-cloud
12e9116
    fi
12e9116
12e9116
    echo "VARIANT_ID=cloud" > $VARIANT_FILE
12e9116
12e9116
    # Ensure that the os-release file is pointing to the correct version
12e9116
    ln -sf ./os.release.d/os-release-cloud /usr/lib/os-release || :
12e9116
12e9116
    # Ensure that the issue file is pointing to the correct version
12e9116
    ln -sf ./os.release.d/issue-fedora /usr/lib/issue
12e9116
12e9116
    # Remove any presets from other Editions.
12e9116
    rm -f /usr/lib/systemd/system-preset/80-*.preset
12e9116
    ;;
12e9116
12e9116
  non-edition)
12e9116
    echo "VARIANT_ID=nonproduct" > $VARIANT_FILE
12e9116
12e9116
    # Ensure that the os-release file is pointing to the correct version
12e9116
    ln -sf ./os.release.d/os-release-fedora /usr/lib/os-release || :
12e9116
12e9116
    # Ensure that the issue file is pointing to the correct version
12e9116
    ln -sf ./os.release.d/issue-fedora /usr/lib/issue
12e9116
12e9116
    # Remove any presets from other Editions.
12e9116
    rm -f /usr/lib/systemd/system-preset/80-*.preset
12e9116
    ;;
12e9116
12e9116
  server)
12e9116
    if [ $do_installation -gt 0 ]; then
12e9116
        echo "Installing Fedora Server Packages"
12e9116
        dnf install -y fedora-release-server
12e9116
    fi
12e9116
12e9116
    echo "VARIANT_ID=server" > $VARIANT_FILE
12e9116
12e9116
    # Ensure that the os-release and issue files are pointing to the correct
12e9116
    # version
12e9116
    ln -sf ./os.release.d/os-release-server /usr/lib/os-release
12e9116
    ln -sf ./os.release.d/issue-server /usr/lib/issue
12e9116
12e9116
    # Remove any presets from other Editions. This should always be a no-op,
12e9116
    # but it's good to be explicit.
12e9116
    # We reserve 80-*.preset for Editions
12e9116
    rm -f /usr/lib/systemd/system-preset/80-*.preset
12e9116
12e9116
    # Symlink in the proper preset
12e9116
    ln -sf ../../os.release.d/presets/80-server.preset \
12e9116
           /usr/lib/systemd/system-preset/80-server.preset
12e9116
12e9116
    if [ $enable_presets -gt 0 ]; then
12e9116
        # Enable new units specified by presets
12e9116
        units=$(sed -n 's/^enable//p' \
12e9116
            < /usr/lib/systemd/system-preset/80-server.preset)
12e9116
        /usr/bin/systemctl preset $units >/dev/null 2>&1 || :
12e9116
12e9116
        # Disable new units specified by presets
12e9116
        units=$(sed -n 's/^disable//p' \
12e9116
            < /usr/lib/systemd/system-preset/80-server.preset)
12e9116
        /usr/bin/systemctl preset $units >/dev/null 2>&1 || :
12e9116
    fi
12e9116
    ;;
12e9116
12e9116
  workstation)
12e9116
    if [ $do_installation -gt 0 ]; then
12e9116
        echo "Installing Fedora Workstation Packages"
12e9116
        dnf install -y fedora-release-workstation
12e9116
    fi
12e9116
12e9116
    echo "VARIANT_ID=workstation" > $VARIANT_FILE
12e9116
    # Ensure that the os-release and issue files are pointing to the correct
12e9116
    # version
12e9116
    ln -sf ./os.release.d/os-release-workstation /usr/lib/os-release
12e9116
    ln -sf ./os.release.d/issue-fedora /usr/lib/issue
12e9116
12e9116
    # Remove any presets from other Editions. This should always be a no-op,
12e9116
    # but it's good to be explicit.
12e9116
    # We reserve 80-*.preset for Editions
12e9116
    rm -f /usr/lib/systemd/system-preset/80-*.preset
12e9116
12e9116
    # Symlink in the proper preset
12e9116
    ln -sf ../../os.release.d/presets/80-workstation.preset \
12e9116
           /usr/lib/systemd/system-preset/80-workstation.preset
12e9116
12e9116
    if [ $enable_presets -gt 0 ]; then
12e9116
        # Enable new units specified by presets
12e9116
        units=$(sed -n 's/^enable//p' \
12e9116
            < /usr/lib/systemd/system-preset/80-workstation.preset)
12e9116
        /usr/bin/systemctl preset $units >/dev/null 2>&1 || :
12e9116
12e9116
        # Disable new units specified by presets
12e9116
        units=$(sed -n 's/^disable//p' \
12e9116
            < /usr/lib/systemd/system-preset/80-workstation.preset)
12e9116
        /usr/bin/systemctl preset $units >/dev/null 2>&1 || :
12e9116
    fi
12e9116
    ;;
12e9116
12e9116
  *)
12e9116
    exit_usage
12e9116
    ;;
12e9116
esac
12e9116
12e9116
echo This system has been converted to $EDITION
12e9116
12e9116
exit 0
12e9116