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