Raspberry Piに RASPBIAN JESSIEをインストールする

久しぶりにRaspberry Piを使おうと思い、ついでに最新のOSを入れてやれってことで、作業メモ。

ダウンロード

ここからダウンロードする

Download Raspbian for Raspberry Pi

普通にZip形式のほうをダウンロードすると残り1時間とか出るので、TorrentファイルをダウンロードしてMac用のBitTorrentクライアントを使ってダウンロードした。 これだと、数分でダウンロードが終わる。

SDカードの初期化

ディスクユーティリティーを使ってFat形式で初期化する。 一旦ボリューム名を JESSIE で作りました。

JESSIEをSDカードに書き込む

$ df

Filesystem                        512-blocks      Used Available Capacity  iused   ifree %iused  Mounted on
/dev/disk0s2                       488555536 477290304  10753232    98% 59725286 1344154   98%   /
devfs                                    372       372         0   100%      647       0  100%   /dev
map -hosts                                 0         0         0   100%        0       0  100%   /net
map auto_home                              0         0         0   100%        0       0  100%   /home
localhost:/umin04NXvaENoWAQ_HarOu  488555536 488555536         0   100%        0       0  100%   /Volumes/MobileBackups
/dev/disk1s1                        15542528      5056  15537472     1%        0       0  100%   /Volumes/JESSIE

関係ないが、メインのストレージのinodeが98%消費してるじゃないか。。

一度アンマウント

$ sudo diskutil umount /Volumes/JESSIE/

ダウンロードして解答した 2015-09-24-raspbian-jessie.img があるディレクトリに移動して、以下のコマンドを実行する /dev/disk1s1 はdfコマンドで調べた時の値の disk1s1 の頭に r を付け、s1を消した /dev/rdisk1 を指定する

$ sudo dd bs=1m if="./2015-09-24-raspbian-jessie.img" of="/dev/rdisk1"

4125+0 records in
4125+0 records out
4325376000 bytes transferred in 410.162326 secs (10545522 bytes/sec)

これでOSの準備ができたので、HDMI、LAN、USBキーボード、USBマウス、micro USB(電源)を繋いで起動します。

f:id:sparkgene:20151108105607j:plain

初期設定

初回はGUIのデスクトップが表示されるので、リモート接続できるようにSSHを有効にします。

メニューの Preferences > Raspberry Pi Configuration から設定出来ます。 (コマンドラインからも設定できるけど、せっかくマウス繋いだので)

f:id:sparkgene:20151108105616j:plain

f:id:sparkgene:20151108105625j:plain

次に、ターミナルを起動してIPアドレスを調べます。 IPアドレスが分かったら、リモートからSSHで入って、以降の作業はリモートで行います。

ユーザーは pi パスワードは raspberry で入ります。

ssh pi@192.168.0.13
pi@192.168.0.13's password:

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Nov  8 10:31:30 2015

sudo raspi-config と入力して設定モードを起動します

f:id:sparkgene:20151108103921p:plain

ファイルシステムの拡張

初期状態だとSDカードのサイズが大きくても2Gでパーテションが作られているようなので、Expand Filesystem のメニューを選んで、拡張します

ブート後はCUIモードで起動

リモートで繋いで使うのでGUIは使わないから、起動後はCUIモードになるように設定します。 Boot Options を選んでCUIを指定します。

以上で、初期設定が終わりました。

最近はEdisonを触ることのほうが多いので、久しぶりにイジってみたら、OSのインストールやら、初期設定画終わるところまでは、結構大変(USBキーボード、USBマウスが必要だったりと)ですね。。。

Amazon EchoとAmazon Alexaに感じる可能性

re:Invent 2015AWS re:Invent 2015に参加してきました。

(参加エントリーは会社ブログにいっぱい上げたけど、こっちにはまだ書いてないので、そのうち書く)

以前から気になっていてqiitaにも書いたのですが、re:InventのセッションでもAmazon EchoAmazon Alexa系のものに参加してきました。

qiita.com

何に興味があったかというと、Lambdaファンクションを使うことで、自由にAlexa Skill(機能)をAmazon Echoに足せるということです。 しかも、このSkilは公開することができ、他の人も自分のAmazon Echoで使うことが出来ます。

つまり、自分が作ったサービスを音声で利用することが可能になるということですね。

ちなみに、Amazon Echo 自体は大きめの水筒ぐらいのサイズで、机の上にもちょこんと置けるような感じです。

