つれづれ日記 2005年11月

予定

毎日


2005年11月28日 (月曜日)

22:40:12 # Life subversionで編集中のファイルが,現在レポジトリにあるバージョンとどれくらい差分があるか確認する. docdiffとsubversion(svn)を組み合わせた何かがほしかったので,仕込んでみました. docdiffはHTMLを吐いてくれるので, それをmozillaが表示するように仕込んでみました.いかがでしょうか. svnの現在の実装 (.svn/以下にオリジナルがおいてある) に依存しています. いつもの自分だったら,もっと変態的にelservを使って一時ファイルが必要ないようにしたりしたかったりするのですが,今日はできるだけシンプルにいってみました. M-x svndocdiff-currentで,現在編集中のバッファの 差分が確認できます.

(defun svndocdiff-current ()
  "Invoke svn docdiff for the current buffer,
and run mozilla-firefox -remote openfile(filename)
to preview the diff"
  (interactive)
  (let* ((currentname 
	  (buffer-file-name (current-buffer)))
	 (svnorigname
	  (concat default-directory
		  ".svn/text-base/" 
		  (file-name-nondirectory 
		   (buffer-file-name (current-buffer)))
		  ".svn-base"))
	 (diff-command
	  "/usr/bin/docdiff --html %s %s > %s")
	 (mozilla-command-line
	  "mozilla-firefox -remote 'openfile(%s)'")
	 (moztmpfile-name
	  (concat default-directory
		  ".svn/.docdifftmp.html")))
    (save-buffer)
    (shell-command
     (format diff-command 
	     svnorigname 
	     currentname
	     moztmpfile-name)
     "*svndocdiff*" "*svndocdiff-err*")
    (shell-command
     (format mozilla-command-line
	     moztmpfile-name)
     "*svndocdiff*" "*svndocdiff-err*")))
	

2005年11月26日 (土曜日)

00:50:41 # Life git-whatchanged -p 2c6e5a839f92591a4bc6cac4a575d42151645af3 で確認すればわかる. カーネルからdevfsのサポートは消えた事になっているけど,消すためのパッチはこれだけで, 実はKconfigファイルから消されただけなので,Kconfigファイルさえもどせばまだ動く状態なのではないだろうか,ということ.ただそれだけだけど.

14:23:08 # Life oprofileをDebian powerpcで使ってみる. 使っているノートパソコンはpowerpcなので, それでも使えるようにしてみた. CONFIG_OPROFILE=yにしてカーネルをインストールしなおしたら, 2.6.12で動作した しかし,opcontrol --resetを何度か実行していると, oprofiledが死んでしまう. while sleep 10s; opcontrol --reset; ps -ef |grep op ;done でループをまわしていると,10回くらいでどうも死んでいるように見える.

root      6172     1  0 14:19 ?        00:00:00 /usr/bin/oprofiled --separate-lib=1 --separate-kernel=0 --separate-thread=0 --separate-cpu=0 --events= --vmlinux=/boot/vmlinux.coff-2.6.12 --kernel-range=0000000000500000,0000000000506830
[14:20:29]ibookg4:tmp> while sleep 10s; do sudo opcontrol --reset ; ps -ef |grep op; done
Signalling daemon... done
root      6172     1  0 14:19 ?        00:00:00 /usr/bin/oprofiled --separate-lib=1 --separate-kernel=0 --separate-thread=0 --separate-cpu=0 --events= --vmlinux=/boot/vmlinux.coff-2.6.12 --kernel-range=0000000000500000,0000000000506830
dancer    9725  5489  0 14:20 pts/1    00:00:00 grep op
Signalling daemon... done
root      6172     1  0 14:19 ?        00:00:00 /usr/bin/oprofiled --separate-lib=1 --separate-kernel=0 --separate-thread=0 --separate-cpu=0 --events= --vmlinux=/boot/vmlinux.coff-2.6.12 --kernel-range=0000000000500000,0000000000506830
Signalling daemon... done
root      6172     1  0 14:19 ?        00:00:00 /usr/bin/oprofiled --separate-lib=1 --separate-kernel=0 --separate-thread=0 --separate-cpu=0 --events= --vmlinux=/boot/vmlinux.coff-2.6.12 --kernel-range=0000000000500000,0000000000506830
dump fail: either daemon died during last run or dies during dump
Signalling daemon... /usr/bin/opcontrol: line 1251: kill: (6172) - No such process
done
dancer    9856  5489  0 14:21 pts/1    00:00:00 grep op
	

ついでに,ibookのカーネルを2.6.14にあげてみた. ビルドして,/etc/yaboot.confを書き換えて,ybin -v を実行. どうやら2.6.14にするとoprofiledが死なないらしい. ibookg4で dd if=/dev/zero of=/dev/nullwhile(1);だけをしているプログラムを実行していた場合の出力.

CPU: CPU with timer interrupt, speed 0 MHz (estimated)
Profiling through timer interrupt
samples  %        image name               app name                 symbol name
5587     72.8898  binfmtc1KoHxE (deleted)  binfmtc1KoHxE (deleted)  (no symbols)
1132     14.7684  libc-2.3.5.so            dd                       _wordcopy_fwd_aligned
791      10.3196  dd                       dd                       (no symbols)
68        0.8871  libc-2.3.5.so            dd                       memcpy
24        0.3131  bash                     bash                     (no symbols)
7         0.0913  libc-2.3.5.so            bash                     mbrtowc
6         0.0783  libc-2.3.5.so            bash                     __gconv_transform_ascii_internal
5         0.0652  libc-2.3.5.so            dd                       __write_nocancel
3         0.0391  ld-2.3.5.so              bash                     do_lookup_x
2         0.0261  ld-2.3.5.so              bash                     _dl_relocate_object
2         0.0261  ld-2.3.5.so              grep                     _dl_relocate_object
2         0.0261  libc-2.3.5.so            cpufreqd                 _IO_file_read
	

おなじような状況をamd64マシンで再現させてみると, 全然風景が違う. まず,ibookではカーネルのプロファイリングができていないようだ.なぜだろう.

CPU: AMD64 processors, speed 2193.67 MHz (estimated)
Counted CPU_CLK_UNHALTED events (Cycles outside of halt state) with a unit mask of 0x00 (No unit mask) count 200000
samples  %        image name               app name                 symbol name
56804    45.8459  binfmtcwALdYr            binfmtcwALdYr            (no symbols)
8990      7.2557  vmlinux                  vmlinux                  __clear_user
7853      6.3381  vmlinux                  vmlinux                  system_call
5578      4.5019  vmlinux                  vmlinux                  vfs_read
4996      4.0322  dd                       dd                       (no symbols)
4501      3.6327  libc-2.3.5.so            dd                       memcpy
4231      3.4148  vmlinux                  vmlinux                  sys_read
4167      3.3631  vmlinux                  vmlinux                  read_zero
4009      3.2356  vmlinux                  vmlinux                  sysret_check
2425      1.9572  vmlinux                  vmlinux                  vfs_write
  
	

ibookで利用しているCPUは,7447Aというもののようだが, パフォーマンスモニタ例外というのは存在するようだ.(cf. MPC7450UM). データシートはこちらに. Performance Monitor Exceptionというのがあり,それが利用できそうだ. とおもいながらなんとなくコードを眺めていると, arch/ppc/oprofile/op_model_fsl_booke.cがまさに11.2節にある「Performance Monitor Exception」の処理をしているように見える. CONFIG_FSL_BOOKEでないと有効にならない. oprofile_arch_init はFSL_BOOKEでないと-ENODEVを返す(arch/ppc/oprofile/common.c). FSL_BOOKEというのは,arch/ppc/Kconfigの説明によると e500 (85xx シリーズ) のことらしい. mtspr, mfspr という関数はアッセンブリ言語の命令に該当し, おそらく move to SPR, move from SPR という意味だろう. SPRはspecial Purpose Register. SPRN_UMMCR0が936である,とかいうのは仕様か. include/asm-ppc64/processor.h include/asm-ppc/processor.h にて,定義されている. ここをみてもppc64のほうがppcよりも真面目に仕込まれているように見える. PMC1にて,適当に1番(プロセッサーサイクル)を計測して,100000くらいでオーバフローするような値にすればよいか. PMCが6個あり,それぞれが違う値を計測できるようになっている,というのがなんとも言えない,

Programming Environment Manual for 32-bit Implementations of the PowerPC Architecture というアーキテクチャマニュアルをよんでいると,おもしろいことがたくさん書いてある. liは実はマクロらしく,addiを使って実装しているらしい. addi rD,0,valueか. move register(代入)もorで実装しているらしい.最強. 目から鱗.powerpcの命令セットは CPU側が命令を最適化して実行してくれることを前提にしているような気がします. 命令が32ビットの固定長というけっこう凄い縛りがあるからこういう 設計になってしまったのかもしれないですな.

linuxppcのパッチ一覧みたいなページがあり, どうやら, Stephen Rothwell という人が作業しているらしいということがわかった. 最新のgitツリーを見ると, arch/ppc/oprofileではなく, arch/powerpc/oprofileというディレクトリができており, arch/powerpc以下にppc32/64の両方に適用できるようなコードがマージされているようだ. ただ,ppc32でE500以外では-ENODEVを返すのはかわらない.

#ifndef __powerpc64__
#ifdef CONFIG_FSL_BOOKE
        model = &op_model_fsl_booke;
#else
        return -ENODEV;
#endif
	

2005年11月24日 (木曜日)

02:09:12 # Life qemuをoprofileでprofilingしてみる. qemuでdebian-installerを動かしているところをプロファイリングしてみた. 結果を見ると,94%がqemuプロセスが占めているということがわかった. しかも,50%がanonで,30%がqemu. しかし,anonと書いてある部分の詳細を分析する方法はあるのだろうか. おそらくanonという部分は,qemuが生成したコードだろうと思われる. sshdが0.3%あるのは, ssh経由のXで画面を表示していたからだろう.

CPU_CLK_UNHALT...|
  samples|      %|
------------------
    25515 94.8055 qemu
        CPU_CLK_UNHALT...|
          samples|      %|
        ------------------
            14106 55.2851 anon (tgid:12257 range:0x16f7000-0x26f8000)
             7999 31.3502 qemu
             3356 13.1530 libc-2.3.5.so
               36  0.1411 libpthread-2.3.5.so
               12  0.0470 libX11.so.6.2
                3  0.0118 libm-2.3.5.so
                3  0.0118 libSDL-1.2.so.0.7.2
     1020  3.7900 vmlinux
       88  0.3270 sshd
	

2005年11月23日 (水曜日)

14:20:44 # Life statの変更にはまる. cowdancerはstat(1)コマンドを内部で利用しています. stat --formatの出力が 従来改行コードを出力していたのが,出力しなくなりました. 古いバージョンと今のバージョンの両方で動くコードというのがなかなかおもいつかないので困りました. 339136. 二週間前くらいにDebian sid にアップロードされた coreutilsはsargeにあったバージョンから大幅に変更になっているので,バグ出し必要ですね.

もうひとつひっかかったのが, cp -al 1/ 2/ は以前うごいていたのですが, 2/が無い場合に関して, cp -al 1/ 2 にしないと動かなくなりました. こっちのほうがはまる人いるかな?

21:45:26 # Life emacsでYaTeXでeucのファイルを編集しようとすると,jisに変換されてしまう. 特に設定した記憶もないので,追跡調査してみた. マニュアルを読むと書いてあった. どうやら YaTeX-coding-system に定義されているコードに強制設定されるようになるため, YaTeX-kanji-code に設定してあげる必要がある. 0が変換しない,という設定のような気がしたのだが,0を使うとなんだかemacsの内部コードみたいなもので保存されてしまった(見た感じはUTF16). デフォルトだと iso-2022-jp に強制的に変換される. 仕方がないので,とりあえず適当に条件分岐させてyatex-mode-hookに追加させてみた. (if (string-match "^/path/to/dir" default-directory) (progn (set-buffer-file-coding-system 'euc-jp) (set-buffer-modified-p nil))) 自動認識とかしてほしいのだが,どうしようもないか...

コード解析: /usr/share/emacs/site-lisp/yatex/yatexlib.elYaTeX-kanji-code-alistというそれっぽいものが定義されている. yatex.elの中で YaTeX-emacs-20がtの場合については, (cdr (assoc YaTeX-kanji-code YaTeX-kanji-code-alist)))) というように使われているので,YaTeX-kanji-codeがいくつか,によるらしい. しかし,この値をロードされるファイルによって変更するというのは微妙に面倒で, 普通にyatex-mode-hookをロードされる時点ではYaTeX-kanji-codeに変更されてしまった後(yatex-mode()参照). 新規作成する以外は既存のコーディングシステムを採用するという手法はとっちゃいかんのかねぇ. ところで,/etc/emacs/site-start.d/50yatex-init.elに書いてあるgimvってビューアは存在しないと思うのだが,何者なのだろうか?

 -- Variable: YaTeX-kanji-code
     文書を作成する時の漢字コード 1=Shift JIS, 2=JIS, 3=EUC (2 (MS-DOSでは
     1))
	

latex-modeを使っている場合と,yatex-modeでどう違うのか,ということを比較した場合に, \footnoteの中身が違う色で表示してくれるという部分にけっこう依存しているということに気づいた. まぁ,長年yatex-modeを使っているので,いろいろと慣れてしまってます... yatex-modeauto-fill されてしまうのが困るな. これも他のバッファとあわせています,と説明には書いてある.text-modeを継承しているからだろうか? M-x toggle-text-mode-auto-fillでなんとかなるのだろうか?

22:30:59 # Life svn diff の日本語訳出力がおかしい. svn diff を使ってみたところ,なぜだか locale を無視して utf-8 で出力しているようです. svn diff で表示される差分自体はEUC文字列なので,UTF-8でヘッダ部 分を表示してくれるとlvなどのページャが混乱し,問題になります. みんな utf-8 locale を使っているから気づいていないのでしょうか?

ChangeLogを見ているかぎりでは,subversion はファイル名とかをUTF-8で内部で保持しているっぽい. log については少なくとも内部ではutf-8で保存しているっぽい. ファイルの中身まで漢字コード変換とかかけてくれていたりするのでしょうか. これは,たとえlocaleにあわせた出力をしてくれたとしても, localeにあった文字コードでファイルが保存されているとは限らないため, svn diffの出力を処理するのには問題が生じそうですね.なやましい.

$  locale -k charmap
charmap="EUC-JP"
$ svn diff | head -4 | iconv -f utf-8 -t euc-jp
Index: XXX
===================================================================
--- XXX (リビジョン 17)
+++ XXX (作業コピー)
	  
	

diff_content_changed(subversion/libsvn_client/diff.c) で実際は呼び出している svn_diff__file_output_unified(subversion/libsvn_diff/diff_file.c) diff_labelで生成されており,その時点ではおそらくutf-8. svn_diff_file_output_unifiedではsvn_stream_printfでそのまま出力されている. うーむ.diff.cにはfile_printf_from_utf8という関数が定義されており, 気を使っているようにみえるのだが,実際のdiffを表示しているところがlocaleを無視しているのか? 推理を裏付ける調査をする気力がないのでこのへんで.

小林さんから ずいぶん前から上流のバグとして登録されているもので, 5月ころにすでに解決されていて もうすぐリリースされることになっている1.3では修正が含まれることになっているということを教えてもらいました.

2005年11月22日 (火曜日)

23:07:51 # Life 最近sshのスキャニング攻撃が多い. 流行している回避する方法としては, 高速に同じIPアドレスからくるアクセスを抑止する,というものがあるようです. いままで見た例は,ログを取得してそれを解析する,という手順を踏むものが多かったみたいですが, iptablesのみをつかう方法,というのもあるので紹介しておきます. Erich Schubertのblogより

iptables -A FORWARD -i ethLRZ -p tcp --dport 22 -m state --state NEW \
        -m recent --set --name SSH
#$iptables -A FORWARD -i ethLRZ -p tcp --dport 22 -m state --state NEW \
#       -m recent --update --seconds 60 --hitcount 5 --rttl \
#       --name SSH -j LOG --log-prefix "SSH_brute_force "
iptables -A FORWARD -i ethLRZ -p tcp --dport 22 -m state --state NEW \
        -m recent --update --seconds 60 --hitcount 5 --rttl --name SSH -j DROP
	
iptables -I INPUT -i ppp0 -p tcp --dport 22 -m state --state NEW \
        -m recent --update --seconds 60 --hitcount 5 --rttl --name SSH -j DROP
