@Konboi memo

主に技術に関してつらつらと。

Route53でダイナミックDNSをする 事前調査編

ダイナミックDNSとは

自宅に引いているインターネットサービスではIPアドレスが固定でない場合が多い。 IPアドレスが変わってしまうとIPアドレスに割り振ったドメインが使えなくなってしまう。 しかし、IPアドレスを固定にする場合は大抵の場合、別途有料のサービスに入る必要がある。

IPアドレスが変更される度に 、ドメインDNSを変更する仕組みがダイナミックDNSである。

参考URL

ここらへんを参考にすればいけいそう

docker-mahcine使ってみた

init

$ docker-machine create —driver virtual box doc
INFO[0000] Creating SSH key...
INFO[0000] Creating VirtualBox VM...
ERRO[0009] Error creating machine: exit status 1
WARN[0009] You will want to check the provider to make sure the machine and associated resources were properly removed.

debugモードで起動してみる

$ docker-machine rm doc
$ docker-machine —debug create --driver virtualbox doc                                          
...                                                                                                                                   
STDERR: Oracle VM VirtualBox Command Line Management Interface Version 5.0.2
...

docker-machine create fails on Mac OSX 10.10.4

4.3系なら動くようなのでここからpkgダウンロードしてダウングレード

4.3.30 なら動いた

docker-machineでdockerを試せる環境を作ってみる

 $ docker-machine ls 
NAME   ACTIVE   DRIVER   STATE   URL   SWARM

何もない

$ docker-machine create —driver virtual box doc
INFO[0000] Creating SSH key...
INFO[0000] Creating VirtualBox VM...
INFO[0009] Starting VirtualBox VM...
INFO[0009] Waiting for VM to start...
INFO[0056] "doc" has been created and is now the active machine.
INFO[0056] To point your Docker client at it, run this in your shell: eval "$(docker-machine env doc)"
$ docker-machine ls 
NAME   ACTIVE   DRIVER       STATE     URL                         SWARM
doc    *        virtualbox   Running   tcp://192.168.99.101:2376

できてるっぽい

いろいろ確認してみる

  • ip
$ docker-machine ip doc
192.168.99.101
  • env
$ docker-machine env doc
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.8.1, build master : 7f12e95 - Thu Aug 13 03:24:56 UTC 2015
Docker version 1.8.1, build d12ea79
docker@doc:~$

入れた

nginxをいれてみる

$ eval "$(docker-machine env doc)"

してdockerの接続先を変える

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

なにもない

imageの取得

$ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx

2c49f83e0b13: Pull complete
4a5e6db8c069: Pull complete
08ecf065655b: Pull complete
ff0618bc0767: Pull complete
12a77b8bf89a: Pull complete
5dde53921c3f: Pull complete
a53219dc4d2f: Pull complete
8c7e9b6e3131: Pull complete
f9bff7d0d06e: Pull complete
3ac9cfbdf572: Pull complete
491aec45eaf8: Pull complete
cd3cf76a61ee: Pull complete
Digest: sha256:aaaaaaaaaaaabbbbbbbbbbbbb
Status: Downloaded newer image for nginx:lates
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
nginx               latest              cd3cf76a61ee        3 days ago          132.9 MB

できてる

$ docker run -i 80:80 -d nginx
$ docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
1d482c3d5542        nginx               "nginx -g 'daemon off"   26 seconds ago      Up 25 seconds       0.0.0.0:80->80/tcp, 443/tcp   mad_panini

ブラウザでアクセスしてみる

img

やった!

YAPC::Asia 2015 に参加してきた #yapcasia

ブログを書くまではYAPC::Asiaということで!!

今年もYAPCに参加してきました!! とりあえず、最高だった。

コミケ#YAPC::Asia #yapc

聞いて印象に残ったトーク

1日目

Managing Containers at Scale with CoreOS and Kubernetes

CoreOSってよりかはk8sの話がメインでどんな感じに使うかのDEMO多めのトークでした。 個人的には、k8sブログとかで記事見かけてたけど、どんな風に使うのかイマイチわかっていなかったので良かった。

ただ k8s 自体の冗長化はどうすればいいのか質問すればとかったと反省。

Perlの上にも三年 〜 ずっとイケてるサービスを作り続ける技術 〜

成長しているサービスを改善している裏側だった。 読んだ本をどうやってプロダクションにとりいれてるかすごい参考になった。

紹介されている本のなかで幾つか積んであるのでさっそく読もうと思った。

ベストトーク賞おめでとうございます。

2日目

ISUCONの勝ち方

一昨年はNFS自動起動できなくてスコアでなくて

昨年は予選敗退してなんとも悔しかったので今年は勝ちたいと思って聞かせて頂きました。

聞きながら自分達がやってたやり方を振り返りながら聞けてよかった。

サーバーサイドエンジニア(特にPerl)のためのiOSアプリ開発入門

Demoがことごとく失敗してて失礼ながら笑ってしまいました ← 何度か挫折しているけれど、無料で実機に送れるとのことなのでもっかい手を出してみようかなと思いました

ソーシャルゲームにおける AWS 移行事例

同期の@tkuchikiが登壇するということで聞いてました。 会社で色々聞いていましたが、詳しいところまで把握できていなかったので勉強になりました。

上に挙げたトーク以外にもLTをはじめ色々な話を聞くことができました。