f:id:sparkgene:20151017121048j:plain

参加したセッション

AWS + ASK: Teaching Amazon Echo New Skills

このセッションはワークショップ形式のもので、冒頭から「通常は5時間使って行うものを2時間でやります!頑張ってついてこいよ!」と言われました(苦笑)

ワークショップではサンプルを使って、Alexa Skillの作り方、Amazon Echoへのひも付けを駆け足で説明した後、自分たちでSkillを作ってみましょうとなりました。

サンプルをAmazon Echoで試してみるとこんな感じで、自分の好きな色を質問してもらい、それを答えると覚えてくれて、好きな色を聞くと答えてくれるものです。

youtu.be

Lambdaのファンクションの作成から登録を一通り学べるワークショップでしたので、これで自作のSkillを作ることが可能になります。

Extending Alexa’s Built-in Skills – See How Capital One Did It

Capital One社が実際にAmazon Echoを使って自社のアプリケーションと連携して、カードの利用情報を確認するといったSkillを作った際の話を聞きました。

www.slideshare.net

アプリのアカウントとAmazon Echoのひも付け方法など、実際に自社サービスを連携させる際のワークフローの参考になる話も聞けました。

セッションの中での興味深かったのは、Webやアプリと違い音声認識向けのUI設計が必要だという話でした。

Webであればたくさんの選択肢をラジオボタンやドロップダウンで1つだけ選択させ、次のアクションに進めることが出来ます。 しかし、音声の場合はすべての選択肢を列挙しても、ユーザーはすべてを聴き終えた頃には最初の話を忘れてしまうこともあるので、何を選んだら良いか分からなくなるとのこと。 最も選ばれる3つぐらいの候補を最初の選択肢として挙げておき、それ以外はヘルプを呼び出させることで、全部列挙すると言ったUI設計が必要になるということです。

また、Webであれば読込中をインジケーター等で、視覚的に状態を知ることが出来ますが、音声の場合は処理中はずっと無音となるので、ユーザーからすると何が起きているかが分かりにくく、使いづらいと思われてしまいます。 その為にはすぐレスポンスを返せるように作らなければなりません。

今後の可能性

Alexa SkillはLambdaでも自分のサーバでも提供することが出来ます。 自分のサーバで提供する場合はhttpsが必須となりますが、すでにnode moduleとして作っている人がいたりするので、既存のシステムに連携させることも比較的簡単に出来ると思います。

DevOpsであれば、音声でサーバを増やしたり、サービスのステータスを教えてもらうことも出来ます。 今日の献立に悩んだ時に、おすすめの料理を教えてもらうことも可能です。

Amazon Fire TVではすでに、Amazon Alexaを使って音声でビデオを選んだりすることが可能になっています。

ただし、Amazon Echoはまだ英語にしか対応していません。 シアトルでのスペシャルセッションでは、ドイツ語、イギリス英語への対応は進めているとの話はありました。 ワークショップでは是非日本語も対応してとお願いしておきましたw

速く国内で発売して欲しいですね。

最後に

Amazon Echoの可能性はこの動画からも感じ取れると思います。

www.youtube.com

nginx-rtmp-moduleでお試しLive配信環境を作る

USTREAMYouTube Liveの様に、リアルタイムで動画を配信しながら視聴できる一連の環境づくり&設定についてまとめてみた。
お試し環境なので、同時接続が辛いとか色いろあります)

配信サーバの準備

Real Time Messaging Protocol (RTMP) を扱うために、オープンソースで公開されているnginx-rtmp-moduleを使います。
今回は映像を受信して、配信するサーバは同じサーバとして、EC2(Amazon Linux)上に用意して試します。

sudo su
yum update
yum groupinstall "Development Tools"
yum -y install pcre-devel zlib-devel openssl-devel

cd /usr/local/src/
wget http://nginx.org/download/nginx-1.8.0.tar.gz
sudo wget http://nginx.org/download/nginx-1.8.0.tar.gz
tar -zxvf nginx-1.8.0.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
unzip master.zip
build
cd nginx-1.8.0
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master
make
make install
nginxの設定ファイルにrtmpの設定を追加

/usr/local/nginx/conf/nginx.confの一番最後に以下を追加

rtmp {
   server {
      listen 1935;
      chunk_size 4096;

      application live {
         live on;
         record off;
      }
   }
}

applicationで指定する名称がURLの一部になります。
上記の設定だとURLは、rtmp:///live

