Solaris11 リリースおめでとう!!

だいぶ間があいちゃいましたが、とうとう Solaris11 がリリースされました。

私が Solaris の世界に足を踏み入れたきっかけは、ふだん扱うデータが多くて困ってたときに「いいファイルシステムないかなー」と 2ch を漁っていたところ、http://logsoku.com/thread/pc8.2ch.net/unix/1146631270/ というスレに出会ったことでした。

しかし ZFS はじめすごい便利な機能が盛りだくさんな OS なのに、 ksh とかキモくていやでたまりませんでした。しばらくして OpenSolaris に /usr/gnu/bin なディレクトリができたあたりから「やべえこれしかなくね」なんて思ってましたけど、業務で使うにはサポート契約などの関係でなかなか難しかった。

そんなガマン大会ももう終わりです。存分に新しい ZFS と暮らしやすいユーザランドで暮らすことができるようになりました。が、残念なこともあります。タダで業務に使える便利な OS ではなくなってしまったかもしれません。

さまざまな改善・変更点とか

Debian も Sarge が出るときに大変だったような気がしますが、次期バージョンのリリースまで時間がかかると、改善と共に変更も多く、移行も大変です。 ``the First Cloud OS'' なんて言ってるくらいで、ほんとに変わりました。

営業的な目玉や細かいところは Oracle の方がちゃんと営業活動をしてくださるので、 Transitioning From Oracle Solaris 10 to Oracle Solaris 11 から気になるところをピックアップしつつ、とりあえず触ってみたいけど live CD だと裏でいろいろやってくれすぎてよくわからん、という人向けに「私はこうやってインストールした」のメモを書いておきます。

とりあえずつかってみようの例

DebianSolaris10 ならなんとなくインストールできる人が、デスクトップなどではなくサーバ向けのセットアップをしたいときの例です。

インストール

まずは http://oracle.com/solaris11 からインストーラをダウンロードします。いくつか種類がありますが text install のイメージを使います。

インストーラで設定することはそんなに多くないですが、ポイントとしては以下。

  • 起動ディスク(?)は UFS ではなく ZFS になる
    • ミラー設定はあとでやります
  • ネットワークは ``Automatic'' ではなく ``None'' を選び、あとで手動で設定
  • タイムゾーンをちゃんと選びつつ、そのタイムゾーンでの時刻を設定
    • RTC は UTC になるようです。
  • インストール終了後 reboot すると一瞬インストーラがまた起動したように見えますが、おとなしく待ちます。
最初のログイン

インストール時に作ったアカウントでログインし、 su または sudo で作業をします。

  • root は role です
    • ubuntu と同じく、インストール時に作ったアカウントで sudo できます
    • pfexec のことはいったん忘れましょう
    • su - すると bash が起動します (!)
ネットワークまわりの設定

/etc にあるたくさんのファイルは、かなりのものが自動生成で SMF 管理に移行しました。

  • ホスト名
    • /etc/nodename は消えました
    • これはすでにインストーラが設定してくれます
root@oscar:~# svccfg -s svc:/system/identity:node describe config
config           application        
    Properties that control the configuration of the node
config/nodename astring     oscar
    Network name of the computer
config/loopback astring     oscar
    Hostname mapped to loopback
root@oscar:~# svccfg -s svc:/system/identity:node listcust
config/loopback                                 astring     admin                 oscar
general/enabled                                 boolean     admin                 true
  • ホスト名を変える場合
    • 以下で "# setprop config/nodename = astring: oscar" の # (コメント) を外し、astring: 以降を編集します
root@oscar:~# svccfg -s svc:/system/identity:node editprop
  • 編集を反映するには、以下のようなかんじで試せばどれか当たるはず
root@oscar:~# svccfg -s svc:/system/identity:node validate
root@oscar:~# svccfg -s svc:/system/identity:node refresh
root@oscar:~# svcadm refresh svc:/system/identity:node
root@oscar:~# svcadm restart svc:/system/identity:node
  • NIC の設定
    • /etc/hostname.* も消えました
    • ifconfig は存在しますが使いません (linux なら ip addr show だよね的な)
    • dladm (datalink adm) と ipadm (IP adm) を使います
    • e1000g0 ではなく net0 みたいな名前をふだん使うようになりました
  • NIC 一覧
    • e1000g ドライバで認識された device e1000g0 が link net0 と認識されている
    • vlan, link aggregation, vnic なども dladm の範疇です
root@oscar:~# dladm show-phys
LINK              MEDIA                STATE      SPEED  DUPLEX    DEVICE
net0              Ethernet             up         1000   full      e1000g0
root@oscar:~# dladm show-ether
LINK              PTYPE    STATE    AUTO  SPEED-DUPLEX                    PAUSE
net0              current  up       yes   1G-f                            bi
root@oscar:~# dladm show-link 
LINK                CLASS     MTU    STATE    OVER
net0                phys      1500   up       --
  • IP 設定
    • create-ip が ifconfig plumb 相当
    • -ip なんだか -if なんだかは紛らわしい
