2010年4月アーカイブ

2010年4月27日

PC内温度を監視するよ

OCなんてCPUを早くダメにするだけだと思ってる(本当の所は知らないが)くらいなので、今までPC組むのに冷却なんてほとんど考えてなくて、というか考えるような攻めの構成はほとんどやったことがない。ので、今回Phenom II X4の965BEは爆熱だよなんて話を聞いてちょっと青ざめたのは確かだ。

というか、冷却のためのCPUクーラーがえらいうるさい。リテールクーラーの悪評は紛々たるものらしく、ちょっとぐぐっただけでもブログ記事とか実証動画だとかがアホの子のごとく出てくる。

で、気になって色々と調べてみた。いずれもdebian lenny(kernel: 2.6.26.2)。

まずAMD組、lm-sensorsをつっこもうとしたら、AMD系ではそのままでは温度が取得できないらしい。k10tempというのを持って来てmake & install。すると1ヶ所しか取れないのは何だろう。CPU温度かな。

http://khali.linux-fr.org/devel/misc/k10temp/
Index of /devel/misc/k10temp

# aptitude install linux-headers-2.6.26-2-amd64 (←/lib/modules/2.6.26.2-amd64/buildを見るので)
# mkdir k10temp
# cd k10temp
# wget http://khali.linux-fr.org/devel/misc/k10temp/Makefile
# wget http://khali.linux-fr.org/devel/misc/k10temp/k10temp.c
# make 
# make install
# depmod -a (←make installの途中でdepmodのところでミスるので手でやりなおした)
hironobu@emma:~$ sensors
k10temp-pci-00c3
Adapter: PCI adapter
temp1:       +38.1°C  (high = +70.0°C, crit = +72.0°C)  

Atom組の方も見てみると、こちらはlm-sensorsのインストールのみですぐ出て来たものの、M/B温度が70度近くとか言っちゃってこっちもこっちで結構な数字が出ているじゃないか。まあファンレスだから仕方ないんだと思うけども。

hironobu@shirley:~$ sensors
w83627thf-isa-0290
Adapter: ISA adapter
VCore:       +1.15 V  (min =  +0.00 V, max =  +3.84 V)   
+12V:        +3.83 V  (min = +15.44 V, max =  +2.37 V)   ALARM
+3.3V:       +1.89 V  (min =  +1.87 V, max =  +3.10 V)   
+5V:         +4.91 V  (min =  +1.25 V, max =  +2.56 V)   ALARM
-12V:        +2.03 V  (min =  +6.06 V, max =  -2.74 V)   ALARM
V5SB:        +4.95 V  (min =  +2.34 V, max =  +2.96 V)   ALARM
VBat:        +3.23 V  (min =  +2.91 V, max =  +2.00 V)   ALARM
fan1:          0 RPM  (min =  827 RPM, div = 8)  ALARM
CPU Fan:       0 RPM  (min = 2343 RPM, div = 4)  ALARM
fan3:          0 RPM  (min = 6026 RPM, div = 2)  ALARM
M/B Temp:    +67.0°C  (high = -33.0°C, hyst = +32.0°C)  ALARM  sensor = thermistor
CPU Temp:    +53.0°C  (high = +80.0°C, hyst = +75.0°C)  sensor = diode
temp3:       +53.0°C  (high = +80.0°C, hyst = +75.0°C)  sensor = diode
beep_enable:enabled

2010年4月22日

Knoppixを起動するUSBメモリを作ろう。

さて、旧サーバ(old shirley)を退役させるためにHDDを掃除しなきゃいけないわけですが、以前はUSBフロッピードライブをもってきてDESTROYとかやってたんですけど、先日から探してるのに肝心のドライブが出てこない(何)。そんなわけで、Knoppixを使ってUSBメモリにブートイメージをつっこんでshredすることに。

というわけで皆様材料はこちらになります。鶏肉に卵と玉ねぎ、お醤油みりん砂糖...あれ。

  • USBメモリ (容量1GBもあればOK、FATでフォーマット済みの)
  • KnoppixのISOイメージ(最新)
  • SYSLINUX(最新)
  • Linux PC 1台

ぐぐると結構皆さんCD-Rを使って焼いたりとかそうでなくてもDaemontoolsを持って来たりとかやってますが、WindowsでなくてLinuxでやれば、それらと同じ作業はすべて標準で入ってるので、格段に簡単にできます。っていうか、本当は簡単にできるはずなんだけどついつい手順を忘れて何となくめんどくさがりがち...。全然むずかしいこっちゃないですよと、備忘録として記して忘れないようにしておくのでござるよ。

http://www.knopper.net/knoppix-mirrors/
KNOPPIX - Mirrors

Knoppixはこのミラーリストからダウンロード。日本語サイトがなんかやたら古かったりデッドリンクばかりと不安な空気を醸し出しているので、そちらは振り切って本家サイトに逝くでござるよ。

http://www.kernel.org/pub/linux/utils/boot/syslinux/
Index of /pub/linux/utils/boot/syslinux

