Cloning zones in Solaris 10 6/06

I’m in the process of setting up a machine to host several SAMP (Solaris-Apache-MySQL-PHP) containers. I decided that it would be very efficient to create a generic zone and clone it over and over again. From reading up on the subject it seemed more than possible, after all, what is a zone besides a config file and a filesystem?

I googled for “Cloning Solaris Zones” and found lots of documentation on the zoneadm clone feature. I started to follow the howtos and hit a brick wall… my zoneadm doesn’t know how to clone. Deeper digging shows that the documentation on Sun’s site was for Solaris Express- Sun’s bleeding edge version of OpenSolaris- Can I say “How useless!”

I continued to google, after all I was very close I have the configuration and the filesystem, I just need to connect the two. I found the zoneadm attach/detach commands. This sounds perfect to me but alas my zoneadm doesn’t support attach/detach. Apparently, this feature is only available from Solaris 11/06- Can someone tell me when Sun started releasing new OS versions every 6 months!

I had no intention of giving up and here is the process which evolved:

  1. Setup the “Gold Master” zone including all the services, users, passwords, etc. (I’m assuming that your zonepath is a ZFS filesystem- this has it’s pluses and minuses so don’t take my word on it.)
  2. Halt the Master zone and export the config file to your zone template file:
    > zoneadm -z master halt
    > zonecfg -z master export -f /root/template

  3. It should look something like this: (edit with values for new zone)
    > create -b
    > set zonepath=/zfszones/zoneclone
    > set autoboot=true
    > set pool=work1-pool
    > add inherit-pkg-dir
    > set dir=/lib
    > end
    > add inherit-pkg-dir
    > set dir=/platform
    > end
    > add inherit-pkg-dir
    > set dir=/sbin
    > end
    > add inherit-pkg-dir
    > set dir=/usr
    > end
    > add net
    > set address=
    > set physical=bge0
    > end
    > add rctl
    > set name=zone.cpu-shares
    > add value (priv=privileged,limit=10,action=none)
    > end

  4. Configure a new zone using the new config file:
    > zonecfg -z zoneclone -f zoneclone.cfg

  5. Create a ZFS snapshot of the master zone:
    > zfs snapshot zfspool/master@040207

  6. Clone the ZFS snapshot
    > zfs clone zfspool/master@040207 zfspool/zoneclone

  7. Mount the new ZFS filesystem at the correct zonepath
    > zfs setmountpoint=/zfszones/zoneclone/ zfspool/zoneclone

  8. Change the zone state to “installed” –WARNING: I have no idea if this is a good idea but it seems to work.
    > vi /etc/zones/index > > Find a line that looks like:
    > zoneclone:configured:/zfszones/zoneclone:0000003c-ffbf-f825-ffbf-f80001000000 > > Replace it with:
    > zoneclone:installed:/zfszones/zoneclone:0000003c-ffbf-f825-ffbf-f80001000000

  9. Boot the new zone:
    > zoneadm -z zoneclone boot

Yonah Russ

Yonah Russ
Production tested jack of all trades and master of some. Forgotten more than I remember, some of which is written here. Occasional BOFH but only because I care. KISS is Bliss!

Being a startup shouldn't mean starting from scratch

In an open retrospective, Eden Shochat, from Aleph VC, asks what they could do better to help the companies they invest in. I really appr...… Continue reading

Triton Bare Metal Containers FTW!

Published on June 22, 2015