fresh digitable

めんどくさかったなってことを振り返ったり振り返らなかったりするための記録

go.mobileアプリのビルド環境をfreshなubuntu14.04の上につくる

go.mobileアプリのビルド環境はDockerイメージで配布されている。

Windows 7(64bit)でVirtualboxUbuntuを入れてビルド環境を作った。その手順をメモっておく。

ホストOS上で仮想マシンを作る

ホストOS(Win7)上でhttp://vagrantbox.esからdocker readyなboxを取ってくる。

vagrant box add ubuntu14.04 https://github.com/jose-lpa/packer-ubuntu_14.04/releases/download/v2.0/ubuntu-14.04.box
mkdir ubuntu1404
cd ubutu1404
vagrant init ubuntu14.04
vagrant up
vagrant ssh

仮想マシン上でGoの実行環境とビルド環境を作る

ここからは仮想マシン(Ubuntu14.04 on virtualbox)。とりあえずやっておく。

sudo apt-get update
sudo apt-get upgrade

go.mobile取ってくるときにhgがないって怒られたのでこのタイミングでやるのがよい。

sudo apt-get install mercurial

現時点ではapt-get install golangすると1.2.1のが入るので公式から取ってきて展開、インストール。 GOPATHは$HOME/gopathにした。

wget https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz
mkdir $HOME/gopath
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/gopath

正直なところ、hg入れるところからここまでをやる必要があるかどうかよくわからない。

ここから2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会と同じ。

go get -d golang.org/x/mobile/...
sudo docker build -t mobile $GOPATH/src/golang.org/x/mobile

公式では2行目をdocker pull golang/mobileにしている。こうするとdocker runの時のイメージ名の指定にはgolang/mobileにする*1。 どうでもいいことだけどJava6のインストールが始まったとき文字が真っ赤になったので何事かと思った。

インストール作業はここまで。うまく行ったかどうかを確かめるためにサンプルプロジェクトをビルドしてみる。

sudo docker run -v $GOPATH/src:/src /bin/bash -c 'cd /src/golang.org/x/mobile/example/libhello && ./make.bash'

うまく行けばlibhello/bin/Hello-debug.apkとかができているはず。

ホストOS上で書いたコードを仮想環境でビルドするにはどうしたらよいのだろうか

コードを書く環境はWindows上にある。そこで書いたものを仮想マシン上でビルドするにはどうすればよいのか。どうするのが良いのかわからないが、仮想マシンscpとかして中に置き、さっきのビルドコマンドを実行する線で考えてみる。

ホストOS上でvagrantで立ち上げた仮想マシンに直接sshするには、

vagrant ssh-config >> ~/.ssh/config
ssh (Host名)

Host名vagrant ssh-configで取れるもの。ssh-configの設定はupごとに変わりそうな気がするのであんまり良くないやり方かもしれない。とりあえず、これでsshでログインできるようになったとして、scpして任意の場所にビルドしたいプロジェクトをおけばいいかなって。

さっき仮想マシン上で実行したビルドコマンドをゲストOSから実行してみる。

ssh (Host名) docker run -v '$GOPATH'/src:/src mobile /bin/bash -c "'cd /src/golang.org/x/mobile/example/libhello && ./make.bash'"
scp (Host名) :'$GOPATH'/src/golang.org/x/mobile/example/libhello/bin/Hello-debug.apk .

ビルドが成功していれば、Hello-debug.apkを取り出せる。

Dockerイメージを取ってくるところまでをスクリプトにしておきたいが何を使うのがよいのかわからない。ここまで書いててわからないことだらけなのがやばい。いつかわかるようになったら追記するかもしれない。

とりあえず環境はできた。自分のアプリをビルドできたかどうかはまたいつか書く。

*1:pullした後にbuildする?よくわからない。