指定 - みる会図書館


検索対象: UNIX MAGAZINE 2005年4月号
85件見つかりました。

1. UNIX MAGAZINE 2005年4月号

図 5 rdate コマンドによるリモートホストの時刻の (Linux) localhost$ rdate -p timehost timehost2 ←時刻を表示するだけならスーパーユーザーの権限は不要 rdate: [timehost] sat Feb 12 04 : 43 : 31 2005 ・←ホスト timehost の時刻 rdate : に土 mehos し 2 ] sat Feb 12 04 : 40 : 02 2005 ・←ホスト timehost2 の時刻 localhost$ 図 6 rdate コマンドでリモートホストから取得した時刻を言綻 (Linux) localhost# date; rdate -s timehost; date sat Feb 12 14 : 02 : 05 JST 2005 ← rdate 実行前の localhost の時刻 S at Feb 12 14 : 0 5 : 3 5 JST 2 0 0 5 localhos し # コマンドの書式は、 rdate 0 0 れ s ん OS ん 0St2 で、たとえば以下のように使います。 rdate -p host ( 時刻を表示 ) rdate -s host ( 時刻を設定 ) 「 date 実行後の loca 旧 0 の時刻。 timehost の時刻に合った 時刻を表示するだけならスーパーユーザーの権限は必要 ありませんが、設定するときはこの権限で実行してくださ rdate の実彳引列 図 5 は、 Linux の rdate コマンドで 2 台のホスト、 time- host と timehost2 の時刻を表示した例です。 rdate コ マンドは、 time サービスから渡された直形式の時刻を、 ctime() 関数を使って文字列に変換してから表示します。 図 6 は、 timehost から取得した時刻をローカルホスト に設疋する例です。 date コマンドを使用し、 rdate コマン ドの実行前と実行後のローカルホストの時刻を表示させて います。これを見れば、時刻か変更されたこと力分かるで しよう。 ところで、図 5 と図 6 を並べて見ているうちに、試して みたいことが出てきました。図 6 の例で rdate コマンド に複数のホストを指定したとすると、ローカルホストには どのような時刻が定されるのでしようか。 マニュアルにははっきり書かれていなかったので、実際 に試してみることにしました。 図 7 は、この疑問を解くためにおこなった実験の様子で す。 2 台のホストの時刻を取得し、ローカルホストに設疋 42 します。また、取得した時刻を確認できるように、 ー p " の 2 つのオプションを指定しました。 rdate —s —p 図 7-a の実験では、 localhost の時刻は最初は time- host とも timehost2 とも違いましたが、 rdate の実行後 は timehost の時刻に合っています。このことから、複数 のホストを指定したときは、 1 番目のホストの時刻に合う と考えられそうです。 さらに、もう 1 つ実験をしてみました。今度は、指定し た 2 つのホストのうち、 1 番目のホストは実在しないホス トです。この場合は、図 7-b の、 rdate : Unknown host nohost : Unknown host のように、、 nohost" というホストは存在しないと表示され、 2 番目に指定した timehost2 の時刻に合わせられました。 これらの実験から想像できるように、 rdate コマンドは、 ・複数のホストを指定したときは、最初に指定したホスト の時刻に合わせる 指定したホストにアクセスできない場合は、次のホスト の時刻に合わせる のように動作します。 複数の時刻サーバーで time サービスか作していると きは、もっとも信頼性の高い ( 誤差が小さい ) ものから順番 、いくつカ寸旨定しておくとよいでしよう。特定の時刻サ に ーバーが停止していたり、トラブルのために一部のネット ワークにアクセスできないときでも、指定したサーバーに 順番にアクセスし、つながったサーバーから取得した時刻 に合わせることができます。 UNIX MAGAZ 工 NE 2005 . 4

2. UNIX MAGAZINE 2005年4月号

連載 /FreeBSD のブートプロセスをみる 0885 : 0886 : 0887 return ( 0 ) ; (char * ) sv—>sv—usrstack maxsslz ; 832 行目の大域変数 maxssiz と 883 行目の sgrow- siz は、プロセスに割り当てられるスタック領域の最大サ イズと初期サイズを表します。それぞれのデフォルト値 は 64MB と 128KB ですが、カーネル起動時の環境変 数 kern. maxssiz と kern ・ sgrowsiz で変更することもで きます。 832 行目では、スタック領域が最大サイズまで拡張さ れたときの最下位アドレスを求めています。図 5 に示した elf32-freebsd-sysvec のメンバー変数 sv-usrstack には BFC00000H が設定されているので、 stack-addr には BBC00000H が設定されます。つまり、ユーザープロセ スは、最大で BBCOOOOOH—BFBFFFFFH の 64MB の領域をスタックに使用することができます。 848 ~ 851 行目では、ページテープル・エントリと仮 想アドレス空間の領域を削除します。 init プロセスでは、 vmspace 構造体をほかのプロセスと共有していないため、 ほかのプロセスのことを気貴う必要もなく、ばっさりと削 ってしまいます。 859 行目の vm-map-stack() では、新しいスタック領 域を作成します。引数に stack-addr と maxssiz が指定 されているので、すぐに最大サイズの 64MB の領域カ胙ら れるようにみえますが、 こで作成される領域は sgrowsiz による初期サイズのほうが優先されるため、 BFBEOOOOH —BFBFFFFFH の 128KB になります。 883 行目では 128KB をベージ数で換算した、、 32 " が格 納され、 884 行目では stack-addr と同じ BBC00000H elf32-Ioad-section か第定されます。 150 eIf32 」 oadsection() の主要部分を示します。 以下に、ファイル kern/imgact-elf. c で定義されている います。 ント ) を仮想アドレス空間にマッピングする処理をおこな ストとデータセグメント ( どちらも PT-LOAD 型セグメ e1f32 」 oad-section() は、プログラム・ファイルのテキ static int e1f32—10ad—section(struct proc *p , Struct vmspace *vmspace , struct vnode *VP, vm—object—t 0bj ect , vm—offset—t offset , caddr—t vmaddr size—t memsz, Size—t vm—prot—t prot , size—t pagesize) #define trunc—page—ps (va, ps) #define round—page—ps ()a , ps) map—addr trunc-page—ps (vmaddr , pagesize) ; file—addr trunc—page—ps (offset , pagesize) ; if (memsz > filsz) map—len=trunc—page-ps (offset + filsz , pagesize) file—addr; else map—len=round—page—ps (offset + filsz , pagesize) file_addr ・ 0396 : 0395 : 0394 : 0393 : 0385 : 0384 : 0383 : 0382 : 0381 : 0354 : { 0353 : 0352 : 0351 : 0350 : 0349 : UNIX MAGAZ 工 NE 2005.4 ます。一方、データ領域のように memsz のほうが大きけ は、最終アドレスを含むべージまでの領域をマッピングし テキスト領域のように memsz と filsz が同じ値の場合 ~ 396 行目はマッピングする領域の長さを求めています。 始アドレスとファイル位置を求めています。そして、 393 384 ~ 385 行目では、マッピングをおこなうべージの開 必要なマクロのようです。 のようなカーネルが IA ー 32 用のバイナリを実行するときに ーネルでは 4KB 以外のページサイズも選択できるので、そ と trunc-page() の結果は同じです。しかし、 IA-64 用力 4KB 以外の値を指定することはなく、 trunc-page-ps() はつねに 4KB ですから、 trunc-page-ps() の引数 ps に IA-32 用カーネルではユーザープロセスのページサイズ ps() も trunc-page() も結果は一ゃん」 「ページサイズって 4KB やろ。せやったら、 trunc-page- ページサイズが指定できます。 のマクロが登場していますが、 ・・ ps() 形式のマクロでは exec-elf32-imgact() の 745 行目や 746 行目にも同様 メントしたアドレスを言 t 算するマクロです。 クロ、 382 行目の round-page-ps() は、切上げアライン を ps が指すべージサイズで切捨てアラインメントするマ 381 行目の trunc-page-ps() は、 va が指すアドレス

3. UNIX MAGAZINE 2005年4月号

