NGINX ん、じんくす? 違わい、エンジンXだい!

nginxと書いてエンジンエックスと読むそうである。webサーバーとして動くことは勿論だが、その他, リバースプロキシとしてはWEBのみならず、mailも扱えるということなので、 今回raspberry piにインストールしてみた。 徐々に使い方を覚えていき、他のサーバーからの移行を画策していこうと思う(狙いは省電力化)が、とりあえずはPHPおよびmysql を一緒に実装し Lamp ではなく、LNMPとして動かすことをやってみる。 Wikipediaの解説によれば非同期のイベント駆動モデルを使っており、プロセス・スレッド駆動のapacheなどのサーバーに比べると高負荷になっても動きが鈍くならない、という利点があるらしい。なんとなくraspberry pi にぴったりのサーバーのような気がしてきたが、実際は如何に。 実装後のテスト画面は以下。ごらんのとおり、PHPが実装でき、phpmyadminが動いている、という証拠スナップ。 いくつかネット上の記事を参照したが、メインはこちらの記述に従った。 上記サイトのコピー記述になるのでどうかとも思うが、とりあえず実行したコマンドだけ羅列すると以下になる。 なお、ヘッドレスでアクセスをしているので、入力はすべてsshによるリモートターミナル経由だ。 mysql-server をまずインストール sudo apg-get install mysql-server [Enter] mysql のルートパスワードを要求されるので入力したパスワードは忘れないようにしよう。 次にnginx本体をインストール。 ところで、サイトによっては、「ディストロについてくるnginxは0.6とえらく古いのでソースを落としてきてコンパイルしよう、」とその方法を詳しく説明してるところがあったが、apt-get update; apt-get upgrade 後にインストールしたバージョンは1.2.1であった。 ソースをみるとすでに1.51がリリースされているが、ものすごく古い、というわけでもなかったので、パッケージ品をそのまま使うことにする。 自分も齢60歳。いちいち凝っている時間はもうないので次に次にと進むのである。 sudo apt-get install nginx [Enter] sudo service nginx start [Enter] sudo apt-get install php5-fpm [Enter] sudo apt-get install php5-imagick [Enter] sudo apt-get install php5-curl [Enter] sudo nano /etc/php5/fpm/php.ini [Enter] 最後のコマンドではnano editor が起動するので、Ctl-W で、以下の部分を探し、修正。 “upload_max_filesize=2M” => “upload_max_filesize=10M” Dynamic Extentions のセクションに 以下を追加 extension = imagick.so あとはCtrl-O でセーブし、Ctrl-x で終了。 phpmyadminをインストール sudo apt-get install phpmyadmin [Enter] Web-server selection の画面でApache か lighttpdかどちらのサーバーかと、と聞いてくるが、どちらでもないので、チェックを外しておく。 次の画面でパスワードを設定。 sudo service php5-fpm restart 以上すべてsudo で暫定ルート権限で実行しているが、面倒であれば、sudo su でルートになれば、sudoは省ける。 ここまでで必要なサービス(nginx,mysql,PHP5)はすべて導入された。 ちなみにこの状態でRPiのIPアドレスをブラウザで見ると”Welcome to NGinx”という簡単なメッセージが出て、nginxが無事動いているということがわかる。 ただし、この状態では静的なファイルしか表示しない。 PHPファイルを認識させるにはconfig file をいじる必要があるが、その前にサイト用のダイレクトリを設定しておく。 ルートフォルダにある/srvにフォルダーツリーを作っていく. sudo mkdir /srv/www [Enter] sudo chown -R USER1:www-data /srv/www [Enter] sudo chmod -R 755 /srv/www […]

Laspberry pi とLinuxの調理

