スポンサーリンク

ConoHaで動かす openindianaとZones

まだクリスマスで消耗してるの?

こんばんは♪みんなの神様です♪

というわけでスルーしようと思ってたけど、まるで排気ドノーマルなGPZ400Rで公道を走ってたら「#今日のプリウス」にナメられて煽られるかのごとくインターネッツでも華麗に煽られたのでうっかり参加表明してしまった「ConoHa Advent Calendar 2015」24日目でございます。

**クラウドサービス(のAdvent Calendarです!** 使い方、ノウハウ、Linuxのこと、(のこと、OpenStackのこと、(先生のこと、などなんでもどうぞ( ゚д゚)ノ NGワードは「おっさん」です。 (https:/...

なんか「新規性と圧倒的成長を感じるものでないと」という使命感にかられたので

Solaris

という0x20歳以下のナウなヤングは触ったことがないが故に新規性があり、圧倒的成長感が得られるOSを入れてみようと思ったわけですね。

もちろん清楚かわいい美雲このは様もナウなヤングだから触ったことないよね!

しかしご存じの通り某Oracleさんのおかげで何かと面倒になってしまいました。

見ての通りこのブログ、勉強のためにGoogle Adsense貼ってます。

なので消耗してるの?とか言ってるけど炎上商法なんてやる気が無いのに「事業用で使ったとみなす。OTNライセンス違反な」と某Oracleさんから着火させられる可能性もあるわけです。ノーモア放火。

というわけで今回は古のOpenSolarisからForkした「openindiana」をインストールし、Dockerよりはるか昔から存在した元祖コンテナといえる「Zones」(昔で言うところのSolarisコンテナ)を作ってみたいと思います。実は自分も初めて触る最近のSolaris 11系です。

Zonesって?

Solaris 10から実装された機能で、当時はSolarisコンテナと呼ばれていたものです。絵にするとまさにコンテナというやつで、最近はDockerで割と身近になったので知ってる人も多いと思います。なので概要は省略。

Dockerとの違いですが、一番大きいのはデータの永続性があるところでしょうか。

なのでDockerのようにデータの保存先に困らず、普通の仮想サーバのノリで使えるのでとても分かりやすいのが利点です。

で、問題。いや動かしてみると問題しか無いんだけど。まずは各部の名称。先ほどの絵のようにSolaris 11で進化したついでに名称が色々と変わっています。

だいたい「大元のOSをグローバルゾーン、コンテナをゾーンと言うのは字面にするとややこしすぎる」ので、こちらのエントリでは大元のOSを旧名称である「大域」、コンテナを「Zones」と書きます。

今回の目標

こんな感じでConoHaの1台のインスタンスでWordPressを作ってみます。

独立性を考えるとWebサーバもZonesに…とやりたくなるのは分かりますが、今回はこれで勘弁して下さい。

今回の残念な制限

今回の検証の範囲外なのですが。プライベート側を使用した他のインスタンスとの通信がよろしくないです。

今回、上の絵の構成を作るにあたり、インスタンスに割り当てられているプライベート側のNICの上に、VNICという仮想NICを正味2枚、大域とZonesに作ってIPアドレスを割り当てます。

このVNICがかなり不安定というか、たまにPingが通るけどパケロスしてる時間のほうが長いという有様です。その割にARPは一発で飛んで互いのテーブルに乗っかるのは不思議だけど。

同じインスタンス内の大域とZonesのプライベート側の通信は普通にできるのですが、VNIC経由での他のインスタンスとの通信は大体ダメです。

元々Solarisのコンテナ自体が「バカ高いSPARCサーバの同一筐体内にいろいろなサーバを集約する」ことを主眼にしていますし、ConoHaだって仮想NICの上に仮想NIC作って妙なMACアドレスで通信するなんて想定してないだろうよ、ということでここは諦めたいと思います。

ISOイメージダウンロード

openindianaのダウンロードはこちらから。今回は最新の「Hipstar 2015.10」の「Text Install DVD」をダウンロードします。

さて旧ConoHaではsftpでアップロードできましたが、新ConoHaではAPIを叩いてクラウド側でダウンロード処理を行うようになってます。

んで「API叩くの面倒」という人のために、ひろのぶさんが「conoha-iso」なる便利ツールを公開してます。
コントロールパネルでAPIユーザを作成し、渋谷に向かってお礼を3回言いながら使いましょう。ありがたやありがたやありがたや。

conoha-iso - ISO image management tool for ConoHa

なおReadme.mdがわかりやすいので、使い方は特にここでは説明しません。

環境変数でうまくできない人は、素直に引数でパラメータを指定してみてください。

ただし、環境変数でも引数でも、直で叩くと他人にバレると非常にヤバい値をhistoryに残すことになります。

予想しうる不幸な事故への対策として、conoha-isoでの作業が終わったら

というシェル芸で、historyに残さず使用中のシェルを強制終了させることができます。

historyに残っちゃったら…。.bash_historyを編集して該当箇所を消すのがいいんじゃないですかね。証拠隠滅テクニックは覚えておくといいことがあるかもしれません。

事前準備

・ インスタンスを1発立てる

適当なOSでインスタンスを作ります。まずは一番安いのでいいでしょう。この場限りのネタインスタンスなんだから。

作成が完了したらコンソールを開いてログインし、shutdownして電源を落とします。

・ プライベートネットワークを作成しておく

インスタンスを立てる前に、プライベートネットワークを作成します。アドレスはお好みで。

また先ほど作成したインスタンスをネットワークに登録しておきます。

あ、IPアドレスってConoHa側でインスタンス単位で指定されるんだ…(ここでイヤな予感はしてたけど時間も無いので戻れなかった)

openindianaインストール

雰囲気が掴みやすいと思うので、インストールはスクリーンショットを貼りたいと思います。

これを見ると「Linuxより楽じゃね?」という気はしますが。

  • ISOイメージをmountする

「conoha-iso insert」を実行し、表示に従ってISOイメージをmountします。

  • インスタンスを起動してISOブートする

インスタンスを起動してコンソールを開くとISOブートが始まっており

SunOS Release 5.11」

と表示されていると思います。いいのか?

もう少し待っているとインストール開始です。

  • キーボード選択

日本語(JIS)配列の人は「23」、US配列原理主義者の人はデフォルトの「47」を入力します。

「Japanese-Type6」の意味が分かる人は…あ、NGワードだっけ。

  • 言語設定

普通に「Japanese」ですね。

  • インストールウイザードの開始

「Install OpenIndiana」ですね。

するとインストールウイザードが走るわけです。テキストの。

というわけでここから流れ作業になるわけですが、下の方を見るとキー操作説明があります。

基本的に「次へ」はF2です。ていうか操作はファンクションキーです。

しかし環境によってはファンクションキーを受け付けない場合があります。その場合は「Escを押して離した後に数字キー」という代替手段があります。例えばF2だと「Escを押して離して2を押す」って感じです。ていうかこの画面に書いてるこれ。

  • パーティション設定

こんな感じの「現在の様子」が表示されるのでそのまま進みます。

EFIかMBRの選択。MBRを選択して進みます。

実質上の選択肢がUEFIしか無くなる前に、自分はコンピュータ業界を引退してるであろう。

パーティション編集画面です。ConoHaのCentOSで作成されたパーティション構成が表示されています。

これらパーティション全てについて、F5を何回か押して以下のように一旦「Unused」にします。

一番上のパーティションでF5を何回か押して「Solaris2」にして、容量を全て(50GB)割り当てます。

1パーティションを全部Solaris2でいいの?いいんです。ここはさすがSolarisのForkなんで、ZFSのpoolが一発切られてswapやらなにやら自動で作ってくれます。

  • ネットワーク設定

ホスト名は皆様の宗教上の理由とかに合わせてどうぞ。

その下のネットワーク設定ですが、後で設定するので「None」を選択して次へ。

  • タイムゾーンと時刻の設定

まずは「Asia」を選択します。

「Japan」を探し出して選択します。

「Japan」が選択されてますので、そのまま進みます。

日時設定です。

ちなみにこの値はUTCで設定されます。ここである程度合わせるか、インストール後にntpdateを叩くかしてください。

  • アカウント設定

rootパスワードの設定をしてあげます。

また下には一般ユーザの作成項目があります。とりあえずここで「user01」というユーザを1人作ってみます。

  • 最終確認

F2を押せばインストール開始、戻りたければF3です。問題なければ進みましょう。

インストールが始まりました。あとは待つだけ。

  • インストール終了と後始末

あっという間に終わりました。F8を押してrebootします。

で、rebootしてもISOイメージをmountしたままなので、そちらからブートしてしまいます。もしくは何故かSSDから立ち上がってブート途中でフリーズしたりします。

ここは無慈悲にコンパネから電源の強制切断を行い、「conoha-iso eject」を叩いて(☝ ՞ਊ ՞)☝ウイーンとejectしてやります。そして電源ON。

するとGRUBが起動し、そこからOSが上がってきてログインの入力が出てきたらOKです。

基本操作

基本的にはUNIX系のそれです。

しかし普段Linuxを使ってると「チョットチガウ」ところもあったりします。そのときはmanページをどうぞ。

多分、Linuxがメインな人が一番困るのはこれだと思うので説明しておきたいと思います。いざという時に落とせないOSほどタチの悪いものはない。

  • ランレベルとshutdownコマンド

ランレベルはLinuxのそれとは全然違います。詳しくはこちらを参照。

conoha-iso - ISO image management tool for ConoHa

というわけでopenindianaにおいてshutdownに関連するランレベルは

「0: シャットダウン」「5: シャットダウン(電源断が可能であれば自動で落とす)」「6: 再起動」

という感じで、5がGUI起動でなくシャットダウンなのが注意です。ちなみにopenindianaにXなんぞ入ってない。

次にshutdownコマンドですが、書式がLinuxのそれとはちがいます。こんな感じです。

「-i」でランレベルを指定し、「-g」でコマンド実行後にshutdown動作を行うまでの猶予秒数を指定します。「-y」はapt-getのアレと同じ意味でYesの入力が省略できます。

ですのでLinuxでの「shutdown -h now」「shutdown -r now」はopenindianaでは以下になります。

なおConoHaの場合、ランレベル5を指定しても電源は自動でOFFにならず「Press any key to reboot」と表示されるので、0と同じ挙動になります。残念。

ネットワークの設定

はいではネットワークの設定。2つのコマンドを使いますが「dladm」はデータリンク層、「ipadm」はIPレイヤーをいじるコマンドです。

というわけで最初にI/Fの確認をしてみます。

NICのI/F名は「vioif0」「vioif1」です。さらにDBネットワークを追加すると「vioif2」が追加されます。

まずvioif0がWAN側です。ConoHaの場合、WAN側IPアドレスはDHCPで振られるので、DHCPクライアントの設定をします。即割り当てられます。

次に「vioif1」側のプライベートネットワークの設定です。

ここでは「VNIC」というのを作ってあげます。読んで字のごとく仮想NICです。Solaris 11から実装されたそうで。へー。

んでVNICは物理NICの上に作るモノなので今回はvioif1の上に、大域のプライベートネットワーク(192.168.1.1)用として「vnic1」、Zones用として「vnic2」を作成します。

なお、ここではZones用の「vnic2」にIPアドレスは設定しません(後でやる)。

すでにネットワークは疎通してますが、念のためOSを再起動しておきます。

んでOSが起動してきたら、最初の生中のごとくlsやwの次にping叩きたいですよね。大域から叩きましょう。

はい打てました。これでネットワーク周りはOKとします。

一発目のパッケージ更新の儀式

Solaris 11というかopenindianaにもyumやapt-getみたいな便利な「pkg」というのが存在するそうです。

ちょっと一発、全体のアップデートをかけてみましょう。ていうか忘れるとZones作るときエラーになります。

Zonesを作る

では元祖コンテナことZonesを作ってみます。

  •  Zonesの置き場所を作る

Zonesの置き場所は「/export/zones」の下にZones名でディレクトリを切って置くことにします。

まず最初にZFSのデータセットに「rpool/export/zones」を作成します。これをやらないとZonesインストール時にエラーで落ちて最初からやり直しになります。

  • Zones設定作成

今回作るZones(db01)の設定を作成していきます。

「Zones作成先は/export/zones/db01」「IPアドレスは192.168.1.101/24」「大域の/export/shareを共有ディレクトリとし、Zonesの/mnt/shareにmount」「自動起動有効」という条件です。後ろ2つは今回は必要ないのですが、紹介的な位置づけです。

zonecfgとzoneadmという2種類のコマンドがあるので注意してください。

  • Zonesのインストール

Solaris 10時代と異なり/usr等が大域と共用でなく独立しており、ダウンロードと作成に時間がかかります。

  •  Zones初回起動と設定

初回起動で設定ウィザードが走ります。Zonesを起動して「zlogin -C」でログインします。初回は-C(コンソール)を付けること。これ重要。

zloginでログインすると設定ウィザードが走っています。

インストールのときのようにスクリーンショットを貼ると縦に長くなるので、今回はテキストで必要項目だけ書きます。

初回のVT100選択以降は、インストールと同様にF2で進みます。

そもそも、ここでConoHa側から割り当てられてないIPアドレスを勝手に振っちゃってるのもよろしくない話ではありますが…

以上で設定が完了しログインプロンプトが表示されますので「~」→「.」でzloginを抜けます。sshでログインしてる人はsshからログアウトされますので再ログインしてください。

そして大域のrootから

だけでZonesにrootでログインできるようになります。

先ほどのzlogin -Cと異なり、exitで普通に抜けられます。

  • Zonesの起動と停止

大域から行います。

追加パッケージを入れてみよう

Webサーバは付属のApache 2.2を使い、PHPとMariaDB関連はpkgコマンドで追加することにします。

ただしWAN側に繋がっていないZones(db01)がパッケージをダウンロードできなかったりで面倒なので、大域から自身とZonesに対し同時でインストールするようにしました。ご容赦を。

  • パッケージ(PHP 5.6関連)のインストール

WordPressを動かすため、PHP 5.6をインストールします。

パッケージ(MariaDB)のインストール

公式は5.5か…

openindianaにMySQL突っ込むのは何だかヌメッとした感触があるので、MariaDBにさせてください。

WordPressを動かす

えっと。この辺についてはWebでたくさん書かれてるので、そっち見てもらっていいですか?(疲れた)

ここではopenindiana固有になるところを書いておきます。

注意点ですが、大域とZonesに同じパッケージが入ってるので、設定したりサービスを起動するマシンを間違えないようにして下さい。

  • 設定ファイルの位置

ここで気づいた。DHCPで振られるホスト名と逆引きが違うせいで、Apacheから怒られる…

どうせ運用することも無いこの場限りのネタインスタンスなので「hostname 逆引きできるホスト名」で手を抜きました。

  • サービス起動関連コマンド

とりあえず「確認はsvcs、起動停止はsvcadm」と覚えておけばいいでしょう。

サービスを起動してsvcsでステータスを見て、成功していれば「online」、失敗していれば「maintenance」となります。「maintenance」の場合は

という感じでsvcsに「-x」を付けると「どこのログを見ろ」と出てくるので、それを参照して下さい。

WordPressとご対面

おおっ!

おおおっ!

まあここでApache落として12月末でインスタンス消すんですけどね。

まとめ

全体的に「お前、本当にSolarisの子か?」って感じであまり安定してないので、実運用では使いたくない気はします。もっともこういう仮想環境で動かすことは想定していないでしょうし、物理で動かすと感想は変わるのではないかと思います。

とりあえず「新Conohaでopenindiana動きましたよ」というお話でした。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする