forked from CastroFidel/winehelper
Compare commits
33 Commits
dop
...
backup_pfx
Author | SHA1 | Date | |
---|---|---|---|
19c7636f8d | |||
8f6300c6b8 | |||
ed8d28c81f | |||
bd482ea757 | |||
8cc9cb17bb | |||
b29e586137 | |||
ace00616ca | |||
5b6a05a09e | |||
3be6b8c4a1 | |||
b684afe1ad | |||
bda5a31205 | |||
e55bc209c1 | |||
33f12d5287 | |||
bb0ec33202 | |||
a4998d2f26 | |||
ca9e1d7f75 | |||
b4d36b15e8 | |||
717e6c0e7d | |||
3ea9462025 | |||
8774a8b34d | |||
052a07a42b | |||
112933c7b1 | |||
de34f84e04 | |||
4310fe1e8c | |||
cd619bb9cc | |||
b319f4146c | |||
70b577dce5 | |||
997612c98d | |||
8892f29a33 | |||
5c0a62ff02 | |||
20f2f6d112 | |||
0d4faa3224 | |||
388293e929 |
24
CHANGELOG
24
CHANGELOG
@ -1,5 +1,29 @@
|
||||
История изменений:
|
||||
|
||||
0.3.9:
|
||||
* обновлен скрипт установки scadoffice
|
||||
* добавлена автоустановка:
|
||||
winehelper easymnemo - "Easymnemo"
|
||||
* winetricks поставляется с пакетом WineHelper, а не скачивается из GitHub
|
||||
* добавлена возможность удаления префикса
|
||||
|
||||
0.3.8:
|
||||
* добавлена возможность ассоциации и запуска файлов из WINE в нативном Linux приложении
|
||||
* добавлен выбор префикса, если переменная WINEPREFIX не объявлена
|
||||
* добавлено сохранение последней конфигурации использования префикса
|
||||
* добавлено сохранение скписка создаваемых ярлыков для приложений
|
||||
|
||||
0.3.7:
|
||||
* обновлены функции создания desktop файлов (ярлыков) и категория WineHelper в меню
|
||||
* обновлен скрипт установки scadoffice
|
||||
* добавлена автоустановка:
|
||||
winehelper install zulugis - ZuluGIS 2021 Инженерные расчёты
|
||||
* добавлена функция полного удаления WineHelper
|
||||
* обновлена проверка на наличие noexec для /home (ALT bug: 54095)
|
||||
|
||||
0.3.6:
|
||||
* добавлена категория WineHelper для desktop файлов (ярлыков) в меню
|
||||
|
||||
0.3.5:
|
||||
* обновлены скрипты установок daobit
|
||||
* добавлен вывод списка программ с возможностью установки из существующего дистрибутива
|
||||
|
@ -20,3 +20,6 @@ https://github.com/HansKristian-Work/vkd3d-proton
|
||||
|
||||
WINETRICKS:
|
||||
https://github.com/Winetricks/winetricks
|
||||
|
||||
WINE-CPCSP_PROXY:
|
||||
https://github.com/Etersoft/wine-cpcsp_proxy
|
||||
|
27
autoinstall/easymnemo
Normal file
27
autoinstall/easymnemo
Normal file
@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env bash
|
||||
# info_ru: Удобная программа для создания двухмерных схем и чертежей. Основной акцент сделан на проектировании систем тепло-, водо- и газоснабжения, водоочистки, автоматизированных систем управления технологическими процессами (АСУТП), а также планов эвакуации при пожаре и авариях.
|
||||
########################################################################
|
||||
export WH_WINE_USE="wine_x_tkg_10-0_i586"
|
||||
export WINEPREFIX="easymnemo"
|
||||
export PROG_NAME="Easymnemo"
|
||||
export PROG_ICON="easymnemo"
|
||||
export BASE_PFX="none"
|
||||
export WH_WINDOWS_VER="10"
|
||||
export WINEARCH="win32"
|
||||
export INSTALL_DLL="dotnet35 mdac28 jet40"
|
||||
|
||||
AUTOINSTALL_EXE="${WH_TMP_DIR}/Easymnemo.zip"
|
||||
AUTOINSTALL_UNPACK="${WH_TMP_DIR}/Easymnemo"
|
||||
AUTOINSTALL_SETUP="${WH_TMP_DIR}/Easymnemo/EasyMnemo.msi"
|
||||
|
||||
prepair_wine
|
||||
if try_download "https://s.siteapi.org/c6e311629e736a8.ru/docs/j3pdl4vxv5wkg0sg0ksks40k8ss0sc" "${AUTOINSTALL_EXE}" ; then
|
||||
7z x -y "${AUTOINSTALL_EXE}" -o"${AUTOINSTALL_UNPACK}"
|
||||
try_remove_file "$AUTOINSTALL_EXE"
|
||||
|
||||
wine_run_install "${AUTOINSTALL_SETUP}" /q
|
||||
try_remove_dir "$AUTOINSTALL_UNPACK"
|
||||
|
||||
WIN_FILE_EXEC="$DRIVE_C/Program Files/Easymnemo/Easymnemo.exe"
|
||||
create_desktop "$PROG_NAME" "$WIN_FILE_EXEC" "$PROG_ICON"
|
||||
fi
|
@ -3,27 +3,66 @@
|
||||
########################################################################
|
||||
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||
export WINEPREFIX="scadoffice"
|
||||
export BASE_PFX="none"
|
||||
export BASE_PFX="scadaoffice_pfx_x64_v03"
|
||||
export WH_WINDOWS_VER="10"
|
||||
export WINEARCH="win64"
|
||||
export INSTALL_DLL="dotnet48 gdiplus vcrun6sp6 vcrun2005 vcrun2019 d3dx11_42 d3dx11_43 d3dx9 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 d3dcompiler_47 richtx32 riched30 riched20 msxml6"
|
||||
|
||||
ADDONS_PACK="${WH_TMP_DIR}/scadoffice_addons_v01.tar.xz"
|
||||
ADDONS_PATH="${WH_TMP_DIR}/scadoffice_addons"
|
||||
OFFICE_EXE="${ADDONS_PATH}/OpenOffice.exe"
|
||||
OFFICE_PACK="${ADDONS_PATH}/OpenOffice"
|
||||
AUTOINSTALL_SETUP="${ADDONS_PATH}/OpenOffice/setup.exe"
|
||||
ADDONS_PATH_REG="${ADDONS_PATH}/REG"
|
||||
ADDONS_PATH_MDAC="${ADDONS_PATH}/mdac64"
|
||||
ADDONS_PATH_OPENSSH="${ADDONS_PATH}/OpenSSH"
|
||||
AUTOINSTALL_EXE="${WH_TMP_DIR}/SCADOffice_11.exe"
|
||||
DRIVE_C_SCADOFFICE="$DRIVE_C/SCAD Soft/SCADOffice/64"
|
||||
export INSTALL_DLL="dotnet20 dotnet472 dotnet48 gdiplus vcrun6sp6 vcrun2005 vcrun2019 d3dx11_42 d3dx11_43 d3dx9 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 d3dcompiler_47 richtx32 riched30 riched20 msxml6"
|
||||
export WH_XDG_OPEN="rtf"
|
||||
AUTOINSTALL_EXE="${WH_TMP_DIR}/SCADOffice_installer.exe"
|
||||
SCADOFFICE_ADDONS_URL="https://cloud.linux-gaming.ru/portproton/scadoffice_addons_v02.tar.xz"
|
||||
|
||||
prepair_wine
|
||||
|
||||
DRIVE_C_SCADOFFICE="$DRIVE_C/SCAD Soft/SCADOffice/64"
|
||||
|
||||
if [[ -n $2 ]] ; then
|
||||
if [[ ! -d "$DRIVE_C_SCADOFFICE" ]] ; then
|
||||
fatal "Перезапустите скрипт без дополнительных аргументов для установки SCAD Office:
|
||||
winehelper install scadoffice"
|
||||
elif [[ ! -f "$2" ]] ; then
|
||||
fatal "Перезапустите скрипт с правильным путем до файла лицензии SCAD Office:
|
||||
winehelper install scadoffice \"/путь/до/файла.exe\""
|
||||
else
|
||||
print_info "Устанавливаем файл лицензии $2"
|
||||
wine_run "$2"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ $BASE_PFX == "none" ]] ; then
|
||||
print_info "Установка дополнительных компонентов..."
|
||||
|
||||
ADDONS_PACK="${WH_TMP_DIR}/$(basename "$SCADOFFICE_ADDONS_URL")"
|
||||
ADDONS_PATH="${WH_TMP_DIR}/scadoffice_addons"
|
||||
|
||||
ADDONS_PATH_REG="${ADDONS_PATH}/REG"
|
||||
ADDONS_PATH_MDAC="${ADDONS_PATH}/mdac64"
|
||||
ADDONS_PATH_OPENSSH="${ADDONS_PATH}/OpenSSH"
|
||||
|
||||
if try_download "$SCADOFFICE_ADDONS_URL" "${ADDONS_PACK}" ; then
|
||||
create_new_dir "${ADDONS_PATH}"
|
||||
unpack "${ADDONS_PACK}" "${ADDONS_PATH}"
|
||||
wine_run regedit "${ADDONS_PATH_REG}"/*.reg
|
||||
|
||||
# Установка ODBC
|
||||
rm -fR "$DRIVE_C/Program Files (x86)/Common Files/System"
|
||||
cp -r "${ADDONS_PATH_MDAC}/System" "$DRIVE_C/Program Files (x86)/Common Files/System"
|
||||
cp -r "${ADDONS_PATH_MDAC}"/*.* "$DRIVE_C/windows/system32/"
|
||||
wine_run regedit "${ADDONS_PATH_MDAC}"/*.reg
|
||||
|
||||
# Установка SSH
|
||||
cp -r "${ADDONS_PATH_OPENSSH}" "$DRIVE_C/windows/system32/"
|
||||
|
||||
try_remove_dir "$ADDONS_PATH"
|
||||
try_remove_file "$ADDONS_PACK"
|
||||
fi
|
||||
fi
|
||||
|
||||
if try_download "https://scadhelp.ru/files/10/download" "${AUTOINSTALL_EXE}" ; then
|
||||
create_new_dir "$DRIVE_C/SDATA"
|
||||
create_new_dir "$DRIVE_C/SWORK"
|
||||
wine_run_install "${AUTOINSTALL_EXE}" /auto /hide
|
||||
try_remove_file "$AUTOINSTALL_EXE"
|
||||
|
||||
# Определение всех программ, значков и исполняемых файлов
|
||||
declare -a PROG_NAME=("Арбат" "Вест" "Глобальные настройки" "Декор" "Дискретная арматура" "Запрос" "Камин" "КоКон" "Комета" "Конструктор сечений" "Консул" "Конфигуратор лицензий" "Кристалл" "Кросс" "Куст" "Магнум" "Монолит" "Откос" "Пастернак" "Преобразование ед. измерений" "Cортамент металлопроката" "Расчет по формуле" "Редактор акселерограмм" "Редактор динамичности" "Редактор материалов" "Тонус" "Эквивалентное сечение" "SCAD++")
|
||||
@ -32,37 +71,8 @@ if try_download "https://scadhelp.ru/files/10/download" "${AUTOINSTALL_EXE}" ; t
|
||||
|
||||
declare -a WIN_FILE_EXEC=("${DRIVE_C_SCADOFFICE}/Arbat.exe" "${DRIVE_C_SCADOFFICE}/West.exe" "${DRIVE_C_SCADOFFICE}/GlobalSettings.exe" "${DRIVE_C_SCADOFFICE}/Decor.exe" "${DRIVE_C_SCADOFFICE}/ReBar.exe" "${DRIVE_C_SCADOFFICE}/UnderGround.exe" "${DRIVE_C_SCADOFFICE}/ComeIn.exe" "${DRIVE_C_SCADOFFICE}/CoCon.exe" "${DRIVE_C_SCADOFFICE}/Comet2.exe" "${DRIVE_C_SCADOFFICE}/Section.exe" "${DRIVE_C_SCADOFFICE}/Consul.exe" "${DRIVE_C_SCADOFFICE}/ConfigProtection.exe" "${DRIVE_C_SCADOFFICE}/Kristall.exe" "${DRIVE_C_SCADOFFICE}/Cross.exe" "${DRIVE_C_SCADOFFICE}/Kust2.exe" "${DRIVE_C_SCADOFFICE}/Magnum.exe" "${DRIVE_C_SCADOFFICE}/Monolit.exe" "${DRIVE_C_SCADOFFICE}/Slope.exe" "${DRIVE_C_SCADOFFICE}/Pasternak.exe" "${DRIVE_C_SCADOFFICE}/UCalc.exe" "${DRIVE_C_SCADOFFICE}/ViewProf.exe" "${DRIVE_C_SCADOFFICE}/SCalc.exe" "${DRIVE_C_SCADOFFICE}/AccelEdit.exe" "${DRIVE_C_SCADOFFICE}/BetaEdit.exe" "${DRIVE_C_SCADOFFICE}/MaterialsEdit.exe" "${DRIVE_C_SCADOFFICE}/Tonus.exe" "${DRIVE_C_SCADOFFICE}/Sezam.exe" "${DRIVE_C_SCADOFFICE}/SCADX.exe")
|
||||
|
||||
# Цикл для создания десктопных файлов
|
||||
# Цикл создания десктоп файлов для scad office
|
||||
for i in "${!PROG_NAME[@]}"; do
|
||||
create_desktop "${PROG_NAME[i]}" "${WIN_FILE_EXEC[i]}" "${PROG_ICON[i]}"
|
||||
create_desktop "${PROG_NAME[i]}" "${WIN_FILE_EXEC[i]}" "${PROG_ICON[i]}" "nocopy"
|
||||
done
|
||||
fi
|
||||
|
||||
print_info "Установка дополнительных компонентов..."
|
||||
|
||||
if try_download "https://cloud.linux-gaming.ru/portproton/scadoffice_addons_v01.tar.xz" "${ADDONS_PACK}" ; then
|
||||
create_new_dir "${ADDONS_PATH}"
|
||||
unpack "${ADDONS_PACK}" "${ADDONS_PATH}"
|
||||
7z x -y "${OFFICE_EXE}" -o"${OFFICE_PACK}"
|
||||
wine_run_install "${AUTOINSTALL_SETUP}" /qn
|
||||
|
||||
wine_run regedit "${ADDONS_PATH_REG}"/*.reg
|
||||
|
||||
# Установка ODBC
|
||||
rm -fR "$DRIVE_C/Program Files (x86)/Common Files/System"
|
||||
cp -r "${ADDONS_PATH_MDAC}/System" "$DRIVE_C/Program Files (x86)/Common Files/System"
|
||||
cp -r "${ADDONS_PATH_MDAC}"/*.* "$DRIVE_C/windows/system32/"
|
||||
wine_run regedit "${ADDONS_PATH_MDAC}"/*.reg
|
||||
|
||||
# Установка SSH
|
||||
cp -r "${ADDONS_PATH_OPENSSH}" "$DRIVE_C/windows/system32/"
|
||||
|
||||
export PROG_NAME1="OpenOffice"
|
||||
export PROG_ICON1="openoffice"
|
||||
|
||||
WIN_FILE_EXEC1="$DRIVE_C/Program Files (x86)/OpenOffice 4/program/soffice.exe"
|
||||
create_desktop "$PROG_NAME1" "$WIN_FILE_EXEC1" "$PROG_ICON1"
|
||||
try_remove_dir "$ADDONS_PATH"
|
||||
try_remove_file "$ADDONS_PACK"
|
||||
try_remove_file "$AUTOINSTALL_EXE"
|
||||
fi
|
||||
|
@ -1,102 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# info_ru: Приложения для T-FLEX CAD 17 (T-FLEX Анализ 17, T-FLEX Динамика 17, T-FLEX Зубчатые передачи 17, T-FLEX ЧПУ 17, T-FLEX Раскрой 17, T-FLEX Электротехника 17, T-FLEX VR 17, T-FLEX Печатные платы 17)
|
||||
########################################################################
|
||||
export WH_WINDOWS_VER="10"
|
||||
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||
export BASE_PFX="tflex17_pfx_x64_v01"
|
||||
export WINEARCH="win64"
|
||||
export WINEPREFIX="tflex17"
|
||||
|
||||
BASE_URL="https://www.tflex.ru/downloads"
|
||||
FILES=(
|
||||
"T-FLEX Analysis 17.zip"
|
||||
"T-FLEX Dynamics 17.zip"
|
||||
"T-FLEX Gears 17.zip"
|
||||
"T-FLEX CAM 17.zip"
|
||||
"T-FLEX Nesting 17.zip"
|
||||
"T-FLEX Electrical 17.zip"
|
||||
"T-FLEX VR 17.zip"
|
||||
"T-FLEX Circuits 17.zip"
|
||||
)
|
||||
UNPACK_APP="${WH_TMP_DIR}/unpack_applications"
|
||||
|
||||
prepair_wine
|
||||
# Функция для распаковки файла
|
||||
unpack_file() {
|
||||
local archive="$1"
|
||||
7z x -y "$archive" -o"${UNPACK_APP}"
|
||||
}
|
||||
|
||||
# Функция для установки .msi файлов
|
||||
install_msi_files() {
|
||||
for msi_file in "${UNPACK_APP}"/*/*.msi; do
|
||||
if [[ -f "$msi_file" ]]; then
|
||||
echo "Установка $msi_file ..."
|
||||
wine_run_install "$msi_file" /q
|
||||
else
|
||||
echo "Нет .msi файлов для установки в ${UNPACK_APP}/*."
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Функция для кодирования URL
|
||||
encode_url() {
|
||||
local file_name="$1"
|
||||
echo "${file_name// /%20}" # Заменяем пробелы на %20
|
||||
}
|
||||
|
||||
# Вывод списка доступных файлов
|
||||
list_files() {
|
||||
echo "Доступные файлы для скачивания:"
|
||||
for i in "${!FILES[@]}"; do
|
||||
echo "$((i + 1)). ${FILES[$i]}"
|
||||
done
|
||||
}
|
||||
|
||||
# Скачивание одиночного файла
|
||||
download_single() {
|
||||
local index="$1"
|
||||
local file_name="${FILES[$((index - 1))]}"
|
||||
local file_url="$(encode_url "$file_name")"
|
||||
local output="${WH_TMP_DIR}/${file_name// /_}"
|
||||
|
||||
if try_download "$BASE_URL/$file_url" "$output"; then
|
||||
unpack_file "$output"
|
||||
fi
|
||||
}
|
||||
|
||||
# Скачивание всех файлов
|
||||
download_all() {
|
||||
for i in "${!FILES[@]}"; do
|
||||
download_single "$((i + 1))"
|
||||
done
|
||||
}
|
||||
|
||||
# Основное меню
|
||||
list_files
|
||||
echo "Выберите опцию:"
|
||||
echo "1. Скачать один файл и установить его."
|
||||
echo "2. Скачать все файлы и установить их."
|
||||
read -rp "Введите номер опции: " option
|
||||
|
||||
case "$option" in
|
||||
1)
|
||||
read -rp "Введите номер файла для скачивания (например, 1 для 'T-FLEX Analysis 17.zip'): " file_number
|
||||
if [[ "$file_number" =~ ^[0-9]+$ ]] && (( file_number >= 1 && file_number <= ${#FILES[@]} )); then
|
||||
download_single "$file_number"
|
||||
else
|
||||
echo "Неверный номер файла."
|
||||
fi
|
||||
;;
|
||||
2)
|
||||
download_all
|
||||
;;
|
||||
*)
|
||||
echo "Неверный выбор. Попробуйте еще раз."
|
||||
;;
|
||||
esac
|
||||
|
||||
install_msi_files
|
||||
|
||||
try_remove_file ${WH_TMP_DIR}/*.zip
|
||||
try_remove_dir "${UNPACK_APP}"
|
@ -1,101 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# info_ru: Обучающие материалы, примеры, бесплатные библиотеки для T-FLEX CAD 17 (Учебное пособие 17, Стандартные элементы 17, Элементы уплотнительной техники 17, Станочные приспособления 17, Детали штампов листовой штамповки 17, Детали пресс-форм 17, Примеры 17)
|
||||
########################################################################
|
||||
export WH_WINDOWS_VER="10"
|
||||
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||
export BASE_PFX="tflex17_pfx_x64_v01"
|
||||
export WINEARCH="win64"
|
||||
export WINEPREFIX="tflex17"
|
||||
|
||||
BASE_URL="https://www.tflex.ru/downloads"
|
||||
FILES=(
|
||||
"T-FLEX Tutorial 17.zip"
|
||||
"Standard parts 17.zip"
|
||||
"Elements of sealing technology 17.zip"
|
||||
"Machine tools 17.zip"
|
||||
"Standard parts for sheet metal dies 17.zip"
|
||||
"Standard Mold Parts 17.zip"
|
||||
"Examples 17.zip"
|
||||
)
|
||||
UNPACK_RESOURCES="${WH_TMP_DIR}/unpack_resources"
|
||||
|
||||
prepair_wine
|
||||
# Функция для распаковки файла
|
||||
unpack_file() {
|
||||
local archive="$1"
|
||||
7z x -y "$archive" -o"${UNPACK_RESOURCES}"
|
||||
}
|
||||
|
||||
# Функция для установки .msi файлов
|
||||
install_msi_files() {
|
||||
for msi_file in "${UNPACK_RESOURCES}"/*/*.msi; do
|
||||
if [[ -f "$msi_file" ]]; then
|
||||
echo "Установка $msi_file ..."
|
||||
wine_run_install "$msi_file" /q
|
||||
else
|
||||
echo "Нет .msi файлов для установки в ${UNPACK_RESOURCES}/unpack_dop/*."
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Функция для кодирования URL
|
||||
encode_url() {
|
||||
local file_name="$1"
|
||||
echo "${file_name// /%20}" # Заменяем пробелы на %20
|
||||
}
|
||||
|
||||
# Вывод списка доступных файлов
|
||||
list_files() {
|
||||
echo "Доступные файлы для скачивания:"
|
||||
for i in "${!FILES[@]}"; do
|
||||
echo "$((i + 1)). ${FILES[$i]}"
|
||||
done
|
||||
}
|
||||
|
||||
# Скачивание одиночного файла
|
||||
download_single() {
|
||||
local index="$1"
|
||||
local file_name="${FILES[$((index - 1))]}"
|
||||
local file_url="$(encode_url "$file_name")"
|
||||
local output="${WH_TMP_DIR}/${file_name// /_}"
|
||||
|
||||
if try_download "$BASE_URL/$file_url" "$output"; then
|
||||
unpack_file "$output"
|
||||
fi
|
||||
}
|
||||
|
||||
# Скачивание всех файлов
|
||||
download_all() {
|
||||
for i in "${!FILES[@]}"; do
|
||||
download_single "$((i + 1))"
|
||||
done
|
||||
}
|
||||
|
||||
# Основное меню
|
||||
list_files
|
||||
echo "Выберите опцию:"
|
||||
echo "1. Скачать один файл и установить его."
|
||||
echo "2. Скачать все файлы и установить их."
|
||||
read -rp "Введите номер опции: " option
|
||||
|
||||
case "$option" in
|
||||
1)
|
||||
read -rp "Введите номер файла для скачивания (например, 1 для 'T-FLEX Tutorial 17.zip'): " file_number
|
||||
if [[ "$file_number" =~ ^[0-9]+$ ]] && (( file_number >= 1 && file_number <= ${#FILES[@]} )); then
|
||||
download_single "$file_number"
|
||||
else
|
||||
echo "Неверный номер файла."
|
||||
fi
|
||||
;;
|
||||
2)
|
||||
download_all
|
||||
;;
|
||||
*)
|
||||
echo "Неверный выбор. Попробуйте еще раз."
|
||||
;;
|
||||
esac
|
||||
|
||||
install_msi_files
|
||||
|
||||
try_remove_file ${WH_TMP_DIR}/*.zip
|
||||
try_remove_dir "${UNPACK_RESOURCES}"
|
21
autoinstall/zulugis
Normal file
21
autoinstall/zulugis
Normal file
@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env bash
|
||||
# info_ru: ZuluGIS 2021 Инженерные расчёты (Полный) 64-бит. Включает ZuluGIS, пакеты расчетов ZuluThermo, ZuluHydro, ZuluDrain, ZuluGaz, ZuluSteam, библиотеки ZuluXTools и ZuluNetTools. Дополнительно в состав пакета входит Microsoft SQL Server Express LocalDB 2012.
|
||||
########################################################################
|
||||
export WH_WINE_USE="wine_x_tkg_10-0_amd64"
|
||||
export PROG_NAME="ZuluGIS 2021"
|
||||
export WINEPREFIX="zulugis"
|
||||
export PROG_ICON="zulugis"
|
||||
export WH_WINDOWS_VER="10"
|
||||
export BASE_PFX="none"
|
||||
export WINEARCH="win64"
|
||||
# export INSTALL_DLL="gdiplus"
|
||||
export AUTOINSTALL_EXE="${WH_TMP_DIR}/Zulu2021_x64_ru.exe"
|
||||
|
||||
prepair_wine
|
||||
if try_download "https://www.politerm.com/download/zulu/Zulu2021_x64_ru.exe" "${AUTOINSTALL_EXE}" ; then
|
||||
wine_run_install "${AUTOINSTALL_EXE}" /quiet /norestart
|
||||
try_remove_file "${AUTOINSTALL_EXE}"
|
||||
|
||||
WIN_FILE_EXEC="$DRIVE_C/Program Files/ZuluGIS/Zulu.exe"
|
||||
create_desktop "$PROG_NAME" "$WIN_FILE_EXEC" "$PROG_ICON"
|
||||
fi
|
@ -22,7 +22,7 @@ windows приложения. Подробнее по ссылке: https://www.
|
||||
apt-get install {i586-,}{glibc-core,libstdc++6,glibc-pthread,glibc-nss,\
|
||||
libOSMesa,libnss-mdns,libunixODBC2,ocl-icd,libfreetype,libfontconfig1,\
|
||||
libgnutls30,libGL,libEGL,xorg-dri-swrast,xorg-dri-intel,xorg-dri-radeon,\
|
||||
libvulkan1,libcups} winetricks ca-certificates cups-pdf || fatal "Не удалось установить зависимости."
|
||||
libvulkan1,libcups} || fatal "Не удалось установить зависимости."
|
||||
|
||||
apt-get install {i586-,}wine
|
||||
|
||||
|
BIN
image/easymnemo.png
Normal file
BIN
image/easymnemo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.1 KiB |
BIN
image/zulugis.png
Normal file
BIN
image/zulugis.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
@ -13,6 +13,9 @@ fb7fdfde96de10a1b3b051bdf2727b6a7c1768b878483726454dd6726e9e0193 wine-9.0.14-al
|
||||
|
||||
df1a940d2e072a884524f66a16e0f0ef74048bc6a6642b96eb257528a522109f vkd3d-proton-1.1-2602.tar.xz
|
||||
|
||||
##### CPCSP_PROXY #####
|
||||
3153088ff28d6af415c3504a421e5382554dbb305f38d5a87dd84df90d680421 wine-cpcsp_proxy-0.6.1-alt1.tar.xz
|
||||
|
||||
##### PREFIX #####
|
||||
|
||||
0e86cd9958d1bd1bfac99e23165a091a4ea2fa3e693c551f69aabeed5f681fea defpfx_x86_v01.tar.xz
|
||||
@ -63,3 +66,9 @@ dfb44ce5e5af7dba1686932c63d6b05e5dd6919a21c78130a7d1d0271b93958e audiorecstatio
|
||||
00516ef51079d68ad0f9621c8270e0f86318539b63ebf1085d0faba36896e4ac daobit_pfx_x86_v01.tar.xz
|
||||
# create with wine_x_tkg_10-0_i586 (universal user: xuser)
|
||||
# winetricks arial dotnet7 dotnetdesktop7 renderer=gdi
|
||||
|
||||
25e277c7afa4a9afc5f013cb05f872c12a7f381c4f0503a423dcacccca9a14c6 scadaoffice_pfx_x64_v03.tar.xz
|
||||
# create with wine_x_tkg_10-0_i586 (universal user: xuser)
|
||||
# winetricks dotnet48 gdiplus vcrun6sp6 vcrun2005 vcrun2019 d3dx11_42 d3dx11_43 d3dx9 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 d3dcompiler_47 richtx32 riched30 riched20 msxml6 dotnet20
|
||||
# + addons with ODBC, SSH, *.reg
|
||||
0f4ef434df07bc338ae308af44330590eaa1d9c94b64850514e55b960642d0eb scadoffice_addons_v02.tar.xz
|
||||
|
723
winehelper
723
winehelper
@ -29,6 +29,9 @@ else
|
||||
check_variables DEBUG "0"
|
||||
fi
|
||||
|
||||
##### WINETRICKS VERSION #####
|
||||
WINETRICKS_VERSION="20250102"
|
||||
|
||||
##### DEFAULT VARIABLES #####
|
||||
SCRIPT_NAME="$(basename "$0")"
|
||||
if [[ "$(realpath "$0")" == "/usr/bin/$SCRIPT_NAME" ]] ; then
|
||||
@ -50,6 +53,11 @@ WH_IMAGE_PATH="$DATA_PATH/image"
|
||||
WH_DB_DIR="$DATA_PATH/database"
|
||||
WH_AUTOINSTALL_DIR="$DATA_PATH/autoinstall"
|
||||
WH_MANUALINSTALL_DIR="$DATA_PATH/manualinstall"
|
||||
WH_WINETRICKS="$DATA_PATH/winetricks_$WINETRICKS_VERSION"
|
||||
|
||||
WH_MENU_DIR="$HOME/.local/share/applications/WineHelper"
|
||||
WH_MENU_CATEGORY="$HOME/.local/share/desktop-directories/WineHelper.directory"
|
||||
WH_MENU_CONFIG="$HOME/.config/menus/applications-merged/WineHelper.menu"
|
||||
|
||||
# export WINEDLLOVERRIDES=mshtml,mscoree="
|
||||
|
||||
@ -59,6 +67,9 @@ check_variables WINEFSYNC "0"
|
||||
check_variables WINEARCH "win64" # or "win32"
|
||||
check_variables WH_WINE_USE "wine_x_tkg_10-0_amd64" # or system
|
||||
|
||||
check_variables WH_USE_CPCSP_PROXY "0"
|
||||
check_variables CPCSP_PROXY_VER "0.6.1-alt1"
|
||||
|
||||
check_variables STAGING_SHARED_MEMORY "1"
|
||||
check_variables WINE_LARGE_ADDRESS_AWARE "1"
|
||||
check_variables WINE_FULLSCREEN_FSR "1"
|
||||
@ -89,25 +100,21 @@ check_variables VKD3D_VER "1.1-2602"
|
||||
export CLOUD_URL="https://cloud.linux-gaming.ru/portproton"
|
||||
|
||||
##### CHECK NOEXEC FOR /HOME #####
|
||||
if grep "/home" /etc/fstab | grep -q "noexec" ; then
|
||||
if mount -l | grep -E "[[:space:]]/home[[:space:]]" | grep -q "noexec" ; then
|
||||
fatal "/home примонтирован в /etc/fstab с аргументом noexec.\nЗапуск портативной версии wine не возможен из домашнего каталога."
|
||||
fi
|
||||
|
||||
##### ROOT #####
|
||||
su_run () {
|
||||
print_info "Для продолжения установки зависимостей введите root пароль..."
|
||||
print_info "Для продолжения установки введите root пароль..."
|
||||
su - -c "$@"
|
||||
}
|
||||
|
||||
##### CHECK DEPENDENCIES #####
|
||||
# yad zenity cups-pdf
|
||||
|
||||
if rpm -q {i586-,}{wine,glibc-core,libstdc++6,glibc-pthread,glibc-nss,libOSMesa,\
|
||||
if ! rpm -q {i586-,}{wine,glibc-core,libstdc++6,glibc-pthread,glibc-nss,libOSMesa,\
|
||||
libnss-mdns,libunixODBC2,ocl-icd,libfreetype,libfontconfig1,libgnutls30,libGL,\
|
||||
libEGL,xorg-dri-swrast,xorg-dri-intel,xorg-dri-radeon,libvulkan1,libcups} \
|
||||
winetricks ca-certificates cups-pdf 1>/dev/null
|
||||
then : # Зависимости установлены. Пропускаем...
|
||||
else
|
||||
libEGL,xorg-dri-swrast,xorg-dri-intel,xorg-dri-radeon,libvulkan1,libcups} 1>/dev/null
|
||||
then
|
||||
if su_run "$DATA_PATH/dependencies.sh"
|
||||
then print_info "Зависимости успешно установлены. Продолжаем работу $SCRIPT_NAME"
|
||||
else fatal "Не удалось установить зависимости. Работа $SCRIPT_NAME прервана."
|
||||
@ -115,15 +122,6 @@ else
|
||||
fi
|
||||
|
||||
##### HELPER FUNCTIONS #####
|
||||
check_command () {
|
||||
if command -v "$1" &>/dev/null ; then
|
||||
return 0
|
||||
else
|
||||
print_warning "command: $1 - not found!"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
add_to_var () {
|
||||
if ! echo ${!1} | grep "$2" &>/dev/null
|
||||
then export $1="${!1} $2"
|
||||
@ -151,9 +149,9 @@ try_remove_dir () {
|
||||
}
|
||||
|
||||
try_copy_file () {
|
||||
if [[ ! -f "$1" ]] ; then print_info "file $1 not found for copy" && return 1
|
||||
elif [[ -z "$2" ]] ; then print_error "no way to copy file $1" && return 1
|
||||
elif [[ -L "$2" ]] ; then print_warning "$2 is a file with a symbolic link"
|
||||
if [[ ! -f "$1" ]] ; then print_info "файла $1 не существует для копирования" && return 1
|
||||
elif [[ -z "$2" ]] ; then fatal "нет пути для копирования файла $1"
|
||||
elif [[ -L "$2" ]] ; then
|
||||
try_remove_file "$2"
|
||||
cp -f "$1" "$2" && return 0 || return 1
|
||||
else
|
||||
@ -163,24 +161,24 @@ try_copy_file () {
|
||||
}
|
||||
|
||||
try_copy_dir () {
|
||||
if [[ ! -d "$1" ]] ; then print_info "directory $1 not found for copy"
|
||||
elif [[ -z "$2" ]] ; then print_error "no way to copy directory $1"
|
||||
if [[ ! -d "$1" ]] ; then print_info "каталога $1 не существует для копирования"
|
||||
elif [[ -z "$2" ]] ; then fatal "нет пути для копирования каталога $1"
|
||||
else
|
||||
cp -fr "$1" "$2"
|
||||
[[ "$?" != 0 ]] && print_error "failed to copy directory $1 to $2" || return 0
|
||||
[[ "$?" != 0 ]] && print_error "не удалось скопировать каталог $1 в $2" || return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
try_force_link_file () {
|
||||
if [[ ! -f "$1" ]] ; then
|
||||
print_warning "file not found for link: $1"
|
||||
print_warning "нет файла для создания символьной ссылки: $1"
|
||||
if [[ -f "$2" ]] ; then
|
||||
try_remove_file "$2"
|
||||
print_warning "removed old link: $2"
|
||||
print_warning "удаляем символьную ссылку: $2"
|
||||
fi
|
||||
return 1
|
||||
elif [[ -z "$2" ]] ; then print_error "no way to link file $1" && return 1
|
||||
elif [[ -z "$2" ]] ; then fatal "нет пути для создания символьной ссылки на файл $1"
|
||||
else
|
||||
try_remove_file "$2"
|
||||
ln -s -f -r "$1" "$2"
|
||||
@ -189,25 +187,12 @@ try_force_link_file () {
|
||||
return 1
|
||||
}
|
||||
|
||||
check_symlink () {
|
||||
local CHK_SYMLINK_FILE="$(file "$1")"
|
||||
if [[ -n "$(echo "$CHK_SYMLINK_FILE" | grep -v "broken" | grep "symbolic link to" | awk '{print $1}')" ]] ; then
|
||||
return 0
|
||||
elif [[ -n "$(echo "$CHK_SYMLINK_FILE" | grep "broken symbolic link to" | awk '{print $1}')" ]] ; then
|
||||
print_error "remove broken symlink: $CHK_SYMLINK_FILE"
|
||||
rm -fr "$CHK_SYMLINK_FILE"
|
||||
return 1
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
try_force_link_dir () {
|
||||
if [[ ! -d "$1" ]] ; then print_info "directory $1 not found for link"
|
||||
elif [[ -z "$2" ]] ; then print_error "no way to link directory $1"
|
||||
if [[ ! -d "$1" ]] ; then print_info "каталога $1 не существует для создания символьной сссылки"
|
||||
elif [[ -z "$2" ]] ; then fatal "не указан путь для создания символьной ссылки на каталог $1"
|
||||
else
|
||||
ln -s -f -r "$1" "$2"
|
||||
[[ "$?" != 0 ]] && print_error "failed to link directory $1 to $2" || return 0
|
||||
[[ "$?" != 0 ]] && print_error "не удалось сделать символьную ссылку на каталог $1 по пути $2" || return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
@ -307,7 +292,6 @@ try_copy_wine_dll_to_pfx_32() {
|
||||
fi
|
||||
}
|
||||
|
||||
##### OVERRIDE VARIABLES FUNCTIONS #####
|
||||
var_winedlloverride_update () {
|
||||
if [[ -n "${WINEDLLOVERRIDES}" ]]
|
||||
then export WINEDLLOVERRIDES="${1};${WINEDLLOVERRIDES}"
|
||||
@ -353,10 +337,10 @@ var_ld_library_path_update () {
|
||||
return 0
|
||||
}
|
||||
|
||||
##### CREATE DESKTOP FILE #####
|
||||
create_desktop () {
|
||||
local name_desktop="$1"
|
||||
local exe_file="$2"
|
||||
local desktop_filename="$(basename "$exe_file" .exe | sed "s| |_|")"
|
||||
local icon_file="$WH_IMAGE_PATH/$3.png"
|
||||
|
||||
if [[ -z "$name_desktop" ]] || [[ -z "$exe_file" ]] ; then
|
||||
@ -379,24 +363,76 @@ create_desktop () {
|
||||
fi
|
||||
fi
|
||||
|
||||
# создаем .desktop файл
|
||||
create_new_dir "$WH_MENU_DIR"
|
||||
[[ ! -f "$icon_file" ]] && icon_file=wine
|
||||
|
||||
{
|
||||
echo "[Desktop Entry]"
|
||||
echo "Name=$name_desktop"
|
||||
echo "Exec=env \"$RUN_SCRIPT\" \"$exe_file\" %F"
|
||||
echo "Type=Application"
|
||||
echo "Categories=Other;"
|
||||
echo "Categories=WineHelper;"
|
||||
echo "StartupNotify=true"
|
||||
echo "Path=$DATA_PATH"
|
||||
echo "Icon=$icon_file"
|
||||
} > "$USER_WORK_PATH/$name_desktop.desktop"
|
||||
chmod +x "$USER_WORK_PATH/$name_desktop.desktop"
|
||||
} > "$USER_WORK_PATH/$desktop_filename.desktop"
|
||||
chmod +x "$USER_WORK_PATH/$desktop_filename.desktop"
|
||||
|
||||
create_new_dir "$HOME/.local/share/applications/"
|
||||
# cp -f "$USER_WORK_PATH/$name_desktop.desktop" "$HOME/.local/share/applications/"
|
||||
cp -f "$USER_WORK_PATH/$name_desktop.desktop" "$(xdg-user-dir DESKTOP)"
|
||||
print_info "На рабочем столе создан $name_desktop.desktop"
|
||||
cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$WH_MENU_DIR/"
|
||||
|
||||
# добавляем информацию о приложении в "$WINEPREFIX/desktop.list"
|
||||
if [[ -f "$WINEPREFIX/desktop.list" ]] \
|
||||
&& grep -qe "^${name_desktop}=" "$WINEPREFIX/desktop.list"
|
||||
then sed -i "/^$name_desktop=/d" "$WINEPREFIX/desktop.list"
|
||||
fi
|
||||
echo "$name_desktop=${exe_file//$WINEPREFIX/}" >> "$WINEPREFIX/desktop.list"
|
||||
|
||||
# создаем файл категории для меню
|
||||
create_new_dir "$HOME/.local/share/desktop-directories"
|
||||
if [[ ! -f "$WH_MENU_CATEGORY" ]] ; then
|
||||
cat > "$WH_MENU_CATEGORY" <<EOF
|
||||
[Desktop Entry]
|
||||
Type=Directory
|
||||
Name=WineHelper
|
||||
Icon=wine
|
||||
EOF
|
||||
fi
|
||||
|
||||
# Создаем файл меню для всех приложений
|
||||
create_new_dir "$HOME/.config/menus/applications-merged"
|
||||
if [[ ! -f "$WH_MENU_CONFIG" ]] ; then
|
||||
cat > "$WH_MENU_CONFIG" <<EOF
|
||||
<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">
|
||||
<Menu>
|
||||
<Name>Applications</Name>
|
||||
<Menu>
|
||||
<Name>WineHelper</Name>
|
||||
<Directory>WineHelper.directory</Directory>
|
||||
<Include>
|
||||
<Category>WineHelper</Category>
|
||||
</Include>
|
||||
</Menu>
|
||||
</Menu>
|
||||
EOF
|
||||
fi
|
||||
|
||||
# Обновляем кэш desktop файлов
|
||||
update-desktop-database "$HOME/.local/share/applications"
|
||||
|
||||
if [[ $4 != "nocopy" ]] ; then
|
||||
if [[ -n $4 ]] ; then
|
||||
local desktop_path="$(xdg-user-dir DESKTOP)/$4"
|
||||
create_new_dir "$desktop_path"
|
||||
print_info "В меню создан $desktop_filename.desktop и скопирован на рабочий стол в каталог $4"
|
||||
else
|
||||
local desktop_path="$(xdg-user-dir DESKTOP)"
|
||||
print_info "В меню и на рабочем столе создан $desktop_filename.desktop"
|
||||
fi
|
||||
cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$desktop_path"
|
||||
else
|
||||
print_info "В меню создан $desktop_filename.desktop"
|
||||
fi
|
||||
|
||||
if [[ -n "$INSTALL_SCRIPT_NAME" ]] \
|
||||
&& [[ -f "$exe_file" ]]
|
||||
@ -412,16 +448,26 @@ create_desktop () {
|
||||
fi
|
||||
}
|
||||
|
||||
##### REMOVE DESKTOP FILE #####
|
||||
remove_desktop () {
|
||||
if [[ -n "$1" ]] ; then
|
||||
try_remove_file "$USER_WORK_PATH/$1.desktop"
|
||||
try_remove_file "$WH_MENU_DIR/$1.desktop"
|
||||
try_remove_file "$HOME/.local/share/applications/$1.desktop"
|
||||
try_remove_file "$(xdg-user-dir DESKTOP)/$1.desktop"
|
||||
fi
|
||||
|
||||
# Удаляем категорию если она пуста
|
||||
if [[ -d "$WH_MENU_DIR" ]] && [[ -z "$(ls -A "$WH_MENU_DIR")" ]]; then
|
||||
try_remove_dir "$WH_MENU_DIR"
|
||||
try_remove_file "$WH_MENU_CATEGORY"
|
||||
try_remove_file "$WH_MENU_CONFIG"
|
||||
fi
|
||||
|
||||
# Обновляем кэш desktop файлов
|
||||
update-desktop-database "$HOME/.local/share/applications"
|
||||
|
||||
}
|
||||
|
||||
##### INSTALLED PROGRAMS #####
|
||||
check_installed_programs () {
|
||||
for desktop_file in "$USER_WORK_PATH"/*.desktop ; do
|
||||
if [[ ! -f "$desktop_file" ]] ; then
|
||||
@ -460,7 +506,6 @@ run_installed_programs () {
|
||||
fi
|
||||
}
|
||||
|
||||
##### USED WINED3D LIBRARY #####
|
||||
init_wined3d () {
|
||||
if [[ "$USE_RENDERER" != "proton" ]] ; then
|
||||
WINED3D_FILES="d3d8 d3d9 d3d10_1 d3d10 d3d10core d3d11 dxgi d3d12 d3d12core"
|
||||
@ -478,7 +523,6 @@ init_wined3d () {
|
||||
fi
|
||||
}
|
||||
|
||||
##### CHECK VULKAN LIBRARY #####
|
||||
init_dxvk () {
|
||||
check_variables USE_DXVK_VER "$1"
|
||||
|
||||
@ -546,27 +590,19 @@ init_vkd3d () {
|
||||
done
|
||||
}
|
||||
|
||||
##### DOWNLOAD WINE #####
|
||||
download_wine () {
|
||||
if [[ ! -d "$WH_DIST_DIR/$WH_WINE_USE" ]] ; then
|
||||
WINE_URL="$CLOUD_URL/$WH_WINE_USE.tar.xz"
|
||||
local WINE_PACKAGE="$WH_TMP_DIR/${WH_WINE_USE}.tar.xz"
|
||||
if try_download "$WINE_URL" "$WINE_PACKAGE" check256sum ; then
|
||||
if unpack "$WINE_PACKAGE" "$WH_DIST_DIR/" ; then
|
||||
echo "$WH_WINE_USE" > "$WH_DIST_DIR/$WH_WINE_USE/version"
|
||||
try_remove_file "$WINE_PACKAGE"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
##### INITIAL WINE SETTINGS #####
|
||||
init_wine_ver () {
|
||||
if [[ "$WH_WINE_USE" != system* ]] ; then
|
||||
export WINEDIR="$WH_DIST_DIR/$WH_WINE_USE"
|
||||
|
||||
if [[ ! -d "$WINEDIR" ]] ; then
|
||||
download_wine
|
||||
WINE_URL="$CLOUD_URL/$WH_WINE_USE.tar.xz"
|
||||
local WINE_PACKAGE="$WH_TMP_DIR/${WH_WINE_USE}.tar.xz"
|
||||
if try_download "$WINE_URL" "$WINE_PACKAGE" check256sum ; then
|
||||
if unpack "$WINE_PACKAGE" "$WH_DIST_DIR/" ; then
|
||||
echo "$WH_WINE_USE" > "$WH_DIST_DIR/$WH_WINE_USE/version"
|
||||
try_remove_file "$WINE_PACKAGE"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
export WINE="${WINEDIR}/bin/wine"
|
||||
@ -589,7 +625,14 @@ init_wine_ver () {
|
||||
export GST_PLUGIN_SYSTEM_PATH_1_0="${WINEDIR}/lib/gstreamer-1.0"
|
||||
fi
|
||||
|
||||
if [[ "${WINEARCH}" == "win64" ]] ; then
|
||||
[[ ! -f "${WINEDIR}/version" ]] && echo "${WH_WINE_USE}" > "${WINEDIR}/version"
|
||||
|
||||
if [[ ! -d "${WINEDIR}/lib64/wine" ]] && [[ -d "${WINEDIR}/lib/wine/x86_64-unix" ]] ; then
|
||||
create_new_dir "${WINEDIR}/lib64/"
|
||||
try_force_link_dir "${WINEDIR}/lib/wine/" "${WINEDIR}/lib64/"
|
||||
fi
|
||||
|
||||
if [[ -d "${WINEDIR}/lib64" ]] ; then
|
||||
export LD_LIBRARY_PATH+=":${WINEDIR}/lib64"
|
||||
export WINEDLLPATH+=":${WINEDIR}/lib64/wine"
|
||||
if [[ -d "${WINEDIR}/lib64/gstreamer-1.0" ]] ; then
|
||||
@ -597,12 +640,28 @@ init_wine_ver () {
|
||||
fi
|
||||
fi
|
||||
|
||||
[[ ! -f "${WINEDIR}/version" ]] && echo "${WH_WINE_USE}" > "${WINEDIR}/version"
|
||||
if [[ $WH_USE_CPCSP_PROXY == "1" ]] \
|
||||
&& ! grep -q "$CPCSP_PROXY_VER" "${WINEDIR}/cpcsp_proxy.ver"
|
||||
then
|
||||
CPCSP_PROXY_NAME="wine-cpcsp_proxy-$CPCSP_PROXY_VER"
|
||||
CPCSP_PROXY_URL="$CLOUD_URL/$CPCSP_PROXY_NAME.tar.xz"
|
||||
|
||||
if [[ ! -d "${WINEDIR}/lib64/" ]] && [[ -d "${WINEDIR}/lib/wine/x86_64-unix" ]] ; then
|
||||
create_new_dir "${WINEDIR}/lib64/wine"
|
||||
mv -f "${WINEDIR}/lib/wine/x86_64-unix" "${WINEDIR}/lib64/wine/"
|
||||
mv -f "${WINEDIR}/lib/wine/x86_64-windows" "${WINEDIR}/lib64/wine/"
|
||||
if [[ ! -f "$WH_TMP_DIR/$CPCSP_PROXY_NAME" ]] ; then
|
||||
print_info "Загрузка $CPCSP_PROXY_NAME.tar.xz"
|
||||
if try_download "$CPCSP_PROXY_URL" "$WH_TMP_DIR/$CPCSP_PROXY_NAME.tar.xz" check256sum
|
||||
then unpack "$WH_TMP_DIR/$CPCSP_PROXY_NAME.tar.xz" "$WH_TMP_DIR"
|
||||
else try_remove_file "$WH_TMP_DIR/$CPCSP_PROXY_NAME.tar.xz"
|
||||
fi
|
||||
else
|
||||
unpack "$WH_TMP_DIR/$CPCSP_PROXY_NAME.tar.xz" "$WH_TMP_DIR"
|
||||
fi
|
||||
|
||||
cp -fr "$WH_TMP_DIR/$CPCSP_PROXY_NAME/"i386-* "${WINEDIR}/lib/wine/"
|
||||
if [[ -d "${WINEDIR}/lib64" ]] ; then
|
||||
cp -fr "$WH_TMP_DIR/$CPCSP_PROXY_NAME/"x86_64-* "${WINEDIR}/lib64/wine/"
|
||||
fi
|
||||
try_remove_dir "$WH_TMP_DIR/$CPCSP_PROXY_NAME"
|
||||
echo "$CPCSP_PROXY_VER" > "${WINEDIR}/cpcsp_proxy.ver"
|
||||
fi
|
||||
else
|
||||
# use system WINE
|
||||
@ -638,9 +697,8 @@ init_wine_ver () {
|
||||
print_info "Используется версия wine: $WH_WINE_USE"
|
||||
}
|
||||
|
||||
##### INITIAL WINEPREFIX SETTINGS #####
|
||||
get_and_set_reg_file () {
|
||||
|
||||
|
||||
convert_dec_and_hex () {
|
||||
local type=$1
|
||||
local num=$2
|
||||
@ -670,14 +728,23 @@ get_and_set_reg_file () {
|
||||
|
||||
case $name_type_reg in
|
||||
REG_DWORD)
|
||||
name_for_find="\"$name_for_find\"=dword:"
|
||||
if [[ $name_for_find != '@=' ]]
|
||||
then name_for_find="\"$name_for_find\"=dword:"
|
||||
else name_for_find="@=dword:"
|
||||
fi
|
||||
name_for_set=$(convert_dec_and_hex --dec "$name_for_set") ;;
|
||||
REG_SZ)
|
||||
name_for_find="\"$name_for_find\"="
|
||||
if [[ $name_for_find != '@=' ]]
|
||||
then name_for_find="\"$name_for_find\"="
|
||||
else name_for_find="@="
|
||||
fi
|
||||
name_for_set="\"$name_for_set\"" ;;
|
||||
*)
|
||||
if [[ $name_add_or_del == --delete ]] ; then
|
||||
name_for_find="\"$name_for_find\""
|
||||
if [[ $name_for_find != '@=' ]]
|
||||
then name_for_find="\"$name_for_find\""
|
||||
else name_for_find="@="
|
||||
fi
|
||||
else
|
||||
print_error "не задан тип ветки реестра: $name_fatal"
|
||||
return 1
|
||||
@ -725,24 +792,20 @@ get_and_set_reg_file () {
|
||||
fi
|
||||
fi
|
||||
if [[ $find_check_file == 1 ]] ; then
|
||||
print_info "Меняем $name_for_find_old в файле реестра"
|
||||
print_info "Меняем $name_for_find_old в ветке реестра: $name_block"
|
||||
sed -i "${find_number_line}s|$name_for_find.*|$name_for_find$name_for_set|" "$find_file"
|
||||
else
|
||||
print_info "Добавляем $name_for_find_old в файл реестра"
|
||||
print_info "Добавляем $name_for_find_old в ветку реестра: $name_block"
|
||||
sed -i "$(( find_line + 1 ))a$name_for_find$name_for_set" "$find_file"
|
||||
fi
|
||||
elif [[ $name_add_or_del == --delete ]] ; then
|
||||
[[ $find_check_file != 1 ]] && return 0
|
||||
print_info "Удаляем $name_for_find_old из файла реестра"
|
||||
print_info "Удаляем $name_for_find_old из ветки реестра: $name_block"
|
||||
sed -i "${find_number_line}d" "$find_file"
|
||||
fi
|
||||
}
|
||||
|
||||
wait_wineserver () {
|
||||
# while [[ -n "$(ls -l /proc/*/exe 2>/dev/null | grep -ie portproton | grep -E 'wine(64)?-preloader|wineserver' | awk -F/ '{print $3}')" ]] ; do
|
||||
# sleep 1
|
||||
# done
|
||||
|
||||
"$WINESERVER" -w
|
||||
}
|
||||
|
||||
@ -766,19 +829,47 @@ get_base_pfx () {
|
||||
fi
|
||||
}
|
||||
|
||||
init_wineprefix () {
|
||||
check_prefix_var () {
|
||||
if [[ -z "$WINEPREFIX" ]] ; then
|
||||
print_warning "Префикс не выбран, используйте пееременную: WINEPREFIX=имя_префикса"
|
||||
print_info "Список существующих префиксов:"
|
||||
ls -1 "$WH_PREFIXES_DIR"
|
||||
echo
|
||||
exit 1
|
||||
else
|
||||
if echo "$WINEPREFIX" | grep -v '/' ; then
|
||||
export WINEPREFIX="$WH_PREFIXES_DIR/$WINEPREFIX"
|
||||
print_warning "Префикс не выбран."
|
||||
|
||||
local prefixes=()
|
||||
local count=1
|
||||
print_info "Доступные префиксы WineHelper:"
|
||||
for prefix in "$WH_PREFIXES_DIR"/*; do
|
||||
if [[ -d "$prefix" ]]; then
|
||||
prefixes+=("$prefix")
|
||||
echo "$count. $(basename "$prefix")"
|
||||
((count++))
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ ${#prefixes[@]} -eq 0 ]]; then
|
||||
fatal "Не найдено ни одного префикса!"
|
||||
fi
|
||||
|
||||
local max_choice=${#prefixes[@]}
|
||||
read -p "Выберите префикс (1-$max_choice): " choice
|
||||
|
||||
if [[ "$choice" -ge 1 && "$choice" -le "$max_choice" ]]; then
|
||||
export WINEPREFIX="${prefixes[$choice-1]}"
|
||||
else
|
||||
fatal "Неверный выбор."
|
||||
fi
|
||||
|
||||
print_info "Выбран префикс: $WINEPREFIX"
|
||||
fi
|
||||
|
||||
if echo "$WINEPREFIX" | grep -qv '/' ; then
|
||||
export WINEPREFIX="$WH_PREFIXES_DIR/$WINEPREFIX"
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
init_wineprefix () {
|
||||
check_prefix_var
|
||||
|
||||
if [[ "$WINEARCH" == "win32" ]]
|
||||
then check_variables BASE_PFX "defpfx_x86_v01"
|
||||
else check_variables BASE_PFX "defpfx_x64_v01"
|
||||
@ -795,8 +886,8 @@ init_wineprefix () {
|
||||
fi
|
||||
print_info "Обновление префикса $WINEPREFIX."
|
||||
if [[ -d "$WINEPREFIX/drive_c/windows" ]]
|
||||
then env WINEDLLOVERRIDES="winegstreamer=" "$WINELOADER" wineboot -u
|
||||
else env WINEDLLOVERRIDES="winegstreamer=" "$WINELOADER" wineboot -i
|
||||
then "$WINELOADER" wineboot -u
|
||||
else "$WINELOADER" wineboot -i
|
||||
fi
|
||||
touch "$WINEPREFIX/.firstboot"
|
||||
wait_wineserver
|
||||
@ -809,7 +900,7 @@ init_wineprefix () {
|
||||
&& [[ "$WINEARCH" != "win32" ]]
|
||||
then export WH_WINDOWS_VER="xp64"
|
||||
fi
|
||||
env WINEDLLOVERRIDES="winegstreamer=" "$WINELOADER" winecfg -v $(echo "win${WH_WINDOWS_VER}" | sed 's/.*/\L&/')
|
||||
"$WINELOADER" winecfg -v $(echo "win${WH_WINDOWS_VER}" | sed 's/.*/\L&/')
|
||||
wait_wineserver
|
||||
print_info "Windows версия изменена на win${WH_WINDOWS_VER}"
|
||||
fi
|
||||
@ -835,9 +926,76 @@ init_wineprefix () {
|
||||
get_and_set_reg_file --delete 'Software\Wine\X11 Driver' 'UseXRandR'
|
||||
get_and_set_reg_file --delete 'Software\Wine\X11 Driver' 'UseXVidMode'
|
||||
fi
|
||||
|
||||
# добавление ассоциаций файлов для запуска нативного приложения из wine
|
||||
# пример переменной: WH_XDG_OPEN="txt doc pdf"
|
||||
check_variables WH_XDG_OPEN "0"
|
||||
local WRAPPER="${WH_TMP_DIR}/wh-xdg-open.sh"
|
||||
local XDG_OPEN_REG="Software\Classes\xdg-open\shell\open\command"
|
||||
if [[ $WH_XDG_OPEN != "0" ]] ; then
|
||||
# проверяем на наличие запрещённых расширений
|
||||
local forbidden_extensions="cpl dll exe lnk msi"
|
||||
for ext in $WH_XDG_OPEN; do
|
||||
if [[ "$forbidden_extensions" =~ $ext ]] ; then
|
||||
fatal "Расширение .$ext запрещено для добавления!"
|
||||
fi
|
||||
done
|
||||
|
||||
# создаем скрипт-обёртку
|
||||
{
|
||||
echo "#!/usr/bin/env bash"
|
||||
echo "unix_path=\$(\"$WINELOADER\" winepath -u \"\$*\")"
|
||||
echo "xdg-open \"\$unix_path\""
|
||||
} > "$WRAPPER"
|
||||
chmod +x "$WRAPPER"
|
||||
|
||||
# добавляем новую команду xdg-open в реестр
|
||||
get_and_set_reg_file --add "$XDG_OPEN_REG" '@=' 'REG_SZ' "$WRAPPER %1" "system"
|
||||
|
||||
# добавляем ассоциации файлов для запуска с помощью xdg-open
|
||||
for ext in $WH_XDG_OPEN ; do
|
||||
get_and_set_reg_file --add "Software\Classes\.$ext" '@=' 'REG_SZ' "xdg-open" "system"
|
||||
done
|
||||
print_info "Используется ассоциации с нативными приложениями для файлов: \"$WH_XDG_OPEN\""
|
||||
else
|
||||
# удаление команды xdg-open из реестра
|
||||
get_and_set_reg_file --delete "$XDG_OPEN_REG" '@='
|
||||
# удаяем скрипт-обёртку
|
||||
try_remove_file "$WRAPPER"
|
||||
fi
|
||||
|
||||
# настраиваем префикс для работы с cpcsp_proxy
|
||||
if [[ $WH_USE_CPCSP_PROXY == "1" ]] ; then
|
||||
for cpcsp_proxy_file in "cpcsp_proxy.dll" "cpcsp_proxy_setup.exe" ; do
|
||||
try_copy_wine_dll_to_pfx_64 "$cpcsp_proxy_file"
|
||||
try_copy_wine_dll_to_pfx_32 "$cpcsp_proxy_file"
|
||||
done
|
||||
|
||||
if ! grep -q "cpcsp_proxy.dll" "$WINEPREFIX/system.reg" ; then
|
||||
if [[ "$WINEARCH" == "win32" ]]
|
||||
then cpcsp_proxy_cmd=("$WINELOADER" "cpcsp_proxy_setup.exe")
|
||||
else cpcsp_proxy_cmd=("${WINELOADER}64" "cpcsp_proxy_setup.exe")
|
||||
fi
|
||||
|
||||
print_info "Запускаем настройку cpcsp_proxy:"
|
||||
echo "${cpcsp_proxy_cmd[*]}"
|
||||
if "${cpcsp_proxy_cmd[@]}"
|
||||
then print_info "Настройка cpcsp_proxy успешно завершена."
|
||||
else fatal "Ошибка во время настройки cpcsp_proxy."
|
||||
fi
|
||||
wait_wineserver
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "# переменные последнего использования префикса:" > "$WINEPREFIX/last.conf"
|
||||
for var in WH_WINE_USE BASE_PFX WINEARCH WH_WINDOWS_VER WINEESYNC WINEFSYNC \
|
||||
STAGING_SHARED_MEMORY WINE_LARGE_ADDRESS_AWARE WH_USE_SHADER_CACHE WH_USE_WINE_DXGI \
|
||||
WINE_CPU_TOPOLOGY USE_RENDERER DXVK_VER VKD3D_VER
|
||||
do
|
||||
echo "export $var=\"${!var}\"" >> "$WINEPREFIX/last.conf"
|
||||
done
|
||||
}
|
||||
|
||||
##### KILL AUTOSTART AFTER INSTALLING #####
|
||||
kill_autostart () {
|
||||
[[ -z "${1}" ]] && fatal "Нет аргумента для функции kill_autostart."
|
||||
[[ -z "${2}" ]] && SWAIT=3 || SWAIT="${2}"
|
||||
@ -854,25 +1012,6 @@ kill_autostart () {
|
||||
done
|
||||
}
|
||||
|
||||
update_winetricks () {
|
||||
W_TRX_URL="https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks"
|
||||
W_TRX_EXT_VER="$(curl -s --list-only "$W_TRX_URL" | grep -i 'WINETRICKS_VERSION=' | sed 's/WINETRICKS_VERSION=//')"
|
||||
print_info "Актуальная версия winetricks: $W_TRX_EXT_VER"
|
||||
if [[ -f "$WH_TMP_DIR/winetricks" ]] ; then
|
||||
W_TRX_INT_VER="$(cat "$WH_TMP_DIR/winetricks" | grep -i 'WINETRICKS_VERSION=' | sed 's/WINETRICKS_VERSION=//')"
|
||||
print_info "Установленная портативная версия winetricks: $W_TRX_INT_VER"
|
||||
fi
|
||||
if [[ -n "$W_TRX_EXT_VER" ]] && [[ "$W_TRX_INT_VER" != "$W_TRX_EXT_VER" ]] ; then
|
||||
if try_download "$W_TRX_URL" "$WH_TMP_DIR/winetricks_new" ; then
|
||||
mv -f "$WH_TMP_DIR/winetricks_new" "$WH_TMP_DIR/winetricks"
|
||||
W_TRX_INT_VER="$(cat "$WH_TMP_DIR/winetricks" | grep -i 'WINETRICKS_VERSION=' | sed 's/_VERSION=//')"
|
||||
print_info "Портативная версия winetricks обновлена до (${W_TRX_INT_VER})"
|
||||
chmod u+x "$WH_TMP_DIR/winetricks"
|
||||
fi
|
||||
fi
|
||||
export WINETRICKS="$WH_TMP_DIR/winetricks"
|
||||
}
|
||||
|
||||
use_winetricks () {
|
||||
if [[ -n "$INSTALL_DLL" ]] ; then
|
||||
WH_DLL_INSTALL="$(echo "$INSTALL_DLL $WH_DLL_INSTALL" | awk '{ for(i=1;i<=NF;i++){a[$i]++} }END{ for(i in a){printf("%s ",i)} }' )"
|
||||
@ -895,13 +1034,11 @@ use_winetricks () {
|
||||
fi
|
||||
done
|
||||
if [[ "$USE_WT_FROM_DB" == "1" ]] ; then
|
||||
if update_winetricks ; then
|
||||
print_info "Пробуем установить библиотеки: ${WH_DLL_NEED_INSTALL}"
|
||||
print_info "Запускаем WINETRICKS..."
|
||||
export WINETRICKS_DOWNLOADER="curl"
|
||||
env WINEDLLOVERRIDES="winegstreamer=" "$WH_TMP_DIR/winetricks" -q ${WH_DLL_NEED_INSTALL}
|
||||
wait_wineserver
|
||||
fi
|
||||
print_info "Пробуем установить компоненты: ${WH_DLL_NEED_INSTALL}"
|
||||
print_info "Запускаем WINETRICKS..."
|
||||
export WINETRICKS_DOWNLOADER="curl"
|
||||
"$WH_WINETRICKS" -q ${WH_DLL_NEED_INSTALL}
|
||||
wait_wineserver
|
||||
fi
|
||||
fi
|
||||
}
|
||||
@ -917,28 +1054,29 @@ kill_wine () {
|
||||
}
|
||||
|
||||
init_database () {
|
||||
WHDB_FILE="0"
|
||||
if [[ -f "$WIN_FILE_EXEC" ]] ; then
|
||||
WHDB="$(basename "$WIN_FILE_EXEC" .exe)"
|
||||
if [[ -f "$WIN_FILE_EXEC".whdb ]] ; then
|
||||
WHDB_FILE="$WIN_FILE_EXEC".whdb
|
||||
else
|
||||
orig_IFS="$IFS"
|
||||
IFS=$'\n'
|
||||
WH_FIND_DB_FILE="$(grep -ilw "#$WHDB.exe" "$WH_DB_DIR"/* )"
|
||||
if [[ $(echo "$WH_FIND_DB_FILE" | wc -l) -gt 1 ]] ; then
|
||||
print_error "Найдено более одного файла настроек: $WHDB.exe"
|
||||
WHDB_FILE="$(echo "$WH_FIND_DB_FILE" | head -n1)"
|
||||
else
|
||||
orig_IFS="$IFS" && IFS=$'\n'
|
||||
if WH_FIND_DB_FILE="$(grep -ilw "#$WHDB.exe" "$WH_DB_DIR"/* )" ; then
|
||||
WHDB_FILE="$WH_FIND_DB_FILE"
|
||||
fi
|
||||
IFS="$orig_IFS"
|
||||
fi
|
||||
if [[ "$WHDB_FILE" ]] ; then
|
||||
print_info "Используется файл настроек: $WHDB_FILE"
|
||||
. "$WHDB_FILE"
|
||||
else
|
||||
print_warning "Файл настроек не найден. Пропускаем."
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "$WHDB_FILE" != "0" ]] ; then
|
||||
print_info "Используется файл настроек: $WHDB_FILE"
|
||||
. "$WHDB_FILE"
|
||||
elif check_prefix_var && [[ -f "$WINEPREFIX/last.conf" ]] ; then
|
||||
print_info "Найдены настройки из предыдущего использования префикса: $WINEPREFIX"
|
||||
cat "$WINEPREFIX/last.conf"
|
||||
. "$WINEPREFIX/last.conf"
|
||||
else
|
||||
print_warning "Файл настроек не найден. Пропускаем."
|
||||
fi
|
||||
}
|
||||
|
||||
@ -964,7 +1102,10 @@ prepair_wine () {
|
||||
|
||||
var_winedlloverride_update "winemenubuilder.exe=d"
|
||||
|
||||
init_database
|
||||
if [[ -n "$INSTALL_SCRIPT_NAME" ]]
|
||||
then print_info "Используются настройки из скрипта установки: $INSTALL_SCRIPT_NAME"
|
||||
else init_database
|
||||
fi
|
||||
init_wine_ver
|
||||
init_wineprefix
|
||||
use_winetricks
|
||||
@ -1052,6 +1193,290 @@ run_autoinstall () {
|
||||
echo
|
||||
}
|
||||
|
||||
backup_prefix() {
|
||||
local prefix_name="$1"
|
||||
local prefix_path="$WH_PREFIXES_DIR/$prefix_name"
|
||||
local backup_base_dir="$(xdg-user-dir DESKTOP)"
|
||||
local timestamp
|
||||
timestamp=$(date +%Y.%m.%d)
|
||||
local backup_archive_name="backup_${prefix_name}_${timestamp}.whpack"
|
||||
local backup_dest_path="$backup_base_dir/$backup_archive_name"
|
||||
local temp_backup_dir="$WH_TMP_DIR/backup_${prefix_name}_${timestamp}"
|
||||
|
||||
if [[ -z "$prefix_name" ]]; then
|
||||
print_error "Не указано имя префикса для резервного копирования."
|
||||
echo "Использование: $SCRIPT_NAME backup-prefix [имя_префикса]"
|
||||
echo "Доступные префиксы:"
|
||||
ls -1 "$WH_PREFIXES_DIR"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ ! -d "$prefix_path" ]]; then
|
||||
print_error "Префикс \"$prefix_name\" не найден по пути $prefix_path."
|
||||
return 1
|
||||
fi
|
||||
|
||||
print_info "Начало резервного копирования префикса: $prefix_name"
|
||||
create_new_dir "$backup_base_dir"
|
||||
try_remove_dir "$temp_backup_dir"
|
||||
create_new_dir "$temp_backup_dir"
|
||||
|
||||
# создание файла с информацией о бэкапе
|
||||
local backup_info_file="$temp_backup_dir/backup_info.txt"
|
||||
{
|
||||
echo "Информация о резервном копировании"
|
||||
echo "------------------"
|
||||
echo "Имя префикса: $prefix_name"
|
||||
echo "Дата копирования: $(date)"
|
||||
echo "Исходный путь префикса: $prefix_path"
|
||||
echo ""
|
||||
echo "Содержимое $prefix_name/last.conf:"
|
||||
if [[ -f "$prefix_path/last.conf" ]]; then
|
||||
cat "$prefix_path/last.conf"
|
||||
else
|
||||
echo " - $prefix_path/last.conf не найдено."
|
||||
fi
|
||||
echo "------------------"
|
||||
} > "$backup_info_file"
|
||||
|
||||
# копирование префикса во временную директорию
|
||||
print_info "Подготовка префикса к упаковке..."
|
||||
if cp -a "$prefix_path" "$temp_backup_dir/${prefix_name}"; then
|
||||
print_ok "Директория префикса подготовлена."
|
||||
else
|
||||
print_error "Не удалось подготовить директорию префикса."
|
||||
try_remove_dir "$temp_backup_dir"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# упаковка префикса с помощью mksquashfs
|
||||
print_info "Создание squashfs архива..."
|
||||
if command -v mksquashfs >/dev/null; then
|
||||
if mksquashfs "$temp_backup_dir" "$backup_dest_path" -comp zstd; then
|
||||
print_ok "Архив успешно создан: $backup_dest_path"
|
||||
else
|
||||
print_error "Не удалось создать архив."
|
||||
try_remove_dir "$temp_backup_dir"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
print_error "mksquashfs не установлен. Необходимо установить squashfs-tools."
|
||||
try_remove_dir "$temp_backup_dir"
|
||||
return 1
|
||||
fi
|
||||
|
||||
try_remove_dir "$temp_backup_dir"
|
||||
print_info "Резервное копирование завершено."
|
||||
return 0
|
||||
}
|
||||
|
||||
restore_prefix() {
|
||||
local backup_archive_path="$1"
|
||||
local new_prefix_name="$2"
|
||||
local temp_extract_dir
|
||||
local original_prefix_name_from_info
|
||||
local new_prefix_path
|
||||
|
||||
if [[ -z "$backup_archive_path" ]]; then
|
||||
read -e -p "Укажите путь к архиву резервной копии (.whpack): " backup_archive_path
|
||||
if [[ -z "$backup_archive_path" ]]; then
|
||||
print_error "Путь к архиву не указан. Восстановление отменено."
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
backup_archive_path=$(echo "$backup_archive_path" | sed "s/'//g; s/\"//g")
|
||||
if [[ ! -f "$backup_archive_path" ]]; then
|
||||
print_error "Файл архива не найден: $backup_archive_path"
|
||||
return 1
|
||||
fi
|
||||
|
||||
print_info "Восстановление из резервной копии: $backup_archive_path"
|
||||
|
||||
temp_extract_dir="$WH_TMP_DIR/restore_$(basename "$backup_archive_path" .whpack)_$(date +%s)"
|
||||
create_new_dir "$temp_extract_dir"
|
||||
|
||||
print_info "Распаковка архива..."
|
||||
if ! unsquashfs -f -d "$temp_extract_dir" "$backup_archive_path"; then
|
||||
print_error "Не удалось распаковать архив."
|
||||
try_remove_dir "$temp_extract_dir"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local backup_info_file="$temp_extract_dir/backup_info.txt"
|
||||
if [[ ! -f "$backup_info_file" ]]; then
|
||||
print_error "Файл backup_info.txt не найден в архиве."
|
||||
try_remove_dir "$temp_extract_dir"
|
||||
return 1
|
||||
fi
|
||||
|
||||
original_prefix_name_from_info=$(grep "Имя префикса:" "$backup_info_file" | cut -d':' -f2- | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
||||
|
||||
if [[ -z "$original_prefix_name_from_info" ]]; then
|
||||
print_error "Не удалось определить имя оригинального префикса."
|
||||
try_remove_dir "$temp_extract_dir"
|
||||
return 1
|
||||
fi
|
||||
|
||||
[[ -z "$new_prefix_name" ]] && new_prefix_name="$original_prefix_name_from_info"
|
||||
new_prefix_path="$WH_PREFIXES_DIR/$new_prefix_name"
|
||||
|
||||
if [[ -d "$new_prefix_path" ]]; then
|
||||
read -p "Префикс \"$new_prefix_name\" уже существует. Перезаписать? (y/N): " answer
|
||||
if [[ ! "$answer" =~ ^[YyДд]$ ]]; then
|
||||
print_info "Восстановление отменено."
|
||||
try_remove_dir "$temp_extract_dir"
|
||||
return 0
|
||||
fi
|
||||
try_remove_dir "$new_prefix_path"
|
||||
fi
|
||||
|
||||
# восстановление префикса
|
||||
local extracted_prefix_dir="$temp_extract_dir/$original_prefix_name_from_info"
|
||||
if [[ ! -d "$extracted_prefix_dir" ]]; then
|
||||
print_error "Директория префикса не найдена в архиве."
|
||||
try_remove_dir "$temp_extract_dir"
|
||||
return 1
|
||||
fi
|
||||
|
||||
print_info "Восстановление директории префикса..."
|
||||
if mv "$extracted_prefix_dir" "$new_prefix_path"; then
|
||||
print_ok "Директория префикса восстановлена."
|
||||
else
|
||||
print_error "Не удалось восстановить директорию префикса."
|
||||
try_remove_dir "$temp_extract_dir"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# восстановление ярлыков из desktop.list
|
||||
if [[ -f "$new_prefix_path/desktop.list" ]]; then
|
||||
print_info "Восстановление ярлыков из desktop.list..."
|
||||
while IFS='=' read -r name_desktop relative_exe_path || [[ -n "$name_desktop" ]]; do
|
||||
relative_exe_path=$(echo "$relative_exe_path" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
||||
if [[ -n "$relative_exe_path" ]]; then
|
||||
local full_exe_path="$new_prefix_path/$relative_exe_path"
|
||||
if [[ -f "$full_exe_path" ]]; then
|
||||
local png_name="$(basename "$full_exe_path" .exe | tr '[:upper:]' '[:lower:]')"
|
||||
create_desktop "$name_desktop" "$full_exe_path" "$png_name"
|
||||
else
|
||||
print_warning "Файл $full_exe_path не найден, пропускаем создание ярлыка"
|
||||
fi
|
||||
fi
|
||||
done < "$new_prefix_path/desktop.list"
|
||||
fi
|
||||
|
||||
try_remove_dir "$temp_extract_dir"
|
||||
print_ok "Восстановление префикса \"$new_prefix_name\" завершено."
|
||||
return 0
|
||||
}
|
||||
|
||||
remove_prefix() {
|
||||
local prefix_name="$1"
|
||||
local prefix_path="$WH_PREFIXES_DIR/$prefix_name"
|
||||
|
||||
if [[ -z "$prefix_name" ]]; then
|
||||
print_error "Не указано имя префикса для удаления."
|
||||
echo "Использование: $SCRIPT_NAME remove-prefix [имя_префикса]"
|
||||
echo "Доступные префиксы:"
|
||||
ls -1 "$WH_PREFIXES_DIR"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ ! -d "$prefix_path" ]]; then
|
||||
print_error "Префикс "$prefix_name" не найден."
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ ! $2 =~ --force|-y ]] ; then
|
||||
echo "======================================================"
|
||||
print_warning "Вы собираетесь удалить префикс "$prefix_name"."
|
||||
echo "Это приведёт к:"
|
||||
echo " - Полному удалению всех данных префикса"
|
||||
echo " - Удалению всех программ, установленных в этом префиксе"
|
||||
echo " - Удалению связанных ярлыков из меню и рабочего стола"
|
||||
echo "======================================================"
|
||||
read -p "Продолжить удаление? (y/N): " answer
|
||||
|
||||
if [[ ! "$answer" =~ ^[YyДд]$ ]]; then
|
||||
print_info "Удаление префикса отменено."
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
try_remove_dir "$prefix_path"
|
||||
|
||||
if [[ $? -eq 0 ]]; then
|
||||
print_ok "Префикс "$prefix_name" успешно удален."
|
||||
|
||||
for desktop_file in "$WH_MENU_DIR"/*.desktop; do
|
||||
if grep -q "$prefix_path" "$desktop_file"; then
|
||||
desktop_name=$(basename "$desktop_file")
|
||||
remove_desktop "${desktop_name%.*}"
|
||||
fi
|
||||
done
|
||||
|
||||
return 0
|
||||
else
|
||||
print_error "Не удалось удалить префикс "$prefix_name"."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
remove_winehelper () {
|
||||
local answer
|
||||
if [[ $1 =~ --force|-y ]] ; then
|
||||
answer="y"
|
||||
else
|
||||
echo "======================================================"
|
||||
print_warning "Вы собираетесь удалить WineHelper и все связанные с ним данные."
|
||||
echo " Это удалит:"
|
||||
echo " - Все настройки WineHelper"
|
||||
echo " - Все приложения/программы, установленные через WineHelper"
|
||||
echo " - Все ярлыки из меню и с рабочего стола созданные с помощью WineHelper"
|
||||
echo "======================================================"
|
||||
echo "Продолжить? (y/N)"
|
||||
read -r answer
|
||||
|
||||
if [[ "$answer" =~ ^[YyДд]$ ]] ; then
|
||||
# Второе подтверждение
|
||||
echo "----------------------------------------------"
|
||||
print_warning " ВЫ ТОЧНО УВЕРЕНЫ?"
|
||||
echo "----------------------------------------------"
|
||||
echo "Продолжить? (y/N)"
|
||||
read -r answer
|
||||
else
|
||||
print_info "Удаление отменено."
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "$answer" =~ ^[YyДд]$ ]] ; then
|
||||
# Удаление рабочих каталогов
|
||||
try_remove_dir "$USER_WORK_PATH"
|
||||
|
||||
# Удаление файлов меню
|
||||
try_remove_dir "$WH_MENU_DIR"
|
||||
try_remove_file "$WH_MENU_CATEGORY"
|
||||
try_remove_file "$WH_MENU_CONFIG"
|
||||
|
||||
# Удаление desktop-файлов
|
||||
for desktop_file in "$(xdg-user-dir DESKTOP)"/*.desktop; do
|
||||
if grep -q "Exec=env \"$RUN_SCRIPT\"" "$desktop_file"; then
|
||||
try_remove_file "$desktop_file"
|
||||
fi
|
||||
done
|
||||
|
||||
# Обновление кэша desktop-файлов
|
||||
update-desktop-database "$HOME/.local/share/applications"
|
||||
|
||||
# Удаление символических ссылок
|
||||
try_remove_file "$HOME/.winehelper"
|
||||
|
||||
print_info "WineHelper и все связанные данные успешно удалены."
|
||||
else
|
||||
print_info "Удаление отменено."
|
||||
fi
|
||||
}
|
||||
|
||||
wh_info () {
|
||||
echo "Использование: $SCRIPT_NAME [команда]
|
||||
|
||||
@ -1062,6 +1487,10 @@ wh_info () {
|
||||
|
||||
installed список установленных программ
|
||||
run [программа.exe] запуск программы (отладка)
|
||||
backup-prefix [имя_префикса] создать резервную копию префикса
|
||||
restore-prefix восстановить резервную копию префикса
|
||||
remove-all удалить WineHelper и все связанные данные
|
||||
remove-prefix [имя_префикса] удалить префикс и все связанные данные
|
||||
|
||||
Параметры:
|
||||
--help показать эту справку и выйти
|
||||
@ -1090,11 +1519,15 @@ case "${1,,}" in
|
||||
winereg|regedit) prepair_wine ; wine_run "regedit" ;;
|
||||
winefile|explorer) prepair_wine ; wine_run "winefile" ;;
|
||||
wineconsole|cmd) prepair_wine ; wine_run "wineconsole" ;;
|
||||
winetricks) shift ; update_winetricks ; prepair_wine ; "$WINETRICKS" -q "$@" ;;
|
||||
winetricks) shift ; prepair_wine ; "$WINETRICKS" -q "$@" ;;
|
||||
desktop) shift ; create_desktop "$@" ; exit 0 ;;
|
||||
install|-i) shift ; run_autoinstall "$@" ;;
|
||||
installed) shift ; check_installed_programs "$1" ;;
|
||||
run|-r) shift ; run_installed_programs "$1" ;;
|
||||
backup-prefix) shift ; backup_prefix "$@" ;;
|
||||
restore-prefix) shift ; restore_prefix "$@" ;;
|
||||
remove-all) shift ; remove_winehelper "$@ ";;
|
||||
remove-prefix) shift ; remove_prefix "$@" ;;
|
||||
*)
|
||||
if [[ -f "$1" ]] ; then
|
||||
WIN_FILE_EXEC="$(readlink -f "$1")"
|
||||
|
19204
winetricks_20250102
Executable file
19204
winetricks_20250102
Executable file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user