Score:1

Wine in Docker - "reg add" เก็บเอฟเฟกต์ไว้ชั่วคราวเท่านั้น

ธง cn

ฉันเอาหัวโขกกำแพงเกี่ยวกับเรื่องนี้

ฉันต้องการเพิ่มไฟล์เรียกทำงานให้กับ PATH ภายใต้ไวน์บน Ubuntu 20.04 พยายามกำหนดค่านี้จาก dockerfile แต่มีปัญหาแปลก ๆ โดยเฉพาะอย่างยิ่ง ฉันกำลังพยายามติดตั้ง python under wine เพื่อให้คุณโทรได้ หลามไวน์. ฉันเลือกที่จะลองใช้งูหลามแบบฝังและติดตั้ง pip ผ่านด้วยตนเอง get_pip.py (ไม่แสดงที่นี่).

ใน Dockerfile ฉันมี:

จากอูบุนตู:20.04

RUN useradd --no-log-init -r --uid 1003 -G dialout -g 100 -s /bin/bash เจนกินส์

# ดึง /wine/winecfg จากเซิร์ฟเวอร์ส่วนตัวที่กำหนดค่าไว้ล่วงหน้า

RUN dpkg --add-architecture i386 \
    && ฉลาดรับการปรับปรุง
    && apt รับการติดตั้ง -y \
    libc6:i386 \
    && apt รับการติดตั้ง -y \
    ไวน์=5.0-3

RUN mkdir -p /wine/winecfg && chown -R เจนกินส์:ผู้ใช้ /ไวน์

# เพิ่ม Python ในตัว
ARG Python_Embedded_Archive=python-3.9.7-embed-win32.zip
RUN apt-get install -y เปิดเครื่องรูด
คัดลอก ${Python_Embedded_Archive} /temp/${Python_Embedded_Archive}
RUN เปิดเครื่องรูด /temp/${Python_Embedded_Archive} -d /wine/python
RUN chmod +x /wine/python/python.exe
รัน chown jenkins:users /wine/python

# เปลี่ยนเป็นเจนกินส์ซึ่งเป็นเจ้าของไวน์
ผู้ใช้เจนกินส์:จริง

# เพิ่ม Embedded Python ให้กับ PATH ในไวน์
คัดลอก add_to_wine_path.sh /wine
RUN ทุบตี /wine/add_to_wine_path.sh /wine/python \
    && หลามไวน์ --version
RUN หลามไวน์ --version

หมายเหตุ: นี่ไม่ใช่ไฟล์นักเทียบท่าแบบเต็ม แต่เป็นเพียงส่วนที่เกี่ยวข้อง

โฟลเดอร์ /wine/cfg คือ f

กับ add_to_wine_path.sh:

path_to_add=$1
echo "การเพิ่ม '$path_to_add' ให้กับตัวแปร PATH ของไวน์"

# รับค่าเส้นทางปัจจุบันที่สะอาด (โดยทั่วไปว่างเปล่า แต่สคริปต์สามารถเรียกเป็นครั้งที่สอง)
ที่มีอยู่_path=$(wine reg QUERY 'HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -v PATH | grep -Po '(?<=\^%).*(?=\^%)')

# หากค่าเส้นทางที่มีอยู่ว่างเปล่า
ถ้า [ -z $existing_path" ]
แล้ว
    # ตั้งค่าเส้นทางเริ่มต้น (เส้นทาง Windows)
    ที่มีอยู่_path="C:\windows\system32;C:\windows"
ไฟ

reg ไวน์เพิ่ม 'HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -v PATH /t REG_EXPAND_SZ /d ^%\;&path_to_add\;$existing_path^% /f

เกิดอะไรขึ้นจริง:
เมื่อฉันสร้างอิมเมจนักเทียบท่า การเรียกครั้งแรกไปที่ หลามไวน์ --version ทำงานโดยระบุว่า PATH ได้รับการอัปเดตแล้ว เย้!
แต่เมื่อวินาทีที่ หลามไวน์ --version ทำงานในที่แตกต่างกัน วิ่ง บล็อกมันล้มเหลว

สำหรับฉันแล้วดูเหมือนว่าจำเป็นต้องบังคับให้รีจิสตรีอัปเดตสำหรับผู้ใช้ทุกคนในไวน์และรีบูตเครื่องอย่างมีประสิทธิภาพ

ดังนั้นฉันจึงพยายาม ไวน์บูท ด้วยตัวเลือกต่างๆ ทั้งหมด แต่นั่นก็ไม่ได้ช่วยอะไร

กูรู Windows Registry หรือ Wine รู้ว่าเกิดอะไรขึ้นที่นี่?

Score:1
ธง cn

ฉันได้พยายามยืนยันการเปลี่ยนแปลงรีจิสตรีไวน์ใน Docker ด้วย และฉันพบจากการทดลองว่าในสภาพแวดล้อมของฉันจะใช้เวลาระหว่าง 1 ถึง 2 วินาทีสำหรับไฟล์รีจิสตรี (~/.wine/user.reg) ที่จะแก้ไขหลังจากเรียกใช้ เพิ่มไวน์เร็ก.

มีคำถามที่เกี่ยวข้อง ที่นี่. หวังว่าจะมีวิธีล้างรีจิสตรีลงดิสก์แบบซิงโครนัส มิฉะนั้นสิ่งที่ง่ายที่สุดอาจเป็นการวนซ้ำจนกว่าไฟล์จะถูกแก้ไข

นี่คือวิธีที่ฉันทำในสถานการณ์เดียว (การเปลี่ยนแปลงรีจิสทรีนี้เปิดใช้งานตัวเลือก "แสดงไฟล์จุด"):

RUN before=$(stat -c '%Y' /home/xclient/.wine/user.reg) \
    && reg ไวน์เพิ่ม 'HKEY_CURRENT_USER\Software\Wine' /v ShowDotFiles /d Y \
    && ในขณะที่ [ $(stat -c '%Y' /home/xclient/.wine/user.reg) = $before ]; นอน 1; เสร็จแล้ว

นี่คือ อาจจะ ปลอดภัยเพราะเป็นการเปลี่ยนแปลงครั้งเดียวกับรีจิสทรีเริ่มต้น (ซึ่งไม่ใหญ่มาก: เห็นได้ชัดว่ามีเพียง 16KB) แต่ทุกสิ่งอาจผิดพลาดได้ในสถานการณ์ที่ซับซ้อนกว่านี้:

  • หากคุณแก้ไขรีจิสทรีหลายรายการ อาจไม่ล้างข้อมูลทั้งหมดลงดิสก์พร้อมกัน ดังนั้นการดูวันที่แก้ไขไฟล์อาจไม่เพียงพอ
  • อาจเป็นไปได้ที่จะออกจากลูปในขณะที่ไฟล์ยังถูกเขียนลงดิสก์ ดังนั้นคุณจะพบกับไฟล์รีจิสตรีที่เสียหาย

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา