Part1 みんなでカンタン! Ejectハンズオン
Ejectコマンドユーザー会 あっきぃ ( id:Akkieso3 ) 2014/9/27 出張このべん:猫カフェ×Ejectユーザー会、奇跡のコラボハンズオン!ConoHa by GMO
1
Ejectコマンドユーザー会とは
• CD-‐ROMドライブのトレイ開閉を利用して • トレイに色んなことをさせる工作を作り
• リモートやタイマー等で実行することで
• QoLの向上を試みるユーザーの集いです
• 主にオープンソースカンファレンスで活動
• [Eject ] [検索]
2
ユーザー会のアクティビティ
• 現在約50名(ML参加人数) • Google Groupsへの入会お待ちしています
• OSC等に展示参加するメンバー3人(私を含む)
• 今後の出展予定 – OSC2014 Tokyo/Fall(10/18-‐19)
• OSC初45分セミナー
3
トレイに色んなことをさせる工作
• ハムスターにエサをあげる • エアコンの電源を操作する
• AC電源を操作する
• 除夜の鐘をつく – 去年もやりました
4
VPSでEjectをするとどうなる?
• 物理的には何もおこらない • VPSは仮想マシンだから……
– ConoHaはKVMハイパーバイザで動いている
• 仮想マシンにメディアがマウントされていた場合は仮想的にEject(unmount)される
• 今日のハンズオンでは、VPSから手元のCD-‐ROMドライブをEjectする
5
VPSからEjectする利点
• 自宅でWebサーバーを公開しなくても良い • プロバイダから動的に割り当てられるグロー
バルIPアドレスを気にする必要がなくなる
• ポート開放などの手間がなくなる
• セキュリティリスクの低減
6
仕組みを考えてみよう
• VPSにWeb APIを用意 • ユーザーがVPSのWebにアクセスしてボタンを
押すとAPIがEject可の状態を返すようになる
• 遠隔地にいるマシンが定期的にAPIにアクセスして、Eject可の状態だったらEjectを実行
ConoHa VPS
(1)Web画面から Eject実行
(2)Ejectフラグを取得 (ポーリング)
(3)Eject
7
Twi\erを活用してもできる
• 専用Twi\erアカウントを用意 • ユーザーが専用アカウントにメンションを送る
• 遠隔地にいるマシンがストリーミングAPIによってメンションを受信して、Ejectを実行
• ふぁぼEject( h\p://j.mp/faveject )を参照
Twi\er
(1)Eject用Twitter アカウントにメンション
(2)ストリーミングAPIで メンションを受信
(3)Eject
8
用意するもの
• ConoHa VPS – みなさんCentOS 6.5は用意しました?✌ ՞ਊ ՞)✌
• Raspberry Pi – もしくは常駐させられる適当なマシン
• CD-‐ROMドライブ
• IDE(SATA)-‐USB変換ケーブル
• Web APIの仕組み
9
Eject環境の用意
1. ConoHa VPS上にWeb APIスクリプトを設置 2. Raspberry Piの用意
1. OSインストール(設定済)
2. ejectとphp5-‐cliをインストール(設定済) 3. ポーリング用PHPスクリプトを設置してConoHa
VPSのIPアドレスを設定
4. crontabの記述
3. Ejectのテスト
10
[演習]ConoHa VPSの環境作り
• ApacheおよびPHP5をインストール – yum install -‐y h\pd php
• 以下のコマンドを実行してファイアウォール設定を行う
11
# iptables –I INPUT –p tcp –dport 80 –j ACCEPT # service iptables save # service iptables restart
[演習]ConoHa VPSの環境作り
• 以下のURLからPHPスクリプトを取得 – h\p://eject.kokuda.org/slides/140927handson.tgz
• /var/www/html以下にファイルを展開
• remouiiin.phpを開いてパスワードを設定 (任意)
• h\p://<VPSのIP>/remouiiin.php を開く
12
remouiiin.php について
• Webページでボタンを押すとカウントアップするだけのスクリプト
• GETパラメータにパスワードをつけるとカウントを取得&リセットできる – 実際はPOSTとかのほうが望ましいけど今回はテ
スト用なので略
• ソースコードは別紙参照
13
[演習]Raspberry Piの環境作り(1)
• Raspberry PiにCD-‐ROMドライブを接続する • ejectコマンドを実行して動作を確認する • Raspberry Piの電源を入れ、SSH接続する
– IPアドレス: 10.0.10.(ふせんの番号) – ユーザー名: pi – パスワード: ejectuiiin
• /boot/ejepoll.phpを開き以下の値を設定 – ConoHa VPSのIPアドレス – パスワード(任意)
14
ejepoll.php
<?php $password = md5("uiiin"); $addr = '<VPSのIP>'; $count = file_get_contents( 'http://'.$addr.'/remouiiin.php?remoget='. $password ); if (intval($count) > 0) { exec('/usr/bin/eject -‐T'); } ?>
15
※ /bootはFATフォーマットのためrootユーザー権限で編集する
[演習]もしSSH接続できない時は
• MicroSDカードを取り出して、手元のPCに差し込む
• /bootがマウントされるので、ejepoll.phpをエディターで開いて編集する
_人人人人人_ > チート <
 ̄^Y^Y^Y^Y^ ̄
