表 1 TARGET 引数のプラットホーム名 TARGET 引数プラットホーム名 # (cd exit . /include ; tar Bpcf ) ー tar Bpxf netbsd freebsd2 bsdi3 freebsd3 openbsd bsdi4 freebsd4 NetBSD 1.5 FreeBSD 2.2.8-RELEASE BSDI BSD/OS 3.1 ( * ) FreeBSD 3.5-RELEASE OpenBSD 2.8 BSDI BSD/OS 4.2 patchlevel 0 FreeBSD 4.2-RELEASE そして、カーネルを作成するために各プラットホーム用 * kame/VERSION を参照 kame/CVS/Repository kame/kame/sys/netkey/keydb. c kame/kame/sys/netkey/keydb. h kame/kame/sys/netkey/keysock. c kame/kame/sys/netkey/keysock. h すでに KAME をインストールしたことがある場合は、 /usr/local/v6 を消します。設定ファイルなどを残して おきたいのなら、 /usr/Iocal/v6 を /usr/locaI/v6. old へ 変更すればよいでしよう。 rm も mv も避けたい場合は、 爛氏限 /usr/local/v6/lib 以下を消去します。 次に、各フラットホームごとのコンパイルの準備をしま す。 kame ディレクトリに移動し、 TARGET 引数に表 1 のフラットホーム名を指定して make prepare を実行し ます。 FreeBSD 3.5 の場合は、次のようになります。 % cd kame % make TARGET=freebsd3 prepare ()d /usr/tmp/kame ; perl prepare . pl kame freebsd3) start : kame , .. /kame , freebsd3 exclude in freebsd3: . /.. / .. /kame/sys/netkey/keysock. c 1 Ⅱ -s freebsd3/sys/netkey/keysock. c unlink freebsd3/sys/netkey/keysock. h (sy mlink) . /.. / .. /kame/sys/netkey/keysock. h ln -s freebsd3/sys/netkey/keysock. h これで、 kame/freebsd3 以下に KAME をコンノヾイル する準備カいます。 # cd include . clean # mkdir include . clean # cd /usr # cp /kernel /kernel . previous % su 次に、カーネルなどのバックアップをとります。 UNIX MAGAZINE 2001.5 のコンパイル・ディレクトリに移動します。 % cd freebsd3 % pwd /usr/tmp/kame/freebsd3 % cd sys/i386/conf FreeBSD 3.5 の工竟で PAO を使う場合には、 点で PAO のカーネルバッチを当てます。 % cd /usr/tmp この時 % fetch -P ftp://daemon.jp.freebsd.org/pub/FreeB SD ー jp / PAO / PA03 ー 20001021. tar ・ gz ← PAO を入手 % tar xvfz PA03 ー 20001021. tar ・ gz % cd /usr/tmp/kame/freebsd3 % patch -p2 く /usr/tmp/PA03/sys/sys-pao. diff PAO のカーネルバッチを当てると、一部 reject され るので手て修正します。 % find . / -name " * . rej " —print . /sys/conf/files . rej sys/conf/files. rej をみれは分かるように、これは一部 の SCSI テンヾイスの成疋ファイルの追加に失敗しているだ けなので、、、十 " カ咐いている部分を sys/conf/files へ追 加します。かなり強引ですが、次のようにします。 % cat > > . /sys/conf/files cam/scsi/scsi_ cam/scsi/SCS1 cam/scsi/scsi_ cam/scsi/scsi cam/scsi/scsl cam/scsi/scsi_low . C cam/scsi/scsi low-pisa low—pisa 10W . C low-pisa 10W . C od . c . C . C . C optional Od opt i 0 Ⅱ a1 opt i 0 Ⅱ aI opt i 0 Ⅱ aI optional optional optional IICV ncv nsp nsp stg stg あとは KAME を make し、それから PAO 関連の make をす川まよいでしよう。 さて、もとに戻ります。カーネルの設定ファイルの物旧杉 が GENERIC. v6 です。もし、オリジナルの ( 変更を加 えた ) カーネル設正ファイルを使用している場合は、この 芻旧杉をベースに斑央しましよう。 % pwd /usr/tmp/kame/freebsd3 % cd sys/i386/conf % cp GENERIC. v6 CONFIGFILE 51
S ね就 9 Up IPv6 ( 幻 図 23 KAME プロジェクトの Web ページ フイ似り第 0 〒凹お知こリ、ツーなひヘル し , 0 ! 丘・ : 0 : 0 ・を洋を 0 へト生 - ビ ( を新・ ) , ℃ h26. れカ 1 第第 0 0 ・画「 ( h5. 2 ) 1 A : ミ - 第端 1 FO ′物 000 準地ー・厖い ) fc れ、 . 旦 - を当当 ん物′ 0 ト 12.2 ) 1 ASNA ト、を第′叡・ 0 れを・を計朝物 n 冬 . ! 3 写はを第 0 んト 18.2001 5 物 ck ( 咽 S 〔凵 (S) ・「 u 叫巧第し餮 - : 鄲′を気 0 ト物′ ch 19.2 ( 21. AS 忖イ物第お FÖ′ 3 ( 0m0 編 ! を 10 イ 0 自れを長 ! 上塗上・ ん′ ch 26.2 ( 01 AS ↓・“象 9 ! 「第 0 ) mp いま・朝一 0fci 物 0 雕今 . 都璽 t00r0 、局を日ー 0 両ョ 5 ! ~ ーのを第・ ) 引 30 毅 r 日 S01 物総物 ) KABÆ P 「 0 ct ・・ 0 杙 of 宀 n00E8 : 物を物興 n KAME Project アドい中みー・をれ ! 13 ftp://ftp.kame.net/pub/kame/README によ川ま、 17 カ BSD 3.5 用の 2001 年 1 月 15 日版の SNAP は、 kame- yyyymmdd には年月日が入ります。たとえば、 Free- kame-yyyymmddrbsdi42-snap. tgz ・ BSDI BSD/OS 4.2 用 kame-yyyymmdd-bsdi3-snap. tgz ・ BSDI BSD/OS 3.1 用 kame-yyyymmdd-openbsd28-snap ・ tgz ・ OpenBSD 2.8-RELEASE 用 kame-yyyymmdd-netbsd15-snap. tgz ・ NetBSD 1.5-RELEASE 用 kame-yyyymmdd-freebsd42-snap ・ tgz ・ FreeBSD 4.2-RELEASE 用 kame-yyyymmdd-freebsd35-snap. tgz ・ FreeBSD 3.5-RELEASE 用 ( 更新停止 ) kame-yyyymmdd-freebsd228-snap ・ tgz ・ FreeBSD 2.2.8-RELEASE 用 ( 更辛万イ亭 1 ト ) なっています。 の最新版のリリースに対する IPv6 KAME 化キットに ように、 OS ごとにファイル名で区別されており、各 OS に置かれていて、毎週月曜日に更新されています。 -- ド記の ・ ftp://ftp.kame.net/pub/kame/snap/ 配布物の 1 つである SNAP 版は、 から入手でき、世界各地にミラーサイトがあります 13 ・ ftp://ftp.kame.net/pub/kame KAME の配布物は、 0 PÅを毎 , rns ! hKA\ を ( こ朝 編 5. 引ヨ当旦当し 2 ・新物 0 行的 S50 / 0S31. 当 ! イ 0 42- 第を斗 122 、 ). ををを日 ) 42 ー RELEA - 50 所となっています。 20010115ー伝eebSd35ーSnaP. tgz となります。 SNAP 版に関する KAME メーリングリストとして、 ・ snap-users@kame.net ( 英石吾 ) があります。 KAME の SNAP の公瑁青報や KAME に 関する奇義は、このメーリングリストを通じておこなわれ ています。メーリングリストへの加入去は、 ・ http://www.kame.net/snap-users をご覧ください。このページには、 FAQ やユーサーガイ ドなどへのリンクもあります。 FreeBSD 3. x や 2.2.8 における KAME FreeBSD 2.2. x 系や 3. x 系の KAME のサポート終了 にともない、 FreeBSD 4. x 系への移行カ甘隹奨されていま す。しかし、いろいろな事情て移行できない場合もあるで しよう。そのような場合は、最後の SNAP リリースを利 用するか、コンパイル時にエラーが出るのを覚語のうえで CVS 版を使うことになります。 以下では、 FreeBSD 3.5 上で最後の SNAP を使う例 を紹介します。 この SNAP リリースは、 ・ ftp://ftp.kame.net/pub/kame/snap/kame-2()010 115-freebsd35-snap. tgz です。なお、 FreeBSD 2.2. x 系の場合は、 ・ ftp://ftp.kame.net/pub/kame/snap/old/kame- 20000703-freebsd228-snap. tgz となります。インストールの手順は、 FreeBSD 、 Net- BSD 、 OpenBSD ではほは 1 司しです 14 。頭のなかでプラ ットホーム名を適宜変更して読んでください。 入手した kame-yyyymmddrPLATFORM-snap. tgz を、適当なディレクトリで展開します。 % mkdir /usr/tmp % cd /usr/tmp % tar xvfz kame-20010115-freebsd35-snap ・ tgz kame / kame/CVS/ kame/CVS/Root 14 BSD/OS のみか若違います。言岩田は、 KAME の BSD/OS 用 配布物に含まれる bsdi3/INSTALL ( または bsdi4/INSTALL) を参照してください。 UNIX MAGAZINE 2001.5
図 7 KAME の新鮮さ ( ? ) とパッケージの系 KAME プロジェクト による更新 ( 随時 ) CVS で追跡する人 新鮮さ SNAP 1 週間 STABLE 3 カ月 ます。上記のバージョン以降であれは IPv6 か取り込まれ ているので、 CURRENT や STABLE といった開発版 も CVS など 0 毆小することによっても利用できます。 これら↓丿、外のバージョンでは、 IPv6 プロトコル・スタッ クはオリジナルのフラットホームの配布物には含まれてい ません。したがって、 KAME プロジェクトが公開してい るプロトコル・スタックを OS とバージョンに合わせて j 尺し、インストールする必要があります。 すでに KAME が含まれているバージョンであっても、 IPv6 に関する最新の機能を利用したいのであれば、同様 に最新の KAME をインストールすることになります。 KAME 配布パッケージ KAME プロジェクトが公開している IPv6 プロトコ ル・スタック (IPv4 での IPsec も含む ) が対応している OS は、 FreeBSD 、 NetBSD 、 OpenBSD 、 BSD/OS の 4 つです。ただし、 2001 年 3 月現在でサポート継続中の プラットホームは、 ・ BSD/OS 3.1 ・ BSD/OS 4.2 ・ FreeBSD 4.2 ・ NetBSD 1.5 ・ OpenBSD 2.8 です。 2 月頃までは、 FreeBSD 2.2.8 ( 2.2. x 系 ) / 3.5 ( 3. x 系 ) もサポートされていましたが、現在はサポートさ れていません。最新版 SNAP の提供も中止され、コンパ イルできる保証もないので注意してください ( 2.2.8 / 3.5 用の SNAP 中の freebsd2/INSTALL など 9 ) 。 9 http://www.kame.net/dev/cvsweb.cgi/kame/freebsd2/ INSTALL?rev=1.13 や、 http://www.kame.net/dev/cvs web. cgi/kame/freebsd3/INSTALL?rev=1.16 を参照してくだ UNIX MAGAZINE 2001.5 RELEASE 6 カ月 41 作業は休止されています。現在は、 CVS と SNAP のみ せん。これにともない、 RELEASE と STABLE の更新 になったため、 SNAP だから不安定ということはありま は各 OS のリリース・バージョンとして取り込まれるよう ッケージを使い分けていました。しかし、最丘の KAME KAME プロジェクトか始まった当初は、この 3 つのパ に向いている。 もの。内容力噺しく、定期的に KAME を更新する人 前記の CVS の内容を 1 週間に 1 回パッケージ化した ・ SNAP ( 1 週間に 1 回更新 ) RELEASE と次に述べる SNAP の中間に位置する配 ・ STABLE ( 3 カ月に 1 回更新 ) 古くなっていたり、イ畯わっている可能性がある。 は異なる。 IPv6 の研究開発は日進月歩なので、内容が 安定生を重視して作成されるため、内容は最新のものと ・ RELEASE ( 6 カ月単位で更新 ) パッケージには次の 3 不頁があります ( 図 7 ) 。 かできたであろう ) パッケージが入手ができる。 れなくなったプラットホームでも、 ( 当時、コンパイル パッケージ化されているので入手が簡単で、サポートさ のを入手 ) ・パッケージ ( 各プラットホームごとに公開されているも る必要がある。 バグがあったり、 CVS による更新といった手間をかけ 最新のコードか利用できる反面、テスト期間カいので リーを AnonCVS や CVSup によって入手 ) ・ CVS (KAME チームが開発に使用している CVS ッ 配布形式は、大きく分けて次の 2 つです。
ロプログラミンク・テクニック 情報の収集 多治見寿和 前回は ps コマンドをとりあげ、プログラムの内部でカ ーネル内の情報を取得するために利用される KVM ライ プラリ関数について説明しました。 しかし、描匠のシステムでは、 KVM ライプラリを使わ なくてもある程度の情報は入手できます。そこで、今回は KVM ライプラリとは異なるガ去でカーネル内の情報など を取得するガ去をみていきましよう。 最近の多くのシステムには、ルート・ディレクトリに proc と呼ばれるディレクトリがあり、そこにプロセスに 関する数多くの 1 帯長かオ褓内されています。こオゞ考案され たのは 1984 年とかなり古く、もともとはテンヾッガで利用 するために考えられたものです。 デバッガがデバッグ対象のプロセスの内容を取得する には、 ptrace というシステムコールを通してかなり面倒 な処理をしなけれはなりません。しかし、デバッグ対象の プロセスのメモリ空間がファイルとしてファイルシステム 上に存在すれは、 read や write などの操作で、デバッグ 対象のプロセスのメモリ内容を覗いたり変更することがで きます。 じつは、 /proc の実体は procfs というイ課的なファイ ルシステムで、物理ディスク上に対応するファイルはあり ません。その代わり、ファイルに対する要求をカーネルが 孑柑足し、対象となるプロセスの↑帯にを取得してファイルの 形式て提供します。そのため、現実にファイルはなくても ファイルシステム上に存在しています。 FreeBSD にも /proc が用意されています。ます、この procfs 106 ディレクトリのなかを見てみましよう。 FreeBSD% ls 0 / 1 / 140 / 143 / 190 / 195 / 2 / FreeBSD% —F /proc 2008 / 207 / 212 / 213 / 23653 / 23692 / 23693 / 23745 / 23746 / 4 / curproc@ 数字を名前とするディレクトリがたくさんありますが、 これらはそれぞれシステムで実行中のプロセスに対応して います。 1 つだけ数字ではないファイルがありますが、これはシ ンポリック・リンクです ( 誌面の都合上、て折り返し ています。以羽司様 ) FreeBSD% 1s ー 1 /proc/curproc 1 て 00t wheel 5 /proc/curproc ー > 23810 FreeBSD% 3 / 18 23 : 47 - 上記のように、シンポリック・リンクカ甘嗣ー先は、 /proc ディレクトリ内にある 1 つの数値のディレクトリです。 れは、その時点で実行中のプロセスのプロセス ID を名前 とするディレクトリを指しています。上刎列でいえば、実 行した ls コマンドのプロセス ID が 23810 番だと分かり ます。 procfs では、たんにイ可番のプロセス ID のプロセスが 存在するかが分かるだけでなく、各プロセスの情報も取得 できます。それには、各プロセスを表すディレクトリのな かを調べる必要があります。もちろん、、、 / pr 。 c / 1 " のよ うにプロセス ID でディレクトリ名を指定してもかまいま せんが、さきほどの curproc を利用して、現在のプロセ スに関する情報を調べてみることにしましよう。 UNIX MAGAZINE 2001.5
ァイルもまだ実装されていません。 regs 、 map など regs 、 fpregs 、 dbregs はそれぞれ、マシンのレジスタ、 浮動小点レジスタ、デバッグ用レジスタを読み出すため のファイルです。各レジスタの値はバイナリ形式での読出 しとなるため、プログラムから読み出す場合にはレジスタ を表す適切なデータ構造として読み出す必要があります。 テンヾッグ用にプロセスを停止しているときは、ファイルに 書き込むことも可能です。その場合には、レジスタの値を 設定することができます。 デバッガを作成する場合には、プロセスの実行制御がで きて、レジスタの値か読み出せるだけでは不十分です。プ ログラムの実行時の様子を知るには、メモリ中にオ褓内され ている変数の値などにもアクセスしなけれはなりません。 このために用意されているのが、 map ファイルと mem ファイルです。 108 コマンド行には、、 xxx という名前で起動された " という も、どのファイルが実行されているのかは分かりません。 UNIX では、プロセスが実行されたコマンド行をみて 実行しているファイルを指しています。 用 e はシンポリック・リンクで、対象となるプロセスが 升 le をおこなっても、ほかのプロセスに景グはありません。 たアクセスでも同様です。 mem ファイルを用いた書込み 共有の対象から外されます。これは mem ファイルを通じ ているときは、書込みがおこなわれる可能性があるために 部分は共有されています。しかし、デバッガの対象となっ が実行されている場合、通常はプログラムの実行コードの 正することで実現できます。システム内で複数のプロセス 変更しなけ川まなりません。これも、 mem ファイルを修 プ実行やプレークポイントのために実行コードを一日判勺に モリを書き換えることも可能です。テンヾッガでは、ステッ このファイルに書込みをおこない、対象のプロセスのメ 領域だけです。 ていますが、アクセスできるのはプロセスに存在している のイメージです。これは仮想メモリ全体のイメージとなっ オ褓内されています。 mem ファイルは、実際のイ瓦想メモリ map ファイルには、プロセスのイ反想メモリのマップが 情報しかなく、どのファイルか使われたかという情報は示 されないからです。 一方、テパッカでは変数かオ褓内されるアドレスなどを調 べるために実行ファイルにアクセスする必要があります。 そのため、通常は実行ファイルを指定してデバッガを起 動します。ところが、今回とりあげた pr 。 cfs のインター フェイスでは、動作しているプロセスを ( 権限があれは ) いきなり捕まえて制御を奪うことができます。この場合に は、プロセスか夫行しているファイルが分からなくなって しまいます。しかし、 file カ甘旨すファイルはプロセスが実 行しているファイルであると分かっているため、こから 変数などのシンポルの情幸碍られるようになります。 etype には、用 e カ甘旨しているファイル、つまりプロセ スが実行しているファイルの形式がテキスト文字列でオ褓内 されています。次の例を見てください。 FreeBSD% cat /proc/curproc/etype FreeBSD ELF FreeBSD% プロンプトと同じ文字列で見づらいかもしれませんが、 この出力から、現在のプロセスか実行しているファイルは FreeBSD の ELF 形式であることが分かります。 rlimit 次は rlimit ファイルです。このあたりになると、シェ ル・スクリプトなどでもちょっと使いでのあるファイルに なってきます。 rlimit は読込み専用のファイルで、対象となるプロセ スのリソースの制限値かオ褓内されています。 FreeBSD% cat /proc/curproc/rlimit cpu ー 1 ー 1 fsize ー 1 ー 1 data 536870912 536870912 stack 67108864 67108864 core 0 ー 1 rs s ー 1 ー 1 memlock ー 1 ー 1 nproc 531 531 nofile 1064 1064 sbsize ー 1 ー 1 FreeBSD% 出力は左のカラムから順に、制限の名前、現在の制限 値、最大の制限値です。ー 1 は制限がなく無限であること を表しています。 UNIX MAGAZINE 2001.5
この配布物を各プラットホーム上で展開し、カーネルの 作成とアフリケーションのインストール、設定をおこなえ ば KAME が使えるようになります。 オリジナルのカーネルに対して追加のカーネルバッチを 適用している場合には、とくにネットワーク里の (IPv6 に関する ) カーネルバッチが reject されることがありま す。また、パッチは、 KAME のカーネルソースに対して 当てなけれはなりません。 たとえは、 FreeBSD 3.5 と PAO を使用している場 合、 FreeBSD 3.5 用の KAME キットに含まれている カーネルソースに対してパッチ ( PAO パッチなど ) を適 用し、その後に KAME の make とインストールをおこ ないます。 freebsd4 や netbsd15 などの KAME か町 ( り込まれた OS では、各フラットホーム上のカーネルやユーサーラン ドの開己阪 (FreeBSD-current や NetBSD-current な ど ) に対して KAME か反映されています。 NetBSD や OpenBSD でのメンテナンスは頻繁におこなわれるため、 これらの OS の最新版では KAME も最斤ということに なります。 私の場合、生活用の PC は NetBSD-current で、ルー タや Web サーノヾーについては、 FreeBSD のオフィシャ ル・リリースに対して KAME をインストールするとい う形式て利用しています。常日吏っている pc に CUR- RENT を入れておくと make が通らないこともあるの で、どのバージョンを使うかは管理コストとの兼合い ( = 瑁青で決まります。 IPv6 ( と IPv4 IPsec) 初体験の人が IPv6 を使おう という場合でも、利用しているフラットホームに KAME カ陬り込まれていれば、そのまま IPv6 が使えます。この ようなケースでは、追加の KAME をインストールする必 要はないでしよう。 最新でないと第カゞすまない人、どっふりと浸かってみた い人は、 CVS や SNAP パッケージを使って KAME を インストールしましよう。 定期的に最新版を使いたい人は、慣れれば cvs で KAME に j 直するのが一 -- ・番楽だと思います。こうするこ とで、、、どこが変わったのか " 、、追加されたのか " といっ た変化も分かり、なかなか楽しいものです ( って、感しる ところが別世界の住人である証拠のようなものです加。 UNIX MAGAZINE 2001.5 ー -- -- それでは v6 を・・ 1 . 2 . 3 . 4 といった感しです。それでは、 128 ピット長の IPv6 ア ドレスも次のように表記するのでしようか。 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8.9.10. 11.12.13. 14 . 15 . 16 答は、ノーです。 IPv6 アドレスの表記 IPv6 では、 128 ビットのアドレスを次のように表記す ることになっています [ 1 ] 。 128 ビットのアドレスを、、 : " ( コロン ) で 16 ビット単 位に区切り、 ( IPv4 のように 10 進数ではなく ) 16 進数で アドレスを表記します。たとえば、次のようになります。 16bit 16bit 16bit 16b 司 16bit 16bit 16bit 16bi 1234 : 5678 : 9abc : def0 : 1234 : 5678 : 9abc : def() と、、 : " のあいだがすべて 0 の場合は、、 : 0 : " と省略でき それでは、 IPv6 を使ってみましよう。さきほど、 lPv6 アドレスが 128 ビットであることは述べましたが、表記 について簡単に説明していきましよう。 IPv4 では、 32 ビットアドレスを ( ドット ) で 8 ビット単位に区切り、 10 進数で表記していました。 1234 : 0000 : 5678 : 0123 : 0000 : 4567 : 8901 : 2345 ます。たとえば、 たとえは、 する場合は、、 : : " と表記できます。 となります。さらに、連続する 0 を省略した、 : 0 : " が続 1234 : 0 : 5678 : 123 : 0 : 4567 : 8901 : 2345 の場合は、 ただし、この : 0 : の省略は 1 回しかできません。 となります。 1234 : 5678 : : 9012 : 3456 : 7890 となり、 : 0 : の連続か省略できるので、 1234 : 5678 : 0 : 0 : 0 : 9012 : 3456 : 7890 の場合は、 1234 : 5678 : 0000 : 0000 : 0000 : 9012 : 3456 : 7890 43
には、このプロセスの大きさ、メモリ上にある部分の大き ルの状態、ケーパビリティ ( アクセス制御の一種 ) の状 態 ( 未実装 ) などか書かれている。 さ、共有されているべージ数、コード部分のページ数、デ ータとスタックのページ数、ライプラリのページ数、内容 が変更されたページ数が収められています。 status ファ イルも linprocfs のものと同様ですが、こちらにはケーパ ビリティ嬲里の値も含まれています。 ついでといってはなんですが、せつかくの機会なので Linux の /proc には、プロセスを示すディレクトリ以 Linux の /proc もみておきましよう。以下では、 Linux 外に数多くのファイルが置かれています。これらは、シス カーネル 2.2 を対象にします。 テムの状態などを表示するために使えます。したがって、 /proc にプロセス ID を表すディレクトリがあり、現 システムの状態を表示するようなコマンドの大半は、これ 在のプロセスに対応するディレクトリへのシンポリック・ らのファイルを利用するシェル・スクリプトとして実現 リンクの self があるところまではとくに変わりはありま できそうです。もちろん、 linprocfs のところで説明した せん。 self のなかには、 cmdline 、 cwd 、 environ 、 exe 、 meminfo や uptime 、そして stat なども便利ですが、 fd 、 maps 、 mem 、 root 、 stat 、 statm 、 status の 11 れらに加えて apm では APM (Advanced Power Man- 個のファイルやディレクトリがあります。 agement) の状態が、 modules ではカーネルにロードさ cmdline は、 FreeBSD のものと同様にコマンドの引数 れているモジュールの状態が把握できます。また、サプ を表します。 cwd はシンポリック・リンクで、対象のプロ ディレクトリ net のなかには、 ARP テープルやルーティ セスのカレント・ディレクトリを指しています。 environ ・ング・テープルカ忍できるファイルもあります。これほ ファイルには、プロセスの実彳の環境かオ褓内されていま ど多くの情報が pr 。 cfs ファイルシステムから得られるの す。 main 関数の argv と envp の関係と同様、 cmdline であれば、 *Stat コマンドは不要になるかもしれません。 ファイルと environ ファイルもよく似ています。 1 つの 環境変数は、、変数名 = 文字列 " という形式で記述され、環 境変数ごとにヌル文字で区切られています。 exe は実行し sysc ゼコマンド ているファイルです。サプディレクトリ fd には、対象と 舌を FreeBSD に戻しましよう。これまでみてきたの するプロセスがオープンしているファイルの一覧かオ褓内さ は、どちらかというとシステムの重加勺な側面でした。つま れています。ここには、ファイル・ディスクリプタの番 り、システムの実行中に変化していく情報です。しかし、 号と同し名前のシンポリック・リンクがあり、そのリンク システムには、実行を開始してからほとんど変わらない情 の指す先は、当然のことながら対応するディスクリプタに 報も数多くあります。たとえは、システムの起重加寺刻や、 対してオープンしているファイルです。 maps はメモリの ネットワーク・インターフェイスが複数あるときにバケッ マッピングかオ褓内されたファイルであり、 mem はプロセ トをするかといった情報です。 スのメモリです。 root は、プロセスのルート・ディレク FreeBSD では、これらのどちらかというと青勺な↑帯長 トリを指すシンポリック・リンクです。 は sysctl コマンドて管理することになっています。これ stat ファイルは linprocfs の stat ファイルと似てい らの情報はカーネル内にオ内されていて、カーネルやアプ ますが、後ろのほうの数値も実装されています。ちょうど リケーションが必要に応じて値を参照したり、 ( 権限があ FreeBSD の /proc における status ファイルのようなも 川ま ) 書き換えたりできるようになっています。カーネル ので、プロセス ID 、コマンド名、状態、親プロセス ID 、 か管理する変数の一覧を得るには、 sysctl コマンドに -a プロセスグループ ID 、セッション ID に加え、端末番号、 オプションを付けて実行します。 端末を所有しているプロセスのプロセスグループ ID 、フ FreeBSD% sysctl —a ロセスのフラグなどか続き、さらにメモリフォールトの情 kern. ostype : FreeBSD 報、プロセスの実行時間に関する情報、優先順位、メモリ kern . osrelease : 4.2—RELEASE やシグナルに関する情報などかオ内されています。 statm kern . osrevision : 199506 Linux での /proc 一三ロ 112 UNIX MAGAZINE 2001.5
第信 : 第勢等・ , 信等既信第島第島第 ? 等 : 岩第信第第信第工信 : 信第信第島第信 ? 信 W : 瞽第第第第日第 : 3 第第勢第 PC に UNIX をインストールしようと考えています が、その OS がサポートしているハードウェア ()C の パーツ、周辺機器 ) を使わないと動かないと聞きました。 Linux や FreeBSD を使うにはどのような PC にすオしば よいのでしようか。とくに CD-R/RW 、 DVD 、デジタ ルカメラ、 Pentium III または Pentium 4 を使いたい と考えています、という質問記事です。 これに対して、 Linux では CD-R/RW やデジタル カメラは使えるが、 DVD は法的な問題があって対応し ていない、 FreeBSD でも同様である、 CD-R/RW は ATAPI だと間題が生しる場合もある、 DVD について は DVD-ROM や DVD-RAM なら使えるはすだが、 DVD-R/RW はまだ無理だと思う、 : 幻勺に間題があるの は DVD-Video である、 Pentium III は間題なく動く が Pentium 4 は動 ( 得長告を聞いていない、アーキテク チャが変わっていないのだから動くのではないか、コン パイラなどが対応するまではクロックの割には遅い CPU という感しになるのではないか、各 OS やディストリビ ューションがサホートしているハードウェアは、それぞ れの Web ページに詳しく載っている、 Linux なら http: //www.linux.or.jp/、 FreeBSD なら http://www.jp .freebsd.org/を見るとよい、といったフォローがきま Newsgroups: fj.unix Subject: fopen による最大ファイルオープン 同時にオープンできるファイルの最大数を調べていま す。ファイル・ディスクリプタの最大値は 1024 に設定 されていて、 open(2) では最大値の 1024 までオープン できますが、 fopen(3) では 256 までしかオープンでき ないことカ吩かりました。 Web サイトから得た情報では、 ファイル・ディスクリプタが 256 以 - ヒの場合は BCP のア プリケーションの動 ( 料焉正がないとのことですが、 fopen の上限はこれに山来しているのでしようか。また、 fopen で 256 以 - ヒを同時にオープンするガ去はないのでしよう か、という質間記事です。 これに対して、同時にオープンできる数は OS の種 類やバージョンによって異なる、この数は -SC-OPEN- MAX を引数にして sysconf(3) を使って調べるのが一一 般的である、、、 BCP " が何を表すのかがはっきりしない ので、 Web サイトから得たという情報はあまり意味がな UNIX MAGAZINE 2001.5 い、 fopen で 256 以 - ヒのファイルを同時にオープンする ためには、標準の stdio ライプラリでそれができる工羅竟 ( たとえば Solaris なら Solaris 7 以降の 64bit 工竟 ) で 実行するか、それが可能な stdio 互換のライプラリを使 えはよい、といったフォローがきました。 Newsgroups: . os. linux,fj. os. bsd. freebsd, fj.comp. dev. disk Subject: Linux 、 FreeBSD で削除したファイルの復活 Linux (ext2fs) や FreeBSD (UFS) でファイルを削 除した場合、復活できないというのが通説だと思います が、誤って削除したファイルを復活させる方法やツール は本当にないのでしようか、という疑間記事です。 これに対して、一イ勺な UFS/FFS の場合はファイル を削除してもハードディスク上にはファイル名や inode か残るが、 inode がディスク上のどこにあるかという情 報はすぐに消えるため復活させるのはかなり大変である、 しかも UFS では新しく解放したディスクプロックから 使われていくため、削除したファイルが使っていた領域 がすぐに別のファイルで上書きされてしまう可能生が高 い、そのため誤って削除したファイルをどうしても復活 させたけれは、削除した直後に電源ケープルを抜いたり電 源のスイッチを押して強制イ亭止させ、ハードディスクを 別の PC につないで生データを読み出すイ乍業をする必要 がある、消すべきファイルを 1 カ所に移すスクリプトを rm という名前で使えるようにしている人がいるという話 を聞いた、これは普通の環境で作業をするときに安易に rm を実行する癖がついてしまうのでやってはいけない という説もある、 ext2fs にはファイルを復活するツール がある (GNU Midnight Commander 、 http://www. gnome ・ org/mc/) 、商用ソフトなら FINALDATA の UNIX 対応版がある、といったフォローがきました。 Newsgroups: 月 . comp. X11 fj.sys. sun . unix Subject: X でマウス 2 つを認識するには ? Solaris 7 の CDE 環境でマウスの入力を 2 系統受け 付けられるようにするガ去を探しています。 Linux 上で XFree86 を使う場合は XF86Config の XInput セク ションにデバイス名を 2 つ言当したら両方とも認識され たのですが、 CDE でもそのような設定はできるのでしょ うか、という質問記事です。 147
上の例では core だけが、、 0 " となっていますが、その他 は最大の制限値のままです。これらの数値の未は、 limit コマンドの出力と上交するとよく分かります。 FreeBSD% limit cput ime filesize datasize stacksize coredumpsize memoryuse descriptors memorylocked maxpr 0 C FreeBSD% unlimited unlimited 524288 kbytes 65536 kbytes 0 kbytes unlimited 1064 unlimited 531 なお、 csh の limit コマンドに—h オフションを付けて 実行すると制限の最大値か表示されるため、佑端のカラム の値と等しくなります。 status 最後の status ファイルは、対象となるプロセスの状態 を示すものです。内容はテキスト形式なので、そのまま表 示できます。 FreeBSD% cat /proc/curproc/status cat 286 223 286 223 5 , 0 ctty 983977086 , 464076 0 , 17367 0 , 34734 nochan 1000 1000 0 , 0 , 0 , 5 FreeBSD% 表示されている情報のなかには、意床がよく分からない ものもあります。各カラムは左から順に、コマンド名、フ ロセス ID 、親プロセス ID 、プロセスグループ ID 、セ ッション lD 、制徊碍 } 末の major,minor 番号、プロセス フラグのリスト、プロセス開始時刻、プロセスの使用した ューサー日翻爿、プロセスの使用したシステム時間、ウェイ トチャンネル・メッセージ、実効ユーサー ID 、実ュー サー ID 、実グループ ID と実効グループ ID て始まるグ ループ ID のリスト、 jail を利用している場合のホスト名 を表しています (jail については後主します ) 。 プロセスフラグとしては、 ctty と sldr があります。制 御端末がある場合は ctty か設定さオ L 、該当するプロセス がセッション・リーダーである場合は sldr か設定されま す。両者とも設定されるときは、カンマで区切って並べま す。どちらのフラグも設定されないときは、 "noflags" と 出力されます。 すこし分かりにくいのはプロセスの開始時刻でしよう。 プロセスの開始時刻は UNIX における起点、すなわち UNIX MAGAZINE 2001.5 プログラミング・テクニック / 1970 年 1 月 1 日の午前 0 時を基售にした秒単位の直で 表現されています。カンマの後ろはマイクロ秒単位の端数 です。人間が見ることを前提にする場合には、これらの数 109 procfs の利用 いるディレクトリ /proc を参照し、そのなかから数値で このように、 procfs ファイルシステムをマウントして PROCS='1s /proc ー grep [ 0 ー 9 ] * $ , ー sort -n' 手します。 最初に、実行中のプロセスのプロセス ID のリストを入 どを用いて、簡易版 ps コマンドを作成します ( 図 1 ) 。 しよう。すでに説明した status ファイルや cmdline な マンドに似た働きをするシェル・スクリプトを作ってみま こで、これらのフア・イルを利用する例として、 ps コ てひととおり説明を終えたことになります。 こまでで、 procfs で用意されているファイルについ いる場合には、その jail 用のホスト名か表示されます。 ん。このように、 jail を用いた環境でフ。ロセスを実行して の内側のプロセスが外側の部分を変更することはできませ のシステムを 2 つの異なるシステムのように動かし、 jail ムであるかのように動かすことができる仕組みです。 1 つ ルシステムの一緇 ; にコピーし、そのなかだけで別のシステ 用いられます。 jail とは、ファイルシステム本をファイ 最後の項目は、システムが jail を利用している場合に ID か列挙されています。 効グルーフ ID で、その後ろにプロセスのほかのグループ 構成されていますが、う頁は実グループ ID 、 2 番目が実 を表しています。カンマで区切られたいくつかの題直から 後ろから 2 つ目の項目のリストはプロセスのグルーフ 11 時 58 分を表すことが分かります。 さきはどの例に出てきた直は、 2001 年 3 月 7 日午後 FreeBSD% 2001 年 3 月 7 日水曜日 23 時 58 分 06 秒 JST FreeBSD% date ーて 983977086 示されます。 け、引数として秒数を指定すると、その秒か表す日日俵 マンドが使えます。 date コマンドに一 r オプションを付 の形式に変換したはうがよいでしよう。変換には date コ 値をそのまま表示すると分かりづらいので、一勺な日時
Starting Up IPv6 ) 図 8 KAME と各プラットホームにおける兄 FreeBSD NetBSD OpenBSD BSD/OS 2.2. x-RELEASE 系 : KAME freebsd2 をインストール 3. x-RELEASE 系 : KAME freebsd3 をインストール C 屬己の 2 つは、 KAME のカーネル部分か史新されていない。ューサーランド部分でもコンパイルかできな い可能性がある ) 4. x-RELEASE 系 : デフォルトで KAME かマージされている 最斤の KAME を使いたいときは KAME freebsd4 をインストール 1.5-RELEASE 系 : デフォルトで KAME がマージされている 最斤の KAME を使いたいときは KAME netbsd15 をインストール ・きわめて頻繁に更新されているため、 NetBSD-current にも KAME が反映され続けている 2.8-RELEASE 系 : デフォルトで KAME がマージされている ・きわめて頻繁に史斤されているため、 OpenBSD-curreht にも KAME が反映され続けている ノヾージョン 3.2 : KAME bsdi3 をインストール バージョン 4.2 : デフォルトで KAME がマージされている 去斤の KAME を使いたいときは KAME bsdi42 をインストール 図 9 配布物のディレクトリ構成図 kame INSTALL ( インストール・ドキュメント ) sys ( すべてのプラットホームにおける共通のカーネルコード ) kame libinet6 kame ・・ ( すべてのプラットホームにおけるユーザーランド共通コード ) ( プラットホーム名 ) n etbsd INSTALL ( プラットホーム固有のインストール・ドキュメント ) sys ( プラットホーム固有のカーネルソース ) libinet6 ・・ ( プラットホーム固有のユーザーランド・コード ) の公開と考えてよいでしよう。ですから、 SNAP は不安 定と思いこます、積極的に使っていけばよいと思います。 KAME プロジェクトがサポートをおこなわなくなった プラットホームで KAME を使う場合は、サポートされて いた最後の SNAP を利用しましよう。 CVS 版を使うこ ともできますが、すべてのプラットホームに共通する部分 で、旧いプラットホームのことは考慮されていないため、 コンパイルに失敗する可能性か高いことを頭に入れておき ましよう。 BSD 系の各プラットホームにおける KAME の対力犬 況をまとめると、図 8 のようになります。 KAME の配布物には、カーネルランド ( カーネルコー ド ) とユーサーランド ( アプリケーションなど ) の双方の コードが入っています。 42 その構成は、以下のようになっています。 ・ IPv6 、 IPsec に対応したカーネルソース /usr/src/sys に IPv6 、 IPsec などのためのコードが 追加されている。 ・ IPv6 に対応した各種アプリケーション、ライプラリ、 成疋ファイルなど (kame/kame IPv6 対応 telnet や ftp など、オリジナルのバージョ ンを置き換えるアプリケーションや、ライプラリ、設定 ファイルー式。 この部分は、 KAME の配布物としてはすべてのプラッ トホームに共通。 配布物のディレクトリ構成は図 9 のようになっていま す。 UNIX MAGAZINE 2001.5