88171.net

KangerTech NEBOX

いろいろあってタバコを辞めようかなと思い始めた矢先、友人Jからvape(いわゆる電子タバコ)を始めたという話を聞いて、手を出してみた。結局のところ禁煙には成功してないわけだけど(その話はまた別の機会に)、紙巻タバコはスッパリ辞めてvapeに落ち着いている今日この頃。

で、本格的にvapeをやろうと思った時に買ったのがKangerTechのNEBOX。まあJと飲み屋でビール飲んでる最中に勢いでIYHしたんだけども。

KangerTech NEBOX (Red)

世の中にはそれこそいろんなメーカーからいろんなデバイスが出回っていて、ガジェオタ気質のある自分はあまりの沼の深さにビビってしまい、こだわらずに使えるものが欲しいなと思ったのが理由の一つ。あとはタンク容量が破格の10mlという点も俺的にはポイントだった。同じオールインワンというコンセプトだと実質的な後継機のCUPTIがあるけど、国内では入手性良くないしちょっと高いしで見送った。

評判と実際

このNEBOX、ぶっちゃけ海外では評判が悪い。何をどうやってもリキッドが漏れるとか、樹脂製のタンクが曇るとか、クレーマーの声のデカさを差し引いて見てもちょっと心配になるレベル。

ただ実際に使っている限り、各部のスレッドをきちんと締めて(メーカーが推奨している通り)充電時に横にして置いておけば、リキッドが漏れるようなことは全然なかった。もちろんジュルったときはコイルの真下のエアフローから少しは滲むけど、それはボトムフローなアトマイザーなら必然なんじゃないかと。

メーカーがPTCG製だと言うタンクの耐久性は、正直リキッドとの相性によるとしか言えない。調べた限りでは割れたという話は聞かないけど、タンク交換はできないからちょっとテストしてみるというわけにもいかないので、そこを不安に感じる人は避けた方がいいんじゃないかな、という感じ。

自由度の低さ

知ってて敢えて買ってるのであんまり愚痴っぽいことは言いたくないけど、やっぱり自由度の低さ故に頭を抱えてしまうこともある。

買ってからしばらくは普通にSS 0.5ΩのSSOCCを使ってたんだけど、Very Berry Hibiscus Lemonadeというリキッドがどうにもバッチバチ爆ぜてしまった。SSOCCのウィッキングとの相性なのか、はたまた俺の扱いが悪かったのかわからないけど、コイル変えてもNi200 0.15Ωにしても出力調整しても、どう頑張っても解消しなかった。

結局あーだこーだ試してる間にコイルを2本ダメにしてしまったので、リビルドすることにした。NEBOXでリビルドするなら付属のMini RBA Plusユニットを使うことになるんだけど、正直やってやれないことはないという感じ。というのも、コイルの空焼きという作業が構造上不可能なので、マイクロで巻いてもホットスポットの除去ができない。等間隔で巻いて抵抗値だけ確認してあとは実際に吸ってみる、という、とてもとても漢気あふれるビルドをするしかない。

あと、なんか調子悪いなあというときにアトマイザーだけ変えてみたり、的な調べ方もできないしね。

まとめ

評判ほど出来の悪い子じゃないのは確かなんだけど、オールインワンならではの扱いにくさは間違いなくあると思う。

結局CUPTIも同じだと思うけど、いろいろ試させてくれたり勉強させてくれるような懐の深さは皆無なので、(俺みたいに)初心者が最初に買うデバイスとしては正直オススメできない。マジメにリビルドしたくなったらSSOCC(というかMini RBA Plus)が刺さるアトマイザーを別に買わなきゃいけないし、加えてMODも必要。出費かさむよねえ。同じ値段払うなら最初は普通にMOD別体のスターターキットを買っといて、その気になってから好きなRBAを1本買ってみた方が間違いなく幸せだと思うよ俺は。

たぶんNEBOX、というかそのオールインワンというコンセプトが光るのは、いろいろ渡り歩いて円熟した上級者さんがビルドとか味とかそういう細けぇこたぁいいんだよなんて言いながらお気に入りのリキッドを詰めてお出かけ用の鞄に放り込んどく、そういう完全サブ機としてのポジションなんじゃないのかなあ、と思う次第。

Hardware Mulfunction

