OpenIndiana

先月の事になるけど、女房の知人が福島方面に旅行に行くと言うので、福島銘菓のママドールを 土産に頼んだそうな。けど、台風が来て、旅行は中止。

どうしても、ママドール食べたい病にかかった女房は、製造元の三万石製菓で地方発送をしてる のを嗅ぎ付け、注文した。普通のやつ、チョコレートバージョン、更にクルミ入りのパイの、 豪華3品種。

オイラーも試食で、一品種づつ味わったけど、後はご遠慮した。糖質制限、砂糖制限と言うか、 自粛モードだから。

どうせなら、菓子だけじゃなくて、福島名産詰め合わせバージョンが良かったな。馬刺し、ニシンの山椒漬けとかね。

仙台は長年住んでいたんで、懐かしいものが沢山ある。牛タンの味噌漬けとか、かき徳の、かき製品とか、蒲鉾とか、仙台銘菓の萩の月、等々。

これらを、ワンストップで注文出来ないかね? 女房に探させたけど、そういうのは無いっぽい。駅ビルに入っている土産物屋がやってても、よさそうなのにね。

東京の人なら、各県が出店してるアンテナショップに行けば、容易に手に入るだろう。ちと 羨ましいな。

大人の休日倶楽部パスで4日間行き当たりばったりの旅をしたとかで、東北一周、土産物屋買い出しツアーでも敢行するしかないかな?

ふと思ったんだけど、楽天とかじゃダメかな? あそこは、商店の寄せ集めだからな。アマは どうだ。おまとめで送ってくれそう。でも、あそこは嫌いだ。一度迷い込んだら、外へのリンクは一切無いと言う閉鎖空間になってるからな。

本の紹介と言うと、真っ先にあそこにリンクする、ホームページが多いけど、ちょぼちょぼと、 お礼が得られるからかね。出版社の一次情報へリンクして欲しいものだ。そう言えば、キンドル 版が主体で、紙の本でも出版社名を隠しているな。売れ売れ一直線です。

Install on vbox

暫く前に、こんな案内が出てた。

Mateへの移行を進める「OpenIndiana Hipster 2017.10」が公開

OpenSolarisフォークの「OpenIndiana Hipster 2017.10」がリリース

なんか、昔やったsolarisだな。世の中、右を向いても左を見てもリナリナリナで辟易してるんで、入れてみるか。

GUI版のやつを頑張って取ってきて、vboxに取り合えず入れてみる。ボラクルはsolarisもjavaも投げ出した前科者だから、同罪にvboxがならないように祈るのみ。

20分ぐらいで、すんなり入った。初回の起動時には、何やら準備をしてたようだけど、2回目からは、まあまあすんなりと起動するようになった。

vesaの画面なんで、1024x768固定みたいだけど、追加のツールを入れると拡げられるのかな。 まあ余りGUIには興味が無いので、CUIで行く。

login as: sakae
Using keyboard-interactive authentication.
Password:
The Illumos Project     SunOS 5.11      illumos-2727bb055f      October 2017

これ、起動時の御挨拶。SunOSってのが泣かせてくれますなあ。隠れOSみたいで、ひっそりと 生息してますってね。

DISKの使い具合。zfsの片鱗が見えるな。

sakae@sol:~$ df
/                  (rpool/ROOT/openindiana):45402311 blocks 45402311 files
/devices           (/devices          ):       0 blocks        0 files
/dev               (/dev              ):       0 blocks        0 files
/system/contract   (ctfs              ):       0 blocks 2147483606 files
/proc              (proc              ):       0 blocks    29942 files
/etc/mnttab        (mnttab            ):       0 blocks        0 files
/etc/svc/volatile  (swap              ): 9659936 blocks   580893 files
/system/object     (objfs             ):       0 blocks 2147483476 files
/system/boot       (bootfs            ):       0 blocks        0 files
/etc/dfs/sharetab  (sharefs           ):       0 blocks 2147483646 files
/lib/libc.so.1     (/usr/lib/libc/libc_hwcap1.so.1):45402311 blocks 45402311 files
/dev/fd            (fd                ):       0 blocks        0 files
/tmp               (swap              ): 9659936 blocks   580893 files
/var/run           (swap              ): 9659936 blocks   580893 files
/export            (rpool/export      ):45402311 blocks 45402311 files
/export/home       (rpool/export/home ):45402311 blocks 45402311 files
/export/home/sakae (rpool/export/home/sakae):45402311 blocks 45402311 files
/rpool             (rpool             ):45402311 blocks 45402311 files

