Compare commits

..

4 Commits

Author SHA1 Message Date
6f50e5e0cf added backup/restore pfx 2025-06-14 07:52:26 +00:00
a58c477e32 fix 2025-06-14 06:47:01 +00:00
61c1d81192 Обновить README.md
fix command
2025-06-14 06:38:44 +00:00
19fdd64d1f added README.md 2025-06-14 12:11:50 +06:00
2 changed files with 170 additions and 175 deletions

163
README.md Normal file
View File

@ -0,0 +1,163 @@
<div align="center">
<h1 align="center">WineHelper</h1>
<p align="center">WineHelper - предназначен для упрощения установки windows-приложений, с помощью подготовленных скриптов, в разные префиксы и используя портативные версии wine для максимальной повторяемости на различных системах, начиная с релиза p10 Alt Linux и выше.</p>
</div>
## Установка
```
su -
apt-get update && apt-get dist-upgrade
apt-get install winehelper
exit
```
## Использование WineHelper
### Список приложений для установки
Для вывода списка доступных к установке приложений:
```
winehelper install list
```
либо использовать сокращенную команду:
```
winehelper -i
```
### Запуск установки приложений
В списках есть 2 вида установщиков:
**Список программ с возможностью автоматической установки** - содержит полностью автоматизированные скрипты установок программ у которых есть дистрибутивы (установщики) в свободном доступе.
Пример:
```
winehelper install spravki-bk
```
либо использовать сокращенную команду:
```
winehelper -i spravki-bk
```
**Список программ с возможностью установки из существующего дистрибутива** - содержит скрипты установок для программ которых нет в свободном доступе.
Пример:
```sh
winehelper install is-record-station "/путь/до/установочногоайла"
```
либо использовать сокращенную команду:
```sh
winehelper -i is-record-station "/путь/до/установочногоайла"
```
### Процесс установки приложений
1. при первом запуске winehelper произойдет проверка на дополнительные зависимости и при необходимости будет запрос ввода root пароля для установки пакетов
2. далее будет предложено принять лицензионные соглашения использования сторонних компонентов, для продолжения нажмите любую клавишу на клавиатуре
3. на данном этапе, в большей части скриптов, всё устанавливается автоматически с подробным выводом информации в терминале:
- загрузка необходимой версии wine, с последующей проверкой хэш-суммы
- загрузка базового префикса, с последующей проверкой хэш-суммы
- первичные обновление и подготовка префикса
- скачивание дистрибутива (установщика) программы с официального сайта
- установка программы
- создание desktop файла (ярлыка) на рабочем столе и в меню
Если устанавливаемое приложение требует дополнительных действий от пользователя, об этом будет явно написано в терминале.
### Процесс удаления префикса с приложением
Выполняем команду:
```sh
winehelper remove-prefix
```
и видим список префиксов доступных для удаления, например:
```sh
winehelper remove-prefix spravki-bk
```
после подтверждения клавишей "y" полностью удалит префикс с ПО и desktop файлы (ярлыки)
### Процесс удаления WineHelper
Выполняем команду:
```sh
winehelper remove-all
```
после подтверждения клавишей "y" данная команда удалить WineHelper и все связанные данные (префиксы, ярлыки, wine, прогаммы установленные с помощью WineHelper)
### Процесс создания резервной копии префикса
Выполняем команду:
```sh
winehelper backup-prefix "имя префикса"
```
команда создаст резервную копию префикса на рабочем столе в виде архива backup_имя_префикса_год.месяц.цисло.whpack
### Процесс восстановления резервной копии префикса
Выполняем команду:
```sh
winehelper restore-prefix "/путь/к/архиву.whpack"
```
команда восстановит префикс из резервной копии а также desktop файлы и фалы меню
### Дополнительные команды
```sh
winehelper help
```
Вывод:
<pre>
Использование: $SCRIPT_NAME [команда]
Команды:
install list список возможных установочных скриптов
install [скрипт] запустить скрипт установки программы
install [скрипт] --clear-pfx не использовать подготовленный префикс для установки ПО
installed список установленных программ
run [программа.exe] запуск программы (отладка)
remove-all удалить WineHelper и все связанные данные
remove-prefix [имя_префикса] удалить префикс и все связанные данные
backup-prefix [имя_префикса] создать резервную копию префикса
restore-prefix [имя_префикса] восстановить префикс из резервной копии
Параметры:
--help показать эту справку и выйти
--version показать информацию о пакете и его версии
--debug [команда] включить режим логирования работы WINE
</pre>
## 🛠 Участие в разработке
Мы рады вашим Pull Request'ам! Вот как можно помочь:
1. **Сообщить о баге или предложить улучшение**
Откройте [Задачи](https://git.linux-gaming.ru/CastroFidel/winehelper/issues), опишите проблему или идею.
2. **Исправить баг или добавить функционал**
- Форкните репозиторий
- Создайте ветку (`git checkout -b feature/ваша-фича`)
- Закоммитьте изменения (`git commit -m 'Добавил ...'`)
- Запушьте в форк (`git push origin feature/ваша-фича`)
- Откройте Pull Request
3. **Помощь с документацией**
Исправления в документации тоже приветствуются!
Перед началом работы обсудите вашу идею в [Задачи](https://git.linux-gaming.ru/CastroFidel/winehelper/issues), чтобы избежать дублирования.

View File

@ -400,19 +400,14 @@ create_desktop () {
cp -f "$USER_WORK_PATH/$desktop_filename.desktop" "$WH_MENU_DIR/"
if [[ "$RESTORE_FROM_BACKUP" == "1" ]]; then
print_info "Пропускаем обновление desktop.list (режим восстановления из бэкапа)"
else
# добавляем информацию о приложении в "$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
create_new_dir "$WINEPREFIX/icons"
try_copy_file "$icon_file" "$WINEPREFIX/icons/"
echo "$name_desktop=${exe_file//$WINEPREFIX/}=$(basename "$icon_file")" >> "$WINEPREFIX/desktop.list"
# добавляем информацию о приложении в "$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
create_new_dir "$WINEPREFIX/icons"
try_copy_file "$icon_file" "$WINEPREFIX/icons/"
echo "$name_desktop=${exe_file//$WINEPREFIX/}=$(basename "$icon_file")" >> "$WINEPREFIX/desktop.list"
# создаем файл категории для меню
create_new_dir "$HOME/.local/share/desktop-directories"
@ -1318,165 +1313,6 @@ remove_winehelper () {
fi
}
backup_prefix() {
local prefix_name="$1"
local prefix_path="$WH_PREFIXES_DIR/$prefix_name"
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)"
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 "$temp_backup_dir"
create_new_dir "$temp_backup_dir/prefixes/"
create_new_dir "$temp_backup_dir/dist/"
print_info "Подготовка префикса к упаковке..."
if cp -a "$prefix_path" "$temp_backup_dir/prefixes/$prefix_name"; then
print_ok "Директория префикса подготовлена."
else
print_error "Не удалось подготовить директорию префикса."
try_remove_dir "$temp_backup_dir"
return 1
fi
if [[ -f "$prefix_path/last.conf" ]]; then
local wine_version_to_backup
wine_version_to_backup=$( (source "$prefix_path/last.conf" && echo "$WH_WINE_USE") )
if [[ -n "$wine_version_to_backup" && "$wine_version_to_backup" != system* && -d "$WH_DIST_DIR/$wine_version_to_backup" ]]; then
print_info "Копирование используемой версии Wine: $wine_version_to_backup..."
if ! cp -a "$WH_DIST_DIR/$wine_version_to_backup" "$temp_backup_dir/dist/"; then
print_error "Ошибка: не удалось скопировать версию Wine."
exit 1
fi
print_ok "Версия Wine скопирована."
fi
fi
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 temp_extract_dir
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)"
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
print_ok "Архив успешно распакован."
if [[ -d "$temp_extract_dir/dist" ]]; then
print_info "Восстановление версий Wine..."
# TODO: Нужно ли создавать директортю create_new_dir "$WH_DIST_DIR" и перезаписывать/удалять сушествующие файлы в /dist
if ! mv -n "$temp_extract_dir/dist"/* "$WH_DIST_DIR/"; then
print_warning "Не удалось восстановить версии Wine."
else
print_ok "Версии Wine восстановлены."
fi
fi
if [[ -d "$temp_extract_dir/prefixes" ]]; then
for prefix_dir in "$temp_extract_dir"/prefixes/*; do
local prefix_name=$(basename "$prefix_dir")
if [[ -d "$prefix_dir" ]]; then
print_info "Восстановление префикса: $prefix_name"
# TODO: Нужно ли удалять, перезаписывать или создавать новый префикс try_remove_dir "$WH_PREFIXES_DIR/$prefix_name"
if ! mv "$prefix_dir" "$WH_PREFIXES_DIR/"; then
print_error "Не удалось восстановить префикс $prefix_name."
else
print_ok "Префикс $prefix_name восстановлен."
print_info "Восстановление ярлыков для префикса $prefix_name..."
export RESTORE_FROM_BACKUP=1 # Устанавливаем флаг восстановления
while IFS='=' read -r line; do
local name_desktop=$(echo "$line" | cut -d'=' -f1)
local exe_path=$(echo "$line" | cut -d'=' -f2)
local icon_name=$(echo "$line" | cut -d'=' -f3)
local full_exe_path="$WH_PREFIXES_DIR/$prefix_name${exe_path}"
local full_icon_path="$WH_PREFIXES_DIR/$prefix_name/icons/${icon_name}"
if [[ -f "$full_exe_path" ]]; then
print_info "Создание ярлыка для $name_desktop"
create_desktop "$name_desktop" "$full_exe_path" "${icon_name%.*}"
else
print_warning "Исполняемый файл для ярлыка '$name_desktop' не найден: $full_exe_path"
fi
done < "$WH_PREFIXES_DIR/$prefix_name/desktop.list"
unset RESTORE_FROM_BACKUP # Снимаем флаг после завершения
print_ok "Ярлыки для префикса $prefix_name восстановлены."
fi
fi
done
else
print_error "Директория prefixes не найдена в архиве."
try_remove_dir "$temp_extract_dir"
return 1
fi
try_remove_dir "$temp_extract_dir"
print_ok "Полное восстановление завершено."
return 0
}
wh_info () {
echo "Использование: $SCRIPT_NAME [команда]
@ -1489,8 +1325,6 @@ wh_info () {
run [программа.exe] запуск программы (отладка)
remove-all удалить WineHelper и все связанные данные
remove-prefix [имя_префикса] удалить префикс и все связанные данные
backup-prefix [имя_префикса] создать резерную копию префикса
restore-prefix [имя_префикса] восстановить префикс из резервной копии
Параметры:
--help показать эту справку и выйти
@ -1524,8 +1358,6 @@ case "${1,,}" in
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 "$@" ;;
*)