Solaris11

IPMPを除去してやり直し。

root@solaris:~# dladm show-phys
LINK              MEDIA                STATE      SPEED  DUPLEX    DEVICE
net0              Ethernet             up         1000   full      e1000g0
net1              Ethernet             up         1000   full      e1000g1
root@solaris:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
net0/v4           static   ok           192.168.0.220/24
lo0/v6            static   ok           ::1/128

zoneも一旦削除。消したり作ったりを繰り返すと勉強になりますね。

root@solaris:~# zonecfg -z zone1 delete 
Are you sure you want to delete zone zone1 (y/[n])? y
root@solaris:~# zonecfg -z zone2 delete 
Are you sure you want to delete zone zone2 (y/[n])? y
root@solaris:~# zoneadm list -vc
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
root@solaris:~# 

これでインストール直後の状態に戻ったので、再度zoneを作り直し。作る方法はすでに書いた通りです。

root@solaris:~# zoneadm -z zone1 install
root@solaris:~# zoneadm -z zone2 clone zone1
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:~# zoneadm boot -z zone1
root@solaris:~# zoneadm boot -z zone2
root@solaris:~# zoneadm list -vc
  ID NAME             STATUS      PATH                         BRAND      IP    
   0 global           running     /                            solaris    shared
   2 zone1            running     /mypool/zone1                solaris    excl  
   3 zone2            running     /mypool/zone2                solaris    excl 

起動できたのでconsoleからログインし、それぞれにIPアドレスを振っておきます。

root@solaris:~# zlogin -C zone1
...
  • global: 192.168.0.220/24
  • zone1: 192.168.0.221/24
  • zone2: 192.168.0.222/24

一応できましたが、zone1やzone2からインターネットに出ることができずにいます。引き続き検証中。

pkg ほにゃらら でパッケージのインストールはできるようなのですが、どうもよくわかりません。中途半端ですがここらへんで一段落としようと思います。

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 

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

(参考文献)

 

Solaris11 IPMP

きょうはIPMPでもやってみますか。

まず2本NICを刺しておきます。起動したら両方ともDHCPでIPアドレスが振られてました。

root@solaris:~# dladm
LINK                CLASS     MTU    STATE    OVER
net0                phys      1500   up       --
net1                phys      1500   up       --
root@solaris:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
net0/v4           dhcp     ok           192.168.0.7/24
net1/v4           dhcp     ok           192.168.0.8/24
lo0/v6            static   ok           ::1/128
net0/v6           addrconf ok           fe80::20c:29ff:fe19:3f14/10
net0/v6           addrconf ok           2001:c90:8224:afe:20c:29ff:fe19:3f14/64
net1/v6           addrconf ok           fe80::20c:29ff:fe19:3f1e/10
net1/v6           addrconf ok           2001:c90:8224:afe:20c:29ff:fe19:3f1e/64
root@solaris:~# 

これらを link-based IPMP にして、IPアドレスを1つ付けるように変えてみます。

まずいま付いているIPアドレスを削除。

root@solaris:~# ipadm delete-addr net0/v4
root@solaris:~# ipadm delete-addr net1/v4
root@solaris:~# ipadm delete-addr net0/v6
root@solaris:~# ipadm delete-addr net1/v6
root@solaris:~# ipadm
NAME              CLASS/TYPE STATE        UNDER      ADDR
lo0               loopback   ok           --         --
   lo0/v4         static     ok           --         127.0.0.1/8
   lo0/v6         static     ok           --         ::1/128
net0              ip         down         --         --
net1              ip         down         --         --

次にIPMPインタフェースを作成します。

root@solaris:~# ipadm enable-if -t net0
root@solaris:~# ipadm enable-if -t net1
root@solaris:~# ipadm create-ipmp ipmp0
root@solaris:~# ipadm add-ipmp -i net0 -i net1 ipmp0
root@solaris:~# ipmpstat -g
GROUP       GROUPNAME   STATE     FDT       INTERFACES
ipmp0       ipmp0       ok        --        net1 net0
root@solaris:~# ipadm
NAME              CLASS/TYPE STATE        UNDER      ADDR
ipmp0             ipmp       down         --         --
lo0               loopback   ok           --         --
   lo0/v4         static     ok           --         127.0.0.1/8
   lo0/v6         static     ok           --         ::1/128
net0              ip         ok           ipmp0      --
net1              ip         ok           ipmp0      --

IPMPに対してIPアドレスを振ります。ここでは 192.168.0.220 にしました。

