أو تواصل عبر Linkedin إذا كان خاصًا: https://www.linkedin.com/in/sickcodes
أو عبر https://sick.codes/contact/
تتم صيانة هذا المشروع بواسطة Sick.Codes. (تغريد)
يمكن العثور على اعتمادات إضافية هنا: https://github.com/sickcodes/Docker-OSX/blob/master/CREDITS.md
بالإضافة إلى ذلك، يمكن العثور على قائمة شاملة بجميع المساهمين هنا: https://github.com/sickcodes/Docker-OSX/graphs/contributors
شكرًا جزيلاً لـkholia على الحفاظ على المشروع الأولي، الذي تم بناء Docker-OSX فوقه: OSX-KVM.
شكرًا خاصًا أيضًا لـthenickdude الذي يحافظ على الشوكة القيمة KVM-OpenCore، والتي بدأها @Leoyzen!
شكر خاص إضافي لفريق OpenCore على: https://github.com/acidanthera/OpenCorePkg. يوفر برنامج تحميل التشغيل الذي يتم صيانته جيدًا الكثير من الوظائف الرائعة التي يستمتع بها مستخدمو Docker-OSX :)
إذا أعجبك هذا المشروع، ففكر في المساهمة هنا أو في المنبع!
يتوفر أيضًا البرنامج التعليمي لإعداد الفيديو هنا: https://www.youtube.com/watch?v=wLezYl77Ll8
لمستخدمي Windows: انقر هنا لرؤية الملاحظات أدناه!
أول مرة هنا؟ حاول الإعداد الأولي، وإلا جرب الإرشادات أدناه لاستخدام Catalina أو Big Sur.
أسماء الإصدارات وإصداراتها:
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e SHORTNAME=catalina
sickcodes/docker-osx:latest
# docker build -t docker-osx .
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e SHORTNAME=big-sur
sickcodes/docker-osx:latest
# docker build -t docker-osx .
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e GENERATE_UNIQUE=true
-e MASTER_PLIST_URL= ' https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-custom.plist '
-e SHORTNAME=monterey
sickcodes/docker-osx:latest
# docker build -t docker-osx .
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e GENERATE_UNIQUE=true
-e MASTER_PLIST_URL= ' https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-custom.plist '
-e SHORTNAME=ventura
sickcodes/docker-osx:latest
# docker build -t docker-osx .
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e GENERATE_UNIQUE=true
-e CPU= ' Haswell-noTSX '
-e CPUID_FLAGS= ' kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on '
-e MASTER_PLIST_URL= ' https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-custom-sonoma.plist '
-e SHORTNAME=sonoma
sickcodes/docker-osx:latest
# docker build -t docker-osx .
# 40GB disk space required: 20GB original image 20GB your container.
docker pull sickcodes/docker-osx:auto
# boot directly into a real OS X shell with a visual display [NOT HEADLESS]
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e GENERATE_UNIQUE=true
sickcodes/docker-osx:auto
# username is user
# password is alpine
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e SHORTNAME=high-sierra
sickcodes/docker-osx:latest
# docker build -t docker-osx .
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e SHORTNAME=mojave
sickcodes/docker-osx:latest
# docker build -t docker-osx .
هذه طريقة جيدة بشكل خاص لتنزيل الحاوية، في حالة بطء شبكة CDN الخاصة بـ Docker (أو اتصالك).
wget https://images2.sick.codes/mac_hdd_ng_auto.img
docker run -it
--device /dev/kvm
-p 50922:10022
-v " ${PWD} /mac_hdd_ng_auto.img:/image "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e GENERATE_UNIQUE=true
-e MASTER_PLIST_URL=https://raw.githubusercontent.com/sickcodes/Docker-OSX/master/custom/config-nopicker-custom.plist
-e SHORTNAME=catalina
sickcodes/docker-osx:naked
قم بتمكين SSH في مشاركة الشبكة داخل الضيف أولاً. قم بتغيير -e "USERNAME=user"
و -e "PASSWORD=password"
إلى بيانات الاعتماد الخاصة بك. ستضيف الحاوية نفسها إلى ~/.ssh/authorized_keys
نظرًا لأنك لا تستطيع رؤية الشاشة، استخدم PLIST مع nopicker، على سبيل المثال:
# Catalina
# wget https://images2.sick.codes/mac_hdd_ng_auto.img
# Monterey
wget https://images.sick.codes/mac_hdd_ng_auto_monterey.img
docker run -it
--device /dev/kvm
-p 50922:10022
-v " ${PWD} /mac_hdd_ng_auto_monterey.img:/image "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e " USERNAME=user "
-e " PASSWORD=alpine "
-e GENERATE_UNIQUE=true
-e MASTER_PLIST_URL=https://raw.githubusercontent.com/sickcodes/Docker-OSX/master/custom/config-nopicker-custom.plist
-e SHORTNAME=monterey
sickcodes/docker-osx:naked-auto
الطريقة الأسهل والأكثر أمانًا هي sshfs
# on Linux/Windows
mkdir ~ /mnt/osx
sshfs user@localhost:/ -p 50922 ~ /mnt/osx
# wait a few seconds, and ~/mnt/osx will have full rootfs mounted over ssh, and in userspace
# automated: sshpass -p <password> sshfs user@localhost:/ -p 50922 ~/mnt/osx
إذا كان لديك جهاز كمبيوتر محمول، فراجع قسم usbfluxd التالي.
إذا كان لديك جهاز كمبيوتر مكتبي، فيمكنك استخدام تعليمات @Silfalion: https://github.com/Silfalion/Iphone_docker_osx_passthrough
يتوفر أيضًا فيديو تعليمي لإعداد usbfluxd هنا: https://www.youtube.com/watch?v=kTk5fGjK_PM
تعمل هذه الطريقة على الكمبيوتر المحمول أو الكمبيوتر الشخصي أو أي شيء!
شكرًا لكnikias على usbfluxd عبر https://github.com/corellium!
يتم ذلك داخل Linux.
افتح 3 محطات على نظام Linux
يتيح لك توصيل جهازك عبر USB على نظام Linux كشف usbmuxd
على المنفذ 5000
باستخدام https://github.com/corellium/usbfluxd لنظام آخر على نفس الشبكة.
تأكد من تثبيت usbmuxd
و socat
و usbfluxd
.
sudo pacman -S libusbmuxd usbmuxd avahi socat
متاح على AUR: https://aur.archlinux.org/packages/usbfluxd/
yay usbfluxd
قم بتوصيل جهاز iPhone أو iPad الخاص بك.
المحطة 1
sudo systemctl start usbmuxd
sudo avahi-daemon
المحطة 2:
# on host
sudo systemctl restart usbmuxd
sudo socat tcp-listen:5000,fork unix-connect:/var/run/usbmuxd
المحطة 3:
sudo usbfluxd -f -n
ويتم ذلك داخل نظام التشغيل MacOS.
تثبيت البيرة المنزلية.
172.17.0.1
هو عادةً عنوان IP الخاص بجسر Docker، وهو جهاز الكمبيوتر الخاص بك، ولكن يمكنك استخدام أي عنوان IP من ip addr
...
محطة ماك أو إس:
# on the guest
brew install make automake autoconf libtool pkg-config gcc libimobiledevice usbmuxd
git clone https://github.com/corellium/usbfluxd.git
cd usbfluxd
./autogen.sh
make
sudo make install
اقبل USB عبر اتصال TCP، واظهر على أنه محلي:
(قد تحتاج إلى تغيير 172.17.0.1
إلى عنوان IP الخاص بالمضيف. على سبيل المثال، تحقق من ip addr
)
# on the guest
sudo launchctl start usbmuxd
export PATH=/usr/local/sbin: ${PATH}
sudo usbfluxd -f -r 172.17.0.1:5000
أغلق التطبيقات مثل Xcode وأعد فتحها وسيظهر جهازك!
إذا كنت بحاجة إلى البدء مرة أخرى على Linux، فامسح ملفات usbfluxd وusbmuxd وsocat الحالية:
sudo killall usbfluxd
sudo systemctl restart usbmuxd
sudo killall socat
شاهد الأوامر في https://github.com/sickcodes/osx-optimizer!
انقل /var/lib/docker، باتباع البرنامج التعليمي أدناه
البرنامج التعليمي هنا: https://sick.codes/how-to-run-docker-from-block-storage/
اتبع البرنامج التعليمي أعلاه فقط إذا كنت راضيًا عن مسح جميع صور/طبقات Docker الحالية.
الوضع الآمن: قم بتعطيل عامل الإرساء مؤقتًا حتى تتمكن من نقل مجلد Docker مؤقتًا.
killall dockerd
systemctl disable --now docker
systemctl disable --now docker.socket
systemctl stop docker
systemctl stop docker.socket
الآن، بعد إيقاف تشغيل برنامج Docker، انقل /var/lib/docker إلى مكان ما
بعد ذلك، قم بربط /var/lib/docker رمزيًا في مكان ما:
mv /var/lib/docker /run/media/user/some_drive/docker
ln -s /run/media/user/some_drive/docker /var/lib/docker
# now check if /var/lib/docker is working still
ls /var/lib/docker
إذا رأيت المجلدات، فهذا يعني أنها عملت. يمكنك إعادة تشغيل Docker، أو إعادة التشغيل فقط إذا كنت تريد التأكد.
14-11-2021 - تمت إضافة هاي سييرا، موهافي
اختر واحدًا مما يلي أثناء البناء ، وهو غير ذي صلة عند استخدام عامل الإرساء:
--build-arg SHORTNAME=high-sierra
--build-arg SHORTNAME=mojave
--build-arg SHORTNAME=catalina
--build-arg SHORTNAME=big-sur
--build-arg SHORTNAME=monterey
--build-arg SHORTNAME=ventura
--build-arg SHORTNAME=sonoma
توجد حاليًا صور متعددة، لكل منها حالات استخدام مختلفة (موضحة أدناه):
سييرا العالية:
موهافي:
كاتالينا:
بيج سور:
مونتيري اصنع صورتك الخاصة:
فنتورا اصنع صورتك الخاصة:
سونوما اصنع صورتك الخاصة:
نظام كاتالينا المُعد مسبقًا بواسطة Sick.Codes: اسم المستخدم: user
، كلمة المرور: alpine
عارية: إعداد إحضار صورتك الخاصة (استخدم أيًا مما سبق أولاً):
تلقائي مجرد: كما هو مذكور أعلاه ولكن مع -e USERNAME
& -e PASSWORD
و -e OSX_COMMANDS="put your commands here"
localhost:50922
)localhost:8888
) في حالة استخدام إصدار ./vncdocker commit
:auto
(نصف الصورة الأساسية، ونصفها الآخر لصورة وقت التشغيلالصور المبنية فوق محتويات هذا المستودع متاحة أيضًا على Docker Hub للراحة: https://hub.docker.com/r/sickcodes/docker-osx
يمكن العثور على قائمة شاملة بصور Docker المتوفرة والغرض المقصود منها في التعليمات.
يدعم Docker-OSX نظام Kubernetes.
يمكن العثور على مخطط ووثائق Kubernetes Helm ضمن دليل الدفة.
شكرا سيفاسارا للمساهمة في هذه المساهمة الكبيرة.
لا تتردد في فتح مشكلة، إذا واجهت مشكلات بسيطة في تشغيل Docker-OSX أو كانت لديك أي أسئلة.
ومع ذلك، قبل أن تفتح أي مشكلة، يرجى التحقق من الإصدارات المغلقة والتأكد من أنك تستخدم الإصدار الأحدث من هذا المستودع - ربما تم حل مشكلاتك بالفعل! قد ترى أيضًا إجابتك في قسم الأسئلة والأجوبة أدناه.
اتبع @sickcodes!
ولمساعي أكثر تطورًا، نقدم خدمات الدعم التالية:
إذا كنت مهتمًا، تواصل مع @sickcodes على Twitter أو انقر هنا.
تم ترخيص Docker-OSX بموجب GPL v3+. المساهمات هي موضع ترحيب وتقدير كبير. يُسمح لك في الواقع باستخدام Docker-OSX كأداة لإنشاء برامج احتكارية.
إذا كنت جادًا بشأن Apple Security، وربما تجد مكافآت أخطاء مكونة من 6 أرقام ضمن برنامج Apple Bug Bounty، فأنت في المكان الصحيح! ملاحظات إضافية: هل Hackintosh أو OSX-KVM أو Docker-OSX قانوني؟
أسماء المنتجات والشعارات والعلامات التجارية والعلامات التجارية الأخرى المشار إليها في هذا المشروع هي ملك لأصحاب العلامات التجارية الخاصة بهم. لا ينتمي أصحاب العلامات التجارية هؤلاء إلى مستودعنا بأي صفة. إنهم لا يرعون أو يؤيدون هذا المشروع بأي شكل من الأشكال.
هناك العديد من صور Docker-OSX المختلفة المتاحة والمناسبة لأغراض مختلفة.
sickcodes/docker-osx:latest
- أريد فقط تجربتها.sickcodes/docker-osx:latest
- أريد استخدام Docker-OSX لتطوير/تأمين التطبيقات في Xcode (تسجيل الدخول إلى Xcode، Transporter)sickcodes/docker-osx:naked
- أريد استخدام Docker-OSX للأغراض المتعلقة بـ CI/CD (تسجيل الدخول إلى Xcode، Transporter) قم بإنشاء صورتك الشخصية باستخدام :latest
أو big-sur
. ثم اسحب الصورة من الصورة. بعد ذلك، ستتمكن من تكرار تلك الصورة واستيرادها إلى الحاوية :naked
، لإعادة الحاوية إلى حالتها السابقة بشكل متكرر.
sickcodes/docker-osx:auto
- أنا مهتم فقط باستخدام سطر الأوامر (مفيد لتجميع البرامج أو استخدام Homebrew بدون رأس).
sickcodes/docker-osx:naked
- أحتاج إلى iMessage/iCloud للبحث الأمني.
sickcodes/docker-osx:big-sur
- أريد تشغيل Big Sur.
sickcodes/docker-osx:monterey
- أريد تشغيل مونتيري.
sickcodes/docker-osx:ventura
- أريد تشغيل Ventura.
sickcodes/docker-osx:sonoma
- أريد تشغيل Sonoma.
sickcodes/docker-osx:high-sierra
- أريد تشغيل High Sierra.
sickcodes/docker-osx:mojave
- أريد تشغيل Mojave.
قبل أن تفعل أي شيء آخر، سوف تحتاج إلى تشغيل المحاكاة الافتراضية للأجهزة في BIOS الخاص بك. ستعتمد كيفية إجراء ذلك على جهازك المحدد (ونظام BIOS)، ولكن يجب أن تكون واضحة ومباشرة.
بعد ذلك، ستحتاج إلى QEMU وبعض التبعيات الأخرى على مضيفك:
# ARCH
sudo pacman -S qemu libvirt dnsmasq virt-manager bridge-utils flex bison iptables-nft edk2-ovmf
# UBUNTU DEBIAN
sudo apt install qemu qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virt-manager libguestfs-tools
# CENTOS RHEL FEDORA
sudo yum install libvirt qemu-kvm
ثم قم بتمكين libvirt وقم بتحميل وحدة KVM kernel:
sudo systemctl enable --now libvirtd
sudo systemctl enable --now virtlogd
echo 1 | sudo tee /sys/module/kvm/parameters/ignore_msrs
sudo modprobe kvm
يمكن تشغيل Docker-OSX على Windows باستخدام WSL2 (Windows 11 + Windows Subsystem for Linux).
يجب أن يكون لديك Windows 11 مثبتًا بالإصدار 22000+ (21H2 أو أعلى).
أولاً، قم بتثبيت WSL على جهاز الكمبيوتر الخاص بك عن طريق تشغيل هذا الأمر في powershell المسؤول. لمزيد من المعلومات، انظر هنا.
سيؤدي هذا إلى تثبيت Ubuntu افتراضيًا.
wsl --install
يمكنك التأكد من تمكين WSL2 باستخدام wsl -l -v
في PowerShell. لرؤية التوزيعات الأخرى المتوفرة، استخدم wsl -l -o
.
إذا قمت بتثبيت WSL1 مسبقًا، قم بالترقية إلى WSL 2. تحقق من هذا الرابط للترقية من WSL1 إلى WSL2.
بعد تثبيت WSL، انتقل إلى C:/Users/<Your_Name>/.wslconfig
وأضف nestedVirtualization=true
إلى نهاية الملف (إذا لم يكن الملف موجودًا، فقم بإنشائه). لمزيد من المعلومات حول ملف .wslconfig
، قم بزيارة هذا الرابط. تأكد من تحديد "إظهار الملفات المخفية" و"إظهار امتدادات الملفات" في خيارات مستكشف الملفات. يجب أن تكون النتيجة مثل هذا:
[wsl2]
nestedVirtualization=true
انتقل إلى توزيعة WSL (تشغيل wsl
في powershell) وتحقق من تمكين KVM باستخدام الأمر kvm-ok
. يجب أن يبدو الإخراج كما يلي:
INFO: /dev/kvm exists
KVM acceleration can be used
استخدم الأمر sudo apt -y install bridge-utils cpu-checker libvirt-clients libvirt-daemon qemu qemu-kvm
لتثبيته إذا لم يكن كذلك.
الآن قم بتنزيل Docker لنظام التشغيل Windows وتثبيته إذا لم يكن مثبتًا بالفعل.
بعد التثبيت، انتقل إلى الإعدادات وحدد المربعين التاليين:
General -> "Use the WSL2 based engine";
Resources -> WSL Integration -> "Enable integration with my default WSL distro",
تأكد من تثبيت x11-apps
. استخدم الأمر sudo apt install x11-apps -y
لتثبيته إذا لم يكن كذلك.
وأخيرا، هناك ثلاث طرق للحصول على إخراج الفيديو:
لاستخدام خادم X-11 المدمج في WSLg، قم بتغيير هذين السطرين في أمر docker run لتوجيه Docker-OSX إلى WSLg.
-e "DISPLAY=${DISPLAY:-:0.0}"
-v /mnt/wslg/.X11-unix:/tmp/.X11-unix
أو حاول:
-e "DISPLAY=${DISPLAY:-:0}"
-v /mnt/wslg/.X11-unix:/tmp/.X11-unix
بالنسبة لـ Ubuntu 20.x على Windows، راجع #458
تمهيد نظام macOS الأساسي (اضغط على Enter)
انقر فوق Disk Utility
امسح القرص الأكبر (حوالي 200 جيجابايت افتراضيًا)، ولا تقم بتعديل الأقراص الأصغر. - إذا لم تتمكن من النقر فوق erase
، فقد تحتاج إلى تقليل حجم القرص بمقدار 1 كيلو بايت
(اختياري) قم بإنشاء قسم باستخدام المساحة غير المستخدمة لإيواء نظام التشغيل وملفاتك إذا كنت تريد الحد من السعة. (بالنسبة لقسم Xcode 12، لا يقل عن 60 جيجابايت.)
انقر فوق Reinstall macOS
قد يتطلب النظام عمليات إعادة تشغيل متعددة أثناء التثبيت
يعد هذا مكانًا رائعًا للبدء إذا كنت تواجه مشكلة في البدء، خاصة إذا لم تكن على دراية بـ Docker حتى الآن.
هل تتطلع فقط إلى صنع حاوية بسرعة؟ تحقق من قسم أمثلة إنشاء الحاوية لدينا.
يمكن العثور على أسئلة وإجابات أكثر تحديدًا/متقدمة حول استكشاف الأخطاء وإصلاحها في المزيد من الأسئلة والأجوبة. يجب عليك أيضًا التحقق من المشكلات المغلقة. من الممكن أن يكون شخص آخر قد حصل على إجابة على سؤال مثل سؤالك بالفعل حتى لو لم تتمكن من العثور عليه في هذا المستند!
انظر الإعداد الأولي.
docker: unknown server OS: .
See 'docker run --help'.
هذا يعني أن برنامج الإرساء الخاص بك لا يعمل.
يجب أن يُرجع pgrep dockerd
شيئًا
ولذلك، لديك عدد قليل من الخيارات.
sudo dockerd
لاستخدام Docker في المقدمة. أنا استخدم هذا.
أو
sudo systemctl --start dockerd
لبدء dockerd هذا الآن.
أو
sudo systemctl --enable --now dockerd
لبدء dockerd عند كل إعادة تشغيل، والآن.
أمثلة:
-e EXTRA='-smp 6,sockets=3,cores=2'
-e EXTRA='-smp 8,sockets=4,cores=2'
-e EXTRA='-smp 16,sockets=8,cores=2'
لاحظ أنه على عكس الذاكرة، يتم مشاركة استخدام وحدة المعالجة المركزية. حتى تتمكن من تخصيص كافة وحدات المعالجة المركزية الخاصة بك إلى الحاوية.
إذا كنت تستخدم sudo dockerd
أو يتم التحكم في dockerd بواسطة systemd/systemctl، فيجب أن تكون في مجموعة Docker. إذا لم تكن في مجموعة Docker:
sudo usermod -aG docker " ${USER} "
وأضف نفسك أيضًا إلى مجموعتي kvm وlibvirt إذا لزم الأمر:
sudo usermod -aG libvirt " ${USER} "
sudo usermod -aG kvm " ${USER} "
أنظر أيضا: الإعداد الأولي.
# run ad hoc
sudo dockerd
# or daemonize it
sudo nohup dockerd &
# enable it in systemd (it will persist across reboots this way)
sudo systemctl enable --now docker
# or just start it as your user with systemd instead of enabling it
systemctl start docker
شكرًا جزيلاً لمساهمينا الذين عملوا على حل كل مشكلة يمكن تصورها تقريبًا حتى الآن!
https://github.com/sickcodes/Docker-OSX/blob/master/CREDITS.md
هل قمت بإنشاء حاوية مع docker run
وتريد إعادة استخدام الصورة الأساسية مرة أخرى لاحقًا؟
ملحوظة: راجع أمثلة إنشاء الحاوية أولاً لمعرفة كيفية الوصول إلى النقطة التي ينطبق فيها ذلك.
هذا عندما تريد تشغيل نفس الحاوية مرة أخرى لاحقًا. قد تحتاج إلى استخدام docker commit
لحفظ الحاوية الخاصة بك قبل أن تتمكن من إعادة استخدامها. تحقق مما إذا كانت الحاوية الخاصة بك مستمرة مع docker ps --all
.
إذا لم تقم بتشغيل هذا سيكون لديك صورة جديدة في كل مرة.
# look at your recent containers and copy the CONTAINER ID
docker ps --all
# docker start the container ID
docker start -ai abc123xyz567
# if you have many containers, you can try automate it with filters like this
# docker ps --all --filter "ancestor=sickcodes/docker-osx"
# for locally tagged/built containers
# docker ps --all --filter "ancestor=docker-osx"
يمكنك أيضًا سحب ملف .img
من الحاوية، المخزنة في /var/lib/docker
، وتوفيره كوسيطة وقت تشغيل لصورة Docker :naked
.
أنظر أيضاً: هنا.
يمكن إيقاف الحاويات التي تستخدم sickcodes/docker-osx:auto
أثناء بدء التشغيل.
# find last container
docker ps -a
# docker start old container with -i for interactive, -a for attach STDIN/STDOUT
docker start -ai -i < Replace this with your ID >
قد ترى واحدًا أو أكثر من الأخطاء المتعلقة بـ libgtk إذا لم تكن قد قمت بإعداد كل شيء للمحاكاة الافتراضية للأجهزة حتى الآن. إذا لم تكن قد قمت بذلك بعد، فراجع قسم الإعداد الأولي وقسم عمليات التحقق الروتينية لأنك ربما فاتتك خطوة إعداد أو ربما لم تكن جميع تبعيات Docker المطلوبة جاهزة للاستخدام.
أنظر أيضاً: هنا.
إذا لم تقم بإعداد xhost بعد، فجرّب ما يلي:
echo $DISPLAY
# ARCH
sudo pacman -S xorg-xhost
# UBUNTU DEBIAN
sudo apt install x11-xserver-utils
# CENTOS RHEL FEDORA
sudo yum install xorg-x11-server-utils
# then run
xhost +
لا يمكنك تخصيص ذاكرة وصول عشوائي (RAM) أكبر من تلك الموجودة في جهازك. الافتراضي هو 3 جيجا بايت: -e RAM=3
.
إذا كنت تحاول تخصيص ذاكرة وصول عشوائي أكبر للحاوية مما هو متوفر حاليًا، فقد ترى خطأً كما يلي: cannot set up guest memory 'pc.ram': Cannot allocate memory
. أنظر أيضا: هنا، هنا.
على سبيل المثال (أدناه) يحتوي buff/cache
المؤقت بالفعل على 20 غيغابايت من ذاكرة الوصول العشوائي المخصصة:
[user@hostname ~] $ free -mh
total used free shared buff/cache available
Mem: 30Gi 3.5Gi 7.0Gi 728Mi 20Gi 26Gi
Swap: 11Gi 0B 11Gi
مسح المخزن المؤقت وذاكرة التخزين المؤقت:
sudo tee /proc/sys/vm/drop_caches <<< 3
الآن تحقق من ذاكرة الوصول العشوائي (RAM) مرة أخرى:
[user@hostname ~] $ free -mh
total used free shared buff/cache available
Mem: 30Gi 3.3Gi 26Gi 697Mi 1.5Gi 26Gi
Swap: 11Gi 0B 11Gi
ملحوظة: AppleALC، و alcid
، وVodooHDA-OC لا يدعمون برامج الترميز. ومع ذلك، يُظهر IORegistryExplorer عمل مكون وحدة التحكم.
docker run
--device /dev/kvm
-e AUDIO_DRIVER=pa,server=unix:/tmp/pulseaudio.socket
-v " /run/user/ $( id -u ) /pulse/native:/tmp/pulseaudio.socket "
-v /tmp/.X11-unix:/tmp/.X11-unix
sickcodes/docker-osx
docker run
--device /dev/kvm
-e AUDIO_DRIVER=pa,server=unix:/tmp/pulseaudio.socket
-v " /run/user/ $( id -u ) /pulse/native:/tmp/pulseaudio.socket "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e PULSE_SERVER=unix:/tmp/pulseaudio.socket
sickcodes/docker-osx pactl list
docker run
--device /dev/kvm
-e AUDIO_DRIVER=pa,server=unix:/tmp/pulseaudio.socket
-v /mnt/wslg/runtime-dir/pulse/native:/tmp/pulseaudio.socket
-v /mnt/wslg/.X11-unix:/tmp/.X11-unix
sickcodes/docker-osx
من الممكن إعادة توجيه منافذ إضافية حسب احتياجاتك. في هذا المثال، سنستخدم Mac OSX لاستضافة nginx:
host:10023 <-> 10023:container:10023 <-> 80:guest
على الجهاز المضيف، قم بتشغيل:
docker run -it
--device /dev/kvm
-p 50922:10022
-e ADDITIONAL_PORTS= ' hostfwd=tcp::10023-:80, '
-p 10023:10023
sickcodes/docker-osx:auto
في جلسة العمل الطرفية التي تقوم بتشغيل الحاوية، قم بتشغيل:
/bin/bash -c " $( curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh ) "
brew install nginx
sudo sed -i -e ' s/8080/80/ ' /usr/local/etc/nginx/nginx.confcd
# sudo nginx -s stop
sudo nginx
من المفترض الآن أن يكون nginx قابلاً للوصول على المنفذ 10023.
بالإضافة إلى ذلك، يمكنك ربط عدة عبارات معًا، على سبيل المثال:
-e ADDITIONAL_PORTS= ' hostfwd=tcp::10023-:80,hostfwd=tcp::10043-:443, '
-p 10023:10023
-p 10043:10043
قد لا تحتاج إلى القيام بأي شيء بالإعداد الافتراضي لتمكين الاتصال بالإنترنت من داخل الحاوية. بالإضافة إلى ذلك، قد يعمل curl
حتى لو لم يعمل ping
.
انظر المناقشة هنا وهنا وهنا.
هذا غير مطلوب للتثبيتات المحلية.
بالإضافة إلى ذلك، لاحظ أن ذلك قد يتسبب في قيام المضيف بتسريب عنوان IP الخاص بك، حتى إذا كنت تستخدم VPN في الحاوية.
ومع ذلك، إذا كنت تحاول الاتصال بمثيل Docker-OSX عن بعد (على سبيل المثال، مثيل Docker-OSX مستضاف في مركز بيانات)، فقد يؤدي ذلك إلى تحسين أدائك:
# enable for current session
sudo sysctl -w net.ipv4.ip_forward=1
# OR
# sudo tee /proc/sys/net/ipv4/ip_forward <<< 1
# enable permanently
sudo touch /etc/sysctl.conf
sudo tee -a /etc/sysctl.conf << EOF
net.ipv4.ip_forward = 1
EOF
# or edit manually with the editor of your choice
nano /etc/sysctl.conf || vi /etc/sysctl.conf || vim /etc/sysctl.conf
# now reboot
تعد مشاركة مجلد مع الضيف أمرًا بسيطًا للغاية.
سينتقل المجلد الخاص بك إلى /mnt/hostshare داخل حاوية Arch والتي يتم تمريرها بعد ذلك عبر QEMU.
ثم قم بالتثبيت باستخدام sudo -S mount_9p hostshare
من داخل جهاز Mac.
على سبيل المثال،
FOLDER= ~ /somefolder
-v " ${FOLDER} :/mnt/hostshare "
-e EXTRA= " -virtfs local,path=/mnt/hostshare,mount_tag=hostshare,security_model=passthrough,id=hostshare "
المثال الكامل:
# stat mac_hdd_ng.img
SHARE= ~ /somefolder
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-v " ${PWD} /mac_hdd_ng.img:/home/arch/OSX-KVM/mac_hdd_ng.img "
-v " ${SHARE} :/mnt/hostshare "
-e EXTRA= " -virtfs local,path=/mnt/hostshare,mount_tag=hostshare,security_model=passthrough,id=hostshare "
sickcodes/docker-osx:latest
# !!! Open Terminal inside macOS and run the following command to mount the virtual file system
# sudo -S mount_9p hostshare
لمشاركة مجلد باستخدام NFS، قم بإعداد مجلد على الجهاز المضيف، على سبيل المثال، /srv/nfs/share
ثم ألحقه بـ /etc/exports
:
/srv/nfs/share 127.0.0.1/0(insecure,rw,all_squash,anonuid=1000,anongid=985,no_subtree_check)
قد تحتاج إلى إعادة تحميل عمليات التصدير الآن، مما سيبدأ بمشاركة هذا الدليل.
# reload shared folders
sudo exportfs -arv
المصدر والشرح
امنح الأذونات في المجلد المشترك للمجلدين anonuid
و anongid
، حيث يتطابق anonuid
و anongid
مع تلك الخاصة بمستخدم Linux الخاص بك؛ id -u
id -u ; id -g
سوف يقوم id -u ; id -g
بطباعة userid:groupid
chown 1000:985 /srv/nfs/share
chmod u+rwx /srv/nfs/share
ابدأ تشغيل حاوية Docker-OSX باستخدام العلامة الإضافية --network host
قم بإنشاء مجلد nfs وتثبيته من محطة mac:
mkdir -p ~/mnt
sudo mount_nfs -o locallocks 10.0.2.2:/srv/nfs/share ~/mnt
ابدأ الحاوية الخاصة بك.
اختر منفذ مثلا 7700
.
lsusb
للحصول على vid:pid
على نظام Linux: sudo usbredirserver -p 7700 1e3d:2096
الآن، في نافذة Docker، اضغط على Enter لرؤية وحدة التحكم (qemu)
.
يمكنك إضافة/إزالة القرص باستخدام أوامر مثل هذا، حتى بعد بدء تشغيل الجهاز:
chardev-add socket,id=usbredirchardev1,port=7700,host=172.17.0.1
device_add usb-redir,chardev=usbredirchardev1,id=usbredirdev1,debug=4
PORT=7700
IP_ADDRESS=172.17.0.1
-e EXTRA= " -chardev socket,id=usbredirchardev1,port= ${PORT} ,host= ${IP_ADDRESS} -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1,debug=4 " `
قد تمنع إعدادات جدار الحماية الافتراضية في Fedora واجهة شبكة Docker من الوصول إلى الإنترنت. لحل هذه المشكلة، ستحتاج إلى إضافة الواجهة إلى القائمة البيضاء في جدار الحماية الخاص بك:
# Set the docker0 bridge to the trusted zone
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
sudo firewall-cmd --reload
تحقق من تمكين المحاكاة الافتراضية للأجهزة على جهازك:
sudo tee /sys/module/kvm/parameters/ignore_msrs <<< 1
egrep -c ' (svm|vmx) ' /proc/cpuinfo
-e NETWORKING=vmxnet3
-e NETWORKING=e1000-82545em
du -sh *
بدءًا من الدليل /
، والعثور على أدلة كبيرة حيث يمكن إزالة الملفات. على سبيل المثال، الملفات المخزنة مؤقتًا غير الضرورية، ومنصات Xcode، وما إلى ذلك.sudo trimforce enable
وأعد التشغيل.dd if=/dev/zero of=./empty && rm -f empty
docker cp stoppedcontainer:/home/arch/OSX-KVM/mac_hdd_ng.img .
qemu-img check -r all mac_hdd_ng.img
لإصلاح أي أخطاء.qemu-img convert -O qcow2 mac_hdd_ng.img deduped.img
وتحقق من الأخطاء مرة أخرىqemu-img convert -c -O qcow2 deduped.img compressed.img
لضغط الصورة بشكل أكبر. قد يؤدي هذا إلى تقليل سرعة وقت التشغيل، لكن يجب أن يقلل الحجم بنسبة 25% تقريبًا. FROM sickcodes/docker-osx
USER arch
COPY --chown=arch ./deduped.img /home/arch/OSX-KVM/mac_hdd_ng.img
تأكد أولاً من تمكين التشغيل التلقائي
بعد ذلك، ستحتاج إلى إعداد SSH ليتم تشغيله تلقائيًا.
sudo systemsetup -setremotelogin on
تأكد من الالتزام بصورة عامل الإرساء الجديدة وحفظها، أو إعادة بنائها كما هو موضح في القسم الخاص بتقليل مساحة القرص.
ثم قم بتشغيله باستخدام هذه الحجج.
# Run with the -nographic flag, and enable a telnet interface
docker run
--device /dev/kvm
-p 50922:10022
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e EXTRA= " -monitor telnet::45454,server,nowait -nographic -serial null "
mycustomimage
إذا كنت تقوم ببناء Docker-OSX محليًا، فربما تريد استخدام مرايا Arch Linux.
يمكن العثور على مواقع المرآة هنا (تستخدم رموز الدولة المكونة من حرفين): https://archlinux.org/mirrorlist/all/
docker build -t docker-osx:latest
--build-arg RANKMIRRORS=true
--build-arg MIRROR_COUNTRY=US
--build-arg MIRROR_COUNT=10
--build-arg SHORTNAME=catalina
--build-arg SIZE=200G .
قم بتمرير أي أجهزة/أدلة إلى حاوية Docker ووسائط QEMU باستخدام خيار موفر وسيطة وقت التشغيل السهل -e EXTRA=
.
# example customizations
docker run
-e RAM=4
-e SMP=4
-e CORES=4
-e EXTRA= ' -usb -device usb-host,hostbus=1,hostaddr=8 '
-e INTERNAL_SSH_PORT=23
-e MAC_ADDRESS= " $( xxd -c1 -p -l 6 /dev/urandom | tr ' n ' ' : ' | cut -c1-17 ) "
-e AUDIO_DRIVER=alsa
-e IMAGE_PATH=/image
-e SCREEN_SHARE_PORT=5900
-e DISPLAY=:0
-e NETWORKING=vmxnet3
--device /dev/kvm
--device /dev/snd
-v /tmp/.X11-unix:/tmp/.X11-unix
docker-osx:latest
قم بإنشاء أرقام تسلسلية في ./custom
أو اجعل عامل الإرساء يقوم بإنشائها في وقت التشغيل (انظر أدناه).
في أي وقت، تحقق من الرقم التسلسلي الخاص بك قبل تسجيل الدخول إلى iCloud، وما إلى ذلك.
# this is a quick way to check your serial number via cli inside OSX
ioreg -l | grep IOPlatformSerialNumber
# test some commands
sshpass -p ' alpine ' ssh user@localhost -p 50922 ' ping google.com '
# check your serial number
sshpass -p ' alpine ' ssh user@localhost -p 50922 ' ioreg -l | grep IOPlatformSerialNumber '
# ARCH
pacman -S libguestfs
# UBUNTU DEBIAN
apt install libguestfs -y
# RHEL FEDORA CENTOS
yum install libguestfs -y
ستجد داخل المجلد ./custom
4
نصوص برمجية.
config-nopicker-custom.plist
opencore-image-ng.sh
هذان الملفان من OSX-KVM.
لا تحتاج للمس هذين الملفين.
يحتوي ملف config.plist على 5 قيم تم استبدالها بعناصر نائبة. انقر هنا لرؤية تلك القيم دون سبب.
generate-unique-machine-values.sh
سيقوم هذا البرنامج النصي بإنشاء أرقام تسلسلية، مع عناوين Mac، بالإضافة إلى الإخراج إلى CSV/TSV، بالإضافة إلى إنشاء bootdisk image
. يمكنك إنشاء المئات، ./custom/generate-unique-machine-values.sh --help
./custom/generate-unique-machine-values.sh
--count 1
--tsv ./serial.tsv
--bootdisks
--output-bootdisk OpenCore.qcow2
--output-env source.env.sh
أو إذا كان لديك بعض الأرقام التسلسلية المحددة ...
generate-specific-bootdisk.sh
generate-specific-bootdisk.sh
--model " ${DEVICE_MODEL} "
--serial " ${SERIAL} "
--board-serial " ${BOARD_SERIAL} "
--uuid " ${UUID} "
--mac-address " ${MAC_ADDRESS} "
--output-bootdisk OpenCore-nopicker.qcow2
# proof of concept only, generates random serial numbers, headlessly, and quits right after.
docker run --rm -it
--device /dev/kvm
-p 50922:10022
-e NOPICKER=true
-e GENERATE_UNIQUE=true
-e DEVICE_MODEL= " iMacPro1,1 "
sickcodes/docker-osx:auto
# -e OSX_COMMANDS='ioreg -l | grep IOPlatformSerialNumber'
# run the same as above 17gb auto image, with SSH, with nopicker, and save the bootdisk for later.
# you don't need to save the bootdisk IF you supply specific serial numbers!
docker run -it
--device /dev/kvm
-p 50922:10022
-e NOPICKER=true
-e GENERATE_SPECIFIC=true
-e DEVICE_MODEL= " iMacPro1,1 "
-e SERIAL= " C02TW0WAHX87 "
-e BOARD_SERIAL= " C027251024NJG36UE "
-e UUID= " 5CCB366D-9118-4C61-A00A-E5BAF3BED451 "
-e MAC_ADDRESS= " A8:5C:2C:9A:46:2F "
-e OSX_COMMANDS= ' ioreg -l | grep IOPlatformSerialNumber '
sickcodes/docker-osx:auto
# run an existing image in current directory, with a screen, with SSH, with nopicker.
stat mac_hdd_ng.img # make sure you have an image if you're using :naked
docker run -it
-v " ${PWD} /mac_hdd_ng.img:/image "
--device /dev/kvm
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-v /tmp/.X11-unix:/tmp/.X11-unix
-p 50922:10022
-e NOPICKER=true
-e GENERATE_SPECIFIC=true
-e DEVICE_MODEL= " iMacPro1,1 "
-e SERIAL= " C02TW0WAHX87 "
-e BOARD_SERIAL= " C027251024NJG36UE "
-e UUID= " 5CCB366D-9118-4C61-A00A-E5BAF3BED451 "
-e MAC_ADDRESS= " A8:5C:2C:9A:46:2F "
-e WIDTH=1000
-e HEIGHT=1000
sickcodes/docker-osx:naked
إذا كنت تريد إنشاء أرقام تسلسلية، فقم بإنشائها في وقت التشغيل باستخدام -e GENERATE_UNIQUE=true
أو يمكنك إنشاؤها داخل المجلد ./custom
. ثم استخدم:
-e GENERATE_SPECIFIC=true
-e SERIAL= " "
-e BOARD_SERIAL= " "
-e UUID= " "
-e MAC_ADDRESS= " "
stat mac_hdd_ng_testing.img
touch ./output.env
# generate fresh random serial numbers, with a screen, using your own image, and save env file with your new serial numbers for later.
docker run -it
--device /dev/kvm
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-v /tmp/.X11-unix:/tmp/.X11-unix
-p 50922:10022
-e NOPICKER=true
-e GENERATE_UNIQUE=true
-e GENERATE_SPECIFIC=true
-e DEVICE_MODEL= " iMacPro1,1 "
-v " ${PWD} /output.env:/env "
-v " ${PWD} /mac_hdd_ng_testing.img:/image "
sickcodes/docker-osx:naked
لاستخدام iMessage أو iCloud، يلزمك تغيير 5
قيم.
SERIAL
BOARD_SERIAL
UUID
MAC_ADDRESS
ROM
هو مجرد عنوان Mac بأحرف صغيرة، بدون :
بين كل كلمة.
يمكنك إخبار الحاوية بإنشائها لك باستخدام -e GENERATE_UNIQUE=true
أو اطلب من الحاوية استخدام حاويات محددة باستخدام -e GENERATE_SPECIFIC=true
-e GENERATE_SPECIFIC=true
-e DEVICE_MODEL= " iMacPro1,1 "
-e SERIAL= " C02TW0WAHX87 "
-e BOARD_SERIAL= " C027251024NJG36UE "
-e UUID= " 5CCB366D-9118-4C61-A00A-E5BAF3BED451 "
-e MAC_ADDRESS= " A8:5C:2C:9A:46:2F "
يتم التحكم في دقة العرض من خلال هذا الخط:
https://github.com/sickcodes/Docker-OSX/blob/master/custom/config-nopicker-custom.plist#L819
بدلاً من تركيب هذا القرص، سيقوم Docker-OSX بإنشاء OpenCore.qcow2
جديد باستخدام هذه الخدعة الرائعة:
-e GENERATE_UNIQUE=true
-e WIDTH=800
-e HEIGHT=600
لاستخدام WIDTH
/ HEIGHT
، يجب عليك استخدام إما -e GENERATE_UNIQUE=true
أو -e GENERATE_SPECIFIC=true
.
سيستغرق التمهيد حوالي 30 ثانية لأنه يحتاج إلى إنشاء قسم تمهيد جديد باستخدام libguestfs
.
-e GENERATE_SPECIFIC=true
-e WIDTH=1920
-e HEIGHT=1080
-e SERIAL= " "
-e BOARD_SERIAL= " "
-e UUID= " "
-e MAC_ADDRESS= " "
# using an image in your current directory
stat mac_hdd_ng.img
docker run -it
--device /dev/kvm
-p 50922:10022
-v " ${PWD} /mac_hdd_ng.img:/image "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e GENERATE_SPECIFIC=true
-e DEVICE_MODEL= " iMacPro1,1 "
-e SERIAL= " C02TW0WAHX87 "
-e BOARD_SERIAL= " C027251024NJG36UE "
-e UUID= " 5CCB366D-9118-4C61-A00A-E5BAF3BED451 "
-e MAC_ADDRESS= " A8:5C:2C:9A:46:2F "
-e MASTER_PLIST_URL=https://raw.githubusercontent.com/sickcodes/Docker-OSX/master/custom/config-nopicker-custom.plist
-e WIDTH=1600
-e HEIGHT=900
sickcodes/docker-osx:naked
# generating random serial numbers, using the DIY installer, along with the screen resolution changes.
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e GENERATE_UNIQUE=true
-e WIDTH=800
-e HEIGHT=600
sickcodes/docker-osx:latest
إليك بعض القرارات الأخرى! إذا كانت الدقة غير صالحة، فسيتم تعيينها بشكل افتراضي على 800x600.
-e WIDTH=800
-e HEIGHT=600
-e WIDTH=1280
-e HEIGHT=768
-e WIDTH=1600
-e HEIGHT=900
-e WIDTH=1920
-e HEIGHT=1080
-e WIDTH=2560
-e HEIGHT=1600
الخطوة الأولى هي إيقاف البرنامج الخفي لعامل الإرساء
sudo systemctl stop docker
الخطوة الثانية هي تغيير تكوين الحاوية
/var/lib/docker/containers/[container-id]/config.v2.json
(لنفترض أن WIDTH الأصلي هو 1024 وHEIGHT هو 768، فيمكنك البحث عن 1024 واستبداله بالقيمة الجديدة. نفس الشيء بالنسبة إلى 768.)
الخطوة الأخيرة هي إعادة تشغيل البرنامج الخفي لعامل الإرساء
sudo systemctl restart docker
قم بتمرير القرص إلى الحاوية كوحدة تخزين ثم قم بتمرير القرص مرة أخرى إلى إضافات سطر الأوامر QEMU باستخدام.
استخدم config-custom.plist
لأنك ربما تريد رؤية قائمة التمهيد، وإلا فاحذف السطر الأول:
DISK_TWO= " ${PWD} /mount_me.img "
-e MASTER_PLIST_URL= 'https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-custom.plist'
-v "${DISK_TWO}:/disktwo"
-e EXTRA= '-device ide-hd,bus=sata.5,drive=DISK-TWO -drive id=DISK-TWO,if=none,file=/disktwo,format=qcow2'
OSX_IMAGE= " ${PWD} /mac_hdd_ng_xcode_bigsur.img "
DISK_TWO= " ${PWD} /mount_me.img "
docker run -it
--device /dev/kvm
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e MASTER_PLIST_URL= ' https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-custom.plist '
-v " ${OSX_IMAGE} " :/image
-v " ${DISK_TWO} " :/disktwo
-e EXTRA= ' -device ide-hd,bus=sata.5,drive=DISK-TWO -drive id=DISK-TWO,if=none,file=/disktwo,format=qcow2 '
sickcodes/docker-osx:naked
أنظر أيضاً: هنا.
في Docker-OSX، نستخدم صور qcow2
.
وهذا يعني أن الصورة تنمو أثناء استخدامها، ولكن نظام التشغيل الضيف يعتقد أن لديك 200 جيجابايت متوفرة.
اقرأ فقط
# mount the qemu image like a real disk
sudo modprobe nbd max_part=8
sudo qemu-nbd --connect=/dev/nbd0 ./image.img
sudo fdisk /dev/nbd0 -l
mkdir -p ./mnt
sudo mount /dev/nbd0p1 ./mnt
# inspect partitions (2 partitions)
sudo fdisk /dev/nbd0 -l
# mount using apfs-linux-rw OR apfs-fuse
mkdir -p ./part
sudo mount /dev/nbd0p2 ./part
sudo apfs-fuse -o allow_other /dev/nbd0p2 ./part
عند الانتهاء من النظر إلى القرص الخاص بك، يمكنك إلغاء تحميل القسم والقرص وإزالة جهاز الاسترجاع:
sudo umount ./part
sudo umount ./mnt
sudo qemu-nbd --disconnect /dev/nbd0
sudo rmmod nbd
أولاً، يجب أن يبدأ QEMU كجذر.
من الممكن أيضًا تحقيق عبور USB عن طريق تغيير أذونات الجهاز الموجود في الحاوية. انظر هنا.
على سبيل المثال، قم بإنشاء ملف Dockerfile جديد بما يلي
FROM sickcodes/docker-osx
USER arch
RUN sed -i -e s/exec qemu/exec sudo qemu/ ./Launch.sh
COPY --chown=arch ./new_image.img /home/arch/OSX-KVM/mac_hdd_ng.img
حيث new_image.img
هي صورة qcow2 التي قمت باستخراجها. ثم أعد البناء باستخدام docker build .
نحتاج بعد ذلك إلى معرفة أرقام الناقل والمنافذ لجهاز USB الذي نريد تمريره إلى الجهاز الافتراضي:
lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
| __ Port 2: Dev 5, If 0, Class=Human Interface Device, Driver=usbhid, 12M
| __ Port 2: Dev 5, If 1, Class=Chip/SmartCard, Driver=, 12M
| __ Port 3: Dev 2, If 0, Class=Wireless, Driver=, 12M
| __ Port 3: Dev 2, If 1, Class=Wireless, Driver=, 12M
| __ Port 5: Dev 3, If 0, Class=Video, Driver=uvcvideo, 480M
| __ Port 5: Dev 3, If 1, Class=Video, Driver=uvcvideo, 480M
في هذا المثال، نريد المرور عبر جهاز البطاقة الذكية. الجهاز الذي نريده موجود على الناقل 1 والمنفذ 2.
قد تكون هناك أيضًا اختلافات إذا كان جهازك USB 2.0 (ehci) مقابل USB 3.0 (xhci). انظر هنا لمزيد من التفاصيل.
# hostbus and hostport correspond to the numbers from lsusb
# runs in privileged mode to enable access to the usb devices.
docker run
--privileged
--device /dev/kvm
-e RAM=4
-p 50922:10022
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e EXTRA= " -device virtio-serial-pci -device usb-host,hostbus=1,hostport=2 "
mycustomimage
من المفترض أن تشاهد الجهاز يظهر عند قيامك بعمل system_profiler SPUSBDataType
في غلاف MacOS.
ملاحظة مهمة: سيؤدي هذا إلى فقدان النظام المضيف إمكانية الوصول إلى جهاز USB أثناء تشغيل الجهاز الافتراضي!
هذه هي الحاوية المفضلة لدي. يمكنك توفير صورة قرص موجودة كوسيطة لسطر أوامر Docker.
اسحب الصور للخارج باستخدام sudo find /var/lib/docker -name mac_hdd_ng.img -size +10G
قم بتوفير صورتك المحلية باستخدام وسيطة الأمر -v "${PWD}/mac_hdd_ng.img:/image"
واستخدم sickcodes/docker-osx:naked
عند توجيه Docker لإنشاء الحاوية الخاصة بك.
الصورة المجردة مخصصة لتشغيل أي ملف .img موجود، على سبيل المثال في دليل العمل الحالي ( $PWD
)
بشكل افتراضي، تحتوي هذه الصورة على متغير يسمى NOPICKER
وهو "true"
. يؤدي هذا إلى تخطي قائمة اختيار القرص. استخدم -e NOPICKER=false
أو أي سلسلة أخرى غير الكلمة true
للدخول إلى قائمة التمهيد.
يتيح لك ذلك استخدام أقراص أخرى بدلاً من تخطي قائمة التمهيد، على سبيل المثال، قرص الاسترداد أو الأداة المساعدة للقرص.
docker pull sickcodes/docker-osx:naked
# run your own image + SSH
# change mac_hdd_ng.img
docker run -it
--device /dev/kvm
-p 50922:10022
-v " ${PWD} /mac_hdd_ng.img:/image "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
sickcodes/docker-osx:naked
# run local copy of the auto image + SSH + Boot menu
docker run -it
--device /dev/kvm
-p 50922:10022
-v " ${PWD} /mac_hdd_ng_auto.img:/image "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e " NOPICKER=false "
sickcodes/docker-osx:naked
يجب أن يعمل أمر البدء السريع خارج الصندوق، بشرط الاحتفاظ بالأسطر التالية. يعمل في auto
والآلات naked
:
-v /tmp/.X11-unix:/tmp/.X11-unix
-e "DISPLAY=${DISPLAY:-:0.0}"
-e OSX_COMMANDS
يتيح لك تشغيل أي أوامر داخل الحاوية
docker pull sickcodes/docker-osx:auto
# boot to OS X shell + display + specify commands to run inside OS X!
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e " OSX_COMMANDS=/bin/bash -c " put your commands here " "
sickcodes/docker-osx:auto
# Boots in a minute or two!
أو إذا كان لديك صورة بالفعل وتريد فقط تسجيل الدخول وتنفيذ أوامر عشوائية:
docker pull sickcodes/docker-osx:naked-auto
# boot to OS X shell + display + specify commands to run inside OS X!
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e USERNAME=yourusername
-e PASSWORD=yourpassword
-e " OSX_COMMANDS=/bin/bash -c " put your commands here " "
sickcodes/docker-osx:naked-auto
# Boots in a minute or two!
هناك عدد لا يحصى من حالات الاستخدام المحتملة الأخرى التي يمكن أن تعمل بشكل مثالي مع Docker-OSX، والتي ستشاهد بعضها أدناه!
بالنسبة للحاوية بدون رأس، قم بإزالة السطرين التاليين من أمر docker run
الخاص بك:
# -v /tmp/.X11-unix:/tmp/.X11-unix
# -e "DISPLAY=${DISPLAY:-:0.0}"
وهذا مفيد بشكل خاص لخطوط أنابيب CI/CD.
# run your own image headless + SSH
docker run -it
--device /dev/kvm
-p 50922:10022
-v " ${PWD} /mac_hdd_ng.img:/image "
sickcodes/docker-osx:naked
يجب تغيير -it إلى -i لتتمكن من التفاعل مع وحدة تحكم QEMU
للخروج من حاوية باستخدام -i، يجب عليك docker kill <containerid>
. على سبيل المثال، لقتل كل شيء، docker ps | xargs docker kill
.
مثال QEMU VNC الأصلي
docker run -i
--device /dev/kvm
-p 50922:10022
-p 5999:5999
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e EXTRA= " -display none -vnc 0.0.0.0:99,password=on "
sickcodes/docker-osx:big-sur
# type `change vnc password myvncusername` into the docker terminal and set a password
# connect to localhost:5999 using VNC
# qemu 6 seems to require a username for vnc now
ليس TLS/HTTPS مشفرًا على الإطلاق!
أو ssh -N [email protected] -L 5999:127.0.0.1:5999
، حيث 1.1.1.1
هو عنوان IP الخاص بالخادم البعيد.
(ملاحظة: إذا قمت بإغلاق المنفذ 5999 واستخدمت نفق SSH، فسيصبح هذا آمنًا.)
أضف السطر التالي:
-e EXTRA="-display none -vnc 0.0.0.0:99,password=on"
في محطة Docker، اضغط على enter
حتى ترى (qemu)
.
اكتب change vnc password someusername
أدخل كلمة مرور لاسم مستخدم vnc الجديد^.
أنت بحاجة أيضًا إلى عنوان IP الخاص بالحاوية: docker inspect <containerid> | jq -r '.[0].NetworkSettings.IPAddress'
أو عادةً ما يُظهر ip n
عنوان IP الخاص بالحاوية أولاً.
الآن يتصل VNC باستخدام عنوان IP الخاص بحاوية Docker، على سبيل المثال 172.17.0.2:5999
VNC البعيد عبر SSH: ssh -N [email protected] -L 5999:172.17.0.2:5999
، حيث 1.1.1.1
هو عنوان IP للخادم البعيد و 172.17.0.2
هو IP لحاوية LAN الخاصة بك.
يمكنك الآن توصيل VNC مباشرة بأي حاوية تم إنشاؤها باستخدام هذا الأمر!
اختياريًا، يمكنك تمكين بروتوكول SPICE، الذي يسمح باستخدام remote-viewer
للوصول إلى حاوية OSX الخاصة بك بدلاً من VNC.
ملحوظة: - سيسمح -disable-ticketing
بالوصول غير المصادق إلى الجهاز الافتراضي. راجع دليل التوابل للمساعدة في إعداد الوصول الموثق ("التذاكر").
docker run
--device /dev/kvm
-p 3001:3001
-p 50922:10022
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e EXTRA= " -monitor telnet::45454,server,nowait -nographic -serial null -spice disable-ticketing,port=3001 "
mycustomimage
ثم قم ببساطة بتنفيذ remote-viewer spice://localhost:3001
وأضف --spice-debug
لتصحيح الأخطاء.
# You can create an image of an already configured and setup container.
# This allows you to effectively duplicate a system.
# To do this, run the following commands
# make note of your container id
docker ps --all
docker commit containerid newImageName
# To run this image do the following
docker run
--device /dev/kvm
--device /dev/snd
-v /tmp/.X11-unix:/tmp/.X11-unix
newImageName
docker pull sickcodes/docker-osx:auto
# boot directly into a real OS X shell with no display (Xvfb) [HEADLESS]
docker run -it
--device /dev/kvm
-p 50922:10022
sickcodes/docker-osx:auto
# username is user
# password is alpine
# Wait 2-3 minutes until you drop into the shell.
docker pull sickcodes/docker-osx:latest
docker run -it
--device /dev/kvm
--device /dev/snd
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
sickcodes/docker-osx:latest
# press CTRL + G if your mouse gets stuck
# scroll down to troubleshooting if you have problems
# need more RAM and SSH on localhost -p 50922?
docker run -it
--device /dev/kvm
--device /dev/snd
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
sickcodes/docker-osx:latest
# turn on SSH after you've installed OS X in the "Sharing" settings.
ssh user@localhost -p 50922
أضف الخيار الإضافي -e NOPICKER=true
.
الآلات القديمة:
# find your containerID
docker ps
# move the no picker script on top of the Launch script
# NEW CONTAINERS
docker exec containerID mv ./Launch-nopicker.sh ./Launch.sh
# VNC-VERSION-CONTAINER
docker exec containerID mv ./Launch-nopicker.sh ./Launch_custom.sh
# LEGACY CONTAINERS
docker exec containerID bash -c " grep -v InstallMedia ./Launch.sh > ./Launch-nopicker.sh
chmod +x ./Launch-nopicker.sh
sed -i -e s/OpenCore.qcow2/OpenCore-nopicker.qcow2/ ./Launch-nopicker.sh
"
لا تزال التحديثات التلقائية قيد التشغيل في إعدادات الحاوية. قد ترغب في إيقاف تشغيلها. لدينا خطط مستقبلية للتطوير حول هذا الموضوع.
${DISPLAY:-:0.0}
؟ $DISPLAY
هو متغير الصدفة الذي يشير إلى خادم العرض X11 الخاص بك.
${DISPLAY}
هو نفسه، لكنه يسمح لك بضم المتغيرات مثل هذا:
${DISPLAY}_${DISPLAY}
سيطبع :0.0_:0.0
$DISPLAY_$DISPLAY
سيطبع :0.0
...لأن $DISPLAY_
ليس $DISPLAY
يسمح لك ${variable:-fallback}
بتعيين متغير "احتياطي" ليتم استبداله إذا لم يتم تعيين $variable
.
يمكنك أيضًا استخدام ${variable:=fallback}
لتعيين هذا المتغير (في جهازك الحالي).
في Docker-OSX، نفترض أن :0.0
هو المتغير الافتراضي $DISPLAY
.
يمكنك أن ترى ما هو لك
echo $DISPLAY
بهذه الطريقة، سيستخدم ${DISPLAY:-:0.0}
أي متغير قام بتعيينه لك خادم X11، وإلا :0.0
-v /tmp/.X11-unix:/tmp/.X11-unix
؟ -v
هو أحد خيارات سطر أوامر Docker الذي يتيح لك تمرير وحدة تخزين إلى الحاوية.
الدليل الذي نسمح لحاوية Docker باستخدامه هو مقبس عرض خادم X.
/tmp/.X11-unix
إذا سمحنا لحاوية Docker باستخدام نفس مقبس العرض الذي تستخدمه بيئتنا الخاصة، فستظهر أي تطبيقات تقوم بتشغيلها داخل حاوية Docker على شاشتك أيضًا! https://www.x.org/archive/X11R6.8.0/doc/RELNOTES5.html
يمكنك عند التهيئة أو التمهيد في حاوية أن ترى أخطاء من وحدة التحكم (qemu)
بالشكل التالي: ALSA lib blahblahblah: (function name) returned error: no such file or directory
. هذه متوقعة إلى حد ما. طالما أنك قادر على التمهيد في الحاوية وكل شيء يعمل، فلا داعي للقلق بشأن ذلك.
أنظر أيضاً: هنا.