[[!meta title="How to install NetBSD on an Apple Macbook with Core 2 Duo"]]
#Things you DO NOT want to do
* Do **not** try using i386 NetBSD before 4.0. It'll install, but the minute you put any kind of load on the machine (like compiling stuff from pkgsrc) the machine will die with a kernel panic. Most of what has been tried in this howto was done using the amd64 release 4.0.
* Do **not** try installing the amd64 port for the 3.1 release. The drivers are too old for this machine and you'll be lucky to get through the installation before it crashes.
* Do **not** install the NetBSD bootselect code when you are doing the installation. Answer "NO" to that question during installation. Otherwise you could wipe out the rEFIt loader along with any way to boot the machine. You'll either end up reloading OS X from scratch or trying to recover with a lot of black magic on the EFI shell.
* Do **not** try using LFS on a partition that has even a moderate amount of I/O going on it. Your machine will panic until your remove the LFS venom from it's veins. Stick with UFS1 + softdep at least until 4.0 comes out. (UFS2 + log should work on 5.0 and -current).
* Do **not** just compile the meta package for xorg without first setting your options in such a way that you'll get the i810 server installed properly or you'll waste a bunch of time recompiling later. UPDATE: this maybe fixed in pkgsrc-2008Q4 so maybe you can just set "X11_TYPE=modular" in /etc/mk.conf and compile all the meta xorg packages from pkgsrc/meta-pkgs/xorg-* . For recent versions of current, try setting X11FLAVOUR=Xorg and X11_TYPE=modular in /etc/mk.conf to get both native and package (modular) Xorg.
* Do **not** try to use XFree86 -- it will probably fail.
# What works and what doesn't
## Known to work
* SATA disk drivers
* Core2Duo processor (it still crashes, but the amd64 much less often than the i386 port)
* i810 Graphics (Intel 945GM chip) and the LCD panel (with some help from the "915resolution" application)
* NVIDIA GeForce graphics (with resent Xorg).
* Touchpad (but no synaptic extensions, so it sucks)
* IEEE1394 interface (shows up, but I've never used it)
* USB 2.0/1.0
* Marvell Gigabit Ethernet
* Automatic (ACPI?) fan control (ie.. you won't fry your macbook installing NetBSD)
## Known not to work
* Apple iSight Camera (Should work in 5.0 and -current post Nov 1. 2008). For now it's simply "not configured"
* Internal Atheros 802.11g interface. Might work in 5.0
* Internal Broadcom BCM43xx 802.11b/g interface (found in some models). Should work in a near future -- it is supported by DragonflyBSD and OpenBSD.
* The internal accelerometer.
* The infrared remote control (actually it might work via "xev" and a window manager like fluxbox)
* The external DVI (might work, with newer Xorg but broken at the moment)
* Sound (audio0 shows up but you can't really use it due typical netbsd azalia problems). ** UPDATE sound kind of works in 4.0 and probably fully in 5.0/-current however you'll need to jack with all the values you see from "mixerctl -a" before you'll hear anything. Start by Unmuting everything and maxing out all the values, then turn it down from there.
# Gathering What you'll need
Before you get started, let's get straight what you have and what you'll need.
* A MacBook with a Core2Dual CPU (use i386 for the older CoreDuo Macbooks) (non-pro - I don't know if any of this works with the Pro model). I am totally unsure about the Macbook Pro. There wasn't one available to test as this document was assembled. UPDATE: Macbook Pro should work fine, but some of the hardware, for example graphics cards and internal 802.11 interfaces, might be completely different.
* Mac Mini's also seem to work with largely this advice.
* A -current version of NetBSD for the "amd64" architechture (i386 versions will crash under a small bit of load on the Macbook). I used 200705170002Z from ftp://nyftp.netbsd.org/pub/NetBSD-daily/HEAD/. I've noticed that netbsd-4 beta snapshots seem to work fine, as well (as long as they are amd64 architechture).
* A CDRW or CDR with the "boot.iso" file burned on it from the NetBSD distribution mentioned above. I used an FTP based install, so there was no need to burn the whole distribution onto my CDRW. It helps to have a local FTP, NFS, or HTTP server with the binary sets on them if you want a fast install process.
* A working, ethernet-based connection to the Internet (or localnet with cached install sets) or a known-good USB-based wifi adapter.
* A copy of rEFIt to use as a primary bootloader. Get it at http://refit.sourceforge.net If you already have MacOS X installed, I'd suggest getting the disk image (dmg) version. It has a GUI-based installer that works with MacOS.
# Boot Loaders
A (U)EFI boot loader is required to transfer control to a target operating system at boot time. As of this writing, there are two boot loaders in use for NetBSD and Linux setups on Macintosh computer's: rEFIt, and a more recent fork of rEFIt named rEFInd.
## Using rEFIt
First grab a copy of rEFIt from <http://refit.sourceforge.net> and install it. The DMG-based installer is one good option but you can also create a bootable CDROM that'll assist in installing it if for some reason you don't have OSX anymore. If you choose the CDROM installation method, you'll need to download the ISO image instead of the DMG from the refit site The rEFIt program is basically like an EFI-based GRUB or LILO which gives you a slick-looking bootloader that'll allow you to choose between your various Mac partitions and the OS's that live on them. It's still necessary to install a secondary bootloader for each individual OS. Because of limitations on ancient MSDOS partition tables you'll only be able to have 3 OS's on your machine (the EFI firmware takes up a partition, too).
While in OSX, open a terminal and do:
cd /efi/refit/ ; ./enable.sh
You may also wish to edit /efi/refit/refit.conf to uncomment the Legacy section in case you want NetBSD to boot automatically. You might also choose to change the rEFIt timeout to something less than 20 seconds.
Afterwards rEFIt comes up before the Apple boot loader and you have a nice set of colorful icons representing my partitions. Before I made space for NetBSD, I could see my OS X and Windows partitions and use rEFIt to boot either one. rEFIt must do some kind of BIOS emulation, because any kind of bootable CDROM also shows up in the rEFIt menu if it's in the drive as the system is powered on. You can boot any PC operating system, but very very few are going to get very far on this newfangled hardware. Fortunately, NetBSD -current amd64 can boot just fine.
## Using rEFInd
# Creating a new partition for NetBSD
There are two ways to do this. The GUI way and the CLI way. The GUI way is probably easier for beginners, but I'm guessing that if you want to install NetBSD -current on your MacBook you aren't a beginner. If you want to use the GUI, then you'll need to install bootcamp. For Mac OS X (10.4) you can download a beta-version of bootcamp for free from Apple's site. It's usually found here <http://www.apple.com/macosx/bootcamp/> but it's in beta, so it could go away any time. If you haven't already ran the "boot camp assistant" you can use this tool to resize your OSX partition and split it up ala PartitionMagic. If you already have a Windows partition you've created with boot-camp, you won't be able to use Boot Camp Assistant again. You'll have to do it from a terminal.
Here is how:
First do this to get a list of your current partitions **diskutil list**
Now decide which partition you want to be your NetBSD parition, and do **not** pick the EFI partition (you need that). I choose to use partition 4 on my macbook since 1==EFI, 2==OSX, and 3==WinXP.
(assuming you have an 80Gb disk and you want )
sudo diskutil resizeVolume disk0s2 32G "Linux" <name of NetBSD volume> 21G "MS-DOS FAT32" <name of windows volume> 21G
This operation only changes your partition layout to include a 32GB OS X partition, 21GB Linux one and 21GB Windows partition. We'll change the Linux tag to NetBSD once we get into the NetBSD installer. The diskutil command above was shameless lifted from the Gentoo Linux wiki on installing their distro on the MacBook, but it works.
# Installing NetBSD -current
As mentioned above you'll need a -current release of NetBSD for the AMD64 architecture (Intel licensed the AMD64 instructions and re-named them to hide their shame at having the Itanic rejected by Microsoft). If you use the i386 port, you can expect to have major problems; so don't say you weren't warned. I guess if you have a CoreDuo Macbook (not the Core2Duo) you might want to give i386 a shot, but that's not what this document intends to cover. Once you have the "boot.iso" from "amd64/installation/cdrom' properly burned onto a CDR then put it into your system's drive and restart. rEFIt will detect the bootable disk and there will be an icon with a little CD picture on it showing you the disk as a boot option. Go ahead and select it, then let it boot up. Do the installation as usual but remember do not **install the mbr bootselect code!**. NetBSD will automatically install it's stage2 loader on the partition you select and rEFIt will transfer control to that paritition when you select it from the menu (it'll show up automatically as rEFIt probes your partitions prior to showing the initial menu). Once you reboot there is more fun on the way. If you use the boot.iso file to create your CDROM and didn't put any of the tarball "sets" on the CDROM, you'll have to get them over the network via http or ftp. One option is to go to another, working, machine and write down the full path on the FTP site to the directory right before the 'amd64' directory. For example: <ftp://nyftp.netbsd.org/pub/NetBSD-daily/HEAD/200705170002Z> . Your milage my vary. Refer to the regular NetBSD handbook if you need help with the installation. There is nothing too special about it other than a little extra hassle if you use the network.
# Installing on dk(4) wedges
If the install kernel (or the installed kernel, with different symptoms) was compiled with dk(4) support (and gpt-autodetection) -- that is if the kernel configuration included
as the recent install kernels do, and you plan to have both OS X and NetBSD on the same disk, you have to do the installation by hand. Since you need GPT partitions for rEFIt and OS X, dk(4} wedges will be added for them. Since the disk can only be accessed via wedges once at least one wedge has been added, and sysinst(8) does not know about wedges, the installation will fail with a `device busy' when sysinst tries to newfs(8) the NetBSD partition(s).
Fortunately, it is not hard to do the installation by hand. The following example assumes that you are installing from a cd, that you want to have just OS X and NetBSD on the disk (a NetBSD-only installation is easy; other installation media or a third operating system work analogously), that you are installing amd64, and that OS X is already installed on an HFS+ partition. The example uses a 200GB disk, with roughly half for the EFI and HFS+ partitions for rEFIt and OS X, and roughly half for the NetBSD partitions. Please make sure that you understand the starting sectors and sizes in the examples below before you try to mimic them.
* Install rEFIt as described above.
* Decrease the size of the HFS+ partition using the graphical Disk Utility or the command-line diskutil(8) from OS X (the graphical interface is found from Applications -> Utilities -> Disk Utility in recent versions of OS X). It is easiest to leave empty space for NetBSD and not create a partition at this stage.
* Boot the installation cd. Exit sysinst (or choose `run /bin/sh').
* Create the drvctl(4) device and enough [r]dk(4) devices:
cd /dev && sh MAKEDEV drvctl dk7
* Mount a memory-mapped file system, untar at least the base set on it, and add the relevant directories to your paths:
mount_mfs -s512m swap /mnt
mount -r -t cd9660 /dev/cd0a /mnt2
cd /mnt && tar xzpf /mnt2/amd64/binary/sets/base.tgz
cd /dev ; tar cf - . | (cd /mnt/dev ; tar xvpf - )
* Use gpt(8) (/sbin/gpt) to edit the GPT partition table. Assuming your disk is wd0,
gpt show wd0
should show something like
start size index contents
0 1 MBR
1 1 Pri GPT header
2 32 Pri GPT table
40 409600 1 GPT part - EFI System
409640 195360984 2 GPT part - Apple HFS
390721935 32 Sec GPT table
390721967 1 Sec GPT header
* Add an FFS partition and a 4GB swap partition by:
gpt add -b 195770624 -i 3 -s 186562702 -t ffs wd0
gpt add -b 382333327 -i 4 -s 8388608 -t swap wd0
gpt label -i 3 -l "NetBSD-root" wd0
gpt label -i 4 -l "NetBSD-swap" wd0
* Dynamically add the relevant wedges using dkctl(8). The output of gpt add should show you the needed parameters (you can use ffs and swap, respectively, for the types).
dkctl wd0 delwedge dk2
dkctl wd0 addwedge NetBSD-root 195770624 186562702 -t ufs
dkctl wd0 addwedge NetBSD-swap 382333327 8388608 -t swap
Alternatively, you can reboot the installation cd, since the GPT partitions will be detected automatically.
* Edit the MBR table using fdisk(8) (fdisk -u wd0). Once you are done, the MBR table should look something like
0: GPT Protective MBR (sysid 238) ...
1: Apple HFS (sysid 175) ...
2: NetBSD (sysid 169) ...
3: NetBSD (sysid 169 ) ...
with the same starting sections and sizes as in the GPT table.
* Edit the disklabel (disklabel -i wd0). One you are done, it should look something like (as long as the start, size and type are correct, the rest is quite arbitrary)
a: 186562703 195770624 4.2BSD 0 0 0
b: 8388608 382333327 swap
c: 186562703 195770624 unused 0 0
d: 390721968 0 unused 0 0
e: 409639 1 unknown
f: 1 95360984 409640 HFS
(the rEFIt EFI partition is left unknown, since we do not want to risk messing it up).
* newfs(8) the FFS filesystem (make sure you use the correct /dev/rdk<n>) and mount it (the log option is, of course, optional):
newfs -O2 /dev/rdk2
mount -o log /dev/dk2 /mnt
* untar(1) the sets (SETS is the list of sets you want to install -- at least base.tgz and kern-GENERIC.tgz):
for F in $SETS; do (cd /mnt && tar xzpf - ) < $F; done
* Edit /mnt/etc/fstab (to use vi, add /mnt/[usr/]bin and relevant libraries to your [ld] path, and export TERM=vt100). Make sure that you at least have
/dev/dk2 / ffs rw 1 1
/dev/dk3 none none sw 0 0
ptyfs /dev/pts ptyfs rw 0 0
kernfs /kern kernfs rw,noauto 0 0
procfs /proc procfs rw,noauto 0 0
* Install the bootcode:
cp -p /mnt/usr/mdec/boot /mnt/usr/mdec/boot.cfg /mnt
installboot -v /dev/rdk2 /mnt/usr/mdec/bootxx_ffsv2
* Edit /mnt/boot.cfg if needed
* Create the devices:
cd /mnt/dev && sh MAKEDEV all dk7
* Reboot, and proceed with configuration.
#Getting X to work
**Note:** The following description applies to older versions of --current (pre November 2008, pre 5.0). For resent versions, try setting X11FLAVOUR=Xorg in /etc/mk.conf when building a release, and try setting X11_TYPE=modular in /etc/mk.conf for building packages. The startup scripts (notably /etc/rc.d/xdm) look for X in /usr/X11R6, while Xorg resides under /usr/X11R7. To get xdm(1) working, add
Getting X working on your Macbook is something of a non-trivial task. First of all, the default XFree86 code that comes with the -current distribution won't even recognize the PCI-ID of the video card (an Intel GMA950). You'll have to install the Xorg server. I did this by setting **X11_TYPE=xorg** in /etc/mk.conf and installing it from **/usr/pkgsrc/meta-pkgs/xorg** (you _did_ install NetBSD's pkgsrc right?). One small problem is that the i810 driver does not build by default on the x86_64 (amd64) architecture. You need to set the **PKG_DEFAULT_OPTIONS** to include the **xorg-server-i810** string. This can be done by simply typing **export PKG_DEFAULT_OPTIONS=xorg-server-i810** before you do the **make install** command from the **/usr/pkgsrc/meta-pkgs/xorg** directory. Once you have Xorg installed (which will take a while to compile), you can go ahead and set it up. One method is to do an **X -configure** then copy the **/root/xorg.conf.new** file into /etc/X11 and edit it to your taste. You'll need to manually set the **HorizSync** and **VertRefresh** in the display section. The see the example **xorg.conf** for reference. Just for a review, let's enumerate the steps needed here:
For 5.0 (and -current 5.99.1 and later), you can instead set "X11FLAVOUR=Xorg" and build a release/distribution to get a working X server.
1. Download the pkgsrc2007Q1 or newer tarball
2. Unpack it into /usr, e.g.:
cd /usr ; tar xzvf /tmp/pkgsrc-2007Q1.tar.gz
3. Set your X11 server type to be Xorg, e.g., as root::
echo "X11_TYPE=xorg" >>/etc/mk.conf"
4. Set your server build options so you get the i810 driver even though this is an x86_x64 machine. E.g.:
5. Allow the xorg-server-i810 to be built by editing **/usr/pkgsrc/x11/xorg-server/options.mk** and adding **xorg-server-i810** to the end of the **_COMMONCARDDRIVERS** list and removing it from the **_NOTX86_64CARDDRIVERS** list.
6. Build xorg, e.g.:
cd /usr/pkgsrc/meta-pkgs/xorg ; make install
7. Move the old XFree86 tree out of the way and link xorg in it's place, e.g.:
cd /usr/ ; mv X11R6 xfree86.X11R6 ; ln -s /usr/pkg/xorg /usr/X11R6
8. Create a skeleton xorg.conf file, e.g. as root:
9. Copy the skeleton file into place and edit it, e.g.:
cp /root/xorg.conf.new /etc/X11/xorg.conf
10. During your editing / customization make sure to add the following lines:
1. Add **HorizSync 28-64** and **VertRefresh 43-60** to the *Monitor* section. These are keywords, not **Options**; so add them just as shown.
2. Change the mouse ZAxisMapping option to **"4 5"** instead of **"4 5 6 7"** or any USB mice you plug in will behave badly.
3. Add the **DefaultDepth 24** line to the **Screen** section just below the line that says **Monitor "Monitor0"**
4. In the **Screen** you'll find the subsection for the 24-bit display. Just below the line that says **Depth 24** add a line that says **Modes "1280x800"**
11. Install the **915resolution** tool from pkgsrc. (ie.. **cd /usr/pkgsrc/sysutils/915resolution ; make install**)
12. Replace a mode you know you'll never use with the 32-bit mode for 1280x800. If you don't do this, you won't be able to use the native (1280x800) video mode.
1. List all the available modes **915resolution -l**
2. Pick a mode and replace it: **915resolution 4d 1280 800 32**
13. Test the X server **startx**
14. Now add the 915resolution
* [rEFInd Website](http://www.rodsbooks.com/refind/)
* 2015-11-01: General formatting. Fixed code blocks so they are more readable. Expanded boot loader section (rEFInd section still needs to be written; it is a placeholder for now).
CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb