Hello Oracle Solaris 11 Express

無事公開されました "Oracle Solaris 11 Express 2010.11"。

リリースバージョンは snv_151a でした。

インストールイメージは Text Install、 Automated Install、 LiveCD(USB)の3種類かな?

PCで使うならLiveCDから立ち上げて、そこからインストール。

サーバで使うならText Installがよいのでは?と思います。
Text Installだと、X(gnome)一式すらインストールされないので、余計なモノはいらん!という人向け。


後は、ちょっと心配だった IPSですが、ISOイメージとしてフル公開&ダウンロードできます。
圧縮状態で 2GB x2。


user@hostname:~$ unzip sol-11-exp-201011-repo-full-iso-a.zip
user@hostname:~$ unzip sol-11-exp-201011-repo-full-iso-b.zip
user@hostname:~$ cat sol-11-exp-201011-repo-full.iso-a sol-11-exp-201011-repo-full.iso-b > sol-11-exp-201011-repo-full.iso
最終的なisoのファイルサイズは、"5,108,164,608"byte。 1024で割っていくと、、4.757GB。手元の4.7GのDVDメディアに焼こうとしたら容量オーバでムリでした。微妙なところですね。(ドライブ・メディアしだいかも?)

○TODO

  • OpenIndiana snv_147 から アップデートできるかの確認
  • OpenSolaris snv_134 から アップデートできるかの確認(上がOKなら oi147 を経由してもいい)
  • ローカルにIPSを立ててみる

○メモメモ


pkg set-publisher -P -O http://pkg.oracle.com/solaris/release/ solaris
pkg image-update -v --accept
beadm activate openindiana
beadm rename openindiana-1 oraclesolaris
beadm activate oraclesolaris

MacBook Air 到着。セットアップログ

初めてのMacなのですが、、、とりあえずやったことメモ。

開発系で必要なのは、Xcode というパッケージのようです。なので、以下手順を実施。全部 Web上です。


1. Apple Developer Connection でアカウント登録
2. XcodeパッケージのDownload & インストール (8GBオーバ)

これで、gccなどがターミナルで使えるようになります。

MacPorts
port というコマンドで、OSS系のパッケージが /opt/local に入るようになるようです。
普段他のOSで使うコマンドはこれで入れとけばいいのかな?と


$ sudo port install wget
$ sudo port install mercurial
$ sudo port install git-core


次はperl
git-coreを入れた時点で、/opt/local に 5.8.9が入るのですが、cpan使う以上、perlbrew入れたほうが後々よいです。


$ curl -L http://xrl.us/perlbrew > perlbrew
$ perl perlbrew install
$ perl perlbrew init
(.bashrc に initの結果よりコピペ)
$ rm perlbrew
$ source .bashrc
$ perlbrew install perl-5.12.2
...
$ perlbrew switch perl-5.12.2
$ cpan App::cpanminus

YAPC::Asia Tokyo 2010 一年後の自分のためのメモ

今年は前夜祭からフルで参加できたのですが、来年のYAPCまでこの記憶を忘れないための自分用メモ

ちなみに、"by ****さん"は私がそう聞き取ったということで、本人がそう言った&そういう意図である訳ではありません。


○WAFについて

前夜祭の話題。

  • WAF使うなら全部コード読め by tokuhiromさん

どうせ何かあったら、自分のところにくるので w
ただ、小さくてよいので1サイトは Catalyst で作って経験をしておかないとダメだな、と感じました。(軽量WAFの良さとか比較ができない)


○サーバ/クライアントアプリのスケールアップ

方法は、Preforkによるマルチプロセス化 or AnyEventによるI/O多重化 がある。

  • サーバアプリは、Prefork。チューニングが必要になったら I/O多重化。by kazuhoさん

Parallel::Prefork + Server::Starter でお手軽。
プロセス間共有は、Parallel::Prefork::SpareWorkers::Scoreboard で。

  • クライアントアプリは、両方使うのが解 by malaさん

特性上、AnyEventモジュールが大体あるのでそれを使う。マルチプロセス化もお手軽。


○各種スライドで出てきた、使うべきモジュール達

  • テンプレートエンジン Text::Xslate  

エクスレイトと読む。gfxさん作成。
内部処理はVMだったりと、XSの書き方も含めてとにかくソースを読みたい。
定番は Text::MicroTemplateなので、まぁ環境に合わせて!かな。
(日常でテンプレートエンジンを使う機会がないのだが)

軽量で定番とのこと

  • Data::MessagePack

データのシリアライズ/デシリアライズに。マルチプロセスでのプロセス間通信の際に利用する。
(Gearmanとか使ってみて必要性に気づきました。)


セッションが重なって見れなかったものなどは YouTube:yapcasiaを見ていこうかと思います。

IPS Repositories をローカルに立てる

OpenIndiana/OpenSolaris に限らず、パッケージはOSがネットワークから落としてインストールするというのが最近のお決まりになっています。