16
Raspberry Piの環境作り(2)
• crontab –eを実行して、以下のとおり記述 (10秒ごとにremouiiin.phpのカウントを確認する)
• 今日は設定済み(確認してみてください)
* * * * * /usr/bin/php5 /home/pi/ejepoll.php * * * * * sleep 10 ; /usr/bin/php5 /home/pi/ejepoll.php * * * * * sleep 20 ; /usr/bin/php5 /home/pi/ejepoll.php * * * * * sleep 30 ; /usr/bin/php5 /home/pi/ejepoll.php * * * * * sleep 40 ; /usr/bin/php5 /home/pi/ejepoll.php
17
[演習]動作を確認する
• ブラウザからVPSにアクセスして、「リモートEjectを実行」ボタンを押す
• 10秒前後でEjectされれば成功 • Ejectされない場合は以下の点を確認
– ドライブが正しく接続されているか (ドライブの電源ON→ドライブ側ケーブル→RPi側ケーブルの順に行う)
– ドライブが認識されているか (ls –l /dev/sr* や lsusb など)
– スクリプトの記述ミスがないか
18
まとめ
• VPSでもEjectはできた • remouiiinが返す値を変えたり、ejectコマンド
へのエイリアスにすればもっとそれっぽくできると思われる
• 気をつけるべきはEjectは手段であり目的ではないこと – この結果を見て「たのしい!!」で終わるだけで
はだめ
– Ejectで得られるトレイ開閉の運動を活用すべし
19
Part2 ConoHa連携の猫まっしぐら給餌Ejectシステム
Ejectコマンドユーザー会 あっきぃ ( id:Akkieso3 ) 2014/9/27 出張このべん:猫カフェ×Ejectユーザー会、奇跡のコラボハンズオン!ConoHa by GMO
20
トレイ開閉の運動を活用しよう
• CD-‐ROMドライブはEjectコマンドによってトレイの開閉運動を得ることができる – Ejectする=トレイで押す – Loadする=トレイで引く
• 基本的にはトレイで押すときの動きを使うことが多い – ボタンを押す – おもりを突き落とす
21
給餌の例
• ハムスターの給餌 – 私が開発した初めてのEjectコマンド工作
– 現在も出張の時などに使用
• トレイで餌を押して下に落とすパターン
22
猫への給餌
• 海外に事例あり(2006年!) – h\p://www.leeholmes.com/blog/2006/08/ 22/diy-‐cat-‐feeder-‐and-‐water-‐dispenser/
• レバーを押している間餌が出てくる=押す・引く両方使うタイプ
←CD-ROMドライブ
給餌装置→
23
用意するもの
• 餌を入れる箱(牛乳パックなど) • 輪ゴム数本
• 厚紙かダンボール片
• のりかテープ
• ハサミ・カッター
• 土台の箱
24
給餌装置の作成
• 箱の側面の下の方を下・左・右の3方向に切りこみを入れる
• 下の部分にレバーを取り付ける
• 切り込みの上から1/3 くらいの部分に輪ゴム を取り付ける
• 土台を用意して、やや 斜めに取り付ける
(試作品)
25
[演習]やってみよう&改良点
• 本日はカフェ内で工作ができないので、完成品をいくつか用意
• Part1で作ったEject環境に設置して、餌をあげてみよう
• 海外の例のように、段ボールでカバーをすると、よりそれらしい見た目になる、はず
26
アンケートにご協力ください
• 出張このべん:猫カフェ×Ejectユーザー会、奇跡のコラボハンズオン!アンケートフォーム
• h\ps://www.conoha.jp/survey/3495.html
27