logo
 2003年   2004年   2005年   2006年   2007年   2008年   2009年   2010年 
 9月 
 10月 
 11月 
 12月 
 1月  7月 
 2月  8月 
 3月  9月 
 4月  10月 
 5月  11月 
 6月  12月 
 1月  7月 
 2月  8月 
 3月  9月 
 4月  10月 
 5月  11月 
 6月  12月 
 1月  7月 
 2月  8月 
 3月  9月 
 4月  10月 
 5月  11月 
 6月  12月 
 1月  7月 
 2月  8月 
 3月  9月 
 4月  10月 
 5月  11月 
 6月  12月 
 1月  7月 
 2月  8月 
 3月  9月 
 4月  10月 
 5月  11月 
 6月  12月 
 1月  7月 
 2月  8月 
 3月  9月 
 4月  10月 
 5月  11月 
 6月  12月 
 1月 
 2月 
 3月 
アイコンの説明
code:Haemophilus influenzae
ここに書かれていることは無保証です。同じことを行って問題が発生しても、 龍義は責任をとりません。

 4/1
Other
ちょっと gzip の中を見ていて、形式を調べようと RFC 1952 を見てみたら、
OS 種別が入ってるのを見つけた。

OS (Operating System)
            This identifies the type of file system on which compression
            took place.  This may be useful in determining end-of-line
            convention for text files.  The currently defined values are
            as follows:

                 0 - FAT filesystem (MS-DOS, OS/2, NT/Win32)
                 1 - Amiga
                 2 - VMS (or OpenVMS)
                 3 - Unix
                 4 - VM/CMS
                 5 - Atari TOS
                 6 - HPFS filesystem (OS/2, NT)
                 7 - Macintosh
                 8 - Z-System
                 9 - CP/M
                10 - TOPS-20
                11 - NTFS filesystem (NT)
                12 - QDOS
                13 - Acorn RISCOS
               255 - unknown

RFC が規定された15年前の感じだ。で、cygwin だと、0 になるのか、3 になる
のか、11 になるのか気になったので見てみた。

$ touch test
$ gzip test

中身は。

00000000  1f 8b 08 08 a4 34 b7 4b 00 03 74 65 73 74 00 03  .....4.K..test..
00000010  00 00 00 00 00 00 00 00 00                       .........

03 なので、UNIX だね。これ、Amiga とか CP/M なんかにしたら、気が付く人は
ほとんどないのだろうけど、遊び心を入れられて面白い。

 4/2
Network
昨日の gzip の RFC を見たとき、時期が時期だったので、新しい rfc が追加
されていないか見たら、RFC 5841 が出ていた。最近、というかだいぶ前から、
RFC の番号を順に割り振らないで、関連ある番号に引っ掛けるようにしている
みたいで、末尾が 41 をあえて選んだのでしょう。5241 なんかもそんな感じに
なっているみたい。で、5841 の中身は。

パケットの気分を意味する TCP オプション

ということで、

TCP Header Format

         Kind     Length     Meaning
         ----     --------   -------
          25      Variable   Packet Mood

な形式になっていて、

      ASCII                Mood
      =====                ====
      :)                   Happy
      :(                   Sad
      :D                   Amused
      %(                   Confused
      :o                   Bored
      :O                   Surprised
      :P                   Silly
      :@                   Frustrated
      >:@                  Angry
      :|                   Apathetic
      ;)                   Sneaky
      >:)                  Evil

となっている。顔の向きが横の欧風。そのうち Wireshark でも対応したりする
かもしれないな。

 4/3
Other
一昨日 gzip の中を見たので、見たついでに bzip2 も見てみた。こちらは RFC
では規定されていなかったので、英語版の wikipedia を参考にした。
http://en.wikipedia.org/wiki/Bzip2
どうやら、OS 種別のフラグどころか、ファイル名を格納するオプションさえも
無いようである。ファイル名は元のファイルから判断するのでしょう。bzip2 の
manpage には。

bunzip2 (or bzip2 -d) decompresses all specified files. Files which were
not created by bzip2 will be detected and ignored, and a warning issued.
bzip2 attempts to guess the filename for the decompressed file from that
of the compressed file as follows:

filename.bz2 becomes filename
filename.bz becomes filename
filename.tbz2 becomes filename.tar
filename.tbz becomes filename.tar
anyothername becomes anyothername.out

If the file does not end in one of the recognised endings, .bz2, .bz, .tbz2
or .tbz, bzip2 complains that it cannot guess the name of the original file,
and uses the original name with .out appended.

とあるし。完全にファイルをまとめるのは tar の仕事のようである。

 4/4
OptiPlex SX260 NetBSD
とっとと OS を入れなおしたい NetBSD 機なのだが、その前に CF のチェックを
やっておきたい。しかし、Windows だとフラッシュドライブのチェックツールが
見つかるのだけど、Linux よりマイナーな NetBSD なので、そんなツールは簡単に
見つからない。どちらにしても、起動ドライブにしているので、CF から起動して
CF をチェックするのは危険なのだけど。じゃ、ということで Knoppix ぐらい
だったら、チェックツールあるかなと思って調べるが見つからず。ディスクの
チェックのためにバリバリ書き込むのも本末転倒なので、全セクタを読み込み
チェックできれば良い。それだったら、dd で十分じゃない?なんて気がついて
ちょっと、やってみた。

# dd if=/dev/wd0a of=/dev/null
dd: /dev/wd0a: Device busy

駄目だ。knoppix から起動させて、やるしかないみたい。その前に CD ドライブを
探さないと。先は長そう。

 4/5
Other
ソニーのサイバーショット DSC-TX7 の記事をいくつか見て、広角は 25mm だし、
防水なのに薄型なので、これは良いと心が動いた。ソニーのページに行くと、
廉価版(?)の DSC-TX5 もあって、これで十分だななんて見ていた。だが、電源
ボタンがあるのを発見した。レンズカバーがあるので、てっきり電源はレンズ
カバー連動なものだと思い込んでいた。この大きさの電源ボタンじゃ、手袋で
操作するのは絶望的。私は二輪車に乗るので手袋なのだけど、折角防水デジカメ
なのだから、スキーとか二輪車の人のことを考えてくれても良いと思うんだけど。
非常に残念。

 4/6
Other
ちょっと、daemontools を cygwin でコンパイルしてみようと。やるだけやって
みた。

$ tar xvfz ../daemontools-0.76.tar.gz
$ cd admin/daemontools-0.76 
$ ./package/compile
env: Files/Intel/DMIX:/cygdrive/c/Program: No such file or directory

いきなりこける。空白が入っているときのパスの処理がおかしい気がする。少し
直してみる。

$ vi package/compile

