自宅開発環境のアップデート

自宅開発環境アップデートです。
今年も忘れずに、こまめにアップデートします。自分への覚書を残しておきます。


Ubuntuアップデート
VirtualBox上のEclipse等を詰め込んだ、Ubuntu開発環境をアップデート。
デスクトップ左側のランチャーの1番上の「unity-dash」アイコンをクリック→「update」と入力→「ソフトウェアの更新」で手動アップデートします。
Ubuntu15.10→16.04にアップグレード。特に問題なく終了。


Hyper-V Serverアップデート
Hyper-V ServerのWindows Updateを実行。特に問題なく終了。
Hyper-V上のCoreOSは、下記コマンドで899.15.0→1185.5.0にアップデート。特に問題なく終了。

$sudo systemctl unmask update-engine.service
$sudo systemctl start update-engine.service
$update_engine_client -check_for_update
$sudo update_engine_client -update

ラズベリーパイ ゼロを個人輸入してみた

今更ながら、ラズベリーパイ ゼロを個人輸入してみました。
日本では正式に販売していないそうです。
Amazonで、個人輸入したのが売ってますけど。


海外サイトの在庫は、下記URLで確認できます。
最近は、供給が安定してきたのか、在庫切れになる事が少なくなってきました。
http://whereismypizero.com/


pimoroniで購入してみました。
Raspberry Pi Zeroの購入は一人一個までの購入制限があります。
送料が一番安い「international Standard」を選択して、合計で1200円程でした。


ですが… 一ヶ月経っても、届きません…
どうやら、住所の記入方法を間違えてしまったようです。
ラッキング番号もないので、問い合わせもできません…しまった。


今度は、住所の記入方法を間違えないように注意して…
送料が3000円とすごく高いですが、トラッキング番号付きで一番早く送ってくれる「UPS Saver」で、
注文してみたところ、5日で届きました。はやい。


ラッキングも詳細でした。
United Kingdom
 →Sheffield, United Kingdom
 →Castle Donnington, United Kingdom
 →Koeln, Germany
 →Shenzhen, China
 →Osaka, Japan


イギリスから、ドイツのケルン空港と中国の深セン空港を経由して、関西空港に着いてました。
ケルン空港と深セン空港に、UPSアメリカの運送業者)のハブ空港があるみたいで、ココを経由するみたいですね。
また、関西空港に着いてからは、日本のクロネコヤマトが配送していました。


ちなみに、UPSは土日配送しないそうです。
今回、土日を含んでいたので、5日かかりましたが、
土日含まなければ、3-4日で届きそうです。送料高いですけど。


届く事がわかったので…
今度は、トラッキング番号付きで一番安い、「Royal Mail Tracked & Signed」で再度、注文してみました。
届くのに、1-2週間くらいかかりそうですが・・・


ラズベリーパイ ゼロのケース×2
ラズベリーパイのカメラ×1
ラズベリーパイ ゼロ×1
で、送料込みで5000円くらいでした。
日本で買ったら、総額8000円くらいですかね。ちょっとお安く購入できます。


ちなみに、16,000円以内の買い物であれば、関税はかからないそうです。
来年になったら、そろそろ日本での発売も開始すると思うので、
スイッチサイエンスさんや秋月電子さんで購入できるようになるといいですね。

MonacaでiOSアプリを作ってみる

Monacaで、iOSアプリを作成してみます。


Monaca - HTML5ハイブリッドアプリ開発プラットフォーム
https://ja.monaca.io/


HTML5JavaScriptで、スマートフォンアプリ(iOSAndroidWindows)が作成できます。
国産ツールなので、ドキュメントが日本語でわかりやすいです。
無料アカウントでも、アプリが作成できますので、早速、試してみました。


Monacaクラウドを使用すれば、ブラウザ上で開発できますので、ツールをインストールする必要もありません。


IoT調査で、リモコン遠隔操作と各種センサー値グラフ表示のクライアント部分を、HTML+JavaScript(Milkcocoa)で作成していました。
それをそのまま、Monacaに移植してみました。


iOS向けMonacaデバッガーをiPhoneにインストールして、表示してみます。
画面下部のタブバーで機能を切り替える事ができます。※タグを記載するだけで簡単に実装できました。


ここまで、無料アカウントでできました。Macも必要ありません。
アプリを配布するには、Appleデベロッパプログラムに参加する必要があります。(1万円くらいの年会費がかかります。Macは必要なのかな?)

⑦CoreOSでDockerしてみる(PrivateなDockerレポジトリ⇒Jenkinsの場合)

稼働しているJenkinsのDockerコンテナでイメージを作成して、
Docker Registry経由で、他のCoreOSに環境を移してみます。


■起動中のDockerコンテナでDockerイメージを作成

docker stop jenkins
docker commit jenkins localhost:5000/jenkins


■マウントとしたホスト側のファイル
docker commitでは、マウントとしたホスト側のファイルは保存されません。
JENKINS_HOMEがホスト側にあるので、ZIPで固めて、他のCoreOSに持っていきます。

cd /home/core
zip -r jenkins_home.zip jenkins_home


■Docker Registryに登録
Docker Registryにpushします。

docker push localhost:5000/jenkins

Docker Registryに登録されたイメージ一覧は、WEBブラウザから確認できます。
http://:5000/v2/_catalog
{"repositories":["jenkins"]}


■クライアントCoreOSの設定変更
他のCoreOSからDockerイメージをpullすると、HTTPS通信が必要なため、エラーになります・・・
SSL証明書を発行するのは面倒なので、insecure-registryオプションをつけてHTTPアクセスに変更します。

CoreOSのインストール時に、cloud-config.ymlに下記を追記しておきます。

coreos:
  units:
    - name: docker.service
      drop-ins:
        - name: 50-insecure-registry.conf
          content: |
            [Service]
            Environment=DOCKER_OPTS='--insecure-registry="<Docker RegistryのIPアドレス>:5000"'


■Docker RegistryからDockerイメージを取得
Docker RegistryからDockerイメージを取得します。

docker pull <Docker RegistryのIPアドレス>:5000/jenkins


■ホスト側のファイルを配置
ZIPで固めたJENKINS_HOMEを配置します。

cd /home/core
unzip jenkins_home.zip
sudo chown -R 1000 /home/core/jenkins_home


■Dockerコンテナの起動
ホスト側のJENKINS_HOMEをマウントして、Dockerコンテナを起動します。

sudo docker run --restart=always --name jenkins -d -p 8080:8080 -v /home/core/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime:ro
 -e JAVA_OPTS='-Duser.timezone=Asia/Tokyo -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8' <Docker RegistryのIPアドレス>:5000/jenkins


もっとスマートな方法があるような気がしますが・・・とりあえずやりたい事はできました。
http://:8080/ にブラウザからアクセスします。
保存した状態のDockerコンテナが起動できていますね。設定を変更した、Jenkinsが起動しています。

⑥CoreOSでDockerしてみる(PrivateなDockerレポジトリ⇒EPM-Xの場合)

稼働しているEPM-XのDockerコンテナでイメージを作成して、
Docker Registry経由で、他のCoreOSに環境を移してみます。


■起動中のDockerコンテナでDockerイメージを作成

docker stop epm-x
docker commit epm-x localhost:5000/epm-x


■Docker Registryに登録
Docker Registryにpushします。

docker push localhost:5000/epm-x

Docker Registryに登録されたイメージ一覧は、WEBブラウザから確認できます。
http://:5000/v2/_catalog
{"repositories":["epm-x"]}


■クライアントCoreOSの設定変更
他のCoreOSからDockerイメージをpullすると、HTTPS通信が必要なため、エラーになります・・・
SSL証明書を発行するのは面倒なので、insecure-registryオプションをつけてHTTPアクセスに変更します。

CoreOSのインストール時に、cloud-config.ymlに下記を追記しておきます。

coreos:
  units:
    - name: docker.service
      drop-ins:
        - name: 50-insecure-registry.conf
          content: |
            [Service]
            Environment=DOCKER_OPTS='--insecure-registry="<Docker RegistryのIPアドレス>:5000"'


■Docker RegistryからDockerイメージを取得
Docker RegistryからDockerイメージを取得します。

docker pull <Docker RegistryのIPアドレス>:5000/epm-x


■Dockerコンテナの起動
取得したDockerイメージで、Dockerコンテナを起動します。

sudo docker run --restart=always --name epm-x -d -i -t -p 80:80 <Docker RegistryのIPアドレス>:5000/epm-x


Dockerサービス起動後に、Docker execコマンドでサービスを起動するようにします。

sudo vi /etc/systemd/system/epm-x.service
sudo systemctl enable /etc/systemd/system/epm-x.service
#/etc/systemd/system/epm-x.service
[Unit]
Description=EPM-X Service
After=docker.service
Requires=docker.service

[Service]
ExecStart=/usr/bin/docker exec epm-x bash -c '/etc/init.d/postgresql start && /etc/init.d/httpd start && /etc/init.d/ipftools-tomcat start'

[Install]
WantedBy=multi-user.target


http:///trac/sample_project にブラウザからアクセスします。
保存した状態のDockerコンテナが起動できていますね。設定を変更した、EPM-Xが起動しています。

⑤CoreOSでDockerしてみる(PrivateなDockerレポジトリ)

Dockerイメージは、Dockerレポジトリに格納することで、外部に公開することができます。
「docker pull」で、公開されたDockerイメージを利用できます。
Publicなレポジトリとして、Docker Hub等があります。
https://hub.docker.com/


社内業務で使用するDockerイメージは、Publicなレポジトリで外部公開できませんので、
Docker Registryで、PrivateなDockerレポジトリを立てて、社内Lanのみに公開します。


■Docker Registryの起動
下記コマンドで、Docker Registryを起動します。

docker run --restart=always --name registry -d -p 5000:5000 -v /var/registry:/home/core/registry registry:2


・[--restart=always]オプション指定で、OS起動時に自動起動します。
・[-v]オプション指定で、Dockerコンテナが停止しても、/home/core/registryにデータが残ります。(データの永続化)


■Docker Registryに登録
タグ名を付与して、Docker Registryにpushします。

docker tag docker.io/jenkins localhost:5000/jenkins
docker push localhost:5000/jenkins
docker images localhost:5000
# localhost:5000/jenkins    latest              c01375678364        6 days ago          711.8 MB


Panamaxからも、ローカルレポジトリが検索できます。
[MANAGE]→[Registories]を選択し、Docker Registryを検索対象に加える。


検索すると、ローカルレポジトリ(Docker Registry)のDockerイメージも表示されます。

④CoreOSでDockerしてみる(Dockerを使って、EPM-Xをインストール)

Dockerを使って、EPM-Xをインストールしてみます。


■EPM-Xとは?
IPA独立行政法人 情報処理推進機構)が作成した、定量的なプロジェクト管理を支援するツールです。
TracRedmine)やSubVersion等が入っています。
http://sec.ipa.go.jp/tool/ipf/index.html


EPM-Xの公式Dockerイメージは公開されていないため、Dockerイメージを作ってみます。
稼働環境であるCentOS5のDockerイメージを元にして、作成します。


■Centos5のDockerイメージを元にして、EPM-XのDockerイメージを作成する

docker pull centos:5
docker run -i -t -d centos:5 /bin/bash
docker ps
docker attach <コンテナのID>
# yum install wget
# yum install openssh-clients ※EPM-Xのインストールに必要なので、とりあえず入れておく
# wget http://ppma.jp/DataFolder/%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89/ipftools-trac-1.0-setup-centos.x86_64.bin
# /bin/bash ./ipftools-trac-1.0-setup-centos.x86_64.bin
# Ctrlを押したまま、pq で抜ける(exitするとコンテナが終了し、変更が破棄されるので注意)
docker commit <コンテナのID> centos/epm-x
docker run --restart=always --name epm-x -d -i -t -p 80:80 centos/epm-x


・[dcoker pull 〜]でCentOS5の仮想イメージを取得します。
・[dcoker run 〜]でCentOS5の仮想イメージからコンテナを起動します。
・[docker ps]でコンテナのIDを確認します。
・[dcoker attach 〜]でCentOS5の仮想コンテナ内でコマンドを実行し、EPM-Xをインストールします。
・[docker commit 〜]で現在のコンテナの状態を保存します。(EPM-Xがインストールされた状態が保存される)
・[docker commit 〜]で保存した仮想イメージから、[dcoker run 〜]で、コンテナを起動します。


EPM-Xでは、ApacheTomcat、PostgresSQLのサービスを起動する必要があります。
通常ならば、chkconfigで自動起動を設定すれば良いのですが、Dockerコンテナを起動しても、サービスは起動してくれません・・・
Dockerコンテナ(のOSイメージ)は、initプロセスではなく、直接プロセスを実行する為、chkconfig on/offの自動起動設定が呼ばれないようです・・・

# chkconfig postgresql on
# chkconfig httpd on
# chkconfig ipftools-tomcat on


その為、Docker execコマンドで、仮想コンテナ内でコマンドを実行し、サービスを起動します。

docker exec epm-x bash -c '/etc/init.d/postgresql start && /etc/init.d/httpd start && /etc/init.d/ipftools-tomcat start'


毎回、Docker execコマンドを実行するのは面倒なので、
Dockerサービス起動後に、Docker execコマンドを実行するように設定します。
これで、仮想コンテナ内のサービスも自動起動するようになります。

sudo vi /etc/systemd/system/epm-x.service
sudo systemctl enable /etc/systemd/system/epm-x.service
#/etc/systemd/system/epm-x.service
[Unit]
Description=EPM-X Service
After=docker.service
Requires=docker.service

[Service]
ExecStart=/usr/bin/docker exec epm-x bash -c '/etc/init.d/postgresql start && /etc/init.d/httpd start && /etc/init.d/ipftools-tomcat start'

[Install]
WantedBy=multi-user.target


http:///trac/sample_project にブラウザからアクセスします。
OSにアプリケーションをインストールした状態で、仮想コンテナを作成することもできるので、便利ですね。
仮想コンテナを配置するだけで、WEBアプリケーション等を起動することができます。