Windows がハードウェアベンダに全てを丸投げした決定的瞬間。

そんなこんなでバタバタしていて、このサーバの移行作業のモチベーションが上がらず焦ってるところ。

無駄にサーバ2台体制になってしまうので、どんなに遅くとも今月末までにはなんとかしないと…

夕焼け

iPhone 5s, ISO 32, f/2.2, 1/30 sec, 0 EV

こういう空は、ちょっと目を離した隙にガラッと表情を変えるから油断ならない。

Sieve 入れてみた

とかさんざん dis っておきながら、結局 Dovecot の Sieve プラグインを入れてるというこのザマね。

念のため言っておくと、配送時に特定条件で IMAP フラグをいじる方法が現実問題として他になくて、仕方なく入れたんだからね。言語仕様はやっぱりどうしようもなく気持ち悪いし、 implicit な挙動があれこれあって念入りに sieve-test しないと怖くて使えたもんじゃないし、実装毎の独自拡張がざらにあったりする時点でお察しですよ。まぁ syntax の気持ち悪さという点では Procmail も相当だけど、俺的には Procmail の方が全然食える。

とまぁ誰得なヘイトを撒き散らした (もしくは自分が如何に古臭い人間かを晒した) ところで、導入メモ。

要件整理

大きな要件は以下の二つ。

  1. ベイジアンフィルタ (具体的には Bogofilter ) で spam 判定されたメールを Junk フォルダに振り分ける。

  2. ヘッダ・本文中の文字列パターンに応じてフォルダに振り分ける、もしくは IMAP フラグを立てる。

前者が Sieve にとっては鬼門。 Procmail なら判定と振り分けをたった2行で書けるのに、 Sieve にはそもそも個別のユーザ権限で外部コマンドを叩く術が存在しない。あーはいはい、セキュリティ万歳、アーキテクチャ非依存万歳。ベイジアンフィルタは各ユーザが独自に DB 管理できて然るべきだろjk、とか語っても始まらないので、百歩譲って (どうせこのサーバのユーザは俺一人だし‥‥) After-Queue Content Filter の仕組みを使って Postfix のレイヤーで Bogofilter に通し、 Sieve ではヘッダを見て振り分けることにした。 extprograms でもイケるのかもしれないけど、できるだけ Sieve の深みには嵌まりたくない。

後者はさすがに余裕だろ、とか思ってたら落とし穴があって、 少なくとも Dovecot の Sieve 実装であるところの Pigeonhole (0.3.1) では、 body を :regex にかけると ^$ がいずれかの行の先頭・末尾 ではなく body の先頭と末尾にしかマッチしない。あーはいはい、 body が一つの string なんですね。もう :contains でいいよ好きにしろ。

設定方法とか

ターゲット環境が Debian wheezy 標準の Postfix + Dovecot + Bogofilter であることは大前提。

1. mailbox_command で LDA を Dovecot に

2. smtpd を経由するメールが Bogofilter を通るように

3. Dovecot Sieve プラグインのインストールと設定

4. ユーザ用 Sieve スクリプトの準備と配置

5. (option) 再学習の仕組み作り

Arrange for users to send misclassified mail to a particular mailbox and make sure that the database is updated regularly.

file:///usr/share/doc/bogofilter/integrating-with-postfix

感想

設定が済んでちゃんと動作してるのが無事確認できてしまうと、まぁそこそこの満足感があったりするのが SE としての悲しい性なのだけど、一方で Sieve を導入したことでこれからチョー夢がひろがりんぐ、とは全く思えないので、労力に見合うだけの価値があるかと聞かれれば、否。既に Procmail とか maildrop とかでバリバリ設定作り込んでるユーザが「 Sieve 、いいなぁ‥‥」とか反射的にヨダレ垂らす類のもの じゃない のはきっと間違いない。 Sieve にしかできないことなんてほとんどないし。

要は、ユーザみんな virtual なんで古き良き手法じゃユーザ個別のフィルタリングとか無理なんですよね、みたいなそこそこデカいメールシステムを作るときに ManageSieve とか共通スクリプトとかガンガン使いつつキモいところは UI でうまく隠蔽してほらフィルタリングできますよ vacation だって飛ばせますよとか売り込みたい、そんな SIer ポジションな皆様向けの機能だと思うんですよね、 Sieve って。まぁ知ってたけど。

