chore: Update jupiter-hw-support

This commit is contained in:
Kyle Gospodnetich 2024-01-06 17:17:59 -08:00
parent 73479f50ea
commit 4be4e7a5ac
6 changed files with 231 additions and 9 deletions

View File

@ -0,0 +1,159 @@
diff --git a/usr/lib/hwsupport/steamos-automount.sh b/usr/lib/hwsupport/steamos-automount.sh
index f581966..cf264fd 100755
--- a/usr/lib/hwsupport/steamos-automount.sh
+++ b/usr/lib/hwsupport/steamos-automount.sh
@@ -67,19 +67,63 @@ do_mount()
ID_FS_LABEL=$(jq -r '.label | select(type == "string")' <<< "$dev_json")
ID_FS_TYPE=$(jq -r '.fstype | select(type == "string")' <<< "$dev_json")
- # Global mount options
- OPTS="noatime"
-
- # File system type specific mount options
- #if [[ ${ID_FS_TYPE} == "vfat" ]]; then
- # OPTS+=",users,gid=100,umask=000,shortname=mixed,utf8=1,flush"
- #fi
-
- # We need symlinks for Steam for now, so only automount ext4 as that'll Steam will format right now
- if [[ ${ID_FS_TYPE} != "ext4" ]]; then
+ #### SteamOS Btrfs Begin ####
+ if [[ -f /etc/default/steamos-btrfs ]]; then
+ source /etc/default/steamos-btrfs
+ fi
+ if [[ "${ID_FS_TYPE}" == "ext4" ]]; then
+ UDISKS2_ALLOW='errors=remount-ro'
+ OPTS="${STEAMOS_BTRFS_SDCARD_EXT4_MOUNT_OPTS:-rw,noatime,lazytime}"
+ FSTYPE="ext4"
+ elif [[ "${ID_FS_TYPE}" == "f2fs" ]]; then
+ UDISKS2_ALLOW='discard,nodiscard,compress_algorithm,compress_log_size,compress_extension,alloc_mode'
+ OPTS="${STEAMOS_BTRFS_SDCARD_F2FS_MOUNT_OPTS:-rw,noatime,lazytime,compress_algorithm=zstd,compress_chksum,atgc,gc_merge}"
+ FSTYPE="f2fs"
+ if [[ ! -f /etc/filesystems ]] || ! grep -q '\b'"${FSTYPE}"'\b' /etc/filesystems; then
+ echo "${FSTYPE}" >> /etc/filesystems
+ fi
+ elif [[ "${ID_FS_TYPE}" == "btrfs" ]]; then
+ UDISKS2_ALLOW='compress,compress-force,datacow,nodatacow,datasum,nodatasum,autodefrag,noautodefrag,degraded,device,discard,nodiscard,subvol,subvolid,space_cache'
+ OPTS="${STEAMOS_BTRFS_SDCARD_BTRFS_MOUNT_OPTS:-rw,noatime,lazytime,compress-force=zstd,space_cache=v2,autodefrag,ssd_spread}"
+ FSTYPE="btrfs"
+ # check for main subvol
+ mount_point_tmp="${MOUNT_LOCK%.*}.tmp"
+ mkdir -p "${mount_point_tmp}"
+ if /bin/mount -t btrfs -o ro "${DEVICE}" "${mount_point_tmp}"; then
+ if [[ -d "${mount_point_tmp}/${STEAMOS_BTRFS_SDCARD_BTRFS_MOUNT_SUBVOL:-@}" ]] && \
+ btrfs subvolume show "${mount_point_tmp}/${STEAMOS_BTRFS_SDCARD_BTRFS_MOUNT_SUBVOL:-@}" &>/dev/null; then
+ OPTS+=",subvol=${STEAMOS_BTRFS_SDCARD_BTRFS_MOUNT_SUBVOL:-@}"
+ fi
+ /bin/umount -l "${mount_point_tmp}"
+ rmdir "${mount_point_tmp}"
+ fi
+ elif [[ "${ID_FS_TYPE}" == "vfat" ]]; then
+ UDISKS2_ALLOW='uid=$UID,gid=$GID,flush,utf8,shortname,umask,dmask,fmask,codepage,iocharset,usefree,showexec'
+ OPTS="${STEAMOS_BTRFS_SDCARD_FAT_MOUNT_OPTS:-rw,noatime,lazytime,uid=1000,gid=1000,utf8=1}"
+ FSTYPE="vfat"
+ elif [[ "${ID_FS_TYPE}" == "exfat" ]]; then
+ UDISKS2_ALLOW='uid=$UID,gid=$GID,dmask,errors,fmask,iocharset,namecase,umask'
+ OPTS="${STEAMOS_BTRFS_SDCARD_EXFAT_MOUNT_OPTS:-rw,noatime,lazytime,uid=1000,gid=1000}"
+ FSTYPE="exfat"
+ elif [[ "${ID_FS_TYPE}" == "ntfs" ]]; then
+ UDISKS2_ALLOW='uid=$UID,gid=$GID,umask,dmask,fmask,locale,norecover,ignore_case,windows_names,compression,nocompression,big_writes,nls,nohidden,sys_immutable,sparse,showmeta,prealloc'
+ OPTS="${STEAMOS_BTRFS_SDCARD_NTFS_MOUNT_OPTS:-rw,noatime,lazytime,uid=1000,gid=1000,big_writes,umask=0022,ignore_case,windows_names}"
+ FSTYPE="lowntfs-3g"
+ if [[ ! -f /etc/filesystems ]] || ! grep -q '\b'"${FSTYPE}"'\b' /etc/filesystems; then
+ echo "${FSTYPE}" >> /etc/filesystems
+ fi
+ else
echo "Error mounting ${DEVICE}: wrong fstype: ${ID_FS_TYPE} - ${dev_json}"
exit 2
fi
+ udisks2_mount_options_conf='/etc/udisks2/mount_options.conf'
+ mkdir -p "$(dirname "${udisks2_mount_options_conf}")"
+ if [[ -f "${udisks2_mount_options_conf}" && ! -f "${udisks2_mount_options_conf}.orig" ]]; then
+ mv -f "${udisks2_mount_options_conf}"{,.orig}
+ fi
+ echo -e "[defaults]\n${FSTYPE}_allow=${UDISKS2_ALLOW},${OPTS}" > "${udisks2_mount_options_conf}"
+ trap 'rm -f "${udisks2_mount_options_conf}" ; [[ -f "${udisks2_mount_options_conf}.orig" ]] && mv -f "${udisks2_mount_options_conf}"{.orig,}' EXIT
+ #### SteamOS Btrfs End ####
# Prior to talking to udisks, we need all udev hooks (we were started by one) to finish, so we know it has knowledge
# of the drive. Our own rule starts us as a service with --no-block, so we can wait for rules to settle here
@@ -93,7 +137,13 @@ do_mount()
# ret=0 means no errors, 1 means that errors were corrected.
# In all other cases we try to mount the fs read-only and report an error.
ret=0
- fsck.ext4 -y "${DEVICE}" || ret=$?
+ #### SteamOS Btrfs Begin ####
+ if [[ "${ID_FS_TYPE}" == "ntfs" ]]; then
+ ntfsfix "${DEVICE}" || ret=$?
+ else
+ fsck."${ID_FS_TYPE}" -y "${DEVICE}" || ret=$?
+ fi
+ #### SteamOS Btrfs End ####
if (( ret != 0 && ret != 1 )); then
send_steam_url "system/devicemountresult" "${DEVBASE}/${FSCK_ERROR}"
echo "Error running fsck on ${DEVICE} (status = $ret)"
@@ -108,9 +158,10 @@ do_mount()
org.freedesktop.UDisks2 \
/org/freedesktop/UDisks2/block_devices/"${DEVBASE}" \
org.freedesktop.UDisks2.Filesystem \
- Mount 'a{sv}' 3 \
+ Mount 'a{sv}' 4 \
as-user s deck \
auth.no_user_interaction b true \
+ fstype s "$FSTYPE" \
options s "$OPTS") || ret=$?
if (( ret != 0 )); then
@@ -144,6 +195,30 @@ do_mount()
;;
esac
+ #### SteamOS Btrfs Begin ####
+ if [[ "${ID_FS_TYPE}" == "btrfs" ]]; then
+ # Workaround for for Steam compression bug
+ for d in "${mount_point}"/steamapps/{downloading,temp} ; do
+ if ! btrfs subvolume show "$d" &>/dev/null; then
+ mkdir -p "$d"
+ rm -rf "$d"
+ btrfs subvolume create "$d"
+ chattr +C "$d"
+ chown 1000:1000 "${d%/*}" "$d"
+ fi
+ done
+ elif [[ "${STEAMOS_BTRFS_SDCARD_COMPATDATA_BIND_MOUNT:-1}" == "1" ]] && \
+ [[ "${ID_FS_TYPE}" == "vfat" || "${ID_FS_TYPE}" == "exfat" || "${ID_FS_TYPE}" == "ntfs" ]]; then
+ # bind mount compatdata folder from internal disk
+ mkdir -p "${mount_point}"/steamapps/compatdata
+ chown 1000:1000 "${mount_point}"/steamapps{,/compatdata}
+ mkdir -p /home/deck/.local/share/Steam/steamapps/compatdata
+ chown 1000:1000 /home/deck/.local{,/share{,/Steam{,/steamapps{,/compatdata}}}}
+ mount --rbind /home/deck/.local/share/Steam/steamapps/compatdata "${mount_point}"/steamapps/compatdata
+ fi
+ chown 1000:1000 -- "${mount_point}"
+ #### SteamOS Btrfs End ####
+
echo "**** Mounted ${DEVICE} at ${mount_point} ****"
}
@@ -157,6 +232,22 @@ do_unmount()
# If we don't know the mount point then remove all broken symlinks
find /run/media -maxdepth 1 -xdev -xtype l -exec rm -- {} \;
fi
+ #### SteamOS Btrfs Begin ####
+ if [[ -L /run/media/mmcblk0p1 && "$(realpath /run/media/mmcblk0p1)" == "$(realpath "${mount_point}")" ]]; then
+ rm -f /run/media/mmcblk0p1
+ fi
+ if mountpoint -q "${mount_point}"/steamapps/compatdata; then
+ /bin/umount -l -R "${mount_point}"/steamapps/compatdata
+ fi
+ systemd-run --uid=1000 --pipe \
+ busctl call --allow-interactive-authorization=false --expect-reply=true --json=short \
+ org.freedesktop.UDisks2 \
+ /org/freedesktop/UDisks2/block_devices/"${DEVBASE}" \
+ org.freedesktop.UDisks2.Filesystem \
+ Unmount 'a{sv}' 2 \
+ auth.no_user_interaction b true \
+ force b true
+ #### SteamOS Btrfs End ####
}
case "${ACTION}" in

View File

@ -0,0 +1,37 @@
diff --git a/usr/lib/hwsupport/format-device.sh b/usr/lib/hwsupport/format-device.sh
index 3ff5a9e..566eea2 100755
--- a/usr/lib/hwsupport/format-device.sh
+++ b/usr/lib/hwsupport/format-device.sh
@@ -138,7 +138,31 @@ echo "stage=formatting"
sync
parted --script "$STORAGE_DEVICE" mklabel gpt mkpart primary 0% 100%
sync
-mkfs.ext4 -m 0 -O casefold -E "$EXTENDED_OPTIONS" "${EXTRA_MKFS_ARGS[@]}" -F "$STORAGE_PARTITION"
+#### SteamOS Btrfs Begin ####
+if [[ -f /etc/default/steamos-btrfs ]]; then
+ source /etc/default/steamos-btrfs
+fi
+if [[ "$STEAMOS_BTRFS_SDCARD_FORMAT_FS" == "btrfs" ]]; then
+ mkfs.btrfs ${STEAMOS_BTRFS_SDCARD_BTRFS_FORMAT_OPTS:--f -K} "$STORAGE_PARTITION"
+ MOUNT_DIR="/var/run/sdcard-mount"
+ mkdir -p "$MOUNT_DIR"
+ mount -o "${STEAMOS_BTRFS_SDCARD_BTRFS_MOUNT_OPTS:-rw,noatime,lazytime,compress-force=zstd,space_cache=v2,autodefrag,ssd_spread}" "$STORAGE_PARTITION" "$MOUNT_DIR"
+ btrfs subvolume create "$MOUNT_DIR/${STEAMOS_BTRFS_SDCARD_BTRFS_MOUNT_SUBVOL:-@}"
+ btrfs subvolume set-default "$MOUNT_DIR/${STEAMOS_BTRFS_SDCARD_BTRFS_MOUNT_SUBVOL:-@}"
+ umount -l "$MOUNT_DIR"
+ rmdir "$MOUNT_DIR"
+elif [[ "$STEAMOS_BTRFS_SDCARD_FORMAT_FS" == "f2fs" ]]; then
+ mkfs.f2fs ${STEAMOS_BTRFS_SDCARD_F2FS_FORMAT_OPTS:--O encrypt,extra_attr,inode_checksum,sb_checksum,casefold,compression -C utf8 -f -t 0} "$STORAGE_PARTITION"
+elif [[ "$STEAMOS_BTRFS_SDCARD_FORMAT_FS" == "fat" ]]; then
+ mkfs.vfat ${STEAMOS_BTRFS_SDCARD_FAT_FORMAT_OPTS:--F 32 -I} "$STORAGE_PARTITION"
+elif [[ "$STEAMOS_BTRFS_SDCARD_FORMAT_FS" == "exfat" ]]; then
+ mkfs.exfat ${STEAMOS_BTRFS_SDCARD_EXFAT_FORMAT_OPTS:---pack-bitmap} "$STORAGE_PARTITION"
+elif [[ "$STEAMOS_BTRFS_SDCARD_FORMAT_FS" == "ntfs" ]]; then
+ mkfs.ntfs ${STEAMOS_BTRFS_SDCARD_NTFS_FORMAT_OPTS:--f -F} "$STORAGE_PARTITION"
+else
+ mkfs.ext4 -E "$EXTENDED_OPTIONS" ${STEAMOS_BTRFS_SDCARD_EXT4_FORMAT_OPTS:--m 0 -O casefold -F} "$STORAGE_PARTITION"
+fi
+#### SteamOS Btrfs End ####
sync
udevadm settle

