How to create the macos BaseSystem.dmg from scratch?

Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
Post Reply
Princekin
Posts: 15
Joined: Mon Jul 05, 2021 7:05 am

How to create the macos BaseSystem.dmg from scratch?

Post by Princekin »

Hi:
I learning xnu from the https://github.com/thenickdude/OSX-KVM and https://github.com/PureDarwin/PureDarwin, I now write a UEFI boot for the https://github.com/PureDarwin/PureDarwin project, base the OSX-KVM project, I can run the BaseSystem.dmg which contain the macos system with qemu success, I would like to build BaseSystem.dmg from scratch so that I can understand its principles and subsequent modifications, but I have no idea where to start. Any help is greatly appreciated!

Code: Select all

qemu-system-x86_64 -accel hvf -m 4096 -cpu Penryn,kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on,+ssse3,+sse4.2,+popcnt,+avx,+aes,+xsave,+xsaveopt,check -machine q35 -usb -device usb-kbd -device usb-tablet -smp 4,cores=2,sockets=1 -device usb-ehci,id=ehci -device nec-usb-xhci,id=xhci -global nec-usb-xhci.msi=off -device isa-applesmc,osk='ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc' -drive if=pflash,format=raw,readonly=on,file=././OVMF_CODE.fd -smbios type=2 -device ich9-intel-hda -device hda-duplex -device ich9-ahci,id=sata -drive file=./OpenCore/OpenCore-master.iso,if=none,id=OpenCoreBoot,format=raw, -device ide-hd,bus=sata.2,drive=OpenCoreBoot -device ide-hd,bus=sata.3,drive=InstallMedia -drive id=InstallMedia,if=none,file=./BaseSystem.img,format=raw -drive id=MacHDD,if=none,file=./mac_hdd_ng.img,format=qcow2 -device ide-hd,bus=sata.4,drive=MacHDD -netdev user,id=net0 -serial stdio -device vmware-svga -debugcon file:debug.log -global isa-debugcon.iobase=0x402
Princekin
Posts: 15
Joined: Mon Jul 05, 2021 7:05 am

Re: How to create the macos BaseSystem.dmg from scratch?

Post by Princekin »

here is the contents of the BaseSystem.dmg:

0.MBR 1.Primary GPT Header 2.Primary GPT Table 3.free 4.hfs 5.free 6.Backup GPT Table 7.Backup GPT Header

How to recreate the macos BaseSystem.dmg from scratch?
User avatar
iansjack
Member
Member
Posts: 4703
Joined: Sat Mar 31, 2012 3:07 am
Location: Chichester, UK

Re: How to create the macos BaseSystem.dmg from scratch?

Post by iansjack »

This is such a specialised subject that I think you would get more useful answers on one of the dedicated web resources. For example: https://www.reddit.com/r/PureDarwin/

TBH, I’m not even clear what you are asking. Do you want to build the XNU kernel (instructions on the PureDarwin web site) or are you just asking about the layout of the .dmg image?
Princekin
Posts: 15
Joined: Mon Jul 05, 2021 7:05 am

Re: How to create the macos BaseSystem.dmg from scratch?

Post by Princekin »

I'm very sorry for the misunderstanding.
I use the https://github.com/thenickdude/OSX-KVM project, which can run macos system using qemu. The operating system is in BaseSystem.dmg, which is downloaded from the apple official website. The command line is

BaseSystem.dmg->BaseSystem.img

Code: Select all

dmg2img -i BaseSystem.dmg BaseSystem.img
run BaseSystem.img on qemu

Code: Select all

qemu-system-x86_64 -accel hvf -m 4096 -cpu Penryn,kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on,+ssse3,+sse4.2,+popcnt,+avx,+aes,+xsave,+xsaveopt,check -machine q35 -usb -device usb-kbd -device usb-tablet -smp 4,cores=2,sockets=1 -device usb-ehci,id=ehci -device nec-usb-xhci,id=xhci -global nec-usb-xhci.msi=off -device isa-applesmc,osk='ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc' -drive if=pflash,format=raw,readonly=on,file=././OVMF_CODE.fd -smbios type=2 -device ich9-intel-hda -device hda-duplex -device ich9-ahci,id=sata -drive file=./OpenCore/OpenCore-master.iso,if=none,id=OpenCoreBoot,format=raw, -device ide-hd,bus=sata.2,drive=OpenCoreBoot -device ide-hd,bus=sata.3,drive=InstallMedia -drive id=InstallMedia,if=none,file=./BaseSystem.img,format=raw -drive id=MacHDD,if=none,file=./mac_hdd_ng.img,format=qcow2 -device ide-hd,bus=sata.4,drive=MacHDD -netdev user,id=net0 -serial stdio -device vmware-svga -debugcon file:debug.log -global isa-debugcon.iobase=0x402
If I have the necessary files and folders for macos system, such as Applications, etc
, private, Library, sbin, System, tmp, Volumes, usr, bin, var, dev, System/Library/CoreServices/boot.efi, how can I recreate a BaseSystem.dmg myself with the same functions as the one downloaded from the apple official website?
User avatar
iansjack
Member
Member
Posts: 4703
Joined: Sat Mar 31, 2012 3:07 am
Location: Chichester, UK

