文房具としての 連載、こ 06 ssh check : wscons check: makedev check : postfix check: obsolete check: sendmail check : postinstall checks passed: postinstall - etc—release defaults mtree gid uid period ic rc ssh wscons makedev postfix obsolete sendmail postinstall checks failed: * * * A11 done また、 etcupdate の最後で実行されるコマンドは以下の $ /etc/postinstall list のアイテムが表示されます。 なお、以下のコマンドを実行すると、チェック / 修正対象 これを実行すればアップデートは終了です。 があり、それを修正するためのオプションとなっています。 ます。上記の例はチェック / 修正対象のなかで X11 に変更 イル群の場所を表し、 fix は修正をおこなうことを意味し - d は現在のシステムの場所を、一 s は新しく作られたファ /etc/postinstall —s /usr/src —d / fix X11 To fix, run: postinstall checks failed: X11 rc ssh wscons makedev postfix obsolete sendmail etc—release defaults mtree gid uid periodic - postinstall checks passed: postinstall - を実行するように促されます。 んが、パスしなかった場合、たとえは次のようにコマンド がチェックにパスしたので、何も実行する必要がありませ 今回は上記のようにすべてのアイテム ( チェック対象 ) # reboot しい環境で起動しなおしましよう。 これでシステム全体のアップデートが終了しました。新 $ /etc/postinstall —s /usr/src/etc check ものです。 UNIX MAGAZ 工 NE 2004.9 早く触れることができます。その一方で、ソースコードが は日々新しい機能が追加されており、それらの機能にいち のコードから環境を構築しました。最新のソースコードに こまでの作業で、最新のソースコードを取り寄せ、そ がりました。 正常に起動したでしようか。これで新しい環境ができあ 、、枯れて " いないので、そもそもコンパイルがとおらなかっ たり、コンパイルできても正しく動かないことも当然あり えます。 current を利用する際には、このことを念頭にお いて生活していただければと思います。 システムの設定 ( 2 ) さて、前回に引き続き、今回もシステムの設疋をしてい きましよう。 IP アドレスを自動的に取得する 一昔前は、電車のなかでノート PC を開いていると、そ こかしこから、、こいつ何しとるんや ? " という好奇心に満ち た視線が飛んできたものです。しかし最近では、ビジネス ユーザーを中心としてノート PC を持ち歩く人も珍しくな くなり、電車やカフェのオープンテラスで PC を開いて仕 事をしていても、さほど目立たなくなりました。 前回、ネットワーク (IPv4) の設疋について説明しまし たが、 IP アドレスやゲートウェイなどは静的に設定してい ました。デスクトップ PC のようにつねに同じネットワー クに接続する引機であれば、これでも十分だと思います。 しかし、ノート PC を持ち歩き、出先でネットワークに接 続するような場合、固定の IP アドレスやゲートウェイを 設定するだけでは対応できません。このような場合、必要 な情報をネットワークから自動的に取得して設定すること ができます 3 。 IPv4 の場合 IPv4 では、 DHCP (Dynamic Host Configuration protocol) という仕組みを利用して、さまざまな情報を取 得できます 4 。 DHCP では、 IP アドレスやゲートウェイ、 DNS サーバーなど、ネットワークに接続するために必要不 可欠な情報に加え、アプリケーションなどで利用すること を想定した情報も定義されています。そのような情報の一 例を表 7 に示します ( ただし、クライアント側でうまく利 用できていないものが多いようです ) 。 141 4 RFC2131 (http://www.ietf.org/rfc/rfc2131.txt) るように静的に言することはほとんどありません。 (Router Advertisement) カ陏効になっている場合が大半で、杢す ます。 IPv6 であれば、通常のユーザーカ坏リ用するネットワークでは、 RA 3 IPv4 の場合、ネットワーク理者が DHCP の言をしている必要があり IP アドレスを静的に設定する方法としては、次の 2 つ
ではないでしようか。このような場合も、最終的に 1 つの メモの集合として統合され、これらすべてのマシンから参 照可能になるのか理想的でしよう。 日付・時刻付きメモ ChangeLog のようなテキストファイル形式は、なんと いっても手軽で便利です。この点は残し、いろいろな環境 でメモをとりやすくするため、 ・日付と時刻を記録したテキストファイルでメモを作成 し、あとで時刻川頁にソートして Wiki データに変換して という方法を考えて実践しています。たとえば、マシン f 。。 を使っている場合は、 foo:/home/masui/Memo. f00 と いうファイルに以下のような形式でメモを書きます。 2004 / 7 / 10 19 : 00 : 27 マシン f00 に書いたメモ。 一方、別の場所にある bar というマシンに向かっている ときは、 bar:/home/masui/Memo. bar というファイル に以下のようにメモを書きます。 2004 / 7 / 10 19 : 25 : 51 続けてマシン bar にメモを書く。 2004 / 7 / 10 19 : 23 : 11 今度はマシン bar にメモを書く。 新しいメモほどファイルの先頭にくるようにしています が、時刻カ症しく言当されているかぎり、順番は任意です。 このように独立にメモを書いたあとで、これらのファイ ルを Web サーバーに送り、 20040710190027. txt 20040710192311 . txt 20040710192551. txt のように別々のテキストファイルを生成します。さらに これらをまとめて Wiki ページに変換すれば、異なる環境 で作成したメモを 1 つのメモページとして生成できるとい うわけです。それぞれのメモには日付と時刻を示すファイ ル名カ咐いているため、異なる場所で別々に生成された場 合も、あとで簡単に 1 つにまとめることができます。メモ ファイル名はマシンごとに異なっているので、マシン間で ファイルをコピーしても誤って上書きするようなことはあ りません。 ■ ■ ■ UNIX MAGAZINE 2004.9 インターフェイスの街角 (interactive) (defun insert—time ( ) 図 2 日付と時刻を挿入するプログラム 175 今度はマシン bar にメモを書く。 2004 / 7 / 15 19 : 23 : 11 続けてマシン bar にメモを書く。 2004 / 7 / 15 19 : 25 : 51 2004 / 7 / 15 19 : 33 : 28 れ、 2 行目からメモカ書ける状態になります。 x m" と入力すると Memo. bar に新しいエントリが追加さ さきほどのた態から、マシン bar 上の Emacs で、、 Ctrl- を表示するようにしています。 旧いメモについては日付と時刻、そして本文の 1 行目だけ Lisp プログラムでは、アウトライン・モードを利用して、 してメモの編集を開始することができます。この Emacs によって ~ / emo. bar のような名前のファイルを呼び出 さらに、図 3 のプログラムを使えば、、℃ trl-x m " の入力 とで役立つ場合があります ) 。 や文書の作成中にタイムスタンプを書き込んでおくと、あ ソル位置に現在の日付と時刻が挿入されます ( プログラム の設疋では、 Emacs 上で、℃ trl-x t" を入力すると、カー スタンプ ) を簡単に入力できるようにします。デフォルト まず、図 2 のようなプログラムで、日付と時刻 ( タイム するツールを Emacs 上で作成することにしました。 Emacs を利用しているので、前述のようなメモ書きを麪爰 私は、 UNIX でも Windows でも Windows CE でも Emacs でメモを書く 簡単なフログラムの例 上では同様に扱うことができます。 うにしておけば、メモをとった場所にかかわらす、サーバー ンドメール・システムを利用して同じデータを生成するよ 携帯電話でメモを書いた場合も、 3 月号で紹介したコマ ' insert—time) (global—set—key "\C-xt" (nth 1 tim) (nth 0 tim) ) ) (nth 3 tim) (nth 2 tim) (nth 5 tim) (nth 4 tim) (insert (format "%4d/%d/%d % 02d : % 02d : % 02d " (let ( (tim (decode—time (current—time) ) ) )
連載 /UNIX Communication Notes NAS 195 図 2 サーバーのバックエンドを集約して畠胙用を管理する クライアント 使用するデータファイルとデータベースについては、バッ 図 3 anycast によるクライアントからのアクセスの分散 クエンドにそれぞれのサーバーを用意して一元的に処理す serverl server2 ( 192.218.1.1 ) ( 192.218.1.1 ) る構成をとる。最近のサーバー構築では、図 2 に示したよ 囿 囿 うな構成がよくとられる。この例では、データファイルに ついては NAS (Network Attached Storage) サーバー を利用し、さらにデータベース・サーバーを用意する構造 になっている。 もちろん、これらのバックエンド・サーバーを単一故障 点にしない工夫も必要である。 NAS の場合は、ディスクは RAID 構成にして耐故障性を高め、さらに SAN (Storage Area Network) の機能を用いて複数の NAS サーバーに それぞれ単一のディスクを接続する。この構成では複数の NAS サーバーを用意することになるが、ディスクそのもの は単体として利用するため整合性が保てる。 したり、地震や火災などでシステムそのものカ皸壊されて データベースの場合には、複数のデータベース・サーバー しまったり、あるいは、サーバー設置場所のネットワーク接 を用意し、それらの状態を相互に同期しておく。そして、ど 続のトラブルにより、サーバー自体は稼動していてもサー れか 1 台のサーバーに障害が発生した場合には、そのサー ビスカ醍供できない状況に陥ることもある。 バーを切り離して復旧をおこなう。この処理はソフトウェ 地理的に 1 カ所に置かれたサーバーのリスクをどう捉 アでも実現できるし、最近はこのような機能をもつ負荷分 えるかは、提供するサービスの内容に応じて大きく変わる。 散装置もある。とくに、データベース・システムを対象と 社会的に重要なサービスであったり、あるいは大規模な組 した負荷分散装置を導入すれば、より効果的な構成が実現 織での業務に利用されている基幹システムなどでは、この できる。 種のリスクを念頭においたシステム言妬 t カ材く可欠であろう。 具体的には、地理的分散をいかに実現するかである。 それでも不安は残る 士里的分散に向けて だが、バックアップ・システムさえ用意すれば、サービ スの提供を停止せすにすむ保証があるかというと、そうい 地理的に分散したかたちでサービスを構築する場合に うわけでもない。複数のサーバーでクラスタ構成を組んで は、その方針をどの構成要素に適用するかを検討しなけれ も、通常は地理的に 1 カ所に置かれているため、これカ噺 ばならない。とくに重要なのは、 たなリスクになる。たとえば、電源事故でサーバーが停 IE eserverl カゞ ′ダウンした場合 42 UNIX MAGAZINE 2004.9
0 図 1 ChangeLog ファイル列 2000 ー 12 ー 09 Satoru Takabayashi く satoru@namazu. org> * src/mksary. c (parse—options) : New option: 2000 ー 12 ー 08 Satoru Takabayashi く satoru@namazu. org> * src/Makefi1e . am (sary-SOURCES) : Simp1ified. —index, ー 1 . テキストファイルをメモに利用する方法を提唱しました。 ChangeLog というのは、もともとはプログラムの開発履 歴を記録するためのテキスト形式で、図 1 のように日付 と変更項目を一定の書式で箇条書きにして並べたものです。 この例ではソースコードの修正履歴カ第杢されていますが、 プログラム開発とは直接関係のない日記やメモも同じ形式 で言杢しておけば、 ChangeLog ファイルやテキストファ イルを扱うためのさまざまなツールカ駛えてメモ管理にも 役立っというわけです。 メモ管理に ChangeLog を使うというアイデアは富士通 の山下達雄氏が考えたものだそうで、現在は多くの人がこ の方式を利用しているようです。山下氏は、 ChangeLog メモを Web ページに変換する「 Chalow 」というツー ル 2 を公開しています。山下氏は、 web 上で Blog に似 た日記ページを公開していますが、これらのページ 3 はす べて ChaIow により生成されたものです。 ChaIow では、 ChangeLog 形式で書いた日記情報を blog ふうのページ として公開できるようになっており、トラックバックやコ メント機能も用意されています。変換されたページを見る と、 ChangeLog ファイルをもとに生成されたとは思えま せん ( tDiary4 のスタイルファイルカ俐用できます ) 。 IT コンサルタントの橋本丿く也氏は、 PC 上でのメモ管理 の要件について以下のように述べています 5 いつも使っているテキストエデイタでなくてはイヤ。 ・メモを作成し終えるまでの総ステッフ。数が少なく、動作 カい。 ・ファイル名を考えたり、題名を付けるといった心理的ハ ードルが低く、面倒に感じない。 ・メモか嘴里せず、再利用力溶易かつ効率的にできる。 2 http://nais.toryto/tools/chalow/ 3 http://nais.to/&yto/clog/ 4 http://www.tdiary・ org/ 5 http://www.ringolab.com/n0te/daiya/archives/001889. html 174 これらの点を満たすシステムを模索した結果、橋本氏も 最近になって ChangeLog/Chalow を導入し、かなり満 足が得られているということでした。 ChangeLog 方式の問点 ChangeLog 方式はこのように多くの人たちに愛用され ていることもあり、私もしばらくこの方法を試していたの ですが、残念ながら私にはうまく使いこなせませんでした。 たしかに、 ChangeLog 方式はメモ情報が一本イヒでき、シ ンプルだという点でたいへん有用です。しかし、複数の計 算機を使い分ける場合や、 PDA や携帯電話との連携を考 えると、どうも最善の方法ではないように思えます。 つねに決まった 1 台の計算機を利用しているのならば よいのですが、状況に応じて複数の計算機を使い分ける場 合には、 ChangeLog ファイルの同期をとる必要がありま す。メモを書いたらかならず CVS などで同期をおこな うようにすればよいのですが、これは忘れることもありま すし、ネットワーク環境がない場所ではどうにもなりませ ん。私自身も、同期に失敗して ChangeLog ファイルを 消してしまったことがあります。また、メモを携帯電話や PDA で読み書きするには、 ChangeLog をなんらかの形 式に変換する必要もあります。こんなわけで、あらゆるメ モを ChangeLog に一本化することは、私には容易ではあ りませんでした。 いろいろな竟でメモをとった場合も、同期などの工夫 をせす、最終的にうまく一本化できる方法があれば、その ほうがよさそうです。メモをとる場面を考えてみると、 オフィスのマシン ・外出中に拷電話 ・電車のなかでノート PC ・会議中に PDA といったように、場所も違えばマシンも違うことが多いの UN 工 X MAGAZ 工 NE 2004.9
NetBSD-current の インストール ( アップデート編 ) 森島直人 宮地利幸 UNIX 文房具としての UNIX MAGAZ 工 NE 2004.9 は、メジャーリリース後にセキュリティ関係など重大な のようなパッチリリースがあります。パッチリリース いるはすです。 1.6 のようなメジャーリリースと、 1.6.1 認がおこなわれており、信頼性カ皜いものに仕上がって FormaI ReIease : 公式のリリースです。十分な動作確 で表され、以降は 2 文字目カ随められていきます。 進められます。 Z まで到達すると ZA のように 2 文字 ネルとユーザーランドの API か変更されたときに 1 つ たとえば 2. OG のようになります。この英文字は、カー current のバージョン名は数字の後ろに英文字が続き、 うまくコンパイルできないタイミングも当然あります。 チームが日々改変を加えているコードです。そのため、 NetBSD-current : NetBSD 開発の最前線で、開発 の 3 種類の形態で提供されています。 その前にちょっと確認しておきます。 NetBSD は以下 デート作業を始めましよう。 さっそく 1.6.2-RELEASE から current へのアップ ソースファイルの取得 として使えるツール群を紹介していきます。 導入についての話題は終了し、次回からは実際に、、文房具 " 今回で私たちの生活環境でもある NetBSD-current の で進めていきます。どうそ最後までお付き合いください。 築、 pkgsrc を利用したアプリケーションの導入という順番 築、ユーザーランドの構築、 X ウインドウ・システムの構 具体的には、最新のソースコードの取得、カーネルの構 設疋と、アプリケーションの導入について説明します。 トし、生活環境として使えるようにするためのさまざまな 1.6.2-RELEASE から NetBSD-current ヘアップデー 基本的な設定についてお話ししました。今回は、 NetBSD 前回は、 NetBSD 1.6.2-RELEASE のインストールと 連載 06 に保存されます。コマンド・プロンプトに戻ってきたらお バグが発見された場合、 NetBSD-reIease (stable) プ ランチに修正が加えられ、リリースされるものです。 のとき、バージョン番引こ 3 桁目の数字が追加されます。 NetBSD-release (stable) : 最新の Formal Release に current のバグ修正が反映されたものです。こちらは バージョン番号は変更されません。 前回、 stable への更新方法も紹介すると書きましたが、 基本的にはソースコードを取得する際におこなう処理がす こし異なるだけで、あとはほとんと変わらないと思います。 それでは、最新のソースを取り寄せましよう。取得した ファイルは /usr/src に保存することにします。ここでは CVS および FTP を利用したソースの取得方法を紹介し ます。 CVS を利用する CVS を利用してソースを取得するには、図 1 のコマンド を入力します。 CVS を利用するとカレント・ディレクトリ にソースが置かれるので、ソースを置きたい場所に移動し てからコマンドを実行してください ( 図では /usr に cd し ています ) 。 checkout でソースを取得する前に login が必 要です。このときパスワードを訊かれるので、、、 anoncvs と入力してください。 前述のとおり、 current と 2. O-stable でアップデート 作業に大きな違いはないと思いますが、 こでは current を豺是に作業を進めることにします。 これで、 /usr/src にソースを取り寄せることができま す。 pserver を利用している場合は、とくに logout する 必要はありません。 図 2 が cvs checkout の実行画面です。たくさんのファ # cvs update —dP # cd /usr/src い場合は、 しまいです。 イル名カ哂面を流れていき、 一度 checkout したあと、最新のバージョンを取得した これらのファイルがローカル 135 out した場合も同様です。 ます。これは、 current と 2.0 プランチのどちらを check- とすれば、修正されたファイルだけを更新することができ
特集プログラミンクの次の一歩 といった、プログラミングの初こ、者から一歩抜け出して、次 図 1 SoIaris のアドレス (32bit) のステップに進みたい人を想定しています。 4G B OXFFFFFFFF 今回は、例としておもに OS は Solaris を、プログラミ ング言語としては C 言語を使って説明します。ただし、お およその概念はほかの OS や言語の場合にも共通するとこ ろがあるはずです。 アドレス空間 メモリ管理の具体的な話に入る前に、、、 UNIX のアプリ ケーション " がどのような環境で動いているかをみておき ましよう。 言でいってしまえば、 イ磨誤メモリとは、 実際の物理メモリ空間以上のイ反想アドレス空間を作りだ 複数のイ反想アドレス空間を作りだす 技術といえるでしよう。 アプリケーション・プログラムを書いているときに、物 は、各プロセスごとにこの 4GB の仮想アドレス空間カ吏 理メモリと仮想メモリがどのように関連づけられているか えます。とはいっても、この 4GB の空間を自由気ままに を気にすることはあまりないと思います。この種の技術の 利用できるわけではなく、プログラムの部分ごとに割り当 細については、書籍や Web サイトで解説されているの てられる場所が決まっています。どのように割り当てられ で、卿未のある人はそちらを参照してください。 こでは、 るのかは OS によって若干異なりますが、こでは Solaris アプリケーション ( プログラム ) を書く立場から仮想メモ の場合を例に説明します。 リを眺めてみましよう。 Solaris のアドレス空間は、図 1 のようになっています。 この場合に重要なのは、アプリケーションカ働いている まずは、この図の未からみていきましよう。 アドレス空間についての知識でしよう。もちろん、プログ ラミングを勉強し始めたばかりのころは言語そのものを学 私たちがプログラムを書くときは、通常は C や Java ぶので手一杯だと思います。しかし、その次の段階として、 などのいわゆる高級言語と呼ばれる言語を使います。そし 自分の作成したプログラムがどのような環境で動いている て、これをコンパイル、リンクすることによって、、実行形 かを理解することはたいへん重要です。なによりも、この 式 " という実行可能なファイルに変換します。この実行形 ようなことを理解しているのといないのとでは、プログラ 式ファイルのフォーマットも OS によっていくつか種類が ありますが 2 、大雑把にいってしまうと、プログラムの、、テ ムの言気 t やデバッグ作業の効率が大きく違ってきます。 キスト領域 " と、、データ領域 " カ陬められています。 UNIX のアドレス空間 プログラムのテキスト領域 ( テキスト・セグメント ) と 仮想メモリ技術のおかげで、私たちが書くアプリケー はプログラム本体のことで、たとえばプログラムのなかで ション・プログラムは 4GB (0—OxFFFFFFFF=232) printf 関数を呼び出していれば、この printf 関数への呼 の広さのアドレス空間 1 を使うことができます。 UNIX で 2 以前は a. out 廾なにとよれるものが主流でしたが、丘は ELF 丿方にのほ うが多くなってきました。これらがどのようなフォーマットなのか興床があ 1 "4GB の広さのアドレス空間 " というのは、 32bit のコンピュータの場合 で。 64bit コンピュータでは、 264 ぶんのアドレス空間があります。 る方は、 man a. out または man elf などとしてみてください。 スタック 共有ライブラリ ( テータ ) 共有ライブラリ ( テキスト ) 共有ライブラリ ( テータ ) 共有ライブラリ ( テキスト ) ヒープ テータセグメント テキスト・セグメント す 1 三ロ 25 UNIX MAGAZINE 2004.9
ed によるバッチー 今回は、 Movable Type の *. cgi ファイルの修正に ed を 使いました。 ed はラインエデイタですが、ラインエデイタなんて いまどき使わないと考える人も多いと思います。しかし、既存の ファイルに対して機械的に修正を加えるときなどは、図 28 のよ うにかなり強力です。今回の作業は、 13 個ある *. cgi から 1 つ (mt-db-pass. cgi) を除き、 : 頁行の Perl のパスを変更すると 図 28 Movable Type の展開 ( 下線部が入力 ) 1 引 /usr/bin/perl l/usr/local/bin/perll cat > /tmp/perl . patch inflating: Iib/MT/118N. pm $ unzip &/118N. zip cd MT—3.0D—fu11—1ib-ja—b3 $ unzip -/MT-3.0D-fu11-1ib—ja—b3. ZIP cd /tmp/compile > ed ${cgi} く /tmp/perl ・ patch $ fo て cgi in ( ls * . cgi ( ; do AD ( Ctrl 十 D で終了 ) 742 > done 9 : Defau1tLanguage ja ( デフォルトでこうなっている ) 図 29 mt. cfg の最 ( 邸艮おこなうべき言下線部のように編集 ) いうものです。そのような作業も、正規表現による置換の指定で 簡単にできるのです。 ed を対話的に使う場面はたしかにほとんどありませんし、・麦 もそうあるとは思えませんが、このように何かを一括して処理する 場合には強力なツールだと思います。、 man ed" とすれば使える 編集コマンドの角が見られます。参考にしてください。 言 748 8287 8293 777 783 18 744 750 ( 上記の数字は滝 3 の場合。正式版と同じとはかぎらない ) ( csh / tcsh の場合は f 。 r の部分を以下のようにする ) % foreach cgi ('ls * . cgi') foreach> ed ${cgi} く /tmp/perl. patch foreach> end 18 : CGIPath http://localhost/mt/ ( mt にアクセスする URL を書く ) ObjectDriver DBI : :postgres Database barmt DBUser bar DBHost localhost などを使って展開します ( 図 28 ) 。 にのまま追記する ) ( データベース名を指定する ) ( ューザー名を指定する ) ( localhost でよければこのままでよい ) 展開したら、 mt. cfg という定義ファイルに修正を加えま す。最低限おこなうべき設定を図 29 に示します。設定が 完了したら、適当なインストールバスに移動します。 $ cd /tmp/compi1e/MT—3.0D—fu11¯1ib-ja—b3 $ mkdir /usr/local/apache/mt $ mv * /usr/local/apache/mt こでは、 /usr/local/apache/mt を使用することにし ます (http://localhost/mt/mt.cgi でアクセスできるよ うにします ) 。また、データベースにアクセスするユーザー は bar 、データベースの名前は barmt だと仮定します。名 前はなんでもかまいませんが、それを mt. cfg に記述して ください。データベースは図 30 のように作成します。 mt. cfg には Movable Type の設定力第生されているた UNIX MAGAZINE 2004.9 め、外部から参照されるとシステムの構成が漏れ、思わぬセ キュリティ・ホールになる可能性があります。そこで、外部 から取得されないように、図 31 のような内容の . htaccess を作成します。こうしておけば、 mt. cfg にアクセスしても 拒否されるようになります。ほかにも取得されるべきでは ないファイルがあれば追記しておきましよう。 usr/local/apache/mt が http://localhost/mt/に マッピングされるように、 httpd.conf に図 32 のように設 定を追加します。 httpd.conf を修正したら、 httpd に設疋を再読込みさ せます。コマンドラインから、 $ /usr/local/apache/bin/apachectl reload とします。 169
リスト 5 sampIe5. c #include く stdio . h> int sub ( ) return 1 ; int main(void) int Ⅱ ; while ( ( Ⅱ = getchar()) ! = EOF) printf ("sub address : Ox%08x\n" printf ("main address : Ox%08x\nt' main) ; sub) ; プログラムのデータのうち、グローバル変数の gl と g2 はどちらもアドレスが 0X00020aa8 、 0X00020ae0 とな っていて、データ領域に確保されていることが分かります。 malloc で確保した領域は、データ領域に続いて割り当てら れています。そして、自動変数 n はスタック領域に、スタ ティック変数 sl はやはりデータ領域に割り当てられてい ます。 リスト 5 の sampIe5. c を使って、テキスト領域が割り 当てられている場所を確認してみましよう。このプログラ ムで定義している関数 sub や、もちろん main 関数もテキ スト部分に割り当てられます ( 図 11 もご覧ください ) 。 % . /samp1e5 main address : sub address : 0X00010618 0X00010600 プログラムを作成するとき メモリ管理の問題は、プログラムを作成する前に考える べきです。さもないと、あとでデノヾッグするときにかなり 苦労します。たとえば、 OS のコマンドだけでメモリリー クを確実に調べることはまずできません。メモリリークの 可能性もある、という見当をつけるのカ一杯です。 メモリの状態やメモリリークを調べるツールを使って も、簡単には分からないメモリ関係のバグはあります。 のような問題は、プログラムの作成前にある程度考えてお くかどうかで、デバッグの難易度がかなり違ってきます。 また、 malloc 関数などの性質を知っていると、一見した 34 ところではわけの分からないバグが避けられることもあり ます。メモリ管理には、、効率 " という問題もあります。大 きなプログラムを作成する場合、メモリが必要になったと きに malloc で単純に割り当てているだけでは、実行速度 が遅くなったり、必要以上のメモリを使ってしまうことも あります。 こで、プログラムを作成する際の注意点をいくっか挙 げておきましよう。ますは、基本的なメモリ割当て関数の 性質について考えてみます。 メモリの再利用 さきほど、 ps コマンドのところでも書きましたが、 mal- loc で割り当てたメモリを free で、、解放 " すると、その領 域は再利用のためにとっておかれます。ただし、その次に メモリ割当てが要求されたときには、かならずしもこの再 利用のための領域が使われるとはかぎりません。割当てを 求められたサイズが、再利用のためのサイズより大きかっ た場合は、もちろん新しい領域カ保されます。 しかし、メモリの割当てには、これ以外にメモリの、、ア ラインメント (alignment)" という問題があります。メモ リはどのアドレスから割り当ててもよいわけではなく、あ る境界から割り当てなければならないので、再利用のため の領域に必要とする容量があっても、そこからでは割り当 てられないことがあります。また、メモリの割当てのアル ゴリズム 4 においては、高速性とメモリの効率的な割当て は、たいていの場合両立しない性質をもっています。つま り、速く処理しようとするとメモリの無駄な部分カ寸曽え、メ モリを効率よく割り当てようとすると速度カ牲になるの です。 このような事清から、メモリの割当てと解放を繰り返し ていると、結果としてメモリを過大に割り当ててしまう場 合があります。たとえば、プログラムの最初から最後まで の合計で IMB のメモリを割り当て、さらに IMB のメモ リを free で、、解放 " していても、全体では IMB 以上のメ モリが割り当てられることがあります。このようなプログ ラムを実行していくと、再利用されないメモリ領域ができ てしまいます。一般に、このような現象を、、メモリの細分 4 メモリ割当てのアルゴリズムについては、下記の Web サイトなどか参考に なるかもしれません。 http://www.memorymanagernent.org/articles/ UNIX MAGAZINE 2004.9
連載 / ネットワークとセキュリティ 図 1 iptables の言綻例 # /sbin/iptables —A OUTPUT -p tcp # /sbin/iptables —A OUTPUT —p tcp # /sbin/iptables —A OUTPUT —p tcp ネットワーク上で未使用の IP アドレスを dumnet 用に 割り当てる 運よく囀吏用の IP アドレスがある場合に、それを dum- net 専用として割り当てます。この方法は、すべてのポート —tcp-flags RST RST -s 192.168.12.34 ¯j DROP —sport 80 -s 192 . 168 . 12 . 34 -j ACCEPT —sport 22 -s 192 . 168 . 12 . 34 -j ACCEPT 宛のバケットの内容を入手でき、通常発生するトラフィッ クの景彡響を受けないため、本格的に運用するのであれば、 ちらがお勧めです。 dumnet がバケットを収集する場合には、 dumnet に割 り当てた IP アドレス宛のトラフィックがホストまで到達 する必要があります。そのため、 dumnet を運用するネッ トワーク上のルータで、スタティックな ARP 工ントリを 追加する必要があります。 こでは、 dumnet に割り当てる IP アドレスが 192. 168.12.34 、 dumnet を動かすホストの NIC の MAC ア ドレスが 00 ー 00 ー 01 ー 29 ー be ー ef だと仮定して、ルータ上での ARP 工ントリの設定方法を説明します。 Cisco IOS の搭載されたルータやレイヤ 3 スイッチを 利用している場合には、次のコマンドを入力します ( 誌面 # arp —s 192.168.12.34 00 : 00 : 01 : 29 : be : ef のコマンドを入力します。 *BSD や Linux をルータとして使っているのなら、次 0000.0129. beef arpa router(config)# arp 192 . 168.12.34 - router# configure terminal の都合上、で折り返しています。以下同様 ) 。 56 http://www.insecure.org/sploits/arp ・ games. html 3 ARP and ICMP redirection games 必要です。 arp poisoning を使うのは、その他の手段カ駛 るトリッキーな手法なので、利用する際には十分な注意が poisoning は Man ⅲ the Middle 攻撃の一種ともいえ ス宛のトラフィックを誘導することができます。なお、 arp ⅲ g3 をおこなうことで、 dumnet に割り当てた IP アドレ る arpredir コマンドを使い、ルータに対して arp poison- す。そのような場合には、 dumnet のパッケージに含まれ タティックな ARP 工ントリか轂定できないことがありま 一部のプロードバンド・ルータなどでは、どうしてもス えない場合に限定すべきです。 既存のホストの dumnet を動かす すでに動いているホスト上の、サービスを提供していな いポートで dumnet を動作させる方法です。この方法は dumnet 専用の IP アドレスカ坏要で、すでにサービスを 動かしているホスト上で空いているポートに対するアクセ スを確認したい場合に便利です。 この方法を利用するときは、以下の 2 点に注意する必要 があります。 ・ dumnet が OS の TCP/IP スタックに代わって ACK フラグの付いた TCP バケットを返さないように設定す る dumnet には -N という引数があり、 TCP 接続をエミ ュレートしないポート番号を指定できます。また、 -I 引 数を用いて ICMP ECHO Request に dumnet 自体 カ答しないように設定します。たとえば、 SSH (TCP 22 番ポート ) と HTTP (TCP 80 番ポート ) カ働いて いるホスト上で dumnet を稼動させる場合は、次のよ うにコマンドライン引数を設定します。 # dumnet -N 22 , 80 ーエその他の引数 ・閉じられたポートへのアクセスを受けたとき、 OS の TCP/IP スタックが RST フラグの付いた TCP パ ケットを送信しないように設疋する 通常、サービスを提供していないポートに対してアクセ スがあった場合、 OS の TCP/IP スタックが RST フ ラグ付きの TCP 応答を返します。しかし、 RST が返 されると TCP セッションが切断されてしまう可能性が あります。サービスを提供していないポートが開かれて いるかのようにみせかけるには、そのポートに SYN パ ケットが送られてきても、 RST を返さないようにする 必要があります。 図 1 に、 Linux 上で動くバケットフィルタ iptables の 設定例を示します。このホストの IP アドレスは 192.168. 12.34 で、さきほどの例と同様に SSH と HTTP のトラ フィックは通常どおり扱い、その他のポート宛のトラフィ UNIX MAGAZINE 2004.9
連載 /Red Hat Linux のツールたち 図 10 ブートローダの言 図 9 HDD のパーティション言又正 ディスクの設定 F に do は Co をどこにインス トールしたいか選択して下さ システムのノ、一ティション設定 の方法がわからない場合、スは↓ - 手動バーティション設定ツール は、製品マニュアルを参照して 下さい . 自動パーティション設定を利用 している場合は、現在のバー ティション設定を受け入れる ( 次をクリック ) か、手勧バー ティション設定ツールで設定 を儚正します - システムを手動でバーティショ ン設定している場合は現在の ハードディスクとそのバーティ ションが下に表示されていま す - / 、一ティションツールを 使って、システムに . パーティ ションを加、を集、則碎しま ロ D デバイス / し VM ポリュームグループメンバーを非表示にする ( ) ヘルプをす ( 印リリースノート ( まる ( 日 ) 修正できるので、今回は、、自動設定 " を選んでみました。 自動設定の結果は図 9 のようになり、 /boot 、ルート ( / ) 、スワップ (swap) の 3 つのパーティションで構成さ ネットワークの設定 システム上にあるネットワーク れています。私は、スワップ領第丿、外は 1 つのパーティ デバイスはどれでも自動田にイ ンストールプログラムによっ て検出され、ネットワークデバ ション ( ルート・パーティション ) のみで構成するのが好 イス一覧に表示されます . ネットワークデバイスを設定す るには、ますデバイスを童択し み 6 なので、ためしに / boot パーティションを選んで [ 削 て編集を選択しますイン ホスト各 ターフェイスを集画面で ホスト名を設定、 は、 D 日 CP でとネットマスク 除 ] ボタンをクリックしてみます。すると、 /boot パー ◎ P 由で自動設定内 情報を設定させるか、スは手動 で入力することもできます。 0 手動設定 ( M ) ー さらにデバイスが起動時にアク ティションカ哨リ除されると同時に、ルート・パーティショ テイプになるように選択する こともできます。 その他の設定 ケートウ : イ : D 日 CP クライアントアクセスが ンの開始シリンダ番号が 14 から 1 に変更され、自動的 ない場合 . 又はこの情報の内容い が判らない場合は、ネット ワーク管理者に達絡して下さ にルート・パーティションの容量が拡大されました。 システムが、ホスト名を DHC 円 6. プートローダの設疋 によって割リ当てる大規なを」 FC2 の標準プートローダは GRUB です。ほかの OS がすでにインストールされていてマルチプート環境にす 定しました。 る場合は、図 10 の画面で起動する OS を取捨選択した ・ IP アドレス : 192.168.1.10 り、デフォルトの起動 OS を変更することができます。 ・ネットマスク : 255.255.255.0 PC にインストールする OS が FC2 のみで、プート時の ・ホスト名 : fedora オプションなどをカスタマイズする必要がなければ、そ ・デフォルト・ゲートウェイおよび DNS サーバー のまま次に進みます。 192.168.1.2 (VMware の NAT ルータの IP アド 7. ネットワークの設疋 レス ) 初期設定では、 DHCP を利用して IP アドレスなどを 8. ファイアウォールの設疋 自動取得するようになっています ( 図 11 ) 。 IP アドレス 初期設疋では、図 12 のように、、ファイアウォールを有効 などを手動で言したい場合は、 [ 編集 ] ボタンをクリッ にする " 、つまり、外部からのアクセスを遮断するように クして IP アドレスとネットマスクの値を入力し、ホス なっています。 VMware の NAT 接続を利用するのな ト名やデフォルト・ゲートウェイ、 DNS サーバーなど ら、基本的に外部からゲスト OS に直接アクセスするこ の値を入力します。 とはできないので、、、ファイアウォールなし " でもかまい 私は VMware の DHCP 機能は使わず、次のように設 ません。しかし、 VMware でプリッジ接続を選択した 6 VMware なので、ホーム・ディレクトリなどのデータ用パーティションが 場合や、インターネットに直妾続している PC では、 必要なら、イ磨課 HDD を増設しま GRUB プートローダーは . / を面上にイン プートローダーの設 プートローダーを変史 0 ストールされます . 定 他のオペレーティングシステムがプートできるようにプー トローダーを設定てきます、これによりリスト内からプー デフォルトでは、 GRUB プート トするオペレーティングシステムを第れできる様になりま す . 自動に認宿されない他のオヘレーティングシステム ローダーがシステムにインス を追加するには、「加」をクリックします . デフォルト トールされます . プートローミ てプートするオペレーティングシステムを変第するには、 ダーとして GRUB をインストー 目第のオペレーティングシステムのの「デフ第ルトーを ルしたくない場合は、プート れします、 ローダーを変史を童れします . デバイス デフォルトラベル またデフォルトでプートする マ Fed 国議 ( 2 知 / 、 d 05 ( を数ある場合 ) も選択できま す , 目引のプートパーティ ションの様にあるデフォルト を童択してデフォルトプート の 05 を選択します、このデ プートローダーバスワードによってユーザがオプションの フォルトプートのイメージを 変更をカーネルに渡すことを防げます、より高度なセキュ 選択しない限りインストールを要 リティ物貨のためにはバスワードの設定を製します . 先へ進めることは出来ませ ロプートローダーパスワードを使用型ースつ・、一トを量′きら プートローダー記入項の追加、 ロ高度なプートローダーオプションの設定 (Q ) 編集、酬除などはマウスで当 バーティションを選れし、希 望凝作のボタンをクリックしま す . 0 、ルプを [ をツ三 ~ 三日 図 11 ネットワークの言綻 l: 当 w 第第、 Mw 宿代 ir 山 5 ) 409 、 MB 第 P) リセット ( 印ー以△ ) 新編集 ) 容量 タイプフォーマット 開始第了 (MB) 達加 則 0 Mount POnt/ R 川 0 Ⅳ dum に デバイス やハードディスク /dev/sdal / / sd 記 / sd ext3 ネットワー・クデバイス 動時にアクテイプバイス一円ネットマスク 編第 ) 浦第に P ( 例、・ h d81 ョⅲェロ 4 まる ( 印を 114 UNIX MAGAZ 工 NE 2004.9