SmartOSをUpdateする（VMware Playerの場合）

「[SmartOSをVMware Playerで動かす](http://qiita.com/kutsushitaneko/items/de7b1dd62be8efeac618)」の後、JoyentからSmartOSの新しいバージョン20150417T032220Zが出ています。

「[SmartOSのLX Branded Zone（Linuxコンテナ）を動かす](http://qiita.com/kutsushitaneko/items/7216237d5929e0f715db)」では、20150403T203920ZでLX Branded Zoneを動かしてみましたが、現在、Joyentのイメージソースに上がっているLX Branded Zoneイメージの動作条件は、20150417T032220Z以上になっているようです。そこで、「[SmartOSをVMware Playerで動かす](http://qiita.com/kutsushitaneko/items/de7b1dd62be8efeac618)」で作った環境を20150417T032220Zにupdateしてみました（と書いていたら、投稿前に**さらに20150423T155306Zが出ていました**ので、最終的には20150423T155306Zにupdateしましたが、下記の手順中ではバージョン名は、20150417T032220Zとなっています。20150423T155306Zでも手順は全く同じです）。

SmartOSは、ブートディスクから起動された後は、ramdisk上で稼働し、Global Zoneでの変更はブートディスクへ書き出されることはありません。そのため、Solaris11でSRUを当てるような方法ではupdateできません。また、基本的にはブートディスクの platform ディレクトリ下を新しいバージョンのファイルに入れ替えればupdateは完了ですが、ramdiskであるため、SmartOS稼働中に単純に platform ディレクトリをコピーしても再起動すると消えてしまいます。

そこで、VMware Player上で稼働している SmartOS仮想マシンの場合は、仮想マシンイメージの中のOSイメージを直接updateすることになります。

今回は、既存の環境を間違って壊したくなかったので、クローンを作って以下の手順でupdateしました。石橋を叩かないのであれば、いきなり2.,3.でもOKです。

1.仮想マシンのクローンを作成する
2.Joyentから最新のVMware Fusion用仮想マシンイメージをダウンロード
3.smartos.imgファイルをコピー
4.仮想マシンを起動

#詳細手順
##1.仮想マシンのクローンを作成する
VMware Playerには、クローン機能がありませんので、手作業でクローンを作成する必要があります。
###A.仮想マシンディレクトリをコピーする
仮想マシンディレクトリを丸ごとコピーして、ディレクトリ名を適切なものにします（例：SmartOS-20150417T032339Z.vmwarevm）。

###B.仮想マシンを開く
VMware Playerで、「仮想マシンを開く（O）」をクリックしてます。

![image](https://qiita-image-store.s3.amazonaws.com/0/74534/9c581824-3fce-5bdc-a1a7-e0c7d0bc3364.png)


Aでコピーしたディレクトリを開いて、「SmartOS.vmx」というファイルを開きます。ライブラリに「SmartOS」がもう一つ追加されます。

![image](https://qiita-image-store.s3.amazonaws.com/0/74534/2af36100-2363-28e8-3ddd-f2b5cb5d2394.png)

###C.仮想マシンの名前を変更します。
元の仮想マシンと同じ名前だと紛らわしいので名前を変えておきます。

「仮想マシン設定の編集（D）」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/74534/a15a92df-7755-3620-69f9-7fe750399be4.png)

「オプション」タブを選択します。
![image](https://qiita-image-store.s3.amazonaws.com/0/74534/14ea949a-e2e0-5f85-42ea-6a6e00486ba3.png)

「仮想マシン名（N）」を適当なものに変更しておきます。

![image](https://qiita-image-store.s3.amazonaws.com/0/74534/bdd5c859-029c-4e4d-f28c-3b20380f9ca5.png)

「OK」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/74534/37071a48-d6ea-29a3-0cde-0af4aa362d66.png)
###D.クローンを起動します。
「仮想マシンの再生（L）」をクリックします。下記ダイアログが表示されます。


![image](https://qiita-image-store.s3.amazonaws.com/0/74534/ce5e6e0c-c1b9-1c99-d420-55bd9280022e.png)

**「移動しました」**をクリックします。SmartOSが無事起動してクローン作成は完了です。
![image](https://qiita-image-store.s3.amazonaws.com/0/74534/7034ca20-6b3e-b10c-b2a5-a5a646b0f986.png)

なお、ここで、以前のSMFでHost名を設定したものが消えていたり、ネットワークアクセスできなくなっている場合は、上の「この仮想マシンは移動またはコピーされた可能性があります」のダイアログで「コピーしました」をクリックしてしまっています。仮想マシンディレクトリのコピーからやり直すか、`nictagadm update admin xx:xx:xx:xx:xx:xx` （ここで、xx:xx:xx:xx:xx:xxは、VMware Playerが割り当てた新しいMac Address）で、NIC tagの mac adressを修正して再起動します。

クローンができたら仮想マシンを poweroff します。

##2.Joyentから最新のVMware Fusion用仮想マシンイメージをダウンロードします。

[こちら](https://download.joyent.com/pub/iso/)の「Landing Page」というリンクからダウンロードすることをお勧めします。
同ページの「VMware Image」というリンクや、「[Download SmartOS](https://wiki.smartos.org/display/DOC/Download+SmartOS)」からでも良いのですが、これらのページからダウンロードするとファイル名の中でバージョンが「latest」となっているだけで、具体的にどのバージョンなのかわかりにくいためです。

##3.smartos.imgファイルをコピー

ダウンロードしたファイル"smartos-バージョン名.vmwarevm.tar.bz2"を解凍すると"SmartOS.vmwarevm"ディレクトリに"smartos.img"というファイルがあります。これを、1.で作ったクローンの仮想マシンディレクトリにコピーします（上書きします）。

##4.仮想マシンを起動

VMware Playerを起動します。

![image](https://qiita-image-store.s3.amazonaws.com/0/74534/ce11b24b-7a6e-38c2-5304-e875cf32465e.png)

「仮想マシンの再生（L）」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/74534/9d4f5001-ee1f-73eb-8c1d-982238aea836.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/74534/bb202e02-0a31-d82e-6c5b-5d122d6229bc.png)

20150417T032220Zで起動しました。

![image](https://qiita-image-store.s3.amazonaws.com/0/74534/e17f7740-17ad-f633-2228-243fa2dbf297.png)

`uname`でも確認しておきます。

```lang:
[root@smartos01 ~]# uname -a
SunOS smartos01 5.11 joyent_20150417T032339Z i86pc i386 i86pc
[root@smartos01 ~]#
```

これまでに作った仮想マシン（KVM VMのCentOS7.1とLX Branded Zone（Linuxコンテナ）のubuntu14.04）が動いているか確かめます。

```lang:
[root@smartos01 ~]# vmadm list
UUID                                  TYPE  RAM      STATE             ALIAS
a90640f4-0596-451e-8d6c-ad001d71f834  KVM   512      running           CentOS 7.1(1503) KVM
16b4155b-e996-41e1-bb87-25eb0f0934ff  LX    1024     running           lxubuntu 14.04
[root@smartos01 ~]#
```

KVM VMのCentOS7.1のコンソールログインしてみます。

```lang:
[root@smartos01 ~]# vmadm console a90640f4-0596-451e-8d6c-ad001d71f834

   __        .                   .
 _|  |_      | .-. .  . .-. :--. |-
|_    _|     ;|   ||  |(.-' |  | |
  |__|   `--'  `-' `;-| `-' '  ' `-'
                   /  ;  Instance (CentOS 7.1 (1503) 20150406)
                   `-'   https://docs.joyent.com/images/linux/centos

centos-7 login: root
Password:
Last login: Sun Apr 12 20:51:44 on ttyS0
   __        .                   .
 _|  |_      | .-. .  . .-. :--. |-
|_    _|     ;|   ||  |(.-' |  | |
  |__|   `--'  `-' `;-| `-' '  ' `-'
                   /  ;  Instance (CentOS 7.1 (1503) 20150406)
                   `-'   https://docs.joyent.com/images/linux/centos

[root@centos-7 ~]# uname -a
Linux centos-7 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@centos-7 ~]#
```

LX Branded Zone（Linuxコンテナ）のubuntu14.04にzloginでログインしてみます（その前にCtrl-]でKVM VMへのコンソールセッションを終了しておきます）。

```lang:
[root@smartos01 ~]# zlogin 16b4155b-e996-41e1-bb87-25eb0f0934ff
[Connected to zone '16b4155b-e996-41e1-bb87-25eb0f0934ff' pts/2]
Last login: Mon Apr 13 06:48:24 UTC 2015 from zone:global on pts/4
Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.13.0 x86_64)

 * Documentation:  https://help.ubuntu.com/
   __        .                   .
 _|  |_      | .-. .  . .-. :--. |-
|_    _|     ;|   ||  |(.-' |  | |
  |__|   `--'  `-' `;-| `-' '  ' `-'
                   /  ;  Instance (Ubuntu 14.04 LX Brand 20150320)
                   `-'   https://docs.joyent.com/images

root@16b4155b-e996-41e1-bb87-25eb0f0934ff:~# uname -a
Linux 16b4155b-e996-41e1-bb87-25eb0f0934ff 3.13.0 BrandZ virtual linux x86_64 x86_64 x86_64 GNU/Linux
root@16b4155b-e996-41e1-bb87-25eb0f0934ff:~# ls -l /boot
total 0
root@16b4155b-e996-41e1-bb87-25eb0f0934ff:~#
```

なお、LX Branded Zoneには、DHCPでIPアドレスを取得できないという既知の問題がありますが、これは、20150417T032339Z、20150423T155306Zでも修正されていませんでした（↓）。

```lang:
root@16b4155b-e996-41e1-bb87-25eb0f0934ff:~# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 92:37:26:45:2a:8c
          inet addr:0.0.0.0  Bcast:0.0.0.0  Mask:0.0.0.0
          inet6 addr: fe80::9037:26ff:fe45:2a8c/10 Scope:Link
          BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:81 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:8668 (8.6 KB)  TX bytes:930 (930.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Link
          UP LOOPBACK RUNNING MULTICAST  MTU:8232  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

root@16b4155b-e996-41e1-bb87-25eb0f0934ff:~#
```

`exit`で zlogin を終了します。