The best way to investigate and play with a technology is within a virtual environment. So with that in mind I wanted to try and setup an Automated Install (AI) in a VirtualBox environment.
NOTE : Blogs by Chris Armes, Configuring an auto install client / server setup in VirtualBox and Joe Vlcek, Automated Install Using VirtualBox, were used extensively as references in following this process.
NOTE : All of the commands I performed as root. Run following command before starting : $ pfexec su
NOTE : One caveat I will mention, I've noticed that getting the network set up correctly BEFORE creating the install service and creating the initial DHCP server settings is vital, and changes to the AI server VM network setup, requires and reset of the DHCP server and the install-services. 1. Create And Install VirtualBox Server VM


Create a new guest VM in VirtualBox for the AI server, with following setup, ensure you configure network interfaces before booting up, Network Adapter 1, should be left as the default value of NAT. Name : ai-server Network Interfaces : Adapter 1: Intel PRO/1000 MT Desktop (NAT) Adapter 2: Intel PRO/1000 MT Desktop (internal network, 'AI') Base Memory : 1024 MB
Install OpenSolaris 2009.06 or later in this guest. ISO can be got from http://hub.opensolaris.org/bin/view/Main/TryOpenSolaris.
NOTE: Remeber the name you provided when installing as you'll use this later, the default is "opensolaris". 2. Configure AI-Server VM.


Once installed, reboot into the AI-Server VM, and perform the following steps : 2.1. Set preferred pkg repository

By default OpenSolaris install's will point to publisher http://pkg.opensolaris.org/release, if you want to continue using the released repository then thats fine, however I prefer to use the latest dev repository. $ pkg set-publisher -O http://pkg.opensolaris.org/dev opensolaris.org 2.2. Install required installadm tools

$ pkg install SUNWinstalladm-tools 2.3. Configure network SMF services


By default NWAM is turned on, you need to disable this and enable network/physical:default SMF instead : $ svcadm disable network/physical:nwam $ svcadm enable network/physical:default 2.4. Configure Network Adapter 1 to be DHCP

$ ifconfig e1000g0 dhcp $ touch /etc/dhcp.e1000g0
Everytime you boot your ai-server VM you will need to ensure this interface is plumbed and the set up for dhcp, I've yet to determine why. $ ifconfig e1000g0 plumb $ ifconfig e1000g0 dhcp 2.5. Configure Network Adaptor 2, Step 1 : /etc/hosts


Edit /etc/hosts adding the following lines 10.0.2.15 ai-server 192.168.2.50 ai-server-private 192.168.2.60 ai-client0 192.168.2.61 ai-client1 192.168.2.62 ai-client2 192.168.2.63 ai-client3 192.168.2.64 ai-client4
ai-server is the name I called my Server VM when installing, by default this is called opensolaris. You can add as many ai-client lines as you like, I just added 5.
Also comment out the lines ::1 and 127.0.0.1 as follows #::1 ai-server ai-server.local localhost loghost #127.0.0.1 ai-server ai-server.local localhost loghost 2.6. Configure Network Adaptor 2, Step 2 : /etc/netmasks


Edit /etc/netmasks adding the following lines : 10.0.2.0 255.255.255.0 192.168.2.0 255.255.255.0 2.7. Configure Network Adaptor 2, Step 3 : hostname.e1000g1


Enter the IP assigned to the server in /etc/hosts into this file:
Enter the server name assigned to interface /etc/hosts : $ cat hostname.e1000g1 ai-server-private 2.8. Configure Network Adaptor 2, Step 3 : ifconfig

$ ifconfig e1000g1 inet 192.168.2.50 netmask 255.255.255.0 broadcast 192.168.2.0 $ ifconfig e1000g1 up 2.9. Enable ipv4 fowarding :

$ routeadm -e ipv4-fowarding $ routeadm -u 2.10. Ensure Your name service is using DNS on ai-server VM

$ grep ^ipnodes /etc/nsswitch.conf | grep dns ipnodes: files dns # Added by DHCP $ grep ^hosts /etc/nsswitch.conf | grep dns hosts: files dns # Added by DHCP 2.11. Ensure /etc/resolv.conf contains valid IP's of DNS servers


On ai-server VM : $ cat /etc/resolv.conf domain ireland.sun.com 111.111.22.01 111.111.22.02
NOTE : These IP's are for illustration purposes only, and don't actually exist. 2.12. Ensure dns SMF services are enabled :

$ svcs dns/client:default online 12:44:41 svc:/network/dns/client:default $ svcs enable network/dns/multicast:default $ svcs dns/multicast:default online 12:44:41 svc:/network/dns/multicast:default 2.13. Configure NAT and enable ipfilter SMF service


