パスワードを忘れた? アカウント作成
640671 journal

k.daibaの日記: NetBSDでのユーザランド構築メモ

日記 by k.daiba
./build.sh distribution を実行するとかいてあるんだが,実行してみるとコンパイルに失敗した.エラーを見ているうちにヘッダファイルの読込先が違っていることに気がついた.ひとつ見つけてはまた止まる.それを何度か繰り返す.時間がかかるので,日に一回しかコンパイルできなかった.

/usr/src/sbin/mount_msdos/mount_msdos.c
    46c46
    < #include <msdosfs/msdosfsmount.h>
    ---
    > #include <fs/msdosfs/msdosfsmount.h>

/usr/src/sbin/mount_union/mount_union.c
    52c52
    < #include <miscfs/union/union.h>
    ---
    > #include <fs/union/union.h>

/usr/src/crypto/dist/heimdal/lib/krb5/krb5_locl.h
    119c119
    < #include <krb5_asn1.h>
    ---
    > #include <krb5/krb5_asn1.h>
    122,125c122,125
    < #include <krb5.h>
    < #include <krb5_err.h>
    < #include <asn1_err.h>
    < #include <krb5-private.h>
    ---
    > #include <krb5/krb5.h>
    > #include <krb5/krb5_err.h>
    > #include <krb5/asn1_err.h>
    > #include <krb5/krb5-private.h>

これでなんとかコンパイル成功

===> Successful make distribution
===> build.sh started: Tue Jan 27 11:50:29 JST 2004
===> build.sh ended: Tue Jan 27 20:27:14 JST 2004
===> Summary of results:
                  build.sh command: ./build.sh distribution
                  build.sh started: Tue Jan 27 11:50:29 JST 2004
                  No nonexistent/bin/nbmake, needs building.
                  Bootstrapping nbmake
                  MACHINE: i386
                  MACHINE_ARCH: i386
                  TOOLDIR path: /usr/src/obj/tooldir.NetBSD-1.6ZG-i386
                  DESTDIR path: /usr/src/obj/destdir.i386
                  RELEASEDIR path: /usr/src/obj/releasedir
                  Created /usr/src/obj/tooldir.NetBSD-1.6ZG-i386/bin/nbmake
                  makewrapper: /usr/src/obj/tooldir.NetBSD-1.6ZG-i386/bin/nbmake-i386
                  Updated /usr/src/obj/tooldir.NetBSD-1.6ZG-i386/bin/nbmake-i386
                  Successful make distribution
                  build.sh started: Tue Jan 27 11:50:29 JST 2004
                  build.sh ended: Tue Jan 27 20:27:14 JST 2004
===> .

ちなみに,上記表示だと8時間ぐらいはかかったことになるが,vmwareだと時間の進み方が違うらしい.実際は4時間ぐらい.で,これをインストールした.

./build.sh install=/

すると結果は

make installworld started at: Wed Jan 28 04:19:47 JST 2004
make installworld finished at: Wed Jan 28 04:27:50 JST 2004
===> Successful installworld to /
===> build.sh started: Wed Jan 28 04:18:51 JST 2004
===> build.sh ended: Wed Jan 28 04:27:50 JST 2004
===> Summary of results:
                  build.sh command: ./build.sh install=/
                  build.sh started: Wed Jan 28 04:18:51 JST 2004
                  No nonexistent/bin/nbmake, needs building.
                  Bootstrapping nbmake
                  MACHINE: i386
                  MACHINE_ARCH: i386
                  TOOLDIR path: /usr/src/obj/tooldir.NetBSD-1.6ZG-i386
                  DESTDIR path: /usr/src/obj/destdir.i386
                  RELEASEDIR path: /usr/src/obj/releasedir
                  Created /usr/src/obj/tooldir.NetBSD-1.6ZG-i386/bin/nbmake
                  makewrapper: /usr/src/obj/tooldir.NetBSD-1.6ZG-i386/bin/nbmake-i386
                  Updated /usr/src/obj/tooldir.NetBSD-1.6ZG-i386/bin/nbmake-i386
                  Successful installworld to /
                  build.sh started: Wed Jan 28 04:18:51 JST 2004
                  build.sh ended: Wed Jan 28 04:27:50 JST 2004
===> .

この結果が出る前にこんなメッセージがでていた.