ブロックで言われても、よくわからないので、人に易しいフォーマットで。

sakae@sol:~$ df -h
Filesystem             Size   Used  Available Capacity  Mounted on
rpool/ROOT/openindiana
                      30.8G  4.93G      21.6G    19%    /
/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                  4.61G   400K      4.61G     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_hwcap1.so.1
                      26.6G  4.93G      21.6G    19%    /lib/libc.so.1
fd                        0      0          0     0%    /dev/fd
swap                  4.61G     8K      4.61G     1%    /tmp
swap                  4.61G    84K      4.61G     1%    /var/run
rpool/export          30.8G    23K      21.6G     1%    /export
rpool/export/home     30.8G    23K      21.6G     1%    /export/home
rpool/export/home/sakae
                      30.8G  19.4M      21.6G     1%    /export/home/sakae
rpool                 30.8G    31K      21.6G     1%    /rpool

homeのexportの下に置いてあるのは、Solaris流だな。NFSでどうぞって奴だ。

次は、パッケージを入れてみる。関連品が有りますとな。

root@sol:~# pkg install gnu-emacs
           Packages to install:  7
            Services to change:  3
       Create boot environment: No
Create backup boot environment: No

DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
editor/gnu-emacs                         0/7     1295/4355    11.8/51.9  268k/s

案内によると、mongodbの新しいのも有るそうなので、探してみた。

root@sol:~# pkg search mongo
INDEX      ACTION VALUE                     PACKAGE
basename   file   usr/mongodb/3.3/bin/mongo pkg:/database/mongodb-33@3.3.12-2017.0.0.2
basename   file   usr/mongodb/3.4/bin/mongo pkg:/database/mongodb-34@3.4.9-2017.0.0.1
basename   link   usr/bin/mongo             pkg:/database/mongodb-33@3.3.12-2017.0.0.2
basename   link   usr/bin/mongo             pkg:/database/mongodb-34@3.4.9-2017.0.0.1
root@sol:~# pkg install mongodb-34

pkg install: 'mongodb-34' matches multiple packages
        pkg://openindiana.org/service/database/mongodb-34
        pkg://openindiana.org/database/mongodb-34

Please provide one of the package FMRIs listed above to the install command.
root@sol:~# pkg install pkg://openindiana.org/service/database/mongodb-34

そして、新しいのを頼んだら、名前がかぶってるけど、どっちが欲しい念。両方欲しい時は、 コントローラーの方を指定すれば、本体も釣られて入ってくるとな。

Install on VMWare

思い余って、VMWareにも入れてみた。vboxよりきびきび動く。Solaris11を検出して、toolが 勝手に降ってきた。そのおかげか知らないけど、GUIの画面の大きさが自由に設定出来るのは、 嬉しい誤算だ。インストールで一番時間を喰う、データの転送が10分足らず。全体で15分も かからなかったと思う。そんな訳で、vboxに入れたやつは、1時間の寿命でした。

firefoxを立ち上げたら、openindiana-welcomなんてページが勝手に表示されてた。 これ、外にアクセスされたものじゃなくて、ドキュメントに有ったもの。 場所は、

sakae@sol:/usr/share/doc/openindiana-welcome/html$ ls
br           el           fr           nl           sl
C            en           images       pl           stylesheets
de           es           index.html   ru

日本語解説が有るかと思ったら、無かった。日本語ロケールにしたら、追加で降ってくるなんて いう都合のよい解釈は、成り立たないだろうね。諦めてCの所を見る。何時もの癖で、w3mって やったら、文句も言われずに表示した。そうか、テキスト版を入れる人もいるだろうってんで、 ちゃんとテキスト版のブラウザーもデフォで入ってるのね。日本人の開発したブラウザーが ちゃんと採用されてるって、すばらしい貢献。大いにエバって宜しい。 オイラーも少しエバっておく。

OpenIndiana Hipster Enterprise Class Features

  Feature                            Description
ZFS         File System and Volume Manager
Dtrace      Dynamic Tracing Framework (System Introspection)
Crossbow    Network Virtualization and Resource Control
SMF         Service Management Facility
FMA         Fault Management Architecture
COMSTAR     Common Multiprotocol SCSI Target (ISCSI Target Framework)
KVM         Kernel-Based Virtual Machine (Operating System Virtualization)
Zones       OS Level Virtualized Application Containers
Time-Slider Automated ZFS Snapshots and Rollbacks
RBAC        Role-Based Access Control
IPMP        IP Network Multipathing
DLMP        Data Link Multipathing


