スポンサーリンク
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を使えるようになりました。
スポンサーリンク
スポンサーリンク