Raspberry Piをサーバーとして使うために必要な5つ

Raspberry Piを設定するためにはUSBマウスやキーボードが必要である。

と、いろんな書籍やwebページに書いてありますが、サーバーとして使うのみであればssh接続して手元のPCで使うことができます。

サーバー用に最低限必要なもの

  • Raspberry Pi
  • SDカード(4GB以上) (コレをつかっています。)
  • LANケーブル
  • USB接続AC充電器 (コレをつかっています)
  • USBケーブル(amazonのusbケーブルが安くてオススメです)

サーバー用には不要なもの

  • USBマウス
  • USBキーボード
  • HDMIケーブル
  • モニタ

ScaLAPACKをMountain Lionにインストール

LAPACKの並列版のScaLAPACKをmac(Mountain Lion)にインストールしました。

準備するもの

インストール方法

解答したscalapack_installerのフォルダで以下のコマンドを実行します。

$ python setup.py --prefix=./build/. --mpicc=/usr/local/bin/mpicc --mpif90=/usr/local/bin/mpif90 --mpirun=/usr/local/bin/mpirun --downall

詳しいフラグの指定はREADMEに書いてあります。
prefixフラグで指定されたフォルダにライブラリが設置されます。

以下のように表示されればScaLAPACKのインストール完了です。

******************************************************
******************************************************

ScaLAPACK installation completed.


Your BLAS library is                     : -L/build/lib -lrefblas

Your LAPACK library is                   : -L/build/lib -ltmg -lreflapack

Your BLACS/ScaLAPACK library is          : -L/build/lib -lscalapack

Log messages are in the 
/build/log directory.

The ouput of ScaLAPACK testing programs are in: build/log/sca_testing

The
/build
directory contains the source code of the libraries 
that have been installed. It can be removed at this time.
          

******************************************************
******************************************************

LAPACKで連立一次方程式を解く

LAPACK : DGESVの例題のサンプルをf90っぽく書き換えました。

program main
  implicit none
  integer, parameter :: SP = kind(1.0)
  integer, parameter :: DP = selected_real_kind(2*precision(1.0_SP))

  integer :: i
  integer, parameter :: n = 4, m = 4
  real(DP), dimension(n,m) :: a
  real(DP), dimension(n) :: b
  integer, dimension(n) :: ipiv
  integer :: info

  a = reshape( (/1.80_DP, 5.25_DP, 1.58_DP,-1.11_DP, &
                 2.88_DP,-2.95_DP,-2.69_DP,-0.66_DP, &
                 2.05_DP,-0.95_DP,-2.90_DP,-0.59_DP, &
                -0.89_DP,-3.80_DP,-1.04_DP, 0.80_DP/), &
              (/4,4/) )
  b = (/ 9.52_DP, 24.35_DP, 0.77_DP, -6.22_DP /)

  call dgesv(n, 1, a, n, ipiv, b, n, info)

  do i = 1, 4
    write(*,*) i, b(i) ! answer 
  enddo

end program main

Express(node.js)+Socket.io+MongoDBでつくったwebアプリをHerokuにデプロイするまで

Express(node.js)+Socket.io+MongoDBでつくったアプリをHerokuにデプロイしました。node.js+npm+Expressはインストールされている前提です。

Expressでwebアプリのひな形を作成

以下のコマンドでひな形を作成します。

$ express application-name
$ cd application-name && npm install

この段階で

$ node app

とするとサーバーが立ち上がります。ブラウザでhttp://localhost:3000にアクセスすると"Welcome to Express"と描かれたページが表示されます。

Socket.ioとmongooseをインストール

application-nameディレクトリで以下のコマンドを実行し、Socket.ioとmongooseをインストールします。

$ npm install socket.io
$ npm install mongoose

mongooseはMongoDB のオブジェクトモデリングツールです。Node.js上でMongoDBを簡単に取り扱うことができます。

package.jsonファイルを編集

モジュールのパッケージ管理をするpackage.jsonファイルを編集します。
デフォルトでは書かれていないmongooseとSocket.ioに関して追記します。
socket.ioとmongooseのバージョンは/node_modules/の中のそれぞれのフォルダのpackage.jsonの"version"に書かれています。

{
    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": {
      "express": "2.5.11"
    , "jade": "*"
    , "mongoose": "1.3.5"
    , "socket.io": "0.8.7"
  }
}

デプロイする準備

.gitignoreファイルを作る

node_modulesにあるモジュールは、Herokuにデプロイする時にpackage.jsonから自動にインストールされます。なので、node_modulesフォルダはgitから無視するように以下コマンドで.gitignoreファイルを作成します。

$ echo "node_modules" > .gitignore

Procfileを作成

Herokuでのプロセス起動に関するProcfileファイルを以下のように作成します。

$ echo web: node app.js > Procfile

Herokuをアップデート

以下コマンドでHerokuを最新の状態にします。

$ gem update heroku
$ gem list heroku

herokuがインストールされていない場合は、Heroku Toolbeltからインストールします。

Herokuにデプロイ

以下コマンドで、gitの管理下にファイルを置き、herokuにpushします。

$ git init 
$ git add .
$ git commit -m "first commit"
$ heroku create application-name --stack cedar
$ heroku addons:add mongohq:free
$ git push heroku master

heroku create ~ でherokuアプリケーションを作成しています。
heroku addons: ~ でMongoDBのホスティングサービスのMongoHQアドオンを追加しています。

以下コマンドで、herokuのプロセスの設定をします。

$ heroku ps:scale web=1
$ heroku config:set NODE_ENV=production

以上でHerokuにExpress(node.js)+Socket.io+MongoDBでつくったwebアプリをデプロイできました。

MongoHQのuri設定

MongoHQへのuriはapp.jsに以下のように設定します。

var uri = process.env.MONGOHQ_URL || 'mongodb://localhost/db_name';

Mongooseをつかったドキュメントの更新

MongoDBのオブジェクトモデリングツールであるMongooseをつかったドキュメントの更新方法です。

Userコレクションのuser_idが"001"のドキュメント一つに対して、user_nameを"user2"に変更します。

db.User.findOne( { user_id: "001" }, function(err, doc) {
    if(err || doc===null) {
        return false;
    }
    doc.user_name = "usr2";
    doc.save();
}

エラー : アクション“シェルスクリプトを実行 (Image to Card)”でエラーが起きました。

Raspberry Piを最近買って、どうやって遊ぼうか考え中です。注文から手元まで三ヶ月以上かかる時期もありましたが、今は供給が安定しているらしいです。Amazonでも買えます。

はじめにRaspberry PiのOSのブート用SDカードをPCから作成する必要があり、RPi-sd card builderというアプリケーションを使うことが推奨されています。

しかし、


「アクション“シェルスクリプトを実行 (Image to Card)”でエラーが起きました。
アクションの設定を確認してから、ワークフローをもう一度実行してください。」


f:id:yutaono:20130718034507p:plain



というエラーがでました。(Mac OSX 10.8.4 Mountain Lion, RPi-sd card builder v1.2の場合)

RPi-sd card builderを使用せずにブート用SDカードをつくる必要があるので、その方法を書き記しておきます。

環境

ブート用SDカードをつくる方法

SDカードのデバイス名を知る

Terminal.appで

 $ diskutil list

とし、SDカードのデバイス名/dev/disk1(例)を取得します。

OSのimgファイルをSDカードに書き込む

以下のddコマンドでOSのimgファイルをSDカードに書き込みます。

$ sudo dd bs=1m if=/File/Path/To/2013-02-09-wheezy-raspbian.img of=/dev/disk1

if=にはOSのimgファイルのパス、of=にはデバイスのパスを入力します。

環境によりますが、10分ほどで完了しました。

ddコマンドでエラー

ddコマンドでResource Busyというエラーが発生する場合は、以下リンクを参考にマウントを解除してから実行します。

tolsetOSX - OSAkkieWiki