●VMware server 1.0.1 と Linux 2.6.19
VMware server をインストールするときに、ネットワーク用のカーネルモジュールをコンパイルするステップが有ります。カーネルが 2.6.19 だとコンパイルエラーが出るので調べてみたところ、パッチを公開してくれている人が居ました。
http://nerdbynature.de/bits/2.6.19-rc5/
| Sun | Mon | Tue | Wed | Thu | Fri | Sat |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
VMware server をインストールするときに、ネットワーク用のカーネルモジュールをコンパイルするステップが有ります。カーネルが 2.6.19 だとコンパイルエラーが出るので調べてみたところ、パッチを公開してくれている人が居ました。
http://nerdbynature.de/bits/2.6.19-rc5/
PowerEdgeにDebianをインストールするときはいつもちょっとだけ苦労します。今回の1950ではイーサネットアダプタ(Broadcom BCM5708)で、まず引っ掛りました。
いつものようにDell Linuxのページに進んでDebian on PowerEdge 9Gの情報を調べると、足りなくて問題になりそうなドライバはmegaraid_sas(PERC 5 SAS RAID コントローラ)とmptsas(SAS 5 non-RAIDコントローラ)とbnx2(Broadcom NetXtreme II Gigabit Ethernet Adapter)の3つだそうです。新しいカーネルを含む Sarge のインストールCDを武藤さんが公開してくれているのでそれを使うと良い、とのことなので、kernel 2.6.19rc3のsarge-custom-1115.isoを有難くダウンロードしてCD-ROMに焼いて使ったところ、無事にインストールできました。
あるサイトのRSSのURLをコピペしたいことが有ります。RSS Auto-Discoveryは設定されているものの、ページの本文中にRSSへのリンクが用意されていない(あるいはリンクがどこに有るのかパッと見では分からない)ということも多く、そういう場合はソースを表示してコピーすることになります。結構面倒です。
そこでブックマークレットを作ってみました。別ウィンドウを開いて RSS Auto-DiscoveryなRSSをすべて表示します。
プログラムによっては、外部からの終了イベント(Ctrl-Cの入力など)でいきなり終わってしまっては困るものが有ります。そこでJavaでは、JVMの終了時に実行したい処理を仕込むためのシャットダウンフックという仕組みが用意されています。
手元に、リクエストを受け付けてマルチスレッドでタスクを実行するプログラムが有ります。このプログラムの場合、やりかけのタスク(とキューに溜っているタスク)が全部終了してからプロセスを終了したいので、シャットダウンフック内でタスク実行スレッドの終了を待つようにしました。スレッドの管理をjava.util.concurrent.ExecutorServiceで行なうようにするとこれは意外と簡単に実現できます。
以下は、そのプログラムを簡単化したサンプルです。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class ShutdownHookTest {
public static void main(String[] args) throws Exception {
final ExecutorService threadPool = Executors.newFixedThreadPool(3);
Runtime.getRuntime().addShutdownHook(
new Thread() {
public void run() {
System.out.println("shutdown hook start");
// スレッドプールのシャットダウン
// 実行中のタスクとキュー内のタスクをすべて終えたら終了する
threadPool.shutdown();
try {
//すべてのタスクの終了を待つ
threadPool.awaitTermination(10, TimeUnit.SECONDS);
} catch (InterruptedException e) {
}
System.out.println("shutdown hook end");
}
});
for (int i = 1; i <= 4; i++) {
threadPool.execute(new Task(i));
}
}
}
// 各タスクは自分に与えられた番号と同じ秒数カウントして終了する
class Task extends Thread {
int num;
public Task(int num) {
System.out.println("task #" + num + " init");
this.num = num;
}
public void run() {
System.out.println("task #" + num + " start");
for (int i = 1; i <= num; i++) {
try {
Thread.sleep(1000);
System.out.println("[" + num + "]" + i);
} catch (InterruptedException e) {
}
}
System.out.println("task #" + num + " end");
}
}
[実行結果]
$java -cp bin ShutdownHookTest main start task #1 init task #2 init task #3 init task #4 init task #1 start task #2 start task #3 start ←実行スレッドが3つなので、4つめのタスクはキューで待つ shutdown hook start ←Ctrl-Cを入力 [1]1 task #1 end task #4 start ←キューに溜っていたタスクがスタート [2]1 [3]1 [4]1 [2]2 task #2 end [3]2 [4]2 [3]3 task #3 end [4]3 [4]4 task #4 end shutdown hook end ← 全部のタスクの実行が終わったので終了
開店休業状態だった当ブログですが、今日から本格スタートします。
サブタイトルにもあるように、MAILPIA に関係する技術を主に取り上げる予定です。
なにとぞよろしくお願いします。