Hackintosh
2024-05-28
- https://github.com/topics/hackintosh
- 使用星星數最多的 https://github.com/kholia/OSX-KVM 來做敲門磚
- 測試環境:AWS EC2 - 因為還有 60 美金左右的 credit 必須在 5/31 前用完
- Base OS: Ubuntu 24.04
jazzwang:~$ ssh kvm Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-1008-aws x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/pro System information as of Tue May 28 03:32:52 UTC 2024 System load: 0.08 Temperature: -273.1 C Usage of /: 0.8% of 192.69GB Processes: 133 Memory usage: 1% Users logged in: 0 Swap usage: 0% IPv4 address for ens5: 172.31.18.147 Expanded Security Maintenance for Applications is not enabled. 0 updates can be applied immediately. Enable ESM Apps to receive additional future security updates. See https://ubuntu.com/esm or run: sudo pro status The list of available updates is more than a week old. To check for new updates run: sudo apt update Last login: Tue May 28 03:32:55 2024 from x.x.x.x To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details.
(1) OSX-KVM
- 安裝必要的套件 Install QEMU and other packages.
- 由於 qemu 在 Ubuntu 22.04 LTS 是 dummy package, 在 Ubuntu 24.04 LTS 已經沒有這個套件。先拿掉再來看到底程式會用到什麼 QEMU 指令。
ubuntu@ip-172-31-18-147:~$ sudo apt-get update ubuntu@ip-172-31-18-147:~$ sudo apt-get install uml-utilities virt-manager git \ wget libguestfs-tools p7zip-full make dmg2img tesseract-ocr \ tesseract-ocr-eng genisoimage vim net-tools screen -y
ubuntu@ip-172-31-18-147:~$ cd ~; git clone --depth 1 --recursive https://github.com/kholia/OSX-KVM.git; cd OSX-KVM Cloning into 'OSX-KVM'... remote: Enumerating objects: 639, done. remote: Counting objects: 100% (639/639), done. remote: Compressing objects: 100% (563/563), done. remote: Total 639 (delta 46), reused 611 (delta 37), pack-reused 0 Receiving objects: 100% (639/639), 30.11 MiB | 31.63 MiB/s, done. Resolving deltas: 100% (46/46), done. Submodule 'resources/OcBinaryData' (https://github.com/acidanthera/OcBinaryData.git) registered for path 'resources/OcBinaryData' Cloning into '/home/ubuntu/OSX-KVM/resources/OcBinaryData'... remote: Enumerating objects: 1190, done. remote: Counting objects: 100% (398/398), done. remote: Compressing objects: 100% (381/381), done. remote: Total 1190 (delta 23), reused 32 (delta 16), pack-reused 792 Receiving objects: 100% (1190/1190), 67.73 MiB | 25.41 MiB/s, done. Resolving deltas: 100% (149/149), done. Submodule path 'resources/OcBinaryData': checked out '4e7e1b7465aae297d706afe5de5c4d1572d86917'
- 由於 qemu 在 Ubuntu 22.04 LTS 是 dummy package, 在 Ubuntu 24.04 LTS 已經沒有這個套件。先拿掉再來看到底程式會用到什麼 QEMU 指令。
- 啟用 KVM 模組。 KVM may need the following tweak on the host machine to work.
ubuntu@ip-172-31-18-147:~/OSX-KVM$ git pull --rebase Already up to date. ubuntu@ip-172-31-18-147:~/OSX-KVM$ sudo modprobe kvm; echo 1 | sudo tee /sys/module/kvm/parameters/ignore_msrs 1
- 由於確認過 CPU 是 Intel 的,就複製 kvm.conf
ubuntu@ip-172-31-18-147:~/OSX-KVM$ head /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 85 model name : Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz stepping : 7 microcode : 0x5003605 cpu MHz : 2499.996 cache size : 36608 KB physical id : 0 ubuntu@ip-172-31-18-147:~/OSX-KVM$ sudo cp kvm.conf /etc/modprobe.d/kvm.conf
- Add user to the kvm and libvirt groups (might be needed).
ubuntu@ip-172-31-18-147:~/OSX-KVM$ sudo usermod -aG kvm $(whoami) sudo usermod -aG libvirt $(whoami) sudo usermod -aG input $(whoami)
- Fetch macOS installer.
ubuntu@ip-172-31-18-147:~/OSX-KVM$ ./fetch-macOS-v2.py 1. High Sierra (10.13) 2. Mojave (10.14) 3. Catalina (10.15) 4. Big Sur (11.7) 5. Monterey (12.6) 6. Ventura (13) - RECOMMENDED 7. Sonoma (14) Choose a product to download (1-7): 6 Downloading 042-23155... Saving http://oscdn.apple.com/content/downloads/28/14/042-23155/4rscm4lvp3084gutfgpkwj5eex0yyxmzkt/RecoveryImage/BaseSystem.dmg to ./BaseSystem.dmg... Note: The total download size is 677.99 MB 340.0 MBs downloaded... Download complete!MBs downloaded... Saving http://oscdn.apple.com/content/downloads/28/14/042-23155/4rscm4lvp3084gutfgpkwj5eex0yyxmzkt/RecoveryImage/BaseSystem.chunklist to ./BaseSystem.chunklist... Note: The total download size is 2740 bytes Download complete!25 MBs downloaded... Verifying image with chunklist... Image verification complete!
- Convert the downloaded BaseSystem.dmg file into the BaseSystem.img file.
ubuntu@ip-172-31-18-147:~/OSX-KVM$ dmg2img -i BaseSystem.dmg BaseSystem.img dmg2img v1.6.7 (c) vu1tur (to@vu1tur.eu.org) BaseSystem.dmg --> BaseSystem.img decompressing: opening partition 0 ... 100.00% ok opening partition 1 ... 100.00% ok opening partition 2 ... 100.00% ok opening partition 3 ... 100.00% ok opening partition 4 ... 100.00% ok opening partition 5 ... 100.00% ok opening partition 6 ... 100.00% ok opening partition 7 ... 100.00% ok Archive successfully decompressed as BaseSystem.img
- Create a virtual HDD image where macOS will be installed.
ubuntu@ip-172-31-18-147:~/OSX-KVM$ qemu-img create -f qcow2 mac_hdd_ng.img 256G Formatting 'mac_hdd_ng.img', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=274877906944 lazy_refcounts=off refcount_bits=16
- CLI method (primary). Just run the OpenCore?-Boot.sh script to start the installation process.
ubuntu@ip-172-31-18-147:~/OSX-KVM$ ./OpenCore-Boot.sh
- 失敗,找不到 KVM。
ubuntu@ip-172-31-18-147:~/OSX-KVM$ sudo apt-get -y install xvfb tightvncserver xterm openbox tint2 ubuntu@ip-172-31-18-147:~/OSX-KVM$ vncserver ubuntu@ip-172-31-18-147:~/OSX-KVM$ export DISPLAY=:1 ubuntu@ip-172-31-18-147:~/OSX-KVM$ ./OpenCore-Boot.sh qemu-system-x86_64: warning: Unknown X11 keycode mapping '<null>'. Please report to qemu-devel@nongnu.org including the following information: - Operating system - X11 Server - xprop -root - xdpyinfo Could not access KVM kernel module: No such file or directory qemu-system-x86_64: failed to initialize kvm: No such file or directory
- 參考 (OPTIONAL) Use this macOS VM disk with libvirt (virt-manager / virsh stuff) 這段說明,試試看可否用 virt-manager 的 GUI 介面看到畫面。
ubuntu@ip-172-31-18-147:~/OSX-KVM$ sed "s/CHANGEME/$USER/g" macOS-libvirt-Catalina.xml > macOS.xml ubuntu@ip-172-31-18-147:~/OSX-KVM$ virt-xml-validate macOS.xml macOS.xml validates ubuntu@ip-172-31-18-147:~/OSX-KVM$ virsh --connect qemu:///system define macOS.xml error: Failed to define domain from macOS.xml error: unsupported configuration: Emulator '/usr/bin/qemu-system-x86_64' does not support virt type 'kvm'
(2) OSX-Simple-KVM
- 參考: https://www.baeldung.com/linux/xcode
- https://github.com/foxlet/macOS-Simple-KVM
- 先安裝必要的套件
ubuntu@ip-172-31-18-147:~$ sudo apt-get install qemu-system qemu-utils python3 python3-pip
- 下載 git repo
ubuntu@ip-172-31-18-147:~$ git clone https://github.com/foxlet/macOS-Simple-KVM.git ubuntu@ip-172-31-18-147:~$ cd macOS-Simple-KVM/
- 用 jumpstart.sh 下載並轉換成 BaseSystem.img,執行 basic.sh 來跑 QEMU
ubuntu@ip-172-31-18-147:~/macOS-Simple-KVM$ ./jumpstart.sh ubuntu@ip-172-31-18-147:~/macOS-Simple-KVM$ ./basic.sh qemu-system-x86_64: -drive if=pflash,format=raw,readonly,file=/home/ubuntu/macOS-Simple-KVM/firmware/OVMF_CODE.fd: warning: short-form boolean option 'readonly' deprecated Please use readonly=on instead Could not access KVM kernel module: No such file or directory qemu-system-x86_64: failed to initialize kvm: No such file or directory
(3) Darling
- 類似 WINE (在 Linux 上模擬 Windows 執行環境)
- https://github.com/darlinghq/darling.git
- 參考
ubuntu@ip-172-31-18-147:~$ sudo apt install cmake automake clang-15 bison flex libfuse-dev libudev-dev pkg-config libc6-dev-i386 \ gcc-multilib libcairo2-dev libgl1-mesa-dev curl libglu1-mesa-dev libtiff5-dev \ libfreetype6-dev git git-lfs libelf-dev libxml2-dev libegl1-mesa-dev libfontconfig1-dev \ libbsd-dev libxrandr-dev libxcursor-dev libgif-dev libavutil-dev libpulse-dev \ libavformat-dev libavcodec-dev libswresample-dev libdbus-1-dev libxkbfile-dev \ libssl-dev libstdc++-12-dev ubuntu@ip-172-31-18-147:~$ GIT_CLONE_PROTECTION_ACTIVE=false git clone --recursive https://github.com/darlinghq/darling.git ubuntu@ip-172-31-18-147:~$ cd darling/ ubuntu@ip-172-31-18-147:~/darling$ git lfs install ubuntu@ip-172-31-18-147:~/darling$ git pull ubuntu@ip-172-31-18-147:~/darling$ git submodule update --init --recursive ubuntu@ip-172-31-18-147:~/darling$ sudo tools/uninstall Uninstall complete ubuntu@ip-172-31-18-147:~/darling$ mkdir build && cd build ubuntu@ip-172-31-18-147:~/darling/build$ cmake .. ubuntu@ip-172-31-18-147:~/darling/build$ make ubuntu@ip-172-31-18-147:~/darling/build$ make -j8 CC=distcc ## 如果有裝 distcc 的話 ubuntu@ip-172-31-18-147:~/darling/build$ sudo make install
- 雖然安裝成功,也可以裝 Xcode 跟 Homebrew,但根據文件的說法 GUI 應用程式多半都不能用。
- 看起來若要在 Linux 底下用 LINE,只有 Windows 版比較有機會。
- 回顧一下以前怎麼打包 deb 套件 -- jazz/mpich2_deb
- 參考 CI/CD 流程來看怎麼產生 DEB 套件
- https://github.com/darlinghq/darling/blob/master/.circleci/config.yml
ubuntu@ip-172-31-18-147:~/darling$ git submodule sync ubuntu@ip-172-31-18-147:~/darling$ git submodule update --init --recursive --depth=1 ubuntu@ip-172-31-18-147:~/darling$ sudo dpkg --add-architecture i386 ubuntu@ip-172-31-18-147:~/darling$ sudo apt-get update ubuntu@ip-172-31-18-147:~/darling$ sudo apt-get install --no-install-recommends -y devscripts equivs debhelper libdistro-info-perl libfreetype6-dev:i386 ubuntu@ip-172-31-18-147:~/darling$ sudo mk-build-deps -i -r -t "apt-get --no-install-recommends -y" debian/control ubuntu@ip-172-31-18-147:~/darling$ tools/debian/make-deb
- https://github.com/darlinghq/darling/blob/master/.circleci/config.yml
2024-05-29
(1) OSX-KVM | (2) OSX-Simple-KVM
- 參考 https://www.linuxtechi.com/how-to-install-kvm-on-ubuntu-22-04/ 以後,確認測試環境不支援 KVM。這也是為何 OSX-KVM 跟 OSX-Simple-KVM 都遇到同樣的錯誤訊息:
qemu-system-x86_64: failed to initialize kvm: No such file or directory
- 確認 AWS EC2 並不支援 KVM (nested virtualization) - 除非改用 AWS EC2 Bare Metal
- 即便 Amazon 官方有一些關於 KVM 的說明。但確實 nested virtualization 是一個已知的限制。待確認是否改用 Amazon Linux 2 就可以支援。
- https://aws.amazon.com/about-aws/whats-new/2023/12/amazon-linux-kvm-vmware-images-al2023-3/
- https://aws.amazon.com/what-is/kvm/
(3) Darling
- 把昨晚編譯一整晚的 DEB 整理一下,也許放上某個路徑供未來測試用
ubuntu@ip-172-31-18-147:~$ tree deb/ deb/ ├── darling-cli-devenv-gui-common_0.1.20240528~noble_amd64.deb ├── darling-cli-devenv-gui-stubs-common_0.1.20240528~noble_amd64.deb ├── darling-cli-devenv_0.1.20240528~noble_amd64.deb ├── darling-cli-extra_0.1.20240528~noble_amd64.deb ├── darling-cli-gui-common_0.1.20240528~noble_amd64.deb ├── darling-cli-python2-common_0.1.20240528~noble_amd64.deb ├── darling-cli_0.1.20240528~noble_amd64.deb ├── darling-core-dbgsym_0.1.20240528~noble_amd64.ddeb ├── darling-core_0.1.20240528~noble_amd64.deb ├── darling-extra_0.1.20240528~noble_amd64.deb ├── darling-ffi_0.1.20240528~noble_amd64.deb ├── darling-gui-stubs_0.1.20240528~noble_amd64.deb ├── darling-gui_0.1.20240528~noble_amd64.deb ├── darling-iokitd_0.1.20240528~noble_amd64.deb ├── darling-iosurface_0.1.20240528~noble_amd64.deb ├── darling-jsc-webkit-common_0.1.20240528~noble_amd64.deb ├── darling-jsc_0.1.20240528~noble_amd64.deb ├── darling-perl_0.1.20240528~noble_amd64.deb ├── darling-pyobjc_0.1.20240528~noble_amd64.deb ├── darling-python2_0.1.20240528~noble_amd64.deb ├── darling-ruby_0.1.20240528~noble_amd64.deb ├── darling-system_0.1.20240528~noble_amd64.deb ├── darling_0.1.20240528~noble_amd64.build ├── darling_0.1.20240528~noble_amd64.buildinfo ├── darling_0.1.20240528~noble_amd64.changes └── darling_0.1.20240528~noble_amd64.deb 1 directory, 26 files ubuntu@ip-172-31-18-147:~$ du -sh deb 171M deb
- 參考 https://rpmdeb.com/devops-articles/how-to-create-local-debian-repository/ 用 dpkg-scanpackages 產生 DEB repository
- Local 測試,安裝 darling-system 跟 darling-core 成功
ubuntu@ip-172-31-18-147:~$ cd deb/ ubuntu@ip-172-31-18-147:~/deb$ dpkg-scanpackages -m . > Packages dpkg-scanpackages: info: Wrote 22 entries to output Packages file. ubuntu@ip-172-31-18-147:~/deb$ dpkg-scanpackages -m . | gzip > Packages.gz dpkg-scanpackages: info: Wrote 22 entries to output Packages file. ubuntu@ip-172-31-18-147:~/deb$ cd ubuntu@ip-172-31-18-147:~$ cat /etc/apt/sources.list.d/darling.list deb [trusted=yes] file:/home/ubuntu/deb / ubuntu@ip-172-31-18-147:~$ sudo apt-get -y install darling-system ubuntu@ip-172-31-18-147:~$ dpkg -l | grep darling ii darling-build-deps 0.1.20240528~noble all build-dependencies for darling ii darling-core 0.1.20240528~noble amd64 Darling core components ii darling-system 0.1.20240528~noble amd64 Darling system components ubuntu@ip-172-31-18-147:~$ tar zcvf darling-deb-repo.tar.gz deb/* ubuntu@ip-172-31-18-147:~$ scp darling-deb-repo.tar.gz jazz@trac.3du.me:.
Last modified 6 months ago
Last modified on May 29, 2024, 4:42:59 PM