SmartOS Tips


運用してるのでナレッジのメモ

# パッケージ管理

pkgin コマンドを導入する
http://wiki.smartos.org/display/DOC/Installing+pkgin 

```bash
# cd /
# curl -k http://pkgsrc.joyent.com/sdc6/2012Q2/x86_64/bootstrap.tar.gz | gzcat | tar -xf -
# pkg_admin rebuild
# pkgin -y up
```

## munin 導入

この方法たぶん外道
Global zone にいれるためには pkgin からの munin インストールじゃだめ（munin ユーザ追加できないから）
perl, cpans, gmake があれば OK

```bash
# pkgin in gmake perl
# ln -s /opt/local/bin/gmake /opt/local/bin/make
# cpan HTML::Template Log::Log4perl Net::Server Net::Server::Fork Net::CIDR
```

munin 最新版おとしてくる

```bash
# mkdir -p /opt/local/src
# cd /opt/local/src
# wget http://sourceforge.net/projects/munin/files/latest/download?source=files
# tar zxvf munin-2.0.11.1.tar.gz
# cd munin-2.0.11.1
```

Makefile.config を少し書き換え

```bash
#
# the base of the Munin installation.
#
PREFIX     = /opt/local
 
 
# Where Munin keeps its configurations (server.conf, client.conf, ++)
CONFDIR    = /opt/local/etc/munin
 
# Where to put internal binaries and plugin repository
LIBDIR     = $(PREFIX)/lib/munin
 
# Location of PID files and other statefiles. On the server, must be
# writable by the user "munin".
STATEDIR   = $(DESTDIR)/var/run
 
# User to run munin as
USER       := root
GROUP      := root
 
# Default user to run the plugins as
PLUGINUSER := root
 
 
# Default user to run the cgi as
CGIUSER := root
 
# bash にしないと各 plugin が local 組み込み関数を使えなくてエラーログはきまくる（一応動くけどきもちわるい）
#GOODSH     := $(shell PATH=`getconf PATH 2>/dev/null || echo $(PATH)` LANG=C sh -c 'type sh | sed "s/.* //"')
GOODSH      := /bin/bash
```

make してインストールと初期設定

```bash
# make
# make install-common-prime install-node-prime install-plugins-prime
# vi /opt/local/etc/munin/munin-node.conf
    # set access controls
# munin-node-configure --shell | sh -x
```

svnadm 用にファイル準備

```bash
# mkdir -p /opt/custom/smf
# cat /opt/custom/smf/munin-node.xml
 
<?xml version='1.0'?>
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
<service_bundle type='manifest' name='export'>
  <service name='network/munin-node' type='service' version='0'>
    <create_default_instance enabled='true'/>
    <single_instance/>
    <exec_method name='start' type='method' exec='/opt/local/sbin/munin-node' timeout_seconds='0'>
      <method_context/>
    </exec_method>
    <exec_method name='stop' type='method' exec=':kill' timeout_seconds='0'>
      <method_context/>
    </exec_method>
  </service>
</service_bundle>
```

あとは取り込んでサービス化

```bash
# svccfg -v import /opt/custom/smf/munin-node.xml
svccfg: Taking "initial" snapshot for svc:/network/munin-node:default.
svccfg: Taking "last-import" snapshot for svc:/network/munin-node:default.
svccfg: Refreshed svc:/network/munin-node:default.
svccfg: Successful import.
 
# svcadm disable network/munin-node
# svcadm enable network/munin-node
```

thanks 

- https://github.com/scalp42/munin-node-smartos/blob/master/munin-node-install.sh
- http://serverfault.com/questions/461817/how-to-run-munin-node-on-smartos-global-zone 

### プラグイン

disk, memory 監視は munin-exchange から拾ってきたやつつかう

```bash
# cd /opt/local/lib/munin/plugins
# curl --insecure -O https://raw.github.com/munin-monitoring/contrib/master/plugins/zfs/zfs_usage_
# curl --insecure -O https://raw.github.com/munin-monitoring/contrib/master/plugins/system/solaris-memstat
 
# chmod +x /opt/local/lib/munin/plugins/zfs_usage_ 
# chmod +x /opt/local/lib/munin/plugins/solaris-memstat
 
# cd /opt/local/etc/munin/plugins
 
# ln -s /opt/local/lib/munin/plugins/zfs_usage_ zfs_usage_zones
# ln -s /opt/local/lib/munin/plugins/solaris-memstat solaris-memstat
```

# ゲストの IP 変更