root@oscar:~# ipadm show-if
IFNAME     CLASS    STATE    ACTIVE OVER
lo0        loopback ok       yes    --
root@oscar:~# ipadm create-ip net0
root@oscar:~# ipadm show-if
IFNAME     CLASS    STATE    ACTIVE OVER
lo0        loopback ok       yes    --
net0       ip       down     yes    --
  • IP address 設定
    • net0 という link に IPv4 のアドレス 192.168.1.10/255.255.255.0 を設定します
root@oscar:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
lo0/v6            static   ok           ::1/128
root@oscar:~# ipadm create-addr -T static -a 192.168.1.100/24 net0/v4
root@oscar:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
net0/v4           static   ok           192.168.1.100/24
lo0/v6            static   ok           ::1/128
  • default route 設定
    • ここは今まで通りのようです
root@oscar:~# route -p add default 192.168.1.1
  • NSS 設定
    • /etc/inet/hosts は存在しますが /etc/hostname.* がないので、あまり書くことはないかも。
    • /etc/resolv.conf, /etc/nsswitch.conf も存在しますが自動生成されるので手で編集してはいけません
  • resolv.conf に server 192.168.1.1 を設定する相当
    • ほぼドキュメント通りに丁寧に書くと以下のようなかんじ。
    • 最初は config/nameserver というエントリが無いので、ホスト名みたく editprop とはちょっと変わります
root@oscar:~# svccfg -s svc:/network/dns/client
svc:/network/dns/client> setprop config/nameserver = net_address: 127.0.0.1
svc:/network/dns/client> select dns/client:default
svc:/network/dns/client:default> refresh
svc:/network/dns/client:default> validate
svc:/network/dns/client:default> quit
  • nsswitch.conf に dns を設定する相当
root@oscar:~# svccfg -s svc:/system/name-service/switch
svc:/system/name-service/switch> setprop config/host = astring: "files dns mdns"
svc:/system/name-service/switch> select system/name-service/switch:default
svc:/system/name-service/switch:default> refresh
svc:/system/name-service/switch:default> validate
svc:/system/name-service/switch:default> quit
  • ついでに mdns も有効にしちゃう
    • ちなみに "svc:/network/" は部分一致で省略できます
root@oscar:~# svcadm enable svc:/network/dns/multicast
  • なお nwam という言葉をご存じの方は、もうこの名前は使わなくなったと考えて下さい
    • svcs -a | grep nwam で出てくるやつはダミーです
ブートディスクをミラー設定
  • ブートディスクは EFI ラベルじゃなくて SMI ラベルが必要です
    • 簡単にいえば同じフォーマットされてないとダメってこと
  • ミラー追加
    • うまくいったかは zpool status -lv とかで見てみてください
root@oscar:~# format -L vtoc c4t1d0
Searching for disks...done
selecting c4t1d0
[disk formatted]
c4t1d0 is labeled with VTOC successfully.
root@oscar:~# prtvtoc /dev/rdsk/c4t0d0s2 | fmthard -s - /dev/rdsk/c4t1d0s2
fmthard: Partition 2 specifies the full disk and is not equal
full size of disk.  The full disk capacity is 33511590 sectors.
fmthard: Partition 2 specified as 33511590 sectors starting at 0
        does not fit. The full disk contains 33511590 sectors.
fmthard:  New volume table of contents now in place.
root@oscar:~# zpool attach -f rpool c4t0d0s0 c4t1d0s0
Make sure to wait until resilver is done before rebooting.


再起動あたり
  • x86 なら grub で起動します
    • menu.lst は /rpool/boot/grub/menu.lst にあります
kernel$ /platform/i86pc/kernel/amd64/unix -B $ZFS-BOOTFS,console=force-text
  • デフォルトで fast reboot というのが有効になっています
    • たんに sudo reboot すると BIOS 画面を飛ばしてすぐに reboot になります
    • 変えるときは svccfg -s boot-config:default editprop で config/fastreboot_default を編集
    • refresh 忘れずに

で、 shutdown なのか init なのか halt なのか。みたかんじ poweroff と reboot でよさそうですね。

エラー検知

Solaris10 時代からそうですが FMA (Fault Manager?) という仕組みがあって、たいていの OS 的エラーはこれで検知できます。

  • つかうコマンド
    • fmadm faulty, fmdump, fmdump -e
    • とりあえず打ってみてなんか出たら残念でした
  • 検知したエラーを通知
    • 以下コマンドで何か見つかったときに root 宛てにメールが来ます
    • problem-diagnosed 以外にも updated, repaired, resolved とかがあります
