sonic2kk / steamtinkerlaunch

Linux wrapper tool for use with the Steam client for custom launch options and 3rd party programs
GNU General Public License v3.0
2.16k stars 73 forks source link

Steam Deck dependency innoextract failed to download when launching as a compatability tool #1149

Closed lastrogue closed 3 months ago

lastrogue commented 3 months ago

System Information

Issue Description

I had been having issues installing Mod Organizer 2 via SteamTinkerLaunch stable version, it kept referring to a missing dependency when trying to install. I was able to open STL, but unable to install MO2.

I shutdown Steam, Removed STL stable from ProtonUp-Qt.

I then followed the steps in the wiki to manually install via cloning the git repo.

These are the commands I ran after cloning the directory and changing to the directory:

./steamtinkerlaunch ./steamtinkerlaunch compat add

I notice when I re-run ./steamtinkerlaunch, it continuously tries to install innoextract, it does not say that it failed.

Logs for this are uploaded as _gitrepo_update_installsteamtinkerlaunch.log

However when I run Skyrim Special Edition with Steam Tinker set as the compatability tool, it launches, has a few pop ups that flash by and I catch that it failed to do something with innoextract. In looking at the steamtinkerlaunch.log file, it says the following:

Fri Aug 9 15:13:45 MDT 2024 WARN - fetchAndExtractDependency - Failed to download dependency 'innoextract-1.9-8-x86_64.pkg.tar.zst', will attempt to continue with installation in case dependency archives already exist at '/home/deck/stl/deps'

Full logs will be uploaded as _compatability_tool_launchsteamtinkerlaunch.log

I am able to browse to the URL in the logs for innoextract and past the file in the location that it is attempt to output the curl command to.

Let me know if there is anything else I can provide.

Logs

gitrepo_update_install_steamtinkerlaunch.log compatability_tool_launch_steamtinkerlaunch.log

sonic2kk commented 3 months ago

If I understand correctly, you can ./steamtinkerlaunch compat add from the cloned repo. That doesn't sound right, you should run the script installed to ~/stl/prefix/steamtinkerlaunch. But I am not sure that this is what is causing the issue. Also, it doesn't sound like you removed ~/stl before installing from master / did not run steamtinkerlaunch cleardeckdeps after updating, so you may have out-of-date dependencies.

If you go to ~/stl/deps/usr/bin, is innoextract there and non-zero in bytes? Additionally, can you run ./innoextract --version and get a valid version back?

If the innoextract file is zero bytes, the file is just invalid. If you get a libboost error, this is because the innoextract version you are using is not compatible with SteamOS. Maybe you moved to Preview recently and got SteamOS 3.6? If so, the innoextract version is not compatible because of the updated Arch snapshot.


For background: This may be similar to #1135 where, from memory, the innoextract binary there is a valid file but incompatible with SteamOS 3.6 Preview. innoextract needs to be bumped manually each time a new SteamOS stable comes out, because one of its C++ dependency libraries (libboost) gets updated with each Arch snapshot update in each SteamOS 3.X release (i.e. should be compatible going from 3.5.X to 3.5.Y, but incompatible going to 3.5.Y to 3.6).

There is new-ish dependency validation that tries to validate that the innoextract file downloaded can actually be used on SteamOS, but if the binary is incompatible (for example if running ./innoextract --version returns a libboost error) then SteamTinkerLaunch assumes the binary is invalid -- which is partially correct, although the check for this is designed with checking file validity in mind.

There is a Steam Deck dependency overhaul in #1111 that should resolve this. When the SteamTinkerLaunch version changes we will re-download all dependencies. However if you are using SteamOS 3.6 Preview then there is no version bump as the dependency version is not bumped until the updated Arch snapshot is in stable.


I think this is an issue with the innoextract version rather than a failure to download the dependency, although the error message is cryptic and I only catch this because of the linked similar issue where this came up. The wider issue of Steam Deck dependencies as mentioned will be resolved as part of the linked PR, so if some of the above resolves the issue, then the underlying problem should be fixed with #1111. If you are using SteamOS Preview, please keep in mind that the updated Arch snapshot can introduce incompatibilities - for the record, I use SteamOS Preview (but will never again use SteamTinkerLaunch on my Steam Deck :sweat_smile:)

Also, as a cautionary tale from experience, I don't encourage modding games or using modding tools (including ModOrganizer 2, whether it's installed via STL or otherwise) on SteamOS.

lastrogue commented 3 months ago

Thank you for the detailed write-up.

The binary does exist. it is non-zero in bytes, but I can't get a version back by running ./innoextract --version.

I instead get an error around it being corrupted or similar.

cat /etc/*-release returns version 3.6.9. I must have updated to it at some point. Possibly the Steam Family beta I went to that did it.

Either way, I think I'm landing in the camp of not going to be able to run it due to my SteamOS version.

So if I understand everything correctly, I will not be able to run steamtinker on the 3.6 beta until the Arch snapshot is stable and the dependency version is bumped to match, which doesn't have a timeline because of multiple variables lining up. Am I correct on that?

Thanks again, for the help in tracking this down.

sonic2kk commented 3 months ago

The binary does exist. it is non-zero in bytes, but I can't get a version back by running ./innoextract --version. I instead get an error around it being corrupted or similar.

Ah, thanks. Then yes this is either a bad binary or an out of date binary.

So if I understand everything correctly, I will not be able to run steamtinker on the 3.6 beta until the Arch snapshot is stable and the dependency version is bumped to match, which doesn't have a timeline because of multiple variables lining up. Am I correct on that?

You can still use SteamTinkerLaunch, it will work no problem on SteamOS 3.6. By default, ModOrganizer 2 installation will fail because of the outdated innoextract version, but you can use either the steamos-3.6 branch or you can manually update the innoextract binary by downloading the 1.9-9 binary and replacing it in the ~/stl/deps/usr/bin folder.

Once SteamOS 3.6 is out in Stable I will merge #1136. I would prefer to merge it ASAP but very few people run even the SteamOS Beta (Steam Client Stable and SteamOS Stable are simply not in a usable state for me most of the time, so I stick to Stable).


It seems like this has the same root cause as #1135, so I will close this issue. One of the above solutions should fix things for you.

Happy gaming!

sonic2kk commented 3 months ago

Actually, the steamos-3.6 branch is not renamed onto master. I'll fix that now.

sonic2kk commented 3 months ago

Rebased, it's up-to-date with master now so you shouldn't be missing any features by using that branch. You can switch to it and run steamtinkerlaunch cleardeckdeps to remove the oudated dependencies, and download fresh ones. That branch points to innoextract 1.9-9, so it'll pull that. You should be able to switch back to master afterwards if you want.

Alternatively again you can just download the innoextract 1.9-9 binary.and place it into the ~/stl/deps/usr/bin folder as mentioned, then it'll return a version, SteamTinkerLaunch will take the dependency as valid, and should work.

The trouble of dependencies being incompatible with SteamOS versions can't fully be resolved, but automatically updating dependencies to match what new versions of SteamTinkerLaunch require (i.e. once that branch is merged, currently the innoextract version won't get automatically updated by SteamTinkerLaunch) won't be resolved until #1111 is merged.