work with init_wine

This commit is contained in:
Mikhail Tergoev 2025-03-07 04:54:42 +03:00
parent df97448bdb
commit 9d0d2c8f68
4 changed files with 73 additions and 20 deletions

@ -1,7 +1,16 @@
{
"plugins_ver" : "20",
"libs_ver" : "52",
"used_wine" : "PROTON_LG",
"default_wine" : "WINE_LG_10-1",
"default_proton" : "PROTON_LG_9-19"
"default_proton" : "PROTON_LG_9-19",
"dxvk_git" : "2.5.3-31",
"dxvk_stable" : "1.10.3-28",
"dxvk_legacy" : "1.6.1",
"vkd3d_git" : "1.1-4367",
"vkd3d_stable" : "1.1-2602",
"plugins_ver" : "20",
"libs_ver" : "52"
}

@ -2,17 +2,21 @@ import os
from .log import *
# функции обработки переменных LINUX окружения
def print_env_var(var_name):
if var_name in os.environ:
value = os.environ[var_name]
log.info(f"Переменная {var_name}={value}")
else:
log.warning(f"Переменная {var_name} не определена")
def print_env_var(*var_name):
for v in var_name:
if v in os.environ:
value = os.environ[v]
log.info(f"Переменная {v}={value}")
else:
log.warning(f"Переменная {v} не определена")
def set_env_var(var_name, default_value):
def set_env_var_if_none(var_name, default_value):
if var_name not in os.environ or not os.environ[var_name]:
os.environ[var_name] = default_value
def set_env_var_force(var_name, value):
os.environ[var_name] = value
def get_env_var(var_name):
if var_name in os.environ and os.environ[var_name]:
return os.environ[var_name]
@ -39,11 +43,15 @@ def env_var(var_name, value):
match var_name:
case "WINEDLLOVERRIDES":
add_to_env_var("WINEDLLOVERRIDES", ";", value)
case "WINEDLLPATH":
add_to_env_var("WINEDLLPATH", ":", value)
case "VKD3D_CONFIG":
add_to_env_var("VKD3D_CONFIG", ";", value)
case "RADV_PERFTEST":
add_to_env_var("RADV_PERFTEST", ";", value)
case "PW_VK_INSTANCE_LAYERS":
add_to_env_var("PW_VK_INSTANCE_LAYERS", ":", value)
case "VK_INSTANCE_LAYERS":
add_to_env_var("VK_INSTANCE_LAYERS", ":", value)
case "LD_LIBRARY_PATH":
add_to_env_var("LD_LIBRARY_PATH", ":", value)
case "PATH":
add_to_env_var("PATH", ":", value)

@ -1,20 +1,56 @@
import os
from .log import *
from .env_var import *
from .files_worker import *
from .config_parser import *
def init_wine(dist_path):
used_wine_upper = var("used_wine").upper()
# TODO: будем переименовывать все каталоги wine в верхний регистр?
if used_wine_upper != "SYSTEM":
if used_wine_upper == "WINE_LG":
used_wine = var("default_wine")
elif used_wine_upper == "PROTON_LG":
used_wine = var("default_proton")
log.info(f"used wine: {used_wine}")
wine_path = dist_path + "/" + used_wine
log.info(wine_path)
if not os.path.exists(wine_path + "/bin/wine"):
# TODO: если нет wine то качаем и распаковываем
log.warning(f"{used_wine} not found. Try download...")
if not os.path.exists(wine_path + "/bin/wine"):
log.critical(f"{used_wine} not found. Interrupt!")
env_var("PATH", wine_path + "/bin")
env_var("LD_LIBRARY_PATH", wine_path + "/lib")
set_env_var_force("WINEDLLPATH", wine_path + "/lib/wine")
if os.path.exists(wine_path + "/lib64/"):
env_var("LD_LIBRARY_PATH", wine_path + "/lib64")
env_var("WINEDLLPATH", wine_path + "/lib64/wine")
wine_share = wine_path + "/share"
if os.path.exists(wine_share + "/espeak-ng-data/"):
set_env_var_force("ESPEAK_DATA_PATH", wine_share)
if os.path.exists(wine_share + "/media/"):
set_env_var_force("MEDIACONV_BLANK_VIDEO_FILE", wine_share + "/media/blank.mkv")
set_env_var_force("MEDIACONV_BLANK_AUDIO_FILE", wine_share + "/media/blank.ptna")
# TODO: mono, gecko
else:
# TODO: добавить системный вайн
...
# TODO: добавить проверку системного вайна
wine_path = "/usr"
# общие переменные окружения для любой версии wine
set_env_var_force("WINE", wine_path + "/bin/wine")
set_env_var_force("WINELOADER", wine_path + "/bin/wine")
set_env_var_force("WINESERVER", wine_path + "/bin/wineserver")
log.info(f"wine in used: {used_wine}")
print_env_var("WINELOADER", "WINESERVER", "WINEDLLPATH")
print_env_var("PATH", "LD_LIBRARY_PATH")
# print_env_var("ESPEAK_DATA_PATH", "MEDIACONV_BLANK_VIDEO_FILE", "MEDIACONV_BLANK_AUDIO_FILE")

@ -24,6 +24,9 @@ libs_path = data_path + "/libs_v" + var("libs_ver")
create_new_dir(dist_path, tmp_path, img_path, vulkan_path)
log.info(f"рабочий каталог: {work_path}")
log.info(f"принятые аргументы: {sys.argv[1:]}")
if __name__ == "__main__":
# TODO: реализовать все функции get_* в модуль downloader.py:
@ -48,7 +51,4 @@ if __name__ == "__main__":
# версия контейнера будет захардкожена, парсить ничего не надо
get_libs(libs_ver)
log.info(work_path)
log.info(sys.argv[1:])
init_wine(dist_path)