Compare commits

...

12 Commits

6 changed files with 1640 additions and 53 deletions

View File

@ -1,5 +1,18 @@
История изменений:
0.5.2:
* исправлен запуск winehelper.desktop для winehelper-qt
0.5.1:
* добавлена функция извлечения иконки из .exe файлов
* добавлен вывод истории изменений командой: winehelper --changelog
* добавлен графический режим Qt5 (альфа версия)
* обновлены скрипты для совместной работы с графическим режимом
* обновлены скрипты установок для t-flex-* (добавлена поддержка grdcontrol)
* добавлены ссылки на официальные сайты устанавливаемых приложений
* обновлены функции создания и восстановления резервных копий префиков
* добавлены иконки для приложения WineHelper
0.5.0:
* добавлен явный вывод отказа от ответственности и соглашения с ним
* обновлены все скрипты для установки t-flex-*

View File

@ -11,12 +11,13 @@ export WH_XDG_OPEN="log"
export INSTALL_DLL="corefonts d3dcompiler_47 dotnet48 vcrun2022 ucrtbase2019 msxml6 fontsmooth=rgb baekmuk droid eufonts ipamona liberation lucida opensymbol sourcehansans tahoma takao uff unifont vlgothic wenquanyi wenquanyizenhei"
export WH_USE_MESA_GL_OVERRIDE="1"
# Компоненты поддержки T-FLEX PLM 17 (Linux)
AUTOINSTALL_ZIP_LIN="$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux.zip"
AUTOINSTALL_DIR_LIN="$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux"
# Компоненты поддержки T-FLEX PLM (Linux)
GRDCONTROL_VER="4.3.0-0"
AUTOINSTALL_ZIP_LIN="$WH_TMP_DIR/Prerequisites_T-FLEX_Linux.zip"
AUTOINSTALL_DIR_LIN="$WH_TMP_DIR/Prerequisites_T-FLEX_Linux"
AUTOINSTALL_REG_LIN="$AUTOINSTALL_DIR_LIN/Components/fake_hasp.reg"
# Компоненты поддержки T-FLEX PLM 17 (Windows)
# Компоненты поддержки T-FLEX PLM (Windows)
AUTOINSTALL_ZIP_WIN="$WH_TMP_DIR/T-FLEX 17 Prerequisites.zip"
AUTOINSTALL_DIR_WIN="$WH_TMP_DIR/Компоненты поддержки T-FLEX 17"
AUTOINSTALL_EXE_WIN1="$AUTOINSTALL_DIR_WIN/Access Database Engine 2007/AccessDatabaseEngine.exe"
@ -26,28 +27,35 @@ AUTOINSTALL_EXE_WIN2="$AUTOINSTALL_DIR_WIN/TSC2/Setup_TSC2.msi"
prepair_wine
if [[ -d "$WINEPREFIX" ]] \
&& grep -q "t-flex-cad17-prepair" "$WINEPREFIX/winetricks.log" \
&& grep -q "t-flex-cad" "$WINEPREFIX/winetricks.log" \
&& systemctl list-units --type service --state running | grep aksusbd \
&& systemctl list-units --type service --state running | grep hasplmd
&& systemctl list-units --type service --state running | grep hasplmd \
&& rpm -q grdcontrol | grep -q "$GRDCONTROL_VER"
then
print_info "Префикс $PREFIX_NAME готов к установке ПО."
print_info "Сервисы: aksusbd и hasplmd уже запущены."
print_info "Сервисы: aksusbd и hasplmd уже запущены. grdcontrol-$GRDCONTROL_VER установлен."
else
print_warning "Службы aksusbd и hasplmd не запущены, или префикс не подготовлен"
print_info "Запускаем подготовку префикса скриптом: t-flex-cad17-prepair"
print_warning "Службы aksusbd и hasplmd не запущены, или grdcontrol-$GRDCONTROL_VER не установлен."
if [[ "$BASE_PFX" == "none" ]] \
|| ! systemctl list-units --type service --state running | grep aksusbd \
|| ! systemctl list-units --type service --state running | grep hasplmd
|| ! systemctl list-units --type service --state running | grep hasplmd \
|| ! rpm -q grdcontrol | grep -q "$GRDCONTROL_VER"
then
# Компоненты поддержки T-FLEX PLM 17 (Linux)
if try_download "https://www.tflex.ru/downloads/Prerequisites_T-FLEX_17_Linux.zip" "${AUTOINSTALL_ZIP_LIN}" ; then
# Компоненты поддержки T-FLEX PLM (Linux)
if try_download "https://www.tflex.ru/downloads/Prerequisites_T-FLEX_Linux.zip" "${AUTOINSTALL_ZIP_LIN}" ; then
unpack "$AUTOINSTALL_ZIP_LIN" "$AUTOINSTALL_DIR_LIN"
"$WINELOADER" regedit "$AUTOINSTALL_REG_LIN"
fi
if rpm -q grdcontrol | grep -q "$GRDCONTROL_VER"
then print_info "grdcontrol-$GRDCONTROL_VER уже установлен в системе."
else su_run rpm -iv "$AUTOINSTALL_DIR_LIN/Guardant_Linux/grdcontrol.x86_64.rpm"
fi
if [[ "$BASE_PFX" == "none" ]] ; then
# Компоненты поддержки T-FLEX PLM 17 (Windows)
print_info "Запускаем подготовку префикса."
# Компоненты поддержки T-FLEX PLM (Windows)
if try_download "https://www.tflex.ru/downloads/T-FLEX%2017%20Prerequisites.zip" "${AUTOINSTALL_ZIP_WIN}" ; then
unpack "$AUTOINSTALL_ZIP_WIN" "$WH_TMP_DIR"
unpack "$AUTOINSTALL_EXE_WIN1" "$AUTOINSTALL_EXE_WIN_MSI"
@ -57,13 +65,18 @@ else
fi
rm -fR "$DRIVE_C/Program Files/Common Files/System"
rm -fR "$DRIVE_C/Program Files (x86)/Common Files/System"
cp -r "$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux/Components/Program Files/Common Files/System" "$DRIVE_C/Program Files/Common Files"
cp -r "$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux/Components/Program Files (x86)/Common Files/System" "$DRIVE_C/Program Files (x86)/Common Files"
mv -f "$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux/Components/Windows/System32/"*.dll "$DRIVE_C/windows/system32"
"$WINELOADER" regedit "$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux/Components/ado-32.reg"
"$WINELOADER"64 regedit "$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux/Components/ado-64.reg"
"$WINELOADER" regedit "$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux/Components/tflex.reg"
cp -r "$AUTOINSTALL_DIR_LIN/Components/Program Files/Common Files/System" \
"$DRIVE_C/Program Files/Common Files"
cp -r "$AUTOINSTALL_DIR_LIN/Components/Program Files (x86)/Common Files/System" \
"$DRIVE_C/Program Files (x86)/Common Files"
mv -f "$AUTOINSTALL_DIR_LIN/Components/Windows/System32/"*.dll \
"$DRIVE_C/windows/system32"
"$WINELOADER" regedit "$AUTOINSTALL_DIR_LIN/Components/ado-32.reg"
"$WINELOADER"64 regedit "$AUTOINSTALL_DIR_LIN/Components/ado-64.reg"
"$WINELOADER" regedit "$AUTOINSTALL_DIR_LIN/Components/tflex.reg"
fi
if systemctl list-units --type service --state running | grep aksusbd \
@ -72,15 +85,15 @@ else
print_info "Службы aksusbd и hasplmd уже запущены. Пропускаем..."
else
echo "#!/usr/bin/env bash
cd \"$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux/HASP_Linux/aksusbd/\"
cd \"$AUTOINSTALL_DIR_LIN/HASP_Linux/aksusbd/\"
bash ./dinst
mv -f \"$WH_TMP_DIR/Prerequisites_T-FLEX_17_Linux/HASP_Linux/\"*.so /var/hasplm/
systemctl restart hasplmd.service" > "$WH_TMP_DIR/tflex17_aksusbd.sh"
chmod +x $WH_TMP_DIR/tflex17_aksusbd.sh
mv -f \"$AUTOINSTALL_DIR_LIN/HASP_Linux/\"*.so /var/hasplm/
systemctl restart hasplmd.service" > "$WH_TMP_DIR/tflex_aksusbd.sh"
chmod +x "$WH_TMP_DIR/tflex_aksusbd.sh"
unset TFLEX_ERROR
print_info "Будут установлены и запущены службы aksusbd и hasplmd."
su_run "$WH_TMP_DIR/tflex17_aksusbd.sh" || TFLEX_ERROR=1
try_remove_file "$WH_TMP_DIR/tflex17_aksusbd.sh"
su_run "$WH_TMP_DIR/tflex_aksusbd.sh" || TFLEX_ERROR=1
try_remove_file "$WH_TMP_DIR/tflex_aksusbd.sh"
fi
fi
@ -90,7 +103,7 @@ else
if [[ $TFLEX_ERROR == "1" ]] ; then
fatal "Произошла ошибка во время подготовки префикса, или установки компонентов ПО."
else
echo "t-flex-cad17-prepair" >> "$WINEPREFIX/winetricks.log"
echo "t-flex-cad-prepair" >> "$WINEPREFIX/winetricks.log"
try_remove_file "$AUTOINSTALL_ZIP_LIN"
try_remove_file "$AUTOINSTALL_ZIP_WIN"
print_info "Подготовка префикса и установка компонентов завершены."