普通にゲスト OS 内の IP 設定を変更しただけではだめ。

```bash
# vmadm get XXXXXXXXXXXXXXXXXX | json nics
# cat updatenic.json
{
    "update_nics": [
        {
            "mac": "XXXXXXXXXXXXXX",
            "ip": "XXX.XXX.XXX.XXX"
        }
    ]
} 
# cat updatenic.json |  vmadm update XXXXX
```

thanks http://wiki.smartos.org/display/DOC/Using+vmadm+to+manage+virtual+machines


# コマンドメモ

Linux とちょっと違うので

| 用途 | 例 | 補足 |
|---|---|---|
| システムを落とす | shutdown -y -g0 -i5 | -g = 実施ディレイ秒, -i = ランレベル（5だと落とす） |
| ifconfig	| dladm show-phys	| Link Aggregation もこれでやるっぽい |
| top | prstat	 | |
| 設定値更新 | vmadm update <UUID> property=value ... | |


# ディスクのリサイズ

zfs のボリュームサイズを拡張して、gparted の live cd たちあげてリサイズという流れ
 
```bash
# TARGET=47d4ee79-fa6f-499f-afd8-5c6ff0fff05e
 
 
# zfs get volsize zones/${TARGET}-disk0
# zfs set volsize=80g zones/${TARGET}-disk0
# zfs get volsize zones/${TARGET}-disk0
 
 
# curl -L -o gparted-live-0.14.1-6.iso http://downloads.sourceforge.net/project/gparted/gparted-live-stable/0.14.1-6/gparted-live-0.14.1-6-i486.iso?r=http%3A%2F%2Fgparted.sourceforge.net%2Fdownload.php&ts=1356867356&use_mirror=jaist
# cp gparted-live-0.14.1-6.iso /zones/${TARGET}/root/
 
# vmadm boot ${TARGET} order=cd,once=d cdrom=/gparted-live-0.14.1-6.iso,ide
# vmadm info ${TARGET} vnc
```


# VM マイグレーション

移行元でスナップショットをとって転送

```bash
zfs snapshot -r zones/${UUID}@migration
zfs snapshot -r zones/${UUID}-disk0@migration
zfs send -R zones/${UUID}@migration  | ssh root@192.168.0.100 zfs recv zones/${UUID}
zfs send -R zones/${UUID}-disk0@migration  | ssh root@192.168.0.100 zfs recv zones/${UUID}-disk0
scp /etc/zones/${UUID}.xml root@192.168.0.100:/etc/zones/
```

移行先で vm リストに追加

```bash
# echo "${UUID}:installed:/zones/${UUID}:${UUID}" >> /etc/zones/index
# vmadm boot ${UUID}
```

移行元を後始末

```bash
# vi /etc/zones/index // リストから消す
# zfs destroy -r zones/${UUID}
# zfs destroy -r zones/${UUID}-disk0
```

頻繁にマイグレを行う場合はスナップショットの取り扱いに注意
誤って古いもので上書きしてしまう恐れ有り

# 初期ブートから VNC 接続まで

zones の ${UUID}/root/ 配下に ISO こぴーしてから boot & vnc ポート確認

```bash
# vmadm boot ${UUID} order=cd,once=d cdrom=/CentOS-6.3-x86_64-minimal.iso,ide
# vmadm show vnc
```

外からやってるときは OSX のローカルから SSH ポートフォワーディングつくって接続

```bash
% ssh -l ${UNAME} -L ${LOCAL_PORT}:${HOST_MACHINE}:${VM_PORT} -i ${KEY} ${DOMAIN}
```


# USB Key のアップデート

何からの OS で USB キーをマウントして、内部の Platform ディレクトリを最新イメージ内の Platform と入れ替えれば OK

https://download.joyent.com/pub/iso/


# mDNSResponder がエラーをはく

コンソールに出てることがあるが無視していい。

```
mDNSResponder: [ID 702911 daemon.error] ERROR: getOptRdata - unknown opt 4
```

```
a) safely ignore these
b) disable multicast dns with "svcadm disable dns/multicast:default"
=85 this is iPhones and iPads and other apple (Bonjour) devices on your 
network waking up and going to sleep all the time, probably.
"Option 4" is bonjour sleep protocol, saying "i'm going to sleep now for a 
bit.  If you really need me, please send a wake-on-lan packet, ok?"  It's 
relatively new, and specific, and a lot of devices running "stock" 
multicast zeroconf dns services don't know about "option 4."
http://www.kdump.cn/forums/viewtopic.php?id=561
```