情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

ネットワークトポロジ生成プログラムGT-ITMのインストールメモ

GT-ITM (1) Linux (29)

GT-ITMをLinuxマシン(Ubuntu 12.04.3 LTS (GNU/Linux 3.8.0-29-generic x86_64))にインストールしたときの手順などをメモしておきます。

GT-ITM

GT-ITMは小さなプログラムで、ネットワークトポロジ(が記述されたテキストファイル)を生成するプログラム(Topology Generator)です。

例えば、transit-stabモデル(トランジット・スタブ モデル)に基づくネットワークトポロジを生成できます。直接生成されるファイルは読み取りにくいですが、同梱されているsgb2altというプログラムで変換すると、グラフ構造をパースしやすくなると思います。

インストール手順(失敗)

GT-ITMのページの「GT-ITM: Georgia Tech Internetwork Topology Models (Linux version)」というリンクから、Linux向けのファイル一式をダウンロードします。

実は、オリジナルのGT-ITMはLinuxではないOS(Solaris?)に作られたようで、Linux向けをダウンロードする必要があります。

ダウンロードして.tar.gzファイルを展開すると、さっそく「bin」ディレクトリにメインの実行ファイル「itm」があります。しかし、試しにこれを実行しても、

「bash: bin/itm: そのようなファイルやディレクトリはありません」

と言われてしまいます(bash)。実行ファイル自体が存在しないというより、単純に実行できなかったよ、ということのようです。

続いて「src」というディレクトリにとりあえず「Makefile」があったので、そのディレクトリに移動して「make」コマンドを実行してみました。

すると、次のようになりました。

$ make
gcc  -I../include -L../lib    -c -o itm.o itm.c
itm.c: 関数 ‘makegraph’ 内:
itm.c:286:16: 警告: 書式 ‘%d’ は引数の型が ‘int’ であると予期されますが、第 4 引数の型は ‘long int’ です [-Wformat]
gcc  -I../include -L../lib    -c -o geog.o geog.c
geog.c: 関数 ‘geo’ 内:
geog.c:191:26: 警告: 組み込み関数 ‘malloc’ の互換性がない暗黙的な宣言です [デフォルトで有効]
geog.c:255:18: 警告: 組み込み関数 ‘free’ の互換性がない暗黙的な宣言です [デフォルトで有効]
geog.c: 関数 ‘geo_hier’ 内:
geog.c:411:18: 警告: 組み込み関数 ‘calloc’ の互換性がない暗黙的な宣言です [デフォルトで有効]
geog.c:444:6: 警告: 書式 ‘%d’ は引数の型が ‘int’ であると予期されますが、第 4 引数の型は ‘long int’ です [-Wformat]
geog.c:586:8: 警告: 組み込み関数 ‘free’ の互換性がない暗黙的な宣言です [デフォルトで有効]
geog.c:619:5: 警告: 書式 ‘%d’ は引数の型が ‘int’ であると予期されますが、第 3 引数の型は ‘long int’ です [-Wformat]
gcc  -I../include -L../lib    -c -o ts.o ts.c
ts.c: 関数 ‘fdiam’ 内:
ts.c:87:18: 警告: 組み込み関数 ‘malloc’ の互換性がない暗黙的な宣言です [デフォルトで有効]
ts.c:94:24: 警告: 組み込み関数 ‘malloc’ の互換性がない暗黙的な宣言です [デフォルトで有効]
ts.c:155:2: 警告: 組み込み関数 ‘free’ の互換性がない暗黙的な宣言です [デフォルトで有効]
ts.c:158:7: 警告: 組み込み関数 ‘free’ の互換性がない暗黙的な宣言です [デフォルトで有効]
ts.c: 関数 ‘die’ 内:
ts.c:174:1: 警告: 書式 ‘%s’ は引数の型が ‘char *’ であると予期されますが、第 3 引数の型は ‘int’ です [-Wformat]
ts.c:175:1: 警告: 組み込み関数 ‘exit’ の互換性がない暗黙的な宣言です [デフォルトで有効]
ts.c: 関数 ‘transtub’ 内:
ts.c:270:21: 警告: 組み込み関数 ‘malloc’ の互換性がない暗黙的な宣言です [デフォルトで有効]
ts.c:294:6: 警告: 組み込み関数 ‘free’ の互換性がない暗黙的な宣言です [デフォルトで有効]
ts.c:483:6: 警告: 書式 ‘%d’ は引数の型が ‘int’ であると予期されますが、第 3 引数の型は ‘long int’ です [-Wformat]
ts.c:483:6: 警告: 書式 ‘%d’ は引数の型が ‘int’ であると予期されますが、第 4 引数の型は ‘long int’ です [-Wformat]
ts.c:507:7: 警告: 書式 ‘%d’ は引数の型が ‘int’ であると予期されますが、第 3 引数の型は ‘long int’ です [-Wformat]
ts.c:507:7: 警告: 書式 ‘%d’ は引数の型が ‘int’ であると予期されますが、第 4 引数の型は ‘long int’ です [-Wformat]
ts.c:540:3: 警告: 書式 ‘%d’ は引数の型が ‘int’ であると予期されますが、第 3 引数の型は ‘long int’ です [-Wformat]
ts.c:540:3: 警告: 書式 ‘%d’ は引数の型が ‘int’ であると予期されますが、第 4 引数の型は ‘long int’ です [-Wformat]
ts.c:541:2: 警告: 組み込み関数 ‘exit’ の互換性がない暗黙的な宣言です [デフォルトで有効]
ts.c:666:4: 警告: 組み込み関数 ‘free’ の互換性がない暗黙的な宣言です [デフォルトで有効]
gcc  -I../include -L../lib    -c -o dfs.o dfs.c
dfs.c: 関数 ‘isconnected’ 内:
dfs.c:34:26: 警告: 組み込み関数 ‘malloc’ の互換性がない暗黙的な宣言です [デフォルトで有効]
dfs.c:41:29: 警告: 組み込み関数 ‘free’ の互換性がない暗黙的な宣言です [デフォルトで有効]
gcc  -I../include -L../lib  -o ../bin/itm itm.o geog.o ts.o dfs.o -lm -lgb-linux
/usr/bin/ld: skipping incompatible ../lib/libgb-linux.a when searching for -lgb-linux
/usr/bin/ld: cannot find -lgb-linux
collect2: ld はステータス 1 で終了しました
make: *** [itm] エラー 1

