macOS ที่รันด้วย QEMU บน Docker
(github.com/sickcodes)- Docker-OSX รัน macOS ที่ใช้ QEMU + KVM ภายในคอนเทนเนอร์ Docker และมีความสามารถอย่างเอาต์พุต X11, SSH, VNC, การเชื่อมต่อ iPhone ผ่าน USB และการสร้างซีเรียลสำหรับงานวิจัยความปลอดภัยของ iMessage
- รูปแบบการรันคือส่งอุปกรณ์
/dev/kvm, ซ็อกเก็ต X11, การทำ port forwarding และตัวแปรสภาพแวดล้อมSHORTNAMEให้ Docker เพื่อเลือกเวอร์ชัน macOS โดยมีตัวอย่างตั้งแต่ Catalina 10.15 ถึง Tahoe 16 - โครงสร้างอิมเมจแบ่งตามวัตถุประสงค์ เช่น
latest,auto,naked,naked-autoและสามารถแนบไฟล์.imgที่สร้างเอง หรือรันงาน command line ด้วยอิมเมจ Catalina ที่ตั้งค่าไว้ล่วงหน้าได้ - ข้อกำหนดคือ โฮสต์ x86_64 ที่ใช้ KVM ได้, เปิดใช้งาน virtualization ใน BIOS และมีพื้นที่ดิสก์อย่างน้อย 20GB ขึ้นไป หากใช้ Xcode ต้องมี 50GB และหากใช้
:autoต้องมีอย่างน้อย 50GB - นอกจาก Linux แล้วยังรันได้บน WSL2 nested virtualization ของ Windows 11 build 22000+ แต่ต้องตั้งค่าเอาต์พุตหน้าจออย่างใดอย่างหนึ่งระหว่าง WSLg, VNC หรือ desktop environment
รัน macOS ภายในคอนเทนเนอร์ Docker
- Docker-OSX เป็นโปรเจกต์สำหรับ รัน macOS ภายในคอนเทนเนอร์ Docker
- ทำงานบน QEMU + KVM
- รองรับ X11 forwarding
- มีคอนฟิกที่ทำให้ iPhone USB ใช้งานได้
- ระบุว่าสามารถทำงานวิจัยความปลอดภัยของ macOS บน Linux และ Windows ได้
- โปรเจกต์นี้สร้างบน OSX-KVM และยังกล่าวถึง KVM-OpenCore, OpenCorePkg ด้วย
- มีอิมเมจบน Docker Hub ด้วย: sickcodes/docker-osx
เวอร์ชัน macOS ที่รองรับและวิธีรันแบบรวดเร็ว
- Quick Start เป็นวิธีส่งองค์ประกอบต่อไปนี้ใน
docker run--device /dev/kvm-p 50922:10022สำหรับ SSH- วอลุ่ม
/tmp/.X11-unixสำหรับ X11 DISPLAYSHORTNAMEสำหรับเลือกเวอร์ชัน macOS
- เป้าหมายที่ README มีตัวอย่างการรัน ได้แก่
-
High Sierra 10.13
-
Mojave 10.14
-
Catalina 10.15
-
Big Sur 11
-
Monterey 12
-
Ventura 13
-
Sonoma 14
-
Sequoia 15
- Tahoe 16
- ตัวอย่างบางส่วนหลัง Monterey ใช้
GENERATE_UNIQUE=trueร่วมกับMASTER_PLIST_URL - ตัวอย่าง Sonoma, Sequoia และ Tahoe ยังรวม
CPU='Haswell-noTSX'และCPUID_FLAGSด้วย
-
ประเภทอิมเมจและวัตถุประสงค์การใช้งาน
- Docker-OSX มีอิมเมจคอนเทนเนอร์ตามวัตถุประสงค์
sickcodes/docker-osx:latest: ใช้สำหรับลองอย่างรวดเร็วหรือสร้างอิมเมจ macOS เองsickcodes/docker-osx:auto: ใช้ระบบ Catalina ที่ตั้งค่าไว้ล่วงหน้า โดยชื่อผู้ใช้คือuserและรหัสผ่านคือalpinesickcodes/docker-osx:naked: แนบไฟล์.imgที่ผู้ใช้มีอยู่แล้วเพื่อรันsickcodes/docker-osx:naked-auto: ส่งUSERNAME,PASSWORD,OSX_COMMANDSให้กับอิมเมจของผู้ใช้ เพื่อทำ SSH และการรันคำสั่งแบบอัตโนมัติsickcodes/docker-osx:big-sur,:monterey,:ventura,:sonoma,:high-sierra,:mojave: สำหรับรันเวอร์ชันเฉพาะ
- อิมเมจ
nakedเหมาะกับโฟลว์ที่บูตดิสก์อิมเมจเดิมซ้ำ ๆ หรือย้อนคอนเทนเนอร์กลับไปยังสถานะก่อนหน้า autoและnaked-autoใช้กับ งานที่เน้น command line หรืองาน headless เช่นการ build ผ่าน Homebrew ได้
ฟีเจอร์หลัก
- ฟีเจอร์ที่ Docker-OSX ระบุมีดังนี้
- ใช้งาน iPhone OSX KVM บน Linux ด้วย usbfluxd
- รัน VM macOS Monterey
- แชร์โฟลเดอร์
- USB passthrough และ hotplug
- เปิดใช้ SSH:
localhost:50922 - เปิดใช้ VNC:
localhost:8888เมื่อใช้เวอร์ชัน./vnc - งานวิจัยความปลอดภัย iMessage ผ่าน serial number generator
- X11 forwarding
- รองรับ Big Sur, อิมเมจแบบกำหนดเอง และโหมด headless ผ่าน Xvfb
- โคลนคอนเทนเนอร์ได้ด้วย
docker commit
- รองรับ Kubernetes ด้วย และระบุว่า Helm Chart กับเอกสารอยู่ในไดเรกทอรี
helm
ข้อกำหนดและการตั้งค่าเริ่มต้น
- ข้อกำหนดขั้นต่ำมีดังนี้
- พื้นที่ดิสก์ 20GB ขึ้นไป
- 50GB เมื่อใช้ Xcode
- อย่างน้อย 50GB เมื่อใช้
:auto - เปิดใช้งาน virtualization ใน BIOS
- โฮสต์ x86_64 ที่ใช้ KVM ได้
- การตั้งค่าเริ่มต้นเป็นโฟลว์ที่ติดตั้ง QEMU และ dependency ที่เกี่ยวข้องบนโฮสต์ จากนั้นเปิดใช้งาน
libvirtd,virtlogdและโมดูลเคอร์เนล KVM - มีคำสั่งติดตั้งแพ็กเกจสำหรับ Arch, Ubuntu/Debian และ CentOS/RHEL/Fedora แยกกัน
- ในบางกรณีผู้ใช้อาจต้องอยู่ในกลุ่ม Docker, KVM และ libvirt และต้องตรวจสอบด้วยว่า Docker daemon กำลังทำงานอยู่
เงื่อนไขการรันบน Windows
- การรัน Docker-OSX บน Windows ทำได้ในสภาพแวดล้อม Windows 11 + WSL2
- ต้องใช้ Windows 11 build 22000+, 21H2 ขึ้นไป
- หลังติดตั้ง WSL ให้เพิ่ม
nestedVirtualization=trueใน.wslconfig - ตรวจสอบว่าใช้
/dev/kvmและ KVM acceleration ได้หรือไม่ใน WSL distribution ด้วยkvm-ok - ต้องเปิดใช้เอนจินบน WSL2 และการผสานรวมกับ WSL distribution หลักใน Docker for Windows
- วิธีแสดงผลหน้าจอแบ่งเป็น 3 แบบ
- WSLg: เป็นตัวเลือกที่ง่ายที่สุดและแนะนำ แต่การส่งต่อคีย์บอร์ดหรือปัญหาเมาส์ตัวที่สองปรากฏอาจเกิดขึ้นได้
- VNC: ใช้ QEMU VNC หรือการตั้งค่าในส่วน VNC
- Desktop Environment: ใช้ทรัพยากรมากกว่า แต่ให้ประสบการณ์เดสก์ท็อป Linux แบบเต็ม
การแชร์ไฟล์และการจัดการดิสก์
- เสนอ
sshfsเป็นวิธีแชร์ที่ง่ายและปลอดภัยที่สุด- บน Linux/Windows ให้เมานต์ macOS rootfs ใน userspace ด้วยรูปแบบ
sshfs user@localhost: -p 50922 ~/mnt/osx
- บน Linux/Windows ให้เมานต์ macOS rootfs ใน userspace ด้วยรูปแบบ
- QEMU 9p sharing ก็ทำได้
- ส่งโฟลเดอร์ของโฮสต์เข้าไปในคอนเทนเนอร์เป็น
/mnt/hostshare - เมานต์ภายใน macOS ด้วย
sudo -S mount_9p hostshare
- ส่งโฟลเดอร์ของโฮสต์เข้าไปในคอนเทนเนอร์เป็น
- มีคำแนะนำเรื่อง NFS sharing ด้วย
- ลงทะเบียนไดเรกทอรีที่จะแชร์ใน
/etc/exportsของโฮสต์ - เริ่มคอนเทนเนอร์ Docker-OSX ด้วย
--network host - ใช้
mount_nfsในเทอร์มินัล macOS
- ลงทะเบียนไดเรกทอรีที่จะแชร์ใน
- เมื่อพื้นที่ดิสก์ของ Docker ไม่พอ สามารถย้าย
/var/lib/dockerไปยังไดรฟ์ภายนอก, block storage, NFS ฯลฯ แล้วสร้าง symbolic link ได้- แนะนำให้ทำตามบทเรียนที่เกี่ยวข้องก็ต่อเมื่อยอมรับความเป็นไปได้ที่จะลบ Docker image และ layer ปัจจุบันได้เท่านั้น
iPhone USB และ USB passthrough
- สำหรับเดสก์ท็อป PC มีลิงก์แยกอธิบายวิธี iPhone USB passthrough บน VFIO
- บนโน้ตบุ๊ก, PC ฯลฯ สามารถใช้ USB passthrough แบบเครือข่ายผ่าน usbfluxd ได้
- เชื่อมต่อ iPhone หรือ iPad กับ Linux ผ่าน USB
- เปิดเผย
usbmuxdผ่านพอร์ต TCP5000 - เชื่อมต่อไปยังโฮสต์จาก guest macOS ด้วยรูปแบบ
usbfluxd -f -r 172.17.0.1:5000 - ระบุว่าเมื่อปิดแล้วเปิดแอปอย่าง Xcode ใหม่ อุปกรณ์จะปรากฏขึ้น
- สำหรับ USB passthrough ทั่วไป ระบุว่าต้องเริ่ม QEMU ด้วยสิทธิ์ root
- ตรวจสอบ bus และ port ด้วย
lsusb -t - ใช้
--privileged,/dev/kvm,EXTRA="-device ... usb-host ..."เป็นต้น - ระหว่าง VM ทำงาน ระบบโฮสต์จะเข้าถึงอุปกรณ์ USB นั้นไม่ได้
- ตรวจสอบ bus และ port ด้วย
Headless, VNC, SPICE และการรันระยะไกล
- การรันแบบ headless ทำโดยลบสองบรรทัดที่เกี่ยวกับ X11 ออกจาก
docker run- ลบวอลุ่ม
/tmp/.X11-unix - ลบตัวแปรสภาพแวดล้อม
DISPLAY
- ลบวอลุ่ม
- ระบุว่าคอนเทนเนอร์ headless ที่ใช้อิมเมจแบบกำหนดเองมีประโยชน์กับ CI/CD pipeline
- VNC สามารถใช้แบบ local-only ได้ แต่ README ระบุชัดว่า ไม่มีการเข้ารหัส TLS/HTTPS เลย
- แนะนำว่าจะปลอดภัยขึ้นเมื่อใช้ SSH tunnel และปิดพอร์ตภายนอก
- SPICE ก็ใช้งานได้
- เชื่อมต่อด้วย
remote-viewer spice://localhost:3001 -disable-ticketingในตัวอย่างอนุญาตให้เข้าถึง VM โดยไม่มีการยืนยันตัวตน จึงแนะนำให้อ้างอิงการตั้งค่าการยืนยันตัวตนในคู่มือ SPICE
- เชื่อมต่อด้วย
ซีเรียลนัมเบอร์และงานวิจัย iMessage/iCloud
- ค่าที่ต้องเปลี่ยนเพื่อใช้ iMessage หรือ iCloud ได้แก่
SERIALBOARD_SERIALUUIDMAC_ADDRESS- อธิบายว่า
ROMคือ MAC address ตัวพิมพ์เล็กที่ลบเครื่องหมายโคลอนออก
- Docker-OSX มีให้สองวิธี
GENERATE_UNIQUE=true: สร้างค่าที่ไม่ซ้ำกันตอน runtimeGENERATE_SPECIFIC=true: ใช้ค่าที่กำหนดไว้
./custom/generate-unique-machine-values.shสามารถสร้างซีเรียลนัมเบอร์, MAC address, เอาต์พุต CSV/TSV และอิมเมจ boot disk ได้- ตรวจสอบซีเรียลนัมเบอร์ภายใน macOS ได้ด้วย
ioreg -l | grep IOPlatformSerialNumber
ประสิทธิภาพ ความละเอียด และการตั้งค่าเครือข่าย
- ระบุว่าสามารถใช้ osx-optimizer เพื่อทำให้คอนเทนเนอร์เร็วขึ้นได้
- ข้ามหน้าจอ login แบบ GUI
- ปิดใช้งาน Spotlight indexing
- ปิดใช้งานพื้นหลังหน้าจอ login ที่หนัก
- ปิดใช้งานการอัปเดต
- เปลี่ยนความละเอียดได้ด้วยตัวแปรสภาพแวดล้อม
WIDTHและHEIGHT- ต้องใช้ร่วมกับ
GENERATE_UNIQUE=trueหรือGENERATE_SPECIFIC=true - การบูตจะใช้เวลานานขึ้นประมาณ 30 วินาทีเพื่อสร้าง boot partition ใหม่
- ความละเอียดที่ไม่ถูกต้องจะถูกตั้งเป็นค่าเริ่มต้น
800x600
- ต้องใช้ร่วมกับ
- เปลี่ยน network adapter ได้ด้วยตัวแปรสภาพแวดล้อม
- การเชื่อมต่ออินเทอร์เน็ตเร็ว:
NETWORKING=vmxnet3 - การเชื่อมต่ออินเทอร์เน็ตช้า:
NETWORKING=e1000-82545em
- การเชื่อมต่ออินเทอร์เน็ตเร็ว:
- ระบุว่าการเปิด IPv4 forwarding ในการติดตั้งระยะไกลอาจช่วยเพิ่มประสิทธิภาพ แต่ IP ของโฮสต์อาจรั่วไหลได้แม้จะใช้ VPN ในคอนเทนเนอร์
การแก้ปัญหาและข้อจำกัด
- หาก Docker daemon ไม่ได้ทำงาน อาจเกิดข้อผิดพลาด
docker: unknown server OS: .sudo dockerdsudo systemctl --start dockerdsudo systemctl --enable --now dockerd
- ไม่สามารถจัดสรร RAM ได้มากกว่าเครื่องจริง
- ค่าเริ่มต้นคือ
-e RAM=3 - หากจัดสรรเกิน อาจเกิดข้อผิดพลาด
cannot set up guest memory 'pc.ram': Cannot allocate memory
- ค่าเริ่มต้นคือ
- ข้อผิดพลาดเกี่ยวกับ ALSA อาจปรากฏระหว่างการเริ่มต้นคอนเทนเนอร์หรือการบูต และระบุว่าไม่ต้องกังวลหากการบูตและฟังก์ชันทำงานตามปกติ
- ใน TODO ยังเหลือรายการต่อไปนี้
- เอกสารสำหรับนักวิจัยด้านความปลอดภัย
- GPU acceleration
- การรองรับ virt-manager
ไลเซนส์และประกาศ
- Docker-OSX อยู่ภายใต้ไลเซนส์ GPL v3+
- ระบุว่าอนุญาตให้ใช้ Docker-OSX เป็นเครื่องมือสำหรับสร้างซอฟต์แวร์แบบ proprietary ได้
- มีประกาศเกี่ยวกับงานวิจัยความปลอดภัยของ Apple และ Apple Bug Bounty Program และลิงก์บทความแยกเกี่ยวกับประเด็นทางกฎหมายของ Hackintosh, OSX-KVM และ Docker-OSX
- ผลิตภัณฑ์ โลโก้ แบรนด์ และเครื่องหมายการค้าที่กล่าวถึงในโปรเจกต์เป็นทรัพย์สินของเจ้าของแต่ละราย และผู้ถือสิทธิ์ในเครื่องหมายการค้าเหล่านั้นไม่ได้เป็นพันธมิตร สนับสนุน หรือรับรอง repository นี้
1 ความคิดเห็น
ความเห็นจาก Hacker News
เรื่องนี้สำคัญสำหรับคนที่ตั้งใจจะใช้โปรเจกต์จริง ๆ แต่ไม่เข้าใจว่าทำไม สูตรบิลด์อย่าง Dockerfile จำนวนมากถึงถูกทำให้ดาวน์โหลดทรัพยากรสุ่ม ๆ จากอินเทอร์เน็ตระหว่างกระบวนการบิลด์
Dockerfile ของโปรเจกต์นี้ก็ดึง Git repository 2 แห่งกับสคริปต์ 1 ตัวมาตอนบิลด์
แน่นอนว่ามันจะล้มเหลวบนเซิร์ฟเวอร์บิลด์แบบ sandbox ที่ปิดการเข้าถึงอินเทอร์เน็ต และใครก็ตามที่ใส่ใจเรื่องความปลอดภัยแม้แต่นิดเดียวก็ต้อง audit สูตรบิลด์ทั้งหมดก่อนใช้งาน
แค่ตรวจ dependency ที่ระบุไว้ในข้อกำหนดการบิลด์อย่าง README, requirements.txt หรือ package.json นั้นไม่พอแล้ว และเมื่อดูจากเหตุขัดข้องของโครงสร้างพื้นฐานหลัก ๆ เมื่อเร็ว ๆ นี้กับการเพิ่มขึ้นของ การโจมตี supply chain ก็ถือเป็นแนวโน้มที่น่ากังวลมาก
มี surprise ที่ไม่น่าพอใจ เช่น ปัญหาเวอร์ชัน ไม่มีอินเทอร์เน็ต หรือแย่ที่สุดคือ dependency ไม่ถูกให้บริการอีกต่อไป การแจกจ่ายแบบ self-contained ควรเป็นค่าเริ่มต้น
Fedora และ openSUSE มักมีนโยบายให้การบิลด์ รวมถึงแพ็กเกจของดิสโทรและ container image ใช้เฉพาะแพ็กเกจใน repository หรือไบนารีที่เพิ่มเข้ามาอย่างชัดเจนระหว่างบิลด์เท่านั้น
ดังนั้นถ้าติดตั้งได้ด้วย
dnf/zypper installหรือดึงจาก container registry ของ vendor ได้ ก็สามารถเชื่อถือผลลัพธ์ได้ถ้าต้องการของล่าสุดแบบ bleeding edge ก็ต้องยอมรับทรัพยากรสุ่ม ๆ จากอินเทอร์เน็ต
นักพัฒนาโอเพนซอร์สทั่วไปยากที่จะสร้าง artifact สำหรับบิลด์ที่พร้อมใช้ออฟไลน์และเชื่อถือได้ และพวกเขาไม่มีโครงสร้างพื้นฐานแบบนั้น นั่นจึงเป็นเหตุผลที่บริษัทอย่าง Red Hat หรือ SUSE มีอยู่
องค์กรระดับหลายพันล้านดอลลาร์ยินดีจ่ายเงินเพื่อให้มีคนทำงานระบบท่อเบื้องหลัง เปลี่ยน artifact สุ่ม ๆ จากอินเทอร์เน็ตให้เป็น artifact ที่เชื่อถือได้ ทำซ้ำได้ และมีลายเซ็น พร้อมติดตาม CVE และอัปเดตเป็นประจำ
ในยุค 80 เราเคยจินตนาการถึงคอมโพเนนต์ซอฟต์แวร์แบบ modular reusable ที่เสียบต่อกันเหมือนตัวต่อเลโก้ ตอนนั้นเรียกว่า CASE ตอนนี้มันเป็นจริงแล้ว แต่แน่นอนว่ามีราคาที่ต้องจ่าย
ถ้าไม่ clone ใน Dockerfile ก็ต้องมีคำสั่งก่อนบิลด์ว่า “ตอน clone ให้ใช้
--recursiveหรือใช้git submodule initเพื่อดึง repository อื่นเข้ามาใน working directory ปัจจุบัน”ความเป็นไปได้เดียวของการเร่งความเร็วด้วย GPU คือส่งต่อ dGPU ที่รองรับผ่าน PCI passthrough ไปให้ AMD RX 6xxx ขึ้นไปทำได้บน macOS 14.x แต่ Nvidia รุ่นใหม่ ๆ แทบไม่มีทาง
Intel iGPU ใช้งานได้ถึง Comet Lake และบางส่วนของ Ice Lake แต่รุ่นใหม่กว่านั้นไม่ได้
macOS ที่เป็น build สำหรับ Apple Silicon ดูเหมือนจะยัง emulate ได้ยากไปอีกสักพัก และมีงานระยะแรก ๆ บ้างเกี่ยวกับการบูต ARM Darwin
นอกจากนี้ AMD ไม่มี Intel VT-x ทำให้ virtualization บนโฮสต์ AMD พัง แต่มี hack แปลก ๆ ผ่าน VirtualBox รุ่นเก่าที่ทำให้ Docker พอทำงานผ่าน emulation ได้ในระดับหนึ่ง
AMD มีทางเลือกของตัวเองแทน VT-x คือ AMD-V ดังนั้นควรทำงานได้โดยไม่มีปัญหา อย่างไรก็ตาม การบูต macOS บน CPU AMD ยังมีอุปสรรคอื่น ๆ และมักแก้ด้วยการโหลด kext หรือกลเม็ดอื่น
ไม่ค่อยเข้าใจความหมายของการรันทั้งระบบปฏิบัติการด้วย Docker เท่าไร แจกจ่ายเป็น OVA หรือรูปแบบ virtualization ที่ชอบก็พอ แค่ qcow2 กับ bash script สำหรับเริ่ม VM ก็น่าจะเพียงพอแล้ว
บทความที่เกี่ยวข้อง:
Docker-OSX: Run macOS VM in a Docker - https://news.ycombinator.com/item?id=34374710 - มกราคม 2023, 110 ความเห็น
macOS in QEMU in Docker - https://news.ycombinator.com/item?id=23419101 - มิถุนายน 2020, 186 ความเห็น
ผมเคยตั้งค่าเล่นเป็นการทดลองเมื่อไม่กี่เดือนก่อน และมันทำงานได้ค่อนข้างดี แต่พบว่าเพื่อให้ iMessage ทำงาน แอปพลิเคชันจะส่ง hardware ID ไปให้ Apple และโปรเจกต์นี้ใช้ ค่าปลอม
จากจุดนั้นก็เริ่มไถลลงทางลาดของ “ไม่น่าจะไหว” และพบว่าค่าปลอมอาจถูก Apple flag ทำให้ iCloud ID ถูกระบุว่าเป็นผู้ส่งสแปมที่อาจเป็นไปได้ และจำกัดการเข้าถึงจากอุปกรณ์อื่น ๆ
ตัวเลือกเดียวคือใช้ สคริปต์สร้าง hardware ID ที่ลิงก์ไว้อย่างคลุมเครือ ลองค่าไปเรื่อย ๆ เพื่อหาค่าที่ “ใช้ได้” แต่ไม่มีสัญญาณชัดเจนว่ามันตรงจริง ๆ และจะไม่ทำลาย reputation ของ iCloud
นอกเหนือจากนั้นมันทำงานได้ดีจริง ๆ และมีประโยชน์มากเวลาจำเป็น
ไม่นานก็พบว่าการคัดลอก Serial จาก Mac จริงที่เก่าแล้วง่ายกว่า
อย่างไรก็ตาม เครื่องมือนี้ดูจะมีประโยชน์มากกว่าสำหรับงานอย่าง build script ที่พึ่งพา framework เฉพาะของ macOS มากกว่าจะใช้เหมือนคอมพิวเตอร์ส่วนตัว
แค่อยากลองดูว่าสามารถบิลด์สำหรับ iOS ได้ไหม เช่นพวก Unity, React Native
แม้การบิลด์จะใช้เวลานานขึ้น 5 เท่า แต่ในแง่ของ ความยืดหยุ่น ก็น่าจะเจ๋งทีเดียว
วิธีที่ Godot ใช้บิลด์ไปยังเป้าหมาย iOS ก็เป็นแนวนี้: https://github.com/godotengine/build-containers/blob/main/Do...
มี Docker image ที่ติดตั้งเครื่องมือไว้ล่วงหน้าด้วย แต่ถ้าจะตั้งเป้าเป็น iOS ต้องแก้เล็กน้อย: https://github.com/shepherdjerred/macos-cross-compiler
ตอนอยู่ที่ RStudio ซึ่งปัจจุบันคือ Posit เคยทำงานคอมไพล์ข้ามแพลตฟอร์ม C/C++/Fortran/Rust จากโฮสต์ Linux ไปยัง macOS x86_64/aarch64
ถ้าดาวน์โหลดแพ็กเกจ R ที่มีโค้ด native จาก Posit Package Manager(https://p3m.dev/client/) ก็เป็นแพ็กเกจที่คอมไพล์ข้ามแพลตฟอร์มด้วยวิธีนี้ :)
เคยสัมภาษณ์ Sick Codes เกี่ยวกับแนวทางของผลิตภัณฑ์นี้มาก่อน: https://www.vice.com/en/article/akdmb8/open-source-app-lets-...
ยังมี OSX-PROXMOX ที่ทำสิ่งคล้ายกันบนโฮมเซิร์ฟเวอร์ Proxmox: https://github.com/luchina-gabriel/OSX-PROXMOX
ส่วนตัวใช้ตัวหลังบน HP Z420 Xeon อยู่ และเสถียรมาก โดยเฉพาะเมื่อทำ GPU passthrough
ถ้ารัน การซิงก์ iCloud บนโฮมเซิร์ฟเวอร์ได้ก็คงดี ตอนนี้ยังไม่มีวิธีดี ๆ ในการสำรอง iCloud ไปยังโฮมเซิร์ฟเวอร์/NAS โดยตรง และมันทำงานได้เฉพาะบน Windows/Apple เท่านั้น
https://github.com/steilerDev/icloud-photos-sync
https://github.com/icloud-photos-downloader/icloud_photos_do...
ปรากฏว่า iCloud ไม่ได้อัปเดตรูปต้นฉบับ ก็เข้าใจได้ แต่ไม่ช่วยคนที่คาดหวังว่าการสำรองข้อมูลจะรวมการเปลี่ยนแปลงเหล่านั้นด้วย
rsyncโฟลเดอร์ iCloud จาก Mac/PC ที่เชื่อมต่ออยู่ไปยัง NAS ได้บ้าง?สงสัยว่า การแจกจ่าย image ของ MacOS ซ้ำ ได้รับอนุญาตตามไลเซนส์หรือไม่ หรือโปรเจกต์นี้กำลังแจกจ่ายสำเนาละเมิดลิขสิทธิ์บน Docker Hub อย่างเปิดเผย?
สงสัยว่าถ้ามี MacOS เวอร์ชันใหม่กว่าที่ตัดการรองรับ Intel ออกไปแล้ว ความคืบหน้าจะหยุดหรือไม่
สามารถรัน Docker ภายในคอนเทนเนอร์นี้เพื่อรัน MacOS ใน MacOS ได้ไหม? ;)
เกลียดมากเวลาคำว่า “USB passthrough” ถูกใช้กับสถานการณ์ที่จริง ๆ แล้วอย่างดีก็เป็น “USB proxy ผ่านอีเทอร์เน็ต”
นั่นไม่ใช่ passthrough มันมีข้อเสียหลายอย่างที่ passthrough ทั่วไปไม่มี และ passthrough ขั้นสูงก็อาจไม่มีด้วย
แต่แนวทางนั้นก็นำปัญหาอื่น ๆ มาอีก จากประสบการณ์ที่เคยดูแล VM test farm ขนาดใหญ่ที่มีฮาร์ดแวร์ถูกส่งผ่านจำนวนมาก
อย่างไรก็ตาม “USB proxy ผ่านอีเทอร์เน็ต” ก็เป็น passthrough ของจริงเช่นกัน เพียงแต่เป็น passthrough ที่มี latency สูงกว่า VirtIO เท่านั้น