root@oscar:~# svccfg setnotify problem-diagnosed mailto:active
  • メールの例
    • kernel panic で自動的に reboot してた場合に来たメールです
Date: Sat, 10 Dec 2011 18:47:50 +0900 (JST)
From: No Access User <noaccess@localhost.localdomain>
X-FMEV-HOSTNAME: oscar
X-FMEV-CLASS: list.suspect
X-FMEV-UUID: a7085088-582a-4aef-bf74-9d0d5cf3818d
X-FMEV-CODE: SUNOS-8000-KL
X-FMEV-SEVERITY: Major
Subject: Fault Management Event: oscar:SUNOS-8000-KL
To: root@localhost.localdomain

SUNW-MSG-ID: SUNOS-8000-KL, TYPE: Defect, VER: 1, SEVERITY: Major
EVENT-TIME: Sat Dec 10 18:47:50 JST 2011
PLATFORM: i86pc, CSN: -, HOSTNAME: oscar
SOURCE: software-diagnosis, REV: 0.1
EVENT-ID: a7085088-582a-4aef-bf74-9d0d5cf3818d
DESC: The system has rebooted after a kernel panic.
AUTO-RESPONSE: The failed system image was dumped to the dump device.  If savecore is enabled (see dumpadm(1M)) a copy of the dump will be written to the savecore directory /var/crash.
IMPACT: There may be some performance impact while the panic is copied to the savecore directory.  Disk space usage by panics can be substantial.
REC-ACTION: Use 'fmadm faulty' to provide a more detailed view of this event. If savecore is not enabled then please take steps to preserve the crash image. Use 'fmdump -Vp -u a7085088-582a-4aef-bf74-9d0d5cf3818d' to view more panic detail. Please refer to the associated reference document at http://sun.com/msg/SUNOS-8000-KL for the latest service procedures and policies regarding this diagnosis.
ichii386@oscar% fmdump -Vp -u a7085088-582a-4aef-bf74-9d0d5cf3818d
TIME                           UUID                                 SUNW-MSG-ID
Dec 10 2011 18:47:50.083117000 a7085088-582a-4aef-bf74-9d0d5cf3818d SUNOS-8000-KL

  TIME                 CLASS                                 ENA
  Dec 10 18:47:46.4495 ireport.os.sunos.panic.dump_available 0x0000000000000000
  Dec 10 18:47:37.7837 ireport.os.sunos.panic.dump_pending_on_device 0x0000000000000000

nvlist version: 0
        version = 0x0
        class = list.suspect
        uuid = a7085088-582a-4aef-bf74-9d0d5cf3818d
        code = SUNOS-8000-KL
        ...
        panicstr = BAD TRAP: type=e (#pf Page fault) rp=ffffff001ef229c0 addr=5a occurred in module "si3124" due to a NULL pointer dereference
        ...
パッケージ
  • たとえば mysql 入れたかったら以下のようにします。
    • 175 は Solaris11 11/11 の snv 番号
root@oscar:~# pkg search 'pkg.fmri:*/mysql*' | grep 175
pkg.fmri   set    solaris/database/mysql-51                pkg:/database/mysql-51@5.1.37-0.175.0.0.0.2.537
pkg.fmri   set    solaris/database/mysql-51/library        pkg:/database/mysql-51/library@5.1.37-0.175.0.0.0.2.537
pkg.fmri   set    solaris/database/mysql-51/tests          pkg:/database/mysql-51/tests@5.1.37-0.175.0.0.0.2.537
pkg.fmri   set    solaris/database/mysql-common            pkg:/database/mysql-common@0.5.11-0.175.0.0.0.2.537
pkg.fmri   set    solaris/database/mysql-51                pkg:/database/mysql-51@5.1.37-0.175.0.0.0.2.537
pkg.fmri   set    solaris/database/mysql-51/library        pkg:/database/mysql-51/library@5.1.37-0.175.0.0.0.2.537
pkg.fmri   set    solaris/database/mysql-51/tests          pkg:/database/mysql-51/tests@5.1.37-0.175.0.0.0.2.537
pkg.fmri   set    solaris/database/mysql-common            pkg:/database/mysql-common@0.5.11-0.175.0.0.0.2.537
root@oscar:~# pkg install mysql-51
...

まとめ

前提知識の置き方が、Solaris 知らない人、10 なら知ってる人、OpenSolarisSolaris 11 Express 知ってる人とかなりバリエーションあるので、公式の移行ガイドにしてもキレイにまとめるのはかなり大変そうです。

最初の設定でよくつかうのは dladm, ipadm, svcadm, svccfg, svcs, pkg ってとこでしょうか。どれも Linux にはないコマンドですが、 MacOS の launchctl 同様に慣れてくればきっと便利に感じると思います。これを機に Solaris 派になってみてはいかが??