postinstall checks failed: postinstall defaults mtree gid uid periodic rc ssh makedev postfix obsolete sendmail
To fix, run:
        /usr/src/etc/postinstall -s /usr/src -d // fix postinstall defaults mtree gid uid periodic rc ssh makedev postfix obsolete sendmail

ので,そのままコマンドを動かしてみると,

postinstall fixes passed: postinstall defaults mtree periodic rc ssh makedev postfix obsolete
postinstall fixes failed: gid uid sendmail

という結果になった.さらにやってみると,

# /usr/src/etc/postinstall -s /usr/src -d // fix gid uid sendmail
Source directory: /usr/src
Target directory: //
gid fix:
                Missing groups [NOT FIXED]: smmsp
uid fix:
                Missing users [NOT FIXED]: smmsp
sendmail fix:
                ///usr/libexec/sendmail/sendmail binary has wrong owner/mode [NOT FIXED]
                Version of ///etc/mail/sendmail.cf is 9, should be 10 [NOT FIXED]
chown: smmsp: invalid group name
                Client queue /var/spool/clientmqueue has wrong owner/mode [NOT FIXED]
postinstall fixes passed:
postinstall fixes failed: gid uid sendmail

と出てくる.ここから先,どうやって修正するのかはまだわからないので,とりあえずここまで.
640676 journal

k.daibaの日記: NetBSDでのカレント追跡メモ

日記 by k.daiba

XP上で動いているVMWareにNetBSDをインストールしてみた.でもそれだけでは面白くないので,カレントを追跡してみることにした.参考にしたのはこれ
まず,必要なファイルを ftp.jp.netbsd.org からダウンロード.Xは使わないので,落としたのはftp://ftp.jp.netbsd.org/pub/NetBSD-current/tar_files/ 配下のpkgsrc.tar.gzと,さらにその下にあるsrc配下の*.tar.gz 群.これらを特定のディレクトリに置き,こんな感じで展開

      # for i in *.gz
      > do
      > echo $i
      > gzip -dc $i | ( cd /usr; tar xvf -)
      > done

次に,手順にしたがって,toolchainを構築

    mkdir /usr/obj
    cd /usr/src
    ./build.sh tools

カーネルはこれだけで構築できるかと思いきや,設定ファイルに余計なことが書いてあったので修正.具体的には,/usr/src/sys/arch/i386/conf/GENERIC で,693行目をコメントアウト

    #ath* at pci? dev ? function ? # Atheros 5210/5211/5212 802.11

これがおわったらカーネル構築を実施

    ./build.sh kernel=GENERIC
    cp /netbsd /onetbsd
    mv /usr/obj/sys/arch/i386/compile/GENERIC/netbsd /

これでカーネルのできあがり

449813 journal

k.daibaの日記: かなローマ字変換

日記 by k.daiba

頼まれて,ひらがなをヘボン式のローマ字に変換する関数を作ってみた.

sub kanroma($)
{
    my $kana = shift;
    $_ = $kana;

# 促音は 'ち', 'ちゃ', 'ちゅ', 'ちょ' 音に限りその前にTを加える

    s/っち(?!ゃ|ゅ|ょ)/TCHI/g;
    s/っちゃ/TCHA/g;
    s/っちゅ/TCHU/g;
    s/っちょ/TCHO/g;

# ヘボン式ローマ字つづり一覧表

    s/あ/A/g;
    s/い/I/g;
    s/う/U/g;
    s/え/E/g;
    s/お/O/g;
    s/か/KA/g;
    s/き(?!ゃ|ゅ|ょ)/KI/g;
    s/く/KU/g;
    s/け/KE/g;
    s/こ/KO/g;
    s/さ/SA/g;
    s/し(?!ゃ|ゅ|ょ)/SHI/g;
    s/す/SU/g;
    s/せ/SE/g;
    s/そ/SO/g;
    s/た/TA/g;
    s/ち(?!ゃ|ゅ|ょ)/CHI/g;
    s/つ/TSU/g;
    s/て/TE/g;
    s/と/TO/g;
    s/な/NA/g;
    s/に(?!ゃ|ゅ|ょ)/NI/g;
    s/ぬ/NU/g;
    s/ね/NE/g;
    s/の/NO/g;
    s/は/HA/g;
    s/ひ(?!ゃ|ゅ|ょ)/HI/g;
    s/ふ/FU/g;
    s/へ/HE/g;
    s/ほ/HO/g;
    s/ま/MA/g;
    s/み(?!ゃ|ゅ|ょ)/MI/g;
    s/む/MU/g;
    s/め/ME/g;
    s/も/MO/g;
    s/や/YA/g;
    s/ゆ/YU/g;
    s/よ/YO/g;
    s/ら/RA/g;
    s/り(?!ゃ|ゅ|ょ)/RI/g;
    s/る/RU/g;
    s/れ/RE/g;
    s/ろ/RO/g;
    s/わ/WA/g;
    s/ん/N/g;
    s/が/GA/g;
    s/ぎ(?!ゃ|ゅ|ょ)/GI/g;
    s/ぐ/GU/g;
    s/げ/GE/g;
    s/ご/GO/g;
    s/ざ/ZA/g;
    s/じ(?!ゃ|ゅ|ょ)/JI/g;
    s/ず/ZU/g;
    s/ぜ/ZE/g;
    s/ぞ/ZO/g;
    s/だ/DA/g;
    s/ぢ/JI/g;
    s/づ/ZU/g;
    s/で/DE/g;
    s/ど/DO/g;
    s/ば/BA/g;
    s/び(?!ゃ|ゅ|ょ)/BI/g;
    s/ぶ/BU/g;
    s/べ/BE/g;
    s/ぼ/BO/g;
    s/ぱ/PA/g;
    s/ぴ(?!ゃ|ゅ|ょ)/PI/g;
    s/ぷ/PU/g;
    s/ぺ/PE/g;
    s/ぽ/PO/g;
    s/きゃ/KYA/g;
    s/きゅ/KYU/g;
    s/きょ/KYO/g;
    s/しゃ/SHA/g;
    s/しゅ/SHU/g;
    s/しょ/SHO/g;
    s/ちゃ/CHA/g;
    s/ちゅ/CHU/g;
    s/ちょ/CHO/g;
    s/にゃ/NYA/g;
    s/にゅ/NYU/g;
    s/にょ/NYO/g;
    s/ひゃ/HYA/g;
    s/ひゅ/HYU/g;
    s/ひょ/HYO/g;
    s/みゃ/MYA/g;
    s/みゅ/MYU/g;
    s/みょ/MYO/g;
    s/りゃ/RYA/g;
    s/りゅ/RYU/g;
    s/りょ/RYO/g;
    s/ぎゃ/GYA/g;
    s/ぎゅ/GYU/g;
    s/ぎょ/GYO/g;
    s/じゃ/JA/g;
    s/じゅ/JU/g;
    s/じょ/JO/g;
    s/びゃ/BYA/g;
    s/びゅ/BYU/g;
    s/びょ/BYO/g;
    s/ぴゃ/PYA/g;
    s/ぴゅ/PYU/g;
    s/ぴょ/PYO/g;

# ヘボン式では b, m, p の前にn の代わりに m をおく

    s/NB/MB/g;
    s/NM/MM/g;
    s/NP/MP/g;

# 促音は子音を重ねて示す

    s/っ(\w)/$1$1/g;

# 長音表記 'おお','おう'を Oと表現

    s/OO/O/g;
    s/OU/O/g;

    return $_;
}

452667 journal

k.daibaの日記: Mingw で perl 5.8.1

日記 by k.daiba

ActiveState
(Sophosという会社に買収されてしまった)
から5.8.1ベースのPerlがでないうちに,気がつくと5.8.2が
CPANにでている.どうやら5.8.1は5.8.0とバイナリでの
互換性がなかったらしい.

いつまで待っていれば新しいバージョンのPerlが使えるか
わからなかったので,自分で作ってみることにした.といっても
VC++ なんてのを買うのはめんどくさいのでMinGWを使ってみる
ことにする.

日記に書こうと思ってしまったぐらいはまってしまった.
MinGWとdmakeをひろってきてコンパイルをかけてみるが,
_nm____pioinfo オブジェクトがないというエラーが出て失敗
してしまう.あっちこっち探していたら,
ここに,同じ場所ではまった人への回答が
乗っていた.win32.hで定義してある

EXTERN_C _CRTIMP ioinfo* __pioinfo[];

は最新バージョンのMinGWでは

extern __declspec(dllimport) ioinfo * __pioinfo[];

としておかないと動かないらしい.これを変更したらコンパイル
に成功した.ちなみに,
ここをみたらRubyでも似たようなことが起こっていたようだ.
解決策がわかってから調べなおしてみると,答えは沢山ネット
上にころがっているのをみつける.なんでだろう~

662723 journal

k.daibaの日記: 電池だぁ~

日記 by k.daiba
SUN StorEdge A1000というマシンがあります.まぁ,なかなかよいできです.でも,文句がひとつ.24MBついているキャッシュ,内臓電池でバックアップされていて,これがきれると正常に動作しなくなる.なんでやねん.UPSついてるのに,それはないんじゃない?おまけに電池の寿命が2年だなんて,全然しらなかった.がっくし.
663344 journal

k.daibaの日記: 1難さってまた1難

日記 by k.daiba

ウィルスの猛威はまだはげしい.が,それはそれとして,今度は別の問題が発生して
しまった.Radiusサーバが壊れてしまったのだ.サーバは修理すればなんとかなるとして,
問題はデータの整合性をどうとるかだ.サーバ側では,すべてのIPは未使用だと思って
いるが,Radiusクライアントでは使用中のIPがある.クライアントをリブートすれば問題
解決といいたいところだが,大量なユーザが経由しているRadiusクライアントをリブート
すると,それらのユーザがRadiusサーバに対して再接続をかけてきてしまって,
Radiusサーバが超高負荷になりまたダウンしてしまう.

結局,ユーザが少なければRadiusクライアントをリブートするし,多ければ使用中のIP
アドレスを見つけて,ちまちまと開放するしかない,ということになった.では,ある
IPアドレスが今ユーザが利用しているかどうかをどうやれば見分けることができる
だろうか?

気がついたのは,TTL Timeoutだ.Radiusクライアントはユーザにとってはデフォルト
ゲートウェイにあたり,一方Radiusサーバにとっては単なるL3SWにあたるということだ.都合のよい
ことにRadiusクライアントではダイナミックルーティングをはやっていない.
つまり,Radiusサーバからユーザに対してping用のicmp echo requestを発行すると,
1) ユーザがいて,ping用のicmp echo response が返ってくる
2) ユーザがいて,FWでブロックされて何も返ってこない
2) ユーザがいなくて,Radiusクライアントとそれに対向してるL3SWの間でicmp echo
      requestがピンポンし,TTLがタイムアウトした方から,icmp ttl timeout
      が返ってくる
というように場合分けすることができる.これをもとに作ってみたのが以下の
関数になる.IPアドレスを配列で渡してやると,ユーザがいるかどうかをチェックする.

icmpを飛ばしまくるウィルスに対抗した後,今度はこちらがicmpを飛ばしまくりである.
因果な商売だこと.トホホ

----------------------------------------------------------------------------
## 必要なモジュール
#
use IO::Socket;
use IO::Select;

## 大域変数
#
my $sel_r;
my $max_proc = 20;

## IPアドレスの配列に対してpingを実行する
#
sub ping_check(@)
{
    my $usr_ip = @_;;
    my ($proc,$addr,@ready,$count);

    $sel_r = new IO::Select;

    ## $max_proc 分のping プロセスを作成
    #
    for ($proc = 1; ($addr = shift @usr_ip) && ($proc add($fh);
}

## ping プロセス消去
#
sub close_ping($)
{
    my $fh = shift;
    $fh->close;
}

## パケットが TTL timeoutになったかどうか
#
sub read_ping($)
{
    my $fh = shift;
    my ($text,$f,$ret);
    {
        local $/ = undef;
        $text = ;
    }
    $f = $text =~ /PING\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/;
    $ret = $1 if ($f);
    return ($text =~ /Time to live/)? undef : $ret;
}
----------------------------------------------------------------------------

424329 journal

k.daibaの日記: 小物Gets

日記 by k.daiba
ネットワークも落ち着いたので,昼に秋葉原にまででた.腕時計型USBメモリを買う.延長ケーブルもついていて,なかなか面白い.でもひとつ欠点があった.物が腕時計型なので,腕につけたままPCに接続してみたら,熱い. 128MBもあるし,usbからのブートも可能なはずなんだけど,何かおもしろいことできないかな.でも,まず手持ちのマシンのBIOSが対応してるのかどうかを確かめなきゃ.

追加 最近発売された腕時計型のUSBメモリには2種類あった.ひとつは usbブートが可能だが規格が1.1で,もうひとつはusbブートができない規格が2.0のもの.今回購入したのはusbブートができないものだった.

665163 journal

k.daibaの日記: Blastその後

日記 by k.daiba
ワームの嵐が吹き始めて1週間がすぎた.今はなんとかなって
いるが,それもユーザからのicmp echo requestをユーザに最も
近いL3SWで落としたからだ.落としているパケットの数は
まだまだ膨大.落ち着くまでこのままか.

今回の騒ぎでFDBをクリアするスクリプト以外で役にたった
スクリプトがこれ.スイッチのプロセスごとのCPU使用率を
値の高いものから出力する.

--------------------------------------------------------
#!/bin/perl
## excpu.pl
### show extreme networks switch's cpu utilization

use strict;
use BER;
use SNMP_Session;
$SNMP_Session::suppress_warnings = 2;

sub usage();
sub walk_func($$$);

my $target = shift @ARGV || usage;
my $community = shift @ARGV || 'public';

my $sysLocation = encode_oid(1,3,6,1,2,1,1,6,0);
my $status = [1,3,6,1,4,1,1916,1,1,1,29,1,5];
my $utilization = [1,3,6,1,4,1,1916,1,1,1,29,1,6];
my (%tasks,$key);

my $session = SNMP_Session->open ($target, $community, 161)
    || die "Opening SNMP_Session";

$session->map_table ([$status,$utilization],\&walk_func);

for $key (sort {$tasks{$b}{PERCENT} <=> $tasks{$a}{PERCENT}} keys %tasks){
    printf "%-20s %10s %3d\n",$key,$tasks{$key}{STATUS},$tasks{$key}{PERCENT};
}

sub walk_func($$$)
{
    my ($index, $status, $percent) = @_;
    my $name;
    ($status,$percent) = grep (defined $_ && ($_ = pretty_print $_),($status,$percent));
    $percent = (defined $percent)? $percent : 0;
    my @index = split /\./,$index;
    shift @index;
    shift @index;
    @index = map{pack "c",$_}@index;
    $index = join '',@index;
    $tasks{$index}{STATUS} = $status;
    $tasks{$index}{PERCENT} = $percent;
}

sub usage ()
{
    die "usage: $0 switch [community_name]";
}
665871 journal

k.daibaの日記: MSBlaster.D

日記 by k.daiba
昨日の昼,スイッチへのpingが飛ばなくなった.故障したのかと思って予備機に切り替えたが復旧しない.負荷分散してみると,ラウンドトリップタイムが普段数msec単位の場所で,数百msecながらもpingが飛び始めた.MSBlasterかもしれないと思ったが,ネットワーク機器に影響を及ぼすほどのトラヒックを出すなんて話はその時点では情報がなかった.それに,トラヒックの量自体はいつもとそんなにかわらないように思ったので故障を疑っていた.ウィルスなのだろうか.時間が経つうちにネットワークの状態は悪くなっていった. 色々やってみて機械が壊れているわけではないと判断した.パケットキャプチャをかましてみる.すると,icmpがばんばん流れている.スイープをしているらしい.存在しないアドレスにまでどんどん投げている.それと相関しているのか,スイッチのCPU使用率もあがっていた.どたばた騒ぎの始まりである.

紫スイッチはicmpパケットが流れる際に何か特殊な処理をやっているらしい.例えばTCPでの通信ができなくなったときにでも,pingを飛ばしてみるとTCPが飛び始めたりする.Forwarding Database(FDB)の処理に何か関係しているようだ.この処理に負荷がかかるのだろうか.

ラウンドとリップタイムが数百msec単位にまで悪化した時に,特定のスイッチでFDBをクリアすると数値が改善することがわかった.おまじないの面目躍如だ.30秒単位でばんばんおまじない実行. 30時間ほど苦闘し戦線離脱.明日はどうなる.

666373 journal

k.daibaの日記: 発病まで後少し

日記 by k.daiba
eeyeの解析を見ると,msblasterはソースIPを詐称してsynパケットを16日の午前0時からwindowsupdate.microsoft.comに投げるようだ.北米大停電の影響でネットワークの経路情報は不安定な状態だし,果たしてスイッチはFDBエントリの爆発的増加に耐えられるだろうか.
typodupeerror

アレゲは一日にしてならず -- アレゲ見習い

読み込み中...