#here=`env - PATH=$PATH pwd`
here=`env - PATH="$PATH" pwd`

これで再開。

$ ./package/compile
~snip~
./load envdir unix.a byte.a 
envdir.o:envdir.c:(.text+0x137): undefined reference to `_errno'
envdir.o:envdir.c:(.text+0x22c): undefined reference to `_errno'
envdir.o:envdir.c:(.text+0x23e): undefined reference to `_errno'
unix.a(strerr_sys.o):strerr_sys.c:(.text+0x9): undefined reference to `_errno'
unix.a(openreadclose.o):openreadclose.c:(.text+0x47): undefined reference to `_errno'
unix.a(alloc.o):alloc.c:(.text+0x48): more undefined references to `_errno' follow
collect2: ld returned 1 exit status
make: *** [envdir] Error 1
Copying commands into ./command...
cp: cannot stat `compile/svscan': No such file or directory

errno 変数が問題みたいなので、ちょっと見てみた。errno.h を include してる
場所は1か所で、error.c の中で行っている。
#include <errno.h>
ここの errno を src/error.h の中で。
extern int errno;
として、引きまわしているみたいだけど、この使い方は古いので書き換え。

$ vi src/error.h

// extern int errno;
#include <errno.h>

とした。これで再開。

$ ./package/compile
~snip~
./load envdir unix.a byte.a 
./compile tai64nlocal.c
./load tai64nlocal unix.a byte.a 
env - /bin/sh rts.tests 2>&1 | cat -v > rts

なんだか、ここで固まってしまう。強制的に止めたけど、supervise のプロセスが
残って消せないし、lock ファイルも残って消せない。実行中、rts ファイルに
出力しているので、眺めようとしたが中身は空。困った、ということで、web で
検索してみた。海外の掲示板に daemontools の cygwin patch があるとの情報が
あり、それも日本人が作っているようなので行ってみたが、すでにページは無く。
困ったときの wayback machine 。archive.org に行って確認してみた。

http://web.archive.org/web/*/http:/www.suede.ne.jp/cygwin/

ページが残っているし、patch も残っていた。ありがたい。mkfifo のパッチも
あったけど、cygwin って mkfifo に対応した気がする。とりあえず、cygwin 用
パッチを眺めることに。
.exe の追加、起動スクリプトの挿入、グループ権限の修正、errno 対応、lock
周りの修正が入っている。肝心の上記で止まってしまった問題の場所は。

! #	env - /bin/sh rts.tests 2>&1 | cat -v > rts

コメントにしてるだけだし。というこで、せっかく patch を作ってくれていた
先人がいたので、それを利用することにした。

 4/7
Other
ちょっと、AAC 形式のファイルを作りたくて。せっかくなので、Linux でも同じ
操作ができるようにと、lame をダウンロードしてきた。
http://lame.sourceforge.net/
で、cygwin でコンパイル。あっさり、通る。実行してみたら、どうも AAC を
出力できるようなオプションがない。間違ったものをダウンロードしてしまった
ようである。

調べなおして、faac をダウンロードしてきた。
http://sourceforge.net/projects/faac/
さっそく作る。

$ tar xvfz lame-3.98.4.tar.gz
$ cd lame-3.98.4
$ ./configure
$ make
~snip~
mp4property.h: In constructor `MP4BitfieldProperty::
MP4BitfieldProperty(char*, u_int8_t)':
mp4property.h:193: error: `__STRING' undeclared (first use this function)
mp4property.h:193: error: (Each undeclared identifier is reported only once
 for each function it appears in.)
3gp.cpp: In member function `void MP4File::Make3GPCompliant(const char*,
 char*, u_int32_t, char**, u_int32_t, bool)':
3gp.cpp:55: error: `__STRING' undeclared (first use this function)
3gp.cpp: In member function `void MP4File::MakeFtypAtom(char*, u_int32_t,
 char**, u_int32_t)':
3gp.cpp:107: error: `__STRING' undeclared (first use this function)
make[3]: *** [3gp.o] Error 1
make[3]: Leaving directory `/tmp/faac-1.28/common/mp4v2'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/tmp/faac-1.28/common'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/faac-1.28'
make: *** [all] Error 2

手古摺りそうな予感。エラー該当部分に入っているのは、ASSERT という関数。
この定義は、
common/mp4v2/mp4util.h
で行っている。

#ifndef ASSERT
#define ASSERT(expr) \
        if (!(expr)) { \
                throw new MP4Error("assert failure", __STRING((expr))); \
        }
#endif

他にも、WARNING 関数なんかで使われている。壊れかけの NetBSD で確認すると、
asm.h なんかで __STRING が定義されている。ソースの中で __STRING は定義
されていて。
common/mp4v2/mpeg4ip.h
common/mp4v2/mpeg4ip_win32.h
mpeg4ip.h の中では、#ifdef sun なのでスルーされている。mpeg4ip_win32.h は
mpeg4ip.h の中で。

#ifdef _WIN32
#include "mpeg4ip_win32.h"
#include "mpeg4ip_version.h"
#else /* UNIX */

な感じなので、config.h の最後に
#define _WIN32 1
を追加して、やってみたが、エラーが余計に増えた。

$ make
~snip~
if g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include
   -Wall -g -O2 -MT
 3gp.o -MD -MP -MF ".deps/3gp.Tpo" -c -o 3gp.o 3gp.cpp; \
        then mv -f ".deps/3gp.Tpo" ".deps/3gp.Po"; else rm -f ".deps/3gp.Tpo";
 exit 1; fi
In file included from mpeg4ip.h:62,
                 from mp4common.h:29,
                 from 3gp.cpp:28:
mpeg4ip_win32.h:24:1: warning: "HAVE_IN_PORT_T" redefined
In file included from mpeg4ip.h:53,
                 from mp4common.h:29,
                 from 3gp.cpp:28:
./mpeg4ip_config.h:37:1: warning: this is the location of the previous
 definition
In file included from mpeg4ip.h:62,
                 from mp4common.h:29,
                 from 3gp.cpp:28:
mpeg4ip_win32.h:25:1: warning: "HAVE_SOCKLEN_T" redefined
In file included from mpeg4ip.h:53,
                 from mp4common.h:29,
                 from 3gp.cpp:28:
./mpeg4ip_config.h:55:1: warning: this is the location of the previous
 definition
In file included from mpeg4ip.h:62,
                 from mp4common.h:29,
                 from 3gp.cpp:28:
mpeg4ip_win32.h:54: error: conflicting declaration 'typedef long unsigned
 int u_int32_t'
/usr/include/cygwin/types.h:186: error: 'u_int32_t' has a previous declaration
 as `typedef __uint32_t u_int32_t'
mpeg4ip_win32.h:54: error: declaration of `typedef long unsigned int
 u_int32_t'