今回のRPiは電子機器とのインターフェースというよりもサーバーとして使おうとしているので、少しLinuxが使いやすくできるように調整しておく。 まずは新規ユーザー名を追加する。Piと同じグループアクセスを行えるように、まずはpiの所属するグループ名をチェック groups pi 自分の環境では以下が出力された pi : pi adm dialout cdrom sudo audio video plugdev games users netdev input これを参考にしてuser1というユーザーを追加するには sudo useradd -m -G adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,netdev,input user1 次に以下のコマンドを入力し、入力を即されたらパスワードを入力(2回) sudo passwd user1 sshを使ってコマンドラインのみでヘッドレスで動かしているわけだが、ターミナルモードからRaspbianのGUIにアクセスすることもできる。 このためにはTightvncというパッケージを使う。英語のHowtoはここに詳しいが、いかに簡単に手続きだけを述べておくと sudo apt-get install tightvncserver //vnc server をインストール tightvncserver //vncserverを起動 password設定を催促されるので8文字以下で入力 vncserver :0 -geometry 1440×900 -depth 24 //画面精度に合わせて適宜調整 これをいちいち入力するのは面倒なので、上記のサイトではConfig fileの書き方などが書いてある。 これでxウィンドウがセットされるので、Windows あるいはLinuxが動いているパソコンからVNC準拠のViewerでIPアドレス、パスワードを入力すればGUI画面がアクセスできる。 インストールされているアプリケーションは左下のスタートメニュー(?)をクリックすればカテゴリーごとに選択できるようになっている。いつも使うアプリケーションについては項目を右クリックし、add to desktopを選べばデスクトップ上にアイコンを置くことができる。 手間をかけてGUIを実現させた理由はWifi-adapterの設定をコマンドラインでやった経験がないからで、(爆) GUI上だとwpa_guiというwifi network への接続設定ツールが使える。 まあほかにもScratchとかRaspberry PiのGUI体験を実感したいという理由も無きにしも非ず。 デスクトップ画面をパソコン上に出した状態で、 作動が確認されている、ということでRPiと一緒に購入したEdimixのEW-7811UNというWireless nano USB Adapterをusbポートに差し込み、internetカテゴリーからwpa_guiを起動する。アダプタはあっさりwlan0と認識されているので、あとはscanを実行し、自宅のRouter のwifi networkをみつけてパスワード等を入力し接続すればよい。 これはシステム上に記憶されるので一度の設定であとはリブートするごとに自動接続される。 これでEthernetケーブルをはずしてもネットワークに接続できるようになった。 現在使っているCISCOのWifi Router にはネットアダプターのMACアドレスに固定IPアドレスを割りつける機能がある。 router のBasicセットアップのページからDCHP Reserveというボタンをクリックすると 現在割り当てらているIPアドレスの一覧が出るので、それでraspberry piを選び、固定アドレスを指定するという作業になる。 raspberry piの電源を一度落としてから再度起動すると新しい固定アドレスが割り当てられた状態でネットワークに接続される。 ここまでできたら、あとはApache, PHP, MYsqlをインストールすればdynamic web server が完成するわけで、そういうチュートリアルもネットを探せばいくらでもあるわけだが、それでは面白くないので、apacheの代わりに近頃勢いを得つつあるnginxを導入してみることにする。 説明を読んでいるとReverse proxyにも使えるということなので、現在NASで構築してるsquidを使ったreverse proxy をついでに置き換えることができないかとも思っているわけである。 その顛末は次回。

Raspberry Pi を 頭を使わずに食べてみる(Eating Raspberry Pi Headless)