「bin」ディレクトリにあったitmファイルが消えたまま、特に何も生成されずに失敗です。

次に、後輩に「GT-ITM - duost」というページを教えてもらって、eval.cを修正してみたのですが、結局次のエラーが発生してしまいました。

gcc -I../include -L../lib  -o ../bin/itm itm.o geog.o ts.o dfs.o -lm -lgb-linux
/usr/bin/ld: skipping incompatible ../lib/libgb-linux.a when searching for -lgb-linux
/usr/bin/ld: cannot find -lgb-linux
collect2: ld はステータス 1 で終了しました
make: *** [itm] エラー 1

続いて、エラーメッセージで検索した情報を参考に、Makefileの「CC = gcc」という行を「CC = gcc -m32」に変更してみました。

gcc -m32 -I../include -L../lib  -o ../bin/itm itm.o geog.o ts.o dfs.o -lm -lgb-linux
/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
/usr/bin/ld: cannot find -lm
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: cannot find -lc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: cannot find crtn.o: No such file or directory
collect2: ld はステータス 1 で終了しました
make: *** [itm] エラー 1

エラーは解決されません。

インストール手順(成功)

この後色々あって、実は後輩が使っていた「itm」が、ns-2に同梱されているものだと分かりました。

そういうわけで、ここで急遽ns-2をインストールするということになりました。そして、これが成功します。

まずns-2の公式ページ(?)に飛び、そこからns-2のwikiに飛び、ns-2.35のダウンロードページを見つけ、ns-allinone-2.35.tar.gzをダウンロード(wget http://downloads.sourceforge.net/project/nsnam/allinone/ns-allinone-2.35/ns-allinone-2.35.tar.gz)し、展開しました(tar zxvf ns-allinone-2.35.tar.gz)。

この「展開」が厄介で、かなり時間がかかります。最終的に得たいのはgt-itmの部分だけなのですが、そこだけ展開した状態でns-allinone-2.35/gt-itm/src以下にあるMakefileを使っても失敗しました。

そういうわけで、展開が終了するのを待って、同梱されているns-2のREADMEの通りに「./install」を実行しました。

これが完了すると、「ns-allinone-2.35/gt-itm/bin」に、ちゃんとコンパイルされたバイナリが作成され、そのバイナリの一つである「itm(トポロジ生成プログラム)」も、正しく実行することができました。引数なしで実行して「itm ....」と表示されれば成功です。

ただ、ns-2に同梱されているgt-itmにはtsモデルのサンプルがなぜか同梱されていないようなので、それだけGT-ITMの公式ページから先ほどダウンロードしたところから持ってきて、完成です(実際、サンプルファイルはほとんど必要ない)。

こうして無事、GT-ITMを使えるようになりました。

コメント(0)

新しいコメントを投稿




  • カテゴリー
  • 著者紹介

    ブログが趣味で、スマホアプリの利用中に発生するトラブルや不具合の対策手順や障害情報、 設定の変更方法などについて、解説記事をよく書いています。

    自分が困ったことをブログに書けば、次に困る人の参考になって、みんながみんな同じ苦労をせずに済む、というのが原点です。

    最近の関心は、スマホやパソコンが苦手な人の行動や思考、そしてそんな人を手助けする方法です。

    Amazonのアソシエイトとして、did2は適格販売により収入を得ています。

    RSS | Facebook | Twitter | About