Compare commits

...

11 Commits

8 changed files with 210 additions and 87 deletions

View File

@ -1,5 +1,17 @@
История изменений: История изменений:
0.4.9:
* добавлено автодопонение команд для zsh (zsh_completion)
0.4.8:
* все скрипты для программ daobit-* переведены из ручных установок в автоматические
0.4.7:
* обновлены скрипты установки и префикс для программ ved-* и ctm-*
* обновлены скрипты установки для программ daobit-*
* улучшено отображение шрифтов в ПО: Справки БК
* добавлена проверка хэш-суммы для сохраненных архивов
0.4.6: 0.4.6:
* добавлено автодопонение команд для bash (bash_completion) * добавлено автодопонение команд для bash (bash_completion)

View File

@ -1,4 +1,4 @@
# Auto-completion for winhelper # Auto-completion for winehelper
_winehelper_completions() { _winehelper_completions() {
local cur prev opts local cur prev opts
COMPREPLY=() COMPREPLY=()

View File

@ -0,0 +1,114 @@
#compdef winehelper
# shellcheck disable=SC2034,SC2206
_winehelper() {
local -a opts wine_cmd scripts installed prefixes
opts=(
'--help[Вывести справку]'
'--version[Показать информацию о пакете и его версии]'
'--debug[Режим отладки]'
'install[Запустить скрипт установки программы]'
'installed[Список установленных программ]'
'-r[Запуск программы (отладка)]'
'-i[Запустить скрипт установки программы]'
'remove-all[Удалить WineHelper и все связанные данные]'
'--clear-pfx[Очистить префикс \[имя_префикса\]]'
'killall[Убить все процессы]'
'remove-prefix[Удалить префикс и все связанные данные]'
'backup-prefix[Создать резерную копию префикса]'
'restore-prefix[восстановить префикс из резервной копии "путь/до/whpack"]'
)
wine_cmd=(
winecfg
winereg
winefile
wineconsole
winetricks
desktop
regedit
explorer
cmd
'run[Запуск программы (отладка)]'
)
local context state line
_arguments -C \
'1:command:->cmds' \
'2:subcommand or argument:->args'
case $state in
cmds)
_values 'winehelper options' "${opts[@]}" "${wine_cmd[@]}"
;;
args)
case $words[2] in
--debug)
_values 'wine commands' "${wine_cmd[@]}"
;;
install|-i)
_get_list_for_install
;;
run|installed)
_get_installed_list
;;
remove-prefix|backup-prefix)
_get_prefixes
;;
restore-prefix)
_files
;;
*)
_values 'winehelper options' "${opts[@]}" "${wine_cmd[@]}"
;;
esac
;;
esac
}
_get_prefixes () {
prefixes=( ${(f)"$(ls -1 ~/.local/share/winehelper/prefixes 2>/dev/null)"} )
if ((! ${#prefixes[@]} == 0 )); then
_values 'prefixes' "${prefixes[@]}"
fi
}
_get_list_for_install () {
packages=(${(f)"$(winehelper install list 2>/dev/null |
awk -F ' - ' '
/^[^ ]+ - \("/ {next}
/^[[:space:]]*$/ {next}
/^Информация:/ {next}
/^[^ ]+ - / {
name=$1;
desc=$2;
gsub(/^[[:space:]]+|[[:space:]]+$/, "", name);
gsub(/^[[:space:]]*"?|"?[[:space:]]*$/, "", desc);
if (name && desc) print name ":" desc
}
')"})
packages+=(
scadoffice:"SCAD Office"
t-flex-cad17-applications:"Приложения для T-FLEX CAD 17"
t-flex-cad17-resources:"Обучающие материалы T-FLEX CAD 17"
)
_describe 'packages' packages
}
_get_installed_list () {
installed=(
${(f)"$(grep -h 'Exec=env' ~/.local/share/winehelper/*.desktop 2>/dev/null |
awk -F'/' '{print $NF}' |
awk -F'"' '{print $1}')"}
)
if ((! ${#installed[@]} == 0 )); then
_values 'installed apps' "${installed[@]}"
fi
}
compdef _winehelper winehelper

View File

@ -9,23 +9,22 @@ export BASE_PFX="daobit_pfx_x86_v01"
export WH_WINDOWS_VER="10" export WH_WINDOWS_VER="10"
export WINEARCH="win32" export WINEARCH="win32"
export INSTALL_DLL="dotnet7 dotnetdesktop7 arial renderer=gdi" export INSTALL_DLL="dotnet7 dotnetdesktop7 arial renderer=gdi"
AUTOINSTALL_EXE="${WH_TMP_DIR}/setup_cs.exe"
AUTOINSTALL_UNPACK="${WH_TMP_DIR}/setup_cs" AUTOINSTALL_UNPACK="${WH_TMP_DIR}/setup_cs"
AUTOINSTALL_SETUP="${WH_TMP_DIR}/setup_cs/SETUP.EXE" AUTOINSTALL_SETUP="${WH_TMP_DIR}/setup_cs/SETUP.EXE"
EXE_SETUP_NAME="setup_cs.exe"
if [[ -f "$2" ]] && [[ $2 =~ $EXE_SETUP_NAME$ ]] ; then prepair_wine
prepair_wine if try_download "https://files.daobit.ru/CSERVICE/SFX/setup_cs.exe" "${AUTOINSTALL_EXE}" ; then
# фикс постоянного запроса обновления Windows # фикс постоянного запроса обновления Windows
get_and_set_reg_file --add 'Software\DAO\DAOSETUP' 'SkipKBCheck' 'REG_DWORD' "1" "userdef" get_and_set_reg_file --add 'Software\DAO\DAOSETUP' 'SkipKBCheck' 'REG_DWORD' "1" "userdef"
unpack "$2" "${AUTOINSTALL_UNPACK}" unpack "${AUTOINSTALL_EXE}" "${AUTOINSTALL_UNPACK}"
wine_run_install "${AUTOINSTALL_SETUP}" /cd /targetdir="C:\\\\Program Files\\\\DAO\\\\CSERVICE" /auto /hide wine_run_install "${AUTOINSTALL_SETUP}" /cd /targetdir="C:\\\\Program Files\\\\DAO\\\\CSERVICE" /auto /hide
WIN_FILE_EXEC="$DRIVE_C/Program Files/DAO/CSERVICE/CService32.exe" WIN_FILE_EXEC="$DRIVE_C/Program Files/DAO/CSERVICE/CService32.exe"
create_desktop "$PROG_NAME" "$WIN_FILE_EXEC" "$PROG_ICON" create_desktop "$PROG_NAME" "$WIN_FILE_EXEC" "$PROG_ICON"
try_remove_dir "$AUTOINSTALL_UNPACK" try_remove_dir "$AUTOINSTALL_UNPACK"
else try_remove_file "$AUTOINSTALL_EXE"
fatal "Не найден файл установки для $PROG_NAME. Перезапустите по примеру:
winehelper install $1 \"/путь/до/$EXE_SETUP_NAME\""
fi fi

View File

@ -9,23 +9,22 @@ export BASE_PFX="daobit_pfx_x86_v01"
export WH_WINDOWS_VER="10" export WH_WINDOWS_VER="10"
export WINEARCH="win32" export WINEARCH="win32"
export INSTALL_DLL="dotnet7 dotnetdesktop7 arial renderer=gdi" export INSTALL_DLL="dotnet7 dotnetdesktop7 arial renderer=gdi"
AUTOINSTALL_EXE="${WH_TMP_DIR}/setup_rk.exe"
AUTOINSTALL_UNPACK="${WH_TMP_DIR}/setup_rk" AUTOINSTALL_UNPACK="${WH_TMP_DIR}/setup_rk"
AUTOINSTALL_SETUP="${WH_TMP_DIR}/setup_rk/setup.exe" AUTOINSTALL_SETUP="${WH_TMP_DIR}/setup_rk/setup.exe"
EXE_SETUP_NAME="setup_rk.exe"
if [[ -f "$2" ]] && [[ $2 =~ $EXE_SETUP_NAME$ ]] ; then prepair_wine
prepair_wine if try_download "https://files.daobit.ru/RATLAS/SFX/setup_rk.exe" "${AUTOINSTALL_EXE}" ; then
# фикс постоянного запроса обновления Windows # фикс постоянного запроса обновления Windows
get_and_set_reg_file --add 'Software\DAO\DAOSETUP' 'SkipKBCheck' 'REG_DWORD' "1" "userdef" get_and_set_reg_file --add 'Software\DAO\DAOSETUP' 'SkipKBCheck' 'REG_DWORD' "1" "userdef"
unpack "$2" "${AUTOINSTALL_UNPACK}" unpack "${AUTOINSTALL_EXE}" "${AUTOINSTALL_UNPACK}"
wine_run_install "${AUTOINSTALL_SETUP}" /cd /targetdir="C:\\\\Program Files\\\\DAO\\\\RAtlas" /auto /hide wine_run_install "${AUTOINSTALL_SETUP}" /cd /targetdir="C:\\\\Program Files\\\\DAO\\\\RAtlas" /auto /hide
WIN_FILE_EXEC="$DRIVE_C/Program Files/DAO/RAtlas/ratlas.exe" WIN_FILE_EXEC="$DRIVE_C/Program Files/DAO/RAtlas/ratlas.exe"
create_desktop "$PROG_NAME" "$WIN_FILE_EXEC" "$PROG_ICON" create_desktop "$PROG_NAME" "$WIN_FILE_EXEC" "$PROG_ICON"
try_remove_dir "$AUTOINSTALL_UNPACK" try_remove_dir "$AUTOINSTALL_UNPACK"
else try_remove_file "$AUTOINSTALL_EXE"
fatal "Не найден файл установки для $PROG_NAME. Перезапустите по примеру:
winehelper install $1 \"/путь/до/$EXE_SETUP_NAME\""
fi fi

View File

@ -9,23 +9,22 @@ export BASE_PFX="daobit_pfx_x86_v01"
export WH_WINDOWS_VER="10" export WH_WINDOWS_VER="10"
export WINEARCH="win32" export WINEARCH="win32"
export INSTALL_DLL="dotnet7 dotnetdesktop7 arial renderer=gdi" export INSTALL_DLL="dotnet7 dotnetdesktop7 arial renderer=gdi"
AUTOINSTALL_EXE="${WH_TMP_DIR}/setup_ri.exe"
AUTOINSTALL_UNPACK="${WH_TMP_DIR}/setup_ri" AUTOINSTALL_UNPACK="${WH_TMP_DIR}/setup_ri"
AUTOINSTALL_SETUP="${WH_TMP_DIR}/setup_ri/setup.exe" AUTOINSTALL_SETUP="${WH_TMP_DIR}/setup_ri/setup.exe"
EXE_SETUP_NAME="setup_ri.exe"
if [[ -f "$2" ]] && [[ $2 =~ $EXE_SETUP_NAME$ ]] ; then prepair_wine
prepair_wine if try_download "https://files.daobit.ru/RINFO/SFX/setup_ri.exe" "${AUTOINSTALL_EXE}" ; then
# фикс постоянного запроса обновления Windows # фикс постоянного запроса обновления Windows
get_and_set_reg_file --add 'Software\DAO\DAOSETUP' 'SkipKBCheck' 'REG_DWORD' "1" "userdef" get_and_set_reg_file --add 'Software\DAO\DAOSETUP' 'SkipKBCheck' 'REG_DWORD' "1" "userdef"
unpack "$2" "${AUTOINSTALL_UNPACK}" unpack "${AUTOINSTALL_EXE}" "${AUTOINSTALL_UNPACK}"
wine_run_install "${AUTOINSTALL_SETUP}" /cd /targetdir="C:\\\\Program Files\\\\DAO\\\\RInfo" /auto /hide wine_run_install "${AUTOINSTALL_SETUP}" /cd /targetdir="C:\\\\Program Files\\\\DAO\\\\RInfo" /auto /hide
WIN_FILE_EXEC="$DRIVE_C/Program Files/DAO/RInfo/rinfo.exe" WIN_FILE_EXEC="$DRIVE_C/Program Files/DAO/RInfo/rinfo.exe"
create_desktop "$PROG_NAME" "$WIN_FILE_EXEC" "$PROG_ICON" create_desktop "$PROG_NAME" "$WIN_FILE_EXEC" "$PROG_ICON"
try_remove_dir "$AUTOINSTALL_UNPACK" try_remove_dir "$AUTOINSTALL_UNPACK"
else try_remove_file "$AUTOINSTALL_EXE"
fatal "Не найден файл установки для $PROG_NAME. Перезапустите по примеру:
winehelper install $1 \"/путь/до/$EXE_SETUP_NAME\""
fi fi

View File

@ -9,23 +9,22 @@ export BASE_PFX="daobit_pfx_x86_v01"
export WH_WINDOWS_VER="10" export WH_WINDOWS_VER="10"
export WINEARCH="win32" export WINEARCH="win32"
export INSTALL_DLL="dotnet7 dotnetdesktop7 arial renderer=gdi" export INSTALL_DLL="dotnet7 dotnetdesktop7 arial renderer=gdi"
AUTOINSTALL_EXE="${WH_TMP_DIR}/setup_rt.exe"
AUTOINSTALL_UNPACK="${WH_TMP_DIR}/setup_rt" AUTOINSTALL_UNPACK="${WH_TMP_DIR}/setup_rt"
AUTOINSTALL_SETUP="${WH_TMP_DIR}/setup_rt/setup.exe" AUTOINSTALL_SETUP="${WH_TMP_DIR}/setup_rt/setup.exe"
EXE_SETUP_NAME="setup_rt.exe"
if [[ -f "$2" ]] && [[ $2 =~ $EXE_SETUP_NAME$ ]] ; then prepair_wine
prepair_wine if try_download "https://files.daobit.ru/RTARIFF/SFX/setup_rt.exe" "${AUTOINSTALL_EXE}" ; then
# фикс постоянного запроса обновления Windows # фикс постоянного запроса обновления Windows
get_and_set_reg_file --add 'Software\DAO\DAOSETUP' 'SkipKBCheck' 'REG_DWORD' "1" "userdef" get_and_set_reg_file --add 'Software\DAO\DAOSETUP' 'SkipKBCheck' 'REG_DWORD' "1" "userdef"
unpack "$2" "${AUTOINSTALL_UNPACK}" unpack "${AUTOINSTALL_EXE}" "${AUTOINSTALL_UNPACK}"
wine_run_install "${AUTOINSTALL_SETUP}" /cd /targetdir="C:\\\\Program Files\\\\DAO\\\\RTariff" /auto /hide wine_run_install "${AUTOINSTALL_SETUP}" /cd /targetdir="C:\\\\Program Files\\\\DAO\\\\RTariff" /auto /hide
WIN_FILE_EXEC="$DRIVE_C/Program Files/DAO/RTariff/Tariff.exe" WIN_FILE_EXEC="$DRIVE_C/Program Files/DAO/RTariff/Tariff.exe"
create_desktop "$PROG_NAME" "$WIN_FILE_EXEC" "$PROG_ICON" create_desktop "$PROG_NAME" "$WIN_FILE_EXEC" "$PROG_ICON"
try_remove_dir "$AUTOINSTALL_UNPACK" try_remove_dir "$AUTOINSTALL_UNPACK"
else try_remove_file "$AUTOINSTALL_EXE"
fatal "Не найден файл установки для $PROG_NAME. Перезапустите по примеру:
winehelper install $1 \"/путь/до/$EXE_SETUP_NAME\""
fi fi

View File

@ -259,11 +259,13 @@ unpack () {
esac esac
create_new_dir "$2" create_new_dir "$2"
if [[ $skip_xattr == "1" ]] \ if [[ $skip_xattr == "1" ]] \
&& $command "$1" ${outarg}"$2" 2>&1 | grep -v "xattr" && $command "$1" ${outarg}"$2" 2>&1 | sed "/xattr/d"
then print_ok "Файл $1 распакован." then print_ok "Файл $1 распакован."
elif $command "$1" ${outarg}"$2" elif $command "$1" ${outarg}"$2"
then print_ok "Файл $1 распакован." then print_ok "Файл $1 распакован."
else fatal "Распаковать файл $1 не удалось!" else
try_remove_file "$1"
fatal "Распаковать файл $1 не удалось!"
fi fi
return 0 return 0
} }
@ -294,31 +296,46 @@ read_page () {
fi fi
} }
try_download () { check_file_sum () {
local DOWNLOAD_FILE_URL="${1// /%20}" local sha256sum_ext sha256sum_int check_file_path check_file_name
local OUTPUT_FILE="$2" check_file_path="$1"
local OUTPUT_FILE_NAME="$(basename "$OUTPUT_FILE")" check_file_name="$(basename "$check_file_path")"
print_info "Скачивание файла $OUTPUT_FILE_NAME..." sha256sum_ext=$(sha256sum "$check_file_path" | awk '{print $1}')
if curl -f --progress-bar -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" \ sha256sum_int="$(grep "$check_file_name" "$DATA_PATH/sha256sum.list" | awk '{print $1}')"
-L "$DOWNLOAD_FILE_URL" -o "$OUTPUT_FILE"
then if [[ "$sha256sum_ext" == "$sha256sum_int" ]] ; then
print_ok "Скачивание файла $OUTPUT_FILE_NAME прошло успешно." print_ok "Хэш-сумма файла $check_file_name успешно проверена."
if [[ "$3" == check256sum ]] ; then
SHA256SUM_EXT=$(sha256sum "$OUTPUT_FILE" | awk '{print $1}')
SHA256SUM_INT="$(grep "$OUTPUT_FILE_NAME" "$DATA_PATH/sha256sum.list" | awk '{print $1}')"
if [[ "$SHA256SUM_EXT" == "$SHA256SUM_INT" ]] ; then
print_ok "Хэш-сумма файла $OUTPUT_FILE_NAME успешно проверена."
return 0
else
fatal "Хэш-сумма файла $OUTPUT_FILE_NAME не совподает!"
return 1
fi
fi
return 0 return 0
else else
fatal "Скачивание файла: $OUTPUT_FILE_NAME завершилось с ошибкой!" try_remove_file "$check_file_path"
return 1 fatal "Хэш-сумма файла $check_file_name не совподает!"
fi
}
try_download () {
local download_file_url output_file output_file_name
download_file_url="${1// /%20}"
output_file="$2"
output_file_name="$(basename "$output_file")"
if [[ -f "$output_file" ]] ; then
print_info "Файл найден: $output_file"
[[ $3 == "check256sum" ]] && check_file_sum "$output_file"
return 0
else
print_info "Скачивание файла $output_file_name..."
if curl -f --progress-bar -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" \
-L "$download_file_url" -o "$output_file"
then
print_ok "Скачивание файла $output_file_name прошло успешно."
[[ $3 == "check256sum" ]] && check_file_sum "$output_file"
return 0
else
try_remove_file "$output_file"
fatal "Скачивание файла: $output_file_name завершилось с ошибкой!"
return 1
fi
fi fi
} }
@ -681,11 +698,11 @@ init_wine_ver () {
if [[ ! -d "$WINEDIR" ]] ; then if [[ ! -d "$WINEDIR" ]] ; then
WINE_URL="$CLOUD_URL/$WH_WINE_USE.tar.xz" WINE_URL="$CLOUD_URL/$WH_WINE_USE.tar.xz"
local WINE_PACKAGE="$WH_TMP_DIR/${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 try_download "$WINE_URL" "$WINE_PACKAGE" check256sum \
if unpack "$WINE_PACKAGE" "$WH_DIST_DIR/" ; then && unpack "$WINE_PACKAGE" "$WH_DIST_DIR/"
echo "$WH_WINE_USE" > "$WH_DIST_DIR/$WH_WINE_USE/version" then
try_remove_file "$WINE_PACKAGE" echo "$WH_WINE_USE" > "$WH_DIST_DIR/$WH_WINE_USE/version"
fi try_remove_file "$WINE_PACKAGE"
fi fi
fi fi
@ -730,15 +747,8 @@ init_wine_ver () {
CPCSP_PROXY_NAME="wine-cpcsp_proxy-$CPCSP_PROXY_VER" CPCSP_PROXY_NAME="wine-cpcsp_proxy-$CPCSP_PROXY_VER"
CPCSP_PROXY_URL="$CLOUD_URL/$CPCSP_PROXY_NAME.tar.xz" CPCSP_PROXY_URL="$CLOUD_URL/$CPCSP_PROXY_NAME.tar.xz"
if [[ ! -f "$WH_TMP_DIR/$CPCSP_PROXY_NAME" ]] ; then try_download "$CPCSP_PROXY_URL" "$WH_TMP_DIR/$CPCSP_PROXY_NAME.tar.xz" check256sum
print_info "Загрузка $CPCSP_PROXY_NAME.tar.xz" unpack "$WH_TMP_DIR/$CPCSP_PROXY_NAME.tar.xz" "$WH_TMP_DIR"
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/" cp -fr "$WH_TMP_DIR/$CPCSP_PROXY_NAME/"i386-* "${WINEDIR}/lib/wine/"
if [[ -d "${WINEDIR}/lib64" ]] ; then if [[ -d "${WINEDIR}/lib64" ]] ; then
@ -873,23 +883,15 @@ wait_wineserver () {
} }
get_base_pfx () { get_base_pfx () {
local FILE_NAME_PFX="$1" local pfx_file_name pfx_file_url pfx_tmp_path
local PFX_URL="$CLOUD_URL/${FILE_NAME_PFX}.tar.xz" pfx_file_name="${1}.tar.xz"
local PFX_TMP="$WH_TMP_DIR/pfx" pfx_file_url="$CLOUD_URL/$pfx_file_name"
create_new_dir "$PFX_TMP" pfx_tmp_path="$WH_TMP_DIR/pfx"
if [[ ! -f "$PFX_TMP/$FILE_NAME_PFX.tar.xz" ]] ; then create_new_dir "$pfx_tmp_path"
print_info "Загрузка базового префикса: ${FILE_NAME_PFX}" print_info "Загрузка архива базового префикса: $pfx_file_name"
if try_download "$PFX_URL" "$PFX_TMP/$FILE_NAME_PFX.tar.xz" check256sum try_download "$pfx_file_url" "$pfx_tmp_path/$pfx_file_name" check256sum
then unpack --skip-xattr "$PFX_TMP/$FILE_NAME_PFX.tar.xz" "$WINEPREFIX/" unpack --skip-xattr "$pfx_tmp_path/$pfx_file_name" "$WINEPREFIX/"
else try_remove_file "$PFX_TMP/$FILE_NAME_PFX.tar.xz"
fi
else
if ! unpack --skip-xattr "$PFX_TMP/$FILE_NAME_PFX.tar.xz" "$WINEPREFIX/" ; then
try_remove_file "${PFX_TMP}/${FILE_NAME_PFX}.tar.xz"
get_base_pfx "$FILE_NAME_PFX"
fi
fi
} }
check_prefix_var () { check_prefix_var () {
@ -1080,12 +1082,11 @@ init_wineprefix () {
if [[ $WH_USE_EXTRA_FONTS == "1" ]] \ if [[ $WH_USE_EXTRA_FONTS == "1" ]] \
&& [[ ! -e "$fonts_dir/${x_fonts_name}.installed" ]] && [[ ! -e "$fonts_dir/${x_fonts_name}.installed" ]]
then then
print_info "Устанавливаем дополнительные шрифты..."
local x_fonts_url="$CLOUD_URL/${x_fonts_name}.tar.xz" local x_fonts_url="$CLOUD_URL/${x_fonts_name}.tar.xz"
local x_fonts_tar="$WH_TMP_DIR/${x_fonts_name}.tar.xz" local x_fonts_tar="$WH_TMP_DIR/${x_fonts_name}.tar.xz"
if [[ ! -f "$x_fonts_tar" ]] ; then
try_download "$x_fonts_url" "$x_fonts_tar" check256sum print_info "Устанавливаем дополнительные шрифты..."
fi try_download "$x_fonts_url" "$x_fonts_tar" check256sum
unpack "$x_fonts_tar" "$fonts_dir/" unpack "$x_fonts_tar" "$fonts_dir/"
touch "$fonts_dir/${x_fonts_name}.installed" touch "$fonts_dir/${x_fonts_name}.installed"
fi fi