旅行から帰ってきたらRPi が届いていたので早速食べてみた。本来ならば、キーボードとモニターを接続して初期設定することになるのだが、最初から小規模のhtmlサーバーとして使おうと考えているのでモニターやキーボードは接続せず (いわゆるheadless)、EtherNetへの接続だけでの設定を試みた。 ネット上から拾ってくるオフィシャルOSであるRaspbian ”wheezy” (Debian LinuxのRPiポート)のイメージではsshが最初から組み込まれているのでこのイメージを展開したSDカードをスロットに挿入し、ネットワークケーブルを接続しておいてから電源を接続する。 RPiのLEDが華やかに点滅を始めるので、これが一段落したのちに、ラウターのDHCPテーブルを眺めてみるとRaspberrypiの名前でIPが設定されているのでこのIPに対してSSH接続を行う。自分の環境では192.168.1.122 に設定されていたので  ssh pi@192.168.1.122 これをcygwin ターミナルから入力する。 最初の設定ではuser がpi, password がRaspberry と設定されている。 なお、母艦はWindows 8なのだが、巷で人気のあるPutty ではaptitude や、raspi-configなどAscii Codeでグラフィック表示を行うアプリでは表示が崩れるようなので、ここではcygwin からオプションでインストールしたSSHクライアントを使ってアクセスしている。 最初のログインでは「まずRaspi-configを起動して設定を行ってください」というような意味のメッセージが出る。 モニターとキーボードを使っていれば、自動的に起動するようだが、headlessではマニュアルで進めることになる。 sudo raspi-config このraspi-config の設定画面、インターネットなどで見る設定画面とはメニュー構成が異なっている。バージョンが上がっているのだろう。 去年の今頃から発売開始になって以来、環境は日々進化しているようなのでネット上の情報は十分吟味する必要がありそうだ。ネットでみると大変そうな作業がツール側の対応が進んでいて実は簡単にできるようになっていました、というような事例が多々ありそうだ。 例えば、最初に使うOSのイメージは2GBなので、サイズの大きなSDカードを使っている場合、このRaspi-configの最初のオプションexpand rootfsを実行することにより、ファイルシステムのサイズをSDカードのサイズいっぱいまで拡大する作業、 は必須項目なのだが最初のころはこれも手作業でやっていたようなのだ。 次の項目、Change Password は、後々別のユーザーを追加するにしても、やっぱりやっておいた方がよい。 Boot to desktopは、モニターを使っていた場合、いちいちstartxとコマンドラインから立ち上げるのではなく、直接GUIを立ち上げてしまおう、というオプションだが、今回の使用目的とは関係ないのでスキップ。 Internationalized option ではkeyboard、locale,time zoneなどが変更できる。 Default ではUKのキーボード配列、使用場所英国になっているため、適宜変更。 Advanced option ではメモリースプリットやhostnameなどが変更できる。モデルBの512MBバージョンではGPUに64MBが振り分けられている。headless で使うということであまりグラフィック関係にメモリーは必要ない、と考えられるのでメモリースプリットにかんしては16MBに変更しておく、 OverClock は興味のある分野ではあるが、とりあえずはパス。 ちなみにつかうとRPi内部のフューズが切れて例えクロックを元に戻しても履歴がわかるようになって、保証対象外となるそうである。というのは古い情報で、Raspi-configで設定するオーバークロックはターボモードと称し、温度が85度以上になると自動的にステップダウンする仕組みになっているらしい。補償対象内の設定だそうだが、チップのばらつきにより、設定によってはブートしなくなる可能性あり。この場合、シフトキーを押しながらリブートしろ、とあるが、こちらはヘッドレスで動かしているので、復帰の仕様がない。 Enable Camera というのはそのうち出てくるPI カメラモジュールに関した設定。 Add to RasTrack はRPiのユーザーがそれぞれ自分のPiを登録し、それをマップで確認できるサービスで登録するのは任意だ。日本はまだ100個台の登録状況であるが、隠れユーザーはこの何倍もいるはず。 街のレベルまで登録するので、ご近所さんで食べてる人が何人いるか確認できてそれなりに楽しい。 Finish を選択するとリブートするか聞いてくるのでYESを選択。 ファイルシステムのサイズ変更にしばらくかかるので他の仕事をやりながら気楽に待ち、LEDの点滅が落ち着いたら、もう一度sshでログイン。 このタイミングでraspbianのアップデートも行っておく。 sudo apt-get update sudo apt-get upgrade (Update でデータベースのアップデートをおこない、upgradeで最新のモジュールに更新する。) 自分はDebian Base のUbuntuをデスクトップで使ったり、使っているNAS(Wester ditigal 製 Mybooklive)がDebian で動いているなどの経緯からDebian Linuxはある程度馴染みがあるのででほとんどストレスがなく設定できた。 ところでRPiには電源スイッチがない。電源を落とすにはプラグを抜くことになるのだが、その前にシステムをシャットダウンしておくのが利口なようだ。プラグを引っこ抜いてSDカード上のイメージが破損してしまった、というような報告がネット上に散見される。 sudo shutdown -h now 五個あるLEDのうち電源表示の赤いLEDだけの点灯になったら多分安全。 ここでプラグを抜くのだが、機械的ストレスをPRi本体に与えない、という観点からRPi側ではなく、電源プラグ側のコードを抜く。 電源だが、700mA以上必要、となっている。 携帯の充電器では 400mA定格が多いという記述もネット上で見ていたので、手持ちのスマホ携帯の定格を調べてみたがいずれも1Aとなっており、問題なさそうだ。 裸のままのRPiではケーブルをいくつも接続すると非常に不安定になる、のでケースは必須に思われる。ネット上では厚紙で作るケースの設計図なども落ちてはいるのだが 自分は見栄えに引かれてアクリルの透明なケースを買った。が、電源を入れっぱなしにしておくと、結構暖かくなる。 オーバークロックなどヘビーな使い方をするのであればヒートシンクを追加するか、最初からアルミのケースのほうがよいかもしれない。 次回は母艦からのGUIアクセスのためのTightVNCの導入、Wifi モジュールのインストールおよびIPアドレスの固定をおこなった後、nginx, php, mysqlの導入の顛末を述べる。

