Compare commits

...

12 Commits

3 changed files with 127 additions and 78 deletions

View File

@ -1,5 +1,13 @@
История изменений: История изменений:
0.5.0:
* добавлен явный вывод отказа от ответственности и соглашения с ним
* обновлены все скрипты для установки t-flex-*
* добавлен wine_wh_tflex_10-9 с патчами для t-flex-*
* добавлена поддержка новых версий wine 10.3 и выше
* удален пакет libOSMesa из проверки на зависимости
* другие небольшие улучшения и оптимизации скриптов
0.4.9: 0.4.9:
* добавлено автодопонение команд для zsh (zsh_completion) * добавлено автодопонение команд для zsh (zsh_completion)

View File

@ -22,7 +22,7 @@ windows приложения. Подробнее по ссылке: https://www.
# fonts-ttf-ms # fonts-ttf-ms
apt-get install {i586-,}{glibc-core,libstdc++6,glibc-pthread,glibc-nss,\ apt-get install {i586-,}{glibc-core,libstdc++6,glibc-pthread,glibc-nss,\
libOSMesa,libnss-mdns,libunixODBC2,ocl-icd,libfreetype,libfontconfig1,\ libnss-mdns,libunixODBC2,ocl-icd,libfreetype,libfontconfig1,\
libgnutls30,libGL,libEGL,xorg-dri-swrast,xorg-dri-intel,xorg-dri-radeon,\ libgnutls30,libGL,libEGL,xorg-dri-swrast,xorg-dri-intel,xorg-dri-radeon,\
libvulkan1,libcups} || fatal "Не удалось установить зависимости." libvulkan1,libcups} || fatal "Не удалось установить зависимости."

View File

