compared with
Current by Nahum Shalman
on Jun 23, 2014 18:12.

This line was removed.
This word was removed. This word was added.
This line was added.

Changes (3)

View Page History

While USB and DVD installation are useful for small or non-production deployments, SmartOS is fundamentally designed as a netboot operating system. Advantages of netbooting include:

h1. Kernel Boot Options

Several parameters can and should be passed to the "unix" kernel. These would be coma delimted comma-delimited following "-B", as seen in examples above.

* *smartos=*: If set true and */usbkey/shadow* is present, it will use the root password within */usbkey/shadow*
* *\-kd*: Enable the Kernel Debugger (KMDB); this is typically only used for debugging drivers
* *\-v*: Verbose boot

h1. Alternatives

h2. Stripped down dnsmasq, tftp-hpa, pxegrub

The example code in this section uses a very old image and hasn't been tested in a while. If you end up using this section as a guide, try using a modern image. If you succeed, please update the image_uuid.

h3. Motivation

So you have a machine running SmartOS from a USB stick or CD.
Wouldn't it be nice to be able to use that machine to PXE boot a whole additional rack of machines?
Here's how to set up a simple PXE server in a SmartOS zone that will serve up... SmartOS\!
This section assumes some basics covered in other wiki pages.

h3. Zone Configuration
"alias": "pxe-server",
"hostname": "pxe-server",
"brand": "joyent",
"max_physical_memory": 64,
"quota": 2,
"image_uuid": "f9e4be48-9466-11e1-bc41-9f993f5dff36",
"nics": [
"nic_tag": "admin",
"ip": "",
"netmask": "",
"gateway": "",
"dhcp_server": "1"

It's up to you to get the networking right, and not to run multiple DHCP servers on your network in a way that breaks things. BE CAREFUL\!

h3. Setting up TFTP

Use zlogin to log into the zone:
zlogin <uuid>

In the zone:
pkgin -y install tftp-hpa
mkdir /tftpboot
echo "tftp dgram udp wait root /opt/local/sbin/in.tftpd in.tftpd -s /tftpboot" > /tmp/tftp.inetd
svcadm enable inetd
inetconv -i /tmp/tftp.inetd -o /tmp
svccfg import /tmp/tftp-udp.xml
svcadm restart tftp/udp
The last two commands are probably extraneous.

h3. Setting up DHCP (using Dnsmasq)

pkgin -y install dnsmasq

#Lease File to track leases
# Give out addresses in the subnet
# The name of the boot file is pxegrub

It's up to you to get the networking right, and not to run multiple DHCP servers on your network in a way that breaks things. BE CAREFUL\!

svcadm enable dnsmasq

h3. Setting up the tftpboot directory

(Use the pkgsrc wget which can actually validate certificates)
pkgin -y install wget
hash -r
cd /tftpboot
LOFI=$(lofiadm -a latest.iso)
mount -F hsfs $LOFI /mnt
rsync -av /mnt/ .
umount /mnt
lofiadm -d $LOFI
wget -O pxegrub

h2. Integrating SmartOS into an existing PXELINUX environment

The critical detail to know about booting SmartOS from PXELINUX (or SYSLINUX) is that you must use *mboot.c32* to get them to load the kernel and boot_archive using the multiboot specification.
See [|mboot.c32 documentation] for further details about that.

Recent versions of SYSLINUX require *libcom32.c32* and *ldlinux.c32* to be present to use *mboot.c32*

1. Download the ISO from [|]
1. Extract the entire *platform* subtree from the ISO.
1. Download a tarball of [|SYSLINUX] and get the *mboot.c32*, *libcom32.c32*, and *ldlinux.c32* files out of it.
1. In the tftp root directory, create a directory named *smartos*
1. Copy the *platform* directory you got from the ISO into the *smartos* directory
1. Copy the the *mboot.c32*, *libcom32.c32*, and *ldlinux.c32* files into the *smartos* directory
1. Update your *pxelinux.cfg/default* file with this content:
default smartos
prompt 1
timeout 50
label smartos
kernel smartos/mboot.c32
append smartos/platform/i86pc/kernel/amd64/unix -B console=text,standalone=true,noimport=true,root_shadow='$5$2HOHRnK3$NvLlm.1KQBbB0WjoP7xcIwGnllhzp2HnT.mDO7DpxYA' --- smartos/platform/i86pc/amd64/boot_archive