かれ4

かれこれ4個目のブログ

Docker for macを辞めたら、Docker Clientだけをスマートに入れる方法を見つけた。

Docker for macが出てから、しばらく使っていたけれど、 どうしてもディスクの喰い方がつらくて、Docker for macを卒業。

現在のローカルのDockerの環境は Parallels + CoreOS Stable channel + Docker client という構成に。 というか戻った。

paralllels + CoreOSのところは一旦置いておいて MacにDocker clientだけをスマートに入れる方法はないかと模索したところ toolboxのソースにあるDockerfile.osxにヒントが。

 36 RUN curl -fsSL -o dockerbins.tgz "https://get.docker.com/builds/Darwin/x86_64/docker-${DOCKER_VERSION}.tgz" && \
 37     tar xvf dockerbins.tgz docker/docker --strip-components 1 && \
 38     rm dockerbins.tgz
 39
 40 RUN chmod +x /docker

https://get.docker.com/builds/Darwin/x86_64/docker-${DOCKER_VERSION}.tgz

このURLさえあれば、動いたり動かなかったりするDocker toolboxのインストーラーにやきもきすることもなく、 Docker clientだけをMacにスマートに入れられる。

$ DOCKER_VERSION=1.11.2
$ wget https://get.docker.com/builds/Darwin/x86_64/docker-${DOCKER_VERSION}.tgz
$ tar zxf docker-${DOCKER_VERSION}.tgz
$ mv docker/docker /usr/local/bin/docker-${DOCKER_VERSION}
$ pushd /usr/local/bin/
$ chmod +x docker-${DOCKER_VERSION}
$ ln -s docker-${DOCKER_VERSION} docker

これでclientだけを入れる事ができた。 あとは環境変数のDOCKER_HOSTにtcp://${COREOS_HOST}:2375 とか入れておけばOK

Gourceがなんだかすごそうだから使い始めてみる。(install編)

Gourceすごそう

www.youtube.com

Cognitive ToolKitを追いかけていたら、ちょいちょいGourceというなんだかかっちょいいツールを見かける。

http://gource.io

これはよくわからんけど、使ってみたい。 Windows用のバイナリは用意されているみたいだけれども、Mac用のバイナリはないっぽいので自分で作る。

まとめ

$ sudo port install glm boost libsdl glew pcre freetype ftgl libpng libsdl2_image
$ git clone git@github.com:acaudwell/Gource.git
$ cd Gource
$ ./autogen.sh
$ ./configure && make
$ sudo make install

ここ以下は手順をメモっただけなので読み飛ばし可

installの手順

$ git clone git@github.com:acaudwell/Gource.git
$ cd Gource
$ ./autogen.sh

〜略〜

Run './configure && make' to continue.
$ ./configure

〜略〜

checking for GLEW... configure: error: Package requirements (glew) were not met:

No package 'glew' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables GLEW_CFLAGS
and GLEW_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

glewがないよっていう事を言われるので

$ sudo port install glew

そして再び

$ ./configure

〜略〜

configure: WARNING: SDL 2.0 libraries not found. Trying SDL 1.2. Please note SDL 1.2 support is deprecated
checking for SDL... configure: error: Package requirements (sdl >= 1.2.10 SDL_image) were not met:

No package 'sdl' found
No package 'SDL_image' found

今度はsdlがないと

$ sudo port install libsdl
$ ./configure

configure: error: Boost Filesystem >= 1.46 is required. Please see INSTALL

次はBoost Filesystemが必要と言われ、 INSTALLを見てくれという事なので見てみると

f:id:tottokug:20161208085445p:plain

ちゃんと依存が書いてありました

MacPortsには Boost Filesystem >= 1.46 (libboost-filesystem-dev) まんまこれは存在していないようなので、 boostをinstall、そしてconfigure

$ sudo port install boost
$ ./configure

configure: error: GLM headers are required. Please see INSTALL

$ sudo port install glm
$ ./configure

これで無事にconfigureは完了です。

