Apribase

ほーむぺーじ #33 Shorewall を Docker 対応にした

systemd - shorewall - docker

Docker はコンテナ起動時に iptables を使ってフォワーディングを実現してくるので、iptables 周りをいろいろ頑張らないといけませんでした。

iptables が操作されるということで、他に iptables を操作するソフトウェアを使っている場合はうまく共存するようにしなければなりません。

1. まずコンテナの通信を可能にする zone 定義を行う

まず Shorewall をドキュメントの基本に従って定義していれば、「ホスト-ファイアウォール-インターネット」間の ACCEPT DENY が出来る zone, interface, policy, rules が存在していると思います。

ここにコンテナが追加されることで必要になってくる要素を整理します。

1. コンテナがインターネットに出られる必要がある。wget などのため。
2. ホストがコンテナにアクセス出来る必要がある。nginx などリバースプロキシのため。

docker0 というデバイスを通して通信するという前提を踏まえて、zone に何でもいいので lxc などの名前で zone を定義するところから始めて interface を定義し、policy に 1 と 2 を追加しました。

なお ufw を使っている人は公式が FORWARDING を yes にするだけでいいと言ってます。

2. Docker は必ず Shorewall の後に起動しなければならない

Docker は iptables を操作します。Shorewall も iptables を操作します。

つまり Docker の後に Shorewall を実行してしまうと、Docker が作ったフォワーディング定義が消されてしまいます。従って起動順序は Shorewall の後に Docker になります。

systemd を使っている場合、After, Requires, Wants によって依存関係を定義できるので、これで順序を決めることができます。systemd を使っていない場合は知らない。

余談. ホスト OS はどうする

ウチのホストは今 Debian で、sysv-init は systemd に入れ替えています。

systemd を使う場合、最初から設定ファイルが含まれている CoreOS, CentOS, Arch を使ったほうが楽で、ウチはそれらを参考に自前で書いているので冗長感あります。

Red Hat は firewalld を使うようになったそうなので、まだ調べていないですが Shorewall 以上に楽が出来るのなら使う理由が生まれます。Red Hat は Docker サポートも始めましたし。

puppet の定義で apt リポジトリの GPG やらをたくさん定義しているので、ホストを CentOS にする場合 yum 用にパッケージリポジトリを書き直すのが少しだるいくらい。

ほーむぺーじ #32 Docker スキルを修得した (LightCounter の Docker コンテナを作った)

LightCounter - systemd docker puppet

ようやく Docker に手を出したけれど、正式版がリリースされたばかりなのでタイミング的には情報十分で良かったし、自作して使っている app-install.bash の「使用するアプリケーションは環境込みでインストールを自動化」というのと同じ考えで環境ごと配布できるのは良いです。

ちょっとした感想文と、「起動してみました」系の話では足りていない「公開しました」までの話を。今 LightCounter は Docker で動いています。

1. イメージビルドの開発の流れがコンパイルしてから実行の流れと同じ

予想以上に感心したのが、「イメージビルド、実行確認、リビルド、実行確認」というように、実行終了すれば破棄されるのはアプリケーションのメモリが解放されるのと同じなので、通常のアプリケーション開発と同じ流れで出来ること。通常の開発だったらテスト実行だろうという揚げ足はいらない。

Bitbucket にソースをコミットするとイメージが Docker Hub にビルドされるおかげで、ソースだけでなくビルド結果のイメージまでも外部に任せられるので、実際に使うときには docker run apribase/lightcounter するだけですぐ使えるというのは革命感ある。

余談だけど Dockerfile がプロジェクトルートにない場合、指定したディレクトリ名が長すぎると打ち切られて Dockerfile が見つからない Docker Hub のバグ的なものを見つけたのだけれど、これどこに報告すればよいのかしら・・・。Docker の GitHub issue でいいのか、Docker Hub に専用フォーラムがあるのか・・・。

2. Puppet と違って Docker は「何でも知っている」

Puppet の不満点は「何でもは知らないわよ、書いたことだけ」というあくまでオーバーライド形式であって、書いてないことは未管理なだけで存在はしていました。

したがって Puppet で書いたことは消してもロールバックされるわけではなかったけれど、Docker で書いたことはリビルドでやり直せるのがすごく良い。それ Vagrant でとかいう揚げ足はいらない。

Docker で起動したサービスの状態を保護するために、当然 Puppet は必要です。

3. Docker コンテナを systemd で「起動する」までは学習コストそんなにない

systemd unit ファイルは真面目に Docker との依存関係 After Requires を書いたり、事前準備のために ExecStartPre のマルチラインが必要だけれど CoreOS のドキュメントで足りました。

学習コスト的には1日もかからないのでかなりおいしいほうだと思うけれど、もしも Solaris Zone や BSD jail を触ったことすらない人だとどうなるんだろう。大丈夫だとは思うけれど。

サービスを Docker で「起動する」まではすぐにできます。

4. 実際に公開しようとするとファイアウォールの理解が必須だった

まず Nginx からリバースプロキシで LightCounter へリクエストを渡そうとしたら反応がなく 502 エラーになります。

ufw の場合は FORWARDING を yes にするだけで良いというドキュメントが公式にありますが、ウチでは Shorewall を使っており、現状 Docker にも Shorewall にも方法は書かれていないため、Shorewall をちゃんと理解して仮想ネットワークに合わせてファイアウォールの記述をしっかりしないといけませんでした。頑張ったので Shorewall の理解が大変深まった。

ちなみに ufw に乗り換える選択肢も用意してみたけれど、Shorewall と比べて致命的なデメリットがあったので破棄。

5. 永続化ボリューム権限の整理は保留

immutable なコンテナの公開まではきたものの、mutable なデータを保存する必要がある場合は、ホストボリュームをマウントするか別コンテナのボリュームをマウントするかの二通りが現状与えられている選択肢。

docker コンテナを root で動かす例がほとんどだけれど、LightCounter コンテナでは useradd lightcounter してファイルに書き出しているため、マウント用のホストディレクトリはコンテナユーザの id をオーナーにする必要があると思います。

VOLUME コマンドは強制 root 実行なので、現状 Dockerfile で mkdir chown をすることにしたけれど、これだとホストにその id が既に存在していた場合、その id を使っているプロセスからデータを参照されることになってしまいます。

GitHub でもまだ議論されている段階だったけれど、ホスト側からユーザをコンテナに渡す方法のほうがいいかもしれないし、あくまで共有ディレクトリの扱いの話だから Docker の話に閉じないし、何かしらの綺麗なアイデア次第の話だと思うので識者であればもう答えを見つけているかもしれない。

ほーむぺーじ #31 カウンタサーバ第4弾 ClojureScript 版 LightCounter 作った

LightCounter - ClojureScript Node

Node.js をランタイムとして実行する ClojureScript 版カウンタサーバを書きました。

第3弾の Clojure 版がこれの布石でしたが、期待通り Node であれば Go の 3MB とまではいかないものの、JVM の 60MB よりは遙かにマシで 20MB 程度で動かせます。

ClojureScript で Node を扱う場合は advanced externs の理解は必須で、外部 JS を綺麗に扱うには自分なりのベストプラクティスな構成を確立しておかないとなりませんが、そこは今までの経験値で既に達しています。

ほーむぺーじ #29 Grunt を止めて Leiningen で Bower と SassC と UglifyJS を統合した src dist 構成にレイアウト

Node 公式のチュートリアルは、なぜわざわざ 127.0.0.1 なんてアドレスを指定してるのかなあって思ったら、割と低レイヤーでリクエストを待ち受けるネットワークアドレスの指定だったいう ClojureScript が全く関係しないところ。

実際に使うときは Nginx からリバースプロキシで 127.0.0.1 にまわすけれど、確認用にグローバルに叩こうとしたら受け付けなかったところで気づいたというか、それまで気にしてなかったというか。

単体であればすぐに気づくし何を今更案件なものの、これはその後の docker への布石であり、systemd, shorewall, iptables, docker, lein, node という複数の要素が絡んでいたために疲れたという経緯。

ほーむぺーじ #30 カウンタサーバ第3弾 Clojure 版 LightCounter 作った

LightCounter - Clojure Undertow

Python と Go に続く第3弾 Clojure 版のカウントするだけサーバを書きました、ボツ前提で。

ボツ前提というのは、Go のときに書いたように JVM 自身が 60MB 程度を喰ってしまうので、気軽にサーバをポンポン立ち上げる用途で困るため。

Clojure で書く場合は Ring インターフェースで扱える Undertow を基本に、カウンタについては atom に入れて、たまにファイル保存の処理は Go のときと全く同じに core.async go を使います。

そして試しに動かしてやはり JVM は大きいなあというのを確認した後に、Clojure は JVM 以外の環境でも動かせるという利点を生かして、JavaScript や Ruby の実行環境で妥協してみたらどうかなあという次への布石でした。

買った本 #205

DSC06886

9巻10巻でエンテ・イスラ編も終わって、ついに11巻で最終編が始まり、はたらく魔王さまの物語は最初から終わりが見えていてつながっていたんだなあっていう展開でした。

3巻でアラス・ラムスが出てきたときには、こんなクセのある子供を序盤に登場させてきたので、物語的に1回が限度だろうから別れ話がすぐ出てくるのかと思っていたけれど、そもそも1巻から最終巻までで一つの物語であって、通常の物語の最終章のようなものが既に3巻のあたりから始まっていたんだなあと。

千穂ちゃんがみんなが一緒にアパートの一室でゴハンを食べる夢を語っている時点で、もうあれが最終話のゴールとして決まっていて、キャラも闇雲に増えていたわけではなくて、ちゃんとその夢の絵になるキャラが揃ってたんだなあとか。

千穂ちゃんが語った夢が何巻だったか思い出せない(6巻の大元帥の話より前だとは思う)。

「是非見てみたいな、その光景。日用品で縁起を担ぐ魔王を一生バカにする勇者か」
「言ってろこんちくしょー!!」
「できれば・・・・・・ずっと傍で見ていたいな。その光景を」

しつこいくらいに鈴乃にも語らせていたけれど、そういう夢は大好きなので構わない。

少しずつ広まった人間関係でほのぼのした日常の絵が、成恵の世界を思い出すなあ。

一つの物語を10冊越えで描くなんて今時相当貴重で、今頃になってはたらく魔王さまの株急上昇。

14巻くらいまでいったら終わるのかな。綺麗に終わりそうなので全く心配が必要ない。

B00F5P48L2.01.MZZZZZZZ.jpg4048661612.01.MZZZZZZZ.jpg4048665545.01.MZZZZZZZ.jpg

買った本 #204

DSC06885

はたらく魔王さま、マグロナルド・バリスタ誕生の6巻、短編集の7巻、エンテ・イスラに舞台を移す新章が始まる8巻。

異世界の事情と日本の庶民っぷりがあまり融合出来てないなあという印象だった最初と比べて、やっとエンテ・イスラ側の悪魔たちが今の魔王を認めるようになる展開や、千穂ちゃんの純粋さが神聖を帯びてきたりといった具合にうまく融合してきました。

アニメ(原作2巻まで)の鈴乃もいまいち好感を持てるようなキャラになり得なかったのに、やっと日常の一人として馴染んできて、交友関係が広がっていく様子が見ていて幸せになれる。

基本的に落ち着いているキャラが多いので、自分の好きになるラノベってこういうのだよなあと思いながら。

こういう落ち着いた人には昔から憧れるので、その立ち振る舞いや話し方の落ち着きっぷりを学びたいと思うから読むモチベーションが捗るんだろうなあって。

魔王様の素直さと千穂ちゃんの純粋さと芦屋さんの落ち着きが欲しい。

4048869906.01.MZZZZZZZ.jpg4048914065.01.MZZZZZZZ.jpg4048915800.01.MZZZZZZZ.jpg

シャリーのアトリエ

シャリーのアトリエ全トロフィー取得

エスカとロジー以上に二週目が単純作業でだるく、シナリオも物足りず、フリーズがアーランド以降最高に多くて、せっかくのキャラがもったいないなあというのが最終的な感想。

全然終わってないのにエンディングが三部作の締めみたいな終わり方だったせいで、今作でアトリエ黄昏シリーズは終わったのかどうか判断がつきません、終わりなら PS3 を手放すつもりなのですが。

作れますよ?

シャリーのアトリエ 作れますよ?

今回印象に残ったエスカさん。

ソール「エスカさんを行かせますか」
エスカ「え?わたしですか?」
ラウル「おいおい、一人で行かせる訳にはいかねえだろ」
ソール「こう見えてエスカさんは、錬金術師としてはかなり優秀ですからね」
ラウル「んなこと言っても、食料も補給できねえし・・・」
エスカ「作れますよ?」
ラウル「いや、だが水や戦闘用の物資だってな・・・」
エスカ「作れますよ」
ラウル「・・・移動手段だってねえんだぞ」
エスカ「作れますよ!」
ラウル「・・・・・・もういい、好きにしてくれ」

最終装備とステータス 効力999

シャリーのアトリエLv99

二人のシャリーの武器は、武勇のソウル、覇軍のソウル、ツインバースト。
防具は回避特化で神秘のシャツに慈愛のソウル、忍耐のソウル、エボルブボディ。
プラネットスフィアとソウルディバインに、土霊のソウル、空人のソウル、星人のソウル。

シャリーのアトリエLv99

後衛の武器は、武勇のソウル、理力のソウル、点滴穿石の追撃。防具は適当。
雷神のころもに、土霊のソウル、空人のソウル、魔心のソウル。
ソウルディバインに、土霊のソウル、空人のソウル、黒き神のソウル。

難易度ノーホープの二週目で、基本的にほとんどの攻撃を回避できてバースト攻撃出来るので負けることはないものの、ダメージを受ければ割と一撃で落ちるのでソウルディバインは何度も発動しました。

それ以上に、強敵と戦うことによるフリーズのほうが何度も発動しました。

最終アイテム 効力999

シャリーのアトリエ調合999

1週目ロッテで揃えたけれど、基本は風チェインをつなげて火の割合増加を付けてようやくチェイン9999になるのが基本。

属性値は調整のためにほぼスキルなしの自前である程度満たさないといけなくなるため、生きてるゴミ箱なんて全てに調合スキル枠増加を入れるまでは基本なものの、オールドストーンと全時代機巧ベルトの+40に影響属性を付与することでぎりぎり80を満たすことでなんとか効力999かつ属性効力を満たせます。太陽の花では届きません。

エリキシル剤は、永久機関、オートユーズ、ジャンボな祝福を一つ。永久機関、マッハスロー、魂宿りを一つ。
ステータスアップは割と使えたので、ジャンボな祝福を魂宿りにすればよかった。

シャリーのアトリエ調合999

四属性のアイテムを、秘伝の破壊力、一撃必殺、性能強化を基本に揃えました。
この効力ですらノーホープだとちょうどよい程度の攻撃力で火力過多にはならず、ガラスのバラ、かぼちゃドール、生きてるゴミ箱によるデバフ効果のほうが目立った印象。

ガラスのバラも超純水に影響属性・風を付与しないといけなかったあたり、チェイン枠増加と同様に影響属性も重要な要素。

今回で黄昏シリーズは終わり?

シャリーのアトリエ

メルルのときと違って、別に三部作の最終作的な作品ではないのに、エンディングがあたかも三部作完結ですみたいなエンディングです。

キャストコメントでも声優さんたちも今作が最終作なのかどうか判断つかない感想でしたし。

瀬戸麻沙美(ウィルベル)「この三作目は、完結編みたいになっちゃうのかな」

村川梨衣(エスカ)「黄昏シリーズ第三部作、今回が最後のシリーズとなります。いやなりますとか言ってまだわかんないですよね。個人的にはそうなのかなって思っちゃってますけど」

ほんと終わりならこれでアトリエを最後にするつもりだったのに、結局黄昏について終わらせないままだったし、なのにエンディングは三部作完結!みたいになってたし、大地、空、海というシリーズ名からして次はないと思うのだけれど。

「わたしたちは黄昏に立ち向かっていく」という終わりかたで締めているつもりなら、それは「俺たちの戦いはこれからだ END」ということに。

おまけディスクのエスカとロジーのドラマCDはよく出来ていたので、やっぱりキャラデザインはよく出来ているほうだと思うので、ゲームで消化不良な分をドラマCDでいいので生かしてほしいなあ。

B00J88WC7Y.01.MZZZZZZZ.jpgB00KR7Q7YY.01.MZZZZZZZ.jpgB00KR7KP10.01.MZZZZZZZ.jpg4048668706.01.MZZZZZZZ.jpg

ステラが黒髪ロングに黒ストッキングで肩見せヒラヒラ民族衣装と完璧だったので、この服デザインが今作一番の見所でした。

1 / 17812345...102030...最後 »