Raspberry Pi を注文してみた

去年の初めころからRaspberry Pi というクレジットカードサイズの電子モジュールのプロジェクトがMakerサイトなどで話題になっており、Arduinoと同じようなものかなあとぼんやり思いつつも、あまり趣味の幅を広めてもしょうがないので手つかずになっていた。 今年の初めに久々に手にした手作りPCの雑誌に80ドルでパソコンを作成、という記事があり、興味をもって読んでみれば、Raspberry Piを使ってLinux machine を作りましょうという記事であり、 これで初めてRaspberry Piのなんたるかを知ることとなった。(以下、Raspberry Piといちいち書くのが大変なのでRPiと略します) さらにYoutubeでもこのRPiを32台クラスタ化してミニスーパーコンピューターをつくりました、ちなみに機械構造はレゴブロックです、という、なんともおいしそうな話がアップされていた。 で、ネットで調べてみると、ヘッダーでIOピンを直接接続できるということはさておいて、HMDI,SDカードソケット、USBソケットx2、EtherNetソケットX1と最初からコンピューターの周辺機器への接続が可能なようになっている。 それでもすでに自宅には3台のデスクトップパソコン、2台のノートブックとと2台のNASが稼働しているわけで、これ以上コンピューターを増やしてもしょうがないのでほおっておいたのだが… 昨日、他の方のBlogを見ていたら、RPiにWeb Serverを実装する云々、という記述を見つけた。 考えてみれば、 使われているハードの能力が初代のXBoxと同等または若干上、 実装されているRAMが512MB。 SDカードスロットから使うLinuxのImageが2GB程度ということなので、8GBくらいのSDカードを使えば WEBサーバーとして十分いけそうである。 電減が5V700ミリA以上の携帯用チャージャー(パワープラグがミニUSBなのだ)ということなので、520W電源のPCをサーバーとして常時つけっぱなしにしておくのに比べれば、電気代の節約になりそうだ。 ということで言い訳ができたので、さっそくAmazonを眺めてみれば現在主力で売られているmodel Bという機種は42ドルである。 従来見ていた雑誌などの記述では35ドルとあるが、最近ドルは弱いからねえ。 さっそく注文すると同時に、Raspberry PI User Guide というebookを購入した。 ebookのほうは即Nexus 7 Tabletにdownload できたので、現物が到着するのを待ちながら、こちらをぼちぼち読みだしている。 この書籍は2012年の6月頃に出版されており、実際のLinuxの導入などについてはすでに情報が古いと思われるが、この本を書いているEben Uptonという人がRaspberry Pi 産みの親であり、RPiを開発し、販売に至る経緯が詳しく載っていて非常に面白い。 この本を読んでわかったのだが、筆者の思い描くRPiの第一の使用用途は子供たちのコンピューター教育だ。 プログラミングができる若い世代が育っていないことへの危惧、それは現状を眺めてみればゲームを開発したいという希望を述べる高校生がいても実際に聞いてみれば学校”IT class”で習っているのは特定のOSのGUIをエンドユーザーとしてどう使うか、エクセルやワードの使い方や簡単なWEBページの書き方ぐらいで、肝心のプログラミングについては全く知らない。 自宅にある”コンピューター”と言えばxBox とかWiiで実際にプログラミングを勉強できる環境はなく、 例えパソコンが自宅にあったとしても、親が実用として使っていれば、パソコンを壊してしまう可能性が無きにしも非ずのプログラミング学習に避けるような状況でもない。 いわゆるデジタルデバイスの類は用途が固まりすぎていて、子供たちの創造意欲を掻き立てるようなツールにはなりえない。 筆者はプログラミングを教えることによって個人の能力がコンピューターばかりではなく、ほかの分野でも問題解決の思考に役立つという信念を持っていて 大学で教えた経験、そして実際の企業の開発部門の長としての経験から このような(英国の)現状を嘆いていた、ということが文面からひしひしと伝わってくる。 そんな状況で、実質25ドルくらいで10代の子供でも作れるようなプログラミング可能なコンピューターボードを作ってしまおう、という思いからこのプロジェクトは育っていった。 本人に言わせれば”25ドル”と言った覚えはなく、”教科書1冊くらいの値段で購入できる”ということをインタビューで述べたのが、レポーターが親切にドルに置き換えてくれたようで、本人は教科書はもっと高価だと思っていた節がある。 この「子供のために、裕福な家族でなくても出費がかさまないで、個人のパソコンが作れる」いう設計思想が、実機の仕様を決めている。 1)HDMIの出力のほかに古いTVにも接続できるようにRCA出力を備えている。 2)マイクロやミニのSDでは小さすぎて子供たちが扱えないので、普通サイズのSDカード。←古いカメラ類からリサイクルすればよい。 3)電源は巷にあふれているはずの携帯電話の充電器が使えるようにする。 などなど。 OSはフリーのLinux, 最初の試作機の時点ではハードの能力が低かったため、プログラミング言語はPythonに限定。(Raspberry PiのPIはPythonからきている) ところで 筆者は最初RPi を ABCMicroと呼んでいたらしい。 これと現在発売されている機種がmodel A (Ethernetなし、USBx1)とModel B(Ethernetあり、USBx2) と命名されていることにピンとくる人は英国のパソコン事情に相当通じた人だ。 80年代にBBCが英国の子供たちのコンピューター教育を推進するためにBBCマイクロという構想を立ち上げ、これにコンペで参加したAcorn社のパソコンがその後大量に英国の学校で採用されたという経緯がある。 model A, Model B はその時のBBCMicroのモデル名なのだ。 さすがに英国人である。 茶目っ気がある。 筆者たちが最初にRPiを持って行ったのもBBCだったという。 ところが30年前とは環境が変わっていた。 法律が変わり、テキストブックの販売、教育番組のプロモーションと一緒にハードウエアをうるような以前のような行為は独占禁止の制限からBBCとしてはできない、ということがわかる。 そのかわり、テックジャーナリストが自分のブログに紹介ビデオを掲載してくれることになって、このプロジェクトの存在が知られるようになる(2011年5月)。 最初は数千個のバッチ生産で終わらせることになっていた計画が2011年のクリスマス時点でそれではすまないことが認識されはじめ、購入の意思表示をした人たちが2月29日の発売前にすでに10万人に達した。出荷までに10万台の部品を収集できるめどはなんとか立てたものの、オンラインオーダーの処理、梱包出荷の手間を考えるとプロジェクトの有志だけではいかんともしがたいことを悟り、英国のマイクロ専門業者2社が販売を代行するという合意をとりつけ、2月29日の発売にこぎつけた。 この2社(RS Components, Element14)のWEBサイトは両社とも発売当日注文が殺到したためにクラッシュしてしまい、接続できない状況が続いたという。 一人につき1台という制限がついていたのにもかかわらず、Element14のサイトではピーク時1秒間に7台のRPiが注文された。 この日のグーグルでは”Raspberry Pi”の検索数が”Lady Gaga”を上回った。 ではRPiで実際に何ができるか? 前述したようにIOピンが出ている(GPIO=>,SPI,I2C)ので、直接ハードウエアをたたけるようになっており、Pythonを使ってほかの機器の制御が可能。 メディアセンターとして使用。もともとメディアセンター用に設計されたワンチッププロセッサなのでビデオデコーディングなどに最適。 3Dグラフィックとマルチメディア機能があるので自作ゲームのプラットフォームに使える。 などなど。 実は30年以上前、自分が最初に手にしたコンピューターは英国Sinclair社のZX-80というものである。パーソナルコンピューターとして初めて200ドルを割ったものだった。当時日本から米国に駐在となった自分は日本でNECのTK-80がほしいなあと思いながら手が出せずにいた。米国ではほかにもタンディとかAtariとか売り出しはじめていたのだが、通信販売でSinclairを買った。箱を開けてみたら、何とも小さいおもちゃのような代物がでてきたのを覚えている。しかしながら、Z80のプログラミング、Basicの基本はこれで覚えた。多くのユーザーと同じように(RFIがあまりにもひどかったので)DIYでアルミの箱に基盤を移し、メモリを亀の子はんだ付けで2倍に増やし、メンブレーンのキーボードもフルキーボードに移植した記憶がある。 その後、フロッピー付きのTRS-80 に移行したが、Sinclairにはかなりの思い入れがある。 上記のユーザーガイドでもSinclairのZX-81 やspectrumに触れるくだりがあり、非常に懐かしかった。 今回購入したRPiについてはサーバーにしてしまうつもりだが、なんといっても30~40ドルの品物である。 もう一台買って少し遊んでみようか、と最初の一台が到着する前からいろいろ妄想を膨らませている。