Subject: Howto install NetBSD 1.6.1 stable on an iBook
To: None <>
From: Anselm R. Garbe <>
List: port-macppc
Date: 01/19/2004 18:54:44
Hi there,

I've written a howto, how I've installed NetBSD 1.6.1 and upgraded
to NetBSD 1.6.2_RC4 this weekend (special thanks to Aaron W. Hsu).

Sorry about the uppercase headings!


Software: NetBSD/macppc 1.6.1 stable
Hardware: Apple iBook late 2002 model, 700 Mhz, ATI Radeon M7,
          Apple Airport WLAN, 2xUSB, 1xFireWire

Well, I write this short howto in English, because there may be lots of
non-german speaking geeks out there interested in installing NetBSD on
their iBook. Sorry for my English :)

Why not? An OS which works on toasters should also work on iBooks.
Mac OS X is not a good choice for me, if you like UNIX. There's too much
old OS 9 stuff in there, too much (one button) mouse control, curios
NetInfo stuff (instead of good old /etc), curios source tree with different
naming conventions (Java style naming conventions bungled with old clean C
style naming conventions, etc.). To say it in short words: Mac OS X is a
"Eierlegende Wollmilchsau" in my eyes.
Linux/ppc works also good on an iBook, but I prefer a clean UNIX like
(By the way, I also tried OpenBSD, which works also well on an iBook,
but I prefer NetBSD, because they make no such hype about their OS, as
OpenBSD does.)

We are going to install NetBSD 1.6.1 stable on a iBook as stand-alone(!)
OS without another OS besides it and without any Apple tools.

- Some freetime, I think a weekend.
- An internet connection (also while installation).
- An iBook