iptables -I INPUT -i ppp0 -p tcp --dport 22 -m state --state NEW \
        -m recent --set --name SSH
	

コードを見てみたけれども,spinlockってこんなにしてもよいのだろうか? あと,linked listとかでIPアドレス毎に管理しているようにみえるなぁ... あまりたくさんのIPアドレスからアクセスが一度にきた場合にはメモリを使い果たしたりできるのだろうか? /proc/net/ipt_recent/SSH にてIPアドレス毎の最近のアクセス状況の一覧が出て来るため, 確認してみるのもよいかもしれません.

23:49:13 # Life FedoraがSCIMへ. Fedore CoreのFC5に向けての変更の一部として,IIIMFがなくなり,SCIMになった,との 記述がある. RedHatがSCIMになったら,それなりにSCIMへの移行がすすんでしまうのではないだろうか? kernel planetより. Zaitcevのblog. 彼は Jeremy Katzのblogから知ったらしい.

2005年11月18日 (金曜日)

22:42:49 # Life ptraceあそび. ptraceをひさしぶりにいじってみる. ppcのノートパソコンであそんでいるので,ppc版で遊ぶしかない. 以前テスト用に作成していたプログラムがコンパイルできないのをきっかけに調査してみた. コンパイルしようとすると, PTRACE_GETREGS が無い,というエラーが出る. PPCでは,ptraceでは,レジスタの内容は読めないのか?と気になって調査した. ヘッダファイルを追跡していくと,linux/user.hをincludeすると, asm/user.h asm-ppc/user.h asm/page.hlinux/ptrace.h asm/ptrace.hasm-ppc/ptrace.hという順にincludeされていく. そのどこにもGETREGSが定義されていない. 念のためppc64を見てみると,若干内容が違うが,定義されていなかった. PPC_PTRACE_GETREGSというのは定義されているのが謎をただよわせる. カーネル側のソースは,arch/ppc/kernel/ptrace.csys_ptraceにある. そこを見ると,たしかにGETREGSは実装されていないようだった. ちなみに,arch/ppc64/kernel/ptrace.cには, PPC_PTRACE_GETREGSというのが実装されていた. うーむ.これはなんとも言えない. コードを見ているだけでは,実装するのは超絶に簡単そうなのだが, なぜ実装されていないのだろう. ppc32の開発がとどこおってしまうほどppc64が主流になってしまったとかいうことはないと 思うのだが. 謎だ.

ppcで,syscallがどうよばれるのか,も調べてみた. arch/ppc/kernel/entry.S がどうやらsyscallを受けるコードらしい. sys_call_table というのがあり, そこを見てsyscallの番号に対応した関数を呼び出しているようだ. arch/ppc/kernel/misc.Ssys_call_tableの実態があり, そこがアドレス表(というか,関数のアドレスの一覧)になっている. そこにsys_ptraceもある. コメントが素敵だ. 「なぜこれは自動ではなく,またCで書かれていないのだ?」と書いてある. i386にはarch/kernel/syscall_table.Sというsys_call_table だけを保持しているソースがある.それと見た目が同じなので,コピーしているだけなのだろう. 内容は一部違うので,単純には置き換えられない. sys_forkのある欄がppc_fork に置き換えられたりしている.

カーネル側だけを解析しているとどうやって実際に発行しているのかがいまいちわからないので, helloと出力するだけのプログラムを作成し, gcc -O2 -static a.c として,スタティックリンクしたバイナリを作成した. これで,システムコールを呼ぶ部分までを含むa.outというバイナリができる. それで,逆アセンブルしてみる. objdump -d a.out (なお,ここでwriteの書き込んでいるfile descriptor は 0であるが, 普通は file descriptor 0(標準入力?) に書き込むということはしないだろうと思う. 多分ここの部分では,寝惚けていた)

#include <unistd.h>
main()
{
	write(0, "hello\n", 6);
}

	

関係のありそうなところを追跡してみる. writeシステムコールは4番だ. どうやら,scという命令があり,それがシステムコールを発行してくれるっぽい. r0に4を代入して,scを呼んでいる.

100002e0 <main>:
100002e0:       7c 08 02 a6     mflr    r0
100002e4:       94 21 ff f0     stwu    r1,-16(r1)
100002e8:       3c 80 10 06     lis     r4,4102 ;; "helloのアドレスの上位ビット"
100002ec:       38 60 00 00     li      r3,0
100002f0:       38 84 9d f4     addi    r4,r4,-25100 ;; "helloのアドレスの下位ビット?"
100002f4:       38 a0 00 06     li      r5,6
100002f8:       90 01 00 14     stw     r0,20(r1)
100002fc:       48 00 7b 45     bl      10007e40 <__libc_write>
10000300:       80 01 00 14     lwz     r0,20(r1)
10000304:       38 21 00 10     addi    r1,r1,16
10000308:       7c 08 03 a6     mtlr    r0
1000030c:       4e 80 00 20     blr

10007e40 <__libc_write>:
10007e40:       81 42 8c 20     lwz     r10,-29664(r2)
10007e44:       2c 0a 00 00     cmpwi   r10,0
10007e48:       40 82 00 14     bne-    10007e5c <__libc_write+0x1c>
10007e4c:       38 00 00 04     li      r0,4
10007e50:       44 00 00 02     sc
10007e54:       4c a3 00 20     bnslr+

該当する部分をgcc -S で出力させると(なぜこんなに違う?)
main:
        mflr 0
        stwu 1,-16(1)
        lis 4,.LC0@ha
        li 3,0
        la 4,.LC0@l(4)
        li 5,6
        stw 0,20(1)
        bl write
        lwz 0,20(1)
        addi 1,1,16
        mtlr 0
        blr
	

write関数を呼び出す代わりにシステムコールを直接よぶように変更してみた. writeはファイルデスクリプタなどをオプションとしてとる. libc側のインタフェースは write(fd, *buf, count). r0がシステムコール番号. r3がfdっぽい. r4が*buf. r5がcount. これは,fs/read_write.cにある,sys_writeを結局呼んでいるのだろう. r1はスタックポインタとして利用しているようだ.値を破壊して,blrを呼ぶと SIGSEGV が発生する. また,main関数からの帰り値としては,r3が利用されているようだ.

/*BINFMTASMCPP:
*/
	.section	.rodata
	.align 2
.LC0:
	.string	"hello\n"
	.section	".text"
	.align 2
	.p2align 4,,15
	.globl main
	.type	main, @function
main:
	lis 4,.LC0@ha
	li 3,1
	la 4,.LC0@l(4)
	li 5,6
	li 0,4
	sc
	li 3,0
	blr
	.size	main,.-main
	

...といじっていたが,で,ptraceはどうなった? ptraceをがんばろうとおもっても,システムコールをトラップするには, r0に何がはいっているか,などという情報が必要な気がする. straceはppc上でどうやって実装されているのかを調査する必要がある.

なにげなくいろいろと見ていると,arch/i386/kernel/vsyscall-sysenter.S で手書きでDWARF2デバッグ情報らしきものを書いてある. oprofileをみると,例えば,arch/i386/oprofile/backtrace.cは現在 FRAME_POINTERではないならJUNKだ,と返してしまうようになっているが,これを なんとかDWARF2を処理できるようにならないだろうか. スタックを見ればバックトレースを作成するのに十分な情報が取得できるような気がするのだが, なにか見落としているのだろうか. (これを見ていて気づいたのだが, なんとなく,ppcでは,oprofileで, backtraceを処理するコードがないようにも見える.この影響でcall-graphが計算できないことになるのではないだろうか.)

ぐぐってみたら,backtraceをdwarf2の情報から作成する サンプルっぽいのがあった. えらく大きいのと, まだ全容を把握できていないので,とりあえずメモ.

2005年11月16日 (水曜日)

21:51:42 # Life tetexの変更についての考察. tetex3.0で,latexがpdfetexを利用してダンプをつくるようになった. woody の texから,sarge の etex,そして,今回の pdfetex だ. latexはpdfetexへのシンボリックリンクになっており, pdfetexは,argv[0] を解析し,latexという名前で呼ばれたため, latex.fmt を読み込んでロードするという話になる. initexというコマンドがあったのだが,tetex 3.0でなくなった. 実は,formatが変わっているため, latex用のformatをダンプするためには, initex, einitex, pdfeinitex のコマンドのうち正しいものを呼ばなければならない, という状況になってしまっている. ただ,initex, einitex, pdfeinitexはそれぞれ tex, etex, pdfetex へのシンボリックリンクで, 最近の web2c のtex実装では, -ini コマンドをつけて 直接実行してあげても同じ事が出来るようになっている. 従来はinitex &latex a.texというように指定して実行していた物が, latex &latex a.texというように実行できるようになっているのである.

