Files: www.freebsd.org/~grehan/ppc-root-latest.tbz2 kernel loader 1. Make sure there's a spare partition on the hard drive large enough to hold FreeBSD. The partition type doesn't matter, although it's a good idea not to select HFS. 2. The initial install will have to be done with a network boot, or from a CD a) Network boot Set up a DHCP/TFTP/NFS server, with boot/loader in the directory that will be served by TFTP. Untar the distribution in a directory that can be accessed with NFS, and put the tbz2 file in the root dir. The entry that I am using for dhcpd.conf is option subnet-mask 255.255.255.0; option broadcast-address 192.168.0.255; option routers 192.168.0.1; host emacfreebsd { hardware ethernet 00:03:93:A4:36:FE; fixed-address 192.168.0.12; option host-name "emacfbsd"; server-identifier 192.168.0.1; always-reply-rfc1048 on; option root-path "192.168.0.1:/export/client/macfbsd/root"; option routers 192.168.0.1; filename "loader"; next-server 192.168.0.1; } At the OpenFirmware prompt on the Mac (get to this with cmd-option-o-f at boot time): 0 > boot enet:,loader Hit the space bar when the loader is pausing to get to the loader prompt, and then boot single-user 0K boot -s At the mountroot> prompt, enter 'nfs' to get to the single-user prompt. b) CDROM boot Create a directory tree with the bare minimum of files, extracted from the tarball, and the tarball itself, in the root directory. Here's what I used as a minimal tree: /ppc-root-latest.tbz2 /bin/ls sh /boot/loader /boot/kernel/kernel /dev /etc/ttys /mnt /sbin/init mount newfs shutdown sysctl umount /usr/bin/bzip2 tar Build an ISO with the following options, required for OFW to read the CD: mkisofs -o-hfs -part -l -J -r -L With the CD in the mac drive (this can be done at the OpenFirmware prompt on tray loaders with '0 > eject cd'), and at the Ofw prompt, first verify that the CD can be read correctly 0 > dir cd:,\ CDROM 1/ 1/ 4 0: 0: 0 bin 1/ 1/ 4 0: 0: 0 boot 8192 10/24/ 3 11:24:35 Desktop%20DB 0 10/24/ 3 11:24:35 Desktop%20DF 1/ 1/ 4 0: 0: 0 dev 1/ 1/ 4 0: 0: 0 etc 1/ 1/ 4 0: 0: 0 mnt 50878857 10/23/ 3 17:48:55 ppc-root-102303.tbz2 1/ 1/ 4 0: 0: 0 sbin 1/ 1/ 4 0: 0: 0 usr ok Now boot the loader, and break before it boots the kernel 0 > boot cd:,\boot\loader ( hit space bar ) 0 > boot -s I've found that on the G4 eMac, the loader gets a boot device that it doesn't understand, and spits out a whole lot of 'method not found; ihandle=0 phandle=0'. Don't be too worried about this, and at the loader prompt, enter: OK set currdev=cd:, OK boot -s At the mountroot> prompt, enter 'cd9660:acd0' to get to the single-user prompt. 3. At the shell in single-user mode: Have a look at the partitions just to make sure you will be using the correct one. Here's the layout on my eMac: # /sbin/sysctl -b kern.geom.conftxt 0 DISK ad0 40971571200 512 hd 16 sc 63 1 APPLE ad0s14 5362777088 512 i 13 o 35608794112 n Home file system ty Apple_UNIX_SVR2 1 APPLE ad0s13 8194153472 512 i 12 o 27414640640 n Eschatology 1 ty Apple_UNIX_SVR2 1 APPLE ad0s12 8194153472 512 i 11 o 19220487168 n Swap ty Apple_UNIX_SVR2 1 APPLE ad0s11 5414712320 512 i 10 o 13805774848 n A/UX Root ty Apple_UNIX_SVR2 1 APPLE ad0s10 33554432 512 i 9 o 13772220416 n untitled 2 ty Apple_HFS 1 APPLE ad0s9 13771429888 512 i 8 o 790528 n untitled ty Apple_HFS 1 APPLE ad0s8 262144 512 i 7 o 528384 n Patch Partition ty Apple_Patches 1 APPLE ad0s7 262144 512 i 6 o 266240 n Macintosh ty Apple_Driver_IOKit 1 APPLE ad0s6 102400 512 i 5 o 163840 n Macintosh ty Apple_FWDriver 1 APPLE ad0s5 37888 512 i 4 o 125952 n Macintosh ty Apple_Driver_ATA 1 APPLE ad0s4 27648 512 i 3 o 98304 n Macintosh ty Apple_Driver_ATA 1 APPLE ad0s3 37888 512 i 2 o 60416 n Macintosh ty Apple_Driver43 1 APPLE ad0s2 27648 512 i 1 o 32768 n Macintosh ty Apple_Driver43 1 APPLE ad0s1 32256 512 i 0 o 512 n Apple ty Apple_partition_map In this case, I'm going to dump the filesystem on to ad0s13. First, newfs and mount the partition # /sbin/newfs /dev/ad0s13 # /sbin/mount /dev/ad0s13 /mnt And now untar the distro # cd /mnt # /usr/bin/tar xjvf /ppc-root-102303.tbz2 . (this will take quite a while. I have found that the dreaded 'ad0: device write underrun' has sometimes during this step - it pretty much means having to reboot and do the newfs/untar again :-( USB keyboard users can ctl-alt-del (aka ctl-option-del) to reboot at this point. Otherwise, shutdown -h now. Another known bug: the system rarely shuts down cleanly. After 'uptime' has been displayed, it's time for a power cycle or programmer's switch halt :-( 4. It's time to boot the new system. However, here's the catch: OpenFirmware doesn't understand UFS, so the loader has to live somewhere that OFW can access it. This can be over the network as in step 2 a), or it can live in a HFS+ partition that has MacOS/OSX installed. Here's how to boot when loader is copied into the hard drive folder on both OS9 and OSX. Note that loader can't understand HFS+, so it can't read the partition it was booted from and fails (but that's OK). 0 > boot hd:,\loader .... can't load 'kernel' 0 > set currdev=hd:13 (or whatever partition was used) 0 > boot -s ... At the mountroot> prompt, enter 'ufs:ad0s13'. 5. It's now time to edit some of the system files so that multi-user can be reached. a) Mount the root filesystem read-write so that vi can use tmp files # /sbin/mount -u -rw /dev/ad0s13 / b) Now set the terminal type to be something screen oriented, unlike the primitive type for /dev/console. # export TERM=cons25 (for those lucky enough to have syscons) or # export TERM=ansi (for OpenFirmware cons users. vt100 seems to work OK as well, but expect to be redrawing a lot in vi). c) Create an fstab /dev/ad0s13 / ufs rw 0 0 d) Create /etc/rc.conf. Here's what I've been using. Enabling sendmail was causing a kernel hang at one stage. defaultrouter="192.168.0.1" hostname="emacfbsd.ptree32.com.au" ifconfig_gem0="inet 192.168.0.12 netmask 255.255.255.0" kern_securelevel_enable="NO" nfs_client_enable="YES" # Not really necessary, but handy inetd_enable="YES" # seems to hang the system at boot otherwise :-( sendmail_submit_enable="NO" # shut up debug sendmail_msp_queue_enable="NO" e) I usually enable telnet/ftp in inetd.conf, and enable secure access to pty's f) Create the initial password databases. Since I cross-built on x86, the build process creates little-endian db files, so they have to be re-created with native byte-order (at least that's what I think is wrong). # /usr/sbin/pwd_mkdb /etc/master.passwd g) It's ready to go multi with a ctl-D !