まぁDebian使ってた時は気にしていませんでしたが、Solaris + zone を使うのようになって、ちょっと微妙〜
zoneを4つ立てると、4OS分のイメージをネットワーク越しに取ってくるのでちょっとNW帯域やら時間の無駄を感じます。
/var/pkg 以下をコピーしたりするとよさそうですが、ちょっと不明。

wiki.indianaにMirrorの構築がさっと書いてあったので、ささっとローカルにIPSを立ててみました。(昔から Sun のドキュメントにありましたけど)

Setting up a mirror

とりあえず、oi_147_spin1.tar.bz2 を落として展開します。
なお、9/18の時点で oi_147_spin2.tar.bz2 があるのでそっちがよいかも。
最終的に rsync するので結果は同じでしょうけど。


# zfs create -p -o atime=off -o compression=off rpool/export/pkg/dev
# cd /export/pkg/dev/
# wget http://dlc.openindiana.org/repos/oi_147_spin1.tar.bz2
--2010-09-23 15:51:33-- http://dlc.openindiana.org/repos/oi_147_spin1.tar.bz2
dlc.openindiana.org (dlc.openindiana.org) をDNSに問いあわせています... 118.159.231.141
dlc.openindiana.org (dlc.openindiana.org)|118.159.231.141|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 2002357175 (1.9G) [application/x-bzip2]
`oi_147_spin1.tar.bz2' に保存中

4% [=> ] 83,159,842 233K/s 残り72m 51s
# gtar -jxf oi_147_spin1.tar.bz2
# mv oi_147_spin1/* ./
# rmdir oi_147_spin1/
# rsync -a pkg-origin.openindiana.org::pkgdepot-dev /export/pkg/dev/

次に pkg/server のスタート。
デフォルト 10002ポートでlistenします。


$ pfexec svccfg -s pkg/server
svc:/application/pkg/server> list
:properties
default
svc:/application/pkg/server> add dev
svc:/application/pkg/server> list
:properties
default
dev
svc:/application/pkg/server> select dev
svc:/application/pkg/server:dev>
svc:/application/pkg/server:dev> addpg pkg application
svc:/application/pkg/server:dev> setprop pkg/inst_root = astring: "/export/pkg/dev/"
svc:/application/pkg/server:dev> setprop pkg/port = count: 10002
svc:/application/pkg/server:dev>
svc:/application/pkg/server:dev> exit
$ svcs pkg/server
STATE STIME FMRI
disabled 9月_23 svc:/application/pkg/server:default
- - svc:/application/pkg/server:dev
$
$ pfexec svcadm refresh pkg/server:dev
$ svcadm enable pkg/server:dev
$ svcs pkg/server
STATE STIME FMRI
disabled 9月_23 svc:/application/pkg/server:default
online 1:10:13 svc:/application/pkg/server:dev
$

後は、http://[IPアドレス]:10002/ にアクセスして見慣れた package repository が見えれば完了。

Apache + mod_proxy で表示させたければ、wikiに設定も書いてるようです。
(試してません)

Hello OpenIndiana. OpenSolaris snv_134からのアップデート

OpenSolaris終了アナウンスで一番困っていたのが、OpenSolaris難民になること。
Solaris11 やら express が出たところで現状からアップデートできなければ、ちょっと面倒だな〜と思っていました。

そこで現れたのが、OpenIndiana。OpenSolarisからそのままアップデートできるのです。すばらしい。

今回は、b134からアップデートします。リリースバージョンのsnv_111bからはsnv_134を経由する必要があるようです。
Wikiが充実(?)しているのでいい感じです。

Upgrading from OpenSolaris

念のため、IPSリポジトリで無関係なものを外しておき、Wiki通りにopenindiana.orgを追加します。


$ pkg publisher
発行元 タイプ 状態 URI
opensolaris.org (優先) 起点 online http://pkg.opensolaris.org/dev/
contrib.opensolaris.org 起点 online http://pkg.opensolaris.org/contrib/
$ pfexec pkg unset-publisher contrib.opensolaris.org

$ pfexec pkg set-publisher --non-sticky opensolaris.org
$ pfexec pkg set-publisher -P -O http://pkg.openindiana.org/dev openindiana.org
$ pkg publisher
発行元 タイプ 状態 URI
openindiana.org (優先) 起点 online http://pkg.openindiana.org/dev/
opensolaris.org (非固定的) 起点 online http://pkg.opensolaris.org/dev/
$

後は、アップデート。しばらく待ちます。
私は忘れていましたが、typescriptとかでログを取っておいたほうがよいです。


$ pfexec pkg image-update -v
...

これで、新しいBEができます。
reboot前に以下のように rename したほうがよいでしょう。


$ pfexec beadm list
BE Active Mountpoint Space Policy Created
-- ------ ---------- ----- ------ -------
openindiana-b147 R - 12.77G static 2010-09-19 18:18
opensolaris-b134 N / 15.77M static 2010-08-24 09:20
$

この状態で一回リブート。

Bug登録があるようですが、この状態だとキーマップ情報が消えます。
何とかログインして以下で変更。


$ pfexec svccfg -s svc:/system/keymap:default
svc:/system/keymap:default> setprop keymap/layout = "Japanese"
svc:/system/keymap:default> quit

もう一回リブート。

Hello OpenIndiana.

rpool の置き換え

rpoolのディスクを交換&容量拡張の予定です。今回はVirtualBoxでとりあえず確認したのでそのログです。

なお、方法自体はug-jposug システムDISK交換で回答している chototsuさんの起動ディスクを交換する(mirrorを使用する方法) そのままとなります。

まぁ、今後自分の環境で何度か実施するだろうと思うので自分用メモといったところ。

交換前環境


root@vm-opensolaris:~# zpool status
pool: rpool
state: ONLINE
status: The pool is formatted using an older on-disk format. The pool can
still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'. Once this is done, the
pool will no longer be accessible on older software versions.
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
c3d0s0 ONLINE 0 0 0

errors: No known data errors

VirtualBoxのプライマリスレーブに交換用ディスクを追加して fdisk & format
交換用のディスクは c3d1 に見えます。セカンダリだと c4とかになるかなと。


root@vm-opensolaris:~# format
AVAILABLE DISK SELECTIONS:
0. c3d0
/pci@0,0/pci-ide@1,1/ide@0/cmdk@0,0
1. c3d1
/pci@0,0/pci-ide@1,1/ide@0/cmdk@1,0
Specify disk (enter its number)[0]: 1
selecting c3d1
Controller working list found
[disk formatted, defect list found]
No Solaris fdisk partition found.
format> fdisk
No fdisk table exists. The default partition for the disk is:

a 100% "SOLARIS System" partition

Type "y" to accept the default partition, otherwise type "n" to edit the
partition table.
y
format> p
partition> p
...
(Partition切るところは省略。元のパーティションを参考に)
...
partition> p
Current partition table (unnamed):
Total disk cylinders available: 2607 + 2 (reserved cylinders)

Part Tag Flag Cylinders Size Blocks
0 root wm 3 - 2606 19.95GB (2604/0/0) 41833260
1 unassigned wm 0 0 (0/0/0) 0
2 backup wu 0 - 2606 19.97GB (2607/0/0) 41881455
3 unassigned wm 0 0 (0/0/0) 0
4 unassigned wm 0 0 (0/0/0) 0
5 unassigned wm 0 0 (0/0/0) 0
6 unassigned wm 0 0 (0/0/0) 0
7 unassigned wm 0 0 (0/0/0) 0
8 boot wu 0 - 0 7.84MB (1/0/0) 16065
9 alternates wm 1 - 2 15.69MB (2/0/0) 32130

partition> label
Ready to label disk, continue? yes

partition> quit
format> quit

mirrorディスクの追加


root@vm-opensolaris:~# zpool attach -f rpool c3d0s0 c3d1s0
Please be sure to invoke installgrub(1M) to make 'c3d1s0' bootable.


zpool status で、ミラーの同期が終わったの確認して(?)、grubのインストール


root@vm-opensolaris:~# zpool status
config:

NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror ONLINE 0 0 0
c3d0s0 ONLINE 0 0 0
c3d1s0 ONLINE 0 0 0 5.07G resilvered
errors: No known data errors
root@vm-opensolaris:~# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c3d1s0

stage1 written to partition 0 sector 0 (abs 16065)
stage2 written to partition 0, 271 sectors starting at 50 (abs 16115)

元のディスクを切り離してシャットダウン


root@vm-opensolaris:~# zpool detach rpool c3d0s0
root@vm-opensolaris:~# init 5

VirutaulBoxの設定で、プライマリマスターのディスク(元)を外して、プライマリスレーブのディスク(新)をプライマリマスターに変更してブート


root@vm-opensolaris:~# zpool status
pool: rpool
state: ONLINE
status: The pool is formatted using an older on-disk format. The pool can
still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'. Once this is done, the
pool will no longer be accessible on older software versions.
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
c3d0s0 ONLINE 0 0 0

errors: No known data errors
root@vm-opensolaris:~#

バイスのパスが変わるとどうなるかな?と不安がありましたが、ちゃんと c3d1 -> c3d0 に変更されても無事 起動してくれました。

このあたり、他のOSよりらく〜。

 構築メモ(non-global zone)

b134 で作成したzoneに初期インストール後に入れているもの。
多分、ごっそり入る別名のパッケージ名があると思うので、そっちがいいかも。


pkg install wget
pkg install system/locale/ja
pkg install archiver/gnu-tar

開発系


pkg install make
pkg install gcc-3
pkg install gcc-43 #/usr/gcc/4.3/ 以下に入ります。
pkg install gnu-patch
pkg install header-math # perlコンパイルに必要。
pkg install mercurial