Я бился головой об стену по этому поводу.
Я хочу добавить исполняемый файл в PATH под вином в Ubuntu 20.04.
Попытка настроить это из файла докеров, но возникла странная проблема.
В частности, я пытаюсь установить python под вином, чтобы вы могли позвонить винный питон
. Я решил попробовать использовать встроенный Python и вручную установить pip через get_pip.py
(здесь не показано).
В Dockerfile у меня есть:
ИЗ убунту: 20.04
RUN useradd --no-log-init -r --uid 1003 -G dialout -g 100 -s /bin/bash jenkins
# ПОЛУЧИТЬ /wine/winecfg с предварительно настроенного частного сервера
ЗАПУСК dpkg --add-архитектура i386 \
&& получить обновление
&& получить установку -y \
libc6:i386 \
&& получить установку -y \
вино=5.0-3
RUN mkdir -p /wine/winecfg && chown -R jenkins:users /wine
# Добавляем встроенный Python
Архив Python_Embedded_Archive=python-3.9.7-embed-win32.zip
ВЫПОЛНИТЬ apt-get install -y разархивировать
COPY ${Python_Embedded_Archive} /temp/${Python_Embedded_Archive}
RUN unzip /temp/${Python_Embedded_Archive} -d /wine/python
ЗАПУСК chmod +x /wine/python/python.exe
БЕГИ chown jenkins:users /wine/python
# Переключиться на jenkins, которому принадлежит вино
ПОЛЬЗОВАТЕЛЬ Дженкинс: правда
# Добавляем встроенный Python в PATH в Wine
КОПИРОВАТЬ add_to_wine_path.sh /wine
ЗАПУСК bash /wine/add_to_wine_path.sh /wine/python \
&& винный питон --версия
ЗАПУСТИТЬ винный питон --версия
Примечание. Это не полный файл докера, а только соответствующие части.
Папка /wine/cfg находится в
С add_to_wine_path.sh
:
path_to_add=$1
echo "Добавление '$path_to_add' в переменную PATH Wine"
# Очистить текущие значения пути (как правило, пустые, но скрипт может быть вызван во второй раз)
существующий_путь=$(винный регистр QUERY 'HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -v PATH | grep -Po '(?<=\^%).*(?=\^%)')
# Если существующее значение пути пусто
если [ -z $существующий_путь" ]
тогда
# Установить значения пути по умолчанию (пути Windows)
существующий_путь = "C:\windows\system32;C:\windows"
фи
wine reg add 'HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -v PATH /t REG_EXPAND_SZ /d ^%\;&path_to_add\;$existing_path^% /f
Что происходит на самом деле:
Когда я создаю образ докера, первый вызов винный питон --версия
работает, указывая на то, что PATH был обновлен. УРА!
Но, когда второй винный питон --версия
работает в другом БЕГ
блокировать, не получается.
Мне кажется, что реестр необходимо принудительно обновить для всех пользователей в вине, фактически перезагрузка.
Так что я попытался винный сапог
со всеми различными вариантами, и это все еще не помогло.
Любой гуру реестра Windows или Wine знает, что здесь происходит?