/usr/include/cygwin/types.h:186: error: conflicts with previous declaration
 `typedef __uint32_t u_int32_t'
mpeg4ip_win32.h:54: error: declaration of `typedef long unsigned int
 u_int32_t'
/usr/include/cygwin/types.h:186: error: conflicts with previous declaration
 `typedef __uint32_t u_int32_t'
mpeg4ip_win32.h: In function `int snprintf(char*, size_t, const char*, ...)':
mpeg4ip_win32.h:66: error: `int snprintf(char*, size_t, const char*, ...)'
 was declared `extern' and later `static'
/usr/include/stdio.h:262: error: previous declaration of `int snprintf(char*,
 size_t, const char*, ...)'
mpeg4ip_win32.h: In function `int snprintf(char*, size_t, const char*, ...)':
mpeg4ip_win32.h:70: error: `_TRUNCATE' undeclared (first use this function)
mpeg4ip_win32.h:70: error: (Each undeclared identifier is reported only once
 for each function it appears in.)
mpeg4ip_win32.h:70: error: `vsnprintf_s' undeclared (first use this function)
In file included from mp4common.h:32,
                 from 3gp.cpp:28:
mp4util.h: In function `void Indent(FILE*, u_int8_t)':
mp4util.h:82: error: `fprintf_s' undeclared (first use this function)
mp4util.h: In function `wchar_t* MP4Stralloc(const wchar_t*)':
mp4util.h:187: error: `wcslen' undeclared (first use this function)
mp4util.h:188: error: `wcscpy' undeclared (first use this function)
make[3]: *** [3gp.o] Error 1
make[3]: Leaving directory `/tmp/faac-1.28/common/mp4v2'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/tmp/faac-1.28/common'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/faac-1.28'
make: *** [all] Error 2

config.h に追加した #define _WIN32 1 は消して、mpeg4ip.h の通る場所に
#define __STRING(expr) #expr
を追加して、再度。

mp4.cpp: In function `u_int8_t MP4GetVideoProfileLevel(void*, MP4TrackId)':
mp4.cpp:340: error: invalid conversion from `uint32_t*' to `u_int32_t*'
mp4.cpp:340: error:   initializing argument 4 of `bool
 MP4GetTrackESConfiguration(void*, MP4TrackId, u_int8_t**, u_int32_t*)'
mp4.cpp: In function `bool MP4GetTrackVideoMetadata(void*, MP4TrackId,
 u_int8_t**, u_int32_t*)':
