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*")))
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/null と while(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
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
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.elに YaTeX-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-modeで auto-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では修正が含まれることになっているということを教えてもらいました.
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から知ったらしい.
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.cの sys_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.Sにsys_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の情報から作成する サンプルっぽいのがあった. えらく大きいのと, まだ全容を把握できていないので,とりあえずメモ.
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 .
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
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にバインドしてみました.
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 を使っているのがまずいのかもしれない気がして来たので, 最新にアップデートしてみようとしらべはじめる.
22:37:57 # Life whizzytexが,tetex3のアップロードにより動かなくなったらしい. どうやら,initexなどが削除されたらしい. tex -ini を使え,とのことだ. 338046. initexの存在は結構有名なものなので, Debianだから削除してよいというものでもない気がする. whizzytexは,ドキュメントのソースをtexで処理した結果の texの内部状態をダンプしておくことで,次の処理を高速化する という意味でinitexを使っている. リアルタイムプレビューに必要なのでこういう使い方になっているのだが, まぁ,あるいみ非常に特殊だ. 昔は,おそらく巨大なドキュメントの処理を高速化するために 使えなくもない手法だったのかもしれないが最近は使っていないのだろうという雰囲気がただよう. TeX by Topicの33.2 More about formatsにさらっと書いてある説明だけを読んでも, 何がどうなのかよくわからん...困った.
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を越えている感じがしてたまらないですな. 役にたつかたたないかといわれると役にたたないぎりぎりの線を保っているのが素晴らしい.
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をどう処理するのかについては今後の課題.
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
22:53:53 # Life emacsのlocal variablesの仕様を確認していたら, evalというものがあるのを知った. 任意のコードを実行できる脆弱性のようにもみえるのだが, evalというフックを利用すると,どうやらそのファイルを読み込んだら実行される, 適当なlispコマンドを指定できるらしい. しかし,実際にコードを書いて試してみると, この行を実行しますか?というように質問される. 実際には問題はないようだ. ただ,Local Variableの機構を利用すると, 任意の変数の値は設定できるので, emacs lispでは,任意のバッファについては,設定していない変数については信用してはならないということになるかな. emacs lispも便利だが,emacsで信用できないドキュメントをいじる際には 気を付けないといけませんな.
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は検索できていないはずなので,検索できるようにしないと不便で仕方が無いですね.
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を使えないのはそれなりに痛い. しかし,いままでも正式にサポートされていたか,と聞かれるとさらに痛い. そこ,つつかないで...
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に対応.
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 がコンパイルできたので,それで試験したら無事に起動してしまった.
$Id: 200511.html.ja,v 1.62 2005/11/28 14:00:47 dancer Exp $