rrsync がステキ

必要なディレクトリだけ cpio なりでアーカイブして、 rsync over SSH で吸い出すことにする。 まだ設定してないけど。

88171.net :: FreeNAS 稼働開始

というわけで、この鯖 (さくらの VPS) のクリティカルなデータを自宅の NAS にバックアップしましょう、と、ようやく重い腰を上げた次第。で、前々から目をつけてた rrsync がいざ使ってみたらちょいステキだったので軽く紹介してみようかと。

rrsync とは何ぞや

かの有名な rsync に付属のプログラム、というか 200 行ちょっとの Perl スクリプト。名前の由来は Restricted rsync の略 (のはず) 。

いざインターネット越しでサーバからデータを吸い出す処理を自動化しようと思うと、これが単純に見えて意外とめんどくさい。

このモヤモヤをさくっと解決してくれるのが、 rrsync 。

ざっくり使い方と仕組み

まずは rrsync をサーバ上のどっかに置く。 Debian 系のパッケージならたぶん /usr/share/doc/rsync/scripts/rrsync.gz に gzip 圧縮されたものが、 source tarball なら support/rrsync に生スクリプトがあるはず。

次に rsync したいアカウントで普通に鍵ペアを作って、公開鍵認証の設定をする。で、ログインできるのを確認したらサーバ側でおもむろに authorized_keys の command= に rrsync を設定する。アクセスを許可するサブディレクトリと、必要なら -ro (read-only) オプションも。

これだけで、そのアカウントの権限で SSH ログインする際、許可されたサブディレクトリに対する rsync アクセス ( -ro オプションが付いていれば pull なアクセス) 以外は慈悲なく蹴られるようになる。

仕組みとしては、公開鍵の設定で起動された rrsync が本来リクエストされた rsync のサーバ側コマンドライン (OpenSSH の仕様上、 $SSH_ORIGINAL_COMMAND から取れる) と自分の引数を突き合わせて、問題がなければ rsync を exec するというもの。まぁ言ってしまえば単なるラッパなんだけど、これマジメに自分で書こうと思うとかなりめんどいはず。

まとめ

めんどくさいので細かい設定手順とか書かなかったけど、まぁ実際に自分で rrsync のソースを読んでみてくだせぇ。大した分量じゃないし、設定方法も書いてあるし。

rrsync を適切に設定できれば、万一秘密鍵を盗まれても被害を最小限に抑えられます。

#まぁ、そもそも秘密鍵を盗まれるという管理体制が問題アリアリなんじゃ、というツッコミもあるけど、それはまた別のお話。

参考文献


2015-03-07 追記

どうも2月の頭くらいからバックアップが止まってた様子。いろいろ調べてみたところ この FIX で、 crontab に rsync のコマンドラインを書くときにリモートパスをより一層ご丁寧にクォートするようになったことが原因らしい。

"user"@remote-host:\""remote-path"\"

つまりこれは FreeNAS のエンバグか?と言えばそう簡単な話でもなくて、普通はサーバ側の rsync もシェル経由で実行されるので、シェルがクォートを外してくれるから何ら問題はない。一方で rrsync は $SSH_ORIGINAL_COMMAND を自力でバラして解釈するので、結果的にクォートを外さずに rsync にパスを渡してしまい、

rsync: link_stat ""remote-path"" failed: No such file or directory (2)

とか言われるというわけ。そりゃ、ねーわ。

まぁイレギュラーなことしてるのはこっちですよねー、というわけで rrsync にクォート外す処理を入れて回避。

--- ./rrsync    2015-03-07 00:37:07+09  1.1
+++ ./rrsync    2015-03-07 00:43:58+09  1.2
@@ -180,6 +180,8 @@
       s{^$}{.};
       die "$0: do not use .. in any path!\n" if m{(^|/)\\?\.\\?\.(\\?/|$)};
     }
+    # Remove quotation from args
+    s{^["'](.*)["']$}{$1} if m{^".*"$} or m{^'.*'$};
     push(@args, bsd_glob($_, GLOB_LIMIT|GLOB_NOCHECK|GLOB_BRACE|GLOB_QUOTE));
   }
 }

セキュリティ的に本当に大丈夫かなこれ‥‥。