kakts-log

programming について調べたことを整理していきます

amazon ec2インスタンスにおけるredisのmakeが出来ない問題

ec2インスタンスをつくってredis(2.8.17 stable)の環境構築をする際にmakeでエラーが出たのでその対処法をメモ

状況
プライベートサブネット上にredis用のインスタンスを立ち上げ、NATを介してwgetでredisのソースをダウンロード。その後/usr/local/srcにて解凍してmakeしようとしたときに最初にgccがないとエラーが出た。
sudo yum -y install gcc
gccを入れた後に以下のエラーが出た。
・パブリックサブネット上のインスタンスで同じことをやったら普通にいけた。おそらくプライベートのredis用インスタンス固有の問題?

[ec2-user@ip-10-0-2-10 redis-2.8.17]$ sudo make
cd src && make all
make[1]: ディレクトリ `/usr/local/src/redis-2.8.17/src' に入ります
    LINK redis-server
cc: error: ../deps/hiredis/libhiredis.a: そのようなファイルやディレクトリはありません
cc: error: ../deps/lua/src/liblua.a: そのようなファイルやディレクトリはありません
cc: error: ../deps/jemalloc/lib/libjemalloc.a: そのようなファイルやディレクトリはありません
make[1]: *** [redis-server] エラー 1
make[1]: ディレクトリ `/usr/local/src/redis-2.8.17/src' から出ます

make: *** [all] エラー 2



原因
パブリックに作ったインスタンスとプライベートに作ったredis用のインスタンスで特に変わっていることはNATを介してインターネットアクセスしてるかどうかだが、特に影響なさそうだなと思ったので、makeの問題だと予想
んでいろいろ調べてたら githubのredis2.6のissuesで同様の問題に関するものを発見

自分と同様に、最初gccが入ってなくてmakeをやりなおしていてエラーが出ていて、
makeしたときにできる.make-*filesが悪さをしてるとのコメントを発見

@anentropic @antirez I finally found the reason. it is because of .make-* files
after first building failure, it already made some .make-*files
so it disturbs building of redis server.
remove dep/.make-cflags deps/.make-ldflags deps/.make-prerequisites
and remove src/.make-prerequisites src/.make-setting
exactly. it is because of src/.make-* files.
and make again. It will work well!.

どうやらmakeをしたときに /usr/local/src/redis-2.8.17/ のディレクトリの下にmake関連のファイルができて、一回目のgccでエラーでこけたときにそのファイルが消えずに悪さをしていた模様 実際みてみると、./deps/ と./src/の下に .make-* のファイルがいくつか見つかったのでそれを消してもう一度やったらうまく行きました。

>・パブリックサブネット上のインスタンスで同じことをやったら普通にいけた。おそらくプライベートのredis用インスタンス固有の問題?
パブリックのインスタンスでは普通に出来たのは、もともと別の作業でgcc入れてたからでした。