スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Ruby で キーを指定して sha256 ハッシュを作成する。

AmazonMWSのためのプログラムを書いていて調べたこと。

Rubyでハッシュを作成する際には、普通は標準ライブラリに入っているDigestを使えば良いので、 とでもすれば良い。
実際、MWSのHTTPヘッダに埋め込むMD5(Content-MD5)はこれで作成した。

ただ、HTTPのリクエスト行に含める署名(Signature)は自分の秘密鍵をキーにして、sha256でハッシュを作成しないといけない。
すると、キーを指定できないDigestは使えないことになる。

というわけで、いろいろ調べた結果、OpenSSLライブラリを使えば解決できることがわかった。
opensslの使い方は以下の通り。 この例では、文字列hogeを指定した秘密鍵でsha256ハッシュにしている。

試していないが、sha256以外の形式にも対応している模様。

《参考》
StackOverflow「Ruby and PHP HMACs not agreeing」
Ruby 1.9.3 リファレンスマニュアル「library openssl」

Ruby の builder が便利すぎる。

RubyでXMLを出力する必要があったのでメモ。

require 'builder/xmlmarkup'

xml = Builder::XmlMarkup.new(:indent => 2)
xml.instruct!

xml = xml.Hoge(:class => "test1") {
 xml.hogehoge "test2"
}


出力結果

<?xml version="1.0" encoding="UTF-8"?>
<Hoge class="test1">
 <hogehoge>test2</hogehoge>
</Hoge>


となる。

instruct!で<?xml version="1.0" encoding="UTF-8"?>を挿入して、あとは任意のエレメントを記述していくだけ。
エレメントは当然ネストできるし、配列にeachを使ったりして任意の回数だけ繰り返すこともできる。

べんり!

Rails バッチ処理等のプログラムの書き方

Railsでバッチ処理などのMVCに直接関係してこないプログラムの書き方まとめメモ。

・Model, View, Controllerに関係しないプログラムはlibに入れる。
・libの中には任意の名前のディレクトリを入れて整理できる。
・libに置いた.rbファイルからはコントローラー等からと同様にデータベースにアクセスできる(例:「@hoges = Hoge.all」)
・libに置いたスクリプトをオートロードするためにはconfig/application.rbに以下の2行を追記する。

config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]


・プログラムの実行は「rails runner Hoge.test」

以下の記事も参照。
whenever を使って Rails で cron 的な

whenever を使って Rails で cron 的な

Railsでcronのようなバッチ処理を行うためにwheneverを使ってみます。Railsのバージョンは3.2.0。

【1】バッチファイル作成

Railsではバッチファイルなどのプログラムはlib配下に置きます。

とりあえず、バッチファイルを作成。

$ nano lib/tasks/hoge.rb

このファイルにテスト用のプログラムを書いておきます。

class Hoge
 def self.test
  print "This is test!\n"
 end
end




【2】libディレクトリのファイルをオートロードするように設定

lib以下のファイルをオートロードするようにconfig/application.rbを設定します。Applicationクラスの中に次の記述を追記します。

module Hogehoge
 class Application < Rails::Application

  (中略)

  # Custom directories with classes and modules you want to be autoloadable.
  # config.autoload_paths += %W(#{config.root}/extras)
  config.autoload_paths += %W(#{config.root}/lib)
  config.autoload_paths += Dir["#{config.root}/lib/**/"]

  (中略)

 end
end

追記後、次のコマンドが通ってバッチファイルに記述したテキストが表示されれば問題なく設定できています。

$ rails runner Hoge.test
 # => This is test!




【3】wheneverの設定

Gemfileに以下の行を追記。

gem 'whenever', :require => false

そして、次のコマンドを実行。

$ bundle install
$ wheneverize .

wheneverの設定ファイルであるconfig/schedule.rbが作成されます。ピリオドを落とさないように注意。
続いて、生成されたconfig/schedule.rbを編集。

set :environment, :development
set :output, { :error => 'log/error.log', :standard => 'log/cron.log' }

every 1.minutes do
 runner "Sync.test"
end

設定内容を確かめるために

$ whenever

すると、設定されるcronが表示されます。
この時点ではcrontabに設定が反映されていないので、設定内容を確認して

$ xhenever --update-crontab

で反映します。
ちなみに、

$ xhenever --clear-crontab

でwheneverによる設定内容の取り消しができます。

これでwheneverによるcronの設定は完了です――が、ここでエラー発生。

正常に動作すれば、バッチ処理により、log/cron.logに「This is test!」と出力されるはずなのですが、出力が一切ない。
というわけで、エラーの出力先であるlog/error.logを見てみると

could not find bcrypt-ruby-3.0.1 in any sources (BundlerGemNotfound)

とか書かれている。

Gemfileをチェックしたところ、「gem 'bcrypt-ruby'」は書かれていたので、bundle installするが、既にインストール済み。

wheneverによってcrontabに設定されてたコマンド

$ /bin/bash -l -c 'cd /home/username/railsroot && script/rails runner -e development '\''Hoge.test'\'

を直接実行してみたところ、次のようなエラーを頂く。

Could not find bcrypt-ruby-3.0.1 in any of the sources
Run `bundle install` to install missing gems.


よくわからないが、Bundler的にはbcrypt-rubyが入っているのに、Ruby的にはそれを認識してないってこと?

Ruby及びRailsはRVM上で動かしているため、とりあえず、

$ rvm all do gem install bcrypt-ruby -v "3.0.1"

して、RVMのgemを読み直すためにターミナルを再起動して、再び

$ /bin/bash -l -c 'cd /home/username/railsroot && script/rails runner -e development '\''Hoge.test'\'

を実行したみたところ、エラーメッセージが

Could not find chronic-0.6.7 in any of the sources
Run `bundle install` to install missing gems.

に変化した。同様に

$ rvm all do gem install chronic --version "0.6.7"

して入れてみると、また別のgemが無いとか言われる。

しばらく

$ /bin/bash -l -c 'cd /home/username/railsroot && script/rails runner -e development '\''Hoge.test'\'
$ rvm all do gem install hogehoge --version "0.0.0"
$ exit

を繰り返すも、一向に終わる気配なし。

遅々として進まない状況に嫌気が差して、ダメ元でbundle installしてみたところ、いくつかのgemがインストールされた。

「初めにbundle installしたときには何も起こらなかったのに、なんだよおい、ぶつぶつ……」などと思いながら

$ /bin/bash -l -c 'cd /home/username/railsroot && script/rails runner -e development '\''Hoge.test'\'

してみると、エラーを吐かれない。
しばらく放置してcronの動作も確認してみるが、やはりエラーは吐かれない。

原因がわからなくて超気持ち悪いんですが、とりあえず動いたので良しとしておきます。
超気持ち悪いけど!


《参考サイト》
https://github.com/javan/whenever
http://www.slowlydays.net/wordpress/?p=707

Ubuntu cron crontab シェルスクリプト 設定

Ubuntu 12.04でのcrontabの設定方法メモ。


【1】cronの設定

cronの設定には

$ crontab -e

または

$ sudo crontab -e

を使う。

crontabコマンドは実行したユーザーのcrontabを編集するので、シェルをroot権限で実行したい場合、sudo crontabでrootのcrontabを編集する必要がある。


【2】設定内容の確認

設定したcrontabの内容は、crontab -l で確認できる。sudo crontab -e した場合は sudo crontab -l。

また、ログは /var/log/syslog に吐き出されているため、実行されているかどうかを確認するためには、

$ tail /var/log/syslog

すれば良い。


【3】シェルスクリプトに関する注意点

ここでハマった。

crontabを設定し、上記【2】のsyslogを確認した結果、cronが実行されていることは確認できたが、シェルスクリプトによるファイルが生成されなかった。

問題を切り分けるために、ターミナルからシェルスクリプトを直接実行してみたところ、正常に実行できた。

この場合、シェルスクリプトが正常に実行できない理由はいくつか考えられる。

・設定したcrontabのユーザーに実行権限がない。
 →ls -lでパーミッションを確認し、必要に応じてchmodで実行権限を付与。

・crontabの設定時にコマンドの末尾に出力先を書いていないためにエラーを吐かれる。
 →コマンドの末尾に「> /dev/null 2>&1」を追記して出力を捨てるかファイルに出力するように設定する。

・シェルスクリプト実行時のカレントディレクトリが想定と異なる。
 →シェルスクリプトの冒頭付近に「cd /hoge/hoge」を絶対パスで書き込んでカレントディレクトリを設定する。

今回、ハマった理由は3つめのカレントディレクトリの設定でした。


【4】まとめ

問題の切り分け方としてはこんな感じでしょうか。

・ls -lでパーミッションをチェック。
 →必要に応じて実行権限を付与。

・syslogにcronの実行ログが吐かれない。
 →crontabの設定。

・syslogにログは吐かれるが上手く実行されない。
 →crontabのコマンド実行結果の出力先を指定する。

・シェルスクリプトは実行されているはずなのにファイルが出力されない。
 →カレントディレクトリの設定を疑って、シェルスクリプトにpwdコマンドやcdコマンドを書き込んでみる。

DAAPサーバーのインストール

せっかくファイルサーバーを立てたので、音楽データもそこに置けるように、UbuntuでDAAPサーバーを立てます。

とりあえず、forked-daapd を入れます。

$ sudo apt-get install forked-daapd


共有用ディレクトリを作って、パーミッションを777にします。

$ mkdir mydir
$ chmod 777 mydir


forked-daapd の設定ファイルをいじります。

$ sudo nano /etc/forked-daapd.conf


/etc/forked-daapd.conf

directories = { "/mydirpath/mydir" }



あとは、サービスを起動するだけです。

$ sudo /etc/init.d/forked-daapd start



【注意】
 クライアント側からDAAPで接続した時に曲は表示されるのに、再生が行えないときは共有ディレクトリ以下共有ファイルまでのパーミッションをチェックしてみてください。

$ sudo chmod -R 777 mydir

すると、再生できるようになります。

『RailsによるアジャイルWebアプリケーション開発 第4版』 第16章 第2節 訂正

『RailsによるアジャイルWebアプリケーション開発 第4版』の『16.2 Capistranoによるリモートでのデプロイ』のコードがバージョン違いにより動かなかったので報告。

【0】問題

問題のコードはp.227のdeploy.rb。

deploy.rb を書籍通りに設定して、次のページに進み、

$ cap deploy:setup

すると、

RVM - Capistrano integration was extracted to a separate gem, install: `gem install rvm-capistrano` and remove the `$LOAD_PATH.unshift` line, note also the 'set :rvm_type, :user' is now the default (instead of :system). (RuntimeError)

なるエラーを吐かれます。

Google先生に聞いてみたところ、新しいRVMに起因するエラーみたいです。
とりあえず、解決をはかっていきます。


【1】gem「rvm-capistrano」を入れる

アプリケーションルートのGemfileに以下の行を追加します。

gem 'rvm-capistrano'

そして、

$ bundle install




【1】deploy.rbの修正

APP_ROOT/config/deploy.rb を修正します。
【修正前】

$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
require "rvm/capistrano"
set :rvm_rub_string, '1.9.2'
set :rvm_type, :user

 ↑をこうします↓
【修正後】

require "rvm/capistrano"
set :rvm_ruby_string, '1.9.2'


これで正常に動作し、cap deploy:setup が通るようになりました。

ただ、解決までにかなり時間がかかり、ここに書いていないこともいろいろ試したので、もしかすると上記の方法だけでは解決しないかもしれません。その際はごめんなさいw

ファイルサーバーの状態を Munin で監視

以前、ファイルサーバーを立てたはいいものの、ろくに管理もせずほったらかしにしていたので、管理用ツールの Munin をインストールします。

【環境】
Ubuntu 12.04


【1】apache2 及び Munin のインストール

Munin と、それを動かすために必要な Apache を入れていきます。

$ sudo apt-get install apache
$ sudo apt-get install munin munin-plugins-extra


これだけで入ります。そう、Ubuntuならね。

注意点も、「必ず apache を先に入れる」ということくらいです。


【2】Munin の設定

設定と言っても大した設定もないんですが、/etc/munin/apache.conf の冒頭付近に以下の行を追記しました。

Allow from 192.168.0.0/24

言うまでもないことですが、ネットワーク環境によって、テキトーに書き換えてください。
上記の例だと、[192.168.0.*」からのアクセスを許可しています。

設定を有効にするために apache を再起動。

$ sudo service apache2 reload


これで、「http://ホスト名/munin/」にアクセスすることによってサーバーの各種状態を見ることができるようになります。
(ただし、情報が蓄積されるまでしばらく時間がかかります)


本当はパスワード設定とかもした方がいいんでしょうけど、面倒なので今回はパスで。

Rails で実行環境をプログラム側から取得

Railsで実行環境(test/development/production)を取得するには、ENV['RAILS_ENV'] を用います。

ヘッダやサイドバーに

<% unless ENV['RAILS_ENV'] == "production" %>
 <%= ENV['RAILS_ENV'] %>
<% end %>

とか書いておくと、今見ているアプリケーションがどの環境で実行されているのか一目でわかって便利かも。

『RailsによるアジャイルWebアプリケーション開発 第4版』 第16章 第1節 補足

Railsの勉強に使わせていただいている『RailsによるアジャイルWebアプリケーション開発 第4版』ですが、わかりにくい場所が何箇所かあります。
いや、すべての環境をカバーするのが無理なのはわかってるんですが。

とはいえ、本だけ見ててもサクッと進めないのは事実なので、また、この章(『16.1 Phusion PassengerとMySQLを使ったデプロイ』)はわかりにくい場所が特に多いので、自分の環境で気になったところを簡単に補足しておきます。

【環境】
Ubuntu 12.04
Apache 2.2.20
ruby 1.9.2p320
Rails 3.1.0


【1】p.219「Passengerのインストール」

Passengerのインストールに絡んで、apacheの設定をいじるあたりで、

$ apache -V | grep HTTPD_ROOT
$ apache -V | grep SERVER_CONFIG_FILE

して設定ファイルの場所(/etc/apache2/apache2.conf)を調べ、設定ファイルの「Listen 80」の後ろに

NameVirtualHost *:80

と書き込めというくだりがあるんですが、apache2.confをいくら探しても「Listen 80」が見つかりません。

というのも、Debian/Ubuntuではこのapache2.confとは別に/etc/apache2/ports.confという設定ファイルがあり、ここにポート関連の設定を書き込むみたいなので、このファイルを書き換えてください。
(ただし、ports.confには既に「NameVirtualHost *:80」が書き込まれていると思います)


【2】p.220「ローカルでのアプリケーションのデプロイ」

このセクションでも

<VirtualHost *:80>
 ServerName hostname
 DocumentRoot /home/username/work/depot/public/
 <Directory /home/username/work/depot/public>
  AllowOverride all
  Options -MultiViews
  Order allow,deny
  Allow from all
 </Directory>
</VirtualHost>

などという設定を書き込めと言われますが、どの設定ファイルに書き込めば良いのかが書かれていない。

普通ならapache2.confしかないので大丈夫なんでしょうが、Debian/Ubuntuの場合、この設定もports.confに書き込みます。

この状態でapacheをrestartしてページにアクセスすると「We're sorry, but something went wrong.」というページが表示され、production環境でアプリケーションが動きません。

ちなみに、これはアプリケーションのpublicディレクトリに入っている500.htmlが表示されている状態です。
試しに、適当に作ったindex.htmlをpublicディレクトリに置いてみると、その内容が表示されるのがわかります。

また、ports.confに「RackEnv development」を追加してみると、development環境のアプリケーションが起動します。

いろいろググってみると、偉大なる先人の記事にヒット。
http://d.hatena.ne.jp/tetsuyai/20110920/1316504421

要するにRails 3.1のバグ(?)で、config/evironment/production.rbまわりの設定が原因みたい。

# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = true

config.assets.compileの値をfalseからtrueに変更すればproduction環境でアプリケーションが起動します。


【3】p.221「MySQLデータベースの利用」

まずはじめに、mysql2のgemをインストールするところ。
書籍に書かれている通りにGemfileを設定してアプリケーションディレクトリで

$ bundle install

を実行すると、gem管理ツールであるbundlerがGemfileに書かれたgemをインストールしてくれます。

また、p.222の

$ mysql -u root

に関してですが、MySQLインストール時(書籍で言うとかなり初めの頃)にパスワードを設定した場合、

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

というメッセージと共に弾かれます。

$ mysql -u root -p

とすれば、コマンド実行直後にパスワードを尋ねられるので、その際に以前設定したパスワードを入力してください。

また、その先のdatabase.ymlの場所は、アプリケーションディレクトリのconfig/database.ymlにあります。
なお、YAMLファイルのインデントにタブは使えないので、半角スペースでインデントしてください。

Mechanize が Ruby 1.9.3 に対応!?

以前から便利に使わせてもらっているRubyのスクレイピングライブラリ「Mechanize」が Ruby 1.9.3 に対応したみたいです。
http://mechanize.rubyforge.org/

近いうちにこれをつかったプログラムを書くと思うので、詳しい記事はそのときにでも。

UbuntuにThnikPadキーボードつないでみた。

最近、英語キーボードが気になっていたので、買ってみました。

ThinkPad キーボード


ThinkPadキーボード(英語)です。
これで、マウスともおさらばだぜ!

というわけで、簡単な設定を。


【1】NumLock解除

環境にもよると思いますが、NumLockがかかった状態だとテンキーモードになり、J,K,Lあたりをはじめテンキーを割り振られているキーの文字を打てません。
というわけで、「Fn + NumLk」でNumLockを解除します。


【2】キーボード設定を英語に変更

「システム設定→キーボードレイアウト」で「英語(US)」のキーボード設定を追加します。
変更後、Shiftを押しながら数字の2キーを押して、「@」が入力されればOKです。


【3】iBusの設定

英語キーボードには言うまでもなく「半角/全角」キーがないので、そのあたりの設定をします。

UbuntuデフォルトのAnthyだと、Ctrl+Spaceで日本語入力と英語入力の切換ができるらしいのですが、Mozcで試してみたところ切り替わりませんでした。

というわけで、「キーボード・インプットメソッド→キーボードショートカット→切り替え」で任意のキーを設定します。キーボード・インプットメソッドはUnityで検索かければすぐに見つかります。



大した設定をしていませんが、こんな感じですかねー?
ちなみに、トラックポイントは特にドライバを入れたりする必要もなく、つないだ瞬間から使用可能です。

『RailsによるアジャイルWebアプリケーション開発 第4版』 第10章 第3節 誤植

Rails の勉強に使っている『Rails によるアジャイル Web アプリケーション開発 第4版』の第10章 第3節(10.3 カートの仕上げ)に誤植があったので、報告しておきます。

P.119 最下部に書いてあるテストコードを書かれたとおり実行すると、以下のエラーが出て、テストが通りません。

【エラー例】

FAIL should destroy cart (0.07s)
  "Cart.count" didn't change by -1.
<1> expected but was
<2>.
  /home/ubuntu/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.1.0/lib/active_support/testing/assertions.rb:60:in `block in assert_difference'



【誤】
test/functional/carts_controller_test_rb

test "should destroy cart" do
assert_difference('Cart.count', -1) do
  delete :destroy, {id: @cart.to_param}, {cart_id: @cart.id}
 end

 assert_redirected_to store_path
end


【正】
test/functional/carts_controller_test_rb

test "should destroy cart" do
 assert_difference('Cart.count', -1) do
  session[:cart_id] = @cart.id
  delete :destroy, id: @cart.to_param
 end

 assert_redirected_to store_path
end



※注意※
 上記のサンプルはインデントを表現するために全角スペースを使っています。

HP MicroServer NFS サーバーを入れて、Ubuntuからアクセス

HP MicroServer 上の Ubuntu 12.04 に Samba を入れて、VMware 上の Windows7 からアクセスからの続き)

ファイルサーバーにNFSを入れて、他のLinuxマシンからアクセスできるようにします。


【1】サーバー側の設定

まずは、NFSサーバーのインストール。

$ sudo apt-get install nfs-kernel-server

次に設定ファイルの /etc/exports を設定。次の内容を追記。

/media/md0/nas 192.168.0.0/255.255.255.0(rw,sync,no_root_squash)

設定を反映するために、nfs-kernel-server を再起動。

$ sudo /etc/init.d/nfs-kernel-server restart

(ちなみに、nfs-kernel-server はデフォルトで自動起動するので、自動起動設定は必要ありません)


【2】クライアント側の設定

まずはNFSクライアントのインストール

$ sudo apt-get install nfs-common


マウントポイントの作成、パーミッション変更。

$ mkdir /media/nas
$ sudo chmod 777 /media/nas

起動時にマウントするよう設定するため、/etc/fstab を編集。以下を追記。

192.168.0.100:/media/md0/nas /media/nas nfs rw,soft 0 0

一番左が「マウントするサーバー:ディレクトリ」、2番目が「マウント先」です。

/etc/fstab の編集がおわったら、設定に従ってマウントします。

$ sudo mount -a


これで Nautilus 上に共有ディレクトリが表示されていたら、無事、設定終了です。

HP MicroServer 上の Ubuntu 12.04 に Samba を入れて、VMware 上の Windows7 からアクセス

HP MicroServer に Ubuntu Server 12.04 を入れて RAID1 を設定からの続き)

今、自宅のメインマシンでは、Ubuntu 12.04 上の VMware に Windows をインストールして使っています。
Windowsからファイルサーバーである HP MicroServer につなげるようにするため、Samba を入れて、設定していきます。


【1】サーバー側の設定

まずは共有するフォルダのパーミッション設定。
ここでは、/media/md0 を共有フォルダにするという仮定で話を進めていきます。

$ sudo chown nobody:nogroup /media/md0
$ sudo chmod 777 /media/md0


次に Samba のインストール。

$ sudo apt-get update
$ sudo apt-get install samba

基本的にサクッと入ると思います。

ただ、以前にも書きましたが、「入ったかな?」と思って samba --version とかすると、「sambaとか見つからないよう>< で、でもでもっ! apt-get install samba4 でsamba4が入れれるんだよ!!」みたいなことを言われます。
このメッセージが出ても、基本的にSambaのインストールは成功しているので、メッセージには従わないほうが良さそうな感じです。

というわけで、早速 Samba の設定ファイルをいじっていきます。
設定ファイルは /etc/samba/smb.conf です。

[global]

## Browsing/Identification ###

# Change this to the workgroup/NT-domain name your Samba server will part of
; workgroup = MSHOME
workgroup = WORKGROUP

dos charset = CP932
unix charset = UTF-8
display charset = UTF-8

map to guest = Bad User

太字部分を追記しました。

続いて、同じ設定ファイルの末尾に共有フォルダの設定を追記します。

[share]
path = /media/md0
writeable = yes
force create mode = 0666
force directory mode = 0777
guest ok = yesHP MicroServer NFS サーバーを入れて、Ubuntuからアクセス
guest only = yes

各項目の設定内容はなんとなくわかると思いますが、ひとつだけ言っておくとするなら、「share」が Windows 側から見える共有フォルダ名になります。

これで Samba 側の設定は終了なので、Samba を再起動します。

$ sudo /etc/init.d/smbd restart

これで、設定した共有フォルダに Windows の「ネットワーク」などからアクセスできるようになります。

Windows からの接続が確認できたら、サーバー起動時に Samba が自動起動するように設定します。
RHEL 系だと chkconfig を使うようですが、Ubuntu では sysv-rc-conf を使います。

$ sudo apt-get update
$ sudo apt-get install sysv-rc-conf
$ sudo sys-rc-conf smbd on
$ sudo sysv-rc-conf -list|grep smbd

smbd 2:on 3:on 4:on 5:on

ちなみに、on の前に書かれている各数字はランレベルです。
上の例の場合、ランレベルが2から5のときに smbd が自動起動します。


【2】クライアント側の設定

通常の Windows だと、サーバー側の設定だけで大丈夫です。
クライアント側は特に何も設定しなくても、設定した共有フォルダがネットワークに表示されます。
あとは、好みでネットワークドライブの割り当てでもすれば終了です。

しかし、VMware 上で Windows を走らせている場合、そのままだと Windows がファイルサーバーを認識してくれないため、VMware 側のの設定をいじっていきます。

1) VMware のツールバーから、Virtual Machine > Virtual Machine Settings > Hardware > Network Adapter と順に進みます。
2) そこで、Network Connection の項目を NAT から Bridged へ変更する。

それだけです。かんたんー!
これだけのことを発見するまでに結構な時間を費やしましたorz

これで通常の Windows と同じように共有フォルダがネットワークに表示されるようになります。
あとはネットワークドライブの割り当てなど、どうぞご自由に。


次は、NFS の設定をして Linux からもこの共有フォルダにアクセスできるようにします。

続き⇛HP MicroServer NFS サーバーを入れて、Ubuntuからアクセス

AWS EC2 の Ubuntu に Ruby on Rails をインストール

【0】EC2 インスタンス作成

AWSで Ubuntu 12.04 EC2 インスタンスを生成。
すると、コマンドをタイプミスしたり、まだインストールしてないコマンドだったりで、コマンドが見つからないときに command-not-found has crhshed! とか言われて気持ち悪いので、やっぱり Ubuntu 11.10 でインスタンスを立ち上げることに。


【1】アップデート・SSH設定

とりあえず、rootパスワードの設定。そして、アップデート。

$ sudo su -
# passwd
$ sudo apt-get update
$ sudo apt-get dist-upgrade


クライアントから

$ scp -i xxx.pem id_rsa.pub ubuntu@serveraddress:~/.ssh

ここで、xxx.pemはインスタンス作成時に指定したファイルです。

サーバー側で

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

(">>"を">"とすると悲劇が起こるので注意!)

これでプライベートキーを持ったマシンからsshするだけでリモートログインできるようになります。
具体的にはこんな感じ。

$ ssh ubuntu@serveraddress



【2】関連パッケージのインストール

さて、Railsの導入ですが、その前に関連パッケージ等を入れます。

$ sudo apt-get install apache2 curl git libmysqlclient-dev mysql-server nodejs

MySQLがrootのパスワードを聞いてくるので、適当なものを入力してください。


【3】RVM及びRubyのインストール

次に、Rubyを入れます。
今回はRuby 1.9.2を入れますが、Ubuntu 11.10 のリポジトリには1.8.7しかないので、RVM(Ruby Version Manager)で入れます。
というわけで、RVMをインストール。環境によっては複数行で表示されるかもしれませんが、1行のコマンドです。

$ curl https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer | bash -s stable

いろいろと情報を見ていると、このRVMのインストール方法が結構コロコロ変わるらしく曲者なので、上記のコマンドで入らない場合はRVMの公式サイトに行ってインストール方法を調べてみてください。

RVMを入れたので、とりあえずRVMさんからのお手紙を読む。

$ rvm notes

すると、なにやらメッセージが。

* WARNING: You're using ~/.profile, make sure you load it,
add the following line to ~/.bash_profile if it exists
otherwise add it to ~/.bash_login:

source ~/.profile

言われるがままに ~/.bash_login に追記して、ターミナルを再起動。
しかし、WARNINGが消えない。気にせず先に進んでみる。

というわけで、Ruby1.9.2をインストール。

$ rvm install 1.9.2

途中、注意書き(?)みたいなのが書かれた画面が出てくるが、qで閉じる。

しばらくすると、エラー。

Error running 'make ', please read /home/ubuntu/.rvm/log/ruby-1.9.2-p320/make.log
There has been an error while running make. Halting the installation.

ログファイルを見ると、makeが入っていないとのこと。
試しに make -v してみると、本当に入っていない。
そんなことあるのかw

ともあれ、apt-get で make をインストールして make -v で入ったことを確認。それから、Rubyのインストールにリトライ。

$ sudo apt-get install make
$ rvm install 1.9.2

これでRubyのインストールが始まります。ただ、EC2 のインスタンスの種類にもよりますが、結構時間がかかります(Microだと30分とか)。

Rubyが無事に入ったかどうか確認。

$ ruby -v
ruby 1.9.2p320 (2012-04-20 revision 35421) [x86_64-linux]



【4】Ruby on Rails のインストール

RVMが使用するデフォルトのRubyバージョンを指定。

$ rvm --default 1.9.2

指定したRuby1.9.2を使ってRails 3.1.0をインストール。

$ gem install rails --version 3.1.0

これも結構時間がかかります。お茶でも飲んで待ちましょう。

30分くらいして、ターミナルが我々の手に返ってきたら、ちゃんとインストールされたかどうか確認します。

$ rails -v
Rails 3.1.0

上記のようなバージョンが帰ってきたらOKです。


【5】rails new してみる。

Rails のインストールができたので、早速、rails new してみます。

$ rails new demo

すると、エラー。

An error occured while installing sqlite3 (1.3.6), and Bundler cannot continue.
Make sure that `gem install sqlite3 -v '1.3.6'` succeeds before bundling.

おとなしくメッセージにしたがってみたものの、症状が一向に改善されません。そこで、ググってみると、それっぽい情報がヒット。ありがたく利用させてもらいます。

$ sudo apt-get install sqlite3 libsqlite3-dev
$ gem install sqlite3

これで無事、rails new が通るようになりました。


【5】rails server してみる。

Rails が入り、rails new で新しいアプリケーションの作成もできたので、とりあえず、rails server して、サーバーが動くかどうか試してみます。

$ rails server

すると、またしてもエラー。

openssl が見つからない、みたいなエラーですが、openssl は入っています。どうやら openssl が RVM 上の Ruby から見えない模様。
ググるとまたしても偉大なる先人を発見。

まず、rvm で openssl を入れます(結構時間かかります)。

$ rvm pkg install openssl

次に、インストール済みの Ruby を一旦削除します。

$ rvm remove 1.9.2

最後に、オプション付きで Ruby をインストールし直します(例のごとく30分くらいかかります)。

$ rvm install 1.9.2 -C --with-openssl-dir=$HOME/.rvm/usr

これで、RVM 上の Ruby から openssl が見えるようになります。
ちなみに、RVM に別のバージョンのRubyをインストールするときは、また上記オプション付きのインストールを行う必要があります。

インストールが終わったら、RVM のデフォルトバージョンをセット。

$ rvm --default 1.9.2

これで、rails server が通るようになります。

$ rails server
=> Booting WEBrick
=> Rails 3.1.0 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2012-06-24 05:03:13] INFO WEBrick 1.3.1
[2012-06-24 05:03:13] INFO ruby 1.9.2 (2012-04-20) [x86_64-linux]
[2012-06-24 05:03:13] INFO WEBrick::HTTPServer#start: pid=17595 port=3000



【6】EC2 側のポート設定

通常なら、rails server した後にブラウザで localhost:3000 を叩けば Rails のデフォルトページが表示されるのですが、今回は EC2 上に Rails 環境を構築しているため、そうはいきません。

EC2 には EC2 のインスタンス管理画面から取得したドメイン名を用いてアクセスします。
Webrick が使用するポート番号は3000なので、作成した Rails アプリケーションのURLは以下のようになります。

http://ec2-123-456-789-000.compute-1.amazonaws.com:3000

ただし、EC2 のデフォルト設定では22番(SSH)と80番(HTTP)以外のポートは閉じられているため、このままだとリクエストが通りません。

まず、EC2 の管理画面で左側メニューの NETWORK & SECURITY から Security Groups を選択。
使用している EC2 インスタンスに適用しているセキュリティグループを選択し、Inbound タブをクリックしてポート設定を行います。

PortRange に3000を指定して、Add Rule をクリック。
その後、下にある Apply Rule Changes をクリック。

これでポート設定が反映され、上記URLによって EC2 上の Rails アプリケーションにアクセスできるようになります。


【7】まとめ

AWS EC2 と関係のない Ruby on Rails インストールの手順だけ書くと、

$ sudo apt-get update
$ sudo apt-get install make sqlite3 libsqlite3-dev apache2 curl git libmysqlclient-dev mysql-server nodejs
$ curl https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer | bash -s stable

RVM を有効にするため、ターミナルを再起動。

$ rvm pkg install openssl
$ rvm install 1.9.2 -C --with-openssl-dir=$HOME/.rvm/usr
$ rvm --default 1.9.2
$ gem install sqlite3
$ gem install rails --version 3.1.0

最短、これで入ります。

HP MicroServerにUbuntu Server 12.04を入れてRAID1を設定

HP ProLiant MicroServer 買っちゃった☆からの続き)

MicroServer に Ubuntu Server 12.04 Precise Pangolin を入れていきます。


【0】インストール用USBメモリの作成

MicroServerには光学ドライブがついていないので、USBメモリからインストールします。
Boot用USBメモリはUNetbootinで作成しました。

Ubuntuなら、

$ sudo apt-get install unetbootin

でインストールできます。

インストール後、UNetbootinを立ちあげて、公式サイトなどから落としてきたイメージファイル(.iso)を指定してUSBメモリに焼きこみます。
GUIで直感的に操作できると思いますが、詳しい使い方を知りたければググってください。


【1】OSインストール

Ubuntuではインストール時にRAID設定をすることも可能ですが、今回はOSのインストール後に設定する方針で行こうと思うので、ブートドライブ以外は外しておきます。

MicroServerにUSBメモリを挿して、BIOSでUSBブートを指定して起動すると、UNetbootinの画面が立ち上がります。

ここで、Dafaultを選んでも良さそうなんですが、どうやらDefaultやInstallだとうまく行かないっぽいので、その下の方にある Install Ubuntu Server を選択して進みます。通常通りインストールすれば大丈夫です。面倒なので、セキュリティアップデートも自動更新に設定。

ただ、言語設定だけは日本語じゃなく英語にしておきました(日本語が文字化けするのを避けるため、また、英語の方がネット上に情報が多いためエラーメッセージをググった時に解決策等がヒットしやすいため)。

あと、どうでもいいことですが、ファイルサーバーということでホスト名をTsubasaにしました。
「お前は何でも知ってるな」「何でもは知らないわよ、知ってることだけ」


というわけで、これでOSインストール完了。


【2】いろいろな設定

まずはrootパスワードの設定。

$ sudo su
# passwd


次にもろもろのアップデート。

$ sudo apt-get update
$ sudo apt-get dist-upgrade


続いて、IPの固定。
/etc/network/interfaces を開き、auto eth0 と書かれている行に続けて次の内容を追記。デフォルトで書かれていたDHCPの設定行をコメントアウト。

auto eth0
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameservers 192.168.0.1
# iface eth0 inet dhcp

設定を反映。

$ sudo /etc/init.d/networking restart



【3】OpenSSHサーバーをインストール・設定

$ sudo apt-get install openssh-server

インストールできたら公開鍵を登録。
サーバー側でディレクトリ.sshを作る。

server$ mkdir .ssh

クライアント側からscpで公開鍵をコピー。

client$ scp ~/.ssh/id_rsa.pub username@192.168.0.100:~/.ssh

コピーした公開鍵のファイル名を authorized_keys に書き換える。

server$ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

続いて、サーバー側の /etc/ssh/sshd_config を以下のように設定。

PermitRootLogin no
PasswordAuthentication no

sshdを再起動。

$ sudo /etc/init.d/ssh restart

これで、設定完了。
クライアント側でターミナルを立ちあげてSSH接続してみます。

client$ ssh username@192.168.0.100

無事、公開鍵認証によって接続できるようならOK.
以降の作業はリモートで行います。


【4】RAID1の設定

まずは、今使っているパーティションの確認。

$ df

Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sdc1 56542432 2183680 51526268 5% /
udev 952168 4 952164 1% /dev
tmpfs 384380 240 384140 1% /run
none 5120 0 5120 0% /run/lock
none 960948 0 960948 0% /run/shm

$ ls /dev/sd*

/dev/sda /dev/sdb /dev/sdc /dev/sdc2
/dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdc5

今、OSが入ってて / にマウントされてるのが /dev/sdc1。つまり、これからRAIDを組むのは /dev/sda 及び /dev/sdb ということになります。

parted を使って、対話形式で /dev/sda にRAIDパーティションを作成していきます。
実行時のターミナルの表示・入力を抜粋して記載します。太字部分が入力項目です。

$ sudo parted /dev/sda

(parted) mklabel msdos
Warning: The existing disk label on /dev/sda will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? yes
(parted) mkpart
Partition type? primary/extended? primary
File system type? [ext2]? ext4
Start? 0
End? -1s
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? i
(parted) set 1 raid on
(parted) print

Model: ATA WDC WD20EARX-00P (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos

Number Start End Size Type File system Flags
1 512B 2000GB 2000GB primary raid

(parted) quit

/dev/sdb も同様にパーティション作成します。

そして、RAID構築・管理ツールの mdadm をインストールします。

$ sudo apt-get install mdadm

途中、Postfixも一緒にインストールされて設定をどうするかとか聞かれますが、local onlyとかをテキトーに選びます。

RAIDデバイスを作ります。

$ sudo mdadm --create --auto=yes /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1

これで、/dev/md0 という名前のRAID1デバイスが出来上がります。

続いて、作成したRAID構成の状態をrootで/etc/mdadm.confに設定として保存。

# mdadm --examine --scan > /etc/mdadm.conf


作成したデバイスにパーティションを設定。

$ sudo parted /dev/md0

「set 1 raid on」を入力しないという点以外は、受け答えは基本的に同じで大丈夫です。


【5】作成したRAIDデバイスのマウント設定

起動時にデフォルトでRAIDデバイスをマウントするように設定。
/etc/fdtab にRAIDデバイスの設定を追記します。

まずは、デバイスのUUIDの取得。

$ sudo blkid /dev/md0

ここで表示されたUUIDをコピーして、/etc/fdtabを編集。以下を追記します。

UUID=240170be-3115-4d59-b943-0dc162f26cc1 /media/md0 ext4 defaults 0 0

fstabの設定を反映。

$ sudo mount -a

マウントされているかどうか確認。

$ df

Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sdc1 56542432 2349076 51360872 5% /
udev 952168 12 952156 1% /dev
tmpfs 384380 256 384124 1% /run
none 5120 0 5120 0% /run/lock
none 960948 0 960948 0% /run/shm
/dev/md0 1951642228 28982484 1824984076 2% /media/md0

一番下に/dev/md0が追加されています。


【6】作成したRAIDのチェック

マウントしたRAIDデバイスにテスト用のファイルを書き込みます。

$ sudo nano /media/md0/testfile

ファイルを書き込んだらサーバーを落として、RAID1を組んでいるHDDを片方ずつ外して起動させてみます。
どちらを外した場合もテスト用のファイルが読み込めれば無事RAID1が設定できています。

ろばすと!

⇛続き HP MicroServer 上の Ubuntu 12.04 に Samba を入れて、VMware 上の Windows7 からアクセス

HP ProLiant MicroServer 買っちゃった☆

前から欲しいと思っていたHP ProLiant MicroServerを買っちゃいました。
というわけで、れびゅー。

画質も部屋も汚いのはご愛嬌w
サムネイルクリックで拡大します。

まずは外箱。
思ってたよりも大きい。

IMG_20120615_145937.jpg


本体。
やっぱり思ってたより大きい。
とはいえ、思ってたより、というだけで、HDDを4台積めるケースとしては十分小さいと思います。

IMG_20120615_150117.jpg


サーバーっぽい鍵付きのケース(個人的にテンション上がるポイント)

IMG_20120615_150347.jpg


開けるとこんな感じ。
ワンタッチで抜き差し出来るHDDスロット4本の下に、引き出し可能なマザーボードがあります。

IMG_20120615_150359.jpg


フロントカバーを開けるとHDD固定用のネジが。
細かいネジをいちいち管理しなくて良い、いい心配り。

IMG_20120615_150406.jpg

フロントカバー裏。
銀色のが5インチベイ用のネジ。見えにくいですが、その左にあるのがヘキサゴンレンチ。
工具まで備え付けとか気が効きすぎる。

IMG_20120615_150417.jpg


で、こんな感じでドライブをセット。
5インチベイにブート用SSD、Intel 60GB。
下のHDDスロット2本にそれぞれ2TB。これでRAID1を組みます。

IMG_20120615_170104.jpg

ちなみに、ご覧の通り、前面パネルも上面パネルも綺麗に外れます。
しかも、その際に工具を全く必要としません。いい設計。
(上面パネルの外し方がわからなくてしばらく困っていましたが、手前にスライドさせるだけでした)

SSDは2.5→5インチ変換金具を使って、こんな感じでセットしました。

IMG_20120615_170139.jpg


これからこいつに Ubuntu Server 12.04 とかを入れて、ファイルサーバーにしていきます。

続き⇛HP MicroServerにUbuntu Server 12.04を入れてRAID1を設定

UbuntuにVMwareでWindows7を入れてみた。

Ubuntu 12.04 上の Vmware 4.03 にWindows 7 を入れてみました。

今のところ快調。

Windowsエクスペリエンスインデックスも、

CPU:5.7
RAM:5.5
グラフィックス:6.0
ゲーム用グラフィックス:6.0
HDD:7.6

でした。

ちなみに、実行環境のハードウェアはこんな感じ。

CPU:Core2 Quad Q6600(うち2コアを割り当て)
RAM:3GB(うち1.5GBを割り当て)
GPU:Geforce GTR260(うろ覚え)
SSD:Intel 520Series 120GB(うち60GBを割り当て)

Ubuntu 12.04 に VMware Player 4.03 をインストール

こちらのサイトを参考に。
http://mag.t-mugi.info/?p=114
http://d.hatena.ne.jp/tarurut/20120506/1336301372

というか、ほぼ言いなりで進めていきます。

build環境をインストール。

$ sudo apt-get install build-essential


VMware公式サイトからVMwarePlayerをダウンロード。
ファイル名は VMware-Player-4.0.3-703057.i386.bundle でした。

このファイルに実行属性をつけてインストール。

$ chmod +x VMware-Player-4.0.3-703057.i386.bundle
$ gksudo bash ./VMware-Player-4.0.3-703057.i386.bundle


その後、以下のコマンドを実行しパッチを適用。

$ wget http://weltall.heliohost.org/wordpress/wp-content/uploads/2012/01/vmware802fixlinux320.tar.gz
$ tar xvfz vmware802fixlinux320.tar.gz


解凍してできた patch-modules_3.2.0.sh を開いて、「plreqver=4.0.2」を「plreqver=4.0.3」に書き換えてから、以下のコマンドを実行。

$ sudo ./patch-modules_3.2.0.sh
$ sudo rm /usr/lib/vmware/modules/source/.patched


その後 VMware Player 4.0.3 を起動する。

これでおkなハズ。
カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
検索フォーム
カテゴリ
月別アーカイブ
最新記事
最新コメント
最新トラックバック
RSSリンクの表示
QRコード
QR
リンク
アクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。