NetBooting MacOSX (Jaguar) Clients From a Linux Server

This page describes how to netboot newworld macs into MacOSX, using a Linux server

Credits

Credits goes to Michael Egan, Alistair Riddell and Ron Dumont, for each providing a piece of the puzzle.

Quick run-down

Assumptions:
  1. Create and NFS-export two directories on the linux server
    mkdir /nb-jaguar
    mkdir /nb-jaguar-private
    echo '/nb-jaguar ibook(insecure,rw,no_root_squash)' >> /etc/exports
    echo '/nb-jaguar-private ibook(insecure,rw,no_root_squash)' >> /etc/exports
    exportfs -a
    
  2. Mount the directories on a mac
    mkdir /Volumes/nb-jag
    mount master:/nb-jaguar /Volumes/nb-jag
    mkdir /Volumes/nb-jag-priv
    mount master:/nb-jaguar /Volumes/nb-jag-priv
    
  3. Copy the software from the install-cd (in this case a dmg of it) The next step must be done as root, or the ownership of files will be wrong, and OSX will not boot! Note that i have not gotten this to work. I am guessing the HFS+ to XFS copy does not work particularly well. I need something like nfswatch to figure this out
    sudo attach MacOSX-install.dmg -nomount
    mkdir /Volumes/osxinst
    mount_hfs /Volumes/osxinst /Volumes/osxinst
    cd /Volumes/osxinst
    tar cf - ._* * | (cd ../nb-jaguar ; tar xf -)
    
  4. Get dhcp-2.0pl5 and patch it with the Ridell patch
    wget http://frank.gwc.org.uk/~ali/nb/dhcp-2.0+macnb.0.1.diff
    wget ftp://ftp.isc.org/isc/dhcp/dhcp-2.0pl5.tar.gz
    tar xvzf dhcpd-2.0pl5.tar.gz
    cd dhcpd-2.0pl5
    patch -p1 < ../dhcp-2.0+macnb.0.1.diff
    ./configure
    make
    make install
    
    There will be compilation errors in the dhcp client, but don't worry about those.

  5. Configure dhcp and test it
    My dhcpd.conf:
    #Standard dhcpd options
    default-lease-time 600;
    max-lease-time 7200;
    option subnet-mask 255.255.255.0;
    option broadcast-address 192.168.1.255;
    option routers 192.168.1.1;
    
    #You should obviously change these two
    option domain-name "nowhere.se";
    option domain-name-servers 195.54.122.200, 195.54.122.204;
    
    allow bootp;
    not authoritative;
    
    # the subnet from which dhcp requests will come
    subnet 192.168.1.0 netmask 255.255.255.0 {
    
    # the host we want to boot
    host foo-001 {
    
    hardware ethernet 00:03:93:93:54:18;
    fixed-address 192.168.1.2;
    
    # the boot file 
    filename "BootX";
    
    # servers to get other files from
    server-name "192.168.1.1";
    
    # don't know if this one is absolutely necessary
    next-server 192.168.1.1;
    
    option mac-version 0:0:0:0;
    # the rest i just borrowed from Michael Egan's cgi form. I don't
    # think it is important since OSX uses rpc.bootparamd to get the
    # information it needs 
    #Username uused to authenticate against the AFP/IP Server
    option mac-user-name "Mac NC #1";
    # with specialized settings for this client's booting hard disk.
    option mac-machine-name "Mac NC #1";
    #Password for use with the Usernaame above when authenticating against
    # AFP/IP server for 3 images in 234, 235, and 238
    option mac-password "PassWooD";
    #Used to grab initial BOOT HD Image from server over AFP/IP for mounting
    option mac-nb-img c0:a8:1:2:2:24:8:4D:4F:53:39:5F:4E:42:53:0:0:0:0:2:1b:53:68:61:72:65:64:49:6D:61:67:65:73:0:4E:65:74:42:6F:6F:74:20:48:44:2E:69:6D:67;
    #Used to grab Applications HD Image from server over AFP/IP for mounting
    option mac-apps-img c0:a8:1:2:2:24:8:4D:4F:53:39:5F:4E:42:53:0:0:0:0:2:20:53:68:61:72:65:64:49:6D:61:67:65:73:0:41:70:70:6C:69:63:61:74:69:6F:6E:73:20:48:44:2E:69:6D:67;
    #Used to grab Special Client HD Image from server over AFP/IP for
    # mounting
    option mac-client-nb-img c0:a8:1:2:2:24:8:4D:4F:53:39:5F:4E:42:53:0:0:0:0:2:27:43:6C:69:65:6E:74:49:6D:61:67:65:73:0:4D:61:63:20:4E:43:20:23:31:0:4E:65:74:42:6F:6F:74:20:48:44:2E:69:6D:67:5F:73;
    }
    }
    
    Start the dhcp server, dhcpd -d eth0 If you plug the mac in now and tell it to use dhcp through Network Preferences, it should get an ip from this dhcp server

  6. Configure tftpd. Hint: /etc/services, /etc/inetd.conf and /etc/hosts.allow
    Assume you tell tftpd to use /tftproot as its directory:
    cp /nb-jaguar/System/Library/CoreServices/BootX /tftproot
    cp /nb-jaguar/mach_kernel /tftproot/mach.macosx
    cp /nb-jabuar/System/Library/Extensions.mkext /tftproot/mach.macosx.mkext
    
    Now test that tftp works by doing (on the mac)
    cd /tmp
    tftp 192.168.1.1
    tftp> get BootX
    
  7. Configure bootparams:
    # This is my /etc/bootprams
    ibook root=192.168.1.1:/nb-jaguar private=192.168.1.1:/nb-jaguar-private
    
  8. Make sure rpc.bootparamd, dhcpd and the nfs daemons are running, and preferrably start a tcpdump on the interface for 192.168.1.1, it's time to netboot "ibook"
  9. Boot the mac. Immediately after the chime, press and hold the N key until you see the square with the animated globe.
  10. ...

Overview of the boot process

I will try to work around this somehow. I'll keep you posted

References


Tor-Åke Fransson, (torake at hotmail dot com) 2002-12-15