View File

@ -0,0 +1,25 @@
diff --git a/usr/lib/hwsupport/steamos-automount.sh b/usr/lib/hwsupport/steamos-automount.sh
index bf58da0..390fa6d 100755
--- a/usr/lib/hwsupport/steamos-automount.sh
+++ b/usr/lib/hwsupport/steamos-automount.sh
@@ -2,6 +2,9 @@
set -euo pipefail
+IMAGE_INFO="/usr/share/ublue-os/image-info.json"
+BASE_IMAGE_NAME=$(jq -r '."base-image-name"' < $IMAGE_INFO)
+
# Originally from https://serverfault.com/a/767079
# This script is called from our systemd unit file to mount or unmount
@@ -198,6 +201,10 @@ do_mount()
;;
esac
+ if [[ $BASE_IMAGE_NAME =~ "silverblue" ]]; then
+ touch "${mount_point}/.trackerignore"
+ fi
+
#### SteamOS Btrfs Begin ####
if [[ "${ID_FS_TYPE}" == "btrfs" ]]; then
# Workaround for for Steam compression bug

View File

@ -1,5 +1,5 @@
%define packagename jupiter-hw-support
%define packagever jupiter-3.5-20231211.1
%define packagever jupiter-3.5-20240103.1
%global _default_patch_fuzz 2
Name: %{packagename}-btrfs
@ -12,13 +12,14 @@ URL: https://github.com/ublue-os/bazzite
Source: https://gitlab.com/evlaV/%{packagename}/-/archive/%{packagever}/%{packagename}-%{packagever}.tar.gz
Patch0: fedora.patch
Patch1: selinux.patch
Patch2: https://gitlab.com/popsulfr/steamos-btrfs/-/raw/main/files/usr/lib/hwsupport/steamos-automount.sh.patch.old.20231126125001.20231122.1
Patch3: https://gitlab.com/popsulfr/steamos-btrfs/-/raw/main/files/usr/lib/hwsupport/format-device.sh.patch.old.20230922091429.20230915.100
Patch2: btrfs-automount.patch
Patch3: btrfs-format.patch
Patch4: user.patch
Patch5: bazzite-btrfs.patch
Patch6: systemd-run.patch
Patch7: priv-write.patch
Patch8: biosupdate.patch
Patch9: gnome.patch
Requires: python3
Requires: python3-evdev

