まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

タグ:raspberrypi

2017年6月の Raspbian のアップデートに合わせて PIXEL for PC(PC / Mac 用の Raspbian、わかりやすく言うと「パソコン版のラズベリーパイ」)も新しくなりました。以前のものは専用の Live CD だけが提供されていたのですが、現在のバージョンではハードディスク(仮想ディスク)へのインストールができるようになりました。「デスクトップ Linux 環境推進派」として見逃せないこの環境を早速ためしてみました:
2017073001


まず、今回導入したマシンは以下のようなスペックの仮想マシンです。おそらく実機でも問題ない、はず:
 ハイパーバイザー: KVM on CentOS 6
 仮想CPU: 1
 仮想メモリ: 1GB
 仮想ディスク: 10GB

まず最新の PIXEL for PC をダウンロードします。僕が今回使ったのはこの 2017/06/22 版の iso イメージです(2GB ほどあります):
http://downloads.raspberrypi.org/rpd_x86/images/rpd_x86-2017-06-23/2017-06-22-rpd-x86-jessie.iso


このイメージを使って仮想マシンを作成して起動します。実機の場合は iso を DVD に焼いて、その DVD をドライブに入れて起動することだと読み替えてください。なお(後でわかることですが)PIXEL for PC は Debian 8 ベースなので、仮想マシン作成時の OS の種類とバージョンは Debian 8 に相当するものを指定しています:
2017073002


なお作成時のオプションとして、(今回は)アーキテクチャに 64bit 版を選択しました。このあたりは実際に導入する環境に合わせてください:
2017073003


そんなこんなで ISO から起動します。最初に表示されるブートメニューでは "Graphical install" を選択しました:
2017073004


GUI インストーラーが起動します(この右上に "Debian 8" って表示されてますね)。最初にキーボードの種類を選択します。ここでは日本簿キーボードである "Japanese" を選択しました。選択後、 "Continue" で次の画面へ:
2017073001


ここで ISO をイメージを探して、そこから色々ロードして、・・・と少し待ちます:
2017073002


ここからが本格的なインストールオプションの指定になります。まずはインストール先ディスクとボリュームを指定します。僕はデフォルトの "use entire disk" を選択しましたが、LVM(論理ボリュームマネージャー)や暗号化 LVM を使う場合は適宜指定します。終わったら "Continue" :
2017073003


次にインストール先ディスクの選択を行います。この例ではディスクは1台しかないので、その1台のディスクを選択して "Continue" :
2017073004


選択したディスクのパーティショニングを指定します。ここでは(ディスクが大きくもないので)デフォルトの "All files in one partition"(全ファイルを1つのパーティションにコピー)を選択しています。そして "Continue":
2017073005


スワップ領域と合わせたパーティショニングの情報が表示されます。この内容で問題がなければ "Finish partitioning and write changes to disk" を選択して "Continue":
2017073006


ディスクに変更の書込みを行う直前の確認画面です。変更を行う場合は "Yes" を選択して "Continue":
2017073007


この後はパーティションのフォーマットが行われ・・・:
2017073008


インストール(ファイルコピー)が開始されます。環境にもよりますが、しばらく(数十分程度)待ちます:
2017073009


このような(GRUB がなんたら・・)画面になればファイルコピー完了はもうすぐです:
2017073001


ファイルコピーが済んだら最後に GRUB のインストールを行います。この画面では "Yes" を選択して "Continue" :
2017073002


GRUB のインストール先ディスクを指定します。今回は1つしかないので、その1つを選択して "Continue":
2017073003


最後のインストール作業が行われ・・・:
2017073004


この画面になったら再起動前にドライブに挿入している DVD(iso)を取り外します。iso の場合は仮想ドライブから iso ファイルを切断します。そして最後の "Continue" :
2017073005


最後に後処理が行われ、自動的に再起動がかかります:
2017073006


PIXEL の再起動がかかった直後はこんな画面になります:
2017073001


その後、おなじみのラズベリーアイコンが表示され・・・:
2017073002


PIXEL のデスクトップ画面が起動します! あのラズベリーパイではなく、(仮想)PC 上で Raspbian OS が起動しました。もちろん Raspbian OS 同様に利用できます:
2017073003


PIXEL でも標準で Scatch などは導入済みですぐに使い始めることができます。一方で Node-RED などは別途導入が必要なので、全く同じ構成というわけではなさそうです:
2017073004


もともと Debian っぽく使えていた Raspbian ですが、マシンの基本スペックが高いぶんだけ PIXEL の方が快適に感じるかもしれません。日本語化も含めたインストール作業後の諸設定はまた別途。


Google が提供する機械学習ライブラリ TensorFlow公式にはラズベリーパイ用のモジュールは用意されていませんが、ラズベリーパイ向けのパッケージを作って公開されているものを見つけました:
https://github.com/samjabrahams/tensorflow-on-raspberry-pi


実際に導入してみた手順を紹介します。なお以下の情報は 2017/Jul/19 時点のものであり、実際に試した時の環境は以下のとおりです:
ハードウェア: Raspberry Pi 3 Type B
OS: Raspbian GNU/Linux 8.0(Jessie)
Linux カーネル: 4.9.28
TensorFlow: 1.1.0


【Pythonのインストール】
Python 2.7 または 3.3 以上が必要です。自分の環境では標準で 2.7 がインストールされていたので、これをそのまま使うことにしました。というわけで、以下の手順は Python 2.7 用のものです。


【pip 他のインストール】
TensorFlow 本体のインストール時に必要な pip や開発用依存モジュールをまとめてインストールします:
$ sudo apt-get update
$ sudo apt-get install python-pip python-dev

【TensorFlow のインストール】
ラズパイ用の TensorFlow 1.1.0 をダウンロードし、pip でインストールします:
$ wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/releases/download/v1.1.0/tensorflow-1.1.0-cp27-none-linux_armv7l.whl
$ sudo pip install tensorflow-1.1.0-cp27-none-linux_armv7l.whl

wheel パッケージが展開され、各種ライブラリ含めたビルドが行われます。実際には結構な時間がかかる作業です。


【mock ライブラリの再インストール】
最後に mock ライブラリの再インストール(一度削除して、もう一度インストール)が必要とのことで、その作業を行っておきます:
$ sudo pip uninstall mock
$ sudo pip install mock

【動作確認】
クラスメソッド様のサイトに「TensorFlow 版ハローワールド」的なサンプルプログラムがあったので、これをそのまま動かしてみます:
TensorFlowで Hello Worldを動かしてみた&その解説

テキストエディタで以下の内容を編集し、hello-tf.py という名前で保存します:
# hello-tf.py
import tensorflow as tf
import multiprocessing as mp
 
core_num = mp.cpu_count()
config = tf.ConfigProto(
    inter_op_parallelism_threads=core_num,
    intra_op_parallelism_threads=core_num )
sess = tf.Session(config=config)
 
hello = tf.constant('hello, tensorflow!')
print sess.run(hello)
 
a = tf.constant(10)
b = tf.constant(32)
print sess.run(a+b)

これを Python で実行します:
$ python hello-tf.py
hello, tensorflow!
42

青字のような結果が出力されれば、とりあえず動作していることが確認できました。


 

コンテナ環境のスタンダードともいえる docker が、いつの間にかラズパイでも動くようになってました:
DOCKER COMES TO RASPBERRY PI

2017070701


動くようになった当初は導入方法も(コマンドが用意されたり、専用イメージが用意されたり、・・)色々あったようですが、現状では IA 環境と同様の方法でインストールできるようになっていました。具体的にはこの(curl と sh を使った)コマンドだけで導入できます:
$ curl -sSL https://get.docker.com | sh

ただ、この方法で導入しただけだと root ユーザーでないと動かせません。通常の(非 root )ユーザーのままで docker を使うには、そのユーザーを docker グループに所属させる必要があります。具体的には以下のコマンドを実行した上で再ログインすると有効になります(pi ユーザーの場合の例です):
$ sudo usermod -aG docker pi

実際にいくつかのコマンドを実行してみました。まずは docker 環境の確認:
$ docker info
Containers: 1
 Running: 0
 Paused: 0
 Stopped: 1
Images: 2
Server Version: 17.05.0-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 9048e5e50717ea4497b757314bad98ea3763c145
runc version: 9c2d8d184e5da67c95d601382adf14862e4f2228
init version: 949e6fa
Kernel Version: 4.9.28-v7+
Operating System: Raspbian GNU/Linux 8 (jessie)
OSType: linux
Architecture: armv7l
CPUs: 4
Total Memory: 923.4MiB
Name: raspberrypi
ID: TI35:OH7M:MCCS:PUBJ:RFNY:O2LP:MA6F:CECD:3BUW:7NFL:LSV2:A3FO
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

WARNING: No swap limit support
WARNING: No cpu cfs quota support
WARNING: No cpu cfs period support
WARNING: No cpuset support

↑docker 17.05 が動いていることが分かりました。あと分かっていたことですがメモリは 1GB ・・

ラズパイ(というか ARM )で使えるコンテナを探してみました:
$ docker search armhf-
NAME                                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
container4armhf/armhf-alpine                       Automatically built base images of Alpine ...   67                   [OK]
container4armhf/armhf-busybox                      Automated build of Busybox for armhf devic...   8                    [OK]
orax/alpine-armhf                                  Daily built Alpine-Linux Docker image for ...   7                    [OK]
forumi0721alpinearmhf/alpine-armhf-transmission    alpine-armhf-transmission                       3                    [OK]
forumi0721alpinearmhf/alpine-armhf-minidlna        alpine-armhf-minidlna                           3                    [OK]
forumi0721alpinearmhf/alpine-armhf-nginx           alpine-armhf-nginx                              2                    [OK]
forumi0721alpinearmhf/alpine-armhf-tvheadend       alpine-armhf-tvheadend                          2                    [OK]
forumi0721alpinearmhf/alpine-armhf-jenkins         alpine-armhf-jenkins                            2                    [OK]
forumi0721alpinearmhfbuild/alpine-armhf-gpio-bpi   alpine-armhf-gpio-bpi                           1                    [OK]
forumi0721alpinearmhf/alpine-armhf-gogs            alpine-armhf-gogs                               1                    [OK]
forumi0721alpinearmhf/alpine-armhf-samba           alpine-armhf-samba                              1                    [OK]
forumi0721alpinearmhf/alpine-armhf-owncloud        alpine-armhf-owncloud                           1                    [OK]
forumi0721alpinearmhf/alpine-armhf-vsftpd          alpine-armhf-vsftpd                             1                    [OK]
forumi0721alpinearmhf/alpine-armhf-postgresql      alpine-armhf-postgresql                         1                    [OK]
forumi0721alpinearmhf/alpine-armhf-wordpress       alpine-armhf-wordpress                          1                    [OK]
forumi0721alpinearmhfbuild/alpine-armhf-netatalk   alpine-armhf-netatalk                           1                    [OK]
forumi0721alpinearmhf/alpine-armhf-mariadb         alpine-armhf-mariadb                            1                    [OK]
forumi0721alpinearmhf/alpine-armhf-certbot         alpine-armhf-certbot                            1                    [OK]
forumi0721alpinearmhf/alpine-armhf-noip-curl       alpine-armhf-noip-curl                          0                    [OK]
forumi0721alpinearmhf/alpine-armhf-nodejs          alpine-armhf-nodejs                             0                    [OK]
forumi0721alpinearmhf/alpine-armhf-scepg           alpine-armhf-scepg                              0                    [OK]
forumi0721archarmhf/arch-armhf-dev                 arch-armhf-dev                                  0                    [OK]
forumi0721ubuntuarmhf/ubuntu-armhf-dev             ubuntu-armhf-dev                                0                    [OK]
forumi0721alpinearmhf/alpine-armhf-dev             alpine-armhf-dev                                0                    [OK]
forumi0721debianarmhf/debian-armhf-dev             debian-armhf-dev                                0                    [OK]


そんなに数は多くないけど、nginx やら jenkins やら wordpress やら mariadb やら・・・基本的なのは揃ってそうです。


ラズパイはメモリが 1GB しかないので、そもそも docker を動かすにはいろいろ厳しい環境だとは思いますが、一方でケースや SD カード含めて 6~7000 円程度で docker 環境を揃えることができてしまう、ということでもあります。今度はこれのクラスタリングにも挑戦してみようかな・・・

Raspberry Pi3 Model B ボード&ケースセット 3ple Decker対応 (Element14版, Clear)




小型コンピュータである Raspberry Pi(以下「ラズパイ」)のデスクトップ環境をラズパイ以外にも提供するプロジェクト "PIXEL" 、その x86(i386) 版が公開されました:
PIXEL for PC and Mac

まだ実験的な段階であり、バージョン番号にも日付が使われている状態です。僕がダウンロードしたものは 2016-12-13 時点のものでした。デフォルトで LibreOfficeChromium ブラウザ、Scratch を含む各種プログラミングによる統合開発環境が搭載されており、最低限以上のデスクトップ環境になっていました:
2016122501


ラズパイはもともと教育用途に開発された経緯があり、低スペックなマシンでもある程度動作することを目標にしていました。その考え方は PIXEL にも受け継がれているようで、古い PC や Mac 環境を蘇らせることができるかもしれません。

現時点では PIXEL のトップページからブート可能な iso がダウンロードできるような形で公開されています。こいつを DVD や USB メモリに保存してそこから起動するか、あるいは仮想環境下でこの iso を指定してブートするだけです。ハードディスクへのインストールして簡単に起動できるような環境はまだ提供されていない模様ですが、今手元で使っている環境に影響を与えずに試せるようなものが提供されている、と考えられます。

日本語環境についてはカスタマイズで可能なように見えますが、その方法はまた別の機会に。


スウェーデン発祥の世界最大の家具量販店 "IKEA(イケア)"。ここは毎年ジンジャーブレッドハウスコンテストを開催しています:
https://www.smartcontest.jp/system/ikeafoodcontest/pc/

2016122301


イケア店内でも売られているジンジャーブレッドハウスキットを使ったデコレーションコンテストです:
2016122302


板状のジンジャーブレッドを組み立てて家を作って、デコレートして、写真に撮って、その出来栄えを競い合う、というものです。昨年の応募作品を見ると信じられないくらいにレベルが高い・・・
2016122303


もともとこのコンテストを知っていたわけではないのですが、たまたま近所の TOKYO BAY 店(旧船橋店)で実物を見かけた時、ふと
  「この家、ラズベリーパイがちょうど入るくらいのサイズなんじゃね?」
とアレなアイデアが浮かんでしまったのでした。。

いやでもクッキーだし、粉とかラズパイみたいな精密機械にいい影響があるわけないし、何より食べ物を粗末にするのはよくないし・・・うーん、、、


行けばわかるさ!
IMG_0082


ジンジャーブレッドハウスを作るのは初体験です。軽く「組み立てるだけだよね?」と考えて購入しましたが、その「組み立てるだけ」が難しいのなんのって。。 自分は一応は大工の息子ですが、そのDNAはもう残ってないと実感しました(苦笑)。屋根が自分の重みで落ちてきちゃって、、、みんなどうやって固定させるんだろ・・・

苦労しながらもなんとか家が家の形になってきました。外から見たお家の中の様子。一瞬「業務用キッチン?」と見間違えそうですが、USB ポート x 4です:
IMG_0083


煙突立てて、サンタ人形を載せて、外観は完成。なんかケーブルが見えてますが気のせいです:
IMG_0085


気のせいなケーブルをコンセントに挿すと、家の中にほのかな明かりが灯ります。意外と悪くないかも!(慣れない創作作業で結構苦労したせいか、この辺りから判断基準がおかしくなってるかもしれません):
IMG_0086


ラズパイはもちろん無線 LAN で Linux サーバーとしても稼働中なので、GPD WIN 機から ssh で接続してみました。このゲーム機みたいな PC から家の中の様子を覗いてるイメージです:
IMG_0091


最後にシュガーとグミでデコレーションを追加。本当は砂糖の粉雪を降らせたかったのですが、さすがにラズパイの動作への影響と、何より危険だと思ったので断念しました。GPD WIN から IBM Bluemix の Node-RED スターター環境にアクセスして、この家(ラズパイ)からのセンサーデータを取得できるようにしました。わかりにくいのですが、家の中の状態をこの PC から監視しています。一応これが完成品です(コンテストにはこの写真で応募する予定w):
IMG_0097


微妙なタイミングを測って、ラズパイの LED が2つ(赤と緑)点灯した瞬間を撮影してみました。僕の脳内では少女とその両親が、キャンドルの周りで神様にお祈りをしている姿まで見えています:
2016122300


お約束ですが、この後美味しくいただきます!

なお、ジンジャーブレッドハウスコンテストへの投票はこちらから。よろしくお願いします(笑):
ジンジャーブレッドハウスコンテスト | IKEA FOOD


Happy Merry Christmas!

このページのトップヘ