Create /etc/ipf/ipnat.conf : $ echo "map e1000g0 192.168.2.0/24 -> 0/32" > /etc/ipf/ipnat.conf
Enable ipfilter SMF service : $ svcadm enable network/ipfilter:default
This can sometimes timeout and fail, depending on your hardware setup, to get around this simply increase the start/timeout_seconds SMF property, and try restarting. $ svcadm disable network/ipfilter:default $ svccfg -s network/ipfilter:default setprop start/timeout_seconds = 90 $ svcadm enable network/ipfilter:default 2.14. Ensure route:default SMF service is enabled


Ensure route:default SMF service is online : $ svcs routing/route:default STATE STIME FMRI online 10:21:13 svc:/network/routing/route:default
If not online then enable it : $ svcadm enable /network/routing/route:default 3. Download AI Client Image


Download an AI ISO image to use with your automated install, this can be got from http://www.opensolaris.com/get/index.jsp.
Before downloading I created image and server location areas : $ mkdir /export/home/ai-images $ mkdir /export/home/ai-servers
Here's a convenient download command : $ mkdir /export/home/ai-images $ wget http://dlc.sun.com/osol/opensolaris/...906-ai-x86.iso 4. Create Install Service


When creating your first install service you need to supply DHCP network information, e.g -i and -c flags. Subsequent create-service calls do not require this information. $ installadm create-service -n osol-0906-x86 -i 192.168.2.60 -c 5 -s /export/home/ai-images/osol-0906-ai-x86.iso /export/home/ai-servers/osol-0906-ai-x86 Setting up the target image at /export/home/ai-servers/osol-0906-x86 ... Registering the service osol-0906-x86._OSInstall._tcp.local Creating DHCP Server Created DHCP configuration file. Created dhcptab. Added "Locale" macro to dhcptab. Added server macro to dhcptab - ai-server. DHCP server started. dhtadm: Unable to signal the daemon to reload the dhcptab Unable to determine the proper default router or gateway for the 192.168.2.0 subnet. The default router or gateway for this subnet will need to be provided later using the following command: /usr/sbin/dhtadm -M -m 192.168.2.0 -e Router= -g Added network macro to dhcptab - 192.168.2.0. Created network table. adding tftp to /etc/inetd.conf Converting /etc/inetd.conf copying boot file to /tftpboot/pxegrub.I86PC.OpenSolaris-1 Service discovery fallback mechanism set up
This will create install service osol-0906-x86. If you wanted to create another service with a different AI Iso Image, e.g. dev-131 you would use the following : $ installadm create-service -n dev-131 -s /export/home/ai-images/dev-131.iso /export/home/ai-servers/dev-131 Setting up the target image at /export/home/ai-servers/dev-131 ... Registering the service dev-131._OSInstall._tcp.local Service discovery fallback mechanism set up 5. Ensure tftp SMF service is enabled


Initial call to installadm create-service will add an entry to /etc/inetd.conf to start the tftp SMF Service, at this point just make sure it's enabled : $ svcs -a | grep tftp online 11:46:48 svc://network/tftp/udp6:default
If it's not online then enable it : $ svcadm enable network/tftp/udp6:default 6. Configure DHCP


Run dhcpmgr GUI tool
Select macros tab and double click on the dhcp_macro_osol-0906-x86 to bring up a macro properties dialog ensure the following macros are set : Option Name : Router Option Value : 192.168.2.50 Option Name : DNSserv Option Value : Option Name : BootSrvA Option Value : 10.0.2.15
NOTE : DNSserv will need to be changed when you move the system around to the correct DNS entries specifed in /etc/resolv.conf.
You will need to set these macros for each service that is created using create-service. 7. Verify Install Server Available


Launch browser and browse to http:/localhost:5555, you should see "Index of /" page. You can also use installadm list : $ installadm list Service Name Status Arch Port Image Path ------------ ------ ---- ---- ---------- osol-0906-x86 on x86 46501 /export/home/ai-servers/osol-0906-x86 dev-131 on x86 46502 /export/home/ai-servers/dev-131 8. Create And Configure VirtualBox Client VM


Create another VirtualBox VM for the client : Name : ai-client0 Network Interfaces : Adapter 1: Intel PRO/1000 MT Desktop (internal network, 'AI') Base Memory : 1024 MB Boot Sequence : Network, Floppy, CD/DVD ROM, Hard Disk
You can assign a specific client to use a specific install service using the network adapters MAC address. This can be seen by clicking on advanced when viewing the network adaptor, before the VM guest is started.
To assign this client to the dev-131 install service you would do the following on the server VM, lets assume MAC address is 01:08:00:27:28:C3:1D : $ installadm create-client -n dev-131 -e 01:08:00:27:28:C3:1D Setting up X86 client... Service discovery fallback mechanism set up Enabled network boot by adding macro named 0108002727C31D to DHCP server with: Boot server IP (BootSrvA) : 192.168.2.50 Boot file (BootFile) : 0108002728C31D
Now when you boot the client it will specificaly attempt to install using the dev-131 install service. 9. Boot and Install Client


