Puncte:1

Vin în Docker - „reg add” păstrează efectele doar temporar

drapel cn

M-am lovit cu capul de un perete despre asta.

Caut să adaug un executabil la PATH sub wine pe Ubuntu 20.04. Încerc să configurez acest lucru din fișierul docker, dar am o problemă ciudată. Mai exact, încerc să instalez python sub wine, astfel încât să puteți apela piton de vin. Am ales să încerc să folosesc python încorporat și să instalez manual pip through get_pip.py (Nu este afișat aici).

În Dockerfile, am:

DIN ubuntu:20.04

RUN useradd --no-log-init -r --uid 1003 -G dialout -g 100 -s /bin/bash jenkins

# PULL /wine/winecfg de pe serverul privat preconfigurat

RUN dpkg --add-architecture i386 \
    && apt obține actualizare
    && apt get install -y \
    libc6:i386 \
    && apt get install -y \
    vin=5,0-3

RUN mkdir -p /wine/winecfg && chown -R jenkins:utilizatori /vin

# Adăugați Embedded Python
ARG Python_Embedded_Archive=python-3.9.7-embed-win32.zip
RUN apt-get install -y unzip
COPIEAZĂ ${Python_Embedded_Archive} /temp/${Python_Embedded_Archive}
RUN unzip /temp/${Python_Embedded_Archive} -d /wine/python
RUN chmod +x /wine/python/python.exe
RUN chown jenkins: utilizatorii /wine/python

# Treceți la jenkins, care deține vin
UTILIZATOR jenkins: adevărat

# Adăugați Embedded Python la PATH în vin
COPY add_to_wine_path.sh /wine
RUN bash /wine/add_to_wine_path.sh /wine/python \
    && wine python --versiune
RUN wine python --versiune

Notă: Acesta nu este fișierul docker complet, ci doar părțile relevante

Dosarul /wine/cfg este f

Cu add_to_wine_path.sh:

path_to_add=$1
echo „Adăugarea „$path_to_add” la variabila PATH a lui Wine”

# Curățați valorile căii curente (în general goale, dar scriptul poate fi apelat a doua oară)
existent_path=$(INTERROARE regul vinurilor 'HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -v PATH | grep -Po '(?<=\^%).*(?=\^%)')

# Dacă valoarea căii existente este goală
dacă [ -z $cale_existent" ]
atunci
    # Setați valorile implicite ale căilor (căi Windows)
    existent_path="C:\windows\system32;C:\windows"
fi

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

Ce se întâmplă de fapt:
Când construiesc imaginea docker, primul apel la wine python --versiune funcționează, indicând că PATH a fost actualizat. URA!
Dar, când al doilea wine python --versiune rulează într-un alt mod ALERGA bloc, eșuează.

Acest lucru mi se pare că registrul trebuie să fie forțat să se actualizeze pentru toți utilizatorii din wine, efectiv o repornire.

Așa că am încercat cizma de vin cu toate opțiunile diferite și asta tot nu a ajutat.

Orice expert în Registrul Windows sau Wine știe ce se întâmplă aici?

Puncte:1
drapel cn

Am încercat să persist o modificare a registrului de vinuri și în Docker și am descoperit prin experimente că în mediul meu durează între 1 și 2 secunde pentru fișierul de registru (~/.vin/user.reg) pentru a fi modificate după invocare vin reg add.

Există o interogare asociată Aici. Sperăm că există o modalitate de a șterge sincron registry pe disc; altfel, cel mai ușor ar putea fi să faci bucla până când fișierul este modificat.

Iată cum am procedat într-o singură situație (această modificare a registrului activează opțiunea „Afișează fișierele cu puncte”):

RUN before=$(stat -c '%Y' /home/xclient/.wine/user.reg) \
    && regul vinului adaugă „HKEY_CURRENT_USER\Software\Wine” /v ShowDotFiles /d Y \
    && while [ $(stat -c '%Y' /home/xclient/.wine/user.reg) = $before ]; dormi 1; Terminat

Aceasta este probabil sigur pentru că este o singură modificare a registrului implicit (care nu este foarte mare: doar 16KB aparent), dar tot felul de lucruri ar putea merge prost în situații mai complexe:

  • Dacă faceți mai multe modificări în registry, este posibil ca acestea să nu fie toate scoase pe disc în același timp, așa că analizarea datei modificării fișierului ar fi insuficientă
  • Este posibil să părăsiți bucla în timp ce fișierul este încă scris pe disc, astfel încât veți ajunge cu un fișier de registry corupt

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.