@ -39,6 +39,15 @@ fatal () {
[[ -n "$WINESERVER" ]] && "$WINESERVER" -w [[ -n "$WINESERVER" ]] && "$WINESERVER" -w
exit 1 exit 1
} }
print_confirmation () {
local answer
read -p "$@ (y/N): " answer
if [[ ! "$answer" =~ ^[Yy]$ ]] ; then
print_info "Отменено пользователем."
return 1
fi
}
##### CHECK VARIABLES ##### ##### CHECK VARIABLES #####
check_variables () { [[ -z ${!1} ]] && export $1="$2" ;} check_variables () { [[ -z ${!1} ]] && export $1="$2" ;}
@ -135,6 +144,11 @@ check_variables VKD3D_VER "1.1-2602"
export CLOUD_URL="https://cloud.linux-gaming.ru/portproton" export CLOUD_URL="https://cloud.linux-gaming.ru/portproton"
if env | grep license_agreement_file
then fatal "Обнаружена подмена переменной license_agreement_file!"
else readonly license_agreement_file="$(mktemp -d)/$((RANDOM % RANDOM))"
fi
##### CHECK NOEXEC FOR /HOME ##### ##### CHECK NOEXEC FOR /HOME #####
if mount -l | grep -E "[[:space:]]/home[[:space:]]" | grep -q "noexec" ; then if mount -l | grep -E "[[:space:]]/home[[:space:]]" | grep -q "noexec" ; then
fatal "/home примонтирован в /etc/fstab с аргументом noexec.\nЗапуск портативной версии wine не возможен из домашнего каталога." fatal "/home примонтирован в /etc/fstab с аргументом noexec.\nЗапуск портативной версии wine не возможен из домашнего каталога."
@ -154,7 +168,7 @@ su_run () {
##### CHECK DEPENDENCIES ##### ##### CHECK DEPENDENCIES #####
# fonts-ttf-ms # fonts-ttf-ms
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,\
libnss-mdns,libunixODBC2,ocl-icd,libfreetype,libfontconfig1,libgnutls30,libGL,\ libnss-mdns,libunixODBC2,ocl-icd,libfreetype,libfontconfig1,libgnutls30,libGL,\
libEGL,xorg-dri-swrast,xorg-dri-intel,xorg-dri-radeon,libvulkan1,libcups} 1>/dev/null libEGL,xorg-dri-swrast,xorg-dri-intel,xorg-dri-radeon,libvulkan1,libcups} 1>/dev/null
then then
@ -319,7 +333,42 @@ check_file_sum () {
fi fi
} }
print_license_agreement () {
if [[ -f "$license_agreement_file" ]] \
&& [[ "$(stat -c %a "$license_agreement_file" 2>/dev/null)" == "600" ]]
then return 0
fi
echo
print_warning "Лицензионные соглашения использования сторонних компонентов:
Некоторые компоненты, установленные в префикс и необходимые для запуска приложений, могут
быть защищены авторским правом или лицензионными соглашениями. Вы обязаны самостоятельно
убедиться в законности использования этих компонентов в вашей юрисдикции.
Мы не несём ответственности за нарушение лицензионных соглашений, связанное с использованием
подготовленного префикса, а так же за программное обеспечение поставляемого из сторонних источников.
Подтверждая продолжение установки, вы соглашаетесь что ознакомились с данным отказом от
ответственности и принимаете все риски, связанные с использованием программного обеспечения.
"
if print_confirmation "Подтвердите продолжение установки" ; then
touch "$license_agreement_file"
chmod 600 "$license_agreement_file"
cleanup_laf () {
local cleanup_laf_dir="$(dirname "$license_agreement_file")"
rm -r "$cleanup_laf_dir" || echo "Не удалось удалить каталог $cleanup_laf_dir"
}
trap "cleanup_laf" EXIT
return 0
else
exit 1
fi
}
try_download () { try_download () {
print_license_agreement
local download_file_url output_file output_file_name local download_file_url output_file output_file_name
download_file_url="${1// /%20}" download_file_url="${1// /%20}"
output_file="$2" output_file="$2"
@ -895,25 +944,33 @@ get_base_pfx () {
check_prefix_var () { check_prefix_var () {
if [[ -z "$WINEPREFIX" ]] ; then if [[ -z "$WINEPREFIX" ]] ; then
print_warning "Префикс не выбран."
local prefixes=() local prefixes=()
local count=1 local count=1
print_info "Доступные префиксы WineHelper:"
for prefix in "$WH_PREFIXES_DIR"/* ; do for prefix in "$WH_PREFIXES_DIR"/* ; do
if [[ -d "$prefix" ]]; then if [[ -d "$prefix" ]]; then
prefixes+=("$prefix") prefixes+=("$prefix")
echo "$count. $(basename "$prefix")"
((count++)) ((count++))
fi fi
done done
[[ ${#prefixes[@]} -eq 0 ]] && fatal "Не найдено ни одного префикса!" if [[ ${#prefixes[@]} -eq 0 ]]
then fatal "Не найдено ни одного префикса!"
else print_info "Доступные префиксы WineHelper:"
fi
echo "0 - Отмена"
for ((i=0; i<${#prefixes[@]}; i++)); do
echo "$((i+1)) - $(basename "${prefixes[$i]}")"
done
local max_choice=${#prefixes[@]} local max_choice=${#prefixes[@]}
read -p "Выберите префикс (1-$max_choice): " choice read -p "Выберите префикс (0-$max_choice): " choice
if [[ "$choice" -ge 1 && "$choice" -le "$max_choice" ]] ; then if [[ "$choice" == "0" ]]; then
print_info "Выбор префикса отменен."
exit 0
elif [[ "$choice" -ge 1 && "$choice" -le "$max_choice" ]] ; then
export WINEPREFIX="${prefixes[$choice-1]}" export WINEPREFIX="${prefixes[$choice-1]}"
else else
fatal "Неверный выбор." fatal "Неверный выбор."
@ -1186,25 +1243,6 @@ init_database () {
} }
prepair_wine () { prepair_wine () {
if [[ -n "$INSTALL_SCRIPT_NAME" ]] \
&& [[ "$FORCE_INSTALL" != "1" ]]
then
print_warning "Лицензионные соглашения использования сторонних компонентов:
Некоторые компоненты, установленные в префикс и необходимые для запуска приложений, могут
быть защищены авторским правом или лицензионными соглашениями. Вы обязаны самостоятельно
убедиться в законности использования этих компонентов в вашей юрисдикции.
Мы не несём ответственности за нарушение лицензионных соглашений, связанное с использованием
подготовленного префикса.
Продолжая использовать данное ПО вы подтверждаете, что ознакомились с данным отказом от
ответственности и принимаете все риски, связанные с его использованием.
"
print_info "Для продолжения нажмите любую клавишу на клавиатуре."
read -s -n 1
fi
var_winedlloverride_update "winemenubuilder.exe=d" var_winedlloverride_update "winemenubuilder.exe=d"
if [[ -n "$INSTALL_SCRIPT_NAME" ]] if [[ -n "$INSTALL_SCRIPT_NAME" ]]
@ -1281,21 +1319,35 @@ run_autoinstall () {
export INSTALL_SCRIPT INSTALL_MODE export INSTALL_SCRIPT INSTALL_MODE
if [[ $INSTALL_SCRIPT_NAME == "list" ]] || [[ -z "$INSTALL_SCRIPT_NAME" ]] ; then if [[ $INSTALL_SCRIPT_NAME == "list" ]] || [[ -z "$INSTALL_SCRIPT_NAME" ]] ; then
print_info "Список программ с возможностью автоматической установки:"
for list in $(ls "$WH_AUTOINSTALL_DIR") ; do list_install_scripts() {
AI_INFO="$(grep "info_ru:" "$WH_AUTOINSTALL_DIR/$list" | awk -F"info_ru: " '{print $2}')" local dir="$1"
AI_PROGNAME="$(grep "PROG_NAME=" "$WH_AUTOINSTALL_DIR/$list" | awk -F"PROG_NAME=" '{print $2}')" local title="$2"
echo -e "\n$list - $AI_PROGNAME" [[ ! -d "$dir" ]] || [[ -z "$(ls -A "$dir" 2>/dev/null)" ]] && return
echo "$AI_INFO"
done print_info "$title"
awk '
FNR==1 {
if (progname) {
printf "\n%s - %s\n%s\n", filename, progname, info
}
progname=""; info=""; filename=FILENAME
sub(".*/", "", filename)
}
/info_ru:/ { sub(/.*info_ru: /, ""); info=$0 }
/PROG_NAME=/ { sub(/.*PROG_NAME=/, ""); progname=$0 }
END {
if (progname) {
printf "\n%s - %s\n%s\n", filename, progname, info
}
}
' "$dir"/*
}
list_install_scripts "$WH_AUTOINSTALL_DIR" "Список программ с возможностью автоматической установки:"
echo echo
print_info "Список программ с возможностью установки из существующего дистрибутива:" list_install_scripts "$WH_MANUALINSTALL_DIR" "Список программ с возможностью установки из существующего дистрибутива:"
for list in $(ls "$WH_MANUALINSTALL_DIR") ; do
AI_INFO="$(grep "info_ru:" "$WH_MANUALINSTALL_DIR/$list" | awk -F"info_ru: " '{print $2}')"
AI_PROGNAME="$(grep "PROG_NAME=" "$WH_MANUALINSTALL_DIR/$list" | awk -F"PROG_NAME=" '{print $2}')"
echo -e "\n$list - $AI_PROGNAME"
echo "$AI_INFO"
done
elif [[ "$INSTALL_SCRIPT" != "0" ]] ; then elif [[ "$INSTALL_SCRIPT" != "0" ]] ; then
source "$INSTALL_SCRIPT" "$@" source "$INSTALL_SCRIPT" "$@"
print_info "Завершена установка $INSTALL_SCRIPT_NAME" print_info "Завершена установка $INSTALL_SCRIPT_NAME"
@ -1308,7 +1360,7 @@ run_autoinstall () {
remove_prefix() { remove_prefix() {
export WINEPREFIX="$1" export WINEPREFIX="$1"
if [[ -z "$WINEPREFIX" ]] if [[ -z "$WINEPREFIX" ]]
then print_error "Не указано имя префикса для удаления!" then print_warning "Не указано имя префикса для удаления. Выберите из списка..."
fi fi
check_prefix_var check_prefix_var
if [[ ! -d "$WINEPREFIX" ]] if [[ ! -d "$WINEPREFIX" ]]
@ -1323,11 +1375,8 @@ remove_prefix() {
echo " - Удалению всех программ, установленных в этом префиксе" echo " - Удалению всех программ, установленных в этом префиксе"
echo " - Удалению связанных ярлыков из меню и рабочего стола" echo " - Удалению связанных ярлыков из меню и рабочего стола"
echo "======================================================" echo "======================================================"
read -p "Продолжить удаление? (y/N): " answer if ! print_confirmation "Продолжить удаление?"
then exit 1
if [[ ! "$answer" =~ ^[YyДд]$ ]]; then
print_info "Удаление префикса отменено."
return 0
fi fi
fi fi
@ -1360,23 +1409,18 @@ remove_winehelper () {
echo " - Все приложения/программы, установленные через WineHelper" echo " - Все приложения/программы, установленные через WineHelper"
echo " - Все ярлыки из меню и с рабочего стола созданные с помощью WineHelper" echo " - Все ярлыки из меню и с рабочего стола созданные с помощью WineHelper"
echo "======================================================" echo "======================================================"
echo "Продолжить? (y/N)" if print_confirmation "Продолжить?" ; then
read -r answer
if [[ "$answer" =~ ^[YyДд]$ ]] ; then
# Второе подтверждение
echo "----------------------------------------------" echo "----------------------------------------------"
print_warning " ВЫ ТОЧНО УВЕРЕНЫ?" print_warning " ВЫ ТОЧНО УВЕРЕНЫ?"
echo "----------------------------------------------" echo "----------------------------------------------"
echo "Продолжить? (y/N)" if ! print_confirmation "Продолжить?"
read -r answer then exit 1
fi
else else
print_info "Удаление отменено." exit 1
return 1
fi fi
fi fi
if [[ "$answer" =~ ^[YyДд]$ ]] ; then
# Удаление рабочих каталогов # Удаление рабочих каталогов
try_remove_dir "$USER_WORK_PATH" try_remove_dir "$USER_WORK_PATH"
@ -1399,9 +1443,6 @@ remove_winehelper () {
try_remove_file "$HOME/.winehelper" try_remove_file "$HOME/.winehelper"
print_info "WineHelper и все связанные данные успешно удалены." print_info "WineHelper и все связанные данные успешно удалены."
else
print_info "Удаление отменено."
fi
} }
create_base_pfx () { create_base_pfx () {