Start up your new VirtualBox Client, it should boot from the network and get a DHCP address assigned from the ai-server VM, and should present you with a grub menu item to perform an automated install. 10. Amending the default manifest.


For more information see the section "How to change or replace the default manifest?" at http://www.opensolaris.org/os/projec...est_setup.html. 10.1. Determine the target image path for your specific service :

$ svccvg -s :/system/install/server:default listprop AI&ltsvcname&gt/image_path Where svcname is your newly created install service e.g. : $ svccvg -s :/system/install/server:default listprop AIosol-0906-x86/image_path AIosol-0906-x86/image_path astring /export/home/ai-servers/osol-0906-x86 10.2. Make a copy of the default manifest

$ cp /export/home/ai-servers/osol-0906-x86/auto_install/default.xml /tmp 10.3. Edit your copied /tmp/default.xml


Ensure tag value remains "default".
Revise and sections as necessary.
To change the publisher from the default of pkg.opensolaris.org/release, simply change the value of tag under . From From
now using installadm add this new manifest to the service overriding the previous default.xml $ installadm add -m /tmp/default.xml -n osol-0906-x86
Installing a new client from this service will now reference the new default.xml manifest. 11. Troubleshooting


The following is a list of issues that may arise and how one might resolve them. Auto Install DNS Failure


If client auto install is failing with the following install_log excerpt : pkg image-create: The URI 'http://pkg.opensolaris.org' does not appear to point to a valid pkg server. Please check the server's address and client's network configuration. Additional details: Unable to contact valid package server Encountered the following error(s): Unable to contact any configured publishers. This is likely a network configuration problem. Unable to initialize the pkg image area at /a ... Automated Installation failed in Transfer module Transferring the files from the source failed. Please see previous messages for more details
From within the Vbox Client VM try the following tests : Is the repository pingable :

$ ping pkg.opensolaris.org
If you get back: 'ping: unknown host pkg.opensolaris.org' the error may be DNS related.
If you get back: 'no answer from pkg.opensolaris.org' the error may be connectivity related Is DNS Serer Reachable


Firstly get the server IP addresses via : $ grep ^nameserver /etc/resolve nameserver 192.168.0.1
Verify the server is reachable by pinging the ip addresses returned : $ ping 192.168.0.1 192.168.0.1 is alive
If you get don't get returned IP is alive, then there is a DNS issue, talk to your DNS/Network administrator. If /etc/resolv.conf is empty

If /etc/resolv.conf is empty, you can run : $ dhcpinfo DNSServ and see if you get any addresses back. If nothing is returned your DHCP is mis-configured. If address are return, try pinging them as stated above. DNS Server is alive


If the DNS server was alive, you can see if you are getting the right IP address for pkg.opensolaris.org by running : $ getent hosts pkg.opensolaris.org
If the IP address differs from a machine able to go to pkg.opensolaris.org, then you should contact your DNS/network administrator.
If getent is not returning anything, there is a routing issue between your Vbox network and the host network on which VirtualBox is running.
Check the value of the BootSrvA DHCP Macro property for your install service : $ dhcpinfo BootSrvA 10.0.2.15
This should be the IP address of network adaptor 1 on your AI server VM. If not go back to your server, and set this value correctly and refresh the dhcp-server SMF service, and try rebooting the install AI client VM.
Another more extreme method is to re-initialize DHCP and re-install the install services :
Firstly delete the install service : $ installadm delete-service osol-0906-x86 Boot archive /tftpboot/I86PC.OpenSolaris-1 for services is not a mountpoint. Boot archive (/tftpboot/I86PC.Opensolaris-1) for service osol-0906-x86 nto in vfstab Unable to find path /tftpboot/I86PC.OpenSolaris-1 To delete DHCP macro, run the following command: /usr/sbin/dhtadm -D -m dhcp_macro_osol-0906-x86
Remove dhcp macro for this service : $ dhtadm -D -m dhcp_macro_osol-0906-x86
Now unconfgiure the DHCP server settings completly : $ dhcpconfig -U -x Unconfigure will stop the DHCP service and remove the DHCP configuration file. Are you SURE you want to unconfigure the DHCP service? (Y/N): y DHCP server shutdown. Deleted the server macro from dhcptab. Deleted table for network 192.168.2.0. Deleted the dhcptab. Deleted the DHCP configuration file.
Now recreate the install service and the dhcp starting from Step 4 above, and try booting into the AI client VM again.

More...