SYSLINUXも同じく最新を。tar+gzでもtar+bz2でもzipでもどれでもござれ。であとは下のように1)USBメモリをマウント、2)KnoppixのISOもマウント、3)Knoppixの内容物(/boot/isolinux/*,/KNOPPIX)をUSBメモリにコピー、4)USBメモリ内にコピーした/isolinux.cfgを/syslinux.cfgにリネーム、5)SYSLINUXをUSBメモリにインストール、で完了。

~# mkdir ./tmp
~# mount -o loop ./KNOPPIX_V6.2CD-2009-11-18-EN.iso ./tmp
~# mount /dev/sdb /mnt
~# cp -pr ./tmp/boot/isolinux/* /mnt/
~# cp -pr ./tmp/KNOPPIX /mnt/
~# cd /mnt
~# mv isolinux.cfg syslinux.cfg
~# ~/syslinux-3.86/linux/syslinux /dev/sdb
(※USBメモリを/dev/sdb、またisoとsyslinuxのtarballをrootのホームディレクトリに置いて解凍したとして仮定。)

あとはKnoppixのisoイメージ(~/tmp)とUSBメモリ(/mnt)をアンマウントして、目的のPCにUSBメモリを刺して起動すればいいだよ。

2010年4月21日

Receive-Side Scalingとな?

(11:48訂正、shirley(M/B:D510MO/NIC:Realtek8111DL)だと無手順でばらけました。)

前のエントリで書いたApache Benchの件は、ちと早計というか、違う問題のようだということが分かって来た。あのあとぐぐってみると、気になる記事を見つけたの。

http://blog.nomadscafe.jp/2010/01/cpu.html
アプリケーションがマルチスレッドでもマルチコアCPUを活かせない件 - blog.nomadscafe.jp

memcachedの通信は主にeth1で行われるのですが、このeth1に関する割り込み処理がCPU1でしか行われていません。ソフトウェア割り込みはハードウェア割り込みが行われたCPUでしか行われないのもこの傾向を強めます。

マルチコアCPUの性能を活かすために考えられることは、ネットワークの割り込み処理を複数のCPUに分散することだと思うのですが、最新のNICにはRX/TX Multiple Queue(正式名称がわからない。Receive Side ScalingとかScalable I/O?)機能が備わっています。もともとRX/TX Multiple Queueは10GbpsのNICなどに備わっていた機能で、複数の割り込みチャンネルを持つことでネットワーク処理の分散を実現しています。最近のIntelやBroadcomの1GbpsのNICにも同じ機能があります。

emma:~# cat /proc/interrupts 
            CPU0       CPU1       CPU2       CPU3       
   0:         45          0          6          0   IO-APIC-edge      timer
   1:          0          0          8          0   IO-APIC-edge      i8042
   6:          1          0          2          0   IO-APIC-edge      floppy
   7:          0          0          0          0   IO-APIC-edge      parport0
   8:          0          0          1          0   IO-APIC-edge      rtc0
   9:          0          0          0          0   IO-APIC-fasteoi   acpi
  14:          0          0          0          0   IO-APIC-edge      ide0
  15:          0          0          0          0   IO-APIC-edge      ide1
  16:          0          0        236          0   IO-APIC-fasteoi   ohci_hcd:usb1, ohci_hcd:usb3, hda_intel
  17:          0          0          0          0   IO-APIC-fasteoi   ehci_hcd:usb2
  18:          0          0          0          0   IO-APIC-fasteoi   ohci_hcd:usb5, ohci_hcd:usb6, ohci_hcd:usb7
  19:          0          0          0          0   IO-APIC-fasteoi   ehci_hcd:usb4
  22:          0          0       2002          2   IO-APIC-fasteoi   ohci1394, ahci
  25:          0          0       3150          0   PCI-MSI-edge      eth0
  26:          0          0          0          0   PCI-MSI-edge      hda_intel
 NMI:          0          0          0          0   Non-maskable interrupts
 LOC:       8113      12668       9084       7116   Local timer interrupts
 SPU:          0          0          0          0   Spurious interrupts
 PMI:          0          0          0          0   Performance monitoring interrupts
 PND:          0          0          0          0   Performance pending work
 RES:       3646       3930       2110       2260   Rescheduling interrupts
 CAL:         42        124        135        122   Function call interrupts
 TLB:          4          0          3          7   TLB shootdowns
 TRM:          0          0          0          0   Thermal event interrupts
 THR:          0          0          0          0   Threshold APIC interrupts
 MCE:          0          0          0          0   Machine check exceptions
 MCP:          6          6          6          6   Machine check polls
 ERR:          4
 MIS:          0

確かにこのページで語られてるのと同じ状況。mary,emmaでも同じだった。httpdを入れてないので確認してないけど、/proc/interruptsを見る限りnellyでも同じっぽい。shirleyではばらけたぞ。

うちのマシンは揃ってRealTek製の8111C(shirleyだけ8111DL)のチップだったのだけど、これらは"Receive-Side Scaling"の機能であれば対応しているらしい。

http://www.realtek.com.tw/products/productsView.aspx?Langid=1&PFid=5&Level=5&Conn=4&ProdID=142
Realtek (8111C)

http://www.realtek.com.tw/products/productsView.aspx?Langid=1&PNid=13&PFid=5&Level=5&Conn=4&ProdID=193
Realtek (8111DL)

これがLinux上でどう対応づけすればいいのか調べ中でござる...。

2010年4月19日

Apache Benchがマルチコアに対応してほしいと思うのね。

でだ。

マルチコア環境でApacheのベンチマークがやってみたかったんだ本当は。

最初まだAMD組は1台分しか組めなかったんだけど、Mac Proがあるししかもab標準で入ってるじゃんやったーとか小躍りしてたのさ。で、いざやってみるとどうもおかしい。思ったよりもprefork/worker/event間で差が出ない。まあabじゃあそもそも試験にならんのかもなあ、と思いつつ試験中のapacheの状態をtopでちんたら眺めてみた。そしたらだ。

top.png

CPUコア1つしか使ってねえじゃねえの。

こりゃさすがにってことでabのソースを見てみる。

http://svn.apache.org/viewvc/httpd/httpd/tags/2.2.15/support/ab.c?view=markup
[Apache-SVN] Contents of /httpd/httpd/tags/2.2.15/support/ab.c

1700行目のap_pollset_poll()で多重待ち受けをして、readyなソケットからREAD/WRITEを繰り返して行くメインスレッドがあるのみで、読み込みをマルチスレッドで多重化されたりしてるとかはしてない。

マルチスレッド化したのでやりたきゃfloodあたりを使いやがれとのことです。

http://httpd.apache.org/test/flood/
Flood - Flood

なんかめんどくさそうです...。

Highchartsの棒グラフでグループ化の順番がおかしかったので

で、一連のベンチマーク結果のグラフ化にHighchartsを使ってみたんですが、この棒グラフ表示でおかしな点があったので一ヶ所自分で手を入れたのです。

http://www.highcharts.com/demo/?example=bar-basic&theme=default
Highcharts Demo Gallery

具体的に言うとこれですね。

Year 1800/1900/2008とある右上の凡例の順番と、Africa,America,...とある各グループの棒グラフの並びを見て頂きたい。凡例の方は1800の青、1900の赤、2008の...何色だ?これ?^^;;(color panel使って見たら「オリーブ色」らしい)という順番になってるのに、棒の順番は逆になっている。ちゃんとグラフを読めば分かるんだけど、並びが違うことで感覚的におかしな気分になるなと。

パラメータで調整して直るのかもしれなかったけど、突き止めきれなかったのでコードを弄って直すことにしてみました。最新版の1.2.5を元にhighcharts.src.jsに手を入れて、ClosureCompilerを通したのを使ってます。万一これでおかしくなっても大丈夫なようにオリジナルはオリジナルで残しておきましたよ。

--- ./highcharts.src.js.orig	2010-04-13 14:43:26.000000000 +0900
+++ ./highcharts.src.js	2010-04-19 02:33:36.199575268 +0900
@@ -4200,7 +4200,7 @@
 	
 	// Initialize the series
 	//initSeries();
-	each (options.series || [], function(serieOptions) {
+	each (options.series.reverse() || [], function(serieOptions) {
 		initSeries(serieOptions);
 	});
 	

自宅環境を再整備したのでベンチ採るよ その2 (Phoenom/Athlon)

その1(+1a)がAtom組なら、こちらはAMD組になります。さすがに圧勝ですな。Celeron 430が1コア分にしかなりません。

Dhrystone 2 using register variables Double-Precision Whetstone Execl Throughput File Copy 1024 bufsize 2000 maxblocks File Copy 256 bufsize 500 maxblocks File Copy 4096 bufsize 8000 maxblocks
mary (1 core) 1567.0 558.5 1103.3 2351.3 1740.5 3079.1
mary (4 cores) 6268.8 2231.3 4577.3 1083.4 746.8 1907.7
emma (1 core) 1199.1 427.9 678.8 1732.1 1323.0 2675.3
emma (4 cores) 4790.3 1709.0 3527.4 865.2 593.4 1578.0
old shirley (1 core) 1194.2 384.2 490.3 1314.2 1051.2 1798.6

Pipe Throughput Pipe-based Context Switching Process Creation Shell Scripts (1 concurrent) Shell Scripts (8 concurrent) System Call Overhead System Benchmarks Index Score
mary (1 core) 1638.4 944.3 1215.4 2576.9 1917.3 2441.0 1597.3
mary (4 cores) 6514.9 3980.1 5403.2 1930.2 957.9 2293.7 2496.9
emma (1 core) 1262.0 741.1 920.7 1629.7 1854.6 1865.9 1215.2
emma (4 cores) 4974.7 3026.8 4203.2 1797.5 954.2 2251.5 2056.4
old shirley (1 core) 924.3 598.6 578.2 772.7 717.0 966.2 822.4

CPU Memory Chipset Storage
mary Phenom(tm) II X4 965 DDR3 1333 8GB 785G + SB710 HDS721050CLA362 (500GB)
emma Athlon(tm) II X4 620 DDR2 800 8GB 785G + SB710 HDS721050CLA362 (500GB)
old shirley Celeron(R) CPU 430 DDR2 800 2GB 945GC and ICH7 HDP725050GLA360 (500GB)

ただそれでもなんかFile I/Oについてはマルチコアは全然生かせないというか却ってダメですね。unixbench内部でどんな風にテストしてるのか気にしてみた方がいいかもしんない。まあ大体の性能差というか傾向が見えて来たのでひとまずよしとします。これらの内容の精査も気が向いたときに追々やってくとしましょー。

自宅環境を再整備したのでベンチ採るよ その1a (old shirley: ReiserFS→XFS)

old shirleyをXFSにして採り直しました。むしろXFSの方が良くなった。当然ながらFile関連しか変動してませんが。

Dhrystone 2 using register variables Double-Precision Whetstone Execl Throughput File Copy 1024 bufsize 2000 maxblocks File Copy 256 bufsize 500 maxblocks File Copy 4096 bufsize 8000 maxblocks
nelly (1 core) 381.0 114.6 219.9 390.6 264.1 752.7
nelly (4 cores) 1102.3 403.6 548.4 157.1 102.0 376.7
shirley (1 core) 398.1 119.8 253.3 440.1 307.2 865.9
shirley (4 cores) 1150.8 424.7 672.1 250.2 149.4 527.8
old shirley (ReiserFS) 1188.6 384.0 493.0 996.2 750.6 1486.9
old shirley (XFS) 1194.2 384.2 490.3 1314.2 1051.2 1798.6

Pipe Throughput Pipe-based Context Switching Process Creation Shell Scripts (1 concurrent) Shell Scripts (8 concurrent) System Call Overhead System Benchmarks Index Score
nelly (1 core) 325.2 136.4 287.5 498.6 811.2 617.7 339.9
nelly (4 cores) 436.1 335.5 650.1 872.7 886.4 949.0 465.3
shirley (1 core) 337.1 168.1 289.1 574.3 931.1 645.8 376.1
shirley (4 cores) 588.4 436.2 739.7 972.1 969.0 1232.2 579.3
old shirley (ReiserFS) 917.5 573.8 567.8 750.2 728.4 976.1 764.5
old shirley (XFS) 924.3 598.6 578.2 772.7 717.0 966.2 822.4

ReiserFSからXFSにしたことによる変動の分析とか気になるところもありますが、そこは後にしてさらに進めます。

2010年4月18日

自宅環境を再整備したのでベンチ採るよ その1 (Atom)

自宅サーバを一新してせっかくなのでベンチマークを採ってみようかと思います。

Dhrystone 2 using register variables Double-Precision Whetstone Execl Throughput File Copy 1024 bufsize 2000 maxblocks File Copy 256 bufsize 500 maxblocks File Copy 4096 bufsize 8000 maxblocks
nelly (1 core) 381.0 114.6 219.9 390.6 264.1 752.7
nelly (4 cores) 1102.3 403.6 548.4 157.1 102.0 376.7
shirley (1 core) 398.1 119.8 253.3 440.1 307.2 865.9
shirley (4 cores) 1150.8 424.7 672.1 250.2 149.4 527.8
old shirley (1 core) 1188.6 384.0 493.0 996.2 750.6 1486.9

Pipe Throughput Pipe-based Context Switching Process Creation Shell Scripts (1 concurrent) Shell Scripts (8 concurrent) System Call Overhead System Benchmarks Index Score
nelly (1 core) 325.2 136.4 287.5 498.6 811.2 617.7 339.9
nelly (4 cores) 436.1 335.5 650.1 872.7 886.4 949.0 465.3
shirley (1 core) 337.1 168.1 289.1 574.3 931.1 645.8 376.1
shirley (4 cores) 588.4 436.2 739.7 972.1 969.0 1232.2 579.3
old shirley (1 core) 917.5 573.8 567.8 750.2 728.4 976.1 764.5

CPU Memory Chipset Storage
nelly Atom(TM) CPU 330 @ 1.60GHz DDR2 667 2GB 945GC and ICH7 X25-V Value SATA SSD (40GB)
shirley Atom(TM) CPU D510 @ 1.66GHz DDR2 800 4GB NM10 Express HDS721025CLA382 (250GB)
old shirley Celeron(R) CPU 430 @ 1.80GHz DDR2 800 2GB 945GC and ICH7 HDP725050GLA360 (500GB)

(たぶん)わかったこと:

  • Atom 4コア分でやっとCeleron 430 1個分くらいのCPUパワー。
  • PipeまわりとI/OはAtom 4コアでも及ばない。
  • 特にI/Oははげしく劣勢。
  • あ、そういえばnelly & shirleyはXFSだけどold shirleyはReiserFSだった。まさかそれか?むしろXFSの方が早かった。同じにしたらもっと差がついた。こちらを参照のこと
  • SSDでもAtom 330と510の間のCPU差は埋められず。まあ、そうか。
  • Shell Scriptはむしろ優勢。8 Concurrentテストなんて1コアでもAtomが勝ってる。なんぞこれ。

こんなとこ?あと何か見つかれば追々。

2010年4月14日

BINDでdynamic dnsやってると勝手にゾーンファイル本体を書き換えようとしてくれやがる件

自宅のNAT内ネットワークをBIND使って固定IPとDHCP分とを合わせて一つのドメインでやってるんですけど、/etc/bind配下に置いてあるゾーンファイルをBIND自身が自分で書き換えようとして困る。まあ自然ちゃあ自然なんだけど...書き換え可能なディレクトリは/var/lib/namedとか/var/cache/namedとかに用意してあるんだし、*.jnlはそっちに吐き出してるわけだし、使い分けて欲しいなあとも思う訳で...。

例えばこんな感じでずっと出とるんですわ。

Apr 14 08:26:37 gw named[7331]: dumping master file: /etc/bind/tmp-VyOSuyztFl: open: permission denied
Apr 14 08:30:22 gw dhcpd: Wrote 5 leases to leases file.
Apr 14 08:30:22 gw dhcpd: DHCPREQUEST for 192.168.0.205 from xx:xx:xx:xx:xx:xx via eth0
Apr 14 08:30:22 gw dhcpd: DHCPACK on 192.168.0.205 to xx:xx:xx:xx:xx:xx via eth0
Apr 14 08:31:55 gw named[7331]: dumping master file: /etc/bind/tmp-LZ5RZ76NXe: open: permission denied
Apr 14 08:35:22 gw dhcpd: DHCPREQUEST for 192.168.0.205 from xx:xx:xx:xx:xx:xx via eth0
Apr 14 08:35:22 gw dhcpd: DHCPACK on 192.168.0.205 to xx:xx:xx:xx:xx:xx via eth0
Apr 14 08:40:22 gw named[7331]: dumping master file: /etc/bind/tmp-rKYx3u6RKw: open: permission denied
Apr 14 08:40:22 gw dhcpd: DHCPREQUEST for 192.168.0.205 from xx:xx:xx:xx:xx:x via eth0
Apr 14 08:40:22 gw dhcpd: DHCPACK on 192.168.0.205 to xx:xx:xx:xx:xx:xx via eth0
Apr 14 08:41:20 gw dhcpd: DHCPREQUEST for 192.168.0.202 from yy:yy:yy:yy:yy:yy via eth0
Apr 14 08:41:20 gw dhcpd: DHCPACK on 192.168.0.202 to yy:yy:yy:yy:yy:yy via eth0
Apr 14 08:45:09 gw named[7331]: dumping master file: /etc/bind/tmp-OflOZAy7fk: open: permission denied

debianだとデフォルトで/etc/bindはrootにしかwrite permissionなくて、肝心のnamedはbindユーザになって動作する。

hironobu@nelly:~$ ls -ld /etc/bind
drwxr-sr-x 2 root bind 4096 2010-04-13 01:06 /etc/bind
hironobu@nelly:~$ ps -C named -Fl
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN    RSS PSR STIME TTY          TIME CMD
5 S bind      7331     1  0  80   0 - 59460 rt_sig 52868   3 Apr13 ?        00:03:15 /usr/sbin/named -u bind

いくつかぐぐって記事を見てみると「何だよこれならおまえ/etc/bindでchmod g+wすりゃ済むじゃん馬鹿じゃねえのHAHAHA」的な陽気なアメリカンスタイルがこだましている。うーん。それはそれで分かるんだけどさあ的な。でやってみると確かにゾーンファイルが変わってて、DHCP分の最初書いてなかったdyndns分の登録まで入ってる。うわー。

まあ、ゾーンファイルがオリジナルになるんだからdynamic dnsして登録されたホストもゾーンファイルに載らなきゃ困るって話はあるかもしれない。write permissionなしでどないしてゾーンファイル管理しろってんだとBINDからすれば思うかも知れない。しかし/etc/配下を勝手に書き換えられるのも気持ち悪いんだよねえ...。どないしたもんか。

2010年4月13日

オシム本を買ったよ

ちょっといてもたっても居られなくなって近所のエムズ書店@みたけ店逝って買ってきました。2冊ほど。

オシム勝つ日本
オシム勝つ日本
文藝春秋 2010-04
売り上げランキング : 1168


Amazonで詳しく見る
by G-Tools

考えよ! ――なぜ日本人はリスクを冒さないのか? (角川oneテーマ21 A 114)
考えよ! ――なぜ日本人はリスクを冒さないのか? (角川oneテーマ21 A 114)
角川書店(角川グループパブリッシング) 2010-04-10
売り上げランキング : 89


Amazonで詳しく見る
by G-Tools

オシムの伝言のほうはまだです。ごめんなさい(何

まだ「勝つ日本」のほう、しかも3章の途中までしか読んでないのでアレですが、2章まではわりと今までも様々な媒体で触れて来られたオシムのコメントとかなりかぶる個所が多いので目新しさという面ではあまりないものの、それだけに繰り返し日本のサッカーにとって足りないものを提示する、重みのある問いかけになってます。あと3章ではオシムの過去の仕事ということで、サラエボに戻って最初の監督の仕事を始めたときの経緯から。クラブ名の「ゼレズニチャール」が鉄道員の意味だとかで、日本での最初の仕事場だったジェフ市原(千葉)のスポンサーがアレとか、浅からぬ因縁というか、思いを馳せてしまいますな。

これでオシムさんの車があたらしくなって暮らしやすくなっていただければと切に願う次第にござる。

2010年4月12日

KAN△

http://natalie.mu/music/news/30306
ナタリー - KAN「Mラバ」で名曲「まゆみ」含む3曲スペシャルライブ

もし「あなたにとって生涯最高のミュージシャンをひとりだけ挙げなさい」なんてなことを言われたら「うぇー無理ムリ絶対決めらんないってば」とかきっと泣き言を言うんだけど、3人くらいにまで負けてもらえるなら、必ずその中に自分はKANを入れる。

カンチガイもハナハダしい私の人生(DVD付)
カンチガイもハナハダしい私の人生(DVD付)KAN

UP-FRONT WORKS 2010-03-10
売り上げランキング : 70

おすすめ平均 star
star偉大な音楽家
starこれは売れてほしいですね
starスバラシイ曲ばかり♪

Amazonで詳しく見る
by G-Tools

KANのすばらしいところはいろいろあるけど、私から一つ挙げたいのはその生き様だ。...生き様なんて言ったら本人は笑うかもしれないけど、顔は生き様を映すと言います。KANさんほんまええ顔してまっせ、と言いたい。そんな冒頭楽屋のシーンだった。てか何その鏡向かいのポーズ。

今回の「Music Lovers」でもその話になっていたけど、KANの歴史の中で「愛は勝つ」という曲をどう位置づけるかで「あ、こいつ分かってるな(ニヤリ)」となるかがはっきりと分かれる。ゲストのつるの剛士も本当にちゃんと聴き込んでいたのだろうと思わせるコメントを続けていたのが嬉しかったが、「愛は勝つ」についてこれをKANの楽曲の中では「マニアックな曲」で「『愛は勝つ』なんて直接的な表現はあまり使われてない」というコメントを言っていて、そこからKAN自身からの裏打ちの話に繋げていったところがこの番組秀逸のキーポイントだった。私からも40ポイント。

http://ja.wikipedia.org/wiki/愛は勝つ
愛は勝つ - Wikipedia

そこから「愛は勝つ」のヒットによって自分の周りの何が変わったか、といった話になっていって、いやでもそんな変わったことはないと、自分の中では全て繋がって行ったことだったと言ったコメントが凄く大切だなと思った。

***

100万枚200万枚と売るようなヒットを一度でも飛ばしてしまうと、その後がおかしくなってしまうミュージシャンはどうしても多い。例えば「ガッツだぜ!!」で一躍スターダムにのし上がったウルフルズは、「ガッツだぜ!!」後の曲作りが無意識のうちに硬直してしまったことを「ガッツだぜ症候群」と称して振り返っている。

http://itunes.apple.com/jp/album/id75695586
ウルフルズ「iTunes Originals - ウルフルズ」 - iTunes で「iTunes Originals - ウルフルズ」をダウンロード

その後ジョン・B・チョッパーが脱退したりでバンドとして混迷を経つつも、再度の加入を境にもう一度息を吹き返す。「全肯定」でのトータス松本のコメントは非常に重みがある。

***

KANも「愛は勝つ」以後、状況としては大きく変わったはずである。1990年の発表当時27才。その20代を「悩みすぎて ややこしく生きた」と吐露したのは「めずらしい人生」だった。彼は歌において本当に自身のことを饒舌に表す人なのだなということがよく分かる。同曲の中で告白しているが、父親を亡くしたのもまさにこの頃(Wikipediaによるとまさに「愛は勝つ」と同じ1990年)らしい。そこでこんなことを言うようになっている。

君のために死ぬつもりはない
君なしでうたう勇気もないうちは
ただのピアノ弾きなのか

http://music.goo.ne.jp/lyric/LYRUTND49532/index.html
めずらしい人生 KAN 歌詞情報 - goo 音楽

めずらしい人生KAN1987~1992
めずらしい人生KAN1987~1992KAN

ポリドール 1992-02-28
売り上げランキング : 2185

おすすめ平均 star
starKANの影響を受けてるアーティストは意外に多い。ミスチルの桜井さんですらもだ!
star極上の短編映画集。
star「愛は勝つ」だけじゃない!!

Amazonで詳しく見る
by G-Tools

世のラブソングと言うたぐいのものにはだいたいお決まりのフレーズみたいなものがあって、「君のために死ぬ(死ねる)」といった言葉を歌った歌は数多い。KANはそこに対して「死ぬつもりはない」と言い、それが自分にとってあるべきことなのかどうなのか、といった問いかけを行ったのだ。

もしかしたら、自分に誰かの為に「死ぬつもりがない」ことに気がついて愕然としたのかも知れないし、はたまた「死ぬなんてとんでもない」と本気で反論したかったのかも知れないとも思った。本当のところどうなのかは私には分からない。しかし、肉親の死去に際し、大切な人を失うということがどういうことなのか、本気で自問したのではないかと思う。そんな自分を「ただのピアノ弾きなのか」、それでいいのかとまで問うた。このテーマが私にものすごく深く突き刺さった。

さらに言えば、その後にもまた深い言葉がある。

すばらしい人生 今うたをうたってる
そして多くの人々が泣き笑う
めずらしい人生 そんな多くの人を
裏切らないとぼくの明日はないのも知っている

「愛は勝つ」後も順調に音楽活動を重ねつつあった彼は、曲がヒットしたことそのものによって起こる言うなれば「愛は勝つ症候群」みたいなものが曲作りに現れることは無かったのかも知れない。しかし「多くの人を裏切らないと」いけないような考えを持ちつつあったことを素直に表している。これは何を意味していたのだろうか。「愛は勝つ」の発表年である'90年を節目として前後に起こったいくつかの作用がもしかしたら、作詞には変化を及ぼしていたのではないかと思う。わずかに、本当にわずかかかもしれないが。

そしてこの後しばし彼の歌詞には沈痛な顔が見え隠れするようになった。ように思う。言うまでもなく野郎の書くラブソングなんてものは結構な割合で失恋曲が多かったりするもので[要出典]、悲しめの曲が多くなってしまったとしても決して不自然ではない。しかしそれでもなお、「東京の音楽家が世界に出るのは無理だね(香港SAYONARA)」なんて誰も要求してない(オファーか何かあった?もしかして。)のに言って感傷に浸ってみたり、「ラジコンは僕を傷つけたりはしないから(ラジコン)」としんみりさせてみた直後に「焼肉でもいきましょうよ」といった風で妙にカラ元気っぽく調子を上げて見せるなど、もちろんそうした歌詞は他の時期にもあるにはあるけれど、「TOKYOMAN」「弱い男の強い意志 firm wills of a timid man」といったあたりのアルバムにはちょっと「おや?」と思わせる風情がある。ように思う。

そこから「東雲」から「MAN」にかけて、一つ潮目が変わった。特に「MAN」ではこの「君のために死ぬ」という命題についての一つの決算がなされたのだ。とても大きな決算である。

http://music.goo.ne.jp/lyric/LYRUTND47078/index.html
MAN KAN 歌詞情報 - goo 音楽

抱きあってむきあっていつだって綺麗事言ったって
紛れもなく人間は順番をつけたがってる
悲しいかな今一番大切なのは自分自身

でもいつかそんな壁にぶつかって立ち往生してる
こんなぼくを背中から見つめてる君をみつけた時
自分を犠牲にしても君を守りぬきたいと思う

いつの日か詐りなく言い切れる
勇気が持てたとき I'll be a man

同アルバムの発売元であるマーキュリーの当時プロデューサーであった森朝径という人のコメントが帯に載っている。「それまで彼を知らなかった。MANを聞いた。泣いた。」私も泣いた。

この歌詞の中には「死ぬ」ことそのものを言っているわけでは必ずしもないが、そこから繋がっているものであることははっきりと分かる。そして「自分自身」を「今一番大切」と言っている。まず自分が大事。しかしそこが出発点として必要なのであって、そこから脱し、抜け出そうともがく自分を見守ってくれる人を見つけたとき、「自分を犠牲に」≒「君のために死ねる」と言えるんじゃないか?そんな勇気を持てる、かも知れないね。それこそが「MAN」なのだと。

この段階ではまだ「死ねる」と言い切ったわけでもないし、「死ねる」と言えるようにならなきゃいけない、としたわけでもない。しかし、「そのうちなれんじゃね?」「そうなれるようにがんばるくらいでいいんじゃね?」あたりこそが大切なのだと。深い自問自答の末に決して軽はずみでない、しかし重すぎない実にしっくりくる、胃の腑の底にすとんと落ちるその覚悟の持ちように私は涙した。そしてその翌年に桜子さんと出会って2年後結婚。いやあ、KANさんあんた出来過ぎだよ。

MAN
MANKAN

マーキュリー・ミュージックエンタテインメント 1996-05-27
売り上げランキング : 8939

おすすめ平均 star
star是非とも復刻してほしいアルバム
starうれしい こりゃいい やわらかい
star最高傑作かも。

Amazonで詳しく見る
by G-Tools

この「MAN」以前のアルバムは私はリアルタイムには追っかけてなくて、大学生だった90年代後半頃に中古CD屋でまとめて見つけたものだったと思う。後追いだったので、見つけた頃にはそこをくぐり抜けた後だったことになる。そして「MAN」に触れ、「TIGERSONGWRITER」「KREMLINMAN」等とも合わせて各アルバムを並べてみたとき、次第次第に熟成の色を深くしてゆくその連なりにある時はたと気がついた。一つ一つの間に順々に繋がって行く道が浮かび上がって見えたのである。

「愛は勝つ」後の活動が大きくなって行ったことを「少しずつ広がって行った」「突然来た感じはしない」と言って非常に肯定的に前向きにとらえていたのは実に本当のことなのだろうなと思う一方で、決して平坦ではなかったのだろうなということも良く分かる。残念ながら私はKANのライブやラジオを良く見聞きしたわけではないので、彼についての話は音楽雑誌等でのいくつかのインタビューを除けばCDかオフィシャルサイトくらいでしか得られていない。それでも、彼の音楽活動そのものが彼の生き様であり、そしてその生き様がこうしてあらゆる「まわり道」を経て今があり、「カンチガイ」すらも飲み込んでここに居る、ということがありありと見えてくる。決してすんなりではないなりにも全て「繋がって」いたのだと。そういうことなのだ。ああ、KANってすげえなと、私が心から思う所以だ。うん。ケビン・コスナーよりかっこいいよほんと。

http://www.kimurakan.com/
KAN オフィシャルウェブサイト - www.kimuraKAN.com

まあ、20代30代というのは誰しも人生悩みどころを特に増やして生きて行く時期なのだろうなとも思う。最近も自分でもそれまで思いもしなかったようなことごとに降って湧かれて途方に暮れたりもしたこともある。そうして思うに、KANのように10年20年と時間を重ね、一瞬だけでない積み重ねをもって私たちに何かを見せてくれるミュージシャンたちには心から敬意を表するものなのです。

2010年4月11日

ちっちゃいディスプレイもえ(何

最近ディスプレイを1台代えたんですが、26型WUXGAサイズから19型FWXGAサイズと思いきってダウンサイジングでござる。

NEC MultiSync 25.5型ワイド液晶ディスプレイ ブラック LCD2690WUXi2-BK
NEC MultiSync 25.5型ワイド液晶ディスプレイ ブラック LCD2690WUXi2-BK
NEC 2008-11-21
売り上げランキング : 6617

おすすめ平均 star
star現段階で最高の選択
starNECさん解禁
star何とも言えない高画質です

Amazonで詳しく見る
by G-Tools

三菱電機(ディスプレイ) 18.5W型三菱液晶ディスプレイ RDT192WLM(BK)
三菱電機(ディスプレイ) 18.5W型三菱液晶ディスプレイ RDT192WLM(BK)
三菱電機
売り上げランキング : 116163


Amazonで詳しく見る
by G-Tools

2690の方は買った時はLCD-2690WUXi(←2じゃない)だったんですけどね。同系機ということで。俺が買った時は17万くらいしたんだよ。今9万切ってんですって。ずいぶんと下がりましたわねー。

元々デスクトップ環境はMac Pro+30インチCinema Displayでやってたのを、Windowsもデスクトップは必要じゃね?とか思ってて、Mac Pro以前から持ってたLCD2690WUXiを処分せず後生大事に維持して使おうとしてたんです。だけどそしたら奥さん、デスクトップは並べて置けるようなよほど広い机上環境が無いと、離れた場所に置かなきゃいけなくって、その2台の間をいったりきたりするのはあまり現実的ではないなってことが分かって来たんですわよ。そんなこんなで、利用機会の減ったWindowsデスクトップ機を本体とディスプレイ共々退役させることに相成ったわけです。

ただ、そうするとサーバ用に使えるディスプレイが無くなって困ったんです。普段はさすがに不要とはいえ、インストール時やトラブル時にはどうしても要る。いままではどうしてたかっていうと、そのLCD2690WUXiを使ってそこに繋げてたんですよ。けどこいつ13kgもあってすげー重いので、取り回しがただ事じゃなかった。VGAケーブルをひっぱって、ディスプレイのところまで回してたんですよ。おかげで見にくいわキーボードも打ちにくいわで。サーバもケーブルが届く範囲に置かなきゃいけないから、もしくは届かなかったら届く範囲にディスプレイなりサーバなりを配置しなおしたりとかでもうてんやわんやでした。

しかしまあ、ビックカメラのポイントがなぜか2万も貯まってたりとかしてたので、そこそこのサイズでいいから安いディスプレイを一台持っとこうってことになって、19型を所望しました。それがこのLCD192WLMです。

うん、適度に小さくて持ち運びにも困らない、部屋の中でも持ち運び可能でよかったよかった。もう少し小さくてもよかったかなーと思うくらいなんだけど、最近はこのくらいが最安というか、お得な価格帯になってるみたいですねー。

LinuxルータでOCN IPv6設定をやったよ 〜その2 wide-dhcpv6-clientとradvdとその他の巻〜

引き続きその2。分けたことに余り意味はない。っていうかあまりにいろいろ貼ってたら長くなって来たので途中で一息つきたかっただけですにょ。おほほ。

wide-dhcpv6c(wide-dhcpv6-client)とradvdについては、前出の"Memo - OCN IPv6"と変わる所はありません。そのまま持って来て通ります。

http://www.ln-lab.net/lunar-night.lab/page2-memo_ocnipv6/design-white/lang-ja
Memo - OCNIPv6

# /etc/wide-dhcpv6/dhcp6c.conf
interface ppp2 {
        send ia-pd 0;
};

id-assoc pd 0{
        prefix-interface eth0 {
                sla-id 1;
                sla-len 0;
        };
};
# /etc/radvd.conf
interface eth0
{
        AdvSendAdvert on;
        MinRtrAdvInterval 30;
        MaxRtrAdvInterval 100;
        prefix 2001:380:aaaa:bbbb::/64
        {
                AdvOnLink on;
                AdvAutonomous on;
        };

};

wide-dhcpv6-clientを起動して、まず指定のインタフェイスにOCNから指定されたprefixでv6アドレスが付くことを確認しましょう。prefixが"2001:380:aaaa:bbbb"だとしたらこのようになっているはずです。

hironobu@nelly:~$ /sbin/ifconfig
eth0      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx  
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: 2001:380:aaaa:bbbb:xxxx:xxxx:xxxx:xxxx/64 Scope:Global
          inet6 addr: fe80::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:20969 errors:0 dropped:0 overruns:0 frame:0
          TX packets:22630 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3654118 (3.4 MiB)  TX bytes:15726726 (14.9 MiB)
          Interrupt:252 Base address:0xe000 

さらにradvdを起動して、RA(Router Advertisement)が同セグメントの他のPCに配信され、inet6アドレスが付くのを確認します。

hironobu@shirley:~$ /sbin/ifconfig
eth0      Link encap:Ethernet  HWaddr zz:zz:zz:zz:zz:zz 
          inet addr:192.168.0.2  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: 2001:380:aaaa:bbbb:zzzz:zzzz:zzzz:zzzz/64 Scope:Global
          inet6 addr: fe80::zzzz:zzzz:zzzz:zzzz/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:98633 errors:0 dropped:0 overruns:0 frame:0
          TX packets:60699 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:87034901 (83.0 MiB)  TX bytes:6714585 (6.4 MiB)
          Interrupt:16 Base address:0x2400 

ちなみにnellyがルータで、shirleyは同セグメント上のサーバです。ここまで確認してOKであれば、ipv6用のルーティングを登録します。

# ip -f inet6 route add default dev ppp2
$ ip -f inet6 route
2001:380:aaaa:bbbb::/64 dev eth0  metric 256  mtu 1500 advmss 1440 hoplimit 4294967295
fe80::/64 dev eth1  metric 256  mtu 1500 advmss 1440 hoplimit 4294967295
fe80::/64 dev eth0  metric 256  mtu 1500 advmss 1440 hoplimit 4294967295
fe80::/64 dev ppp2  metric 256  mtu 1390 advmss 1330 hoplimit 4294967295
fe80::/10 dev ppp2  metric 1  mtu 1390 advmss 1330 hoplimit 4294967295
fe80::/10 dev ppp2  metric 256  mtu 1390 advmss 1330 hoplimit 4294967295
default dev ppp2  metric 1024  mtu 1390 advmss 1330 hoplimit 4294967295

こうすることでipv6パケットがppp2インタフェイスを通じて外に出て行くようになります。早速ping6してみましょう。

hironobu@shirley:~$ ping6 www.ocnipv6.jp
PING www.ocnipv6.jp(www.ocnipv6.jp) 56 data bytes
64 bytes from www.ocnipv6.jp: icmp_seq=1 ttl=54 time=17.0 ms
64 bytes from www.ocnipv6.jp: icmp_seq=2 ttl=54 time=17.7 ms
64 bytes from www.ocnipv6.jp: icmp_seq=3 ttl=54 time=16.3 ms
64 bytes from www.ocnipv6.jp: icmp_seq=4 ttl=54 time=16.8 ms
64 bytes from www.ocnipv6.jp: icmp_seq=5 ttl=54 time=17.5 ms
hironobu@shirley:~$ traceroute6 www.ocnipv6.jp
traceroute to www.ocnipv6.jp (2001:218:2001:3005::7f), 30 hops max, 40 byte packets
 1  2001:380:aaaa:bbbb:xxxx:xxxx:xxxx:xxxx (2001:380:aaaa:bbbb:xxxx:xxxx:xxxx:xxxx)  0.168 ms  0.162 ms  0.184 ms
 2  2001:380:8140::a (2001:380:8140::a)  16.904 ms  16.969 ms  17.010 ms
 3  2001:380:8140:9::1 (2001:380:8140:9::1)  17.050 ms  17.186 ms  17.353 ms
 4  2001:380:8130:3::1 (2001:380:8130:3::1)  17.067 ms  17.177 ms  17.385 ms
 5  2001:380:8130:12::4 (2001:380:8130:12::4)  17.594 ms  17.430 ms  17.617 ms
 6  2001:380:8230:f::2 (2001:380:8230:f::2)  17.348 ms  16.086 ms  16.258 ms
 7  ae-0-1.a20.tokyjp01.jp.ra.gin.ntt.net (2001:218:2000:5000::49)  16.339 ms  14.535 ms  14.307 ms
 8  ae-7.r20.tokyjp01.jp.bb.gin.ntt.net (2001:218:0:6000::185)  13.996 ms  14.411 ms  14.337 ms
 9  2001:218:0:6000::52 (2001:218:0:6000::52)  17.269 ms  17.430 ms  17.303 ms
10   (2001:218:2001:17::2)  17.715 ms  17.330 ms  17.749 ms
11  www.ocnipv6.jp (2001:218:2001:3005::7f)  17.763 ms  18.246 ms  17.849 ms

接続できましたにょ。

さて残る問題は、前回のxl2tpdも含めて、「OS起動時にどうするか」です。上に述べたようにxl2tpdに名前付きパイプへのechoを使ってxl2tpdへの操作を行いますが、これを/etc/init.d/*でやりたいですよね。Linuxルータを再起動したら何もせずとも自動的にipv6リンクも立ち上がっているようになるのが理想的です。

hironobu@nelly:~$ ls -l /etc/rc*/*xl2tpd
lrwxrwxrwx 1 root root 16 2010-04-10 01:02 /etc/rc0.d/K20xl2tpd -> ../init.d/xl2tpd
lrwxrwxrwx 1 root root 16 2010-04-10 01:02 /etc/rc1.d/K20xl2tpd -> ../init.d/xl2tpd
lrwxrwxrwx 1 root root 16 2010-04-10 01:02 /etc/rc2.d/S20xl2tpd -> ../init.d/xl2tpd
lrwxrwxrwx 1 root root 16 2010-04-10 01:02 /etc/rc3.d/S20xl2tpd -> ../init.d/xl2tpd
lrwxrwxrwx 1 root root 16 2010-04-10 01:02 /etc/rc4.d/S20xl2tpd -> ../init.d/xl2tpd
lrwxrwxrwx 1 root root 16 2010-04-10 01:02 /etc/rc5.d/S20xl2tpd -> ../init.d/xl2tpd
lrwxrwxrwx 1 root root 16 2010-04-10 01:02 /etc/rc6.d/K20xl2tpd -> ../init.d/xl2tpd

このxl2tpdが起動されたあとに、できるだけすぐにecho "c ocnipv6" > /var/run/xl2tpd/l2tp-controlを送りたい訳です。私が採った手は、このxl2tpdのすぐ後に起動するinitスクリプトを登録してやることです。下のようなスクリプトを作成し、まず/etc/init.d/ipv6として配置します。

#!/bin/sh

### BEGIN INIT INFO
# Provides:          ipv6
# Required-Start:    $remote_fs $network $syslog
# Required-Stop:     $remote_fs $network $syslog
# Should-Start:      $local_fs slapd
# Should-Stop:       $local_fs slapd
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: IPv6 service
# Description:       (empty)
### END INIT INFO

. /lib/lsb/init-functions

NAME="ocnipv6"
L2TPC="/var/run/xl2tpd/l2tp-control"
CMAX=10

do_start() {
  C=0;
  while [ ! -p $L2TPC ] && [ $C -lt $CMAX ]; do
    sleep 1;
    log_progress_msg '.';
    let C=C+1;
  done
  if [ $C -lt $CMAX ]; then
    echo "c $NAME" > $L2TPC
    return 0
  else
    return 1
  fi
}

do_end() {
  echo "d $NAME" > $L2TPC
  return 0
}

case "$1" in
  start)
    log_daemon_msg "Starting ipv6"
    if do_start; then
      log_end_msg 0
    else
      log_end_msg 1
      exit 1
    fi
    ;;
  stop)
    log_daemon_msg "Stopping ipv6"
    do_end
    log_end_msg 0
    ;;
  restart)
    log_daemon_msg "Restarting ipv6"
    do_end
    sleep 3
    if do_start; then
      log_end_msg 0
    else
      log_end_msg 1
      exit 1
    fi
    ;;
esac

exit 0

次に、update-rc.dを使って登録しますが、ランレベル2-5ではS21、同0-1,6ではK19になるようにします。つまり、起動時(2-5)ではxl2tpdの直後、終了時(0-1,6)ではxl2tpdの直前に、上のスクリプトを呼ぶ訳です。こうしないと、xl2tpdが起動しないうちに/var/run/xl2tpd/l2tp-controlをさわろうとするものの、当然起動前ならこのパイプは存在しないので、失敗することになるためです。

# update-rc.d ipv6 start 21 2 3 4 5 . stop 19 0 1 6 .
hironobu@nelly:~$ ls -l /etc/rc*/*ipv6
lrwxrwxrwx 1 root root 14 2010-04-10 01:26 /etc/rc0.d/K19ipv6 -> ../init.d/ipv6
lrwxrwxrwx 1 root root 14 2010-04-10 01:26 /etc/rc1.d/K19ipv6 -> ../init.d/ipv6
lrwxrwxrwx 1 root root 14 2010-04-10 01:26 /etc/rc2.d/S21ipv6 -> ../init.d/ipv6
lrwxrwxrwx 1 root root 14 2010-04-10 01:26 /etc/rc3.d/S21ipv6 -> ../init.d/ipv6
lrwxrwxrwx 1 root root 14 2010-04-10 01:26 /etc/rc4.d/S21ipv6 -> ../init.d/ipv6
lrwxrwxrwx 1 root root 14 2010-04-10 01:26 /etc/rc5.d/S21ipv6 -> ../init.d/ipv6
lrwxrwxrwx 1 root root 14 2010-04-10 01:26 /etc/rc6.d/K19ipv6 -> ../init.d/ipv6

さらに、スクリプト内でもパイプの生成を待つようにしています。上の例では10回=10秒間待ちますが、CMAXをいじれば調整可能です。

あとはルーティングですが、これはpppdを利用します。ipv6でのリンクが確立すると、pppdは/etc/ppp/ipv6-upおよび/etc/ppp/ipv6-up.d/*のスクリプトを起動しようとします。これを利用して、/etc/ppp/ipv6-up.d/routeスクリプトを下のように設置します。

#!/bin/sh

if [ "x$PPP_IFACE" = "xppp2" ]; then
  ip -f inet6 route add default dev $PPP_IFACE

  /etc/init.d/wide-dhcpv6-client restart
fi

また、/etc/ppp/ipv6-down.dディレクトリにも同じようにrouteスクリプトを置きます。

#!/bin/sh

if [ "x$PPP_IFACE" = "xppp2" ]; then
  ip -f inet6 route del default dev $PPP_IFACE
fi

wide-dhcpv6-clientにrestartを掛けている点に注意してください。ipv6スクリプトによってppp2がlink upを開始しますが、その完了を待たずにwide-dhcpv6-clientが起動されてしまうのです。ppp2のリンクが完了したタイミングでもう一度wide-dhcpv6-client

lrwxrwxrwx 1 root root  15 2010-04-07 05:17 S20rsync -> ../init.d/rsync
lrwxrwxrwx 1 root root  16 2010-04-11 00:02 S20xl2tpd -> ../init.d/xl2tpd
lrwxrwxrwx 1 root root  14 2010-04-10 01:26 S21ipv6 -> ../init.d/ipv6
lrwxrwxrwx 1 root root  28 2010-04-05 23:20 S40wide-dhcpv6-client -> ../init.d/wide-dhcpv6-client

これによって、起動後自動的にipv6リンクの確立とルーティングが行われるようになります。

2010年4月10日

LinuxルータでOCN IPv6設定をやったよ 〜その1 xl2tpdの巻〜

で、前回作ったLinuxルータにOCN IPv6の設定を入れてみた。大まかにはこちらの内容を参考にしてなんだけど、debian(lenny)なので微妙に違えています。

http://www.ln-lab.net/lunar-night.lab/page2-memo_ocnipv6/design-white/lang-ja
Memo - OCNIPv6

xl2tpdの設定

まずxl2tpdを動かします。lennyのパッケージそのままだと1.2.0なんだけど、これだとうまくL2TP接続を確立してくれませんでした。というわけでソースパッケージをそのまま持ってきます。

http://www.xelerance.com/software/xl2tpd/
Xelerance - Xelerance: Software: xL2TPD

こちらからどうぞ。一緒にdebビルド用のスクリプトがdebian/ディレクトリ配下に有るのでこれを使う。

$ wget http://www.xelerance.com/software/xl2tpd/xl2tpd-1.2.4.tar.gz
$ tar zxvf xl2tpd-1.2.4.tar.gz
$ cd xl2tpd-1.2.4
$ chmod +x ./debian/rules
$ env PREFIX=/usr dpkg-buildpackage -rfakeroot

ここで環境変数としてPREFIX=/usrにしてdpkg-buildpackage渡す必要があります。そうしないと出来上がったdebパッケージをインストールしたときに/usr/local/sbin/xl2tpdのパスで入れられちゃうんですけども、一緒にインストールされるinitスクリプトが/usr/sbin/xl2tpdにあることを想定して動くので、かなしいことに(´・ω・`)なります。

で、出来上がりがこうなるので、

hironobu@nelly:~/xl2tpd-1.2.4$ ls -l ..
合計 1148
-rw-r--r-- 1 hironobu hironobu    700 2010-04-10 00:46 l2tpd_1.1.11.dfsg.1-2_all.deb
drwxr-xr-x 9 hironobu hironobu   4096 2010-04-10 00:46 xl2tpd-1.2.4
-rw-r--r-- 1 hironobu hironobu 541039 2009-03-09 08:27 xl2tpd-1.2.4.tar.gz
-rw-r--r-- 1 hironobu hironobu    500 2010-04-10 00:46 xl2tpd_1.1.11.dfsg.1-2.dsc
-rw-r--r-- 1 hironobu hironobu 541003 2010-04-10 00:46 xl2tpd_1.1.11.dfsg.1-2.tar.gz
-rw-r--r-- 1 hironobu hironobu   1603 2010-04-10 00:46 xl2tpd_1.1.11.dfsg.1-2_amd64.changes
-rw-r--r-- 1 hironobu hironobu  68346 2010-04-10 00:46 xl2tpd_1.1.11.dfsg.1-2_amd64.deb

xl2tpd_1.1.11.dfsg.1-2_amd64.debをインストールすればよいでござる。バージョンが"1.1.11"になってるのは同debianディレクトリ配下のどこか設定ファイルか何かがあるはずのをいじればいいじゃないかな。(適当)

$ sudo dpkg -i xl2tpd_1.1.11.dfsg.1-2_amd64.deb

インストールは完了。で、設定。

; /etc/xl2tpd/xl2tpd.conf
[lac ocnipv6]
lns = foobar.ocn.ne.jp
hostname = aaa@bbb
ppp debug = yes
pppoptfile = /etc/ppp/peers/ocnipv6
length bit = yes
require chap = yes
refuse pap = yes
require authentication = yes
redial = yes
redial timeout = 10
max redials = 6
# /etc/ppp/peers/ocnipv6
nodefaultroute
noip
+ipv6
usepeerdns
user aaa@bbb
mtu 1390
noipdefault
default-asyncmap
nopcomp
noaccomp
noccp
novj
nobsdcomp
nodeflate
lcp-echo-interval 30
lcp-echo-failure  2
lock
noauth

1つ目はxl2tpd.conf。lnsにはOCNから指定された接続サーバ名を、hostnameにはOCNにPPPoE接続を設定した際のユーザIDをそれぞれ設定する。あとは上に挙げたページからそのまま持って来ています。

2つ目はそのxl2tpd.conf中のpppoptfileオプションを通じて指定される、L2TP上でのppp接続で使われるpppd設定ファイルです。こいつも同じくOCNでのユーザIDを持って来ています。

さらに/etc/xl2tpd/l2tp-secretsにOCNのユーザIDとパスワードを書きます。書式は/etc/ppp/{chap-secrets,pap-secrets}と同じ。

"aaa@bbb" * "ccc"

ここで一度xl2tpdを再起動しておきます。

Apr 11 00:23:41 gw xl2tpd[2606]: setsockopt recvref[22]: Protocol not available
Apr 11 00:23:41 gw xl2tpd[2606]: This binary does not support kernel L2TP.
Apr 11 00:23:41 gw xl2tpd[2607]: xl2tpd version xl2tpd-1.2.4 started on nelly PID:2607
Apr 11 00:23:41 gw xl2tpd[2607]: Written by Mark Spencer, Copyright (C) 1998, Adtran, Inc.
Apr 11 00:23:41 gw xl2tpd[2607]: Forked by Scott Balmos and David Stipp, (C) 2001
Apr 11 00:23:41 gw xl2tpd[2607]: Inherited by Jeff McAdams, (C) 2002
Apr 11 00:23:41 gw xl2tpd[2607]: Forked again by Xelerance (www.xelerance.com) (C) 2006
Apr 11 00:23:41 gw xl2tpd[2607]: Listening on IP address 0.0.0.0, port 1701

こんな感じに出ますのでね。続いてxl2tpdを操作してL2TP接続を開始させます。

# echo "c ocnipv6" > /var/run/xl2tpd/l2tp-control

でこんなログが出るはず。

Apr 11 00:23:41 gw xl2tpd[2607]: Connecting to host foobar.ocn.ne.jp, port 1701
Apr 11 00:23:41 gw xl2tpd[2607]: Connection established to x.x.x.x, 1701.  Local: 36525, Remote: 60956 (ref=0/0).
Apr 11 00:23:41 gw xl2tpd[2607]: Calling on tunnel 36525
Apr 11 00:23:41 gw xl2tpd[2607]: Call established with x.x.x.x, Local: 26379, Remote: 27351, Serial: 1 (ref=0/0)
Apr 11 00:23:41 gw xl2tpd[2607]: start_pppd: I'm running: 
Apr 11 00:23:41 gw xl2tpd[2607]: "/usr/sbin/pppd" 
...
Apr 11 00:23:41 gw pppd[2617]: pppd 2.4.4 started by root, uid 0
...
Apr 11 00:23:41 gw pppd[2617]: CHAP authentication succeeded
Apr 11 00:23:41 gw pppd[2617]: CHAP authentication succeeded
Apr 11 00:23:41 gw pppd[2617]: sent [IPV6CP ConfReq id=0x1 ]
Apr 11 00:23:41 gw pppd[2617]: rcvd [IPV6CP ConfReq id=0x1 ]
Apr 11 00:23:41 gw pppd[2617]: sent [IPV6CP ConfAck id=0x1 ]
Apr 11 00:23:41 gw pppd[2617]: rcvd [IPV6CP ConfAck id=0x1 ]
Apr 11 00:23:41 gw pppd[2617]: local  LL address fe80::xxxx:xxxx:xxxx:xxxx
Apr 11 00:23:41 gw pppd[2617]: remote LL address fe80::yyyy:yyyy:yyyy:yyyy
Apr 11 00:23:41 gw pppd[2617]: Script /etc/ppp/ipv6-up started (pid 2648)

で最終的に接続が完了すれば、ifconfigで下のようなpppxインタフェイスが出現します。

ppp2      Link encap:Point-to-Point Protocol  
          inet6 addr: fe80::xxxx:xxxx:xxxx:xxxx/10 Scope:Link
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1390  Metric:1
          RX packets:481 errors:0 dropped:0 overruns:0 frame:0
          TX packets:297 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:163773 (159.9 KiB)  TX bytes:32095 (31.3 KiB)

ここまでで結構長くなったので一旦終わり。次はwide-dhcpv6cの設定に行きます。

2010年4月 7日

routerをSRT100からLinux PCサーバに入れ替えたよ その2

さて。どんな設定したかって話なんですが、びっくりするくらいあっさりしてた。いい世の中になったものですな。

sysctl: ip_forward

/etc/sysctl.confに以下の設定を有効化。IPv6まわりの設定はまだこれからですけど、一応含めました。

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_ra = 0

iptables(firewall+NAT)

一番戸惑ったのはiptablesをどこで設定するのかというところ。前に見た時は/etc/init.d/iptablesとか何とかあったと思ったんですが、lenny以降は無くなったみたいですね。というわけでこちらに倣って/etc/network/if-pre-up.d/iptablesにスクリプトを置いてみました。えいやで作ったので甘いかもしんないですがとりあえずINPUTとFORWARDはDROPにしとかなきゃだぜぜぜ。

#!/bin/sh

IPTABLES='/sbin/iptables'

LOCAL_IF=eth0
LOCALNET='x.x.x.x/yy'

##########
# initialize

$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z

$IPTABLES -t nat -F POSTROUTING

$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT

##########

$IPTABLES -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
$IPTABLES -A INPUT -j ACCEPT -i lo
$IPTABLES -A INPUT -j ACCEPT -s $LOCALNET
$IPTABLES -A INPUT -j ACCEPT -p tcp --dport 1723
$IPTABLES -A INPUT -j ACCEPT -p 47

$IPTABLES -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED

##########

$IPTABLES -N outer_local

##########

$IPTABLES -N local_outer
$IPTABLES -A local_outer -j ACCEPT -s $LOCALNET

##########
# nat

$IPTABLES -t nat -A POSTROUTING -j MASQUERADE -s $LOCALNET -o ! $LOCAL_IF

##########
# main table

$IPTABLES -A FORWARD -j outer_local -i ! $LOCAL_IF -o $LOCAL_IF
$IPTABLES -A FORWARD -j local_outer -i $LOCAL_IF

$IPTABLES -A INPUT   -j outer_local -i ! $LOCAL_IF

PPPoE周り

pppoeconfっていうパッケージがあるみたいで、これを使ったら本当にあっけなく設定できたんですけど、Bフレッツのマルチセッションを使ってたので結局自分でファイルをいじるしかなかったみたいです。

というわけで、BフレッツONUをeth1側に繋げたことを確認しつつ、まずはデフォルトセッション側に"defaultroute"を付けて。(/etc/ppp/peers/session1)

noipdefault
defaultroute
hide-password
lcp-echo-interval 20
lcp-echo-failure 3
connect /bin/true
noauth
persist
mtu 1492
noaccomp
default-asyncmap
plugin rp-pppoe.so eth1
user "aaa@bbb"
usepeerdns

デフォルトじゃない側では"nodefaultroute"として"usepeerdns"を付けずに、また"noproxyarp"も指定。(/etc/ppp/peers/session2)

noipdefault
nodefaultroute
noproxyarp
hide-password
lcp-echo-interval 20
lcp-echo-failure 3
connect /bin/true
noauth
persist
mtu 1492
noaccomp
default-asyncmap
plugin rp-pppoe.so eth1
user "xxx@yyy"

さらに/etc/ppp/chap-secretsおよび/etc/ppp/pap-secretsに次のようにパスワードを設定。どっちも同じ書式でいいのね。

"aaa@bbb" * "ccc"
"xxx@yyy" * "zzz"

あとはこれを自動接続にするように、/etc/network/interfacesに追記。

allow-hotplug eth1
iface eth1 inet static

auto ppp0
iface ppp0 inet ppp
  pre-up /sbin/ifconfig eth1 up
  provider session1

auto ppp1
iface ppp1 inet ppp
  pre-up /sbin/ifconfig eth1 up
  provider session2

で、マルチセッションというからには、destinationによって振り分けてroutingをちゃんと指定しておきたいよね、と。最初/etc/network/interfacesのppp1にup/down行を追加してみたんですが、うまくいかなかったです。代わりに/etc/ppp/ip-up.d/routeというスクリプトを置いてchmod +xしました。

#!/bin/sh

if [ "x$PPP_IFACE" = "xppp1" ]; then
  ip route add a.a.a.a dev $PPP_IFACE
  ip route add b.b.b.b dev $PPP_IFACE
fi

他には...

BINDとかIPv6の設定分とかは次回に続く。

2010年4月 6日

routerをSRT100からLinux PCサーバに入れ替えたよ

一通り設定が終わったのでリプレース、多少てこずったというかひさびさのケーブリングで戸惑ったりしたけど何とか無事に完了。distroはdebian(lenny)で、スペックはAtom 330(Intel D945GCLF2)にメモリ2GBのSSD 40GB(これもIntel)。NICも2枚差し(正確には内1個オンボード)なんて何年振りだろ。多少まごついたけどおさだまりのip_forwardとiptablesでNAT(今回の場合はMASQUERADE)とフレッツ用のpppoeと、そのくらいでだいたい行けた。もちろん(?)kernelソースも持って来てはありますが、まだ使いどころが無かった。

一緒にOCN IPv6サービスも申し込んだので、こちらの設定も追々する予定。ああ、不要なdebパッケージをお掃除したいね。

2010年4月 4日

PostTwiOauthでMTからtwitterに投稿を通知するプラグイン その2

前回のとりあえずの続報、のようなもの。うちの環境(WebARENA SuiteX)でインストールするのに結局下記のような修正を入れました。

diff -ur PostTwiOauth_0.11.orig/plugins/PostTwiOauth/PostTwiOauth.pl PostTwiOauth_0.11/plugins/PostTwiOauth/PostTwiOauth.pl
--- PostTwiOauth_0.11.orig/plugins/PostTwiOauth/PostTwiOauth.pl	2010-03-19 14:42:41.000000000 +0900
+++ PostTwiOauth_0.11/plugins/PostTwiOauth/PostTwiOauth.pl	2010-04-04 03:00:43.000000000 +0900
@@ -135,7 +135,7 @@
 	}
 	
 	my $message = "$title $url" . $hashtag;
-	$message = MT::I18N::decode_utf8($message);
+	eval('$message = MT::I18N::decode_utf8($message);');
 	
 	my $API_Method_url  = 'https://twitter.com/statuses/update.xml';
 	my $request_method = 'POST'; 
diff -ur PostTwiOauth_0.11.orig/plugins/PostTwiOauth/lib/PostTest.pm PostTwiOauth_0.11/plugins/PostTwiOauth/lib/PostTest.pm
--- PostTwiOauth_0.11.orig/plugins/PostTwiOauth/lib/PostTest.pm	2010-03-19 14:42:41.000000000 +0900
+++ PostTwiOauth_0.11/plugins/PostTwiOauth/lib/PostTest.pm	2010-04-03 08:45:07.000000000 +0900
@@ -34,6 +34,7 @@
 	my $blog_id;
 	eval {$blog_id = $app->path_info};
 	$blog_id =~ s!^/!!;
+	$blog_id =~ s!/$!!;
 	my $plugin = new MT::Plugin::PostTwiOauth({
     	name => $PLUGIN_NAME,
 	});
diff -ur PostTwiOauth_0.11.orig/plugins/PostTwiOauth/lib/PostTwiOauthReq.pm PostTwiOauth_0.11/plugins/PostTwiOauth/lib/PostTwiOauthReq.pm
--- PostTwiOauth_0.11.orig/plugins/PostTwiOauth/lib/PostTwiOauthReq.pm	2010-04-03 07:02:25.000000000 +0900
+++ PostTwiOauth_0.11/plugins/PostTwiOauth/lib/PostTwiOauthReq.pm	2010-04-03 08:46:13.000000000 +0900
@@ -34,6 +34,7 @@
 	my $blog_id;
 	eval {$blog_id = $app->path_info};
 	$blog_id =~ s!^/!!;
+	$blog_id =~ s!/$!!;
 	my $plugin = new MT::Plugin::PostTwiOauth({
     	name => $PLUGIN_NAME,
 	});

2010年4月 3日

PostTwiOauthでMTからtwitterに投稿を通知するプラグインを入れてみたんだけどね。

なんか今一ちゃんと動いてるかどうか心配っぽいんだけど、MTへの投稿通知をtwitterに対して行うプラグイン"PostTwiOauth"を入れてみました。

http://www.macminiosx.com/2010/03/movable_typeoauthtwitter_postt.html
Movable Type用OAuth対応Twitter投稿プラグイン PostTwiOAuth - BSDあれこれ

設定時に"oauth.cgi/(blog_id)"や"post_test.cgi/(blog_id)"という形式でCGIページを開く必要があるんだけど((blog_id)は数字)、そのときにパス末尾に/(スラッシュ)がくっついて"oauth.cgi/(blog_id)/"のようになって処理用のモジュールに渡って来てたようで、PostTwiOauthReq.pmとPostTest.pmが正常に動作しなくなってしまって大変往生しました。orz 何だっけこの挙動は...。PATH_INFOの末尾にスラッシュがくっついて来てるっぽいからなんだけど、何かの設定いじって云々とかだっけ...?

あと、途中でMT::I18N::decode_utf8を使うようになっていたのがうまく働いていなかったようなのでEncode::decode_utf8に変更evalで囲ってみた。詳細は追って調べる予定。

2010年4月 2日

Xcode 3.2.2 (iPhone SDK 3.2 beta)の続報

これの続報。昨日、一度Xcodeを完全にアンインストールして、iPhone SDKを除くXcode 3.2.1をインストール、さらにそのあとにiPhone SDK 3.2 GMをインストール、ってやったらhangが起こらなくなった。何ぞ。

$ sudo /Developer/Library/uninstall-devtools --mode=all

2010年4月 1日

Xcode 3.2.2 (iPhone SDK 3.2 beta)にしてからというものビルドのたびにhangしまくるのだが

せっかくGMにもなったことだしと思って最新のiPhone SDKを持って来てインストールすると、ビルドの途中でどうにも固まってばかりでにっちもさっちも行かなくなって困った。

GM以前のbeta 3だか4だかの頃からずっとこうだったので、さすがにどうにかしたい。調べてみると、新規作成したプロジェクトでビルドすると固まらないが、以前から(Xcode 3.2.1とか)使ってたプロジェクトだとダメみたい。うーん。