設定ができたら、nginxを起動します。

/usr/local/nginx/sbin/nginx

この状態でブラウザからhttp:///にアクセスして、Nginxの起動してますページが表示されればOK。

配信サーバへ映像を送るクライアントを準備

本格的に配信をする人ならLiveShell Proとか使って配信するかもしれませんが、今回はお試しなのでPC上でキャプチャ出来て、配信サーバにアップロードできるオープンソースのソフトを使います。

Open Broadcaster Software

Mac版をダウンロードして起動します。
起動するとこんな感じの画面が表示されると思います(デフォルトではデスクトップをキャプチャする)

配信サーバの指定

右下のボタンの設定をクリックして設定画面を開きます。
次に設定画面の左側の配信を選択します。

配信種別でカスタムストリーミングサーバを選択して、URLに準備したサーバのURLを指定します。
ストリームキーには何らかの文字列を指定します(適当な文字列でもOK)
ここで指定したストリームキーは後で映像を試聴する際のURLで使われます。

映像キャプチャの設定

OBSの最初の画面でソースとなっているコントロールで「+」をクリックすると、追加するソースが表示されるので、映像キャプチャデバイスを選択します。

開かれたダイアログで、新規作成のままOKをクリックすると、Mac Book Proの場合はFaceTime HD Cameraが選べるので、それを選択すると、カメラからの映像が表示されます。

OKをクリックして設定を終了します。

この状態だとソースが画面のキャプチャと映像デバイスの2箇所となっているので、ソースで不要な方を選んで「ー」をクリックして削除します。

音声キャプチャの設定

同様にソースから音声入力キャプチャを追加し、Built-In Microphoneを追加します。

プレイヤーの準備

配信の準備はできたので、最後にプレイヤーを準備します。
video.js v4.2.0からrtmpに対応(beta)したので、こちらを使います。

jsファイルはCDNにホストされたものを使うので、プレイヤーと言っても以下の様なHTMLファイルを準備するだけです。

<!DOCTYPE html>
<html lang="en" class="">
<head>
  <link href="http://vjs.zencdn.net/4.2.0/video-js.css" rel="stylesheet">
  <script src="http://vjs.zencdn.net/4.2.0/video.js"></script>
</head>
<body>
  <video id="rtmp live test" class="video-js vjs-default-skin" controls
   preload="auto" width="640" height="264" data-setup='{}'>
    <source src="rtmp://<ip address>/live/test" type='rtmp/mp4'>
    <p class="vjs-no-js">
      To view this video please enable JavaScript, and consider upgrading to a web browser
      that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>
    </p>
  </video>
</body>
</html>

srcに指定したURLのtestは、先ほどOBSのストリームキーに設定した文字列を指定します。
このファイルをS3など、どこかのサーバに置いて、ブラウザで開きます。

配信

OBSで配信開始ボタンをクリックすると、配信が始まります。
プレイヤー側のブラウザで再生のアイコンをクリックして少し待つと、Live配信されている動画が表示されます。
AU光のネットワークで、配信とプレーヤーのPCを分けてテストしたところ、遅延は3secぐらい)

あとがき

以上で、お試しのリアルタイムの動画配信環境の構築とテストが出来ました。
実際にnginxのサーバがどれくらいの同時視聴に耐えられるかはわかりませんが、ブラウザ3つぐらい開いて試聴するぶんには、負荷の変化もさほどなく遅延も変わらない感じでした。

Grafana + GraphiteでAnnotationsを使ってイベントを可視化する

GrafanaにはAnnotationsという、イベントをグラフ上へ表示する機能があります。
http://grafana.org/docs/features/annotations/

Annotationsのデモ

Annotationsの取得元はいくつか利用可能ですが、データソースとしてGraphiteのEvent
を使う方法について解説します。

Event

GraphiteにはEventと言う情報を保存する仕組みがあります。
しかし探してみても、データを格納する方法については公式ドキュメントで見つからない。

ただ、データの取り出し方については書かれています。
http://graphite.readthedocs.org/en/stable/functions.html?highlight=event#graphite.render.functions.events

こちらのブログで登録方法が書かれているので、そちらを参考に進めます。

Eventの登録

最低限のデータで登録する場合は、以下の様にデータをPostしてあげればいいです。

curl -X POST "http://graphitehost.com/events/" -d '{"what": "fugafuga", "tags": "hoge"}'

Eventの情報が格納されるテーブルはevents_eventで、このテーブルの構造を見ると以下のように定義されてます。

CREATE TABLE "events_event" (
    "id" integer NOT NULL PRIMARY KEY,
    "when" datetime NOT NULL,
    "what" varchar(255) NOT NULL,
    "data" text NOT NULL,
    "tags" varchar(255) NOT NULL
);

テーブル構造から分かるように、さらにwhendataを指定することが可能です。

  • whenは、デフォルトでシステム日付が設定されます
  • dataは、デフォルトでからが設定されます

例えばこんな感じで

curl -X POST "http://graphitehost.com/events/" -d '{"what": "Deploy apps 5", "tags": "deploy", "data": "ここには長い文章が指定できます。"}'

Grafanaの設定

Graphiteに登録されているEventをグラフ上に表示するには、Dashboardの設定から登録します。
Dashboardで設定するように、グラフ単位では指定できないみたいです。

取得するEventの情報を登録します。

  • Name: Annotationの名称
  • Datasource: Graphiteのデータソース
  • Graphite event tags: イベントを登録した時のtag名

登録すると、こんな感じで表示されます。

先ほどのdataに指定した場合は、以下のように表示されます。

Dashboardには複数のAnnotationが登録でき、チェックボックスのON/OFFで表示非表示の切り替えができるので、デプロイ、サーバ追加と言った複数のイベントを登録して表示することで、どのような出来事がきっかけでリソースに変化があったかが一目瞭然となります。

NetflixのVectorを試してみる

Introducing Vector: Netflix's On-Host Performance Monitoring Tool と記事を見かけたので、どんなものか試してみた。

試した環境は、Amazon Linux 2015.03 です

監視対象ホストの準備

メトリックスの収集にPerformance Co-Pilot (PCP)を利用するので、これをインストールします。

コンパイル用のライブラリを一括で入れる
sudo yum -y groupinstall "Development Tools"z
libmicrohttpdを利用するので入れる
sudo yum -y install libmicrohttpd libmicrohttpd-devel
ExtUtils::MakeMakerを利用するので入れる
sudo yum -y install perl-ExtUtils-MakeMaker
pcpをソースからインストール
# 事前にユーザーを作成
sudo groupadd -r pcp
sudo useradd -c "Performance Co-Pilot" -g pcp -d /var/lib/pcp -M -r -s /usr/sbin/nologin pcp

git clone git://git.pcp.io/pcp
cd pcp/
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --with-webapi
make
sudo make install

何故かエラーになる

 sudo service pmcd start

Rebuilding PMNS ... pmnsmerge: error while loading shared libraries: libpcp.so.3: cannot open shared object file: No such file or directory
Rebuilding the Performance Metrics Name Space (PMNS) in /var/lib/pcp/pmns ...
Rebuild: PCP upgrade processing for "root" PMNS changes ...
Rebuild: merging the following PMNS files:
root root_jbd2 root_linux root_mmv root_pmcd root_proc root_root root_xfs
Rebuild: pmnsmerge failed
         "root" has not been changed.
failed (status=1)
Starting pmcd ... /usr/libexec/pcp/bin/pmcd: error while loading shared libraries: libpcp_pmda.so.3: cannot open shared object file: No such file or directory
pmcd_wait: error while loading shared libraries: libpcp.so.3: cannot open shared object file: No such file or directory
/usr/libexec/pcp/bin/pmpost: error while loading shared libraries: libpcp.so.3: cannot open shared object file: No such file or directory
/etc/init.d/pmcd: pmcd_wait failed: exit status: 127

/usr/libexec/pcp/bin/pmpost: error while loading shared libraries: libpcp.so.3: cannot open shared object file: No such file or directory

http-parser が必要っぽいので入れる

sudo yum -y install http-parser

サービスを起動

sudo service pmcd start
sudo service pmwebd start

vectorのインストール

vectorのインストールにはbowerを使うのだが、bowerにインストールにはnpmが必要となるので、インストールしていきます。

sudo yum -y install npm --enablerepo=epel
sudo npm install -g bower
sudo npm install -g gulp

vector本体をインストール&起動

git clone https://github.com/Netflix/vector.git
cd vector/
git checkout stable
bower install
cd app
sudo python -m SimpleHTTPServer 80

意図的に負荷をかけてみると、即座にその状況が反映される

