今週は全文検索エンジンgroongaとその関連ソフトウェアがいろいろリリースされました。
以下がリリースされたソフトウェアとそのバージョンです。
オブジェクト生成ライブラリFabricationにActiveGroongaサポートを追加するライブラリ。gemでインストールできます。
% sudo gem install activegroonga-fabrication
使うための準備はこれだけです。
1 |
require 'active_groonga_fabrication'
|
後は、通常のFabricationの使い方と同じです。
今週リリースされたgroonga関連のソフトウェアを紹介しました。
そういえば、先日、groongaを使ったアプリケーションであるるりまサーチで受賞した第3回フクオカRuby大賞のコミュニティ特別賞の賞状が届きました。
Debian GNU/LinuxやUbuntuなど最近のLinuxディストリビューションではインストール時にディスクの内容を暗号化する設定をすることができます。インストーラのメニューで選択するだけなので、簡単に設定できます。
しかし、groongaの開発に参加していて、頻繁な単体テストの実行でデータベースを作成・削除を繰り返すなどキャッシュが効かないディスクI/Oが多い使い方をする場合は、暗号化による速度劣化を体感してしまいます。Linux上で開発をしている場合はよくあることですよね。
この場合、「一部だけ暗号化しない」または「一部だけ暗号化する」というように記憶領域を使い分ければ、安全性を高めながら開発効率を落とさずにすみます。しかし、インストール後に使い分けたくなった場合、追加のディスクがないと「一部だけ暗号化しない」使い方をすることはできません*1。
そこで、ここではディスクを追加しないで「一部だけ暗号化する」簡単な方法を紹介します。インターネット上には日本語の情報があまり見つからない*2のですが、これは需要がないからという気もします。が、気にせずに続けます。
loopデバイスを使うとディスク上のファイルをディスクのように扱えます。これを利用して、暗号化していないディスク上にイメージファイルを作成し、それをloopデバイスで追加のディスクのように扱えるようにして、そこに暗号化ファイルシステムを作成します。暗号化したいファイルはイメージファイル内に保存し、暗号化しなくてもよいファイルはいつも通りの場所に保存します。
これで追加のディスクなしに「一部だけ暗号化する」ことができます。簡単ですね。
まず、cryptsetupをインストールします。
% sudo aptitude -V -r -D install -y cryptsetup
暗号化したいファイルを保存する領域として利用するイメージファイルを作成します。保存したいデータサイズを考えて作成してください。以下は20GBのイメージファイルを~/encrypted.imgに作成する例です。countの値でサイズを調整してください。
% dd if=/dev/zero of=$HOME/encrypted.img bs=1M count=20480
イメージファイルができたらloopデバイスに関連付けます。
% sudo /sbin/losetup /dev/loop0 ~/encrypted.img
これでデバイスファイルのように扱うことができるようになったので、イメージファイルを暗号化のために初期化します。初期化をすると内部のデータが壊れるので、確認のためのプロンプトがでます。今回は新しく作成したイメージで中には大事なものは何もないので大文字で「YES」と入力してください。
% sudo /sbin/cryptsetup luksFormat /dev/loop0 WARNING! ======== This will overwrite data on /dev/loop0 irrevocably. Are you sure? (Type uppercase yes): (YESと入力) Enter LUKS passphrase: (パスフレーズを入力) Verify passphrase: (確認のため同じパスフレーズをもう一度入力)
暗号化のための初期化が完了したら暗号化して読み書きできるデバイスファイルを作成します。
% sudo /sbin/cryptsetup luksOpen /dev/loop0 encrypted Enter passphrase for /dev/loop0: (初期化時に設定したパスフレーズを入力)
これで、/dev/mapper/encryptedというデバイスファイルができます。このデバイスファイル経由で読み書きすれば暗号化されるので、今後はこのデバイスファイルに対して操作します。
まず、デバイスファイルをフォーマットします。
% sudo /sbin/mkfs -t ext4 /dev/mapper/encrypted
mountし、読み書きできることを確認します。
% sudo mount -t ext4 /dev/mapper/encrypted /mnt % ls /mnt lost+found % echo test | sudo tee /mnt/file % cat /mnt/file test
これで初期設定は完了です。後始末をしましょう。
% sudo umount /mnt % sudo cryptsetup luksClose encrypted % sudo losetup -d /dev/loop0
umountして暗号化デバイスを閉じてloopデバイスの関連付けを削除しています。
実際に使うときは必要になったときに、以下の手順を行います。
用が済んだら逆順に後片付けをします。
しかし、これでは面倒なので、シェルスクリプトを作ります。
mount-encrypted.sh:
1 2 3 4 5 6 |
#!/bin/sh sudo mkdir -p /mnt/encrypted sudo /sbin/losetup /dev/loop0 ~/encrypted.img sudo /sbin/cryptsetup luksOpen /dev/loop0 encrypted sudo mount -t ext4 /dev/mapper/encrypted /mnt/encrypted |
umount-encrypted.sh:
1 2 3 4 5 |
#!/bin/sh sudo umount /mnt/encrypted sudo /sbin/cryptsetup luksClose encrypted sudo /sbin/losetup -d /dev/loop0 |
以下のように使います。
% mount-encrypted.sh Enter passphrase for /dev/loop0: (パスフレーズを入力) % (/mnt/encrypted以下を使う) % umount-encrypted.sh
実際は以下のように/mnt/encrypted/以下に1つディレクトリを作り、そこを一般ユーザ権限で読み書きできるようにし、そこに対して一般ユーザで読み書きするようにすると便利でしょう。
% sudo mkdir -p /mnt/encrypted/$USER % sudo chown -R $USER:$(id -g -n) /mnt/encrypted/$USER % echo test > /mnt/encrypted/$USER/file % cat /mnt/encrypted/$USER/file test
さらに、メールボックスなど暗号化したいファイルは暗号化イメージにmvして、ホームディレクトリからはシンボリックを張ると暗号化以前と同じように使えます。
% mv ~/Mail/ /mnt/encrypted/user/ % ln -fs /mnt/encrypted/user/Mail/ ./
Debian GNU/Linuxで、通常の暗号化されていないディスク上に追加のディスクなしで暗号化した領域を作成する方法を紹介しました。データを暗号化した領域に置いておくとディスクを盗まれたときなどに簡単にデータを読み出すことができなくなり、万が一のときの安全性が高まります。
しかし、ログインして利用しているときは同じマシンにログインしているユーザからは見えてしまう可能性があります*3。暗号化しただけで安心しないで、大事なデータは適切に扱うようにする必要があります。
1ヶ月ほど前になりますが、検索エンジンについての本が出版されました。GoogleなどのWeb検索システムからAmazonなどのショッピングサイトまで、今では検索システムはなくてはならないものになりました。そんな検索システムのベースとなる考えや知識などを把握したい場合に向いているのがこの本です。検索システムを作ろうとしている人には読んで欲しい一冊です。
「この本を読めば独自の検索エンジンを作れるようになる!」といった類の本ではなく、「検索エンジンの基本がわかる!」という類の本です。そのため、「この検索エンジンをもっとカリカリにチューニングして性能をあげたい!」というときに読む本ではありません。そうではなく、「検索エンジンについてまとまった知識がないので、基本をしっかりおさえたい!」という用途向きです。
著者は全文検索エンジンgroongaのメイン開発者の森さんですが、groongaなど特定の検索エンジンに依存した内容ではなく、検索システム全体の基本について書かれています。つまり、検索エンジンだけではなく、クローラーについても、利用者の入力から質問の意図を汲み取ることについても、検索システムに必要な機能は網羅的に扱っています。
もちろん、一番ボリュームがあるのは検索エンジンの部分で、様々なアルゴリズムが登場します。アルゴリズムの登場の仕方が段階的なので読み進めやすくなっています。「○○という問題があります。」→「△△でこれを解決できます。」→「次は●●という問題があります。」→「▲▲でこれを解決できます。」といった具合です。
プログラムで実装するためにアルゴリズムを説明する場合は細かいことまで説明した方が便利です。しかし、この本ではアルゴリズムの重要なアイディアだけを抜き出して図も使いながら説明しているため、アルゴリズムのコンセプトを理解しやすくなっています。注釈に参考文献が載っているのも嬉しいところです。もっと詳しく知りたいときは参考文献の方をあたることができます。
検索エンジンについてのオススメの本を紹介しました。
検索はこれからもっと重要に、そして便利になっていくでしょう。例えば、kdmsnrさんが若い頃はかわいかったことを検索することがもっと重要に、そして便利にできるようになるかもしれませんね。
先日milter manager 1.6.9をリリースしたので、久しぶりにmilter managerについて紹介します。
milter managerはサーバーサイドの迷惑メール対策システムをできるだけ簡単に構築するためのフリーソフトウェアです。その秘密は強力な設定記述力にあります。
多くのソフトウェアはパラメーターを変更することでプログラムの動作をカスタマイズすることができます。milter managerにはRubyという本格的なプログラミング言語のインタプリタが内蔵されていて、単にパラメーターを変更するだけではなく、システムにインストールされている迷惑メール対策プラグインを自動検出する(設定の自動化)、怪しい送信元は迷惑メールチェックを強化するが認証済みユーザは緩くする、といったこともできてしまいます。しかも、多くの便利な設定は組み込みで含まれているため、そのまま使うだけでも自動でシステムに合わせて効果的な設定になってくれます。
もちろん、導入・運用を簡単にしたいという場合は、外部のメールシステムやアプライアンス製品の利用も十分選択肢に入るはずです。この場合は費用対効果やメールシステムを外部に出してもよいか、どこまでカスタマイズする必要があるか、などが判断基準になることでしょう。milter managerにはユーザ向けメーリングリストもあるので、検討段階などで疑問点などがあった場合はそこで質問してみてください。
久しぶりにmilter managerについて紹介しました。
最近のmilter managerはパフォーマンス改善もおこなっており、個人サーバーから大規模なメールシステムまでいろいろな環境で効率的に動かせるようになっています。機会があったらmilter managerの利用を検討してみてはいかがでしょうか。
以下は参考情報です。