Solaris11 Zones

zone を作ってみます。 まずZFSのpoolは先日このように用意しておきました。mypoolの下にzoneを2つ作ってみます。

(いまのところネットワークがうまく繋がっていないです。IPMPと併用するとうまくいかないのか、他の理由なのか…)

root@solaris:~# zpool list
NAME     SIZE  ALLOC   FREE  CAP  DEDUP  HEALTH  ALTROOT
mypool  19.9G   124K  19.9G   0%  1.00x  ONLINE  -
rpool   15.6G  4.87G  10.8G  31%  1.00x  ONLINE  -

zfs create で領域を作ります。

root@solaris:~# zfs create mypool/zone1
root@solaris:~# zfs create mypool/zone2

zonecfg で zone を作ってみます。

root@solaris:~# zonecfg -z zone1
Use 'create' to begin configuring a new zone.
zonecfg:zone1> create
create: Using system default template 'SYSdefault'
zonecfg:zone1> set zonepath=/mypool/zone1
zonecfg:zone1> verify
zonecfg:zone1> commit
zonecfg:zone1> exit
root@solaris:~# 

zone2 も同様に作りました。

root@solaris:~# zoneadm list -cv
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   - zone1            configured  /mypool/zone1                solaris    excl  
   - zone2            configured  /mypool/zone2                solaris    excl 

install してみます。pkg.oracle.com からパッケージを取ってくるので時間がかかります。頻繁にやるならローカルに立てたほうがいいでしょう。立て方は公式ドキュメントの Oracle Solaris 11 パッケージリポジトリのコピーおよび作成 に書いてあります。今回は普通にインターネット経由で取得してきました。

root@solaris:~# zoneadm -z zone1 install
The following ZFS file system(s) have been created:
    mypool/zone1
Progress being logged to /var/log/zones/zoneadm.20150108T050021Z.zone1.install
       Image: Preparing at /mypool/zone1/root.

 Install Log: /system/volatile/install.10561/install_log
 AI Manifest: /tmp/manifest.xml.IeaOMu
  SC Profile: /usr/share/auto_install/sc_profiles/enable_sci.xml
    Zonename: zone1
Installation: Starting ...

        Creating IPS image
開始 リンクされたイメージ: 1/1 完了
        Installing packages from:
            solaris
                origin:  http://pkg.oracle.com/solaris/release/
ダウンロード                 パッケージ  ファイル  転送 (MB)  速度
database/berkeleydb-5                 40/282    5682/53275   42.2/351.9  120k/s
...
スピード検索データベースを作成しています      完了 
パッケージキャッシュを更新しています         1/1 
Installation: Succeeded

        Note: Man pages can be obtained by installing pkg:/system/manual

 done.

        Done: Installation completed in 1406.873 seconds.


  Next Steps: Boot the zone, then log into the zone console (zlogin -C)

              to complete the configuration process.

Log saved in non-global zone as /mypool/zone1/root/var/log/zones/zoneadm.20150108T050021Z.zone1.install
root@solaris:~# 
root@solaris:~# zoneadm list -vc
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   - zone1            installed   /mypool/zone1                solaris    excl  
   - zone2            configured  /mypool/zone2                solaris    excl 

もし失敗したらやり直します。(例)

root@solaris:~# zoneadm -z zone1 mark incomplete
root@solaris:~# zoneadm -z zone1 uninstall
root@solaris:~# zoneadm -z zone1 install

無事installが完了したら、起動することを確認してみます。

root@solaris:~# zoneadm -z zone1 boot
root@solaris:~# 

起動したらコンソールを取ります。

root@solaris:~# zlogin -C zone1
[Connected to zone 'zone1' console]

通常のSolaris11のインストール画面のような初期設定が終わると、ログインできるようになります。

Hostname: zone1

zone1 console login: 

一旦落とします。zlogin から抜けるには ~. です。ssh で global zone に入っているときは、~~. で抜けられます。

sugimura@zone1:~$ su -
Password: 
Jan  8 14:30:38 zone1 su: 'su root' succeeded for sugimura on /dev/console
Oracle Corporation      SunOS 5.11      11.2    June 2014
root@zone1:~# shutdown -i0 -g0 -y

Shutdown started.    Thu Jan  8 14:30:44 JST 2015
~.
[Connection to zone 'zone1' console closed]

zone1をzone2にコピーしてみます。zone2 は zone1 の clone ですよと指定するんですね。

root@solaris:~# zoneadm -z zone2 clone zone1
/mypool/zone2 must not be group readable.
/mypool/zone2 must not be group executable.
/mypool/zone2 must not be world readable.
/mypool/zone2 must not be world executable.
changing zonepath permissions to 0700.
Progress being logged to /var/log/zones/zoneadm.20150108T053529Z.zone2.clone
Log saved in non-global zone as /mypool/zone2/root/var/log/zones/zoneadm.20150108T053529Z.zone2.clone
root@solaris:~# 
root@solaris:~# zoneadm list -vc
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   - zone1            installed   /mypool/zone1                solaris    excl  
   - zone2            installed   /mypool/zone2                solaris    excl  
root@solaris:~# 

これで2つのzoneをそれぞれ使えるようになりました。両方起動すると次のようになります。

root@solaris:~# zoneadm list -vc
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   3 zone1            running     /mypool/zone1                solaris    excl  
   4 zone2            running     /mypool/zone2                solaris    excl 

引き続きこの環境でいろいろ実験していきます。

(参考文献)