initexモードでしかできないことというのが二つある. 一つは,全くフォーマットをロードしないで,生のTeXを起動すること(昔のTeXは plain tex というフォーマットをデフォルトでロードしてしまった,最近は違うらしい). もう一つは,フォーマットというものをダンプすることだ. texは,「フォーマット」というダンプをロードして,前回ダンプを作成した時点から 処理を再開できるという仕様になっているらしい.

ここまでは,まぁ,よいだろう. もう一つ問題がある. Debian の TeX (というか,tetex 2.0 から 3.0への変更) で問題になるのは, woody の tex のフォーマットファイルは .fmtという拡張子になっていた. sarge (tetex 2.X) の etex のフォーマットファイルは,.efmtという拡張子になっていた. sid (tetex 3.X) の pdfetex のフォーマットファイルは .fmt という拡張子になっている. それを確認する信頼できる方法がない. kpsewhich --format fmt latexでわかりそうなのだが,違うようだ. どうも,cnffileを作成して,fmtutilを使え,という話になるようだ. 338046, 338608 で議論したメールの数が気づいたら100通とかになっているのでどういう話をしたのか,まとめるのが大変だ.

提案されたネタは下記. latex -iniを使うのより複雑で何のメリットもない気がする. cleanupで削除すべきファイルの名前 (XXXX.fmt) が何なのか,という疑問に答えが無い.

fmtutil.cnfの名前の調べ方?:
	  grep ^latex `kpsewhich --format='web2c files' fmtutil.cnf` | \
   awk '{print $1,"\t",$2,"\t",$3,"\t &latex name.ini"}'