さいごに

牧さんをはじめとするYAPCのみなさん本当にお疲れ様でした!!! おかげさまで、本当に楽しい2日間(前夜祭はいけなかったので)を味わうことができました! 本当にありがとうございました!!!

自宅のルータからraspiへ振られるlocal ipを固定する

はじめに

自宅で使っているルータはElecomのWRC-F300NF

お、お前エンジニアなのにそんなルータなのかよ… とdisが飛んでくるかもしれませんが、 日常で使う分には全然困らない程度に速度出るし、安かったのでこれを使っています。

macアドレスを調べる

pi@raspberrypi ~ $ ifconfig
eth0      Link encap:Ethernet  HWaddr <mac アドレス>
          inet addr: < local ip>  Bcast:< local ip brod cast>  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:164 errors:0 dropped:0 overruns:0 frame:0
          TX packets:141 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:16804 (16.4 KiB)  TX bytes:19580 (19.1 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

HWaddrmacアドレスinet addr が現在振られているlocal ip。 設定が終わった後に任意のIPが振られているかはここを見る

local ip を固定する

ルータの管理画面にログインする。

img

WAN&LAN設定 > LAN設定 > 固定DHCP設定

から設定する

img

  • IPアドレスには設定したいローカルIPアドレスを。
  • MACアドレス には先ほど調べたMACアドレスを入力する
    • aa:bb:cc:dd など : で区切られているが入力するときは : は除く
  • コメント には任意

設定してルータを再起動すると設定される。 再起動後にifconfig で確認すると設定したIPが設定されていることを確認。

まとめ

固定IP振れてめでたしめでたし

pull request builder plugin を使わずgithub上にテストの結果を表示する

はじめに

現在のプロジェクトではJenkinsを使ってCIを行っています。 当初ビルドのタイミングはポーリングで行っていました。 しかしポーリングだと再度ビルドを走らせる必要がある時に空コミットする必要があったり、jenkinsのrebuild pluginを追加しポチポチしてビルドする必要がありました。

段々と億劫になり今は、Githubweb hookGithub::Hooks::Reciverというhook server経由でjenkinsのjobを実行するようにしました。

jenkins側の設定でbranchをパラメータとして渡せるようにして置くことで任意のbranchを指定してjobを実行できるようにしてあります。

と説明が長くなりましたが、今回はそのjobの実行結果をtarvis ciを連携したときのようにbuildの結果をgithubにも表示するようにしましたのでその方法をメモしておきます。

結果こんな感じに表示されるようになりました。

img

どうやったのか

説明したような仕組みでjenkinsのjobを回しているので結果を表示するためだけにpull request builder plugin を入れて設定するのは大分面倒だなと思って、何かないか色々調べていました。

調べていると以下の記事が見つかった

Githubのpull requestページに、テスト結果を表示するJenkinsの設定

この記事によると GithubCommit Status API を使えば実現出来そうということがわかったのでやってみました。

以下の様なscriptを用意しjenkinsのPost build task で実行してあげればpull request の最後のcommitのステータスを設定してくれます。

 use 5.018;
 use warnings;
 use strict;
 use FindBin::libs;

 use Furl;
 use Git::Repository;
 use JSON::XS;
 use Pithub;
 use Sub::Retry qw/retry/;

 {
     my $repo_user = ‘sample-user-name’;
     my $repo_name = ‘sample-repo-name’;
     my $git       = Git::Repository->new(work_tree => ‘project/dir/path’);
     my $sha       = $git->run('log', '-n', '1', '--pretty=format:%H');

     my $state = {
         'SUCCESS' => {
             state       => 'success',
             description => 'ぐっ!! (๑•̀ᄇ•́)و✧',
         },
         'UNSTABLE' => {
             state       => 'error',
             description => 'アタフタ ヘ( ̄□ ̄;)ノ ヽ(; ̄□ ̄)ヘ アタフタ',
         },
     };

     my $url  = $ENV{BUILD_URL};
     my $furl = Furl->new;
     my $json = retry 3, 5 => sub {
         my $res = $furl->get( "$url/api/json?tree=result" );
         decode_json $res->content;
     };
     my $result = $json->{result};

     exit(0) unless $state->{$result};

     my $ph = Pithub->new(
         token => ‘GITHUB_API_TOKEN’
     );
     $result = $ph->repos->statuses->create(
         user => $repo_user,
         repo => $repo_name,
         sha  => $sha,
         data => {
             state       => $state->{$result}{state},
             description => $state->{$result}{description},
             target_url  => $url,
         }
     );
 }

ぐっ!! (๑•̀ᄇ•́)و✧

まとめ

ステータスが出るようになってめでたしめでたし。

raspberry pi で自宅サーバー構築

はじめに

毎日の業務ではAWSを使っていて簡単にサーバー追加とかインスタンスサイズ変更とできて非常に便利に感じている。 ただ普段あまり意識しないもう少し低いレイヤーのことも出来なきゃなと思ったのでが自宅サーバーを運用しようと思う。

ただ、いきなりがっつり自宅サーバー準備しても動かす物の予定も無いし電気代もかかるのやだなーと思ってたのでraspberry pi でカジュアルに動かして見ることにする

やらないといけないであろう事をざっくりと書き出してみる

とりあえずやらないといけないのはこのぐらいかなーと

がんばるぞ〜!!