自分の環境には他に依存しているものがたまたま入っていただけなので、INSTALLに書いてある

  • SDL 2.0 (libsdl2-dev)
  • SDL Image 2.0 (libsdl2-image-dev)
  • PCRE (libpcre3-dev)
  • Freetype 2 (libfreetype6-dev)
  • GLEW (libglew-dev)
  • GLM >= 0.9.3 (libglm-dev)
  • Boost Filesystem >= 1.46 (libboost-filesystem-dev)
  • PNG >= 1.2 (libpng12-dev)

を全部入れましょう

$ make && make install 

これで無事にインストールは完了。

Mac上でCNTK改めCognitive ToolKitを使うならDockerが1番楽ちんそう

結論

Mac上でCNTK改めCognitive Toolkitを使おうとコンパイルを試みたけれど、ネイティブでは無理だった。 無理じゃないかもしれないけれど、労力ががが 結局Dockerでやるのが楽ちん。

なぜ??

github.com

ここにも有るようにACMLがLinuxWindowsにしか提供されていないからだと言う。 他のオープンソースのライブラリで代用しないか?という質問に対しても しかも当面はWindowsLinux以外はサポートしないとはっきりと書かれている。

ACMLとは?

AMD Core Math Libraryの事。 developer.amd.com

  • Level 1, 2 and 3 BLAS
  • LAPACK の全ルーチン
  • FFT(単精度、倍精度)
  • 乱数生成(単精度、倍精度) が高速に扱えるライブラリ。

ただ、現在サイトを見てみると終了のお知らせがあり、これからはオープンソースでやっていくから gpuopen.comを見てねと オープンソースになったので、Mac用にビルドするとか出来るようになるでしょう

とりあえず、ACMLはここまでにしてMacでなんとかCNTK

もうMacでもなんでもない。Dockerで

DockerでCNTKを使う方法は公式のWikiにも書いてある。

CNTK Docker Containers · Microsoft/CNTK Wiki · GitHub

ここに書かれている通りに

cd ${REPO_ROOT}/CNTK/Tools/docker
docker build -t cntk CNTK-CPUOnly-Image

こんな感じでbuildすればとりあえず、MacでもなんでもCognitive ToolKitは試せる ただ、buildにMacbook Air 2014 で大体8時間位かかるので、 ビルド中は美術館なんかに行くのが良いと思う。

ちなみに

$ docker search cntk
NAME                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
torumakabe/cntk-cpu       Image built by MS CNTK Dcokerfile (CPU)         1
microsoft/cntk            CNTK                                            1                    [OK]
attz/cntk                                                                 0
xmedicus/cntk             CNTK                                            0
smizy/cntk                Based on torumakabe/cntk-cpu, MNIST data p...   0
xiw9/cntk                 Another CNTK docker image                       0
qianjun22/cntk-gpu        Docker Image built from the official MS CN...   0
alfpark/cntk              Microsoft Cognitive Toolkit (CNTK) with 1-...   0
toyotaka/cntk                                                             0
tottokug/cntk-cpuonly                                                     0
incognition/cntk-devel                                                    0
nefrock/docker-cntk-cpu                                                   0
nefrock/docker-cntk-gpu                                                   0
incognition/cntkcuda8                                                     0
ericebert/cntk_gpu                                                        0

と、野良のcntkのDocker Imageが出て来る。 その中に一つ異彩を放つ一行がこちら microsoft/cntk なんか公式っぽいTagが付いているImageがある、 しかしdocker hubに行ってみると、

https://hub.docker.com/r/microsoft/cntk/tags/

キチンと公式っぽいものが用意されていた。 RepoInfoのショボさはこの際は気にしない。

$ docker run  -it --rm microsoft/cntk:1.7.2-cpu-only /bin/bash
root@de3948185514:/cntk# cntk
-------------------------------------------------------------------
Build info:

        Built time: Oct  1 2016 21:16:06
        Last modified date: Sat Oct  1 21:14:58 2016
        Build type: release
        Build target: CPU-only
        With 1bit-SGD: no
        Math lib: mkl
        Build Branch: HEAD
        Build SHA1: d1ad5fcc9b71c9b6122623a2a0c3d126a64cbe94
        Built by philly on 9b019bb2e014
        Build Path: /home/philly/jenkins/workspace/CNTK-Build-Linux
-------------------------------------------------------------------
No command-line argument given.
-------------------------------------------------------------------
Usage: cntk configFile=yourConfigFile
For detailed information please consult the CNTK book
"An Introduction to Computational Networks and the Computational Network Toolkit"
-------------------------------------------------------------------

とりあえず、これでよいか。

Mac上でcntkを試す程度であれば、これが1番楽ちんそうだなと思いました。

Amazon Linuxのコンテナイメージを自分のdocker hubのリポジトリにコピーする

New Amazon Linux Container Image for Cloud and On-Premises Workloads | AWS Blog

こんなリリースがあったけど、ecrとイチャイチャしたり、色々めんどくさいから、手元で使いやすいように

規約的に大丈夫かわからないので自己責任で

#!/bin/bash

if [ $# -ne 1 ]
then
  echo "USAGE: $0 {MY_REPOSITORY}"
  echo " "
  exit;
fi
REPOSITORY=$1

LOGIN_CMD=$(aws ecr get-login   --registry-ids 137112412989)
eval "$LOGIN_CMD"

for image in $(aws ecr list-images --registry-id 137112412989 --repository-name amazonlinux |jq -r .imageIds[].imageTag);
do
  docker pull 137112412989.dkr.ecr.us-west-2.amazonaws.com/amazonlinux:${image}
  echo "IMAGE reTAG========================================================="
  docker images |grep "amazonaws.com/amazonlinux" |grep "${image}" | perl -anle 'print "$F[2]"' | xargs -I{} docker tag {} ${REPOSITORY}/amazonlinux:${image}
  echo "IMAGE push========================================================="
  docker push ${REPOSITORY}/amazonlinux:${image}
done

SORACOM Airを使わずに、SORACOMを楽しむ方法

はじめに

SORACOMリリース1周年記念リレーブログ 11月1日分です。 blog.soracom.jp

SORACOMももう1周年という事で、色々とサービスが増えて来ました。 まずは各サービスをGoogle Trendで見てみます。

↑読み込み遅いけどGoogle Trendsのグラフ出ます。

↑読み込み遅いけどGoogle Trendsのグラフ出ます。

SORACOM Airが 2014/7/6 - 12の間に検索されていたりするのは、 創業者二人が飲みながら名前を考えているときに、 検索していたのかなと想像すると楽しいですね。

AirとBeamの検索量にたいして、他のサービスはGateがかろうじて 検索されている位の状況です。

ということで、今回はCanal周りを中心に遊んでみようと思います。

VPGで遊ぶ

まずはVPGで遊んでみたいと思います。 VPGを作成するところから。

VPGの作成

$ soracom vpg create --device-subnet-cidr-range=10.0.0.0/9  --primary-service-name=canal
{
    "createdTime": 1477998721142,
    "deviceSubnetCidrRange": "10.128.0.0/9",
    "lastModifiedTime": 1477998722107,
    "operatorId": "OP0012950956",
    "primaryServiceName": "Canal",
    "status": "creating",
    "tags": {},
    "type": 12,
    "ueSubnetCidrRange": "10.128.0.0/9",
    "useInternetGateway": true,
    "virtualInterfaces": null,
    "vpcPeeringConnections": null,
    "vpgId": "********-****-****-****-************"
}

コマンドラインでサクと作ります。
### statusがrunnningになればvpg作成完了
$ soracom  vpg get --vpg-id=acf68be6-83f7-44c3-9fd5-bd741a434176 |jq -r .status
running

特に難しいこともなく、作成完了です。

$ soracom vpg list-ip-address-map-entries --vpg-id=********-****-****-****-************
[
    {
        "hostId": "100.64.148.132",
        "ipAddress": "10.64.148.132",
        "key": "100.64.148.132",
        "type": "gatePeer"
    },
    {
        "hostId": "100.64.148.4",
        "ipAddress": "10.64.148.4",
        "key": "100.64.148.4",
        "type": "gatePeer"
    }
]

f:id:tottokug:20161102003139p:plain

 なにやら、アドレスが2個作成されています。  推測ですが、VPGというのはVPCと(AZにまたがって)EC2が2台という構成で作られているのでは無いかと推測できます。  今作成したものであれば、  100.64.128.0/17と100.64.0.0/17というサブネットがあるのではないかと思います。

 このVPCがアカウント毎に違うVPCなのか、同じVPCなのかは今回は検証していませんが、おそらく別れていることでしょう。

AWS側でVPCを作って遊んでみる

こちらもさくと作ります。

$ aws ec2 create-vpc --cidr-block 172.19.0.0/16
{
    "Vpc": {
        "VpcId": "vpc-467*****",[f:id:tottokug:20161102003146p:plain]
        "InstanceTenancy": "default",
        "State": "pending",
        "DhcpOptionsId": "dopt-ada4b3cf",
        "CidrBlock": "172.19.0.0/16",
        "IsDefault": false
    }
}

f:id:tottokug:20161102003141p:plain

VPGとAWS VPCをつなぐ

VPCとつなぐのはコマンド一つのお手軽さです。

$ soracom vpg create-vpc-peering-connection \
--destination-cidr-block=172.19.0.0/16 \
--peer-owner-id=01234567890123 \
--peer-vpc-id=vpc-********** \
--vpg-id=********-****-****-****-************

これで、SORACOM側のAWSアカウントから、指定したVPCに対してPeeringのRequestが届きます。

それをAWS側でAcceptすることで、Peeringが完成しました。 f:id:tottokug:20161102003146p:plain

VPGとSORACOMのVPCの関係について後日追記予定の内容があります。

Subnetの作成とRouteTableの設定とEC2の起動

先程Peeringを作ったVPCもそのままでは特に何もないネットワークなので、 もうちょっと遊ぶために、Subnet(172.19.8.0/24)を作成し、 RouteTableに100.64.0.0/16 への通信をpeeringに渡す設定とSecurity Groupを適切に設定する事で、 AirからEC2への疎通は出来るはずです。 今回はAirは使っていないので、確認はできていません。。。

f:id:tottokug:20161102003148p:plain

EC2からアクセス出来るのはどこまでなのか

そして、今日の本題。 EC2からSORACOMのどこまでアクセス出来るのか試してみたいと思います。

Doorがあればまた話しは変わってくるのかもしれませんが、 今回はSORACOM CanalとSORACOM GateだけでEC2がどこまでアクセス出来るのかを試していきたいと思います。 vxlanの設定までを https://dev.soracom.io/jp/start/gate/ ここを見ながら終わらせます。

$ soracom vpg register-gate-peer --outer-ip-address 172.19.8.253 --vpg-id ********-****-****-****-************
{
    "innerIpAddress": "10.18.216.109",
    "netmask": null,
    "outerIpAddress": "172.19.8.253",
    "ownedByCustomer": true
}

SORACOM Air

これは公式ドキュメント https://dev.soracom.io/jp/start/gate/#step5 にも書いてある事で出来るはずです。 今回はSORACOM Airを使わないで楽しむことが目的なので、割愛します。

SORACOM Beamに

SORACOM Beamには100.127.127.100というIPアドレスがついています。 このネットワークにアクセス出来ると良いですね。 とりあえず、単純にRouteTableに100.127.0.0/16へのルートをPeeringに向けてみます。

$ nmap 100.127.127.100

Starting Nmap 6.40 ( http://nmap.org ) at 2016-11-01 14:58 UTC
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 3.03 seconds

SORACOM Funnelに

Beamのときと同様にfunnel.soracom.io (100.127.65.43)にも

$ nmap  100.127.65.43

Starting Nmap 6.40 ( http://nmap.org ) at 2016-11-01 15:01 UTC
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 3.03 seconds

さいごに

結論、頑張ったけど、EC2からBeamにもFunnelにも到達することはできませんでした。

もし、EC2から直接BeamやFunnelにアクセス出来たならば、 MQTTのフルマネージドサービスを手に入れることができ、 SORACOMをIoTのサービスではなく、データフローのサービスとしても楽しむことが出来るはずです。

VPGはセットアップの時に 980 円/回 (税別)がかかるのと、 VPG 利用料金: 1時間あたり 50 円 (税別) VPC ピア接続利用料金: 1ピア接続・1時間あたり 10 円 (税別) [2016/11/1 現在] がかかるので遊び終わったら削除する事と、無駄にVPGを作成しないことで 突然の課金にびっくりすることはないでせう。

と、自己満足に浸ったところで、11/1分はおしまいです。