OpenIndiana の導入
OpenIndiana とは OpenSolaris からフォークした SVR4[1] Solaris 系 OS である。
OpenIndiana インストール
の前に Oracle VirtualBox
個人利用なら無償で使える VM
Windows版VirtualBoxをインストールするときに、Python Core / win32api がないとかいう警告が出るので、Python を入れたのちに pywin32 パッケージを追加する。
admin権限も path も両方チェックを入れてインストールする。
インストール後:
> pip install pywin32
> pip list
Package Version
------- -------
pip 24.3.1
pywin32 308
>
- Extension Pack (Guest Addition CD)
これをいれて autorun.sh しないと便利機能が使えないのだが、
入れてもなんかおかしなまま。解決しようがないので放置。
最大の問題は Host-Guest間共有フォルダ機能とかが使えないこと。
ファイルをやり取りしようと思うと、
ネットワークを NAT から Bridge に変更して、proftpd [2] を有効にして
Host 側から ftp でやりとりする (もしくは同様に samba 等) くらいしか思いつかない。
面倒くさい…
$ sudo svcadm enable proftpd
$ ifconfig # IP address 確認
(略)
OpenIndiana インストール
LiveDVD イメージから起動すると、Default User での GUI 環境が立ち上がり、そこにインストールアイコンがあるのでそこからインストール実行。
油断すると時間で画面ロック(スクリーンセーバ)をかけられてしまうので、あらかじめパスワードが何なのかを公式ページで調べておくなどする。
OpenIndiana ことはじめ
/bin/sh
なんということだ、sh が Korn-shell(93u+) ではないか。Bourne Shell はもうないらしい。[3]
もとになった OpenSolaris は Solaris 10 時代だった気がするので Bourne shell かもしれない期待をしたのだが(何の期待だ?)。uname -a
すると 5.11 という返事が返ってくるので、Solaris 11 ベースになっているみたいだ。本家も Solaris 11 ではデフォルトが Bourne Shell ではなくなっているんだったか。本家はどこかに旧バージョン互換物を隠し持ってた気はするが。
BSD 由来の SunOS [4] は遠くなりにけり。
もはや今なら Bash を sh にしてくれてもいいんだけど。[5]
IPS パッケージシステム
- rootでなくても
pfexec
で使えるようにする。sudo
だとパスワードを打つ必要があるがそれを省略できる効果がある。username は自分のログイン ID
$ sudo usermod -P "Software Installation" username
- パッケージリスト
$ pkg list -a
- インストール
$ pfexec pkg install XXXXX
なんだが、依存関係のある諸々が全然存在しなくなって(リストも壊れだす) reject されてしまう。
色々調べたところ、先に pkg update
をしないとハマってこうなるらしい。
バグじゃないのか。
- パッケージ更新
$ pfexec pkg update
これでインストールできると思ったら。
32GB も Disk space をあげたはずなのに容量が足りない、
残り2.5GBだと?
デフォルトのパーティション割り付けが何をしてくれたんだ?
ZFS という FileSystem の管理基礎知識
... swap が 18.3GB も確保されてるってどういうことよ。
$ df -k
Filesystem 1024-blocks Used Available Capacity Mounted on
rpool/ROOT/openindiana-2024:12:13
31997952 9643010 2530507 80% /
/devices 0 0 0 0% /devices
/dev 0 0 0 0% /dev
ctfs 0 0 0 0% /system/contract
proc 0 0 0 0% /proc
mnttab 0 0 0 0% /etc/mnttab
swap 18319300 412 18318888 1% /etc/svc/volatile
objfs 0 0 0 0% /system/object
bootfs 0 0 0 0% /system/boot
sharefs 0 0 0 0% /etc/dfs/sharetab
/usr/lib/libc/libc_hwcap2.so.1
12173517 9643010 2530507 80% /lib/libc.so.1
fd 0 0 0 0% /dev/fd
swap 18515520 196632 18318888 2% /tmp
swap 18319004 116 18318888 1% /var/run
rpool/export 31997952 24 2530507 1% /export
rpool 31997952 34 2530507 1% /rpool
rpool/export/home 31997952 24 2530507 1% /export/home
format
/ fdisk
コマンドを使っても丸ごと ZFS pool になっていることしかわからない。ZFS の知識が必要。
$ zpool status
pool: rpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
c5t0d0s0 ONLINE 0 0 0
errors: No known data errors
$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 28.1G 2.41G 34K /rpool
rpool/ROOT 14.4G 2.41G 24K legacy
rpool/ROOT/openindiana 12.2M 2.41G 8.69G /
rpool/ROOT/openindiana-2024:12:13 14.4G 2.41G 9.20G /
rpool/dump 4.62G 2.41G 4.62G -
rpool/export 543M 2.41G 24K /export
rpool/export/home 543M 2.41G 24K /export/home
rpool/export/home/pkpk3 543M 2.41G 543M /export/home/pkpk3
rpool/swap 8.50G 10.7G 240M -
確かに swap が 8.5+10.7(-2.41?) GB[6] ということになっている。
$ zfs get volsize rpool/swap
NAME PROPERTY VALUE SOURCE
rpool/swap volsize 8.00G local
ん? 8GB しかない。よくわからんがとりあえず小さくしてしまえ。
swap という名前ではあるが tmpfs で使うものでもあり、
つまり /tmp
のサイズにもなるので 0 にはしない。
どうやら dump のほうも swap の一部になっているようなので、
swap は 0 にしてもよかったらしいけれど。
Swap のサイズ縮小。以下 root 作業。
以下では 8GB だったものを 2GB に減らしている。
# swap -d /dev/zvol/dsk/rpool/swap
# zfs volsize=2G rpool/swap
# swap -a /dev/zvol/dsk/rpool/swap
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 21.7G 8.79G 34K /rpool
rpool/ROOT 14.4G 8.79G 24K legacy
rpool/ROOT/openindiana 12.2M 8.79G 8.69G /
rpool/ROOT/openindiana-2024:12:13 14.4G 8.79G 9.20G /
rpool/dump 4.62G 8.79G 4.62G -
rpool/export 543M 8.79G 24K /export
rpool/export/home 543M 8.79G 24K /export/home
rpool/export/home/pkpk3 543M 8.79G 543M /export/home/pkpk3
rpool/swap 2.13G 10.7G 240M -
減らした6GB分プールの余裕が増えた。
にしても df で見る分には 9.6GB しか使ってないはずなのに ROOT で 14.4G 使っているのが謎。
dump の USED 4.62GB は zfs get volsize rpool/dump
で見えるサイズと同じ。保守サービス契約がないんだから自力でクラッシュダンプを解析できるわけでもないので dump はいらないと思うがひとまず放置。
swap の avail 10.7GB は全く変わってないから swap の AVAIL は pool の AVAIL に swap サイズそのものを加算しているということになる。つまり pool 全体の空きは 8.79GB。
問題は、OS 9.6GB, dump 4.62GB, swap 2GB, 空き 8.79GB では 32GB にならず 5GB くらいの謎消費があるところ。
どうも ZFS Boot Environment (BE) に 5GB くらい持ってかれてるみたい (update に失敗して起動不可になったときのロールバック手段らしい)。この余計なサイズ分を知る方法がわからない。 beadm
コマンドでもそれらしいサイズが出てこない。
ともかく、つまり、ディスクスペースは 32GB では不足する。
ZFS はディスクスペースが枯渇するような使い方をしてはならないという話もあるし。
Trademark
- Solaris, Oracle, Oracle VM VirtualBox, VirtualBox は、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標または商標です。
- AIX は International Business Machines Corporation の米国およびその他の国における商標です。
- Linux は Linus Torvalds 氏の日本およびその他の国における登録商標または商標です。
- Python は Python Software Foundation の日本およびその他の国における登録商標または商標です。
そのほか不注意で商標を書いているかもしれませんがそれぞれの会社の商標です。
BSD は区分09に限れば日本の登録商標ではないようですが中国の企業が申請しています。
初版公開日: 2024/12/14
-
えすぶいあーるふぉー。System V Release 4 (しすてむふぁいぶりりーすふぉー)の略。つまり2文字目はローマ数字なのだが、なぜか略したときはファイブと読まない。 ↩︎
-
たいていの情報は Solaris 11 公式情報に共通するので Oracle サイトの情報は有用なのだけど、こういうところで Solaris と OpenIndiana で差異がある。Solaris だと ftpd だが OpenIndiana だと ftpd は存在せず proftpd に差し替えられているのだ。そういう対応表どこかにないかな? ↩︎
-
ほかの shell はコマンド名やらなにやら由来の略称が存在するが Bourne shell は適切な略称がない。長らく
/bin/sh
= Bourne shell だったので Bourne shell を指して「びんしぇ」と呼ぶ人はいた。Bourne shell以前の歴史は知らない。なお「Bシェル」という呼び方は不適 (せいぜい csh 系列ではないという「Cシェル」からの対義語の意味でしかないので Bourne shell を指して呼ぶと教育的指導を受けるぞ)。AIX だとbsh
で Bourne shell が使えるらしいので IBM 界隈だけはBシェル呼びも許されるかもしれない。 ↩︎ -
OpenIndiana も
uname
すると SunOS と名乗るが、ここでいう BSD 由来とは SunOS 4系までのもの ↩︎ -
その昔はパッケージシステムなんぞなかったり、あっても商用OSだと GNU ツールはパッケージ管理範囲外だったりした。ゆえに当時は Bash は存在しても野良ビルドであるために元環境を壊さない配慮から歴史的に
/usr/local/bin
に配置されることになる。一方 GNU/Linux は最初から Bash が sh の立ち位置なわけで/bin
とか/usr/bin
にあり/usr/local
以下にあるわけがないので、複数環境を相手にするスクリプトだと Bash では shebang が両立しないという事態に陥る。当時/bin
あるいは/usr/bin
に確実に存在するのは sh (正体が Bourne shell か Ksh か Bash かそのほかの何かかはともかく)か csh しかなく、csh スクリプトを書くことは選択肢に存在しないので/bin/sh
で可搬性のあるスクリプトを書くという黒魔術が発達したという。 ↩︎ -
GB (
) なのか GiB (=10^9 ) なのかどちらでもない何かなのかわからないので細かい数字は検算できない。=2^{30} df
のほうは計算できて約18.3GB = 約17.5GiB だがzfs list
で見える数字からはどういう解釈をしても計算が合わない ↩︎
Discussion