OpenIndiana Automated Install Server

This is a draft set of steps for getting an automated install server configured on almost any platform using only Apache, DHCP and TFTP. It’s very rough at this point but it functions well enough to PXE boot and install a copy of OpenIndiana (OI).

First up, you should make a directory /export/install and:

git clone git:// \

If you don’t have git you can grab a tarball of the repository at github’s web interface.

Until an OI bootable Automated Install (AI) ISO is available you can use the distro constructor to create your own. If someone wants to host a copy of a functional ISO that I’ve built, please let me know! I’ve made a few modifications to the AI ISO build descriptor that comes with OpenIndiana. You should grab the distro_const/ai_x86_image_JMC.xml file from the github repository and (on an OI 147 host) run:

distro_const build ai_x86_image_JMC.xml

After a while you’ll get a usable ISO in /rpool/dc/media that you can use to set up the rest of your environment. You should extract the contents of the ISO into /export/install/ai_image. Assuming your TFTP server is rooted in /tftpboot you’ll want to:

cp -r /export/install/ai_image/boot /tftpboot/oi

You’ll also want a local IPS repository containing the current OI packages. Fetch this 2GB tarball: oi_147_spin2.tar.bz2. Extract it into /export/install/repo.

You can use rsync to bring the repo seed files you got from the tarball up to date, thus:

rsync -a \

In order to simulate parts of the automated install server that ships with OI I’m using a few CGI shell scripts. There are two ksh scripts and a list of packages to be installed (cgi-bin/PACKAGES_LIST) in the git repository which you can customise to your liking. I’ve also prepared some responses to the /versions/0 and /publisher/[01] methods of a real IPS repository server. As these responses are essentially static I’m just using regular text files.

Configure Apache (I used version 2.2 from pkgsrc) on your system. You’ll need two virtual hosts, each listening on a different port (e.g. 5555 and 10000). These vhosts will map the various service URLs onto local repository content and the cgi scripts. They should be configured as per the sample in the git repo: doc/apache_vhost_config.txt.

Make sure you set the correct URL to the IPS repository vhost in environment variable $REPO_URL_MAIN in cgi-bin/ai-manifest.ksh. This tells the AI client to use your new local repository instead of the one on the Internet. Unlike the public URL, yours will not end in /dev if you’ve used the exact vhost configuration I’ve provided. Note that the additional /legacy repository is, by all accounts, incredibly large and you don’t need many packages from it so I’m just using the public remote copy.

You should also create a GRUB menu.lst from the example in the git repository using the IP address and port numbers of your Apache vhosts and put it in /tftpboot/oi.

Finally, configure DHCP (I use ISC dhcpd) to answer your host’s PXE requests. If you’re also using ISC then something like this snippet should suffice:

option grubmenu code 150 = text;
# Force grubmenu to appear in the request list...
if exists dhcp-parameter-request-list {
       option dhcp-parameter-request-list = concat(option dhcp-parameter-request-list,96);
host odin {
   hardware ethernet 00:13:72:17:39:d2;
   filename "oi/grub/pxegrub";
   option grubmenu "oi/menu.lst";

With all this together you should be able to PXE boot a host with OI 147! Feedback and corrections welcome.

NB: Credit where it’s due; I started with this page on the OpenIndiana Wiki.