Introduction
How to use the Oracle Solaris 11 Automated install server in order to automate the Solaris 11 Zones installation. In this document I will demonstrate how to setup the Automated Install
server in order to provide hands off installation process for the Global
Zone and two Non Global Zones located on the same system.
Architecture layout: Figure 1. Architecture layout Prerequisite Setup the Automated install server (AI) using the following instructions “How to Set Up Automated Installation Services for Oracle Solaris 11” The first step in this setup will be creating two Solaris 11 Zones configuration files. Step 1: Create the Solaris 11 Zones configuration files
The Solaris Zones configuration files should be in the format of the zonecfg export command. # zonecfg -z zone1 export > /var/tmp/zone1# cat /var/tmp/zone1 create -b set brand=solaris set zonepath=/rpool/zones/zone1 set autoboot=true set ip-type=exclusive add anet set linkname=net0 set lower-link=auto set configure-allowed-address=true set link-protection=mac-nospoof set mac-address=random end
Create a backup copy of this file under a different name, for example, zone2. # cp /var/tmp/zone1 /var/tmp/zone2
Modify the second configuration file with the zone2 configuration information You should change the zonepath for example: set zonepath=/rpool/zones/zone2 Step2: Copy and share the Zones configuration files
Create the NFS directory for the Zones configuration files # mkdir /export/zone_config
Share the directory for the Zones configuration file # share –o ro /export/zone_config
Copy the Zones configuration files into the NFS shared directory # cp /var/tmp/zone1 /var/tmp/zone2 /export/zone_config
Verify that the NFS share has been created using the following command # share
export_zone_config /export/zone_config nfs sec=sys,ro Step 3: Add the Global Zone as client to the Install Service
Use the installadm create-client command to associate client (Global Zone) with the install service To find the MAC address of a system, use the dladm command as described in the dladm(1M) man page. The following command adds the client (Global Zone) with MAC address 0:14:4f:2:a:19 to the s11x86service install service. # installadm create-client -e “0:14:4f:2:a:19" -n s11x86service
You can verify the client creation using the following command # installadm list –c
Service Name Client Address Arch Image Path ------------ -------------- ---- ---------- s11x86service 00:14:4F:02:0A:19 i386 /export/auto_install/s11x86service
We can see the client install service name (s11x86service), MAC address (00:14:4F:02:0A:19 and Architecture (i386). Step 4: Global Zone manifest setup
First, get a list of the installation services and the manifests associated with them: # installadm list -m Service Name Manifest Status ------------ -------- ------ default-i386 orig_default Default
s11x86service orig_default Default Then probe the s11x86service and the default manifest associated with it.
The -m switch reflects the name of the manifest associated with a service.
Since we want to capture that output into a file, we redirect the output of the command as follows: # installadm export -n s11x86service -m orig_default > /var/tmp/orig_default.xml
Create a backup copy of this file under a different name, for example, orig-default2.xml, and edit the copy. # cp /var/tmp/orig_default.xml /var/tmp/orig_default2.xml
Use the configuration element in the AI manifest for the client system to specify non-global zones. Use the name attribute of the configuration element to specify the name of the zone. Use the source attribute to specify the location of the config file for the zone.The source location can be any http:// or file:// location that the client can access during installation.
The following sample AI manifest specifies two Non-Global Zones: zone1 and zone2
You should replace the server_ip with the ip address of the NFS server.
<!DOCTYPE auto_install SYSTEM "file:///usr/share/install/ai.dtd.1"> <auto_install> <ai_instance> <target> <logical> <zpool name="rpool" is_root="true"> <filesystem name="export" mountpoint="/export"/> <filesystem name="export/home"/> <be name="solaris"/> </zpool> </logical> </target> <software type="IPS"> <source> <publisher name="solaris"> <origin name="http://pkg.oracle.com/solaris/release"/> </publisher> </source> <software_data action="install"> <name>pkg:/entire@latest</name> <name>pkg:/group/system/solaris-large-server</name> </software_data> </software> <configuration type="zone" name="zone1" source="file:///net/server_ip/export/zone_config/zone1"/> <configuration type="zone" name="zone2" source="file:///net/server_ip/export/zone_config/zone2"/> </ai_instance> </auto_install> The following example adds the /var/tmp/orig_default2.xml AI manifest to the s11x86service install service # installadm create-manifest -n s11x86service -f /var/tmp/orig_default2.xml -m gzmanifest
You can verify the manifest creation using the following command # installadm list -n s11x86service -m
Service/Manifest Name Status Criteria --------------------- ------ -------- s11x86service
orig_default Default None
gzmanifest Inactive None
We can see from the command output that the new manifest named gzmanifest has been created
and associated with the s11x86service install service. Step 5: Non Global Zone manifest setup
The AI manifest for non-global zone installation is similar to the AI manifest for installing the global zone.
If you do not provide a custom AI manifest for a non-global zone, the default AI manifest for Zones is used
The default AI manifest for Zones is available at /usr/share/auto_install/manifest/zone_default.xml.
In this example we should use the default AI manifest for zones
The following sample default AI manifest for zones # cat /usr/share/auto_install/manifest/zone_default.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. --> <!DOCTYPE auto_install SYSTEM "file:///usr/share/install/ai.dtd.1"> <auto_install> <ai_instance name="zone_default"> <target> <logical> <zpool name="rpool"> <!-- Subsequent <filesystem> entries instruct an installer to create following ZFS datasets: <root_pool>/export (mounted on /export) <root_pool>/export/home (mounted on /export/home) Those datasets are part of standard environment and should be always created. In rare cases, if there is a need to deploy a zone without these datasets, either comment out or remove <filesystem> entries. In such scenario, it has to be also assured that in case of non-interactive post-install configuration, creation of initial user account is disabled in related system configuration profile. Otherwise the installed zone would fail to boot. --> <filesystem name="export" mountpoint="/export"/> <filesystem name="export/home"/> <be name="solaris"> <options> <option name="compression" value="on"/> </options> </be> </zpool> </logical> </target> <software type="IPS"> <destination> <image> <!-- Specify locales to install --> <facet set="false">facet.locale.*</facet> <facet set="true">facet.locale.de</facet> <facet set="true">facet.locale.de_DE</facet> <facet set="true">facet.locale.en</facet> <facet set="true">facet.locale.en_US</facet> <facet set="true">facet.locale.es</facet> <facet set="true">facet.locale.es_ES</facet> <facet set="true">facet.locale.fr</facet> <facet set="true">facet.locale.fr_FR</facet> <facet set="true">facet.locale.it</facet> <facet set="true">facet.locale.it_IT</facet> <facet set="true">facet.locale.ja</facet> <facet set="true">facet.locale.ja_*</facet> <facet set="true">facet.locale.ko</facet> <facet set="true">facet.locale.ko_*</facet> <facet set="true">facet.locale.pt</facet> <facet set="true">facet.locale.pt_BR</facet> <facet set="true">facet.locale.zh</facet> <facet set="true">facet.locale.zh_CN</facet> <facet set="true">facet.locale.zh_TW</facet> </image> </destination> <software_data action="install"> <name>pkg:/group/system/solaris-small-server</name> </software_data> </software> </ai_instance> </auto_install>
(optional) We can customize the default AI manifest for Zones
Create a backup copy of this file under a different name, for example, zone_default2.xml and edit the copy # cp /usr/share/auto_install/manifest/zone_default.xml /var/tmp/zone_default2.xml
Edit the copy (/var/tmp/zone_default2.xml)
The following example adds the /var/tmp/zone_default2.xml AI manifest to
the s11x86service install service and specifies that zone1 and zone2
should use this manifest. # installadm create-manifest -n s11x86service -f /var/tmp/zone_default2.xml -m zones_manifest -c zonename="zone1 zone2" Note: Do not use the following elements or attributes in a non-global zone AI manifest:
The auto_reboot attribute of the ai_instance element
The http_proxy attribute of the ai_instance element
The disk child element of the target element
The noswap attribute of the logical element
The nodump attribute of the logical element
The configuration element
Step 6: Global Zone profile setup
We are going to create a global zone configuration profile which
includes the host information for example: host name, ip address name
services etc… # sysconfig create-profile –o /var/tmp/gz_profile.xml You need to provide the host information for example:
Default router
Root password
DNS information
The output should eventually disappear and be replaced by the initial
screen of the System Configuration Tool (see Figure 2), where you can do
the final configuration. Figure 2. Profile creation menu You can validate the profile using the following command # installadm validate -n s11x86service –P /var/tmp/gz_profile.xml
Validating static profile gz_profile.xml... Passed
Next, instantiate a profile with the install service.
In our case, use the following syntax for doing this # installadm create-profile -n s11x86service -f /var/tmp/gz_profile.xml -p gz_profile You can verify profile creation using the following command # installadm list –n s11x86service -p
Service/Profile Name Criteria -------------------- -------- s11x86service
gz_profile None We can see that the gz_profie has been created and associated with the s11x86service
Install service. Step 7: Setup the Solaris Zones configuration profiles
The step should be similar to the Global zone profile creation on step 6 # sysconfig create-profile –o /var/tmp/zone1_profile.xml # sysconfig create-profile –o /var/tmp/zone2_profile.xml You can validate the profiles using the following command # installadm validate -n s11x86service -P /var/tmp/zone1_profile.xml
Validating static profile zone1_profile.xml... Passed # installadm validate -n s11x86service -P /var/tmp/zone2_profile.xml
Validating static profile zone2_profile.xml... Passed
Next, associate the profiles with the install service
The following example adds the zone1_profile.xml configuration profile
to the s11x86service install service and specifies that zone1 should
use this profile. # installadm create-profile -n s11x86service -f /var/tmp/zone1_profile.xml -p zone1_profile -c zonename=zone1
The following example adds the zone2_profile.xml configuration profile
to the s11x86service install service and specifies that zone2 should
use this profile. # installadm create-profile -n s11x86service -f /var/tmp/zone2_profile.xml -p zone2_profile -c zonename=zone2
You can verify the profiles creation using the following command # installadm list -n s11x86service -p
Service/Profile Name Criteria -------------------- -------- s11x86service
zone1_profile zonename = zone1
zone2_profile zonename = zone2
gz_profile None
We can see that we have three profiles in the s11x86service install service
Global Zone gz_profile
zone1 zone1_profile
zone2 zone2_profile. Step 8: Global Zone setup
Associate the global zone client with the manifest and the profile that we create in the previous steps
The following example adds the manifest and profile to the client (global zone), where:
gzmanifest is the name of the manifest.
gz_profile is the name of the configuration profile.
mac="0:14:4f:2:a:19" is the client (global zone) mac address
s11x86service is the install service name.
# installadm set-criteria -m gzmanifest –p gz_profile -c mac="0:14:4f:2:a:19" -n s11x86service
You can verify the manifest and profile association using the following command # installadm list -n s11x86service -p -m
Service/Manifest Name Status Criteria --------------------- ------ -------- s11x86service
gzmanifest mac = 00:14:4F:02:0A:19
orig_default Default None
Service/Profile Name Criteria -------------------- -------- s11x86service
gz_profile mac = 00:14:4F:02:0A:19
zone2_profile zonename = zone2
zone1_profile zonename = zone1 Step 9: Provision the host with the Non-Global Zones
The next step is to boot the client system off the network and provision
it using the Automated Install service that we just set up. First, boot the client system. Figure 3 shows the network boot attempt (when done on an x86 system): Figure 3. Network Boot
Then you will be prompted by a GRUB menu, with a timer, as shown in
Figure 4. The default selection (the "Text Installer and command line"
option) is highlighted. Press the down arrow to highlight the second option labeled Automated Install, and then press Enter.
The reason we need to do this is because we want to prevent a system
from being automatically re-installed if it were to be booted from the
network accidentally. Figure 4. GRUB Menu
What follows is the continuation of a networked boot from the Automated
Install server,. The client downloads a mini-root (a small set of files
in which to successfully run the installer), identifies the location of
the Automated Install manifest on the network, retrieves that manifest,
and then processes it to identify the address of the IPS repository from
which to obtain the desired software payload.
Non-Global Zones are installed and configured on the first reboot after the Global Zone is installed.
You can list all the Solaris Zones status using the following command # zoneadm list -civ
Once the Zones are in running state you can login into the Zone using the following command # zlogin –z zone1 Troubleshooting Automated Installations
If an installation to a client system failed, you can find the client log at /system/volatile/install_log. NOTE: Zones are not installed if any of the following errors occurs:
A zone config file is not syntactically correct.
A collision exists among zone names, zone paths, or delegated ZFS datasets in the set of zones to be installed
Required datasets are not configured in the global zone.
For more troubleshooting information see “Installing Oracle Solaris 11 Systems”
Conclusion
This paper demonstrated the benefits of using the Automated Install
server to simplify the Non Global Zones setup, including the creation
and configuration of the global zone manifest and the Solaris Zones
profiles.