root@solaris:~# ipadm create-addr -T static -a 192.168.0.220/24 ipmp0/v4
root@solaris:~# ipadm
NAME              CLASS/TYPE STATE        UNDER      ADDR
ipmp0             ipmp       ok           --         --
   ipmp0/v4       static     ok           --         192.168.0.220/24
lo0               loopback   ok           --         --
   lo0/v4         static     ok           --         127.0.0.1/8
   lo0/v6         static     ok           --         ::1/128
net0              ip         ok           ipmp0      --
net1              ip         ok           ipmp0      --

いまは inbound に net0、outbound に net0 と net1 の両方が使われていることがわかります。

root@solaris:~# ipmpstat -a
ADDRESS                   STATE  GROUP       INBOUND     OUTBOUND
::                        down   ipmp0       --          --
192.168.0.220             up     ipmp0       net0        net1 net0

VMware で net0 を止めてみます。

IPMP

ssh で接続していたのですが、セッションが切れずに net1 だけが使われるようになりました。

root@solaris:~# ipmpstat -a
ADDRESS                   STATE  GROUP       INBOUND     OUTBOUND
::                        down   ipmp0       --          --
192.168.0.220             up     ipmp0       net1        net1

syslog には次のように記録されます。

Jan  7 15:56:27 solaris mac: [ID 486395 kern.info] NOTICE: e1000g0 link down
Jan  7 15:56:27 solaris in.mpathd[84]: [ID 215189 daemon.error] The link has gone down on net0
Jan  7 15:56:27 solaris in.mpathd[84]: [ID 968981 daemon.error] IP interface failure detected on net0 of group ipmp0

戻しておきます。接続復旧時の syslog はこんな感じ。

Jan  7 16:00:17 solaris mac: [ID 435574 kern.info] NOTICE: e1000g0 link up, 1000 Mbps, full duplex
Jan  7 16:00:17 solaris in.mpathd[84]: [ID 820239 daemon.error] The link has come up on net0

(参考文献)

 

(補足)

そのままでは外に出ないようになっていました。

root@solaris:~# netstat -r

Routing Table: IPv4
  Destination           Gateway           Flags  Ref     Use     Interface 
-------------------- -------------------- ----- ----- ---------- --------- 
solaris              solaris              UH        2       2868 lo0       
192.168.0.0          192.168.0.220        U         3       1818 ipmp0     

Routing Table: IPv6
(略)

デフォルトゲートウェイを追加しておきます。

root@solaris:~# route -p add default 192.168.0.1
add net default: gateway 192.168.0.1
add persistent net default: gateway 192.168.0.1
root@solaris:~# netstat -r

Routing Table: IPv4
  Destination           Gateway           Flags  Ref     Use     Interface 
-------------------- -------------------- ----- ----- ---------- --------- 
default              192.168.0.1          UG        1          0           
solaris              solaris              UH        2       2892 lo0       
192.168.0.0          192.168.0.220        U         3       2079 ipmp0 

外には出ることができるようになりましたが、名前が引けないので設定しておきます。

root@solaris:~# svccfg -s svc:/network/dns/client setprop \
> config/nameserver=net_address: '(192.168.0.1)'
root@solaris:~#
root@solaris:~# svccfg -s svc:/network/dns/client listprop config
config                      application        
config/value_authorization astring     solaris.smf.value.name-service.dns.client
config/nameserver          net_address 192.168.0.1
root@solaris:~# svcadm refresh svc:/network/dns/client
root@solaris:~#

これで名前も引けるようになりました。

root@solaris:~# ping sugimura.cc
sugimura.cc is alive

 

Solaris11

久しぶりにちょっとやる気が出てきたということで、VMware Fusion 上で Solaris11.2 を入れてみました。

root@solaris:~# uname -a
SunOS solaris 5.11 11.2 i86pc i386 i86pc

ディスクを追加して実験用にzoneを作って遊ぼうと思ってます。

root@solaris:~# format 
Searching for disks...done


AVAILABLE DISK SELECTIONS:
       0. c2t0d0 
          /pci@0,0/pci15ad,1976@10/sd@0,0
       1. c2t1d0 
          /pci@0,0/pci15ad,1976@10/sd@1,0
Specify disk (enter its number): (以下略)

zfs の pool として作成。

root@solaris:~# zpool create mypool /dev/dsk/c2t1d0
root@solaris:~# zpool list
NAME     SIZE  ALLOC   FREE  CAP  DEDUP  HEALTH  ALTROOT
mypool  19.9G   112K  19.9G   0%  1.00x  ONLINE  -
rpool   15.6G  4.85G  10.8G  31%  1.00x  ONLINE  -
root@solaris:~# 

このmypoolから切り出してzoneを作っていく予定です。今回はここまで。