Kenichi Maehashi's Blog

脳内コアダンプ

RSS
Category: Linux
Linux ソフトウェア RAID (MD) を組んだ HDD を別のホストに移行する手順について(CentOS 5.5)。

MD はシステムの起動時に /etc/mdadm.conf に書かれた内容に基づいてアクティベートされます(/etc/rc.d/rc.sysinit というスクリプトによって mdadm -A -s が実行されています)。
古いホストから新しいホストに HDD を移行すると /etc/mdadm.conf が存在しないため、非アクティブ状態になります。

移行した MD を新しいホストでも使用するには、/etc/mdadm.conf を作成する必要があります。
古いホストから設定ファイルを持ってくるのが確実で簡単ですが、もし無くても、以下のコマンドで設定ファイルを自動生成できます(モニタリングの設定などは自分で書きましょう)。
# mdadm --examine --brief --scan --config=partitions > /etc/mdadm.conf
# cat /etc/mdadm.conf
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=deadbeef:00c0ffee:000c0c0a:0000cafe
あとは再起動するか mdadm -A -s とやれば OK です。
Category: Linux
自宅サーバや某プロダクション環境(の一部)で、Monit をノード監視に使っています。
Monit 単体では単一ノードの死活監視しかできないのですが、 M/Monit を使うことで複数のノードを一元管理することができるようになります。

Monit はもともと多芸で、プロセス(PID)の監視と自動復旧、ディスク容量の監視、システムの CPU / メモリ使用率の監視、ファイルの監視、ネットワークサービスの監視(icmp, http, dns, mysql, ..., 独自プロトコルを expect で書くことも可能)、それらのイベントのメールアラート通知などが可能です。また Web インターフェース(HTTP / HTTPS)がデフォルトで用意されており、状況の確認やプロセスの手動再起動を行うことが出来るので、監視だけではなくユーザフレンドリな管理ツールとして使用することもできます。一方で、長期的な CPU 使用率のログ化・グラフ化のような機能はないので、それらは別のツールで補う必要があります。

M/Monit は Monit をエージェントとして使用して、一つの画面で複数の Monit ノードを管理することができるようになります。Monit の設定ファイルに M/Monit サーバへデータを push するように設定すると、M/Monit 側に自動的に登録され、以後は M/Monit の死活監視対象になります。M/Monit の画面では各 Monit ノードのイベントログを一つのシンプルな画面に統合して表示してくれるため、ノードの状態を簡単に把握できます。簡単なグラフ化も行ってくれますが、これはメイン機能ではないので「Dashboard の円グラフが緑一色じゃなかったら何かが起きてるな」といった程度にしか使えません。

ちなみに、Monit はオープンソースソフトウェアですが、M/Monit は有償(Standard: 199 ユーロ / Professional: 499 ユーロ)のプロプライエタリソフトウェアになっています(Professional ではソースコードアクセスはあります)。ただ、M/Monit を 1 ライセンス購入すれば、1 台の管理ノードから無限の Monit ノードを監視することができるため、システムの構成が単純であれば割と良い投資かな、という印象です。ダウンロードすると 1 ヶ月限定の体験版として動作するので、気軽に試すことができます(bin/mmonit というバイナリを叩くだけで、いきなり走り出す簡単設計。集計データベースはデフォルトで SQLite ですが MySQL, PostgreSQL にも変更可能)。

既に Monit は結構使っているので、次のシステムリプレースで M/Monit を入れるかも。
Category: Web
パッケージに紐付けてクラスを登録するための関数 package を作ってみた。
function package(name, objects) {
var names = name.split(".");
for (var i = 0; i < names.length; i++) {
var pkg = names.slice(0, i + 1).join(".");
eval("if (typeof " + pkg + " == 'undefined') {" + pkg + " = {};}");
}
eval("var o = " + name);
for (var obj in objects) {
o[obj] = objects[obj];
}
}
やっていることは、渡されたパッケージ名の各階層を(もし存在しなければ)順に宣言して、さらに渡された class (function) をそのパッケージに追加していく、という作業だけです。

クラスをパッケージ内に定義するには、例えば
package("com.kenichimaehashi.blog.example", {
MyFirstClass: function() {
this.showMessage = function() {
alert("Hello, world!");
};
},

MySecondClass: function(yourName) {
this.yourName = yourName;
this.showMessage = function() {
alert("Hello, " + this.yourName + "!");
};
}
});
のようにする。で、これらのクラスを使ったアプリケーションは
var firstApp = new com.kenichimaehashi.blog.example.MyFirstClass();
firstApp.showMessage();
// --> Hello, world! と表示される

var secondApp = new com.kenichimaehashi.blog.example.MySecondClass("Kenichi");
secondApp.showMessage();
// --> Hello, Kenichi! と表示される
って感じ。

もっと大規模なスクリプトで使うと盛大に重いかもしれないな。まぁ、お遊び程度のモノということで。
それにしても、オブジェクト指向な JavaScript は初めて書いたけど、結構楽しい。
Category: Other
前回の記事の続きです。

結局室内のアンテナでは受信レベルがキツいということが判明。
今回購入した UwPA は屋外への設置にも対応しているため、これを流用してどうにかすることにしました。

 *

まず自宅の TV 配線をチェック。どうやら、次図のようになっている模様。

|VHF アンテナ|~(ベランダの壁)~[TV コンセント]~[TV コンセント]

