From 32f77d5995eee09d2a29d6c8f7fba5f00495db62 Mon Sep 17 00:00:00 2001 From: wheaney <42350981+wheaney@users.noreply.github.com> Date: Tue, 30 Jan 2024 10:17:49 -0800 Subject: [PATCH] Add verification script and manifest --- bin/package_vulkan | 26 +++++++++++++++--- modules/xrealAirLinuxDriver | 2 +- vulkan/bin/breezy_vulkan_uninstall | 3 +++ vulkan/bin/setup | 12 +++++++++ vulkan/bin/verify_installation | 42 +++++++++++++++++++++++++++++ vulkan/custom_banner.png | Bin 0 -> 42696 bytes vulkan/custom_banner_config.yml | 3 +++ vulkan/modules/sombrero | 2 +- 8 files changed, 85 insertions(+), 5 deletions(-) create mode 100755 vulkan/bin/verify_installation create mode 100644 vulkan/custom_banner.png create mode 100644 vulkan/custom_banner_config.yml diff --git a/bin/package_vulkan b/bin/package_vulkan index 5236546..59cb32f 100755 --- a/bin/package_vulkan +++ b/bin/package_vulkan @@ -46,22 +46,42 @@ cp $VULKAN_MODULES/sombrero/*.png $PACKAGE_DIR wget -P $PACKAGE_DIR https://raw.githubusercontent.com/crosire/reshade-shaders/384465d0287999caa6190b5ebea506200b4f4a0a/Shaders/ReShade.fxh wget -P $PACKAGE_DIR https://raw.githubusercontent.com/crosire/reshade-shaders/384465d0287999caa6190b5ebea506200b4f4a0a/Shaders/ReShadeUI.fxh +# if a custom_banner image exists, copy it over the sombrero one +if [ -e "$VULKAN_DIR/custom_banner.png" ]; then + cp $VULKAN_DIR/custom_banner.png $PACKAGE_DIR +fi + # copy vulkan setup scripts and configs mkdir -p $PACKAGE_DIR/bin -copy_and_inject_ua "$XREAL_DRIVER_DIR/bin/ua.sh" "$PACKAGE_DIR/bin" "$VULKAN_DIR/bin/setup" "$VULKAN_DIR/bin/breezy_vulkan_uninstall" +copy_and_inject_ua "$XREAL_DRIVER_DIR/bin/ua.sh" "$PACKAGE_DIR/bin" "$VULKAN_DIR/bin/setup" "$VULKAN_DIR/bin/verify_installation" "$VULKAN_DIR/bin/breezy_vulkan_uninstall" cp -r $VULKAN_DIR/config $PACKAGE_DIR # build xreal driver XREAL_BINARY=$XREAL_DRIVER_DIR/build/xrealAirLinuxDriver.tar.gz +pushd $XREAL_DRIVER_DIR + if [ ! -e "$XREAL_BINARY" ] || [ "$1" != "--skip-module-builds" ]; then - pushd $XREAL_DRIVER_DIR + # if a file exists at custom_banner_config.yml, copy it to the xrealAirLinuxDriver directory + if [ -e "$VULKAN_DIR/custom_banner_config.yml" ]; then + cp $VULKAN_DIR/custom_banner_config.yml $XREAL_DRIVER_DIR + fi + bin/package - popd fi +XREAL_MANIFEST_LINE=$(sha256sum build/driver_air_glasses/manifest) +popd + # copy xreal binary and setup script cp $XREAL_BINARY $PACKAGE_DIR cp $XREAL_DRIVER_DIR/bin/xreal_driver_setup $PACKAGE_DIR/bin +# create manifest file for verifying installed file checksums against the originally packaged versions +# include any file that doesn't get modified during setup (e.g. vkBasalt.json files) +pushd $PACKAGE_DIR +echo $XREAL_MANIFEST_LINE > manifest +sha256sum bin/breezy_vulkan_uninstall vkBasalt.64/libvkbasalt.so vkBasalt.32/libvkbasalt.so *.fx* *.png >> manifest +popd + # bundle everything up tar -zcvf $VULKAN_BUILD/breezyVulkan.tar.gz --directory $VULKAN_BUILD breezy_vulkan \ No newline at end of file diff --git a/modules/xrealAirLinuxDriver b/modules/xrealAirLinuxDriver index 82d38ce..5d074de 160000 --- a/modules/xrealAirLinuxDriver +++ b/modules/xrealAirLinuxDriver @@ -1 +1 @@ -Subproject commit 82d38ce285e68df8671d7516480391b589a7f78f +Subproject commit 5d074de7456d1fce2e5aa49293dc04bc34e3195b diff --git a/vulkan/bin/breezy_vulkan_uninstall b/vulkan/bin/breezy_vulkan_uninstall index f089056..d88eaaa 100755 --- a/vulkan/bin/breezy_vulkan_uninstall +++ b/vulkan/bin/breezy_vulkan_uninstall @@ -34,6 +34,9 @@ rm $USER_HOME/.local/share/vulkan/implicit_layer.d/vkBasalt.x86.json rm -rf $USER_HOME/.config/vkBasalt rm -rf $USER_HOME/.config/reshade +[ "$for_install" -eq 0 ] && echo "Removing scripts at $USER_HOME/.local/bin/breezy_vulkan" +rm -rf $USER_HOME/.local/bin/breezy_vulkan + [ "$for_install" -eq 0 ] && echo "SKIPPING xrealAirLinuxDriver uninstall to keep mouse/joystick driver functionality." [ "$for_install" -eq 0 ] && echo "To manually uninstall xrealAirLinuxDriver, do: \"sudo ~/bin/xreal_driver_uninstall\"" diff --git a/vulkan/bin/setup b/vulkan/bin/setup index 4f9ad41..a55476a 100755 --- a/vulkan/bin/setup +++ b/vulkan/bin/setup @@ -60,6 +60,17 @@ cp *.fx* $USER_HOME/.config/reshade/Shaders cp *.png $USER_HOME/.config/reshade/Textures chown -R $USER:$USER $USER_HOME/.config/reshade +# escaping sed replace: https://stackoverflow.com/questions/407523/escape-a-string-for-a-sed-replace-pattern +ESCAPED_USER_HOME=$(printf '%s\n' "$USER_HOME" | sed -e 's/[\/&]/\\&/g') + +echo "Copying the verification script and manifest to ${USER_HOME}/.local/bin/breezy_vulkan" +sed -i -e "s/{user_home}/$ESCAPED_USER_HOME/g" bin/verify_installation +if [ ! -d "$USER_HOME/.local/bin/breezy_vulkan" ]; then + mkdir -p $USER_HOME/.local/bin/breezy_vulkan +fi +cp -p bin/verify_installation $USER_HOME/.local/bin/breezy_vulkan +cp manifest $USER_HOME/.local/bin/breezy_vulkan + # set up the XREAL driver using the local binary echo "Installing xrealAirLinuxDriver" echo "BEGIN - xreal_driver_setup" @@ -69,4 +80,5 @@ then else bin/xreal_driver_setup -v $1 $(pwd)/xrealAirLinuxDriver.tar.gz fi + echo "END - xreal_driver_setup" \ No newline at end of file diff --git a/vulkan/bin/verify_installation b/vulkan/bin/verify_installation new file mode 100755 index 0000000..9cfcb85 --- /dev/null +++ b/vulkan/bin/verify_installation @@ -0,0 +1,42 @@ +#!/usr/bin/env bash + +set -e + +# create a string to string mapping, file name to expected file location +declare -A file_paths +file_paths=( + ["bin/breezy_vulkan_uninstall"]="{user_home}/bin/breezy_vulkan_uninstall" + ["vkBasalt.64/libvkbasalt.so"]="{user_home}/.local/lib/libvkbasalt.so" + ["vkBasalt.32/libvkbasalt.so"]="{user_home}/.local/lib32/libvkbasalt.so" + ["IMUAdjust.fx"]="{user_home}/.config/reshade/Shaders/IMUAdjust.fx" + ["ReShade.fxh"]="{user_home}/.config/reshade/Shaders/ReShade.fxh" + ["ReShadeUI.fxh"]="{user_home}/.config/reshade/Shaders/ReShadeUI.fxh" + ["Sideview.fx"]="{user_home}/.config/reshade/Shaders/Sideview.fx" + ["calibrating.png"]="{user_home}/.config/reshade/Textures/calibrating.png" + ["custom_banner.png"]="{user_home}/.config/reshade/Textures/custom_banner.png" + ["build/driver_air_glasses/manifest"]="{user_home}/.local/bin/xr_driver/manifest" +) + +# verify the file hashes in ./manifest +while IFS= read -r line +do + # split the line into hash and filename + manifest_hash=$(echo $line | awk '{print $1}') + file=$(echo $line | awk '{print $2}') + + actual_file_path=${file_paths[$file]} + + # compute the SHA256 hash of the actual file + actual_hash=$(sha256sum $actual_file_path | awk '{print $1}') + + # compare the hashes + if ! [ "$manifest_hash" = "$actual_hash" ]; then + echo "Verification failed" >&2 + exit 1 + fi +done < "{user_home}/.local/bin/breezy_vulkan/manifest" + +# if our checks succeeded, run the xr_driver verify script +{user_home}/.local/bin/xr_driver/verify_installation > /dev/null + +echo "Verification succeeded" \ No newline at end of file diff --git a/vulkan/custom_banner.png b/vulkan/custom_banner.png new file mode 100644 index 0000000000000000000000000000000000000000..6372a13002889de9d28dabd24d8c978f71eb3d7c GIT binary patch literal 42696 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 literal 0 HcmV?d00001 diff --git a/vulkan/custom_banner_config.yml b/vulkan/custom_banner_config.yml new file mode 100644 index 0000000..62c3f64 --- /dev/null +++ b/vulkan/custom_banner_config.yml @@ -0,0 +1,3 @@ +start_date: 1707523200 +end_date: 1709942400 +target_device_vendor_id: 0x3318 \ No newline at end of file diff --git a/vulkan/modules/sombrero b/vulkan/modules/sombrero index acaeb56..d077766 160000 --- a/vulkan/modules/sombrero +++ b/vulkan/modules/sombrero @@ -1 +1 @@ -Subproject commit acaeb5666ea6861f68d3011be535dd65f63a9894 +Subproject commit d077766d2a594871418cc56fed93cbfd5d20513e