カメラが少し好きになった大学生がしたこと

最近は、あまりパソコンに触れてなくて、シェルスクリプトとか文法忘れててもうガン萎えですわ。

そんな感じですがタイトルの通り。最近カメラ買いまして、それに伴って写真の管理をどうしようと考えたときにこんなのがあればいいなと

 ・友達に撮った写真(以前に行った海外旅行とか)を見せたい
   →しかし、普段持ち歩くのには容量制限がある。iphoneの容量も限られてるし。。。
   →faceboookに載せたくない写真も、あるし。。。。

って思ったので、家のパソコンでに写真を貯めて、出先から家のPCにアクセスするようにしようと思いその環境を構築しようと思います。大雑把に必要な手順はこんな感じ。

1、写真を管理するパソコン(ubuntu)でnfsサーバーの設定
2、apacheの設定(サムネイルの自動生成モジュールのインストール[smalllight,imagemagick])
3、グローバルIPアドレスの取得
4、写真をいい感じに見れるWEBアプリの作成

とりあえず3まで、行けば最低限の物はできるかと。そして今は4に取り組もうというところです。

2のsmalllightのインストールで若干ハマりましたが「http://qiita.com/tototoshi/items/472f2b09e48ae9717a2d」ここを見てすんなり行けました。
とりあえず、smallightはgithubから最新のものをcloneしてくるってのがミソですね。

今回の本題は、こんなことではなく。3番の「グローバルIPアドレスの取得」なんですよ。

 固定回線を引いてる人は、既にグローバルIPアドレスが割り当てられていて、ポートフォワーディングの設定だけで外部(携帯とか公衆のWIFIとか)からアクセスできるようにすることができるかもしれませんが、自分の家はWimaxなんですよ。
 Wimaxはプロバイダから割り当てられるIPアドレスはプライベートであるため外部から自分のPCにアクセスするのは不可能なんです。。。。
 
 んで、グローバルIPをもらうために固定回線を引こうとマンションに入ってる光の業者に電話すると個人向けにはプライベートIPしか発行してないとのこと。。。。

これをマズい・・・

そこでしばらく検索してると、「グローバルIP発行します!どのプロバイダにも対応しています!」の文字が!
 正直、どうやったらプロバイダに管理されている自分のPCに見ず知らずの業者が割り込んでグローバルIPアドレスを発行できるのか!?と不思議だったけど仕組みを聞いてなるほどっ。

 どうやら、vpnを利用してグローバルIPを発行しているみたいなんです!(頭いいなぁ)確かにVPNを利用すればグローバルIPアドレスを割り当ててもらうことは可能ですね〜。ただ、全部のパケットがVPNサーバーを通して送受信されるので速度は少し落ちそう。ちなみにここ(http://www.interlink.or.jp/

んで、ubuntuグローバルIPを割り当てるためにubutuからvpnを接続します。がしかし、ここで問題がwimaxってこともあってたびたび回線状況が悪くなるとvpnが切断されるんですね。しかも再接続は手動でしかできないんですよ。。。。

これだと、外部からまったく安定して自宅pcにアクセスできない。。。
ってことで、常時接続するために、cronで定期的にvpnの状況をチェックして切断されてたらvpn接続するようにしようと思ったんですよ。

まず、そのためにpptpの接続をコマンドに置き換えました。

#sudo pptpsetup create
#sudo pppd call updetach
#sudo route add default ppp0

GUIでやると、ルーティングテーブルの変更までやってくれるんだけどCUIの場合は自分でやる必要があります!これをやらないと外部からパケットは受け取れるのにこちらから送るパケットはvpnサーバーを通さないのでちゃんと通信できません。

とりあえず作ったスクリプトは適当にこんな感じ

pppd_procee=$(ps aux | grep pppd | wc -l)
if test $pppd_prcee -lt 3 ; then
sudo pppd call updetach
sudo route add default ppp0
fi

pppdのプロセス数で判別する感じです。あんまりイケてないけどこれでもちゃんといけるはず。
これを1分間隔でcronで実行します!

そのときに重要なのは、ttyがないとか言われるので/etc/sudoersに
Default !requiretty
ALL=(ALL) NOPASSWS:ALL
の2つのの行を追加しておくことです。

sudoは、実行にttyを必要とするので、必要ないように変更しパスワードも聞かれないように変更します。
こうすることで、上記のスクリプトがcronで実行できます!

とりあえずこれで、外部から家のパソコンの写真が見れるようになりました!

webアプリに関しては、これからちょいちょいやっていきます!