勝手な思い込みで、複数ホストのメトリックスをいい感じにダッシュボードに表示してくれるものなのかと思ってたら、ちょっと違った。

AWS 認定ソリューションアーキテクト – アソシエイト

先日、AWS 認定ソリューションアーキテクト – アソシエイトの認定試験を受けてきてきました。
結果は無事合格。

総合スコア: 83%
内訳
1.0 高可用性、コスト効率、耐障害性、スケーラブルなシステムの設計: 84%
2.0 実装/デプロイ: 80%
3.0 セキュリティ: 75%
4.0 トラブルシューティング: 100%

日頃運用でつかているからか、トラブルシューティングは100%とれたけど、自分でもわかっているがIAM周りの知識の無さが、セキュリティーの点数に出てしまったかなって気がする。

勉強方法

受験料が16,200円と、軽い気持ちで受けて落ちたとなったら結構ヘコむので、念のため事前に情報収集しました。
実際に試験を受けた人のブログをいくつか見て回った所、だいたい以下の様なことがされてました。

  • ワークショップの受講(有料)
  • 模擬試験を受ける(有料)
  • サンプル問題を解く
  • 各サービスの製品の詳細&よくある質問を読む
  • マイスターシリーズのスライドを見る
  • クラウドデザインパターンを読む
  • 書籍を読む(有料)

自分の場合は、いかに安くをモットーに、有料の物は見送りました。
ということで、やれることは、以下のものになります

  • サンプル問題を解く
  • 各サービスの製品の詳細&よくある質問を読む
  • マイスターシリーズのスライドを見る
  • クラウドデザインパターンを読む

・サンプル問題は、どんな感じの問題なのか雰囲気がつかめるし無料なのでぜひやっておくといいです。
http://aws.amazon.com/jp/certification/certified-solutions-architect-associate/

・普段利用していても、サービスの細かい機能まで使っていないことが多いから、「製品の概要&よくある質問」はひと通り目を通しました。
https://aws.amazon.com/jp/documentation/

・マイスターシリーズとクラウドデザインパターンは、普段から見たりしているので特別なことはしませんでした。
http://aws.clouddesignpattern.org/index.php/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8
http://www.slideshare.net/AmazonWebServicesJapan

プロフェッショナル

次のレベルはプロフェッショナルですが、サンプル問題を見るとAWSのサービスに関する知識よりも、もっと実践的な知識を必要とされているのがわかります。
http://aws.amazon.com/jp/certification/certified-solutions-architect-professional/

なかなか厳しいですね・・。
プロフェッショナルはまだいつ受けるか決めてませんが、さすがに模擬試験ぐらいは受けてみようと思いました。
自腹で受けて、落ちたら32,400円って金額はなかなかなものだしね。

JAWSDAYS2015に参加してきた

JAWSDAYSは今回で3度目の参加で、ボランティアスタッフとしては2度目となります。

初回は2013年の時で、セッションの案内とか受付をしてました。その当時だと、同時セッション数も4つぐらいでしたが、今回は倍に増えさらに、AWSかるた、AWS麻雀といった、様々なイベントが開催されていました。

今回お手伝いしたのは、Intel Edisonを使ったハンズオン
自分自身も興味を持って触っているEdisonのセッションということで、正直スタッフをキャンセルして普通に参加したいぐらいの盛り沢山なセッションでした。

事前準備としてhackday担当のスタッフと一緒に50台のEdisonのファームアップデートをやったり、当日はサポートで一日中張り付いていたので、他のセッションを見ることもなく、お弁当にもありつけず、なかなか忙しい感じでしたが、jawsdaysは楽しめました。
(来場者に配っていたAWSのアイコンのマグネットをもらい損ねたのが心残りではありますがw)

今回はPubCrawlも開催され、私はグループ2の会場に参加しました。
グループ2は以下の3社がスポンサーとなり、飲食しつつLTを楽しむ形となってました。
トレンドマイクロ株式会社
・レキサス
・アールスリーインスティテュート

それにしても、EdisonとAWSクラウド)の相性は良いですね。
認証にCognitoを使い、データの受取にはkinesis
データの分析にEC2を使い、データのストレージとしてS3を使う。
普通のWebサービスを公開するよりも多くのAWSサービスを駆使することを考えると、ものすごく面白い。

個人ではEdison breakout boardを使ってますが、手軽に楽しむなら確実に今回のhackdayで使ったIntel Edison Board for Aduino + Grove Starter Kit Plus がお勧めですね。