このように、コンセント同士が直列繋ぎになっているものを「送り配線」ないし「渡り配線」と呼びます。
(TV コンセントのカバーを開けてみて、送り配線用の口が使われていたため判明。)

ちなみに最近の家屋では、アンテナの直後に分配器を入れて並列繋ぎ(スター型)になっていることが多いようです。

 *

配線が分かったので、つぎにアンテナの取り付け位置。
幸い、VHF アンテナとベランダの線が中継接栓になっていたので、

|UHF アンテナ|~(ベランダの壁)~[TV コンセント]~[TV コンセント]

のように、VHF アンテナを捨てて UHF アンテナを接続することにしました。もし VHF も UHF も必要なら、

|VHF アンテナ|~|混合器|
|UHF アンテナ|~|   |~(ベランダの壁)~[TV コンセント]~[TV コンセント]

のように接続することで、一つの線に VHF と UHF の両方を流すこともできますね。

 *

UwPA は屋外に設置する場合、同軸ケーブルを自作する必要があります(ケーブルに防水キャップを通さなければならないため)。
市販されているものだと 10 m 単位とかで長すぎるので、必要な長さを電器屋さんで切ってもらうと良い感じです。自分は 3 m 切ってもらいました。

なお、同軸ケーブルにはケーブルの太さが数種類あるので、事前に決めておきましょう。
今回は屋外ということもあり、安全策を取って 5C にしました。値段は 200 円 / m 程度。
これに 5C 用の接栓(ケーブルの端に付ける部分)が必要です。これは 1 コ 250 円くらいでしょうか。ちなみに 1 個は UwPA にも付いてきます。

ケーブルの自作は、カッターとハサミがあればできます。自分は不器用で 2 回失敗しましたが、1 回の失敗で犠牲になるのは 1 cm なので余裕です。
既存のテレビに繋ぐなどして、品質をチェックしておきましょう(本当はテスタが欲しいところ)。

 *

ケーブルを作り、アンテナを設置してテスト配線したら、テレビの映りを確認。
これも入力レベルの分かる機械があれば良いのですが、今回は m2TV のインジケータで確認しました。
放送エリアのめやすを参考に、最寄りの中継局にアンテナが向くようにしてみましょう。

映りに問題がなければ、ケーブルの防水対策をして、完成です。
日本アンテナの防水補助テープ GKY20-HD(500 円くらい)で接栓の部分や UwPA の防水キャップを巻き、さらに市販のビニルテープ(100 円くらい)を上から巻けば OK。

 *

というわけで、総費用 5000 円くらいで宅内の全ての TV コンセントからデジタル放送が楽しめるようになりました。
アンテナ線は電気が流れていないので(BS を除く)、割と安心して作業できますね。ただし雷が鳴っているときは止めておきましょう。

ちなみに、ここに書いたほとんどの知識は、ここ数日の間にインターネット検索で知ったことです。
特にボクにもわかる地上デジタルさんには大変お世話になりました。ありがとうございます。

まさかハードウェアに弱い自分が同軸ケーブルを自作しているとは、1 週間前には夢にも思っていませんでした。インターネットすごい、という今回のまとめでした。
Category: Apple
自宅のアナログ TV が壊れたのを切っ掛けに、地上デジタルへの移行を計画。
当初は普通にテレビを買おうと思っていたのですが、そんなに視聴する訳でもないので、UHF アンテナの設置費用まで含めるとコスト的にちょっと...(全部で 15 万円くらいかかりそう?)。

というわけで、m2TVUwPA の組み合わせで視聴環境を整えることにしました。締めて 15,115 円。UwPA は(見たまんまですが)指向性が強いため向きには sensitive でしたが、放送エリアのめやすを参考にしながら最寄りの中継局に対してアンテナが垂直に向くよう調整したところ安定。

m2TV 付属のアプリケーションは良く出来ていますが、複数ユーザで共有することがあまり想定されてないようで、例えば /tmp に作られる番組表の一時ファイルのパーミッションが 644 になっているせいで他のユーザが起動しても番組表が更新できない(一旦作成された後に chmod しておけば大丈夫みたい)とか、fast user-switching すると kernel panic を起こすことがあるとか。おいおい改善してくれると嬉しいな。ついでに Snow Leopard で Apple Remote 対応してくれれば万々歳だけど TVRemote があるから難しいか(この話、良く知らないのですが Apple が API を非公開にしてしまったのかしら?)。実体は MAKI Enterprise の OEM のようで、マキさんの強みを生かして? BML(データ放送)が WebKit のプラグインになってたり。

あとは、PS2 と既存 VHS ビデオ用に、PC ディスプレイとアップスキャンコンバータ(VABOX2)を買えば移行完了、かな。

 *

(追記)
夕方は大丈夫だったのですが、真夜中過ぎ頃から受信レベルが落ちてしまった。ラジオの感覚で行くと夜は電波が飛ぶ気がするのですが、地デジは違うのかな。
あと、チャンネルが放送終了した後(深夜から未明にかけて)にスキャンしても検出できないらしい。ちょっとはまった。

デュアルモニタはダメという記載があったので iMac で試してみたところ、m2TV のウィンドウを完全に外部ディスプレイに持って行くとしばらくして警告が表示されました。画面を本体ディスプレイと外部ディスプレイに跨がって映すことはできるようですが、これは誰得情報 :-)