Re: How to create the macos BaseSystem.dmg from scratch?

Post by iansjack »

Two points:

1. Why would you want to recreate what you have already downloaded from Apple?

2. I'm not sure of the legality of what you are doing. Apple's .dmg files are only licensed for use on a Macintosh computer. And if you are using a Macintosh, just use the downloaded image as is.

I don't really see your question as being related to OS Development.
Princekin
Posts: 15
Joined: Mon Jul 05, 2021 7:05 am

Re: How to create the macos BaseSystem.dmg from scratch?

Post by Princekin »

1.for the first point:
I recreated it from scratch to learn how to create a Basesystem.dmg so that I can create a Basesystem.dmg for the puredarwin project kernel, so that I can use qemu and opencore in OSX-KVM to start the Basesystem.dmg, so that I can debug the xnu kernel in the Basesystem.dmg for learning.
Princekin
Posts: 15
Joined: Mon Jul 05, 2021 7:05 am

Re: How to create the macos BaseSystem.dmg from scratch?

Post by Princekin »

It does not have to be named BaseSystem.dmg, it can be test.dmg. The important thing is that opencore in qemu can effectively recognize it and bootload and start it.
Princekin
Posts: 15
Joined: Mon Jul 05, 2021 7:05 am

Re: How to create the macos BaseSystem.dmg from scratch?

Post by Princekin »

Below are the partitions of Basesystem.dmg, I don't know how to create these partitions for a new blank dmg so that opencore in qemu can recognize it

Code: Select all

lee@Princekin-MacbookPro:~|⇒  dmg2img -l -v /Users/lee/Desktop/Computer_Systems/Macos/OSX-KVM/BaseSystem.dmg

dmg2img v1.6.7 (c) vu1tur ([email protected])

/Users/lee/Desktop/Computer_Systems/Macos/OSX-KVM/BaseSystem.dmg --> (partition list)

reading property list, 44376 bytes from address 486174238 ...
partition 0: begin=203, size=430, decoded=284
             Protective Master Boot Record (MBR : 0)
partition 1: begin=948, size=430, decoded=284
             GPT Header (Primary GPT Header : 1)
partition 2: begin=1695, size=430, decoded=284
             GPT Partition Data (Primary GPT Table : 2)
partition 3: begin=2424, size=430, decoded=284
              (Apple_Free : 3)
partition 4: begin=3137, size=34763, decoded=23404
             disk image (Apple_HFS : 4)
partition 5: begin=38183, size=430, decoded=284
              (Apple_Free : 5)
partition 6: begin=38911, size=430, decoded=284
             GPT Partition Data (Backup GPT Table : 6)
partition 7: begin=39656, size=430, decoded=284
             GPT Header (Backup GPT Header : 7)
User avatar
iansjack
Member
Member
Posts: 4703
Joined: Sat Mar 31, 2012 3:07 am
Location: Chichester, UK

Re: How to create the macos BaseSystem.dmg from scratch?

Post by iansjack »

You can create and partition .dmg disk images using Disk Utility on an Apple Mac.
Princekin
Posts: 15
Joined: Mon Jul 05, 2021 7:05 am

Re: How to create the macos BaseSystem.dmg from scratch?

Post by Princekin »

Thank you for your reply. Creating and partitioning .dmg disk images using Disk Utility on an Apple Mac is just the first step. There is still a lot to do to create a dmg similar to Basesystem.dmg. I can't find any information. If you can provide relevant information, it will be greatly appreciated.
User avatar
iansjack
Member
Member
Posts: 4703
Joined: Sat Mar 31, 2012 3:07 am
Location: Chichester, UK

Re: How to create the macos BaseSystem.dmg from scratch?

Post by iansjack »

Post Reply