1. Download and burn the NetBSD/macppc 1.6.1 iso image from (or another

    Note: Don't download snapshot 1.6Z, it does not work with
    compareable iBooks to mine.

2. Backup all your data on your iBook.

3. Read
and for getting
involved with necessary information about what you're going to do.

4. Now it's time to put one's money where one's mouth is: bash your
burned NetBSD cd into your cdrom drive and reboot.

5. After the Apple boot sound hold down Apple+Alt+O+F to enter

6. Enter:

    boot cd:,ofwboot.xcf netbsd.macppc

7. Wait until NetBSD wants input. Don't enter the normal installation
routine, because we need to create special partitions first (which
current disklabel isn't capable of), that are readable for OpenFirmware.

8. Configure the integrated gem0 (100baseTX) or wi0 (WLAN) NIC to have
an internet connection to match your local network configuration.
(Utility menu or just exit the installation program and use route and

9. Exit the installation program.

10. Fetch pdisk (the partition tool we're going to use) from
into /sbin, and rename it to pdisk.

11. Now we're going to partition the disk.
Use pdisk /dev/wd0c to enter pdisk. (I hope you've read the partition
howto, see link above, third step)

12. Create a new partition map using i.

13. Create a partition with offset at 2p with size 32m and type Apple_HFS
using the C option. Name is boot.

14. Create a partition with offset at 3p with size 1g and bzb bit a
(root) using the c option. Name is root.

15. Create a partition with offset at 4p with size 1g and bzb bit b
(swap) using the c option. Name is swap.

16. Create a partition with offset at 5p with size 1g and bzb bit e
(tmp) using c option. Name is tmp.

17. Create a partition with offset at 6p with size 1g and bzb bit f
(var) using c option. Name is var.

18. Create a partition with offset at 7p with size 5g and bzb bit g
(usr) using c option. Name is usr.

19. Dump the partition configuration using p.

20. Create a partition with offset at 8p with the size of free blocks
dumped with p in step 19. Use size of the free space column. Use bzb bit
h and name home.

21. Now you've successfully configured the new partition map.
It looks like following:

    1: Apple partition map
    2: 32m HFS boot
    3: 1g Apple_UNIX_SVR2 root /    a
    4: 1g Apple_UNIX_SVR2 swap      b
    5: 1g Apple_UNIX_SVR2 tmp       e
    6: 1g Apple_UNIX_SVR2 var       f
    7: 5g Apple_UNIX_SVR2 usr  /usr g
    8: *g Apple_UNIX_SVR2 home      h

22. Write out the partition map using w.

23. Now newfs all partitions:

    newfs /dev/wd0a
    newfs /dev/wd0e
    newfs /dev/wd0f
    newfs /dev/wd0g
    newfs /dev/wd0f
    newfs /dev/wd0g
    newfs /dev/wd0h

    Note: Don't care about error messages that newfs couldn't touch the
    disklabel - that's right since we've created everything with pdisk.

24. Mount the root partition to mnt2 and create following directories:

    mount /dev/wd0a /mnt2
    mkdir /mnt2/etc
    mkdir /mnt2/tmp
    mkdir /mnt2/usr
    mkdir /mnt2/var

    And create a fstab which matches your wd0 disklabel configuration,
    in my configuration wd0f and wd0g have been swapped for some reason
    I don't know:

    echo    /dev/wd0a / ffs rw 1 1 >> /mnt2/etc/fstab
    echo    /dev/wd0b none swap sw 0 0 >> /mnt2/etc/fstab
    echo    /dev/wd0e /tmp ffs rw 1 2 >> /mnt2/etc/fstab
    echo    /dev/wd0g /var ffs rw 1 2 >> /mnt2/etc/fstab
    echo    /dev/wd0f /usr ffs rw 1 2 >> /mnt2/etc/fstab
    echo    /dev/wd0h /home ffs rw 1 2 >> /mnt2/etc/fstab

25. Now umount /mnt2 again and enter sysinst.

26. In sysinst just use "Re-install sets..." and proceed with
installation. After finishing these steps (equivalent to standard
installation and which will create all device nodes in /dev) you can
configure your Timezone and set a root password through going to the
"Utilities" menu again.

27. Now we're ready for the first boot. Exit install and enter reboot.

29. Enter OpenFirmware holding down Apple+Alt+O+F

30. Let the installation disk in your drive and enter:

    boot cd:,ofwboot.xcf hd:3,/netbsd

31. Wait until netbsd boots into single user mode.

32. Remount / using:

    mount -o rw /dev/wd0a /

33. Cd to /etc and edit your rc.conf:


    Note: You can use vi to edit it, but then you have to mount your
    /usr partition manually (mount /dev/wd0f /usr), vi is located in

34. Maybe you've a german iBook, so you wants also edit your


35. Maybe your network configuration has not been saved by sysinst.
    So do create manually

    /etc/mygate (contains IP address of your gateway)
    /etc/resolv.conf (contains "nameserver <IP address of your DNS server")

        contains something like this:

        inet netmask
        media 100BaseTX

36. The step 35 will configure your network configuration for the next
    boot. Just reboot now.

37. Use the same boot command as described in step 30.

38. Now your network devices are up and configured. Fetch pkgsrc.tar.gz
and extract it to /usr

39. Install /usr/pkgsrc/sysutils/hfsutils (make install clean)

40. Format your boot partition through:

    hformat /dev/wd0d

41. Place your ofwboot.xcf file of your installation cdrom (mount
    /dev/cd0a /mnt) to that partition:

    hcopy /mnt/ofwboot.xcf :

42. Now your system is ready. X11 configuration will follow. I advice to
upgrade your system to 1.6 stable (currently 1.6.2_RC4) through
following steps:

43. Cd /usr and perform following commands

    cd /usr
    setenv CVS_RSH ssh
    cvs -d co -r netbsd-1-6 -P src
    (this may take a while)

44. Now upgrade using:

    cd /usr/src
    (this may also take a while, around 10h)

45. Afterwards use following kernel configuration file and place it
under /usr/src/sys/arch/macppc/conf/:

# IBOOK machine description file
# by Anselm R. Garbe <anselmg at>
# Used with a late 2002 iBook 700 (ATI Radeon M7, 2xUSB, 1xFireWire,
# CDROM, ...)

include		"arch/macppc/conf/std.macppc"

options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary

ident 		"IBOOK"

maxusers	32

# Standard system options
#options 	UCONSOLE	# users can use TIOCCONS (for xconsole)
#options 	INSECURE	# disable kernel security levels

options 	RTC_OFFSET=0	# hardware clock is this many mins. west of GMT
#options 	NTP		# NTP phase/frequency locked loop
options 	KTRACE		# system call tracing via ktrace(1)

options 	SYSVMSG		# System V message queues
options 	SYSVSEM		# System V semaphores
#options 	SEMMNI=10	# number of semaphore identifiers
#options 	SEMMNS=60	# number of semaphores in system
#options 	SEMUME=10	# max number of undo entries per process
#options 	SEMMNU=30	# number of undo structures in system
options 	SYSVSHM		# System V shared memory
#options 	SHMMAXPGS=1024	# 1024 pages is the default

options 	LKM		# loadable kernel modules

#options 	USERCONF	# userconf(4) support
#options 	PIPE_SOCKETPAIR	# smaller, but slower pipe(2)

# Diagnostic/debugging support options
#options 	DIAGNOSTIC	# cheap kernel consistency checks
#options 	DEBUG		# expensive debugging checks/support
#options 	DDB		# in-kernel debugger
#options 	DDB_HISTORY_SIZE=512	# enable history editing in DDB

#makeoptions 	DEBUG="-g"	# compile full symbol table

# Compatibility options
#options 	COMPAT_09	# NetBSD 0.9,
#options 	COMPAT_10	# NetBSD 1.0,
#options 	COMPAT_11	# NetBSD 1.1,
#options 	COMPAT_12	# NetBSD 1.2,
#options 	COMPAT_13	# NetBSD 1.3,
#options 	COMPAT_14	# NetBSD 1.4,
#options 	COMPAT_43	# and 4.3BSD
#options 	COMPAT_386BSD_MBRPART # recognize old partition ID
#options 	COMPAT_LINUX	# Linux binary compatibility
#options 	TCP_COMPAT_42	# 4.2BSD TCP/IP bug compat. Not recommended.

# File systems
file-system 	FFS		# UFS
#file-system 	EXT2FS		# second extended file system (linux)
file-system 	LFS		# log-structured file system
file-system 	MFS		# memory file system
file-system 	NFS		# Network File System client
file-system 	CD9660		# ISO 9660 + Rock Ridge file system
file-system 	MSDOSFS		# MS-DOS file system
file-system 	FDESC		# /dev/fd
file-system 	KERNFS		# /kern
file-system 	NULLFS		# loopback file system
file-system 	OVERLAY		# overlay file system
file-system 	PORTAL		# portal filesystem (still experimental)
file-system 	PROCFS		# /proc
file-system 	UMAPFS		# NULLFS + uid and gid remapping
file-system 	UNION		# union file system

# File system options
#options 	QUOTA		# UFS quotas
#options 	FFS_EI		# FFS Endian Independant support
options 	SOFTDEP		# FFS soft updates support.
#options 	NFSSERVER	# Network File System server
#options 	EXT2FS_SYSTEM_FLAGS # makes ext2fs file flags (append and
				# immutable) behave as system flags.

#options 	NFS_BOOT_DHCP	# Support DHCP NFS root

# Networking options
#options 	GATEWAY		# packet forwarding
options 	INET		# IP + ICMP + TCP + UDP
options 	INET6		# IPV6
#options 	IPSEC		# IP security
#options 	IPSEC_ESP	# IP security (encryption part; define w/IPSEC)
#options 	IPSEC_DEBUG	# debug for IP security
#options 	MROUTING	# IP multicast routing
#options 	NS		# XNS
#options 	NSIP		# XNS tunneling over IP
#options 	ISO,TPIP	# OSI
#options 	EON		# OSI tunneling over IP
#options 	CCITT,LLC,HDLC	# X.25
options 	NETATALK	# AppleTalk networking protocols
#options 	PPP_BSDCOMP	# BSD-Compress compression support for PPP
#options 	PPP_DEFLATE	# Deflate compression support for PPP
#options 	PPP_FILTER	# Active filter support for PPP (requires bpf)
options 	PFIL_HOOKS	# pfil(9) packet filter hooks
options 	IPFILTER_LOG	# ipmon(8) log support
#options 	IPFILTER_DEFAULT_BLOCK	# block all packets by default
#options 	TCP_DEBUG	# Record last TCP_NDEBUG packets with SO_DEBUG

# These options enable verbose messages for several subsystems.
# Warning, these may compile large string tables into the kernel!
options 	PCIVERBOSE	# verbose PCI device autoconfig messages
options 	MIIVERBOSE	# verbose PHY autoconfig messages
#options 	PCI_CONFIG_DUMP	# verbosely dump PCI config space
#options 	SCSIVERBOSE	# human readable SCSI error messages
options 	USBVERBOSE	# verbose USB device autoconfig messages

# wscons options
#options 	WSEMUL_SUN			# sun terminal emulation
options 	WSEMUL_VT100			# VT100 / VT220 emulation
#options 	WSDISPLAY_COMPAT_RAWKBD		# can get raw scancodes
options 	FONT_SONY8x16

# Kernel root file system and dump configuration.
config		netbsd	root on ? type ?

# Device configuration

mainbus* at root

cpu*	at mainbus?
bandit*	at mainbus?
grackle* at mainbus?
uninorth* at mainbus?

pci*	at bandit? bus ?
pci*	at grackle? bus ?
pci*	at uninorth? bus ?
pci*	at ppb? bus ?

pchb*	at pci? dev ? function ?	# PCI-Host bridges
ppb*	at pci? dev ? function ?	# PCI-PCI bridges
# XXX 'puc's aren't really bridges, but there's no better place for them here
puc*	at pci? dev ? function ?	# PCI "universal" comm. cards

fpa*	at pci? dev ? function ?	# DEC PCI FDDI (DEFPA) Controller
ofb*	at pci? dev ? function ?	# Generic Open Firmware Framebuffer
options 	OFB_ENABLE_CACHE	# Speed up console
pciide*	at pci? dev ? function ?
wdc*	at pci? dev ? function ?	# Kauai ATA
gem*	at pci? dev ? function ?	# gmac ethernet
obio0	at pci? dev ? function ?
#macofcons0 at pci? dev ? function ?	# OpenFirmware console (for debugging)

bmtphy*	at mii? phy ?			# Broadcom BCM5201/BCM5202 PHYs
ukphy*	at mii? phy ?			# generic unknown PHYs

bm*	at obio?			# bmac ethernet
mc*	at obio?			# MACE ethernet
nvram*	at obio?			# nvram
adb*	at obio?			# Apple Desktop Bus
aed*	at adb?				# ADB Event Device
akbd*	at adb?				# ADB keyboard
ams*	at adb?				# ADB mouse
abtn*	at adb?
zsc*	at obio?
zstty*	at zsc? channel ?
mediabay* at obio?
wdc*	at mediabay? flags 0
# awacs is disabled because on some systems--e.g., a 350MHz G4 GigE--
# it may generate interrupt storms, rendering the machine unusable.
# If you uncomment this, you'll also want to uncomment "audio* at awacs?"
# below.
awacs*	at obio?			# Apple audio device
wi*	at obio?			# AirMac

wsdisplay0 at ofb? console ?
wskbd0	at akbd? console ?
wsmouse0 at ams?

wdc*	at obio? flags 0x1
wd*	at pciide? channel ? drive ?
wd*	at wdc? channel ? drive ? flags 0x0000

atapibus* at pciide? channel ?
atapibus* at wdc? channel ?

cd*	at atapibus? drive ? flags 0x0000	# ATAPI CD-ROM drives
sd*	at atapibus? drive ? flags 0x0000	# ATAPI disk drives
uk*	at atapibus? drive ? flags 0x0000	# ATAPI unknown

# PCI USB controllers
ohci*	at pci? dev ? function ?			# Open Host Controller

usb*	at ohci?					# USB bus support
uhub*	at usb?						# USB Hubs
uhub*	at uhub? port ? configuration ? interface ?

uhidev*	at uhub? port ? configuration ? interface ?	# USB HID device

ums*	at uhidev? reportid ?				# USB Mice
wsmouse* at ums?

ukbd*	at uhidev? reportid ?				# USB Keyboards
wskbd*	at ukbd? console ?

uhid*	at uhidev? reportid ?				# USB Generic HID

ulpt*	at uhub? port ? configuration ? interface ?	# USB Printer

umodem*	at uhub? port ? configuration ?			# USB Modem
ucom*	at umodem?

umass*	at uhub? port ? configuration ? interface ?	# USB Mass Storage
atapibus* at umass? channel ?
scsibus* at umass? channel ?

uaudio*	at uhub? port ? configuration ?			# USB audio

ugen*	at uhub? port ? configuration ? interface ?	# USB Generic driver

# PCI IEEE1394 controllers
fwohci*	at pci? dev ? function ?	# IEEE1394 Open Host Controller
fw*	at fwbus?			# IP over 1394

# IEEE1394 nodes
#fwnode* at fwbus? oui ? devhi ? devlo ?
#scsibus* at fwnode?

# Audio Devices

# PCI audio devices
#clcs*	at pci? dev ? function ?	# Cirrus Logic CS4280
#cmpci*	at pci? dev ? function ?	# C-Media CMI8338/8738
#eap*	at pci? dev ? function ?	# Ensoniq AudioPCI
#eso*	at pci? dev ? function ?	# ESS Solo-1 PCI AudioDrive
#fms*	at pci? dev ? function ?	# Forte Media FM801
#sv*	at pci? dev ? function ?	# S3 SonicVibes

# OPL[23] FM synthesizers
#opl*	at cmpci? flags 1
#opl*	at eso?
#opl*	at fms?

# Audio support
audio* at awacs?
#audio*	at clcs?
#audio*	at cmpci?
#audio*	at eap?
#audio*	at eso?
#audio*	at fms?
#audio*	at sv?
#audio*	at uaudio?

# MPU 401 UARTs
#mpu*	at cmpci?
#mpu*	at eso?
#mpu*	at fms?

# MIDI support
#midi*	at eap?			# 137[01] MIDI port
#midi*	at mpu?			# MPU 401

pseudo-device	vnd		4	# disk-like interface to files
pseudo-device	ccd		4	# concatenated/striped disk devices
#pseudo-device	raid		8	# RAIDframe disk driver
#options 	RAID_AUTOCONFIG		# auto-configuration of RAID components
# Options to enable various other RAIDframe RAID types.
# options 	RF_INCLUDE_RAID5_RS=1
pseudo-device	md		1	# memory disk device
pseudo-device	loop			# network loopback
pseudo-device	bpfilter	8	# packet filter
pseudo-device	ipfilter		# IP filter (firewall) and NAT
#pseudo-device	ppp		2	# Point-to-Point Protocol
#pseudo-device	pppoe			# PPP over Ethernet (RFC 2516)
#pseudo-device	sl		2	# Serial Line IP
#pseudo-device	tun		4	# network tunneling over tty
#pseudo-device	gre		2	# generic L3 over IP tunnel
pseudo-device	gif		4	# IPv[46] over IPv[46] tunnel (RFC1933)
#pseudo-device	faith		1	# IPv[46] tcp relay translation i/f
#pseudo-device	stf		1	# 6to4 IPv6 over IPv4 encapsulation
pseudo-device	vlan			# IEEE 802.1q encapsulation
pseudo-device	bridge			# simple inter-network bridging
pseudo-device	pty			# pseudo-terminals
pseudo-device	rnd			# /dev/random and in-kernel generator
pseudo-device	openfirm		# /dev/openfirm
pseudo-device	wsmux			# mouse and keyboard multiplexor
pseudo-device	clockctl		# user control of clock subsystem

46. Build a new kernel:

    cd /usr/src/sys/arch/macppc/conf
    config IBOOK
    cd ../compile/IBOOK/
    make depend
    cp /netbsd /netbsd.old
    cp netbsd /

47. Reboot and enter OpenFirmware and enter following commands:

    eject cd (you don't need the installation disk anymore)

    setenv auto-boot? false
    setenv boot-device hd:2,ofwboot.xcf
    setenv boot-file hd:3,/netbsd

    Note: Setting auto-boot to true results on my iBook in a blank
    screen after booting. You can try it. Maybe it works with
    auto-boot=true for you?

48. If auto-boot=false, you've to enter boot at each start of the iBook.

49. I recommend at this time to use the default Xmacppc Server, just
launch X entering startx. In future there'll be XFree 4.3 with ATI
support. I'll have a look at it if there's enough time :)

    See also:

50. I hope all these steps helped you. If you know something better, 
let me know! 



Anselm R. Garbe  <>  GPG fingerprint: 3977 C88E F5F3 97CA 8AD9    /\    NetBSD/x86      6DD7 74CE 2A7A 0D73 F361