View File

@ -1,5 +1,5 @@
diff --git a/usr/bin/steamos-polkit-helpers/steamos-priv-write b/usr/bin/steamos-polkit-helpers/steamos-priv-write
index 296996e..ae0ae3e 100755
index e307823..45946ed 100755
--- a/usr/bin/steamos-polkit-helpers/steamos-priv-write
+++ b/usr/bin/steamos-polkit-helpers/steamos-priv-write
@@ -2,6 +2,9 @@
@ -12,7 +12,7 @@ index 296996e..ae0ae3e 100755
if [[ $EUID -ne 0 ]];
then
exec pkexec --disable-internal-agent "$0" "$@"
@@ -12,21 +15,21 @@
@@ -12,21 +15,21 @@ WRITE_VALUE="$2"
function CommitWrite()
{
@ -37,7 +37,7 @@ index 296996e..ae0ae3e 100755
exit 1
}
@@ -40,15 +43,35 @@
@@ -40,15 +43,35 @@ if [[ "$WRITE_PATH" == /dev/drm_dp_aux0 ]]; then
fi
if [[ "$WRITE_PATH" == /sys/class/drm/card*/device/power_dpm_force_performance_level ]]; then

View File

@ -1,8 +1,8 @@
diff --git a/usr/lib/hwsupport/steamos-automount.sh b/usr/lib/hwsupport/steamos-automount.sh
index 023d95e..d69fd03 100755
index cf264fd..6dd3a2f 100755
--- a/usr/lib/hwsupport/steamos-automount.sh
+++ b/usr/lib/hwsupport/steamos-automount.sh
@@ -162,13 +162,14 @@
@@ -153,13 +153,14 @@ do_mount()
fi
# Ask udisks to auto-mount. This needs a version of udisks that supports the 'as-user' option.
@ -18,7 +18,7 @@ index 023d95e..d69fd03 100755
auth.no_user_interaction b true \
fstype s "$FSTYPE" \
options s "$OPTS") || ret=$?
@@ -221,9 +222,9 @@
@@ -212,9 +213,9 @@ do_mount()
# bind mount compatdata folder from internal disk
mkdir -p "${mount_point}"/steamapps/compatdata
chown 1000:1000 "${mount_point}"/steamapps{,/compatdata}