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の特徴が列挙されてるんだな。リハビリを兼ねて読んでみるか。
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が壁のはずなんだけど、無効になってる。他に壁が有るのだろうか?
思わず、ぐぐるしたら、何やら老舗のサイトに行きついた。でも、最近の壁は、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と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をかじった人はね。