神栖ビーチレース参戦記

昨今はオフロードバイクの大会が少なくなりつつありますが、何と新たな大会が開催されました!

http://homepage3.nifty.com/wins/beach1.html

しかも、砂浜をひたすら走ることができるという、とても貴重なレースと言えます。

以下、参加レポートをまとめます。

コンディション
- 若干肌寒いくらい
- funクラス1ヒートが終わるまでは曇り、それ以降はパラパラと雨が降ってきた
- 雨が降っても、海砂なのでドロドロにはならない
走った感想
- 砂浜をはしるのは、結構難しい
- 前輪と後輪が同時にブレる感じは、とってもスリリング (>_<)
- スピードを付けて真っすぐ走れないと、蛇行しまくる
- コーナーでマシンを大きく傾けると抵抗が大きくなり、転倒してしまう
今後の課題
- マシンがぶれてもビビらずにアクセルを開ける
- スピードを付けていれば転倒しなくなるはず。前に転ぶ感覚で走れるように目指す
- 砂浜を楽しく走れるように
- 今回は、楽しいというよりはモガキ苦しんだ感じなので..

それにしても、レーサークラスの人たちは速すぎです。
現役のJNCCトップライダーの人も参加しており、ブッチギリで優勝されました。私の2倍は速いです。何とか1.5倍くらいまで追い付きたいものです。

Rails Recipes: Rails 3 Edition

Rais Recipes: Rails 3 Edition のβ版が発売されたので、買ってみました。

Rails Recipes: Rails 3 Edition by Chad Fowler | The Pragmatic Bookshelf

Rails Recipes: Rails 3 Edition

Rails Recipes: Rails 3 Edition

今は円高なので、電子書籍版が\1,800円くらいで購入できました。
Pragmaticシリーズは epub,mobi(Kindle),pdf 3つの形式が提供されているので、色々な端末で見られてお得感が高いです。

Heroku を試してみる

Ruby On Rails の PaaS として有名な Heroku の使い方についてまとめてみます。

参考情報:

開発環境としては、Debian 6.0 を用います。

尚、Herokuの ruby version は 1.9.2の模様なので、Debianパッケージの ruby は使わずに rvm にてインストールした ruby-1.9.2 を使用します。

rubyのインストール(rvmを使用)

