Điểm:1

Wine trong Docker - "reg add" chỉ giữ hiệu ứng tạm thời

lá cờ cn

Tôi đã đập đầu vào tường về điều này.

Tôi đang tìm cách thêm một tệp thực thi vào PATH dưới rượu trên Ubuntu 20.04. Đang cố định cấu hình cái này từ dockerfile, nhưng gặp sự cố lạ. Cụ thể, tôi đang cố cài đặt python dưới rượu để bạn có thể gọi trăn rượu. Tôi đã chọn thử sử dụng nhúng python và cài đặt thủ công qua pip get_pip.py (Không hiển thị ở đây).

Trong Dockerfile, tôi có:

TỪ Ubuntu:20.04

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

# KÉO /wine/winecfg từ máy chủ riêng được cấu hình sẵn

CHẠY dpkg --add-architecture i386 \
    && apt nhận bản cập nhật
    && apt get install -y \
    libc6:i386 \
    && apt get install -y \
    rượu=5.0-3

CHẠY mkdir -p /wine/winecfg && chown -R jenkins:users /wine

# Thêm Python nhúng
ARG Python_Embedded_Archive=python-3.9.7-embed-win32.zip
CHẠY cài đặt apt-get -y giải nén
SAO CHÉP ${Python_Embedded_Archive} /temp/${Python_Embedded_Archive}
CHẠY giải nén /temp/${Python_Embedded_Archive} -d /wine/python
CHẠY chmod +x /wine/python/python.exe
CHẠY chown jenkins: người dùng /wine/python

# Chuyển sang jenkins, công ty sở hữu rượu
NGƯỜI DÙNG jenkins:true

# Thêm Python nhúng vào PATH trong rượu
SAO CHÉP add_to_wine_path.sh /wine
CHẠY bash /wine/add_to_wine_path.sh /wine/python \
    && rượu trăn --version
RUN rượu trăn --version

Lưu ý: Đây không phải là dockerfile đầy đủ, chỉ là những phần có liên quan

Thư mục /wine/cfg là f

Với add_to_wine_path.sh:

path_to_add=$1
echo "Thêm '$path_to_add' vào biến PATH của Wine"

# Xóa các giá trị đường dẫn hiện tại (thường trống, nhưng tập lệnh có thể được gọi lần thứ hai)
hiện tại_path=$(wine reg QUERY 'HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -v PATH | grep -Po '(?<=\^%).*(?=\^%)')

# Nếu giá trị đường dẫn hiện tại trống
nếu [ -z $current_path" ]
sau đó
    # Đặt giá trị đường dẫn mặc định (đường dẫn Windows)
    hiện tại_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\;$current_path^% /f

Điều gì thực sự xảy ra:
Khi tôi xây dựng hình ảnh docker, cuộc gọi đầu tiên tới trăn rượu --version hoạt động, cho biết rằng PATH đã được cập nhật. CÓ!
Nhưng, khi lần thứ hai trăn rượu --version chạy ở một nơi khác CHẠY chặn, nó không thành công.

Đối với tôi, điều này có vẻ giống như sổ đăng ký cần phải được cập nhật cho tất cả người dùng trong wine, khởi động lại một cách hiệu quả.

Vì vậy, tôi đã cố gắng rượu vang với tất cả các tùy chọn khác nhau và điều đó vẫn không giúp được gì.

Bất kỳ chuyên gia Windows Registry hoặc Wine nào cũng biết chuyện gì đang xảy ra ở đây?

Điểm:1
lá cờ cn

Tôi cũng đã cố gắng duy trì thay đổi sổ đăng ký rượu trong Docker và qua thử nghiệm, tôi đã phát hiện ra rằng trong môi trường của mình, phải mất từ ​​1 đến 2 giây cho tệp đăng ký (~/.wine/user.reg) sẽ được sửa đổi sau khi gọi rượu reg thêm.

Có một truy vấn liên quan đây. Hy vọng rằng có một cách để xóa đồng bộ sổ đăng ký vào đĩa; mặt khác, điều dễ dàng nhất có thể là lặp lại cho đến khi tệp được sửa đổi.

Đây là cách tôi đã thực hiện trong một tình huống (thay đổi sổ đăng ký này bật tùy chọn "Hiển thị tệp dấu chấm"):

CHẠY before=$(stat -c '%Y' /home/xclient/.wine/user.reg) \
    && wine reg thêm 'HKEY_CURRENT_USER\Software\Wine' /v ShowDotFiles /d Y \
    && while [ $(stat -c '%Y' /home/xclient/.wine/user.reg) = $before ]; ngủ 1; xong

Đây là có thể an toàn vì đó là một thay đổi duy nhất đối với sổ đăng ký mặc định (không lớn lắm: chỉ có 16KB), nhưng tất cả mọi thứ có thể sai trong các tình huống phức tạp hơn:

  • Nếu bạn thực hiện nhiều sửa đổi đối với sổ đăng ký, chúng có thể không được xóa vào đĩa cùng một lúc, vì vậy việc xem ngày sửa đổi tệp sẽ không đủ
  • Có thể thoát khỏi vòng lặp trong khi tệp vẫn đang được ghi vào đĩa, vì vậy bạn sẽ nhận được một tệp đăng ký bị hỏng

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.