連載 / 旧 v6 の実装ー 0 表 1 対応付け更辛尉黼 & のフラグ ・ - ュ、一一ンエ フラグ IP6MU-ACK IP6MU-HOME IP6MU-LINK IP6MU-KEY 意味 対応付け更新の返事として、対応付け応答が必要であることを示す 対応付け更新情報が、ホーム・エージェントに対するホーム : 繕青報であることを示す ホームアドレスのホーム登録と同時に、ホームアドレスと同一のリンクローカル・アドレスもホーム ントで監視する必要があることを示す 移動の際に IKE の通信を糸財寺できることを示す。 KAME では未実装 合もあります。移動ノードは、対応付け更新の情報を mip6 -bu 構造体として保持し、そのリストを管理しています。 mip6-bu 構造体については 1 月号で解説済みなので、今 回は省略します。 対応付け更新エントリの操作を簡単におこなえるよう に、以下に示すサービス関数カ症義されています。 ・ mip6-bu-create() 対応付け更新エントリを作成 ・ mip6-bu 」 ist-insert() 対応付け更新エントリをリストに追加 ・ mip6-bu 」 ist-remove() 対応付け更新エントリをリストから削除 ・ mip6-bu 」 ist-remove-all() 対応付け更新リストのエントリをすべて削除 ・ mip6-bu 」 ist-find-home-registration ホーム登録を示す対応付け更新エントリを検索 ・ mip6-bu 」 ist-find-withpaddr() 通信相手のアドレスをもとに対応付け更新エントリを検 ・ mip6-bu-timeout() 対応付け更新のタイマー処理 以下、それぞれの関数を解説していきます。以降で引用 するコードは mip6-mncore. c からの抜粋です。 対応付け更新エントリの作成 対応付け更新エントリは mip6-bu-create() で作成され mip6-bu-create は 5 つの引数をもちます。 paddr は 対応付け更新の送信先のアドレス、 mpfx は自分のホーム アドレスのもととなるプレフィックス情報へのポインタ、 coa は自分の気付アドレスです。 flags は対応付け更新メッ セージに指定するフラグ情報です。 mip6-bu-create() で は、表 1 に示すフラグのうち、 IP6MU-ACK 、 IP6MU- HOME 、 IP6MU-LINK が指定できます。 KAME の実 装では、ホーム・エージェントに送る対応付け更新であれ ば 3 つのフラグをすべて指定し、固定ノードへの対応付け 更新ではフラグを指定しません。 sc はホーム・ネットワー クを示す hif インターフェイス構造体へのポインタです。 1496 1497 1498 1505 1502 1503 MALLOC (mbu , struct mip6_bu * , sizeof (struct mip6—bu) , M_TEMP , M_NOWAIT) ; if (mbu = = NULL) { return (NULL) ; coa—lifetime = mip6—coa—get—1ifetime(coa) ; 1 , 496 ~ 1 , 503 行目で mip6-bu 構造体の情報を保持す るためのメモリを確保します。対応付け更新の有効時間 は、移動ノードが保持しているアドレスの有効時間に依存 します。ます、 1 , 505 行目で気付アドレスの効時間を取 得します。のちほど、ホームアドレスの有効時間も取得し、 それらのうち短いほうが対応付け更新の有効時間として利 用されます。ただし、この肩効時間は、ホーム・エージェ ントの判断で短縮される場合もあります。 ます。 1482 1483 1484 1485 1486 1487 1488 1489 60 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 bzero(mbu, sizeof (*mbu) ) ; mbu—>mbu—flags flags ; mbu— >mbu—paddr *p addr ; mbu—>mbu—haddr = mpfx—>mpfx_haddr ; if (sc—>hif—location HIF_LOCATION_HOME) { static struct mip6—bu * mip6—bu—create(paddr, mpfx, coa, flags, sc) const struct in6—addr *paddr; struct mip6—prefix *mpfx; struct in6_addr *coa; u—int16—t flags; struct hif_softc *sc; else / * un—reglstration. * / mbu—>mbu—coa = mpfx—>mpfx—haddr ; mbu—>mbu—pri—fsm_state (mbu—>mbu—flags & 工 P6MU—HOME) ? MIP6_BU_PRI_FSM_STATE_WAITD MIP6_BU_PRI_FSM_STATE_IDLE ; UNIX MAGAZ 工 NE 2005.4

4. UNIX MAGAZINE 2005年4月号

ロプロクラミンク・テクニック 多治見寿和 sysIog(2) 前回は、デーモン・プログラムなどがメッセージを出力 70 ューザーのリストのうちログインしているユーザーの端 ・指定されたファイルにメッセージを追加する。 syslogd でおこなえる処理は以下のとおりです。 す。 ない情報はログファイルに記録するといったことも可能で 要な情報はシステムのコンソールに表示し、さほど重要で 性を表します。たとえば、カーネルからのメッセージや重 能が出力したメッセージかを、レベルはメッセージの重要 引数に指定する値です。ファシリティはシステムのどの機 よって区別します。これらは、前回述べたように priority syslogd では、渡された情報をファシリティとレベルに に用意されているデーモン・プログラムが syslogd です。 き込まれたりメッセージが出力されたりします。そのため ァイルにもとづいて処理方式が決定されて、ファイルに書 ったん 1 つのプロセスに集められ、そのプロセスで設疋フ 直接出力する処理はおこないません。出力すべき情報はい 前回紹介した syslog 関連の関数群は、ファイルなどへ sy 引 ogd の動作 る側の syslogd デーモンについて説明します。 今回は、前号で予告したとおり、メッセージを受け付け でしよう。 syslog システムを利用するように変更するのも比較的簡単 るので、 fprintf 関数を利用している既存のプログラムを、 た。 syslog 関数は fprintf 関数とほば同様の使い方ができ プログラムから呼び出されるライプラリ関数を紹介しまし する際に利用する syslog システムをとりあげ、これらの 末にメッセージを表示する。 UNIX MAGAZ 工 NE 2005.4 を指定します。このとき、大文字と小文字は区別されませ いる記号定数 (LOG-KERN など ) の、、一 " より後ろの部分 します。ファシリティは、ライプラリ関数の引数として用 で、ファシリティとレベルを、、 . " ( ドット ) で区切って言当 セレクタ部は処理対象となるメッセージを指定する部分 ため、注意が必要です。 定ファイルは古いシステムでは利用できなくなってしまう 在は空白文字も使えます。ただし、空白文字を使用した設 す。以前はタブ文字しか認められていませんでしたが、現 の 2 つは、タブ文字 ( または空白文字 ) で分けられていま 各行はセレクタ部とアクション部から構成されます。 がコメントとして扱われます。 多くのシステムと同様、倥白文字を除いて ) # で始まる行 述されています。コメントを言当することもでき、ほかの syslog. conf です。このファイルは 1 行に 1 つの設疋カ第己 syslogd デーモンの動作を決める設疋ファイルが /etc/ sy 引 og. conf の基本的な記法 メールを送るといった処理にも対応しています。 ージを渡すこともできるので、たとえは特定のユーザーに へのメッセージの出力ですが、コマンドを起動してメッセ 基本はファイルへのメッセージの追加とユーザーの端末 す。 ・コマンドを起動し、その標準入力としてメッセージを渡 指定されたホストにメッセージを車幻去する。 を表示する。 ・ログインしているすべてのユーザーの端末にメッセージ

5. UNIX MAGAZINE 2005年4月号

連載 / ネットワークとセキュリティ ・ Red Hat Linux 7.3 、 Red Hat Enterprise Linux $ rpmbuild —bb sniffdet. spec terprise Linux 3 以降の場合 ・ Fedora Core 、 Red Hat Linux 8.0 、 Red Hat En- $ rpm —bb sniffdet. spec 2.1 以前の場合 最後に、作成した RPM パッケージをインストールしま deve1-O.9—1ade . i386. て pm Wrote : /home/ ユーザー名 /rpm/RPMS/i386/sniffdet— 0 .9—1ade . i386. rpm Wrote : /home/ ユーザー名 /rpm/RPMS/i386/sniffdet- RPM パッケージカイ乍成されます。 なわれ、下記のようなメッセージが表示されるとともに とくに問題がなければ、 Sniffdet のコンパイルがおこ i386/sniffdet—0.9-1ade. i386. rpm # rpm -i /home/ ユーザー名 /rpm/RPMS/* $ su す ( 誌面の都合上、で折り返しています ) 。 rpm も作成されますが、こちらも通常はインストールする シンポル情報を含む sniffdet-debuginfo-(). 9-Iade. i386. また、ディストリビューションによっては、デバッグ用の くにインストールしなくてもよいでしよう。 ラリを使った開発用パッケージなので、通常の環境ではと なお、 sniffdet-deve レヾッケージは、 Sniffdet のライプ Sniffdet の設定 必要はありません。 ト、プラグインの設疋をおこなう plugins ステートメント る global ステートメントと、調査手法ごとのステートメン sniffdet. conf のおもな内容は、プログラム全体に影響す は /etc/sniffdet. conf になります。 /etc/sniffdet. conf 、 RPM からインストールした場合に パス名は、ソースからコンパイルした場合には /usr/local います。 Sniffdet の設疋ファイルがインストールされる Sniffdet のインストールカ院了したら、設定をおこな UNIX MAGAZINE 2005.4 という書式で誌定します。 設定項目 = 設定値 ; です。各ステートメント内のオプションは、 表 1 ログの出力先の指定方法 値 FILE 出力先 ファイル ( デフォルト ) STDOUT 標集出力 STDERR 標準ェラー出力 SYSLOG syslog 出力 ( プライオリティは LOG_INFO) 表 2 アーカイプに含まれるプラグイン 値 null. so stdout. so 何も出力しない 診断結果を標集出力に出力 ( デフォルト ) xmloutput. xml 診断結果を XML 形式で出力 global ステートメント まず、 global ステートメントの設疋について説明します。 verbose オフ。ション デバッグ用に、プログラムの動作に関する詳細な出力を 表示したければ 1 、そうでない場合には 0 を指定します。 デフォルトの値は 0 です。 logtype オプション プログラムの動作に関するログの出力先を指定します。 設定できる値は表 1 のとおりです。 logtype = STDOUT ; logfilename オプション logtype オプションでファイルへの出力を選択した場合 の出力ファイル名を指定します。デフォルトのファイル名 は sniffdet. 10g です。 logfilename "sniffdet .10 plugin オプション 対象ホストの診断結果を出力するプラグインを指定す るオプションです。アーカイプに含まれているプラグイン は、表 2 のとおりです。 UID オプションと GID オプション Sniffdet を実行する際には、デバイスを開くために root 権限が必要です。しかし、プログラムの実行中ずっと root 権限を使い続けるのはセキュリティ上好ましくないため、 デバイスを開いたあとは一般ユーザーとしてプログラムを 実行するようになっています。 デフォルトの言定ファイルでは、 UID と GID の値カそ れぞれ 280 として指定されているので、これらの値を環境 53

6. UNIX MAGAZINE 2005年4月号

連載 / 旧 v6 の実装ー 0 図 2 直のネ用ヒ 1540 1541 1542 1543 1544 1545 1547 1548 1549 1550 1559 1558 1557 1556 1555 1554 1567 1566 1565 1564 1563 1562 (u—int16—t)arc4random() ; mbu—>mbu—seqno arc4random ( ) ; cookie bcopy(&cookie, &mbu—>mbu—mobile—cookie [ 0 ] ar c 4 て andom ( ) ; cookie bcopy(&cookie, &mbu—>mbu—mobile—cookie [ 4 ] return (mbu) ; mip6—bu—update—firewaIIstate (mbu) ; SC; mbu—>mbu_hif struct mip6— struct mip6—bu *mbu ; if (mip6—bu count = の { mbu—entry) ; LIST_INSERT_HEAD (bu_list , mbu , bu_list *bu_list; return ( 0 ) ; mip6—bu—count 十十 ; mip6—bu—starttimer ( ) ; mip6-bu 」 ist-insert() は、第 2 引数で指定した mip6- bu 構造体を、第 1 引数で指定したリストに挿入します。 mip6 ー bu 構造体のリストはホーム・ネットワーク (hif イ ンターフェイス構造体 ) ごとに保持されるため、第 1 引 数ではどのリストに挿入するかを指定しなければなりま せん。 mip6-bu-count は、現在移動ノードが保持してい る mip6-bu 構造体の数です。挿入された mip6-bu 構造 体が、移動ノードが保持する最初のエントリだった場合、 1 , 562 行目で mip6-bu 構造体のタイマー処理関数を開始 します。タイマー処理については彳あします。 1569 1570 1571 15 72 15 73 15 74 1575 1576 1577 1578 1579 1580 1581 1582 1583 1587 1588 1589 62 int mip6—bu—Iist—remove (mbu—list , mbu) return (E 工 NVAL) ; (mbu = NULL)) { if ( (mbu-list = = NULL) Ⅱ struct mip6—bu *mbu ; struct mip6—bu—1ist *mbu—list ; if (mip6—bu—count mip6—bu—count— FREE(mbu , M—TEMP) ; LIST_REMOVE(mbu , mbu_entry) ; mip6—bu—stoptimer() ; return 1590 UN 工 X MAGAZINE 2005 . 4 もう 1 つは、通信相手のアドレスと自分のホームアド HOME) フラグか第定されているエントリを検索します。 定されたホームアドレスをもち、かっホーム登録 ( IP6MU ー の mip6-bu 橢告体をたどりながら、第 2 引数 haddr で指 トリを検索します。 1 633 ~ 1 , 638 行目のループで、すべて ムアドレスを使ってホーム登録している対応付け更新エン 第 1 引数で指定したリストから、第 2 引数で指定したホー bu 」 ist-find-home-registration() です。この関数では、 1 つ目は、図 4 の 1 , 627 行目で定義されている mip6- では、 2 通りの方法で mip6-bu 構造体を検索できます。 るエントリを検索しなければなりません。 KAME の実装 対応付け更新の情報を取得する場合、リストから該当す 対応付け更新エントリの検索 ークに戻り、ホーム登録を解除する際に利用されます。 取り除きます。こちらは、移動ノードがホーム・ネットワ グカ駁疋されている ) に対応する mip6-bu 構造体のみを ていない通信相手 (MIP6-BU-STATEDISABLE フラ 使われている mip6-bu 構造体と、 MobiIe IPv6 に対応し ーム登録 (IP6MU-HOME フラグが設疋されている ) に 止する場合に利用されます。 a11 を偽にして呼び出すと、ホ 体をすべて取り除きます。これは、移動ノードの機能を停 して呼び出すと、リストにオ内されている mip6-bu 構造 構造体を同時に削除する関数です。第 2 引数の all を真に 図 3 の mip6-bu 」 ist-remove-all() は複数の mip6-bu た場合、タイマー処理関数を停止します。 構造体が、移動ノードが保持していた最後のエントリだっ す。 mip6-bu 」 ist-insert() とは逆に、削除した mip6-bu トから、第 2 引数で指定した mip6 ー b Ⅱ構造体を取り除きま mip6-bu 」 ist-remove() は、第 1 引数で指定されたリス

7. UNIX MAGAZINE 2005年4月号

・ %FIELD-ID-TO-NAME 連載 / Pe 日活用のヒント ・ @ASCII-FIELD 定義している。 フィールド ID とフォーム上のフィールド名との対応を 英数字が含まれていた場合、それらを半角 ASCII 文字 ィールド ID を列挙する。ただし、チェックの際に全角 ASCII 文字のみの入力を想定しているフィールドのフ ・@SINGLE-ADDR ASCII-FIELD にも列挙される。 こで挙げられたフィールド ID は、 @ を列挙する。 メールアドレスを記入するフィールドのフィールド ID ・@EMAIL-FIELD に変換する。 リスト 2 form ・ cgi されたフォームの表小がある。 form. cgi を、、 view-arch= これまで触れていなかった form. cgi の機能として、保存 form ・ cgi のがよいだろう。 もの ) を運用しているのであれば、それに問い合わせる よるディレクトリ・サービス ( オンライン名簿のような の肩効性を確認するのカましい。細織内で LDAP に 際に使うのであれば拡張し、より確実な方法でアドレス る正規表現とマッチするかどうかで判断しているが、実 は真を返し、そうでなけれは偽を返す。現在は単純に、あ 正当なメールアドレスかどうかを判断する。正当であれ ・ sub valid-email れないもののフィールド ID (name 属性 ) を列挙する。 ータやアーカイプしたフォームを表示する際には反映さ フォームのⅲ put タグのなかで、メール内の HTML デ ・ @EXCLUDED-IN-DISPLAY を列挙する。 スを 1 つしカ授け付けないフィールドのフィールド ID メールアドレスを記入するフィールドのなかで、アドレ ファイル名 " というパラメータを含む URL で呼び出すと、 指定したフォームが表示される。 保存されたフォームの表示は archive. cgi がおこなう のが自然と思うかもしれないが、そうすると form-tmpl. html を form. cgi と archive. cgi の両方か皷うことにな る。それより form-tmpl.html は form. cgi だけカ甘及い、 archive. cgi はアーカイプ内容のリスト表示に徹するのが プログラムの構造として好ましい。 archive. cgi さきほど述べたように、 archive. cgi はアーカイプ内容の リスト表示だけをおこなっている。これまでにも述べたよ うに、 emailform カイ乍成するアーカイプは月ごとにまとめ られており、パラメータなしで archive. cgi を呼び出した 場合は、現在の月のアーカイプを表示する。、、 arch = 2005 ー 02 " のようにパラメータで年と月を指定すると、その月のア ーカイプを表示する。 ☆ ( いまづ・ひでよモルガン・スタンレー証券 ) ある。 perl でどう書くべきかを考える一助になればさいわいで の具体例になっている。皆さんがこれらの技術を理解し、 MIME 形式のメールの送信など、 PerI が得意とする処理 データの生成、 HTML フォームの受付け / 保存 / 取出し、 際に使えるわけではないが、テンプレートによる HTML がかりをとりあげた。 emailform はそのままの状態で実 タの作成、データの保存方法、それ以外のコードを読む手 今回は、 emailform の解説の最終回として、メールデー 1 3 4 6 7 8 # ! /usr/bin/perl ー use strict ; # $ld: form. cgi,v 1.2 2005 / 02 / 09 21 : 16 : 33 himazu Exp $ # See . /LICENSE for terms of distribution . # (c) 2005 Morgan Stan1ey Dean Witter and Co . UNIX MAGAZINE 2005.4 103

8. UNIX MAGAZINE 2005年4月号

連載 / 旧 v6 の実装ー 0 図 3 mip6-bu-list-remove-all() 関数 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1619 1620 1621 1622 1623 1624 int mip6—bu—Iist—remove—a11 (mbu—list , a11 ) struct mip6—bu—Iist int a11 ; struct mip6—bu *mbu , int error = 0 ; *mbu_list ; *mbu_next ; = NULL ) { if (mbu—list return (EINVAL) ; for (mbu = LIST—FIRST(mbu_1ist) ; mbu ; mbu = mbu—next) { mbu—next = LIST—NEXT (mbu, mbu—entry) ; if ( ! a11 & & (mbu—>mbu—flags & IP6MU—HOME) (mbu—>mbu—state & MIP6—BU—STATE—DISABLE) continue ; er て 0 て = mip6—bu—Iist—remove(mbu—Iist , mbu) ; if (error) { continue ; return ( 0 ) ; = 0 ) 図 4 mip6-bu 」 ist-find-home-registration() による本鰊 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 struct mip6—bu * mip6—bu—Iist—find—home—registration (bu—list , haddr) struct mip6—bu—Iist *bu—list ; struct in6_addr *haddr ; struct mip6—bu *mbu ; for (mbu = LIST-FIRST(bu_1ist) ; mbu; mbu = LIST—NEXT (mbu , mbu-entry) ) { (mbu->mbu—flags & IP6MU—HOME) ! = 0 ) if (IN6—ARE_ADDR_EQUAL (&mbu—>mbu_haddr , haddr) & & return (mbu) ; bre ak ;. レスをもとに検索する方法で、 mip6-bu 」 ist-find-with- paddr() として実装されています。図 5 の 1 , 660 ~ 1 , 667 行目のループで、リストに保持されている mip6-bu 構造 体をたどりながら、相手のアドレス (mbu-paddr) と第 2 引数で指定された paddr を比較します。該当するエント リがみつかると、さらにホームアドレスを比較します。な お、 mip6-bu 」 ist-find-withpaddr() では、第 3 引数に指 定するホームアドレスは省略可能です。ホームアドレスが 省略された場合、最初にみつけたエントリを返します。ホ ームアドレスが指定されていれば、相手のアドレス、ホー UNIX MAGAZINE 2005.4 ムアドレスともに条件を満たす工ントリが返されます。 対応付け更新エントリのタイマー処理 対応付け更新の処理では、定期的なメッセージの週言対 応付け肩効時間の延長など ) や、メッセージカわれた場合 の再送などをおこなうタイマー処理関数が必要になります。 固定ノードやホーム・エージェントで管理される対応付け キャッシュでは、キャッシュ・エントリごとにタイマーを 管理していましたが、対応付け更新ではリスト全体で 1 つ のタイマーを共有します。 63

9. UNIX MAGAZINE 2005年4月号

文房具としての ているパッケージが pkgsrc 直下のディレクトリからのパ スで記されています。 これで、 1 番目のステップであるパッケージのリストが できあがりました。ご覧のようにとても簡単な形式で保存 されているので、自分で追加や削除などの変更を加えるの も容易です。 最新の pkgsrc ツリーとバージョンか異なるものを削除 これは簡単です。 pkg-chk に -r オプションを指定して 実行しましよう。実行している様子を図 9 に示します。 これで、旧いバージョンのパッケージカ哨リ除されます。 連載コ 1 。 # pkg-chk —as も pkg-chk で簡単にできます。 最後に、新しいパッケージをインストールします。これ 削除されたパッケージの新しいバージョンをインスト ー丿レ UNIX MAGAZINE 2005 . 4 る時間カ眼られている場合など、まとめてダウンロードす ダウンロードをおこないますが、ネットワークに接続でき ンを利用すると、ソースが必要になったまさにそのときに のソースをダウンロードします。 -a や -u などのオプショ と併用すれば、 pkgchk. conf に言当されているパッケージ 新しいソースコードをダウンロードします。 -c オプション 同時に指定すると、インストールされているパッケージの ダウンロードできます。このオプションと一 i オプションを ー f オプションを利用すると新しいパッケージのソースを ジとの比較をおこないます。 ンを利用すると、 pkgchk. conf に言占されているパッケー ッケージと最新のツリーとを比較しましたが、一 c オプショ -i オプションを指定すると、インストールされているパ す。おもなものを以下に紹介します。 pkg-chk には、ほかにもいろいろなオプションがありま その他のオプション ジから追加します。 を指定すると、 ( システム上にあれは ) バイナリ・パッケー ば、パッケージがすべて新しくなります。 -s ではなく -b するオプションです。このコマンドが ( 正常に ) 終了すれ パッケージをソースから新たにコンパイルするように指定 てシステム上にないアプリケーションを追加します。 -s は -a オプションを付けると、 pkgchk. conf に言されてい 『エンジニア必携スキルが身に付く 新辭志 oftware esugn B5 判・ 224 ページ 定価 ( 税込 ) 970 円 0 月号 ついに登場 ! SoIaris 10 第←フクトガイド 2 側 5 商用 UN Ⅸとして , 多くのユーザを獲得している So 「 is の最新版「 So 「 is 10 」が , 2005 年 1 月末 , ついにリリー スされました . 前バージョンから約 2 年 , 満を持しての登 場です . 今回のバージョンアップでは , Linux バイナリ互換の強 化やセキュア OS 「 Trusted So 「 is 」との融合など , 機能 面で大幅にプラッシュアップされています . 加えて , DTrace ( リアルタイムのトラブルシューティング機能 ) や ZFS ( ゼタバイトファイルシステム ) , 予測的自己修 復機能といった注目の新機能が追加実装されます . 本特集では , こうした So is 10 の魅力を余すことなく 徹底解剖 ! 既存の So is ユーザはもちろん , これから UN Ⅸに触れる方にもお勧めの特集です . 第 2 特集 プロードバンド ツーグ 睿个皿線化、画 ネットワークユーザ必見 ! ◎チャレンジ ! カプロポ開発 ~ 目指せぼ投資家② ◎ Arm a d Ⅲ 0-9 で 卓上ハードティスクプレーヤを作る③ 巻末 リファレンス A ache HTTP Server 2.0 ガイド ほか 好評発売中 ! ! 全国の書店 , または弊社ホームページで お買い求めください . http://www.gihyo•co•jp/ 血技術評諞社 141

10. UNIX MAGAZINE 2005年4月号

連載 / ロボットのある暮らし ン シ 謡イ モ こ三一 = 三一 9 図 図 ホーズ燃 ⅸ徒 d モーシ主擲静 ー再生時聞 [ E 防当加 WAVEiß加 し入豐当」上ど竺」 [ ED / 響 A 亶様 LEDNAVE ポーズ追加 ポーズ物入 1 、 m Ⅲ Mo れⅱを″ for SSR 丁 im を第れ [ ED -5 LED-Q WAVE たとえば、時間軸の 0 秒の位置に初期姿勢のポーズを を経て滑らかに動く。これを、、、モーションの再生 " または 置き、 5 秒の位置に違う姿勢のポーズデータを置く。する モーションの実彳于 " という。モーション・エデイタで [ モ と、 5 秒で初期姿勢から指定したポーズへと変化していく ーション再生 ] ボタンをクリックすると、 3D 画面上でロポ ( 図 7 ) 。これによって、 5 秒間のモーションカれるわけ ットカ働いてモーションか再生される。また、 [ モーション である。 実行 ] ボタンをクリックすると、実際にロポットがそのモ ポーズの登録は、ポーズファイル名と時間を指定してお ーションに沿った動きをする。 こなう ( 図 8 ) 。 -- - ー連の情報がどのように登録されているか よく、デモンストレーションなどでおこなわれるロボッ は、図 9 のタイミング画面で確認できる。 トのダンスやいろいろな動きは、このようなモーションの ロポットは、初期ポーズから次のポーズまで 5 秒かけて 実行というかたちでおこなわれている。 滑らかに動かなければならない ( 4 秒間初期ポーズで止ま モーション・エデイタでは、モーションの途中の各ポー っていて、最後の 1 秒で次のポーズになるわけではない ) 。 ズを個別のポーズデータ・ファイル (). pos ファイル ) に この 5 秒間の動きは、ロポット側の制御プログラムによっ 保存しておき、さらに一連のポーズの時間軸情報とその他 て滑らかに制御されるので ( 正確には、個々のサーポがこ の情報を格納したモーションデータ・ファイル (). mtn フ の機能をもっている ) 、ユーザーやモーション・エデイタ側 ァイル ) を使ってロポットのモーションの作成と再生をお で補間処理をおこなう必要はない。 こなう ( 図 10 ) 。 ただし、 2 つのポーズを指定したとき、最初のポーズか LED とオーディオ ら次のポーズへの動作は単純に補間されるだけである。つ モーション・エデイタでは、ロポットの動きだけでなく、 まり、各関節についていえば、ある角度から次の角度へ指 頭部の LED の点やオーディオ出力も定義できる。 定された時間で回転することになる。移動の途中で速度を 変えたり、あるいは途中なんらかのポーズをさせたい場合 左右の目の部分には 3 色の LED カ咐いていて、これら は、中間のポーズを配置しなければならない。 が個々に点灯するようになっている。これも時間軸に沿っ このようにして、キーとなるポーズとその時間情報をい た指定が叮能なので、ロポットの動きに合わせて目の色や くつか与えていけば、ロポットは指定された一連のポーズ 明るさを変えることができる。 117 UN 工 X MAGAZINE 2005.4