$ bash < <(curl -sk https://rvm.beginrescueend.com/install/rvm)

$ vi ~/.bash_profile
(下記を追加し、rvm環境を有効にする)
-s "$HOME/.rvm/scripts/rvm" && . "$HOME/.rvm/scripts/rvm"

(テスト例)
$ rails generate scaffold User name:string id:integer
$ rake db:migrate
$ git -a -m "update db"
$ git push heroku master
$ heroku rake db:migrate

(readlineやopenssl等、heroku で使用しそうなrubyライブラリは予め組み込んでおきます)
$ rvm pkg install readline
$ rvm pkg install openssl
$ rvm pkg install zlib
$ rvm install 1.9.2 --with-openssl-dir=$HOME/.rvm/usr \
--with-readline-dir=$HOME/.rvm/usr \
--with-zlib-dir=$HOME/.rvm/usr
$ rvm use 1.9.2 --default

Ruby on Rails(開発環境の準備)

次に、Ruby on Railsをインストールします。

$ gem install rails
$ bundle install

Heroku をインストール

次に、herokuサービスにアクセスするためのパッケージ(gem)をインストールします。

$ gem install heroku

テストアプリの作成

開発環境の構築が完了したので、次は railsアプリを作成します。

$ rails generate hello
$ rails server
(開発環境でアプリが起動することを確認)

heroku に deploy

herokuにアプリをデプロイするには、以下の手順を踏みます。

  1. railsアプリを開発環境で作成
  2. heroku側のアプリケーションサーバを起動(初回のみ)
  3. gitリポジトリソースコードを登録(または更新)
  4. git pushコマンドを用いて heroku にソースコードを転送
heroku側のアプリケーションサーバを起動

$ heroku create
heroku側のアプリケーションサーバを起動します。サーバが起動すると、URLが発行されます。
初回は Emailアドレス及びパスワードを要求されますので、サインアップ時に登録した情報を入力します。
Enter your Heroku credentials.
Email: joe@example.com
Password:
Uploading ssh public key /Users/joe/.ssh/id_rsa.pub
Created http://high-sunrise-58.heroku.com/ | git@heroku.com:high-sunrise-58.git
Git remote heroku added

gitリポジトリソースコードを登録

(railsソースコードの top ディレクトリにて)
$ git init
$ git add .
$ git commit -m "Initial code"

git pushコマンドを用いて heroku にソースコードを転送

$ git push heroku master

ブラウザを開いてアプリの動作を確認

$ heroku open

heroku 管理Web-UI

herokuのwebサイトにログインすると、下記のような管理画面を表示することができます。

heroku db:migrate 注意点

heroku で db:migrate をしようとすると、rakeコマンドがエラーで停止してしまいます。Rakefile の "require 'rake'" の手前で以下の require文 を追加すると良いようです。

require 'rake/dsl_definition'

(テスト例)
$ rails generate User name:string id:integer
$ rake db:migrate
$ git add .
$ git commit -m "update db"
$ git push heroku master
$ heroku rake db:migrate

ルータを便利に遠隔制御しよう Capistrano

サーバ系のホストの管理は台数が増えると大変面倒になることは、運用のお仕事をされている人であればよくご存じだと思います。

世の中には、ホスト管理の課題を解決するためのツールとして Chef, Puppet, CFEngine や Capistrano などがあります。

翻ってルータに関しては、まだ決定打と呼べるほどの解決方法は無いのが現状だと思います。(SNMPはコンフィグ管理に不向きだし、NetConf は現状では機種依存度が高すぎだし..)

それでも、Unix OS系のルータアプライアンスであればホストと同じ仕掛けで簡単に管理することが出来てしまいます。

前置きが長くなってしまいましたが、今回のお題目は

を試してみます。

Capistrano

Capistrano は、複数のホストに対してコマンド実行などを実施する際に使うと便利なツールです。

Capistrano は管理対象の機器にソフトウェアをインストールする必要がありません。

コンフィグの管理については Puppet, Chef, CFEngine 等を使う方が良いですがバッチ処理的なことをさせるのであれば Capistrano が便利です。

Capistrano インストール

インストールはとても簡単です。以下のコマンドを管理サーバで実行するだけでインストールは完了します。

$ gem install -y capistrano
$ cap -h

vyatta + Capistrano

Capistrano では、rubyベースの 定義ファイル を記述することで「複数の環境に同じ処理を同時に実行させる」ことを実現します。

まずは、vyatta を例にコマンドを実行してみます。

set :user, "vyatta"
set :password, "(password)"

role :server, "(サーバのIPアドレス又はFQDN)"

desc "Test task"
task :show_route, :roles => :server do
run "~vyatta/run-cmd.sh show ip route"
end

上記の定義ファイルを "Capfile" という名前で保存し、以下のコマンドを実行します。

尚、vyattaのコマンドを投入する場合は前回紹介した ~vyatta/run-cmd.sh が必要になります。

(実行例)
$ cap show_route
* executing `show_route'
* executing "~vyatta/run-cmd.sh show ip route"
servers: ["192.168.0.1"]
[192.168.0.1] executing command
** [out :: 192.168.0.1] Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
** [out :: 192.168.0.1] I - ISIS, B - BGP, > - selected route, * - FIB route
** [out :: 192.168.0.1]
** [out :: 192.168.0.1] S>* 0.0.0.0/0 [210/0] via 192.168.192.5, eth0
** [out :: 192.168.0.1] C>* 127.0.0.0/8 is directly connected, lo
** [out :: 192.168.0.1] C>* 192.168.0.0/24 is directly connected, eth0
command finished in 141ms


SEIL/x86 + Capistrano

SEIL/x86 の場合は、定義ファイルに下記を追加する必要があります。

default_run_options[:shell] = false
default_run_options[:pty] = true

set :user, "user"
set :password, "(password)"

role :server, "(SEIL/x86IPアドレス又はFQDN)"

default_run_options[:shell] = false
default_run_options[:pty] = true

desc "WOL(Wake On Lan)"
task :wol, :roles => :server do
run "wol 00:11:22:33:44:55 interface lan0"
end

(実行例)
$ cap wol
* executing `wol'
* executing "wol 00:11:22:33:44:55 interface lan0"
servers: ["1.2.3.4"]
[192.168.0.1] executing command
command finished in 142ms

vyatta をリモート制御する

vyatta を ssh 等で制御しようとしてハマった人は結構多いのではないかと思い、tips をまとめておきます。

尚、お金のある人は vyatta subscription版 を購入すれば remote access api が利用できるので、こちらも便利だと思います。

遠隔からの vyatta operation

vyatta の CLIbash の complete機能 を用いて実現しています。そのため、sshコマンドに引数を渡してもvyattaコマンドの遠隔実行はできません。(通常のbashコマンドであれば動作します)

そこで、以下のようなスクリプトを経由させて間接的にコマンドを実行する必要があります。

  • ~vyatta/run-command.sh


!#/bin/vbash

vyatta_sbin=/opt/vyatta/sbin

args=$*

. /etc/bash_completion

eval _vyatta_op_run $args

リモートホストから vyatta を制御するには、例えば以下のように実行します。


$ ssh vyatta@(vyattaホスト) '~/run-command.sh show version'

遠隔からの vyatta configuration

遠隔ホストから vyatta のコンフィグを書きかえる場合は、以下のようなスクリプトで実行できます。

  • ~vyatta/config.sh


#!/bin/bash

vyatta_sbin=/opt/vyatta/sbin

wr=$vyatta_sbin/vyatta-cfg-cmd-wrapper

opt_cmd=$1
shift
cmdline=$*

cfg_stdin ()
{
while read line
do
eval $wr "$line"
done
}

cfg_cmdline ()
{
eval $wr $cmdline
}

. /etc/bash_completion

$wr begin

if [ "${opt_cmd}" = "-c" ]
then
cfg_cmdline
else
cfg_stdin
fi

$wr commit

$wr end


$ ssh vyatta@(vyattaホスト) '~/config.sh -c set system host-name foobar'

上記スクリプトは 引数 '-c' を付けると、続けてコンフィグ設定コマンドを記述できます。

何も引数を付けない場合は標準入力からコマンドを受け付けるので、複数のコンフィグをまとめて変更する際に利用します。

config.sh や run-command.sh は ホスト内でも勿論利用できますので、vyatta CLI を用いてバッチ処理をさせたい場合にも利用できます。なので、うまく活用すれば Junos の event script のような応用もできそうです。

WOLを使って節電対策をしましょう(SEIL/x86編)

今年の夏に向けて、関東圏では大幅な電力不足が予想されております。

工場やデータセンタなどの部門では従前から電力削減が進んでいるのは周知のことですが、IT企業のオフィスのデスクトップなどは24時間通電しているパソコンは結構あったりすると思います。

そこで、今回はWOL(Wake-On-LAN)機能を用いてお手軽にPCの遠隔起動ができる方法をまとめてみます。

WOL機能をルータ越しで使いたい

WOL機能はとても便利なのですが、基本的には同一ネットワーク内でないと動作しません。場合によると使えることもあるので、ネットワーク管理者さんがいれば聞いてみましょう。

  • ルータにディレクテッドブロードキャスト宛の通信を転送する機能を有効にしてもらえるかどうか(デフォルトは offの場合が多いです)
  • リモートアクセス(SSL-VPNPPTP, L2TP/IPSEC等)でWOLパケットが通るかどうか

どうにもうまくいかない場合もあると思いますが、もし手元のネットワークに SEIL/x86 を動作している場合は SEIL の WOL機能を用いると簡単にマジックパケットを送信することができます。

  1. PCのWOL設定を有効にする
    • 大抵のパソコンはBIOSの工場出荷時設定が WOL無効 になっておりますので、まずは有効にします。BIOSによって設定項目名はバラバラなので、がんばって探し当てましょう。
  2. SEIL/x86 をPCの動作するネットワーク上で起動する
    • 特に複雑な設定は必要ありません。LANインタフェースにIPアドレスを振り、デフォルト経路を設定すればOKです。
  3. リモートPCから社内LANに接続する
    • SSL-VPNPPTP等で「お外」のPCから社内LANに接続します。
  4. マジックパケットを送信する
    • SEILにtelnet等でログインし、以下のコマンドを実行します。


wol 00:11:22:33:44:55
(00:11:22:33:44:55 は、PCのMACアドレスに置き換えます)

putty を用いて便利に実行

WOL機能を利用する度に毎回SEILへログインするのは面倒なので、以下のようにすると便利になります。

  • SEIL の sshd機能を有効にする
    • SEILにログインし、"sshd enable" の設定を追加します
  • putty をリモートPCにインストールする
  • putty を実行する
    • Connection -> SSH の項目に "Remote command:" の欄があるので、以下のコマンドを登録します


wol

節電対策を進めて、今年の夏を乗り切りましょう!

SEIL/x86 IPsec機能を試す(第一回: 概要)

SEILシリーズは企業向けのインターネット接続に良く利用されているそうです。ということは、SEIL/x86IPsec機能については充実しているに違いない、というわけで色々とテストをしてみます。

まずは、SEILシリーズで利用できるVPNについてまとめます。

SEIL/x86で利用できるVPN

機能 接続形態 種別
IPsec トンネルモード IKE+ESP
IPsec トランスポートモード IKE+ESP
IPsec IPIPトンネル + トランスポートモード IKE+ESP over IPIP
IPsec IPsecインタフェース 仮想インタフェースを用いたIPsec通信
PPTP リモートアクセスVPN PPTPプロトコル
L2TP/IPsec リモートアクセスVPN L2TPv2 over IPsec
L2TPv3 L2TPv3ブリッジ接続 L2TPv3を用いた仮想Ethernet通信
L2TPv3/IPsec L2TPv3ブリッジ接続 L2TPv3 over IPsec

但し、PPTPはサーバ機能のみの提供のため、クライアントにはなれない模様です。
SSL-VPNは利用できないようですが、その他の機能は充実している感じです。

SEIL/x86 IPsec仕様

機能 仕様
対地数 最大512対向(SEIL/x86)
トンネルモード 対応
トランスポートモード 対応
暗号化アルゴリズム DES, 3DES, AES, Blowfish, CAST-12
認証アルゴリズム HMAC-MD5, HMAC-SHA1, KEYED-MD5, KEYED-SHA1
その他機能 IPsec インタフェース, 片端固定 IPsec, Dead Peer Detection, NAT-Traversal

次回以降は、実機を用いてVPN接続を試していきます。