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

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

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

GT-ITM (1) Linux (23)

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)

新しいコメントを投稿




  • カテゴリ ナビ
  • 著者紹介

    ブログが趣味で、 月間1,000万PV を達成しました。

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

    最近の関心は、スマホやパソコンに詳しくない人の行動や思考、 そしてそんな人を手助けする方法や枠組み。 また、それに関連するような、"身近な"セキュリティ。

    ※SNS(特にTwitter)でシェアされた記事は、内容の追加・更新を行っています。 必ず、ではありませんが、気に入った記事は積極的にシェアしてみてください。

    RSS | Facebook | Twitter | About