Release Notes

https://wiki.openindiana.org/oi/Release+Notes

Solarisの特徴が列挙されてるんだな。リハビリを兼ねて読んでみるか。

Solaris のシステム管理 (基本編)

mongo

mongoの新しいやつが有るので入れてみた。接続しようとすると、あえなくエラー。

sakae@sol:~$ mongo
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017
2017-11-16T05:47:59.059+0900 W NETWORK  [thread1] Failed to connect to 127.0.0.1:27017, in(checking socket for error after poll), reason: Connection refused
2017-11-16T05:47:59.060+0900 E QUERY    [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:237:13
@(connect):1:6
exception: connect failed

これは、きっと火壁が有るに違いない。壁は自動的にせりあがってくるはずなんで、リナで言う systemd相当のコマンドを思い出したよ。ああ、リナの方がSolarisの真似をしたんだったな。

sakae@sol:~$ svcs -a| grep ip
disabled        5:27:08 svc:/network/ipsec/policy:default
disabled        5:27:08 svc:/network/ipsec/manual-key:default
disabled        5:27:08 svc:/network/ipsec/ike:default
disabled        5:27:11 svc:/system/freeipmi/ipmiseld:default
disabled        5:27:12 svc:/system/freeipmi/ipmidetectd:default
disabled        5:27:13 svc:/network/routing/legacy-routing:ipv4
disabled        5:27:13 svc:/network/routing/legacy-routing:ipv6
disabled        5:27:14 svc:/network/ipv6-forwarding:default
disabled        5:27:14 svc:/network/routing/ripng:default
disabled        5:27:14 svc:/network/ipmievd:default
disabled        5:27:14 svc:/network/ipqos:default
disabled        5:27:14 svc:/network/ipv4-forwarding:default
disabled        5:27:16 svc:/system/xvm/ipagent:default
disabled        5:27:41 svc:/network/ipfilter:default
online          5:27:07 svc:/network/ip-interface-management:default
online          5:27:10 svc:/network/ipsec/ipsecalgs:default
online          5:27:11 svc:/network/iptun:default

ipfilterが壁のはずなんだけど、無効になってる。他に壁が有るのだろうか?

Solarisユーザーのための情報サイト

思わず、ぐぐるしたら、何やら老舗のサイトに行きついた。でも、最近の壁は、ipfilterだけの ようだ。思い余って、肝心のサーバーが動いているか確認すると

sakae@sol:~$ svcs -a| grep mongo
disabled        6:04:13 svc:/application/database/mongodb_34:default

動いておらんじゃないか。Debianみたいに気が利かないやつか。いや、ご主人様が働けと 言うまで働かない忠実なやつ。今風に言うと、忖度しないって事。ああ、今年の流行語大賞は、 忖度で決まりで、あーべがトロフィーを受け取る手はずになっております。

root@sol:~# svcadm enable mongodb_34
root@sol:~# svcs -a | grep mongo
online          6:24:10 svc:/application/database/mongodb_34:default

それで、動けと命令したら、動き出した。下記はその証拠。これから何を目指そうかね?

> show dbs
admin  0.000GB
local  0.000GB

java

で、Solarisと言えば、本場のjavaが有ったはず。

sakae@sol:~$ java -version
openjdk version "1.8.0_131-internal"
OpenJDK Runtime Environment (build 1.8.0_131-internal-oi-1.8.131-b00)
OpenJDK 64-Bit Server VM (build 25.131-b00, mixed mode)

やっぱり、デフォで入っていた。 でも、javacの方は、中途半端にしか入っていない。危険性を承知してるんだな。

sakae@sol:~$ javac -version
-bash: javac: command not found
sakae@sol:/usr/jdk/instances/openjdk1.8.0/bin$ ./javac -version
Error: Could not find or load main class com.sun.tools.javac.Main

探してみると、runtimeの方が入っていて、developerの方が不足してるようだ。

sakae@sol:~$ pkg search javac
INDEX      ACTION VALUE                                          PACKAGE
basename   file   usr/jdk/instances/openjdk1.8.0/bin/javac       pkg:/runtime/java/openjdk8@1.8.131-2017.0.0.2
basename   link   usr/bin/javac                                  pkg:/developer/java/openjdk8@1.8.131-2017.0.0.2
root@sol:/usr/bin# pkg install pkg:/developer/java/openjdk8@1.8.131-2017.0.0.2
           Packages to install:  1
       Create boot environment: No
Create backup boot environment: No

DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
Completed                                1/1       240/240    33.5/33.5  1.2M/s

PHASE                                          ITEMS
Installing new actions                       271/271
Updating package state database                 Done
Updating package cache                           0/0
Updating image state                            Done
Creating fast lookup database                   Done
sakae@sol:~$ javac -version
javac 1.8.0_131-internal

入れたら、完成した。 鈍重な事に関しては定評のあるJavaなんで、どんな芸をさせようか迷う。 残念ながら、最新式のJava 9は、来ていない。ボラクルが金儲けに走っていて、解禁になって いないから?Java9がリリースされたので色々と調べてみた

scala

という事で、7つの言語本を参考に、scalaを選んでみた。clojureは一時の勢いがなくなって ますからねぇ。

Scala入門 (0) -環境構築

Scala入門時に役立つ情報まとめ

Documentation

どうも、scalaとsbtっていう開発環境を使うのが定番みたいだ。そんな事で、 SDKMAN!とENSIMEとEmacsでScalaの開発環境構築とか sbt - ENSIMEを見てるんだけど、エラーになるなあ。

ここでちょいと顛末を書いておく。Javaも御多聞に漏れず、OSが用意するVerから離れて、$HOME以下にインストールするのが流行りのようだ。それをやってくれるのが、SDKMAN!って訳ね。

こいつで、Javaを探すも、インディアナなんて田舎で育ったOS用は何も無し。まあ、amd64な石でSolarisを動かそうなんて、変人は居ないって事。しゃーない、先に入れたやつを使おう。 それで、scalaとsbtは用意した。で、sbtを起動すると、javaが入っていないとのたまう。

SDKMANの配下にjavaが居ないんだから、当然の事と思われる。で、住処と思しき場所を推定。 ~/.sdkman/candidates/ に、sbtとscalaが居た。それぞれのdir下に、Ver名を冠したdirが有り、currentって名前でリンクが貼られていたよ。

じゃ、Javaもそれに倣えばいいんだな。

sakae@sol:~/.sdkman/candidates/java$ ls -l current
lrwxrwxrwx   1 sakae    staff         31 Nov 16 06:55 current -> /usr/jdk/instances/openjdk1.8.0

javaってdirを作り、JAVA_HOMEへリンクを貼ったよ。これでもまだだめで、やはりJavaが居ないと言う。~/.sdkman/candidates/sbt/1.0.3/bin/sbt-launch-lib.bash を見るはめになった。

# Detect that we have java installed.
checkJava() {
  local required_version="$1"
  # Now check to see if it's a good enough version
  local good_enough="$(echo "$java_version >= $required_version" | bc)"
  if [[ "$java_version" == "" ]]; then
    echo
    echo No java installations was detected.
    echo Please go to http://www.java.com/getjava/ and download
    echo
    exit 1
  elif [[ "$good_enough" != "1" ]]; then
    echo
    echo The java installation you have is not up to date
    echo $script_name requires at least version $required_version+, you have
    echo version $java_version
    echo
    echo Please go to http://www.java.com/getjava/ and download
    echo a valid Java Runtime and install before running $script_name.
    echo
    exit 1

good_enoughの計算で、エラーを吐くんだ。

sakae@sol:~$ echo "1.8 >= 1.6" | bc
syntax error on line 1, teletype

bcの問題? 面倒なんで、このルーチンを潰したよ。

sakae@sol:~/.sbt/1.0/plugins$ cat plugins.sbt
addSbtPlugin("org.ensime" % "sbt-ensime" % "2.0.1")

それから、ensimeも新しくなってて、版をあげないと、見つけられずエラーになってた。 全く、Java関連の連中は人の迷惑知らずだな。clojureでも、同じような苦労を味わったぞ。

sbt を起動して ensimeConfig を行い、サーバーを起動する準備を行う。 そして、emacsを立ち上げ M-x ensime すると、サーバーが起動してemacsと通信を始めるはずなんだけど、サーバーが 落ちてしまうみたい。emacsのバッファーに *ENSIME-hello* が出来ていて、そこに

15:36:42.335 WARN  None c.o.c.u.OMemory - MaxDirectMemorySize JVM option is not\
 set or has invalid value, that may cause out of memory errors. Please set the \
-XX:MaxDirectMemorySize=4095m option when you start the JVM.
15:36:42.336 WARN  None c.o.c.u.OMemory - The sum of the configured JVM maximum\
 heap size (3818913792 bytes) and the OrientDB maximum cache size (3818913792 b\
ytes) is larger than the available physical memory size (4294504448 bytes). Tha\
t may cause out of memory errors, please tune the confi

メモリーを奔放に使うJavaゆえ、上手な使い方をしろってご宣託。

sakae@sol:~/hello/.ensime_cache$ lv hs_err_pid4119.log
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 706740224 bytes for committing reserved memory.
# Possible reasons:
#   The system is out of physical RAM or swap space
#   In 32 bit mode, the process size limit was hit
# Possible solutions:
#   Reduce memory load on the system
#   Increase physical memory or swap space
#   Check if swap backing store is full
#   Use 64 bit Java on a 64 bit OS
#   Decrease Java heap size (-Xmx/-Xms)
#   Decrease number of Java threads
#   Decrease Java thread stack sizes (-Xss)
#   Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
#
#  Out of Memory Error (os_solaris.cpp:2560), pid=4119, tid=0x0000000000000005
#
# JRE version: OpenJDK Runtime Environment (8.0_131) (build 1.8.0_131-internal-oi-1.8.131-b00)
# Java VM: OpenJDK 64-Bit Server VM (25.131-b00 mixed mode solaris-amd64 compressed oops)


VM Arguments:
jvm_args: -XX:ReservedCodeCacheSize=128m -XX:MaxMetaspaceSize=256m -XX:+UseParal
lelGC -Xss2m -Xms512m -Xmx4g -XX:MaxMetaspaceSize=256m -XX:StringTableSize=10000
03 -XX:+UnlockExperimentalVMOptions -XX:SymbolTableSize=1000003 -Dscala.classpat
h.closeZip=true -Densime.config=/export/home/sakae/scala_apps/spike/.ensime
java_command: org.ensime.server.Server

JAVA_OPTSなんていう環境変数に、色々とメモリーリミットを書いてみたけど、だめだった。 全くもって、Javaって奴は。。。。。。

文句を言ってもしょうがないので、 簡単にプロジェクトを作れるそうな。このあたりHaskellのstackに似ているな

sakae@sol:/tmp$ mkdir fuga
sakae@sol:/tmp$ cd fuga
sakae@sol:/tmp/fuga$ sbt new scala/hello-world.g8
[info] Loading settings from plugins.sbt ...
[info] Loading global plugins from /export/home/sakae/.sbt/1.0/plugins
[info] Set current project to fuga (in build file:/tmp/fuga/)

A minimal Scala project.

name [Hallo World template]: hoge

Template applied in ./hoge

出来上がったもの

sakae@sol:/tmp/fuga$ tree
.
├── hoge
│   ├── build.sbt
│   ├── project
│   │   └── build.properties
│   └── src
│       └── main
│           └── scala
│               └── Main.scala
└── target
    └── streams
        └── $global
            ├── ivyConfiguration
            │   └── $global
            │       └── streams
            │           └── out
            └── projectDescriptors
                └── $global
                    └── streams
                        └── out

14 directories, 5 files

hogeに移動して、emacs上から、sbt-startしrun ルンルン。

 Running sbt
 [info] Loading settings from plugins.sbt ...
 [info] Loading global plugins from /export/home/sakae/.sbt/1.0/plugins
 [info] Loading project definition from /tmp/fuga/hoge/project
 [info] Loading settings from build.sbt ...
 [info] Set current project to hello-world (in build file:/tmp/fuga/hoge/)
 [info] sbt server started at 127.0.0.1:5957
 sbt:hello-world> run
 Hello, World!
 [info] Running Main
 [success] Total time: 1 s, completed Nov 16, 2017 3:51:22 PM
 sbt:hello-world> run
 [info] Running Main
 Hello, World!
 [success] Total time: 0 s, completed Nov 16, 2017 3:52:15 PM

7つの言語本を読んだけど、scalaって、真剣にやるべきものじゃ無いと言う事が分かったよ。 すくなくとも、Haskellをかじった人はね。