mirror of
https://github.com/the-sane/lug-helper.git
synced 2024-12-28 16:44:23 +00:00
Download a default wine runner if system wine does not meet reqs
This commit is contained in:
parent
86f3b3b1f6
commit
ca39caf92b
117
lug-helper.sh
117
lug-helper.sh
@ -210,6 +210,11 @@ runner_sources=(
|
|||||||
"RawFox" "https://api.github.com/repos/starcitizen-lug/raw-wine/releases"
|
"RawFox" "https://api.github.com/repos/starcitizen-lug/raw-wine/releases"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Set the default runner to install when the system wine doesn't meet requirements
|
||||||
|
# default_runner_source corresponds to an even number index in runner_sources above
|
||||||
|
default_runner="wine-9.20-amd64.tar.xz"
|
||||||
|
default_runner_source=0
|
||||||
|
|
||||||
######## DXVK ##############################################################
|
######## DXVK ##############################################################
|
||||||
|
|
||||||
# Lutris native dxvk directory
|
# Lutris native dxvk directory
|
||||||
@ -977,10 +982,18 @@ lutris_detect() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Check the system Wine version
|
# Check the system Wine version
|
||||||
|
# Tells the preflight check whether or not wine is installed
|
||||||
|
# Additionally sets system_wine_ok if system wine meets the minimum version requirement
|
||||||
wine_check() {
|
wine_check() {
|
||||||
|
# Initialize variable
|
||||||
|
system_wine_ok="false"
|
||||||
|
|
||||||
|
# Is wine installed?
|
||||||
if [ ! -x "$(command -v wine)" ]; then
|
if [ ! -x "$(command -v wine)" ]; then
|
||||||
preflight_fail+=("Wine does not appear to be installed.\nPlease refer to our Quick Start Guide:\n$lug_wiki")
|
preflight_fail+=("Wine does not appear to be installed.\nPlease refer to our Quick Start Guide:\n$lug_wiki")
|
||||||
return 1
|
return 1
|
||||||
|
else
|
||||||
|
preflight_pass+=("Wine is installed on your system.")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get the current wine version
|
# Get the current wine version
|
||||||
@ -988,12 +1001,17 @@ wine_check() {
|
|||||||
|
|
||||||
# Check it against the required version
|
# Check it against the required version
|
||||||
if [ -z "$wine_current" ]; then
|
if [ -z "$wine_current" ]; then
|
||||||
preflight_fail+=("Unable to detect Wine version info.\nVersion $wine_required or newer is required.")
|
system_wine_ok="false"
|
||||||
elif [ "$wine_required" != "$wine_current" ] &&
|
elif [ "$wine_required" != "$wine_current" ] &&
|
||||||
[ "$wine_current" = "$(printf "%s\n%s" "$wine_current" "$wine_required" | sort -V | head -n1)" ]; then
|
[ "$wine_current" = "$(printf "%s\n%s" "$wine_current" "$wine_required" | sort -V | head -n1)" ]; then
|
||||||
preflight_fail+=("Wine is out of date.\nVersion $wine_required or newer is required.")
|
system_wine_ok="false"
|
||||||
else
|
else
|
||||||
preflight_pass+=("Wine is installed and sufficiently up to date.")
|
system_wine_ok="true"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check for wow64 wines
|
||||||
|
if [ ! -x "$(command -v wine-preloader)" ] || [ -L "$(command -v wine64-preloader)" ]; then
|
||||||
|
system_wine_ok="false"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1410,8 +1428,7 @@ dxvk_manage_lutris() {
|
|||||||
# - download_type (string)
|
# - download_type (string)
|
||||||
# - download_dirs (array)
|
# - download_dirs (array)
|
||||||
download_select_install() {
|
download_select_install() {
|
||||||
# This function expects an element number for the sources array
|
# This function expects an element number for the sources array to be passed in as an argument
|
||||||
# to be passed in as an argument
|
|
||||||
if [ -z "$1" ]; then
|
if [ -z "$1" ]; then
|
||||||
debug_print exit "Script error: The download_select_install function expects a numerical argument. Aborting."
|
debug_print exit "Script error: The download_select_install function expects a numerical argument. Aborting."
|
||||||
fi
|
fi
|
||||||
@ -1841,6 +1858,8 @@ download_install() {
|
|||||||
debug_print continue "Cleaning up $tmp_dir/$download_filename..."
|
debug_print continue "Cleaning up $tmp_dir/$download_filename..."
|
||||||
rm --interactive=never "${tmp_dir:?}/$download_filename"
|
rm --interactive=never "${tmp_dir:?}/$download_filename"
|
||||||
rm -r "${tmp_dir:?}/$download_basename"
|
rm -r "${tmp_dir:?}/$download_basename"
|
||||||
|
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# List installed items for deletion. Called by download_manage()
|
# List installed items for deletion. Called by download_manage()
|
||||||
@ -2621,7 +2640,7 @@ install_game_wine() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Call the preflight check
|
# Call the preflight check and confirm the user is ready to proceed
|
||||||
preflight_check "wine"
|
preflight_check "wine"
|
||||||
if [ "$?" -eq 1 ]; then
|
if [ "$?" -eq 1 ]; then
|
||||||
# There were errors
|
# There were errors
|
||||||
@ -2630,8 +2649,11 @@ install_game_wine() {
|
|||||||
# No errors
|
# No errors
|
||||||
install_question="Before proceeding, please refer to our Quick Start Guide:\n$lug_wiki\n\nAll Preflight Checks have passed\nAre you ready to continue?"
|
install_question="Before proceeding, please refer to our Quick Start Guide:\n$lug_wiki\n\nAll Preflight Checks have passed\nAre you ready to continue?"
|
||||||
fi
|
fi
|
||||||
|
if ! message question "$install_question"; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
if message question "$install_question"; then
|
# Get the install path from the user
|
||||||
if message question "Would you like to use the default install path?\n\n$HOME/Games/star-citizen"; then
|
if message question "Would you like to use the default install path?\n\n$HOME/Games/star-citizen"; then
|
||||||
# Set the default install path
|
# Set the default install path
|
||||||
install_dir="$HOME/Games/star-citizen"
|
install_dir="$HOME/Games/star-citizen"
|
||||||
@ -2695,9 +2717,35 @@ install_game_wine() {
|
|||||||
# Create the game path
|
# Create the game path
|
||||||
mkdir -p "$install_dir"
|
mkdir -p "$install_dir"
|
||||||
|
|
||||||
|
# If we can't use the system wine, we'll need to have the user select a custom wine runner to use
|
||||||
|
wine_bin="wine"
|
||||||
|
if [ "$system_wine_ok" = "true" ]; then
|
||||||
|
debug_print continue "Your system Wine does not meet the minimum requirements for Star Citizen!"
|
||||||
|
debug_print continue "A custom wine runner will be automatically downloaded and used."
|
||||||
|
|
||||||
|
download_dirs=("wine" "$install_dir/runners")
|
||||||
|
|
||||||
|
# Install the default wine runner into the prefix
|
||||||
|
download_wine
|
||||||
|
# Make sure the wine download worked
|
||||||
|
if [ "$?" -eq 1 ]; then
|
||||||
|
message error "Something went wrong while installing ${default_runner}!\nGame installation cannot proceed."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
wine_bin="$install_dir/runners/$downloaded_item_name/bin/wine"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Download winetricks
|
||||||
|
download_winetricks
|
||||||
|
# Abort if the winetricks download failed
|
||||||
|
if [ "$?" -eq 1 ]; then
|
||||||
|
message error "Unable to install Star Citizen without winetricks. Aborting."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Download RSI installer to tmp
|
# Download RSI installer to tmp
|
||||||
download_file "$rsi_installer_url" "$rsi_installer" "installer"
|
download_file "$rsi_installer_url" "$rsi_installer" "installer"
|
||||||
|
|
||||||
# Sanity check
|
# Sanity check
|
||||||
if [ ! -f "$tmp_dir/$rsi_installer" ]; then
|
if [ ! -f "$tmp_dir/$rsi_installer" ]; then
|
||||||
# Something went wrong with the download and the file doesn't exist
|
# Something went wrong with the download and the file doesn't exist
|
||||||
@ -2705,18 +2753,8 @@ install_game_wine() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Download winetricks
|
|
||||||
download_winetricks
|
|
||||||
|
|
||||||
# Abort if the winetricks download failed
|
|
||||||
if [ "$?" -eq 1 ]; then
|
|
||||||
message error "Unable to install Star Citizen without winetricks. Aborting."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Create a temporary log file
|
# Create a temporary log file
|
||||||
tmp_install_log="$(mktemp --suffix=".log" -t "lughelper-install-XXX")"
|
tmp_install_log="$(mktemp --suffix=".log" -t "lughelper-install-XXX")"
|
||||||
|
|
||||||
debug_print continue "Installation log file created at $tmp_install_log"
|
debug_print continue "Installation log file created at $tmp_install_log"
|
||||||
|
|
||||||
# Create the new prefix and install powershell
|
# Create the new prefix and install powershell
|
||||||
@ -2734,11 +2772,11 @@ install_game_wine() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Add registry key that prevents wine from creating unnecessary file type associations
|
# Add registry key that prevents wine from creating unnecessary file type associations
|
||||||
wine reg add "HKEY_CURRENT_USER\Software\Wine\FileOpenAssociations" /v Enable /d N /f >>"$tmp_install_log" 2>&1
|
"$wine_bin" reg add "HKEY_CURRENT_USER\Software\Wine\FileOpenAssociations" /v Enable /d N /f >>"$tmp_install_log" 2>&1
|
||||||
|
|
||||||
# Run the installer
|
# Run the installer
|
||||||
debug_print continue "Installing the launcher. Please wait; this will take a moment..."
|
debug_print continue "Installing the launcher. Please wait; this will take a moment..."
|
||||||
wine "$tmp_dir/$rsi_installer" /S >>"$tmp_install_log" 2>&1
|
"$wine_bin" "$tmp_dir/$rsi_installer" /S >>"$tmp_install_log" 2>&1
|
||||||
|
|
||||||
if [ "$?" -eq 1 ]; then
|
if [ "$?" -eq 1 ]; then
|
||||||
# User cancelled or there was an error
|
# User cancelled or there was an error
|
||||||
@ -2776,6 +2814,12 @@ install_game_wine() {
|
|||||||
# Update WINEPREFIX in game launch script
|
# Update WINEPREFIX in game launch script
|
||||||
sed -i "s|^export WINEPREFIX.*|export WINEPREFIX=\"$install_dir\"|" "$installed_launch_script"
|
sed -i "s|^export WINEPREFIX.*|export WINEPREFIX=\"$install_dir\"|" "$installed_launch_script"
|
||||||
|
|
||||||
|
# Update Wine binary in game launch script
|
||||||
|
if [ "$wine_bin" != "wine" ]; then
|
||||||
|
post_download_sed_string="wine_exec="
|
||||||
|
sed -i "s|^${post_download_sed_string}.*|${post_download_sed_string}\"${wine_bin}\"|" "$installed_launch_script"
|
||||||
|
fi
|
||||||
|
|
||||||
# Modify the .desktop files installed by wine to exec the game launch script
|
# Modify the .desktop files installed by wine to exec the game launch script
|
||||||
debug_print continue "Updating .desktop files installed by wine..."
|
debug_print continue "Updating .desktop files installed by wine..."
|
||||||
|
|
||||||
@ -2830,6 +2874,39 @@ install_game_wine() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
message info "Installation has finished. The install log was written to $tmp_install_log\n\nTo start the RSI Launcher, run the following launch script in a terminal\nEdit the environment variables in the script as needed:\n $installed_launch_script\n\nYou may also start the RSI Launcher using the following .desktop files:\n $home_desktop_file\n $localshare_desktop_file"
|
message info "Installation has finished. The install log was written to $tmp_install_log\n\nTo start the RSI Launcher, run the following launch script in a terminal\nEdit the environment variables in the script as needed:\n $installed_launch_script\n\nYou may also start the RSI Launcher using the following .desktop files:\n $home_desktop_file\n $localshare_desktop_file"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Download a default wine runner for use by the non-lutris installer
|
||||||
|
# Expects download_dirs to be set before calling
|
||||||
|
download_wine() {
|
||||||
|
if [ "${#download_dirs[@]}" -eq 0 ]; then
|
||||||
|
debug_print exit "Script error: The array 'download_dirs' was not set before calling the download_wine function. Aborting."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set up variables needed for the download functions, quick and dirty
|
||||||
|
# For more details, see their usage in the download_select_install and download_install functions
|
||||||
|
declare -n download_sources=runner_sources
|
||||||
|
download_type="runner"
|
||||||
|
download_versions=("$default_runner")
|
||||||
|
contributor_name="${download_sources[$default_runner_source]}"
|
||||||
|
contributor_url="${download_sources[$default_runner_source+1]}"
|
||||||
|
case "$contributor_url" in
|
||||||
|
https://api.github.com/*)
|
||||||
|
download_url_type="github"
|
||||||
|
;;
|
||||||
|
https://gitlab.com/api/v4/projects/*)
|
||||||
|
download_url_type="gitlab"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
debug_print exit "Script error: Unknown api/url format in ${download_type}_sources array. Aborting."
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Call the download_install function with the above options to install the default wine runner
|
||||||
|
download_install 0
|
||||||
|
|
||||||
|
if [ "$?" -eq 1 ]; then
|
||||||
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user