🦜

OpenIndiana の導入

2024/12/14に公開

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

脚注
  1. えすぶいあーるふぉー。System V Release 4 (しすてむふぁいぶりりーすふぉー)の略。つまり2文字目はローマ数字なのだが、なぜか略したときはファイブと読まない。 ↩︎

  2. たいていの情報は Solaris 11 公式情報に共通するので Oracle サイトの情報は有用なのだけど、こういうところで Solaris と OpenIndiana で差異がある。Solaris だと ftpd だが OpenIndiana だと ftpd は存在せず proftpd に差し替えられているのだ。そういう対応表どこかにないかな? ↩︎

  3. ほかの shell はコマンド名やらなにやら由来の略称が存在するが Bourne shell は適切な略称がない。長らく /bin/sh = Bourne shell だったので Bourne shell を指して「びんしぇ」と呼ぶ人はいた。Bourne shell以前の歴史は知らない。なお「Bシェル」という呼び方は不適 (せいぜい csh 系列ではないという「Cシェル」からの対義語の意味でしかないので Bourne shell を指して呼ぶと教育的指導を受けるぞ)。AIX だと bsh で Bourne shell が使えるらしいので IBM 界隈だけはBシェル呼びも許されるかもしれない。 ↩︎

  4. OpenIndiana も uname すると SunOS と名乗るが、ここでいう BSD 由来とは SunOS 4系までのもの ↩︎

  5. その昔はパッケージシステムなんぞなかったり、あっても商用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 で可搬性のあるスクリプトを書くという黒魔術が発達したという。 ↩︎

  6. GB (=10^9) なのか GiB (=2^{30}) なのかどちらでもない何かなのかわからないので細かい数字は検算できない。df のほうは計算できて約18.3GB = 約17.5GiB だが zfs list で見える数字からはどういう解釈をしても計算が合わない ↩︎

Discussion