View File

@ -180,13 +180,17 @@ fi
##### ROOT #####
su_run () {
local i="1"
while [[ $i -le "3" ]] ; do
print_info "Для продолжения установки введите root пароль (попытка $i из 3)..."
su - -c "$@" && return 0
((i++))
done
return 1
if [[ $WH_USE_GUI != "1" ]] ; then
local i="1"
while [[ $i -le "3" ]] ; do
print_info "Для продолжения установки введите root пароль (попытка $i из 3)..."
su - -c "$@" && return 0
((i++))
done
else
pkexec "$@" && return 0
fi
fatal "Не удалось установить необходимые компоненты!"
}
##### CHECK DEPENDENCIES #####
@ -1568,12 +1572,13 @@ backup_prefix() {
export WINEPREFIX="$1"
check_prefix_var
local backup_base_dir="$(xdg-user-dir DESKTOP)"
local backup_archive_name="backup_${PREFIX_NAME}_$(date +%Y.%m.%d).whpack"
local backup_dest_path="$backup_base_dir/$backup_archive_name"
local temp_backup_dir="$WH_TMP_DIR/backup_${PREFIX_NAME}_$(date +%Y.%m.%d)"
local temp_prefix_dir="$temp_backup_dir/prefixes/$PREFIX_NAME"
local temp_users_dir="$temp_prefix_dir/drive_c/users"
local backup_base_dir backup_archive_name backup_dest_path temp_backup_dir temp_prefix_dir temp_users_dir
backup_base_dir="$(xdg-user-dir DESKTOP)"
backup_archive_name="backup_${PREFIX_NAME}_$(date +%d.%m.%Y-%H.%M.%S).whpack"
backup_dest_path="$backup_base_dir/$backup_archive_name"
temp_backup_dir="$WH_TMP_DIR/backup_${PREFIX_NAME}_$(date +%d.%m.%Y-%H.%M.%S)"
temp_prefix_dir="$temp_backup_dir/prefixes/$PREFIX_NAME"
temp_users_dir="$temp_prefix_dir/drive_c/users"
print_info "Начало резервного копирования префикса: $PREFIX_NAME"
create_new_dir "$temp_backup_dir"
@ -1617,9 +1622,11 @@ backup_prefix() {
fi
fi
# Сохраняем метаданные внутри временной директории
echo "$PREFIX_NAME" > "$temp_backup_dir/prefix_name.whmeta"
print_info "Создание squashfs архива..."
if mksquashfs "$temp_backup_dir" "$backup_dest_path" -comp zstd ; then
echo -e "\n# PREFIX_NAME=$PREFIX_NAME" >> "$backup_dest_path"
print_ok "Архив префикса $PREFIX_NAME успешно создан по пути:\n$backup_dest_path"
else
print_error "Не удалось создать архив префикса $PREFIX_NAME."
@ -1651,15 +1658,7 @@ restore_prefix() {
print_info "Восстановление из резервной копии: $backup_archive_path"
prefix_name="$(tail -n1 "$backup_archive_path" | sed -e 's/.*PREFIX_NAME=//')"
if [[ -d "$WH_PREFIXES_DIR/$prefix_name" ]] ; then
fatal "Префикс $prefix_name уже существует!
Удалите его, если действительно желаете восстановить префикс заново.
Команда для удаления: $SCRIPT_NAME remove-prefix $prefix_name"
fi
temp_extract_dir="$WH_TMP_DIR/restore_$(basename "$backup_archive_path" .whpack)"
temp_extract_dir="$WH_TMP_DIR/restore_$(basename "$backup_archive_path" .whpack)_$$"
create_new_dir "$temp_extract_dir"
print_info "Распаковка архива..."
@ -1670,9 +1669,32 @@ restore_prefix() {
fatal "Не удалось распаковать архив."
fi
if [[ -d "$temp_extract_dir/prefixes" ]] ; then
local prefix_name
prefix_name="$(ls -1 "$temp_extract_dir/prefixes")"
# Определяем имя префикса
if [[ -f "$temp_extract_dir/prefix_name.whmeta" ]]; then
prefix_name="$(cat "$temp_extract_dir/prefix_name.whmeta")"
try_remove_file "$temp_extract_dir/prefix_name.whmeta"
elif grep -q "PREFIX_NAME=" "$backup_archive_path" ; then
# Обратная совместимость со старыми бэкапами (с приписанной строкой)
prefix_name="$(tail -n1 "$backup_archive_path" | sed -e 's/.*PREFIX_NAME=//')"
elif [[ -d "$temp_extract_dir/prefixes" ]] && [[ $(find "$temp_extract_dir/prefixes" -mindepth 1 -maxdepth 1 -type d | wc -l) -eq 1 ]]; then
# Обратная совместимость со старыми бэкапами (по имени каталога)
prefix_name="$(basename "$(find "$temp_extract_dir/prefixes" -mindepth 1 -maxdepth 1 -type d)")"
else
try_remove_dir "$temp_extract_dir"
fatal "Не удалось определить имя префикса в архиве (метаданные не найдены)."
fi
if [[ -z "$prefix_name" ]]; then
try_remove_dir "$temp_extract_dir"
fatal "Не удалось определить имя префикса в архиве."
fi
if [[ -d "$WH_PREFIXES_DIR/$prefix_name" ]] ; then
try_remove_dir "$temp_extract_dir"
fatal "Префикс $prefix_name уже существует!\n Удалите его, если действительно желаете восстановить префикс заново.\n Команда для удаления: $SCRIPT_NAME remove-prefix $prefix_name"
fi
if [[ -d "$temp_extract_dir/prefixes/$prefix_name" ]] ; then
local prefix_dir="$temp_extract_dir/prefixes/$prefix_name"
print_info "Восстановление префикса: $prefix_name"
@ -1711,7 +1733,7 @@ restore_prefix() {
fi
else
try_remove_dir "$temp_extract_dir"
fatal "Директория prefixes не найдена в архиве."
fatal "Директория префикса '$prefix_name' не найдена в архиве."
fi
try_remove_dir "$temp_extract_dir"

9
winehelper.desktop Normal file
View File

@ -0,0 +1,9 @@
[Desktop Entry]
Name=WineHelper
Exec=winehelper gui %F
Comment=Launching the graphics interface for Winehelper
Comment[ru]=Запуск графического интерфейса WineHelper
Type=Application
Categories=WineHelper;Utility;Emulator;
StartupNotify=true
Icon=winehelper

1530
winehelper_gui.py Normal file

File diff suppressed because it is too large Load Diff