Recently I was working on my OpenSolaris machine (file server, ZFS rocks, will
write more on that later), and I have one non-global zone, one that use for web
development, which is aptly called dev-web.
So the following shows up when I run zoneadm:
xistence@Keyhole.network.lan:~# zoneadm list -iv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
4 dev-web running /storage/zones/dev-web ipkg shared
The thing is, I had upgraded the global zone with the latest update available for the version (snv_101b):
This had not upgraded my one none-global zone. And running pkg image-update
from within the zone itself is not possible, because you can't do an upgrade on
a "live" system, mainly because the image-update wants to create a new bootable
environment, something that was already created when I upgraded the global
zone. So what we have to do is mount the non-global zone to /mnt and tell pkg
with -R where to find it and upgrade it anyway!
First we are going to halt the current zone, since I am mean and nothing
important is running on the test bed system, I just used:
However, the better way is to off course use the shutdown command:
and then for good measure a halt!
Next up, looking at what we are going to be mounting.
zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 11.9G 42.7G 75K /rpool
rpool/ROOT 2.93G 42.7G 18K legacy
rpool/ROOT/opensolaris 7.34M 42.7G 2.74G /
rpool/ROOT/opensolaris-1 2.92G 42.7G 2.74G /
rpool/dump 1.87G 42.7G 1.87G -
rpool/export 5.27G 42.7G 19K /export
rpool/export/home 5.27G 42.7G 21K /export/home
rpool/export/home/guest 5.24G 14.8G 5.24G /export/home/guest
rpool/export/home/xistence 37.0M 42.7G 37.0M /export/home/xistence
rpool/swap 1.87G 43.0G 1.51G -
storage 493G 3.08T 35.1K /storage
storage/media 398G 3.08T 398G /storage/media
storage/virtualbox 2.10G 3.08T 2.10G /storage/virtualbox
storage/xistence 91.7G 3.08T 91.7G /storage/xistence
storage/zones 957M 99.1G 30.4K /storage/zones
storage/zones/dev-web 957M 19.1G 32.0K /storage/zones/dev-web
storage/zones/dev-web/ROOT 957M 19.1G 28.8K legacy
storage/zones/dev-web/ROOT/zbe 1.60M 19.1G 936M legacy
storage/zones/dev-web/ROOT/zbe-1 955M 19.1G 935M legacy
When pkg image-update was run on the global zone it created a new bootable
environment named opensolaris-1, the cool thing is, that beadm at the same time
will also create a new bootable environment for your zones. That way you can
upgrade your zones afterwards, and if stuff does not work, you can revert the
ENTIRE machine back to the previous state (ZFS is cool like that), thereby also
making sure that your zones are reverted so that there are no
incompatibilities.
So what we are looking for in this case is a zbe-1, this is the new root for
the zone that we need to update, so we now need to mount it.
mount -F zfs storage/zones/dev-web/ROOT/zbe-1 /mnt
Note, that there is no / in front of storage, this is because we are specifying
a pool name, since there is no "real" path that is defined as
/storage/zones/dev-web/ROOT/zbe-1. Now that it is mounted, we are able to pass
the -R flag to pkg, to get it to update our zone:
xistence@Keyhole.network.lan:~# pkg -R /mnt image-update -v
Creating Plan / Before evaluation:
UNEVALUATED:
+pkg:/entire@0.5.11,5.11-0.101:20081204T010954Z
After evaluation:
pkg:/entire@0.5.11,5.11-0.101:20081119T235706Z -> pkg:/entire@0.5.11,5.11-0.101:20081204T010954Z
Actuators:
None
PHASE ACTIONS
Update Phase 1/1
PHASE ITEMS
Reading Existing Index 9/9
Indexing Packages 1/1
---------------------------------------------------------------------------
NOTE: Please review release notes posted at:
http://opensolaris.org/os/project/indiana/resources/relnotes/200811/x86/
---------------------------------------------------------------------------
Voilá, and the deed is done. The last command is to off course unmount the
zone, that we can then issue a zoneadm boot command to start it back up:
umount /mnt
zoneadm -z dev-web boot
And then on the zone after we log into it (over SSH in my case):
xistence@webdev.network.lan:~# pkg list -u
No installed packages have available updates
Which is exactly what we wanted! Your zone is now upgraded with the latest
version available from the global zone.