Oder kontaktieren Sie uns über Linkedin, wenn es privat ist: https://www.linkedin.com/in/sickcodes
Oder über https://sick.codes/contact/
Dieses Projekt wird von Sick.Codes gepflegt. (Twitter)
Weitere Credits finden Sie hier: https://github.com/sickcodes/Docker-OSX/blob/master/CREDITS.md
Darüber hinaus finden Sie hier eine umfassende Liste aller Mitwirkenden: https://github.com/sickcodes/Docker-OSX/graphs/contributors
Vielen Dank an @kholia für die Pflege des Upstream-Projekts, auf dem Docker-OSX aufbaut: OSX-KVM.
Besonderer Dank geht auch an @thenickdude, der den wertvollen Fork KVM-OpenCore verwaltet, der von @Leoyzen gestartet wurde!
Ein besonderer Dank geht an das OpenCore-Team unter: https://github.com/acidanthera/OpenCorePkg. Ihr gut gewarteter Bootloader bietet viele der großartigen Funktionen, die Docker-OSX-Benutzer genießen :)
Wenn Ihnen dieses Projekt gefällt, denken Sie darüber nach, hier oder im Upstream einen Beitrag zu leisten!
Ein Video-Setup-Tutorial ist auch hier verfügbar: https://www.youtube.com/watch?v=wLezYl77Ll8
Windows-Benutzer: Klicken Sie hier, um die Hinweise unten anzuzeigen!
Zum ersten Mal hier? Versuchen Sie es mit der Ersteinrichtung, andernfalls versuchen Sie die folgenden Anweisungen, um entweder Catalina oder Big Sur zu verwenden.
Release-Namen und ihre Version:
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 .
Dies ist eine besonders gute Möglichkeit, den Container herunterzuladen, falls das CDN von Docker (oder Ihre Verbindung) langsam ist.
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
Aktivieren Sie zunächst SSH für die Netzwerkfreigabe im Gast. Ändern Sie -e "USERNAME=user"
und -e "PASSWORD=password"
in Ihre Anmeldeinformationen. Der Container fügt sich selbst zu ~/.ssh/authorized_keys
hinzu
Da Sie den Bildschirm nicht sehen können, verwenden Sie PLIST mit nopicker, zum Beispiel:
# 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
Der einfachste und sicherste Weg ist 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
Wenn Sie einen Laptop haben, lesen Sie den nächsten Abschnitt zu usbfluxd.
Wenn Sie einen Desktop-PC haben, können Sie die Anweisungen von @Silfalion verwenden: https://github.com/Silfalion/Iphone_docker_osx_passthrough
Ein Video-Setup-Tutorial für usbfluxd ist auch hier verfügbar: https://www.youtube.com/watch?v=kTk5fGjK_PM
Diese Methode FUNKTIONIERT auf Laptop, PC, allem!
Vielen Dank @nikias für usbfluxd über https://github.com/corellium!
Dies geschieht innerhalb von Linux.
Öffnen Sie 3 Terminals unter Linux
Wenn Sie Ihr Gerät über USB unter Linux anschließen, können Sie usbmuxd
an Port 5000
über https://github.com/corellium/usbfluxd einem anderen System im selben Netzwerk zugänglich machen.
Stellen Sie sicher, dass usbmuxd
, socat
und usbfluxd
installiert sind.
sudo pacman -S libusbmuxd usbmuxd avahi socat
Verfügbar auf der AUR: https://aur.archlinux.org/packages/usbfluxd/
yay usbfluxd
Schließen Sie Ihr iPhone oder iPad an.
Terminal 1
sudo systemctl start usbmuxd
sudo avahi-daemon
Terminal 2:
# on host
sudo systemctl restart usbmuxd
sudo socat tcp-listen:5000,fork unix-connect:/var/run/usbmuxd
Terminal 3:
sudo usbfluxd -f -n
Dies erfolgt in macOS.
Homebrew installieren.
172.17.0.1
ist normalerweise die Docker-Bridge-IP, also Ihr PC, aber Sie können jede beliebige IP von ip addr
verwenden ...
macOS-Terminal:
# 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
Akzeptieren Sie die USB-über-TCP-Verbindung und erscheinen Sie als lokal:
(Möglicherweise müssen Sie 172.17.0.1
in die IP-Adresse des Hosts ändern. Überprüfen Sie beispielsweise ip addr
.)
# on the guest
sudo launchctl start usbmuxd
export PATH=/usr/local/sbin: ${PATH}
sudo usbfluxd -f -r 172.17.0.1:5000
Schließen Sie Apps wie Xcode und öffnen Sie sie erneut und Ihr Gerät sollte erscheinen!
Wenn Sie unter Linux neu starten müssen, löschen Sie die aktuellen Dateien usbfluxd, usbmuxd und socat:
sudo killall usbfluxd
sudo systemctl restart usbmuxd
sudo killall socat
SIEHE Befehle in https://github.com/sickcodes/osx-optimizer!
Verschieben Sie /var/lib/docker gemäß der Anleitung unten
Tutorial hier: https://sick.codes/how-to-run-docker-from-block-storage/
Befolgen Sie das obige Tutorial nur, wenn Sie mit dem Löschen aller Ihrer aktuellen Docker-Bilder/-Ebenen zufrieden sind.
Abgesicherter Modus: Deaktivieren Sie Docker vorübergehend, damit Sie den Docker-Ordner vorübergehend verschieben können.
killall dockerd
systemctl disable --now docker
systemctl disable --now docker.socket
systemctl stop docker
systemctl stop docker.socket
Da der Docker-Daemon nun ausgeschaltet ist, verschieben Sie /var/lib/docker irgendwohin
Dann verknüpfen Sie symbolisch /var/lib/docker irgendwo:
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
Wenn Sie Ordner sehen, hat es funktioniert. Sie können Docker neu starten oder einfach neu starten, wenn Sie sicher sein möchten.
14.11.2021 – High Sierra, Mojave hinzugefügt
Wählen Sie beim Erstellen eines davon aus, irrelevant, wenn Sie Docker Pull verwenden:
--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
Derzeit gibt es mehrere Bilder mit jeweils unterschiedlichen Anwendungsfällen (siehe unten):
Hohe Sierra:
Mojave:
Catalina:
Big-Sur:
Monterey macht Ihr eigenes Bild:
Ventura macht Ihr eigenes Bild:
Sonoma macht Ihr eigenes Bild:
Vorgefertigtes Catalina- System von Sick.Codes: Benutzername: user
, Passwort: alpine
Nackt: Bring-Your-Own-Image-Setup (verwenden Sie zuerst eines der oben genannten):
Naked Auto: wie oben, aber mit -e USERNAME
& -e PASSWORD
und -e OSX_COMMANDS="put your commands here"
localhost:50922
)localhost:8888
), wenn die ./vnc-Version verwendet wirddocker commit
klonen:auto
(die Hälfte für das Basis-Image, die andere Hälfte für Ihr Laufzeit-ImageBilder, die auf den Inhalten dieses Repositorys basieren, sind der Einfachheit halber auch auf Docker Hub verfügbar: https://hub.docker.com/r/sickcodes/docker-osx
Eine umfassende Liste der verfügbaren Docker-Images und deren Verwendungszweck finden Sie in der Anleitung.
Docker-OSX unterstützt Kubernetes.
Das Kubernetes-Helm-Diagramm und die Dokumentation finden Sie im Helm-Verzeichnis.
Vielen Dank an Cephasara für diesen wichtigen Beitrag.
Wenn Sie bei der Ausführung von Docker-OSX auf kleinere Probleme stoßen oder Fragen haben, können Sie jederzeit ein Problem eröffnen.
Bevor Sie jedoch ein Problem öffnen, überprüfen Sie bitte die geschlossenen Probleme und bestätigen Sie, dass Sie die neueste Version dieses Repositorys verwenden – Ihre Probleme wurden möglicherweise bereits gelöst! Möglicherweise finden Sie Ihre Antwort auch in unserem Abschnitt „Fragen und Antworten“ weiter unten.
Folgen Sie @sickcodes!
Für anspruchsvollere Vorhaben bieten wir folgende Unterstützungsleistungen an:
Wenn Sie interessiert sind, kontaktieren Sie @sickcodes auf Twitter oder klicken Sie hier.
Docker-OSX ist unter der GPL v3+ lizenziert. Beiträge sind willkommen und werden sehr geschätzt. Es ist Ihnen tatsächlich gestattet, Docker-OSX als Tool zum Erstellen proprietärer Software zu verwenden.
Wenn Ihnen Apple-Sicherheit am Herzen liegt und Sie im Rahmen des Apple Bug Bounty-Programms möglicherweise auf Bug-Bountys in sechsstelliger Höhe stoßen, dann sind Sie hier genau richtig! Weitere Hinweise: Ist Hackintosh, OSX-KVM oder Docker-OSX legal?
Produktnamen, Logos, Marken und andere Marken, auf die in diesem Projekt Bezug genommen wird, sind Eigentum ihrer jeweiligen Markeninhaber. Diese Markeninhaber sind in keiner Weise mit unserem Repository verbunden. Sie sponsern oder unterstützen dieses Projekt in keiner Weise.
Es stehen verschiedene Docker-OSX-Images zur Verfügung, die für unterschiedliche Zwecke geeignet sind.
sickcodes/docker-osx:latest
– Ich möchte es einfach ausprobieren.sickcodes/docker-osx:latest
– Ich möchte Docker-OSX verwenden, um Apps in Xcode zu entwickeln/sichern (melden Sie sich bei Xcode, Transporter an)sickcodes/docker-osx:naked
– Ich möchte Docker-OSX für CI/CD-bezogene Zwecke verwenden (bei Xcode, Transporter anmelden) Erstellen Sie Ihr persönliches Bild mit :latest
oder big-sur
. Ziehen Sie dann das Bild aus dem Bild heraus. Anschließend können Sie dieses Bild duplizieren und in den :naked
-Container importieren, um den Container wiederholt in einen vorherigen Zustand zurückzusetzen.
sickcodes/docker-osx:auto
– Ich bin nur an der Verwendung der Befehlszeile interessiert (nützlich zum Kompilieren von Software oder zur kopflosen Verwendung von Homebrew).
sickcodes/docker-osx:naked
– Ich benötige iMessage/iCloud für Sicherheitsrecherchen.
sickcodes/docker-osx:big-sur
– Ich möchte Big Sur ausführen.
sickcodes/docker-osx:monterey
– Ich möchte Monterey ausführen.
sickcodes/docker-osx:ventura
– Ich möchte Ventura ausführen.
sickcodes/docker-osx:sonoma
– Ich möchte Sonoma ausführen.
sickcodes/docker-osx:high-sierra
– Ich möchte High Sierra ausführen.
sickcodes/docker-osx:mojave
– Ich möchte Mojave ausführen.
Bevor Sie etwas anderes tun, müssen Sie die Hardware-Virtualisierung in Ihrem BIOS aktivieren. Wie genau, hängt von Ihrem jeweiligen Computer (und BIOS) ab, sollte aber unkompliziert sein.
Dann benötigen Sie QEMU und einige andere Abhängigkeiten auf Ihrem Host:
# 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
Aktivieren Sie dann libvirt und laden Sie das KVM-Kernelmodul:
sudo systemctl enable --now libvirtd
sudo systemctl enable --now virtlogd
echo 1 | sudo tee /sys/module/kvm/parameters/ignore_msrs
sudo modprobe kvm
Das Ausführen von Docker-OSX unter Windows ist mit WSL2 (Windows 11 + Windows-Subsystem für Linux) möglich.
Sie müssen Windows 11 mit Build 22000+ (21H2 oder höher) installiert haben.
Installieren Sie zunächst WSL auf Ihrem Computer, indem Sie diesen Befehl in einer Administrator-Powershell ausführen. Weitere Informationen finden Sie hier.
Dadurch wird Ubuntu standardmäßig installiert.
wsl --install
Sie können bestätigen, dass WSL2 aktiviert ist, indem Sie wsl -l -v
in PowerShell verwenden. Um andere verfügbare Distributionen anzuzeigen, verwenden Sie wsl -l -o
.
Wenn Sie WSL1 zuvor installiert haben, aktualisieren Sie auf WSL 2. Klicken Sie auf diesen Link, um ein Upgrade von WSL1 auf WSL2 durchzuführen.
Gehen Sie nach der WSL-Installation zu C:/Users/<Your_Name>/.wslconfig
und fügen Sie nestedVirtualization=true
am Ende der Datei hinzu (wenn die Datei nicht vorhanden ist, erstellen Sie sie). Weitere Informationen zur .wslconfig
Datei finden Sie unter diesem Link. Stellen Sie sicher, dass Sie in den Datei-Explorer-Optionen „Versteckte Dateien anzeigen“ und „Dateierweiterungen anzeigen“ ausgewählt haben. Das Ergebnis sollte so aussehen:
[wsl2]
nestedVirtualization=true
Gehen Sie in Ihre WSL-Distribution (Führen Sie wsl
in Powershell aus) und prüfen Sie, ob KVM aktiviert ist, indem Sie den Befehl kvm-ok
verwenden. Die Ausgabe sollte so aussehen:
INFO: /dev/kvm exists
KVM acceleration can be used
Verwenden Sie den Befehl sudo apt -y install bridge-utils cpu-checker libvirt-clients libvirt-daemon qemu qemu-kvm
um es zu installieren, falls dies nicht der Fall ist.
Laden Sie jetzt Docker für Windows herunter und installieren Sie es, falls es noch nicht installiert ist.
Gehen Sie nach der Installation zu den Einstellungen und aktivieren Sie diese beiden Kontrollkästchen:
General -> "Use the WSL2 based engine";
Resources -> WSL Integration -> "Enable integration with my default WSL distro",
Stellen Sie sicher, dass x11-apps
installiert ist. Verwenden Sie den Befehl sudo apt install x11-apps -y
um es zu installieren, falls dies nicht der Fall ist.
Schließlich gibt es drei Möglichkeiten, eine Videoausgabe zu erhalten:
Um den integrierten X-11-Server von WSLg zu verwenden, ändern Sie diese beiden Zeilen im Docker-Run-Befehl, um Docker-OSX auf WSLg zu verweisen.
-e "DISPLAY=${DISPLAY:-:0.0}"
-v /mnt/wslg/.X11-unix:/tmp/.X11-unix
Oder versuchen Sie:
-e "DISPLAY=${DISPLAY:-:0}"
-v /mnt/wslg/.X11-unix:/tmp/.X11-unix
Informationen zu Ubuntu 20.x unter Windows finden Sie unter #458
Starten Sie das macOS-Basissystem (drücken Sie die Eingabetaste).
Klicken Sie auf Disk Utility
Löschen Sie die GRÖSSTE Festplatte (ca. 200 GB Standard), ÄNDERN SIE DIE KLEINEREN FESTPLATTEN NICHT. – Wenn Sie nicht auf erase
klicken können, müssen Sie möglicherweise die Festplattengröße um 1 KB reduzieren
(optional) Erstellen Sie eine Partition, die den ungenutzten Speicherplatz nutzt, um das Betriebssystem und Ihre Dateien unterzubringen, wenn Sie die Kapazität begrenzen möchten. (Für Xcode 12-Partition mindestens 60 GB.)
Klicken Sie auf Reinstall macOS
Das System kann während der Installation mehrere Neustarts erfordern
Dies ist ein guter Ausgangspunkt, wenn Sie Schwierigkeiten haben, loszulegen, insbesondere wenn Sie mit Docker noch nicht so vertraut sind.
Möchten Sie einfach schnell einen Behälter herstellen? Schauen Sie sich unseren Abschnitt mit Beispielen für die Containererstellung an.
Spezifischere/erweiterte Fragen und Antworten zur Fehlerbehebung finden Sie unter „Weitere Fragen und Antworten“. Sie sollten sich auch die geschlossenen Probleme ansehen. Möglicherweise hat jemand anderes eine Frage wie Ihre bereits beantwortet, auch wenn Sie sie in diesem Dokument nicht finden können!
Siehe Ersteinrichtung.
docker: unknown server OS: .
See 'docker run --help'.
Das bedeutet, dass Ihr Docker-Daemon nicht ausgeführt wird.
pgrep dockerd
sollte nichts zurückgeben
Daher haben Sie einige Möglichkeiten.
sudo dockerd
für die Docker-Nutzung im Vordergrund. Ich benutze das.
Oder
sudo systemctl --start dockerd
um dockerd dies jetzt zu starten.
Oder
sudo systemctl --enable --now dockerd
zum Starten von dockerd bei jedem Neustart und jetzt.
Beispiele:
-e EXTRA='-smp 6,sockets=3,cores=2'
-e EXTRA='-smp 8,sockets=4,cores=2'
-e EXTRA='-smp 16,sockets=8,cores=2'
Beachten Sie, dass die CPU-Nutzung im Gegensatz zum Speicher geteilt wird. So können Sie alle Ihre CPUs dem Container zuweisen.
Wenn Sie sudo dockerd
verwenden oder dockerd von systemd/systemctl gesteuert wird, müssen Sie in der Docker-Gruppe sein. Wenn Sie nicht zur Docker-Gruppe gehören:
sudo usermod -aG docker " ${USER} "
und fügen Sie sich bei Bedarf auch den Gruppen kvm und libvirt hinzu:
sudo usermod -aG libvirt " ${USER} "
sudo usermod -aG kvm " ${USER} "
Siehe auch: Ersteinrichtung.
# 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
Ein großes Dankeschön an unsere Mitwirkenden, die bisher fast jedes erdenkliche Problem gelöst haben!
https://github.com/sickcodes/Docker-OSX/blob/master/CREDITS.md
Sie haben einen Container mit docker run
erstellt und möchten das zugrunde liegende Image später wiederverwenden?
Hinweis: Sehen Sie sich zuerst die Beispiele zur Containererstellung an, um zu erfahren, wie Sie zu dem Punkt gelangen, an dem dies anwendbar ist.
Dies ist für den Fall gedacht, dass Sie den SELBEN Container später erneut ausführen möchten. Möglicherweise müssen Sie docker commit
verwenden, um Ihren Container zu speichern, bevor Sie ihn wiederverwenden können. Überprüfen Sie, ob Ihr Container mit docker ps --all
persistent ist.
Wenn Sie dies nicht ausführen, erhalten Sie jedes Mal ein neues Bild.
# 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"
Sie können die .img
Datei auch aus dem Container ziehen, der in /var/lib/docker
gespeichert ist, und sie als Laufzeitargument für das :naked
Docker-Image bereitstellen.
Siehe auch: hier.
Container, die sickcodes/docker-osx:auto
verwenden, können beim Start gestoppt werden.
# 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 >
Möglicherweise werden ein oder mehrere libgtk-bezogene Fehler angezeigt, wenn Sie noch nicht alles für die Hardware-Virtualisierung eingerichtet haben. Wenn Sie dies noch nicht getan haben, lesen Sie den Abschnitt zur Ersteinrichtung und den Abschnitt zu Routineprüfungen, da Sie möglicherweise einen Einrichtungsschritt verpasst haben oder nicht alle erforderlichen Docker-Abhängigkeiten einsatzbereit haben.
Siehe auch: hier.
Wenn Sie xhost noch nicht eingerichtet haben, versuchen Sie Folgendes:
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 +
Sie können nicht mehr RAM zuweisen, als Ihr Computer hat. Der Standardwert ist 3 Gigabyte: -e RAM=3
.
Wenn Sie versuchen, dem Container mehr RAM zuzuweisen, als Ihnen derzeit zur Verfügung steht, wird möglicherweise eine Fehlermeldung wie die folgende angezeigt: cannot set up guest memory 'pc.ram': Cannot allocate memory
. Siehe auch: hier, hier.
Zum Beispiel (unten) enthält der buff/cache
bereits 20 Gigabyte zugewiesenen RAM:
[user@hostname ~] $ free -mh
total used free shared buff/cache available
Mem: 30Gi 3.5Gi 7.0Gi 728Mi 20Gi 26Gi
Swap: 11Gi 0B 11Gi
Leeren Sie den Puffer und den Cache:
sudo tee /proc/sys/vm/drop_caches <<< 3
Überprüfen Sie nun noch einmal den 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
Hinweis: AppleALC, alcid
und VoodooHDA-OC bieten keine Codec-Unterstützung. Allerdings zeigt IORegistryExplorer an, dass die Controller-Komponente funktioniert.
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
Es ist möglich, je nach Bedarf weitere Ports weiterzuleiten. In diesem Beispiel verwenden wir Mac OSX zum Hosten von Nginx:
host:10023 <-> 10023:container:10023 <-> 80:guest
Führen Sie auf dem Hostcomputer Folgendes aus:
docker run -it
--device /dev/kvm
-p 50922:10022
-e ADDITIONAL_PORTS= ' hostfwd=tcp::10023-:80, '
-p 10023:10023
sickcodes/docker-osx:auto
Führen Sie in einer Terminalsitzung, in der der Container ausgeführt wird, Folgendes aus:
/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 sollte nun über Port 10023 erreichbar sein.
Darüber hinaus können Sie mehrere Anweisungen aneinanderreihen, zum Beispiel:
-e ADDITIONAL_PORTS= ' hostfwd=tcp::10023-:80,hostfwd=tcp::10043-:443, '
-p 10023:10023
-p 10043:10043
Möglicherweise müssen Sie an der Standardeinrichtung nichts ändern, um die Internetverbindung innerhalb des Containers zu ermöglichen. Darüber hinaus funktioniert curl
möglicherweise auch dann, wenn ping
dies nicht tut.
Siehe Diskussion hier und hier und hier.
Dies ist für LOKALE Installationen nicht erforderlich.
Beachten Sie außerdem, dass dies dazu führen kann, dass der Host Ihre IP preisgibt, selbst wenn Sie ein VPN im Container verwenden.
Wenn Sie jedoch versuchen, eine Remote-Verbindung zu einer Instanz von Docker-OSX herzustellen (z. B. einer Instanz von Docker-OSX, die in einem Rechenzentrum gehostet wird), kann dies Ihre Leistung verbessern:
# 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
Das Teilen eines Ordners mit Gästen ist ganz einfach.
Ihr Ordner wird nach /mnt/hostshare im Arch-Container verschoben, der dann über QEMU übergeben wird.
Mounten Sie dann mit sudo -S mount_9p hostshare
vom Mac aus.
Zum Beispiel,
FOLDER= ~ /somefolder
-v " ${FOLDER} :/mnt/hostshare "
-e EXTRA= " -virtfs local,path=/mnt/hostshare,mount_tag=hostshare,security_model=passthrough,id=hostshare "
Vollständiges Beispiel:
# 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
Um einen Ordner über NFS freizugeben, richten Sie einen Ordner auf dem Hostcomputer ein, zum Beispiel /srv/nfs/share
, und hängen Sie ihn dann an /etc/exports
an:
/srv/nfs/share 127.0.0.1/0(insecure,rw,all_squash,anonuid=1000,anongid=985,no_subtree_check)
Möglicherweise müssen Sie die Exporte jetzt neu laden, wodurch das Verzeichnis freigegeben wird.
# reload shared folders
sudo exportfs -arv
Quelle & Erklärung
Erteilen Sie Berechtigungen für den freigegebenen Ordner für anonuid
und anongid
, wobei anonuid
und anongid
mit denen Ihres Linux-Benutzers übereinstimmen. id -u
id -u ; id -g
gibt userid:groupid
aus
chown 1000:985 /srv/nfs/share
chmod u+rwx /srv/nfs/share
Starten Sie den Docker-OSX-Container mit dem zusätzlichen Flag --network host
Erstellen und mounten Sie den NFS-Ordner vom Mac-Terminal aus:
mkdir -p ~/mnt
sudo mount_nfs -o locallocks 10.0.2.2:/srv/nfs/share ~/mnt
Starten Sie Ihren Container.
Wählen Sie einen Port, zum Beispiel 7700
.
lsusb
vid:pid
zu erhalten
Unter Linux: sudo usbredirserver -p 7700 1e3d:2096
Drücken Sie nun im Docker-Fenster die Eingabetaste, um die (qemu)
-Konsole anzuzeigen.
Sie können die Festplatte mit Befehlen wie diesen hinzufügen/entfernen, auch wenn die Maschine gestartet ist:
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 " `
Die Standard-Firewall-Einstellungen von Fedora verhindern möglicherweise, dass die Netzwerkschnittstelle von Docker das Internet erreicht. Um dieses Problem zu beheben, müssen Sie die Schnittstelle in Ihrer Firewall auf die Whitelist setzen:
# Set the docker0 bridge to the trusted zone
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
sudo firewall-cmd --reload
Überprüfen Sie, ob auf Ihrem Computer die Hardwarevirtualisierung aktiviert ist:
sudo tee /sys/module/kvm/parameters/ignore_msrs <<< 1
egrep -c ' (svm|vmx) ' /proc/cpuinfo
-e NETWORKING=vmxnet3
-e NETWORKING=e1000-82545em
du -sh *
ausgehend vom /
-Verzeichnis und die Suche nach großen Verzeichnissen, in denen Dateien entfernt werden können. ZB unnötige zwischengespeicherte Dateien, Xcode-Plattformen usw.sudo trimforce enable
und starten Sie neu.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
aus, um etwaige Fehler zu beheben.qemu-img convert -O qcow2 mac_hdd_ng.img deduped.img
aus und prüfen Sie erneut auf Fehlerqemu-img convert -c -O qcow2 deduped.img compressed.img
aus, um das Bild weiter zu komprimieren. Dies kann zwar die Laufzeitgeschwindigkeit verringern, sollte aber die Größe um etwa 25 % reduzieren. FROM sickcodes/docker-osx
USER arch
COPY --chown=arch ./deduped.img /home/arch/OSX-KVM/mac_hdd_ng.img
Stellen Sie zunächst sicher, dass Autoboot aktiviert ist
Als Nächstes möchten Sie SSH so einrichten, dass es automatisch gestartet wird.
sudo systemsetup -setremotelogin on
Stellen Sie sicher, dass Sie das neue Docker-Image festschreiben und speichern oder wie im Abschnitt zum Reduzieren des Speicherplatzes beschrieben neu erstellen.
Führen Sie es dann mit diesen Argumenten aus.
# 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
Wenn Sie Docker-OSX lokal erstellen, möchten Sie wahrscheinlich die Spiegel von Arch Linux verwenden.
Mirror-Standorte finden Sie hier (verwendet zweibuchstabige Ländercodes): 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 .
Übergeben Sie alle Geräte/Verzeichnisse an den Docker-Container und die QEMU-Argumente mithilfe der praktischen Laufzeitargumentanbieteroption -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
Generieren Sie Seriennummern in ./custom
ODER lassen Sie Docker sie zur Laufzeit generieren (siehe unten).
Überprüfen Sie jederzeit Ihre Seriennummer, bevor Sie sich bei iCloud usw. anmelden.
# 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
Im Ordner ./custom
finden Sie 4
Skripte.
config-nopicker-custom.plist
opencore-image-ng.sh
Diese beiden Dateien stammen von OSX-KVM.
Sie müssen diese beiden Dateien nicht berühren.
Die config.plist enthält 5 Werte, die durch Platzhalter ersetzt wurden. Klicken Sie hier, um diese Werte ohne Angabe von Gründen anzuzeigen.
generate-unique-machine-values.sh
Dieses Skript generiert Seriennummern mit Mac-Adressen, gibt sie in CSV/TSV aus und erstellt ein bootdisk image
. Sie können Hunderte erstellen, ./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
Oder wenn Sie bestimmte Seriennummern haben ...
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
Wenn Sie Seriennummern generieren möchten, erstellen Sie diese entweder zur Laufzeit mit -e GENERATE_UNIQUE=true
Oder Sie können sie im Ordner ./custom
generieren. Und dann verwenden Sie:
-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
Um iMessage oder iCloud verwenden zu können, müssen Sie 5
Werte ändern.
SERIAL
BOARD_SERIAL
UUID
MAC_ADDRESS
ROM
ist nur die MAC-Adresse in Kleinbuchstaben, ohne :
zwischen jedem Wort.
Mit -e GENERATE_UNIQUE=true
können Sie den Container anweisen, sie für Sie zu generieren
Oder weisen Sie den Container mit -e GENERATE_SPECIFIC=true
an, bestimmte zu verwenden
-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 "
Die Bildschirmauflösung wird durch diese Zeile gesteuert:
https://github.com/sickcodes/Docker-OSX/blob/master/custom/config-nopicker-custom.plist#L819
Anstatt diese Festplatte zu mounten, generiert Docker-OSX mithilfe dieses coolen Tricks eine neue OpenCore.qcow2
:
-e GENERATE_UNIQUE=true
-e WIDTH=800
-e HEIGHT=600
Um WIDTH
/ HEIGHT
zu verwenden, müssen Sie entweder -e GENERATE_UNIQUE=true
oder -e GENERATE_SPECIFIC=true
verwenden.
Der Startvorgang dauert etwa 30 Sekunden länger, da mithilfe von libguestfs
eine neue Startpartition erstellt werden muss.
-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
Hier sind noch ein paar andere Vorsätze! Wenn Ihre Auflösung ungültig ist, wird standardmäßig 800 x 600 verwendet.
-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
Der erste Schritt besteht darin, den Docker-Daemon zu stoppen
sudo systemctl stop docker
Der zweite Schritt besteht darin, die Containerkonfiguration zu ändern
/var/lib/docker/containers/[container-id]/config.v2.json
(Angenommen, Ihre ursprüngliche WIDTH ist 1024 und HEIGHT ist 768. Sie können 1024 suchen und durch den neuen Wert ersetzen. Dasselbe gilt für 768.)
Der letzte Schritt besteht darin, den Docker-Daemon neu zu starten
sudo systemctl restart docker
Übergeben Sie die Festplatte als Volume an den Container und übergeben Sie sie dann erneut an die QEMU-Befehlszeilen-Extras mit.
Verwenden Sie config-custom.plist
, da Sie wahrscheinlich das Startmenü sehen möchten. Andernfalls lassen Sie die erste Zeile weg:
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
Siehe auch: hier.
In Docker-OSX verwenden wir qcow2
Images.
Das bedeutet, dass das Image mit der Nutzung wächst, das Gastbetriebssystem jedoch davon ausgeht, dass 200 GB verfügbar sind.
NUR LESEN
# 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
Wenn Sie mit der Betrachtung Ihrer Festplatte fertig sind, können Sie die Partition und die Festplatte aushängen und das Loopback-Gerät entfernen:
sudo umount ./part
sudo umount ./mnt
sudo qemu-nbd --disconnect /dev/nbd0
sudo rmmod nbd
Zunächst muss QEMU als Root gestartet werden.
Es ist möglicherweise auch möglich, USB-Passthrough zu erreichen, indem die Berechtigungen des Geräts im Container geändert werden. Siehe hier.
Erstellen Sie beispielsweise eine neue Docker-Datei mit Folgendem
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
Dabei ist new_image.img
das qcow2-Bild, das Sie extrahiert haben. Dann mit docker build .
Als nächstes müssen wir die Bus- und Portnummern des USB-Geräts herausfinden, das wir an die VM weiterleiten möchten:
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
In diesem Beispiel wollen wir ein Smartcard-Gerät passieren. Das gewünschte Gerät befindet sich an Bus 1 und Port 2.
Es kann auch Unterschiede geben, wenn Ihr Gerät USB 2.0 (ehci) oder USB 3.0 (xhci) ist. Weitere Einzelheiten finden Sie hier.
# 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
Das Gerät sollte angezeigt werden, wenn Sie system_profiler SPUSBDataType
in der MacOS-Shell ausführen.
Wichtiger Hinweis: Dadurch verliert das Hostsystem den Zugriff auf das USB-Gerät, während die VM läuft!
Das ist mein Lieblingsbehälter. Sie können ein vorhandenes Disk-Image als Docker-Befehlszeilenargument angeben.
Rufen Sie Bilder mit sudo find /var/lib/docker -name mac_hdd_ng.img -size +10G
Geben Sie Ihr eigenes lokales Image mit dem Befehlsargument -v "${PWD}/mac_hdd_ng.img:/image"
an und verwenden Sie sickcodes/docker-osx:naked
wenn Sie Docker anweisen, Ihren Container zu erstellen.
Das nackte Image dient zum Booten einer vorhandenen IMG-Datei, z. B. im aktuellen Arbeitsverzeichnis ( $PWD
).
Standardmäßig verfügt dieses Bild über eine Variable namens NOPICKER
, die "true"
ist. Dadurch wird das Festplattenauswahlmenü übersprungen. Verwenden Sie -e NOPICKER=false
oder eine andere Zeichenfolge als das Wort true
um das Startmenü aufzurufen.
Dadurch können Sie andere Festplatten verwenden, anstatt das Startmenü zu überspringen, z. B. eine Wiederherstellungsdiskette oder ein Festplatten-Dienstprogramm.
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
Der Schnellstartbefehl sollte sofort funktionieren, vorausgesetzt, Sie behalten die folgenden Zeilen bei. Funktioniert in auto
und naked
Maschinen:
-v /tmp/.X11-unix:/tmp/.X11-unix
-e "DISPLAY=${DISPLAY:-:0.0}"
-e OSX_COMMANDS
ermöglicht die Ausführung beliebiger Befehle im Container
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!
ODER wenn Sie bereits ein Image haben und sich nur anmelden und beliebige Befehle ausführen möchten:
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!
Es gibt unzählige andere potenzielle Anwendungsfälle, die perfekt mit Docker-OSX funktionieren können, von denen Sie einige unten sehen werden!
Entfernen Sie für einen Headless-Container die folgenden zwei Zeilen aus Ihrem docker run
-Befehl:
# -v /tmp/.X11-unix:/tmp/.X11-unix
# -e "DISPLAY=${DISPLAY:-:0.0}"
Dies ist besonders hilfreich für CI/CD-Pipelines.
# 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
Muss -it in -i ändern, um mit der QEMU-Konsole interagieren zu können
Um einen Container mit -i zu verlassen, müssen Sie docker kill <containerid>
. Um beispielsweise alles zu töten, docker ps | xargs docker kill
.
Natives QEMU-VNC-Beispiel
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
Überhaupt NICHT TLS/HTTPS-verschlüsselt!
Oder ssh -N [email protected] -L 5999:127.0.0.1:5999
, wobei 1.1.1.1
die IP Ihres Remote-Servers ist.
(Hinweis: Wenn Sie Port 5999 schließen und den SSH-Tunnel verwenden, wird dieser sicher.)
Fügen Sie die folgende Zeile hinzu:
-e EXTRA="-display none -vnc 0.0.0.0:99,password=on"
Drücken Sie im Docker-Terminal enter
, bis (qemu)
angezeigt wird.
Geben Sie change vnc password someusername
Geben Sie ein Passwort für Ihren neuen VNC-Benutzernamen ein^.
Sie benötigen außerdem die Container-IP: docker inspect <containerid> | jq -r '.[0].NetworkSettings.IPAddress'
Oder ip n
zeigt normalerweise zuerst die Container-IP an.
Jetzt stellt VNC eine Verbindung über die Docker-Container-IP her, zum Beispiel 172.17.0.2:5999
Remote-VNC über SSH: ssh -N [email protected] -L 5999:172.17.0.2:5999
, wobei 1.1.1.1
die IP Ihres Remote-Servers und 172.17.0.2
die IP Ihres LAN-Containers ist.
Jetzt können Sie VNC direkt mit jedem Container verbinden, der mit diesem Befehl erstellt wurde!
Optional können Sie das SPICE-Protokoll aktivieren, das die Verwendung von remote-viewer
für den Zugriff auf Ihren OSX-Container anstelle von VNC ermöglicht.
Hinweis: -disable-ticketing
ermöglicht den nicht authentifizierten Zugriff auf die VM. Weitere Informationen zum Einrichten des authentifizierten Zugriffs („Ticketing“) finden Sie im Spice-Handbuch.
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
Führen Sie dann einfach remote-viewer spice://localhost:3001
aus und fügen Sie zum Debuggen --spice-debug
hinzu.
# 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
Fügen Sie die zusätzliche Option -e NOPICKER=true
hinzu.
Alte Maschinen:
# 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
"
In den Einstellungen des Containers sind weiterhin automatische Updates aktiviert. Möglicherweise möchten Sie sie deaktivieren. Wir haben diesbezügliche Zukunftspläne für die Entwicklung.
${DISPLAY:-:0.0}
? $DISPLAY
ist die Shell-Variable, die auf Ihren X11-Anzeigeserver verweist.
${DISPLAY}
ist dasselbe, ermöglicht Ihnen jedoch das Verknüpfen von Variablen wie folgt:
${DISPLAY}_${DISPLAY}
:0.0_:0.0
ausgeben$DISPLAY_$DISPLAY
:0.0
ausgeben ...weil $DISPLAY_
nicht $DISPLAY
ist
${variable:-fallback}
können Sie eine „Fallback“-Variable festlegen, die ersetzt wird, wenn $variable
nicht festgelegt ist.
Sie können diese Variable auch mit ${variable:=fallback}
festlegen (in Ihrem aktuellen Terminal).
In Docker-OSX gehen wir davon aus, dass :0.0
Ihre Standardvariable $DISPLAY
ist.
Sie können sehen, was Ihnen gehört
echo $DISPLAY
Auf diese Weise verwendet ${DISPLAY:-:0.0}
die Variable, die Ihr X11-Server für Sie festgelegt hat, andernfalls :0.0
-v /tmp/.X11-unix:/tmp/.X11-unix
? -v
ist eine Docker-Befehlszeilenoption, mit der Sie ein Volume an den Container übergeben können.
Das Verzeichnis, das wir dem Docker-Container erlauben, ist ein X-Server-Display-Socket.
/tmp/.X11-unix
Wenn wir zulassen, dass der Docker-Container denselben Display-Socket wie unsere eigene Umgebung verwendet, werden alle Anwendungen, die Sie im Docker-Container ausführen, auch auf Ihrem Bildschirm angezeigt! https://www.x.org/archive/X11R6.8.0/doc/RELNOTES5.html
Beim Initialisieren oder Booten eines Containers werden möglicherweise Fehler in der (qemu)
-Konsole der folgenden Form angezeigt: ALSA lib blahblahblah: (function name) returned error: no such file or directory
. Diese werden mehr oder weniger erwartet. Solange Sie in den Container booten können und alles funktioniert, besteht darüber kein Grund zur Sorge.
Siehe auch: hier.