mp4.cpp:1934: error: declaration of C function `bool
 MP4GetTrackVideoMetadata(void*, MP4TrackId, u_int8_t**, u_int32_t*)'
 conflicts with
mp4.h:708: error: previous declaration `bool MP4GetTrackVideoMetadata
(void*, MP4TrackId, uint8_t**, uint32_t*)' here
make[3]: *** [mp4.o] Error 1
make[3]: Leaving directory `/tmp/faac-1.28/common/mp4v2'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/tmp/faac-1.28/common'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/faac-1.28'
make: *** [all] Error 2

u_int32_t と uint32_t でゴチャゴチャになっている。プロトタイプと違うって
どういうことなんでしょう。とりあえず、mp4.cpp と mp4.h のファイルにあった
uint32_t は全部 u_int32_t に変換して再度コンパイルした。しかし、同じように
mp4file.cpp, mp4file.h, mp4meta.cpp でも uint32_t の問題が。これを直して、
なんとかコンパイルできて、動くようになった。
良くあることだけど、いつのまにか最初の目的を忘れてしまう。

 4/8
OptiPlex SX260 NetBSD
何度目かの停電後の復旧作業。Knoppix で立ち上げて、マウントしてみた。が、

# mount /dev/hda1 /mnt/hda1
You didn't specify the type of your ufs filesystem

mount -t ufs -o ufstype=sun|sunx86|44bsd|ufs2|5xbsd|old|hp|nextstep|nextstep-
cd|openstep ...

>>>WARNING<<< Wrong ufstype may corrupt your filesystem, default is ufstype=old

NetBSD は、どれだろう、と ufstype で ufs2 とか 5xbsd とか入れて、44bsd で
マウントできた。そういうことらしい。mount して fsck してみた。

# mount -t ufs -o ufstype=44bsd /dev/hda1 /mnt/hda1
# fsck /media/hda1
fsck 1.40-WIP (14-Nov-2006)
fsck: fsck.ufs: not found
fsck Error 2 while executing fsck.ufs for /dev/hda1

あー。knoppix (5.1) には、ufs 用のがないみたい。dd してみることにした。

# umount /mnt/hda1
# dd if=/dev/hda1 of=/dev/null
7928865+0 records in
7928865+0 records out
4059578880 bytes (4.1 GB) copied, 1275.03 seconds, 3.2 MB/s

読み込みは問題ないみたいである。とりあえず、NetBSD のバージョンを上げる
ことにした。

 4/9
OptiPlex SX260 NetBSD
NetBSD 5.0.2 へのアップグレード開始。

$ cd /tmp
$ wget http://ftp.netbsd.org/pub/NetBSD/NetBSD-5.0.2/i386/binary/kernel/
netbsd-GENERIC.gz
$ gunzip netbsd-GENERIC.gz
$ su
# cp -p /netbsd /netbsd.TOYOTA
# mv netbsd-GENERIC /netbsd
# sync
# sync
# sync
# reboot

古い人間なので、sync を3回する。最近の人は、sync しない人が多いというか、
sync を知らない人が多いよなぁ。そんなことは、置いて、ちょっとドキドキした
けど無事に起動した。

[toyota@mustafar]% uname -a
NetBSD mustafar 5.0.2 NetBSD 5.0.2 (GENERIC) #0: Sat Feb  6 17:53:27 UTC 2010  b
uilds@b7.netbsd.org:/home/builds/ab/netbsd-5-0-2-RELEASE/i386/201002061851Z-obj/
home/builds/ab/netbsd-5-0-2-RELEASE/src/sys/arch/i386/compile/GENERIC i386

kernel の作り直し。

mkdir /tmp/src
ln -s /tmp/src /usr/src
exit
cd /tmp/src
wget http://ftp.netbsd.org/pub/NetBSD/NetBSD-5.0.2/source/sets/syssrc.tgz
tar xvfz syssrc.tgz

あ、usr/src/ ってディレクトリから展開された。ちょっと移動。

cd /usr/src/usr/src
mv * ../../

この時点で ram ディスクを 220M 使っている。500M の場所に展開したので、
コンパイルできるか少し不安。conf の作成に時間が掛かりそうなので、続きは
明日に。

 4/10
OptiPlex SX260 NetBSD
昨日の続きで、kernel の作成から。

# cd /usr/src/sys/arch/i386/conf
# cp -p GENERIC TOYOTA
# vi TOYOTA
# config TOYOTA
../../../../conf/files:5: syntax error
../../../../net/files.pf:24: syntax error
../../../../net/files.pf:25: syntax error
../../../../net/files.pf:26: syntax error
../../../../conf/files:187: syntax error
../../../../conf/files:252: syntax error
../../../../ipkdb/files.ipkdb:5: syntax error
../../../../dev/raidframe/files.raidframe:6: syntax error
../../../../dev/wscons/files.wscons:36: syntax error
../../../../conf/files:1194: syntax error
../../../../conf/files:1198: syntax error
../../../../conf/files:1223: syntax error
../../../../conf/files:1225: syntax error
../../../../miscfs/procfs/files.procfs:3: syntax error
../../../../dev/pad/files.pad:3: syntax error
../../../../lib/libx86emu/files.x86emu:1: syntax error
*** Stop.

調べると、config が古いらしく新しいバージョンの config を先にインストール
しなきゃいけないみたい。kernel の作り直しは、userland を入れ替えた後に
する。
userland 周りのダウンロード。X 以外で必要そうなものを wget。

# wget http://ftp.netbsd.org/pub/NetBSD/NetBSD-5.0.2/i386/binary/sets/base.tgz
# wget http://ftp.netbsd.org/pub/NetBSD/NetBSD-5.0.2/i386/binary/sets/comp.tgz
# wget http://ftp.netbsd.org/pub/NetBSD/NetBSD-5.0.2/i386/binary/sets/misc.tgz
# wget http://ftp.netbsd.org/pub/NetBSD/NetBSD-5.0.2/i386/binary/sets/man.tgz
# wget http://ftp.netbsd.org/pub/NetBSD/NetBSD-5.0.2/i386/binary/sets/text.tgz
# wget http://ftp.netbsd.org/pub/NetBSD/NetBSD-5.0.2/i386/binary/sets/etc.tgz
# wget http://ftp.netbsd.org/pub/NetBSD/NetBSD-5.0.2/i386/binary/sets/tests.tgz

# md5 *
MD5 (base.tgz) = 7fae5327a099bd14ba420350870d465c
MD5 (comp.tgz) = c92bf0249450faa121039c565ee65c01
MD5 (etc.tgz) = db63bdee18360035ddfd1c43c09ce7c0
MD5 (man.tgz) = b6d1f724dd2e86ada0e093ac288f6517
MD5 (misc.tgz) = 7bdd8c127377cf71bd9807280a46f2d9
MD5 (tests.tgz) = 58f7f24112937ed6b93e36e2c88b5bfa
MD5 (text.tgz) = 4e2fd3f117219cf6afd7e992d20cb94e

大丈夫そうである。tests.tgz とか必要なのか、チェックする。

# tar tvfz tests.tgz | less
# tar tvfz text.tgz | less
# tar tvfz misc.tgz | less
# tar tvfz etc.tgz | less

tests.tgz は不要、misc.tgz も要らなそう、text.tgz は groff/nroff がある
ので入れても良いけど、逆に言うとそれ以外は要らないもの。groff/nroff は、
年に数回しか使わないので、困ったときに入れ替えしようと思ったが、現在既に
NetBSD 3.1 のものが入っているので、入れ替えすることにした。

# rm tests.tgz
# rm misc.tgz
# tar xvfzp /tmp/base.tgz
# tar xvfzp /tmp/comp.tgz
# tar xvfzp /tmp/man.tgz
# tar xvfzp /tmp/text.tgz

CF に書き込みなので、えらい時間がかかった。これまで ram ディスクで作業
していたので、余計に遅く感じる。etc.tgz は上書きされると困るファイルが
多数あるので、困ったとき部分的に入れ替えを行う。とりあえず、再起動して、
問題なく起動するのを確認して、続きは明日。

 4/11
OptiPlex SX260 NetBSD
etc.tgz の処遇をどうしようか。色々と新しいバイナリが入っただろうから、
/etc/rc.d/ 以下は入れ替えないといけない。現状の /etc/rc.d 以下は、何か
いじったのか分からないので、3.1 の etc.tgz をダウンロードしてきて、比較
してみることに。

# wget http://ftp.netbsd.org/pub/NetBSD/NetBSD-archive/NetBSD-3.1.1/i386/
binary/sets/etc.tgz
# tar xvfz etc.tgz
# diff -crN /etc/rc.d /tmp/etc/rc.d | less

apache を pkg で入れたみたいで、追加したようなのと、root で ram ディスクの
/var に展開している変更をしたのと。root の該当部分だけ取っておけば、上書き
されても問題ない。面倒そうなのが /etc/defaults/rc.conf 。とりあえず、何を
書き換えたかチェックしておく。

# vimdiff /etc/defaults/rc.conf /tmp/etc/defaults/rc.conf

手で編集をしていたけど、みんなこんなことをやっているのかな、と気になって、
調べてみたら、etcupdate というコマンドがあるみたい。使ってみた。

# etcupdate -s /tmp/etc
*** Creating /tmp/temproot
*** Populating /tmp/temproot from /tmp/etc (copying)
*** ERROR: Files from the etc.tgz set are missing

man で確認したら、この場合 -s /tmp で良いみたい。

# etcupdate -s /tmp
*** Creating /tmp/temproot
*** Populating /tmp/temproot from /tmp (copying)

*** WARNING: /tmp/temproot/dev/MAKEDEV not found
Make sure you update /dev/MAKEDEV later and run
(cd /dev && ./MAKEDEV all) to rebuild the device nodes

*** Checking for new directories
Create /etc/bluetooth? (y/[n]) 

あ、要らないと思って etc.tgz に入っていた /var とか /dev とか削除したの
だけど、削除しちゃまずかったみたい。最初からやり直し。というか、etc.tgz を
直接指定できるみたいなので、/tmp に etc.tgz を置いてやってみる。

# rm -rf /tmp/temproot
# etcupdate -s /tmp/etc.tgz
*** Creating /tmp/temproot
*** Populating /tmp/temproot from /tmp/etc.tgz
*** Checking for new directories
Create /etc/bluetooth? (y/[n]) 

良い感じに進んでいったが、わからないこともいくつか。

File: /etc/atf/atf-run.hooks (missing)

Please select one of the following operations:

  d  Don't install the missing file
  i  Install the missing file
  v  Show the missing file

What do you want to do? [Leave it for later] 

atf って何?と思って調べてみたら、Automated Testing Framework というもの
らしく、NetBSD 5.0 から取り入れられたもの。何に使うか微妙にわからないし、
バリバリ開発しないけど、とりあえず環境は入れておくことに。

 4/12
OptiPlex SX260 NetBSD
環境がそろったので、kernel の作り直し。

# cd /usr/src/sys/arch/i386/conf
# config TOYOTA
Build directory is ../compile/TOYOTA
Don't forget to run "make depend"
# cd ../compile/TOYOTA
# make depend
# make
# ls -l netbsd
-rwxr-xr-x  1 root  wheel  2999363 Apr 12 15:20 netbsd
# ls -l /netbsd*
-rw-r--r--  1 toyota  wheel  11481810 Feb  7 02:54 /netbsd
-rwxr-xr-x  1 root    wheel   3108089 Dec 10  2007 /netbsd.TOYOTA_3_1

いや、コンパイルに5分もかからなかった。昨日の userland の展開は4時間
かかったのに。

# mv /netbsd /netbsd.GENERIC
# mv netbsd /

完了。ここまでリモートでやっていたので、再起動は帰ってから。現在の容量は。

[toyota@mustafar]% df -k
Filesystem   1K-blocks       Used      Avail %Cap Mounted on
/dev/wd0a       3902926     643862    3063918  17% /
mfs:3                25         18          6  75% /dev
mfs:1096        1032238     173800     806828  17% /var
mfs:1231         508239     239100     243728  49% /tmp
kernfs                1          1          0 100% /kern

630M 使っている。CD 起動でもできそう。書き戻しができないけど。

 4/13
Other
vim をマルチウィンドウで使っていて、この1つをテキストブラウザにできないか
と思った。調べていたら、そんなプラグインを発見した。

browser.vim
http://www.vim.org/scripts/script.php?script_id=1053

vim 6 用だし、Perl のモジュールも必要なので使わなかったけど、他にもあるの
じゃないかと調べてみた。2ちゃんねる用のプラグインしか見つからなかった。

http://www.kaoriya.net/

ここに curl と qkc を使っているようなことが書かれていた。qkc 使ってるので
UTF-8 に対応しているか不明だけど、よく考えたら使う必要がないのか。iconv の
ことが書かれているので、対応しているかもしれないけど。さらに、プラグインを
調べていたら、意外と簡単に書けそうな感じ。

http://mattn.kaoriya.net/software/vim/20080502175259.htm

ここで、ふと思う。w3m の実行結果を -dump オプション付けて標準出力に出して、
その結果をそのまま vim で受け取れば、文字コードの問題も解決じゃないか、
って。リンクを辿って行く動作はできないけど。で、実際にやってみた。
:!! w3m -dump http://www.google.co.jp/
な感じで。
結果は、文字化けした。世の中うまくいかないものだ。と思ったら、vim 自体が
日本語扱えないようだった。まともな日本語 patch とか、あるのかな。

 4/14
Other
今日は icecast の話。NetBSD の話が置いていかれているのは、サーバが起動しなく
なったので、リモートから操作できなくなってしまったから。
頭を切り替えて、icecast を cygwin で動かす。さっそく、ダウンロードしてきて
作業。

$ wget http://downloads.xiph.org/releases/icecast/icecast-2.3.2.tar.gz
$ tar xvfz icecast-2.3.2.tar.gz
$ cd icecast-2.3.2
$ configure
~snip~
checking for xslt-config... no
configure: error: XSLT configuration could not be found

xlst というのが必要らしい。icecast のページを見ると、libxslt となっていた
ので、cygwin の setup からインストールできるか調べてみた。libxslt-devel
というのが見つかったので、これをインストールして、再開。

$ ./configure
~snip~
checking for libogg... not found
checking for libvorbis... configure: error: must have Ogg Vorbis v1.0 or above
 installed

同様に cygwin の setup で libogg-devel と libvorbis-devel をインストール。
再開。

$ ./configure
$ make
~snip~
In file included from sock.h:28,
                 from sock.c:61:
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/winsock2.h:120:
 error: redefinition of `struct hostent'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/winsock2.h:128:
 error: redefinition of `struct linger'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/winsock2.h:155:
 error: redefinition of `struct netent'