fmtutil.cnfファイルの中身?:
\makeatletter
\def\SourceFile{\def\whizzy@master}
\def\WHIZZYCONFIGDIR{'"$CONFIGDIR"'}
\def\WHIZZYHOME{'"$HOME"'}
\makeatother
\let\Documentclass\documentclass
\renewcommand{\documentclass}[2][]{\Documentclass[#1]{#2}
\let\WhizzyLevel'"$LEVEL"'
\def\WhizzyExt{'"$EXT"'}
\input{'"$PACKAGE"'}}
\input{'"$NAME$EXT"'}
\dump


$ fmtutil --cnffile fmtutil_name.cnf --fmtdir . 

	

2005年11月13日 (日曜日)

09:34:32 # Life 東京エリアDebian勉強会報告. 11月の第10回Debian勉強会を実施しました. 今回はdpkg-statoverrideとDWNの翻訳についての話を展開しました. 今回の参加人数は7人でした. 議論された点を以下に紹介します.

翻訳ツールについていろいろ議論していたら,ちょうどいろいろと他のところでも動いていたみたいですね. open-language-tools

今回の会計

(+
;;資料コピー7人分
	  -2316
;;DWNクイズ景品代
	  -150
;;会場代
	  -1500
;;勉強会費
	  +3500
)
	  -466 の赤字.
	

11:20:57 # Life bttvの問題について,解決案が出て来た. VM_RESERVEDの挙動が変わったから,だということらしい. bttvだけではなく,他のカードでも同様の問題が発生しているらしい. 昨晩2.6.15-rc1がリリースされたためにテストしているユーザの数が増えたため いろいろとデバッグがすすんだらしい. 問題が発生しても,結局rc1を出してしまうのであれば, gitツリーを使ってバグを報告していることに意味があるのかどうかは不明ですな.

Index: linux/drivers/media/video/video-buf.c
===================================================================
RCS file: /cvs/video4linux/v4l-kernel/linux/drivers/media/video/video-buf.c,v
retrieving revision 1.21
diff -u -p -r1.21 video-buf.c
--- linux/drivers/media/video/video-buf.c       16 Oct 2005 12:13:58 -0000
+++ linux/drivers/media/video/video-buf.c       12 Nov 2005 22:19:13 -0000
@@ -1248,7 +1248,7 @@ int videobuf_mmap_mapper(struct videobuf
        map->end      = vma->vm_end;
        map->q        = q;
        vma->vm_ops   = &videobuf_vm_ops;
-       vma->vm_flags |= VM_DONTEXPAND | VM_RESERVED;
+       vma->vm_flags |= VM_DONTEXPAND;
        vma->vm_flags &= ~VM_IO; /* using shared anonymous pages */
        vma->vm_private_data = map;
        dprintk(1,"mmap %p: q=%p %08lx-%08lx pgoff %08lx bufs %d-%d\n",
	

13:41:04 # Life blaisorbladeにパッチをおくってもらってuser-mode-linuxが動くようになった. user-mode-linuxの中では,i386のアプリは動作しないような気がする.

sh-3.00# chroot /home/dancer/i386-chroot/1/ /bin/bash
chroot: cannot run command `/bin/bash': Exec format error
sh-3.00# file /home/dancer/i386-chroot/1/bin/bash
/home/dancer/i386-chroot/1/bin/bash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), stripped
sh-3.00# uname -a
Linux (none) 2.6.14-g508862e4 #1 Sun Nov 13 13:30:32 JST 2005 x86_64 GNU/Linux
	

20:14:39 # Life ibookg4が気づいたらhybernationができるようになっているらしい. カーネルは2.6.12. 蓋をしめると光がついたままになり, 蓋をあけると復活する. Update: Phil Kern と Wouter Verhelst がコメントをくれた. USBデバイスを接続したままだともどったときに認識しないらしい.検証必要.

eth0: suspending, WakeOnLan disabled
radeonfb (0000:00:10.0): suspending to state: 3...
uninorth-agp: disabling AGP on device 0000:00:10.0
uninorth-agp: disabling AGP on bridge 0000:00:0b.0
radeonfb (0000:00:10.0): resuming from state: 3...
PCI: Enabling device 0000:00:10.0 (0000 -> 0003)
radeon: PAD_CTLR_STRENGTH doesn't stabilize !
agpgart: Putting AGP V2 device at 0000:00:0b.0 into 4x mode
agpgart: Putting AGP V2 device at 0000:00:10.0 into 4x mode
PCI: Enabling device 0001:10:1b.0 (0000 -> 0002)
PCI: Enabling device 0001:10:1b.1 (0000 -> 0002)
PCI: Enabling device 0001:10:1b.2 (0000 -> 0002)
ehci_hcd 0001:10:1b.2: park 0
ehci_hcd 0001:10:1b.2: USB 2.0 restarted, EHCI 1.00, driver 10 Dec 2004
eth0: resuming
PHY ID: 4061e4, addr: 0
hda: Enabling Ultra DMA 5
hdc: Enabling MultiWord DMA 2
adb: starting probe task...
adb devices: [2]: 2 c9 [3]: 3 1 [7]: 7 1f
ADB keyboard at 2, handler 1
ADB mouse at 3, handler set to 4 (trackpad)
adb: finished probe task...
agpgart: Putting AGP V2 device at 0000:00:0b.0 into 4x mode
agpgart: Putting AGP V2 device at 0000:00:10.0 into 4x mode
[drm] Loading R200 Microcode
	

2005年11月12日 (土曜日)

10:00:36 # Life db2がubuntuでcertifyされたらしい. これを実現した人達に拍手. 1年半しかサポートされないプラットフォームをDBサーバにはしたくはないけど,まぁ,第一歩. ここから ubuntuのプレス db2のページ

UbuntuはDebian ベースのディストリビューション. 大衆ユーザを対象にしたマーケティングをしていて, Debianのスナップショットをベースに 半年に一回リリースをすることをコミットしている. また,サポートも18ヵ月間実施することになっているようだ.

12:23:47 # Life gingというDebian GNU/kfreebsdのライブCDがあります. それをamd64 Debianのqemu上で起動してみました. 30分くらいかかった気もしますが,無事にブート.ここまで動くのは,ある意味感動的です.

13:00:52 # dupload whizzytexのメンテナンス.whizzytexの1.2.3-2をアップロード. 対応したバグは338046. tetex 3.0 にてinitexが無くなったりしたことに対処する.

 
 whizzytex (1.2.3-2) unstable; urgency=low
 .
   * Bug fix: "whizzytex: einitex unavailable from tetex and no longer
     functions.", thanks to Roland Stigge for reporting (Closes: #338046).
     Work around recent tetex3.0 change. The notable things were:
   - tex -ini is used instead of removed 'initex'.
   - Now pdfetex is used for formatting.
 .
   Documented the change in README.Debian
 .
   * DH_COMPAT=4.
   * debian/test-file/test1.tex: make sure I have tested this.

	

tex -ini &latex a.texとしてもエラーになる. pdfetex -ini &latex a.texとしたら成功する. latexはpdfetexでfmtが作成されているから.

13:53:37 # Life outline-minor-modeをコマンドラインに活用する. emacsでM-x shell とすると, コマンドラインが出て来る. このモードは結構emacsの特徴をのこしつつシェルを使うモードで, いくつかあるシェルようのモードのなかでも個人的には気に入っている. M-x outline-minor-mode とすると,シェルのアウトラインモードが使える. プロンプトをどう設定しているのかにもよるが,M-: (setq outline-regexp "^.*>") としてコマンドプロンプトのある行をoutlineのヘッダとして定義すると, 自分の入力したコマンドの行がヘッダとして利用され, 出力が見えないようにできる. 実はこうやってつかうと便利かもしれない,という技. 自分ですげーとおもっていたら,実はもういろんな人がいろいろなモード向けに設定を準備していました. ありがたくいただきます. ちょっとショック. あとデフォルトのキーバインドがありえないので,おそらくC-zは使わないだろうとみこして,C-zにバインドしてみました.

2005年11月11日 (金曜日)

08:28:48 # Life 日本オタクツアー. ポップ・ジャパン・ツアー:日本おたくツアー日程。 というのがあった. Debian Conferenceの構成になにか参考になるだろうか.

最近のgit treeでは,UMLコンパイル失敗する.

  CC      lib/rwsem.o
lib/rwsem.c: In function '__rwsem_do_wake':
lib/rwsem.c:57: warning: implicit declaration of function 'rwsem_atomic_update'
lib/rwsem.c:57: error: 'RWSEM_ACTIVE_BIAS' undeclared (first use in this function)
lib/rwsem.c:57: error: (Each undeclared identifier is reported only once
lib/rwsem.c:57: error: for each function it appears in.)
lib/rwsem.c:59: error: 'RWSEM_ACTIVE_MASK' undeclared (first use in this function)
lib/rwsem.c:108: error: 'RWSEM_WAITING_BIAS' undeclared (first use in this function)
lib/rwsem.c:113: warning: implicit declaration of function 'rwsem_atomic_add'
lib/rwsem.c: In function 'rwsem_down_failed_common':
lib/rwsem.c:163: error: 'RWSEM_ACTIVE_MASK' undeclared (first use in this function)
lib/rwsem.c: In function 'rwsem_down_read_failed':
lib/rwsem.c:193: error: 'RWSEM_WAITING_BIAS' undeclared (first use in this function)
lib/rwsem.c:193: error: 'RWSEM_ACTIVE_BIAS' undeclared (first use in this function)
lib/rwsem.c: In function 'rwsem_down_write_failed':
lib/rwsem.c:210: error: 'RWSEM_ACTIVE_BIAS' undeclared (first use in this function)
make[1]: *** [lib/rwsem.o] Error 1
make: *** [lib] Error 2
	

20:45:39 # Life 最新のツリーでmencoderが動作しないという件について,v4l2の方々が反応してきた. v4l2の互換レイヤーをbttvは利用しているらしく, そこにregressionがあるのではないか,ということ. カーネルのどのバージョンがどうか,ということを確認.

特定のリビジョンをチェックアウトする方法.

	  git-cat-file tag $(cat .git/refs/tags/v2.6.14)
	  git-cat-file commit 741b2252a5e14d6c60a913c77a6099abe73a854a
	  git-read-tree 69ebfee77c8a174c87ea8ed31e023c94b09a9d6e
	  git-checkout-index  -f -a 
	  make-kpkg clean && make oldconfig && make-kpkg --revision 741b2252a5e14d6c60a913c77a6099abe73a854a kernel_image --rootcmd=fakeroot
	

df70b17f88a4d1d8545d3569a1f6d28c6004f9e4の時点で問題があるということを確認した.

channel: 12
minutes: 1
output filename: a
MEncoder dev-CVS--4.0.2 (C) 2000-2005 MPlayer Team
CPU: Advanced Micro Devices Athlon 64 Newcastle,Winchester,San Diego,Venice; Sempron Palermo (Family: 15, Stepping: 0)
Detected cache-line size is 64 bytes
CPUflags: Type: 15 MMX: 1 MMX2: 1 3DNow: 1 3DNow2: 1 SSE: 1 SSE2: 1
Compiled for x86 CPU with extensions: MMX MMX2 3DNow 3DNowEx SSE SSE2

success: format: 9  data: 0x0 - 0x0
Selected driver: v4l2
 name: Video 4 Linux 2 input
 author: Martin Olschewski
 comment: first try, more to come ;-)
Selected device: BT878 video (IODATA GV-BCTV5/PC
 Tuner cap:
 Tuner rxs: MONO
 Capabilites:  video capture  video overlay  VBI capture device  tuner  read/write  streaming
 supported norms: 0 = PAL; 1 = NTSC; 2 = SECAM; 3 = PAL-Nc; 4 = PAL-M; 5 = PAL-N; 6 = NTSC-JP; 7 = PAL-60;
 inputs: 0 = Television; 1 = Composite1; 2 = S-Video;
 Current input: 0
 Current format: YUYV
v4l2: current audio mode is : STEREO
Selected channel: 12 (freq: 217.250)
v4l2: ioctl queue buffer failed: Bad address
v4l2: 0 frames successfully processed, 0 frames dropped.
============ Sorry, this file format is not recognized/supported =============
=== If this file is an AVI, ASF or MPEG stream, please contact the author! ===
Cannot open demuxer.

	

Linux dancer64 2.6.14dancer-g6e9d6b8e #1 Mon Oct 31 11:31:20 JST 2005 x86_64 GNU/Linux でも問題がある.

channel: 1
minutes: 12
output filename: a
MEncoder dev-CVS--4.0.2 (C) 2000-2005 MPlayer Team
CPU: Advanced Micro Devices Athlon 64 Newcastle,Winchester,San Diego,Venice; Sempron Palermo (Family: 15, Stepping: 0)
Detected cache-line size is 64 bytes
CPUflags: Type: 15 MMX: 1 MMX2: 1 3DNow: 1 3DNow2: 1 SSE: 1 SSE2: 1
Compiled for x86 CPU with extensions: MMX MMX2 3DNow 3DNowEx SSE SSE2

success: format: 9  data: 0x0 - 0x0
Selected driver: v4l2
 name: Video 4 Linux 2 input
 author: Martin Olschewski
 comment: first try, more to come ;-)
Selected device: BT878 video (IODATA GV-BCTV5/PC
 Tuner cap:
 Tuner rxs: MONO
 Capabilites:  video capture  video overlay  VBI capture device  tuner  read/write  streaming
 supported norms: 0 = PAL; 1 = NTSC; 2 = SECAM; 3 = PAL-Nc; 4 = PAL-M; 5 = PAL-N; 6 = NTSC-JP; 7 = PAL-60;
 inputs: 0 = Television; 1 = Composite1; 2 = S-Video;
 Current input: 0
 Current format: YUYV
v4l2: current audio mode is : STEREO
Selected channel: 1 (freq: 91.250)
v4l2: ioctl queue buffer failed: Bad address
v4l2: 0 frames successfully processed, 0 frames dropped.
============ Sorry, this file format is not recognized/supported =============
=== If this file is an AVI, ASF or MPEG stream, please contact the author! ===
Cannot open demuxer.
	

22:46:12 # Life bttvのデバッグのためにbisectをはじめてみる. 一度目から比較してみても,全然bisectの数が減っていない気がする. 1000程度だったきがしたのだが,それが二度目には2000近くに増えている? この出力は何だろう. なんとなく見積もってみると,多分あと11回くらいはgit bisectしないといけないような気がする. 11時間くらいかかると見た.

$ git-bisect bad
Bisecting: 1966 revisions left to test after this
[23fd07750a789a66fe88cf173d52a18f1a387da4] Merge ../linux-2.6 by hand
$ make oldconfig && make-kpkg clean && make-kpkg --revision bisectN kernel_image --rootcmd=fakeroot
	

で,回答がかえってきた.

This is probably going to converge on the PageReserved removal patch,
and the way get_user_pages now refuses on a VM_RESERVED vma.

I don't want to send you a patch for that immediately, we're still
thinking through the implications of allowing VM_RESERVED there again
(it might just hit another BUG, or leak memory).  And we probably
need to take the separate "vbetool" problem into account too.

Though if you're curious and impatient, you could try just editing
the " | VM_RESERVED" out of mm/memory.c get_user_pages.
	

一ヵ月前のバージョンであるgit 0.99.8-0 を使っているのがまずいのかもしれない気がして来たので, 最新にアップデートしてみようとしらべはじめる.

2005年11月10日 (木曜日)

22:37:57 # Life whizzytexが,tetex3のアップロードにより動かなくなったらしい. どうやら,initexなどが削除されたらしい. tex -ini を使え,とのことだ. 338046. initexの存在は結構有名なものなので, Debianだから削除してよいというものでもない気がする. whizzytexは,ドキュメントのソースをtexで処理した結果の texの内部状態をダンプしておくことで,次の処理を高速化する という意味でinitexを使っている. リアルタイムプレビューに必要なのでこういう使い方になっているのだが, まぁ,あるいみ非常に特殊だ. 昔は,おそらく巨大なドキュメントの処理を高速化するために 使えなくもない手法だったのかもしれないが最近は使っていないのだろうという雰囲気がただよう. TeX by Topicの33.2 More about formatsにさらっと書いてある説明だけを読んでも, 何がどうなのかよくわからん...困った.

2005年11月9日 (水曜日)

08:42:02 # Life x86_64でのアッセンブリ出力を見てみる. hello worldと出力して終了するだけのCのプログラムに対して gccが出力するアッセンブリコードを見てみた. rspについてsubq/addqをしているのは,main()の暗黙のintパラメータのためのスタックを 確保しているようにも思えるし,ABIの要求であるようにも思える. movlでポインタをedi(32-bitレジスタ)に代入しているのは32-bit命令で実行している. eax=0と設定するのも,32-bitのxorlで実行している. 上位32-bitはどうなるのだろうか,という疑問については, CPUのマニュアルを見ることが必要になるのだろう. 32-bit xor は上位をZEROにするらしい

.LC0:
        .string "Hello world"
        .text
        .p2align 4,,15
main:
.LFB12:
        subq    $8, %rsp
.LCFI0:
        movl    $.LC0, %edi
        call    puts
        xorl    %eax, %eax
        addq    $8, %rsp
        ret
	

20:24:00 # Life amd64の今日のgcjを動かそうとして,失敗した. 4.0.3.jarしかないのに,4.0.2.jarを探しにいっているから. amd64だけ同期がとれていないのだろうか.libgcj-commonは4.0.2-3だが, gcj-4.0は4.0.2-2. とりあえず,回避方法としては, CLASSPATH=/usr/share/java/libgcj-4.0.jar make checkのようにして環境変数で指定してあげること.

$ gcc -v -o /tmp/a.o tests/javatest.java
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --enable-languages=c,c++,java,f95,objc,ada,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.0 --enable-__cxa_atexit --enable-libstdcxx-allocator=mt --enable-clocale=gnu --enable-libstdcxx-debug --enable-java-gc=boehm --enable-java-awt=gtk-default --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre --enable-mpfr --disable-werror --enable-checking=release x86_64-linux-gnu
Thread model: posix
gcc version 4.0.2 (Debian 4.0.2-2)
 /usr/lib/gcc/x86_64-linux-gnu/4.0.2/jc1 tests/javatest.java -quiet -dumpbase javatest.java -mtune=k8 -auxbase javatest -version -o /tmp/ccmkYtQL.s
GNU Java version 4.0.2 (Debian 4.0.2-2) (x86_64-linux-gnu)
        compiled by GNU C version 4.0.2 (Debian 4.0.2-2).
GGC heuristics: --param ggc-min-expand=94 --param ggc-min-heapsize=120304
Class path starts here:
    ./
    /usr/share/java/libgcj-4.0.2.jar/ (system) (zip)
tests/javatest.java:0: error: Can't find default package 'java.lang'. Check the CLASSPATH environment variable and the access to the archives
	

22:39:20 # Life binfmtcを拡張して,evalを追加しようと思っていたのだが, 全く同じような実装をやられてしまった. satoruさんのblog. 個人的にはこっち方面が楽しくてたまらん. CSPは見てびっくり. やっちゃいけなさそうな雰囲気をかもしだしているところに踏み出しているところが, binfmtcを越えている感じがしてたまらないですな. 役にたつかたたないかといわれると役にたたないぎりぎりの線を保っているのが素晴らしい.

2005年11月8日 (火曜日)

07:32:19 # Life Linux の git ツリー. 昨日のpatchを見ると, qla2xxx関連で凄いでかいパッチが入っている. drivers/scsi/qla2xxx/ql2300_fw.c の差分は,意味が全くわからない.下記のようなものが延々と続く.

@@ -78,159 +66,159 @@ unsigned short risc_code01[] = {
        0x1800, 0x810d, 0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x001f,
        0x2001, 0x0001, 0x9112, 0x20e9, 0x0001, 0x20a1, 0x0800, 0x900e,
        0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0f26, 0x080c,
-       0x612f, 0x080c, 0xb07d, 0x080c, 0x10dd, 0x080c, 0x12fc, 0x080c,
-       0x1bf8, 0x080c, 0x0d57, 0x080c, 0x1062, 0x080c, 0x34b1, 0x080c,
-       0x785c, 0x080c, 0x6ab0, 0x080c, 0x892f, 0x080c, 0x8610, 0x080c,
-       0x24d0, 0x080c, 0x91db, 0x080c, 0x7f2c, 0x080c, 0x2309, 0x080c,
-       0x243d, 0x080c, 0x24c5, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004,
+       0x6135, 0x080c, 0xb097, 0x080c, 0x10dd, 0x080c, 0x12fc, 0x080c,
+       0x1c00, 0x080c, 0x0d57, 0x080c, 0x1062, 0x080c, 0x34ac, 0x080c,
+       0x7862, 0x080c, 0x6ab6, 0x080c, 0x8935, 0x080c, 0x8616, 0x080c,
+       0x24d8, 0x080c, 0x91e1, 0x080c, 0x7f32, 0x080c, 0x2311, 0x080c,
+       0x2445, 0x080c, 0x24cd, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004,
        0x091f, 0x7880, 0x9086, 0x0002, 0x1190, 0x7883, 0x4000, 0x7837,
        0x4000, 0x7833, 0x0010, 0x0e04, 0x0913, 0x2091, 0x5000, 0x2091,
	

08:43:08 # Life アップロードするのを忘れていたので,昨晩cowdancer をアップロード. 0.6 です. chmod/chownも処理するように改変しました. fchmod/fchownをどう処理するのかについては今後の課題.

2005年11月7日 (月曜日)

08:26:59 # Life debuildをoprofileしてみる. RedHatMagazineの記事を参考に,debianでもやってみる. とりあえずなんとなく結果が出て来る,が,デバッグ情報がほとんどないため, 細かい情報を取得しようとすると困難を究める. カーネルのvmlinuxを取得するのは,make-kpkgを実施したディレクトリで make vmlinuxとするとどうやら取得できるようだ. csum_partial_copy_generic という関数がえらく時間を占めているようだ. arch/x86_64/lib/csum-copy.Sか. -cオプションを指定して,call graphを取得しようとしても,取得できず.残念.

CONFIG_DEBUGとかCONFIG_FRAME_POINTERをenableにしないとバックトレースは とれないような雰囲気だ. oprofileがDWARF2とかの情報を利用できたらなんとかなりそうなものだが, なんとかならないものだろうか.

CPU: AMD64 processors, speed 2193.7 MHz (estimated)
Counted CPU_CLK_UNHALTED events (Cycles outside of halt state) with a unit mask
of 0x00 (No unit mask) count 860000
CPU_CLK_UNHALT...|
  samples|      %|
------------------
    11587 35.6940 /home/dancer/shared/git/linux-2.6/vmlinux
     3971 12.2328 /usr/bin/perl
        CPU_CLK_UNHALT...|
          samples|      %|
        ------------------
             2981 75.0693 /usr/lib/libperl.so.5.8.7
              649 16.3435 /lib/libc-2.3.5.so
              292  7.3533 /lib/ld-2.3.5.so
               43  1.0829 /lib/libpthread-2.3.5.so
                2  0.0504 /lib/libdl-2.3.5.so
                1  0.0252 /usr/bin/perl
                1  0.0252 /lib/libm-2.3.5.so
                1  0.0252 /lib/libnss_compat-2.3.5.so
                1  0.0252 /usr/lib/perl/5.8.7/auto/POSIX/POSIX.so
     3926 12.0941 /usr/lib/gcc/x86_64-linux-gnu/4.0.2/cc1
        CPU_CLK_UNHALT...|
          samples|      %|

(中略)

$ opreport -t 1 -l ~/shared/git/linux-2.6/vmlinux
CPU: AMD64 processors, speed 2193.7 MHz (estimated)
Counted CPU_CLK_UNHALTED events (Cycles outside of halt state) with a unit mask of 0x00 (No unit mask) count 860000
samples  %        symbol name
2575     22.2232  csum_partial_copy_generic
833       7.1891  __down_interruptible
410       3.5384  timer_interrupt
309       2.6668  do_wp_page
274       2.3647  free_pages_bulk
244       2.1058  get_user_pages
242       2.0885  vsnprintf
234       2.0195  __handle_mm_fault
198       1.7088  vma_adjust
196       1.6916  shrink_zone
182       1.5707  do_mlock
170       1.4672  generic_file_aio_write_nolock
162       1.3981  ioread16_rep
157       1.3550  mlock_fixup
153       1.3204  sort
151       1.3032  sys_mincore
148       1.2773  error_exit
140       1.2083  invalidate_inodes
	

2005年11月6日 (日曜日)

22:53:53 # Life emacsのlocal variablesの仕様を確認していたら, evalというものがあるのを知った. 任意のコードを実行できる脆弱性のようにもみえるのだが, evalというフックを利用すると,どうやらそのファイルを読み込んだら実行される, 適当なlispコマンドを指定できるらしい. しかし,実際にコードを書いて試してみると, この行を実行しますか?というように質問される. 実際には問題はないようだ. ただ,Local Variableの機構を利用すると, 任意の変数の値は設定できるので, emacs lispでは,任意のバッファについては,設定していない変数については信用してはならないということになるかな. emacs lispも便利だが,emacsで信用できないドキュメントをいじる際には 気を付けないといけませんな.

2005年11月4日 (金曜日)

22:31:08 # Life ibookを xorg に変えたら入力できないキーがでてきた. ibook G4 は,日本語キーボードモデルだ. 日本語キーボードモデルを使ってibookでLinuxを使っている人は結構少ないとおもうので, 油断大敵. アンダーバーが入力できない. xevで確認したら,キーコード211らしい. kbmapを確認しようとしたら, まず,setxkbmapというコマンドがあるらしいということがわかった. しかし,コマンドをたたいても,エラーしかでない. ネットワークにつながらない状態では,情報収集ができないので, とりあえずxmodmap -e "keycode 211 = underscore" を.xsessionにつっこむことで対応する. あとでなぜこうなっているのかを調査してみるか.

23:18:17 # Life 前回のdebian勉強会で鵜飼さんがおっしゃっていたが, fabreは現在動作していない. Debian BTSはデータ量が多く, hyper estraierなどで検索のためにインデクシングすると,メモリが大量に必要になってしまう. また,アップデートするのに時間がかかりすぎる. 大量のメモリを積んだ高速なマシンを複数台数つかって,複数にBTSを適当に分割して仕事を分担させてみれば実装できるのではないだろうか,というのが会場の意見だった. 力でねじふせるか,もうちょっと違うアプローチを考えるか. どちらにせよ,現在BTSは検索できていないはずなので,検索できるようにしないと不便で仕方が無いですね.

2005年11月3日 (木曜日)

11:11:14 # Life 朝気づいたら昨晩しこんでいたmencoderのジョブがおちていて, 録画に失敗していた. 再度パッチを作成,これで改良することを祈るが,多分関係無い. 2.6.14がリリースされてから,bttv関連のパッチががんがん来ているので, おそらく誰かがメンテナンスをのっとって改変しまくっているような気がする.

下記のパッチを適用することで,自分のカードのオーディオは認識する. 動作は確認していない.

diff --git a/sound/pci/bt87x.c b/sound/pci/bt87x.c
index 01d98ee..014f002 100644
--- a/sound/pci/bt87x.c
+++ b/sound/pci/bt87x.c
@@ -773,6 +773,8 @@ static struct pci_device_id snd_bt87x_id
 	BT_DEVICE(PCI_DEVICE_ID_BROOKTREE_879, 0x0070, 0x13eb, 32000),
 	/* Viewcast Osprey 200 */
 	BT_DEVICE(PCI_DEVICE_ID_BROOKTREE_878, 0x0070, 0xff01, 44100),
+	/* I-O Data Co. GV-BCTV5/PCI */
+	BT_DEVICE(PCI_DEVICE_ID_BROOKTREE_878, 0x10FC, 0xD018, 32000),
 	{ }
 };
 MODULE_DEVICE_TABLE(pci, snd_bt87x_ids);
	  
	

mencoderを実行した際に, frameno.aviが見付からない,というエラーは毎回でていたのだろうか.

channel: 12
minutes: 30
output filename: /home/dancer/XXX/XXX/
MEncoder dev-CVS--4.0.2 (C) 2000-2005 MPlayer Team
CPU: Advanced Micro Devices  (Family: 8, Stepping: 0)
Detected cache-line size is 64 bytes
CPUflags: Type: 8 MMX: 1 MMX2: 1 3DNow: 1 3DNow2: 1 SSE: 1 SSE2: 1
Compiled for x86 CPU with extensions: MMX MMX2 3DNow 3DNowEx SSE SSE2

File not found: 'frameno.avi'
Failed to open frameno.avi
success: format: 9  data: 0x0 - 0x0
TV detected! ;-)
Selected driver: v4l2
 name: Video 4 Linux 2 input
 author: Martin Olschewski
 comment: first try, more to come ;-)
Selected device: BT878 video (IODATA GV-BCTV5/PC
 Tuner cap:
 Tuner rxs: MONO
 Capabilites:  video capture  video overlay  VBI capture device  tuner  read/write  streaming
 supported norms: 0 = PAL; 1 = NTSC; 2 = SECAM; 3 = PAL-Nc; 4 = PAL-M; 5 = PAL-N; 6 = NTSC-JP; 7 = PAL-60;
 inputs: 0 = Television; 1 = Composite1; 2 = S-Video;
 Current input: 0
 Current format: YUYV
v4l2: current audio mode is : STEREO
Selected channel: 12 (freq: 217.250)
v4l2: ioctl queue buffer failed: Bad address
	

xawtvは正常に動作するので,mencoderのバグかもしれないと思い, とりあえずアップグレード. marillatレポジトリの 1.0-pre7cvs20050716-0.1 を1.0-pre7cvs20051102-0.0 にあげる. 同じようなエラーが出て,録画ができない.困った.

channel: 12
minutes: 1
output filename: /tmp/aaaa.avi
MEncoder dev-CVS--4.0.2 (C) 2000-2005 MPlayer Team
CPU: Advanced Micro Devices Athlon 64 Newcastle,Winchester,San Diego,Venice; Sempron Palermo (Family: 15, Stepping: 0)
Detected cache-line size is 64 bytes
CPUflags: Type: 15 MMX: 1 MMX2: 1 3DNow: 1 3DNow2: 1 SSE: 1 SSE2: 1
Compiled for x86 CPU with extensions: MMX MMX2 3DNow 3DNowEx SSE SSE2

success: format: 9  data: 0x0 - 0x0
Selected driver: v4l2
 name: Video 4 Linux 2 input
 author: Martin Olschewski
 comment: first try, more to come ;-)
Selected device: BT878 video (IODATA GV-BCTV5/PC
 Tuner cap:
 Tuner rxs: MONO STEREO
 Capabilites:  video capture  video overlay  VBI capture device  tuner  read/write  streaming
 supported norms: 0 = PAL; 1 = NTSC; 2 = SECAM; 3 = PAL-Nc; 4 = PAL-M; 5 = PAL-N; 6 = NTSC-JP; 7 = PAL-60;
 inputs: 0 = Television; 1 = Composite1; 2 = S-Video;
 Current input: 0
 Current format: YUV420
v4l2: current audio mode is : STEREO
Selected channel: 12 (freq: 217.250)
v4l2: ioctl queue buffer failed: Bad address
v4l2: 0 frames successfully processed, 0 frames dropped.
============ Sorry, this file format is not recognized/supported =============
=== If this file is an AVI, ASF or MPEG stream, please contact the author! ===
Cannot open demuxer.

	

2.6.14-rc5 (git Linux dancer64 2.6.14-rc5dancer-gb563c9b1 #1 Thu Oct 27 12:55:05 JST 2005 x86_64 GNU/Linux) の場合には,問題がなく実行できる.

channel: 12
minutes: 1
output filename: /tmp/aaaa.avi
MEncoder dev-CVS--4.0.2 (C) 2000-2005 MPlayer Team
CPU: Advanced Micro Devices Athlon 64 Newcastle,Winchester,San Diego,Venice; Sempron Palermo (Family: 15, Stepping: 0)
Detected cache-line size is 64 bytes
CPUflags: Type: 15 MMX: 1 MMX2: 1 3DNow: 1 3DNow2: 1 SSE: 1 SSE2: 1
Compiled for x86 CPU with extensions: MMX MMX2 3DNow 3DNowEx SSE SSE2

success: format: 9  data: 0x0 - 0x0
Selected driver: v4l2
 name: Video 4 Linux 2 input
 author: Martin Olschewski <olschewski@zpr.uni-koeln.de>
 comment: first try, more to come ;-)
Selected device: BT878 video (IODATA GV-BCTV5/PC
 Tuner cap:
 Tuner rxs: MONO
 Capabilites:  video capture  video overlay  VBI capture device  tuner  read/write  streaming
 supported norms: 0 = PAL; 1 = NTSC; 2 = SECAM; 3 = PAL-Nc; 4 = PAL-M; 5 = PAL-N; 6 = NTSC-JP; 7 = PAL-60;
 inputs: 0 = Television; 1 = Composite1; 2 = S-Video;
 Current input: 0
 Current format: YUYV
v4l2: current audio mode is : STEREO
Selected channel: 12 (freq: 217.250)
[V] filefmt:9  fourcc:0x30323449  size:320x240  fps:29.97  ftime:=0.0334
==========================================================================
Opening audio decoder: [pcm] Uncompressed PCM audio decoder
AUDIO: 48000 Hz, 2 ch, s16le, 1536.0 kbit/100.00% (ratio: 192000->192000)
Selected audio codec: [pcm] afm: pcm (Uncompressed PCM)
==========================================================================
Opening video filter: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
==========================================================================
Opening video decoder: [raw] RAW Uncompressed Video
VDec: vo config request - 320 x 240 (preferred colorspace: Planar I420)
VDec: using Planar I420 as output csp (no 0)
Movie-Aspect is undefined - no prescaling applied.
videocodec: libavcodec (320x240 fourcc=34504d46 [FMP4])
High quality encoding selected (non real time)!
Selected video codec: [rawi420] vfm: raw (RAW I420)
==========================================================================
Building audio filter chain for 48000Hz/2ch/s16le -> 0Hz/0ch/??...
MP3 audio selected
Building audio filter chain for 48000Hz/2ch/s16le -> 48000Hz/2ch/s16le...
Writing AVI header...
ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.
Forcing audio preload to 0, max pts correction to 0
New_Face failed. Maybe the font path is wrong.
Please supply the text font file (~/.mplayer/subfont.ttf).
subtitle font: load_sub_face failed.
ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.
Pos:   4.1s    124f ( 0%)  26fps Trem:   0min   0mb  A-V:0.000 [1082:128]
Flushing video frames


CBR audio: 16000 bytes/sec, 384 bytes/block

Writing AVI index...
Fixing AVI header...
ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.

Video stream: 1082.222 kbit/s  (135277 B/s)  size: 559707 bytes  4.137 secs  124 frames

Audio stream:  128.000 kbit/s  (16000 B/s)  size: 66048 bytes  4.128 secs
v4l2: 139 frames successfully processed, 0 frames dropped.

	

11:19:18 # Life pbuilder のアップロード. 0.137. いくつかの修正とドキュメントのアップデート.

12:22:40 # Life aliothでcvs commitのあとにメーリングリストでdiffを送信するようにするには どうしたらよいか. 既存では,/usr/bin/cvs-mailcommitとsyncmailの両方が使われているようだ. commitinfo にDEFAULT /usr/bin/cvs-mailcommit --mailto メールアドレス --from 送信元 --diff --full --root %r --dir %p %{sVv}と書くらしい. 1.12 以降のCVSでは仕様が変わったらしく, --root と --dir が必要になった.

13:37:54 # Life OracleをDebian-amd64にインストールする. Faheem Mithaがこの苦しみに挑戦しているらしい. バイナリしか配布されていないアプリケーションをDebianにインストールするのは結構難しい. 特に,Debianのamd64ポートはbiarchではなく,pure64ポートなため, 64bitを中心に構築されている. Oracleのバイナリはほとんどの部分が32-bitで構成されているらしい. そのため,32-bitのライブラリを多数要求してきて,Debianではなかなかインストールしにくい という状況だ. 64-bitと32-bitの話題については,先日のgotomさんの発表に詳しい. Debianで,Oracleを使えないのはそれなりに痛い. しかし,いままでも正式にサポートされていたか,と聞かれるとさらに痛い. そこ,つつかないで...

2005年11月2日 (水曜日)

07:57:05 # Life John Goertzenが#haskellで聞いて来たjoke. もとネタ Richard StallmanとLinus Torvaldsと Donald Knuthが誰が一番コンピュータ化された世界に大きな影響をおよぼしたかについて議論していた.

Stallman: 「僕が世界で一番素晴らしいエディターを開発した,と神の御信託があった」

Linus: 「いや,神は*僕*に世界で最高のOSを書いたね,といってくれたよ」

Knuth: 「ちょっとまった,ちょっとまった,僕はそんなことはいっていないぞ.」

09:11:43 # Life cowdancerの新しいリリースを出しました. JDMC中にハックしていた成果です.バージョン 0.6. chmod, chownに対応.

2005年11月1日 (火曜日)

09:04:06 # Life 先月は関西オープンソースなどでばたばたしていましたが, 今月は,腰をおちつけて東京で作業する予定です. Debian勉強会は来週末ですのでよろしくお願いします.

debian-devel-announceにKDEなどのパッケージについてのアナウンスが出ていますね. this is turning up bugs in packages that can't be binNMUed because of arch: any packages which depend on (= ${Source-Version}) of an arch: all package. build daemon側に, binNMUを自動でリクエストできる仕組みというのを作りこんだらしいですが, その場合に,binary-allのパッケージがbinary-any のパッケージに = のバージョン依存 をしているとbinNMUはバージョンが0.1あがるため,対応できない,ということでしょう.

23:44:53 # Life Linuxカーネルの新しいバージョンがリリースされた. 2.6.14がリリースされたため,どんどんと蓄積されていた変更がコミットされている. 今朝コンパイルしたバージョンを今試したら,USBまわりでエラーがでて起動しなかった. ohci_hcd 0000:00:13.1: Unlink after no-IRQ? Controller is probably using the wrong IRQと言うメッセージで異常終了. 失敗したのは d83c671fb7023f69a9582e622d01525054f23b66. Linux version 2.6.14dancer-g6e9d6b8e が最後に起動できていたバージョン. 以前に起動していたのは, 6e9d6b8ee4e0c37d3952256e6472c57490d6780d っぽい. IRQ番号が違うなぁ...

とりあえず一応メールは出してみた.これからいろいろとビルドしてみて.試験する. ここらへんかなぁ,とも思って調べたけど,関係ないかもしれない.

df70b17f88a4d1d8545d3569a1f6d28c6004f9e4 がコンパイルできたので,それで試験したら無事に起動してしまった.


Junichi Uekawa

$Id: 200511.html.ja,v 1.62 2005/11/28 14:00:47 dancer Exp $