Darwin 8.0.1 (corresponding to Mac OS X 10.4) seems to be the latest available full installer image, at least, until the PureDarwin project produces a new one.
List of available ISO images
More recent versions of packages are available in source form:
Open Source website (links by OS release)
Full list of packages (some aren't linked under any OS release)
Installing
Download and extract installation CD image:
Darwin 8.0.1 (was under “Darwin 8.0.1 Installer CD” on old website)
MD5: dbd260dda994093a11c31afbe624aa34
SHA-256: a26f9f14795fe0687bd647d41b712464c9a61430736fae4aa0fdb89207e1a62a
$ gunzip darwinx86-801.iso.gz
Set up QEMU VM:
$ qemu-img create -f qcow2 darwin.qcow2 10G
Start VM:
$ qemu -net none -drive file=darwin.qcow2,cache=writeback -cdrom darwinx86-801.iso -boot d
Other useful qemu options:
-m 512
and-enable-kqemu
Installation steps:
First boot:
Select disk
"
2
" (manual partitioning)"
y
" (initialize MBR)In fdisk:
> auto hfs
Ignore the warning
> update
> write
> quit
Enter partition name
"
yes
" (clean install)"
darwin
" (volume name)Continue (reboot)
Second boot (make sure to boot from CD again):
Select disk
"
3
" (existing partition)Enter partition name
"
hfs
" (HFS+ filesystem)"
yes
" (clean install)"
darwin
" (volume name)Wait for installation to complete...
Enter root password
"
darwin
" (hostname)"
3
" (spawn shell)# halt
Configure VM for normal startup:
Remove QEMU flags
-cdrom darwinx86-801.iso -boot d
Basic configuration
Enable VM networking
Change QEMU flags:
-net none
→-net nic,model=rtl8139 -net user
SSH access
Change QEMU flags:
-net user
→-net user,hostfwd=tcp:127.0.0.1:10022-:22
(pick any port instead of 10022)Log in to VM, enable SSH:
# service ssh start
Connect to VM with
$ ssh -p 10022 root@localhost
Optionally add an alias to host
~/.ssh/config
to simplify connecting:Host darwin-vm HostName localhost Port 10022 User root
Connect to VM with
ssh darwin-vm
Install public key to simplify logging in:
$ cat .ssh/id_rsa.pub | ssh darwin-vm 'mkdir .ssh; cat >>.ssh/authorized_keys'
Add
-nographic
to QEMU flags to disable console window, which is no longer required
Some familiar aliases
# echo "alias ll='ls -l'" >>/etc/bashrc
# echo "alias la='ls -lA'" >>/etc/bashrc
Timezone
# ln -sf /usr/share/zoneinfo/UTC /etc/localtime
Temporary filesystem
Using a temporary disk image to build software helps keep the main disk image file smaller.
$ qemu-img create -f qcow2 scratch.qcow2 10G
Add QEMU flag:
-drive file=scratch.qcow2,cache=writeback
and bootFigure out which disk number corresponds to the scratch drive:
# mount
# ls /dev/rdisk*
It's the one that isn't mounted and doesn't have any partitions (sn-suffixed files)
It's usually, but not always, /dev/rdisk1
# newfs_hfs -v scratch /dev/rdisk1
# reboot
Available as
/Volumes/scratch
on next boot
Notes
The VM sometimes fails to boot with "
panic(...): nfs_boot_init failed
"; if this happens, restart it.
Updating the system
Kernel (xnu)
It breaks support for FAT (and thus the QEMU virtual FAT drive)
Support for FAT is in the msdosfs package which requires Xcode to build
An alternative to the virtual FAT drive for transferring files is writing tar archives directly to an unpartitioned drive
SSH scp is another alternative
Requires:
corresponding cctools (e.g. initially installed version or cctools-590.42.1, but not cctools-667.3)
gcc 3.3 (revert if changed with
gcc_select 3.3
)
Source package: xnu-792.6.76.tar.gz (update to version listed under “Mac OS X 10.4.3”)
MD5: 854f44519778e8bde4283e275ed154e6
SHA-256: 35c5ed2f1399c770583a229a733d064dc302ae6327a7fcb40996e1f3c474f568
Building:
# cd /Volumes/scratch
# tar xzf xnu-792.6.76.tar.gz
# cd xnu-792.6.76
Patch to help build gcc_42-5577:
# sed -i.tmp 's/defined *(__i386__)/& || defined(__x86_64__)/' bsd/{machine,sys}/*.h
# make DSTROOT= install
Reboot.
uname -r
is now 8.7.0.
Standard library (Libc)
Requires updated xnu (xnu-792.6.761).
Source package: Libc-391.2.10.tar.gz (update to version listed under “Mac OS X 10.4.3”)
MD5: 7a1a08d1b68668fc41916d6cf39182a4
SHA-256: e90b78d310235544623f26c6f18e27b329b5bc778deab8e57332e8e90ab92f11
Building:
# cd /Volumes/scratch
# tar xzf Libc-391.2.10.tar.gz
# cd Libc-391.2.10
# sed -i.tmp s/NOTIFY_STATUS_OK/0/g gen/{asl.c,syslog.c}
Patch to help build gcc_42-5577:
# sed -i.tmp 's/defined *(__i386__)/& || defined(__x86_64__)/' include/machine/*.h
# make OBJROOT="$PWD"/obj install
Upgrading GCC
dyld
This is optional.
Source package: dyld-46.16.tar.gz (under “Mac OS X 10.4.11.x86”)
MD5: a97d4d2a77b3e5f2ff9757007cae0596
SHA-256: cf753c3a2cef239b1334c56603b36d206f54d613daa078ce0f2d73c3e2a0dd82
Makefile: dyld.mk
Darwin doesn't include Xcode, which is required to build this package. This makefile provides alternative build instructions.
Building:
# cd /Volumes/scratch
# tar xzf dyld-46.16.tar.gz
# cd dyld-46.16
# sed -i.tmp '/case CPU_TYPE_X86_64:/,/break;/d;/__pthread_tsd_first/d' src/dyld.cpp
# ln -s libstdc++.a /usr/lib/gcc/i686-apple-darwin8/4.0.0/libstdc++-static.a
# bsdmake -f dyld.mk VERSION_DYLD=46 install
cctools
Choice of version:
cctools-667.3
Too new to build xnu.
Source package: cctools-667.3.tar.gz (under “Mac OS X 10.5.8”)
MD5: 518166e6ddbd0287bebee3d00fddee7d
SHA-256: 1ba43a3d3bcf138a196e714666927c706857226adccf2e69db4f08e940631c0d
cctools-590.42.1
Too old to build gcc.
Source package: cctools-590.42.1.tar.gz (update to version listed under “Mac OS X 10.4.3”)
MD5: 6d875c5483699fd0f1e150facae35256
SHA-256: 61c86c4dc556daafbabebd8162bfbce8214843b218fefbd15c6c1ba03d225a10
Building:
# cd /Volumes/scratch
# tar xzf cctools-667.3.tar.gz
# cd cctools-667.3
# sed -i.tmp '/install.*strip/{h;s/strip/seg_hack/gp;g;s/ -s / /;}' misc/Makefile
# sed -i.tmp s/ld_classic/ld/ ld/Makefile
# make install
The new assembler will often show the warning "
indirect jmp without '*'
" on code generated by the old GCC.
gcc
Choice of version:
gcc_42-5577
Latests gcc_42 package (newer packages are named gcc). GCC 4.2.1. Requires patched system include files, which can be done when upgrading xnu and Libc (see above).
Source package: gcc_42-5577.tar.gz (update to version listed under “Mac OS X 10.5.8”)
MD5: dab7ad45f76919f058a6f1cf3a0e91d8
SHA-256: fd6459ab701b41dc1297cdbc27f302c558d766505cfe8dd1d6ec0d257fef0e81
gcc_42-5531
Slightly older version. Doesn't require any changes to include files.
Source package: gcc_42-5531.tar.gz (under “Mac OS X 10.5.8”)
MD5: 959ecd224cea2477d57b1c3026fe05ee
SHA-256: 924862e2092fa11754ec9226a0de4772d831c40500231728055d00d1bb3a632e
Requires cctools-667.3 and optionally dyld
Building:
# cd /Volumes/scratch
# tar xzf gcc_42-5577.tar.gz
# cd gcc_42-5577
If dyld isn't upgraded, patch to revert debugging format from DWARF to stabs:
# sed -i.tmp 's/\(#define PREFERRED_DEBUGGING_TYPE \).*/\1DBX_DEBUG/' gcc/config/darwin.h
# sed -i.tmp '/darwin_macho_att_stub/s/Init.*//' gcc/config/darwin.opt
# sed -i.tmp '/x86_64/s/|| exit 1//' build_gcc
# ln -s true /usr/bin/dsymutil
# gnumake RC_ARCHS=i386 install
Don't try to set
DSTROOT=/
, it deletes everything.
# cp -pR dst/* /
# cp -pR obj/dst-i686-i686/usr/lib/libgcc_s* /usr/lib/gcc/i686-apple-darwin8/4.2.1/
GCC is now installed as gcc-4.2.
It can be made default with
gcc_select 4.2
.