~snip~

configure はうまくいったけど、winsock2.h のエラーが大量に。winsock2.h を
見てみたけど、いらない気がして、config.h の編集。

/* Define if you have winsock2.h on MINGW */
#define HAVE_WINSOCK2_H 1

これを。

/* #undef HAVE_WINSOCK2_H */

に変更。削除しても良いけど。これで make が通って、icecast.exe ができた。
まだ動かしてないけど。続いて、ices のコンパイル。

$ wget http://downloads.us.xiph.org/releases/ices/ices-0.4.tar.gz
$ tar xvfz ices-0.4.tar.gz 
$ cd ices-0.4
$ ./configure
~snip~
checking for shout-config... no
configure: error: Could not find a usable libshout

libshout がいるみたい。libshout のインストール。

$ http://downloads.us.xiph.org/releases/libshout/libshout-2.2.2.tar.gz
$ tar xvfz libshout-2.2.2.tar.gz
$ cd libshout-2.2.2
$ ./configure
$ make
~snip~
In file included from sock.h:28,
                 from sock.c:61:
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/winsock2.h:120:
 error: redefinition of `struct hostent'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/winsock2.h:128:
 error: redefinition of `struct linger'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../include/w32api/winsock2.h:155:
 error: redefinition of `struct netent'

このエラーはさっきの icecast と同様なので、config.h をいじって、make が
通った。make install して、ices に戻る。

$ ./configure
~snip~
Features:
  XML     : yes
  Python  : yes
  Perl    : no
  LAME    : no
  Vorbis  : no
  MP4     : no
  FLAC    : no

configure が通ったけど、Perl が no というのはわからない。その前に、何に
使うかも知らないけど。configure オプションを見てみた。

$ ./configure --help
$ ./configure --with-perl=/usr/bin/perl
~snip~
checking for perl_construct... no
configure: error: Could not link to perl

駄目だね。cygwin の setup を眺めて、perl-libwin32 というのをインストール
してみたけど、現象変わらず。libperl を探してみる。

$ find /usr -name "libperl.a"
/usr/lib/perl5/5.10/i686-cygwin/CORE/libperl.a
$ ./configure --with-perl LDFLAGS="/usr/lib/perl5/5.10/i686-cygwin/CORE"
~snip~
checking for perl_construct... no
configure: error: Could not link to perl

現象変わらず。config.log を見てみる。

config.log:cc1: error: unrecognized command line option "-fstack-protector"
config.log:cc1: error: unrecognized command line option "-fstack-protector"

これが原因みたい。configure を見てみると、このオプションは。
PERLLIBS=`$PERL -MExtUtils::Embed -e ldopts`
の結果みたい。実行してみた。

$ perl -MExtUtils::Embed -e ldopts
 -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl,--stack,8388608
 -Wl,--enable-auto-image-base -fstack-protector -L/usr/local/lib
 -L/usr/lib/perl5/5.10/i686-cygwin/CORE -lperl -ldl -lcrypt

ここから -fstack-protector がつけられた、と。Embed.pm を見てみる。

$ view /usr/lib/perl5/5.10/ExtUtils/Embed.pm

辿って行くと、/usr/lib/perl5/5.10/i686-cygwin/Config_heavy.pl ファイル
に行きついた。

cppflags='-DPERL_USE_SAFE_PUTENV -U__STRICT_ANSI__ -fno-strict-aliasing
 -pipe -fstack-protector -I/usr/local/include'

このファイルを書き換えれば make できそうだけど、この影響がわからないし、
そもそも -fstack-protector が付いている理由もわからない。仕方ない、今回は
--with-perl は無しでコンパイルする。

$ ./configure
$ make

できあがった。まだ動かしてないので、ちゃんと動くかわからないけど。

 4/15
Other
昨日と同じことを、今日は Linux でやってみたのだけど、ちょっと Lame 周りで
エラーが出たぐらいで、すんなりとコンパイルできた。やっぱり Linux なんだな、
と関心して。週末、時間を見つけて、NetBSD の PC をなんとかしないと。

 4/16
Network
Winreshark で radiko のトラフィックを見てみると、ポート番号 1935 を使って
RTMP で送信されている様子。Wireshark でも RTMP を解析できるか見てみたら、
Supported Protocols には

RTMP      Routing Table Maintenance Protocol
RTMPT     Real Time Messaging Protocol

と、RTMP ではなく RTMPT で定義されていた。別の RTMP と名前が衝突してしまう
からなのでしょう。Analyze -> Decode As... から RTMPT を選んで、解析させて
みた。が、うまく解析できず。Wireshark の version が 1.2.6 だったので、
最新版の 1.2.7 にしてみたが同じ。Adobe のページにある RFC のドラフト(?)を
見てみた。
http://www.adobe.com/devnet/rtmp/pdf/rtmp_specification_1.0.pdf
やっぱり違う感じ。web で調べてみたら、4月7日から何やらセキュリティの
強化、という名目で RTMP から RTMPE という暗号化が入ったプロトコルになった
みたい。RTMPE のプロトコルが正式には出てないみたいだし、Wireshark では、
眺めるだけになりそう。

 4/17
Network
やや昨日の続き。rtmpdump を使うと RTMPE で通信できるみたいなので、cygwin
で実行してみることにした。の前にコンパイルから。

$ wget http://rtmpdump.mplayerhq.hu/download/rtmpdump-2.2c.tar.gz
$ tar xfz rtmpdump-2.2c.tar.gz
$ cd rtmpdump-2.2c

configure はないみたいなので、make を叩いてみた。

$ make
use "make posix" for a native Linux/Unix build, or
    "make mingw" for a MinGW32 build
use commandline overrides if you want anything else

Makefile で環境の違いを吸収しているみたい。cygwin なので mingw を付けて
みた。

$ make mingw
make[1]: ディレクトリ `/home/toyota/src/rtmp/rtmpdump-2.2c' に入ります
mingw32-gcc -Wall   -DRTMPDUMP_VERSION=\"v2.2c\"  -O2   -c -o rtmpdump.o rtmpdump.c
make[1]: mingw32-gcc: コマンドが見つかりませんでした
make[1]: *** [rtmpdump.o] エラー 127
make[1]: ディレクトリ `/home/toyota/src/rtmp/rtmpdump-2.2c' から出ます
make: *** [mingw] エラー 2

Makefile を見てみたら、cygwin が定義されてるので、cygwin を使うことに。

$ make cygwin
make[1]: ディレクトリ `/home/toyota/src/rtmp/rtmpdump-2.2c' に入ります
gcc -Wall   -DRTMPDUMP_VERSION=\"v2.2c\"  -O2   -c -o rtmpdump.o rtmpdump.c
make[2]: ディレクトリ `/home/toyota/src/rtmp/rtmpdump-2.2c/librtmp' に入ります
gcc -Wall   -DRTMPDUMP_VERSION=\"v2.2c\" -DUSE_OPENSSL -O2   -c -o rtmp.o rtmp.c
rtmp.c:37:25: openssl/ssl.h: No such file or directory
rtmp.c:38:25: openssl/rc4.h: No such file or directory
rtmp.c:40: error: 構文解析エラー が '*' トークンの前にあります

/usr/local/include にもないので、インストールされてないのでしょう。cygwin
のインストーラから openssl-devel をインストールして make し直すと、問題
なくコンパイル完了。radiko を聞いてみる実験は明日に。

 4/18
Network
昨日作った rtmpdump でニッポン放送を聞いてみた。というか、聞いてないけど。

$ ./rtmpdump.exe -Vvr 
'rtmpe://radiko.smartstream.ne.jp/QRR/_defInst_/simul-stream' -o /dev/null
RTMPDump v2.2c
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
DEBUG: Parsing...
DEBUG: Parsed protocol: 2
DEBUG: Parsed host    : radiko.smartstream.ne.jp
DEBUG: Parsed app     : QRR/_defInst_
DEBUG: Protocol : RTMPE
DEBUG: Hostname : radiko.smartstream.ne.jp
DEBUG: Port     : 1935
DEBUG: Playpath : simul-stream
DEBUG: tcUrl    : rtmpe://radiko.smartstream.ne.jp:1935/QRR/_defInst_
DEBUG: app      : QRR/_defInst_
DEBUG: live     : yes
DEBUG: timeout  : 30 sec
DEBUG: Setting buffer time to: 36000000ms
Connecting ...
DEBUG: RTMP_Connect1, ... connected, handshaking
DEBUG: HandShake: Client type: 06
DEBUG: HandShake: DH pubkey position: 458
DEBUG: HandShake: Client digest offset: 1324
DEBUG: HandShake: Initial client digest: 
DEBUG: □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
DEBUG: □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
DEBUG: HandShake: Type Answer   : 06
DEBUG: HandShake: Server Uptime : 1205651946
DEBUG: HandShake: FMS Version   : 3.5.2.1
DEBUG: HandShake: Server DH public key offset: 113
DEBUG: HandShake: Secret key: 
DEBUG: □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
~snip~
DEBUG: □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
DEBUG: RC4 Out Key: 
DEBUG: □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
DEBUG: RC4 In Key: 
DEBUG: □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
DEBUG: HandShake: Calculated digest key from secure key and server digest: 
DEBUG: □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
DEBUG: □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
DEBUG: HandShake: Client signature calculated:
DEBUG: □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
DEBUG: □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
DEBUG: HandShake: Server sent signature:
DEBUG: □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
DEBUG: □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
DEBUG: HandShake: Digest key: 
DEBUG: □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
DEBUG: □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
DEBUG: HandShake: Signature calculated:
DEBUG: □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
DEBUG: □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
DEBUG: HandShake: Genuine Adobe Flash Media Server
DEBUG: HandShake: Handshaking finished....
DEBUG: RTMP_Connect1, handshaked
DEBUG: Invoking connect
INFO: Connected...
~snip~

ま、隠す必要がないとは思うけど、「□」にした部分には16進数が入っていた。
面白いのが Server の uptime が入っていること。計算してみたら、起動された
のは4月6日の昼前になった。関東の各局を受信してみて、uptime を比較して
みると、ほぼ同じだったので、私からの接続先が1か所なのか、一斉に再起動
したのか、どちらかなのでしょう。

rtmpdump を調べていたときに FLVStreamer というソフトウェアも出てきた。
rtmpdump のドキュメントに Copyright 2009 The Flvstreamer Team との記述も
あるし。色々調べていくと、Adobe との絡みが関係していたことがわかった。
英語の wikipedia がまとまっている。
http://en.wikipedia.org/wiki/Real_Time_Messaging_Protocol
まとめると。

2009年1月20日 Adobe が RTMP の詳細を発表予定とアナウンス
2009年5月21日 Adobe が DMCA 違反として Sourceforge から rtmpdump 等の削除
2009年5月   rtmpdump から rtmpe, swf 機能を削除して FLVStreamer リリース
2009年6月15日 Adobe が RTMP の詳細を発表
2009年10月   rtmpdump の開発を再開

という流れ。FLVStreamer は未だに rtmpdump をベースとして開発されている
らしいけど、rtmpdump が復活した今、存在価値が少ないかもしれない。

 4/19
Network
rtmpdump ついでに、BBC もラジオの放送していているので、少し調べてみた。
私はいつも Real Time(rtsp)で聞いているのだけど、その他にWindows Media(mms)
があるのは確認している。rtmp があるのか、ごにょごにょ調べてみたら、rtmp
でも送信しているみたい。引き抜いた Radio1 のは、こんな感じ

rtmp://211.16.113.125:1935/live?
_fcs_vhost=cp60693.live.edgefcs.net&slist=Radio_1_Int@6440

本当はこれに auth と aifp というパラメタが付いていたけど、auth は長くて
邪魔だったのと、どっちも無くても大丈夫だったので省略した。

気になる IP とかを。211.16.113.125 は調べると日本国内の IP アドレスで、
持ち主は Akamai だった。上位は NTT Com 。同様に cp60693.live.edgefcs.net
も Akamai の持ち物で、lookup した 61.113.95.199 も日本のIPだった。さすが、
Akamai だなと感心。接続元に合わせて、接続先サーバを変えているのでしょう。
slist の部分は不明なのだが、Radio2 だと Radio_2_Int@6443 なるという情報が
あった。単純に slist を Radio_2_Int@6443 にしてみたけど、NetStream.Failed
で駄目。接続先か _fcs_vhost も変える必要があるみたい。

日本の radiko の状況みたいに BBC の放送を録音してくれるようなものがある
のか調べてみたら、get_iplayer というのが見つかった。が、現在はダウンロード
できないみたい。
get_iplayer
2月の終わりに BBC が Open Source のものを規制した影響で使えなくなった
みたい。なんだかなぁ。

 4/20
Network
昨日のやや続きで。BBC1 の rtmp アドレスは。

rtmp://cp60693.live.edgefcs.net:1935/live?slist=Radio_1_Int@6440

ここまで短くできた。昨日のアドレス、

rtmp://211.16.113.124:1935/live?
_fcs_vhost=cp60693.live.edgefcs.net&slist=Radio_1_Int@6440

この頭の IP は、
http://wsliveflash.bbc.co.uk/fcs/ident
の応答で指定されたアドレスで、何度かアクセスするとコロコロと変わるのが
わかる。同じように cp60693.live.edgefcs.net を nslookup すると、場所に
よって応答が変わる。このことは、wikipedia のアカマイのページに載っていて
Dynamic Site Delivery という技術らしい。ドイツからドメインを引いてみると
スイスの IP になったりして、面白い。

話を戻して。Radio1 には、上記の Radio_1_Int と英国国内向けの Radio_1_UK
というのがあるみたい。色々手を尽くしてこの UK 向けを聞こうとしたのだけど、
うまくいかない。IP で制限しているのだろうか。そんな感じで、色々と調べて
いたら、昨日の get_iplayer のソースを googlecode で見つけた。
http://get-iplayer-lives.googlecode.com/svn/trunk/get_iplayer
同様に、svn でも取得できることがわかった。なんだか Perl のモジュールが
いっぱい必要なので、まだ動かしてないけど、参考になった。ウェールズ語の
放送まであるし。

 4/21
Other
いつの間にか玄柴なんて面白い機械が出ていて。性格的に同じようなコンセプトの
OpenBlockS なんてもあるけど、OpenBlockS は値段が高くて、その値段だったら
安い新品のノート PC が買えるぐらいの価格だし。その点、玄柴は2万円を切って
いるので、手が出しやすい。NIC の口が2つあってたら、買ってたかもなぁ。
無くても欲しいし。

 4/22
Other Network
玄柴のことを調べていたら、Planex の MZK-WDPR[Rugby] なんて商品を見つけた。
3.5型 320×240 タッチパネル式液晶ディスプレイ、内蔵メモリー2GB、なかなか
面白いスペックで、スピーカーも装備しているので Youtube の動画まで再生できる
みたいだし。中の CPU と OS が気になるな。値段的には、玄柴よりも高いけど、
色々機能があるので、いじれたらこっちの方が面白いかも。

 4/23
OptiPlex SX260 NetBSD
さてさて、2週間中断してしまった NetBSD のアップデートの話。kernel を作り
変えて起動させてみたが。

boot device: wd0
root on wd0a dumps on wd0b
root file system type: ffs
warning: no /dev/console
panic: init died (signal 0, exit 12)
fatal breakpoint trap in supervisor mode
trap type 1 code 0 eip c029b0ac cs 8 eflags 246 cr2 bbbcb080 ilevel 0
Stopped in pid 1.1 (init) at    netbsd:breakpoint+0x4:  popl    %ebp
db{0}>

と出て起動しない。その前にちゃんと起動していた kernel.GENERIC で起動を
しても同じ感じ。どうやら、何かのアップデートに失敗したようである。こう
なったら、上書きインストールしかないようである。と思って、iso ファイルを
ダウンロードしてきたが、ブランク CD-R が見つからず。今となっては DVD-R を
使うので手元にないんだよね。仕方ない、またアップデートは中断である。

 4/24
Network WWW
久々に whois.jp にアクセスしてみたら、

2010年6月30日をもってIPアドレスに関する情報のwhois.jpからの検索サービスを
終了します。

と出た。え?と思ってみてみると、サービスは終了ではなく、移行するようで
ある。IP アドレスの whois は http://whois.nic.ad.jp/cgi-bin/whois_gw に、
jp ドメインは http://whois.jprs.jp/ になるんだと。whois.jp って直感的で
わかりやすかったのに、何でそんなことするんだろう、といった感じ。

 4/25
Other
CentOS 5.4 の新しい環境で開発をしている。のだが、作ったプログラム2本が
Segmentation Fault で落ちる。他の環境では落ちないし、gcc のオプションを
-O0 とか付けると落ちなかったりして、なんだかよくわからない状態。私の書いた
コードが 90% ぐらいの確率で悪いのだろうとは思うけど、他の環境では全く問題
なく動いているので、残りの 10% を考えてしまうんだよね。多分、単純なミス
だと思うけど、無駄な時間。

 4/26
Network
rtmpdump で radiko のニッポン放送がダウンロードできなくなった。他の局も
試してみたけど、同じ。ちょっと調べてみた。
http://radiko.jp/info/
20日にアクセス障害の対策が施されたらしい。どうした対策なのか調べてみたら
rtmpdump でも -f オプションを付ければ聞こえるらしい。試しにやってみた。

$ ./rtmpdump.exe -Vvf "LNX 10,0,45,2" -r
'rtmpe://radiko.smartstream.ne.jp/QRR/_defInst_/simul-stream' -o /dev/null

ちゃんとダウンロードが始まったが、前よりも変な出力が増えた。そもそも、
この -f オプションは何なのか調べてみたら、Flash version string らしい。
ちょっと rtmpdump のソースを眺めてみた。

#ifdef WIN32
#define OSS     "WIN"
#elif defined(__sun__)
#define OSS     "SOL"
#elif defined(__APPLE__)
#define OSS     "MAC"
#elif defined(__linux__)
#define OSS     "LNX"
#else
#define OSS     "GNU"
#endif
#define DEF_VERSTR      OSS " 10,0,32,18"

こんな感じ。手元の Firefox だと、これは何が送信されているのか見てみたら。
WIN 10,0,32,18
を送ってた。上記のソースを見ればわかるけど、LNX って Linux 用なんだよね。
最初に書いた人が Linux 使っていたからの対策なのでしょう。何が駄目で、何が
良いのかわからないけど、-f "WIN 10,0,42,34" でも大丈夫そう。

 4/27
Network
昨日書いた予想通りやってみた。

$ ./rtmpdump.exe -Vvf "WIN 10,0,42,34" -r
'rtmpe://radiko.smartstream.ne.jp/QRR/_defInst_/simul-stream' -o /dev/null

聞けた。調べてみると、WIN 10,1,53,7 でもうまく聞けるみたい。で、色々と
やってみたら、10,0,32,18 じゃなければうまく聞ける。WIN とか LNX とかは
関係ない。つまり、rtmpdump のデフォルト以外なら何でも良さそう。

 4/28
OptiPlex SX260 NetBSD
ブランク CD-R を見つけて、ダウンロードした iso イメージを焼いて、NetBSD
環境の再インストールを CD ブートで行う。re-install と upgrade の選択が
あったけど、違いの詳細がよくわからない。とりあえず、upgrade を選択して、
アップグレードインストールの開始。CD からの読み込みだし、書き込みが CF
なので、えらい時間がかかる。明日起きたら終わってるかな。

 4/29
OptiPlex SX260 NetBSD
朝起きると、昨日のインストールは終わってた。再起動してみると、sshd が起動
していない。ローカルでほとんど操作しないので、駄目キーボードしか繋いで
ないんだよね。面倒だな、なんて思いながらログインして、sshd を起動してみた。

# sshd
sshd re-exec requires execution with an absolute path

フルパスにしろって。

# /usr/sbin/sshd
Missing privilege separation directory: /var/chroot/sshd

あー。昨日、upgrade インストールしたけど、起動スクリプトなんかが上書き
されたみたい。つまり、/var は ramdisk で、中身は空。設定ファイルを書き
直さないと。とりあえず、/etc/rc.d/mountcritlocal で、CF の /var.bak から
/var にコピーするスクリプトを追加して、再起動してみた。

savecore: /dev/rwd0b: Device not configured
/etc/rc: WARNING: No swap space configured!
/etc/rc: WARNING: $sendmail is not set properly - see rc.conf(5).
/etc/rc: WARNING: $smmsp is not set properly - see rc.conf(5).
/etc/rc: WARNING: $apache is not set properly - see rc.conf(5).

なんだか、先は長そうである。とりあえず、httpd を起動したのだけど、設定
ファイルが見つからない。ちょっと telnet で接続してみたら。
Server: bozohttpd/20080303
なんて応答が返ってきた。何でしょう、bozohttpd って。ntpd なんかも NetBSD
は特殊だし、どんどん特殊なものになっていく気がする。どうやって設定を変更
すれば良いのか、さっぱりわからない。もう少し調べるとしよう。

 4/30
OptiPlex SX260 NetBSD
昨日の夜寝ようとすると、PC のファンが高速回転し始めた。気にしないで寝たの
だけど、朝も全速力で回っていたので、調べてみた。top で確認すると、find
コマンドが実行されている。この find コマンドは /etc/daily で実行された
ようで、daily 自体は cron から3時15分に開始されている。find で何を探して
いるか見てみると、/ 以下にある core ファイルを全て探している。12時間
経っても find が終わっていないので、こんなの毎日やることはどう考えても
無駄。とりあえず、/etc/defaults/daily.conf で設定されている find_core=YES
を NO にしておいた。ついでに、weekly で実行されている locatedb の作成も
NO にしたけど、/etc/weekly では。

if [ -f /var/db/locate.database ]; then
    echo "Rebuilding locate database:"
    chmod 644 /var/db/locate.database
    chown nobody:nobody /var/db/locate.database
    (cd / && nice -5 su -m nobody -c /usr/libexec/locate.updatedb 2>/dev/null)
    chown root:wheel /var/db/locate.database
else
    echo "Not rebuilding locate database; no /var/db/locate.database"
fi

で、/var/db/locate.database ファイルがないので、無視されると思うけど。

21st projects Tatsuyoshi Networks Prompt Works
by Tatsuyoshi since 2003