File steam-bootstrap.sh.in of Package steam-bootstrap

#!/bin/sh

BASE_URL="https://steamdeck-packages.steamos.cloud/archlinux-mirror/jupiter-main/os/x86_64"

PKG_NAME="__NAME__"
PKG_VERSION="__VERSION__"
PKG_REL="__RELEASE__"
ARCHIVE_NAME="steam-jupiter-stable-${PKG_VERSION}-2-x86_64.pkg.tar.zst"
PKG_URL="${BASE_URL}/${ARCHIVE_NAME}"

INNER_NAME="bootstraplinux_ubuntu12_32.tar.xz"
INNER_PATH="usr/lib/steam/${INNER_NAME}"

CHECKSUM_FILE="/usr/share/${PKG_NAME}/steam-bootstrap.pkg.sha256"
TARGET_NAME="bootstrap_steam.tar.gz"
TARGET_DIR="/usr/share/gamescope-session-plus"
BOOTSTRAP_FILE="${TARGET_DIR}/${TARGET_NAME}"
POST_MESSAGE="/usr/share/${PKG_NAME}/update-messages/${PKG_NAME}-${PKG_VERSION}-${PKG_REL}-1"

STATE_DIR="/usr/share/${PKG_NAME}/state"
STATE_FILE="${STATE_DIR}/installed-${PKG_NAME}.sha256"

log_msg() {
    if [ -n "$POST_MESSAGE" ]; then
        mkdir -p "$(dirname "$POST_MESSAGE")" 2>/dev/null || true
        echo "$*" | tee "$POST_MESSAGE"
    else
        echo "$*"
    fi
}

exit_code=1
for arg in "$@"; do
    if [ "$arg" = "--no-fail" ]; then
        exit_code=0
        break
    fi
done

expected_sha256=""
if [ -f "$CHECKSUM_FILE" ]; then
    expected_sha256=$(awk -v n="$ARCHIVE_NAME" '$2==n {print $1; exit}' "$CHECKSUM_FILE")
fi

if [ -n "$expected_sha256" ] && [ -f "$BOOTSTRAP_FILE" ] && [ -f "$STATE_FILE" ]; then
    installed_sha256=$(cat "$STATE_FILE" 2>/dev/null)
    if [ "$installed_sha256" = "$expected_sha256" ]; then
        log_msg "*** Steam bootstrap archive already up-to-date at $BOOTSTRAP_FILE. ***"
        exit 0
    fi
fi

tmpname=$(basename "$0")
tmpdir=$(mktemp -d "/tmp/$tmpname.XXXXXX")
trap "rm -rf \"$tmpdir\"" EXIT

if [ ! -d "$tmpdir" ] || [ -z "$tmpdir" ]; then
    echo "$0: Can't create temp dir, exiting..."
    exit $exit_code
fi

cd "$tmpdir" || exit $exit_code

echo "Steam bootstrap package"
echo "  Fetching   ... "

if ! curl -L -s -o "$ARCHIVE_NAME" "$PKG_URL"; then
    echo "failed!"
    if [ "$exit_code" -ne 0 ]; then
        exit $exit_code
    fi
    log_msg "*** No Steam bootstrap archive installed. ***"
    exit 0
fi

if [ -f "$CHECKSUM_FILE" ]; then
    if ! grep "$ARCHIVE_NAME" "$CHECKSUM_FILE" | sha256sum --check --quiet --status >/dev/null 2>&1; then
        echo "checksum mismatch for $ARCHIVE_NAME ... deleted!"
        rm -f "$ARCHIVE_NAME"
        if [ "$exit_code" -ne 0 ]; then
            exit $exit_code
        fi
        log_msg "*** No Steam bootstrap archive installed. ***"
        exit 0
    fi
fi

echo "done"
echo "  Extracting ... "

# Extract just the needed file from the tar.zst package
if ! tar --zstd -xf "$ARCHIVE_NAME" "$INNER_PATH" >/dev/null 2>&1; then
    echo "failed!"
    if [ "$exit_code" -ne 0 ]; then
        exit $exit_code
    fi
    log_msg "*** No Steam bootstrap archive installed. ***"
    exit 0
fi

if [ ! -f "$INNER_PATH" ]; then
    echo "failed! (missing $INNER_PATH in package)"
    if [ "$exit_code" -ne 0 ]; then
        exit $exit_code
    fi
    log_msg "*** No Steam bootstrap archive installed. ***"
    exit 0
fi

echo "done"

mkdir -p "$TARGET_DIR"

if ! install -m 0644 "$INNER_PATH" "$BOOTSTRAP_FILE"; then
    echo "Failed to install bootstrap archive into $BOOTSTRAP_FILE"
    if [ "$exit_code" -ne 0 ]; then
        exit $exit_code
    fi
    log_msg "*** No Steam bootstrap archive installed. ***"
    exit 0
fi

mkdir -p "$STATE_DIR"
if [ -n "$expected_sha256" ]; then
    echo "$expected_sha256" > "$STATE_FILE"
fi

log_msg "*** Steam bootstrap archive installed at $BOOTSTRAP_FILE. ***"

exit 0
openSUSE Build Service is sponsored by