VirtualBoxのHeadless起動

VirtualBoxでVMを起動する時にいちいちGUIがある必要は全くないのでHeadlessで起動したい。コマンドラインツールで指定してあげれば出来るご様子。

# vmidを指定する必要があるので確認
$ VBoxManage list vms
# 起動
$ VBoxManage startvm <vmid> --type headless
# 状態を保存して終了
$ VBoxManage controlevm <vmid> savestate

終了させるコマンドがないみたいだけどShutdownしてあげれば切れるっぽい?

でも毎回vmid指定するのはしんどいのでこんなの書いてみたけどこんなんでいいんだろうか。ちゃんと$HOME/binとか作ってパス通した起動スクリプトとかにすべき?とりあえず.zshrcからsourceして使ってる。

WindowsでRuby環境をpikを使って整える

pikのインストール

https://github.com/vertiginous/pik

RubyVersionManagerことRVMのWindows版らしい。ご丁寧にインストーラが用意されてるのでそれを入れる。gitがなくても入れられる*1。せっかくなので最新版の0.3.0-preを入れてみる。

  1. https://github.com/vertiginous/pik/downloads からDL
  2. インストーラを起動してサクサクとWindowsではおなじみのNextを押す簡単な作業をこなす
  3. 使えることを確認
C:\Documents and Settings\cynipe>pik --help
Usage: pik command [options]

To get help with a command

  pik help (command)

To list all commands and descriptions:

  pik help commands

    -V, --version                    Pik version
    -d, --debug                      Outputs debug information

Ruby1.9.2のインストール

pikを使ってruby-1.9.2をインストールする。

C:\Documents and Settings\cynipe>pik install ruby-1.9.2
creating D:\home\cynipe\.pik
ERROR: You need the 7zip utility to extract this file.
       Run 'pik package 7zip install'

なんか怒られてるけど丁寧なインストラクションがついてるので従う。

C:\Documents and Settings\cynipe>pik package 7zip install
INFO: Downloading:  http://downloads.sourceforge.net/sevenzip/7za920.zip
      to:  D:\home\cynipe\.pik\downloads\7za920.zip

7za920.zip: 100% |ooooooooooooooooooooooooooooo| 375.8KB/375.8KB Time: 00:00:00

も一度インストールを試みる。

C:\Documents and Settings\cynipe>pik install ruby-1.9.2
INFO: Installing ruby-1.9.2-p136

INFO: Downloading:  http://rubyforge.org/frs/download.php/73723/ruby-1.9.2-p136-
i386-mingw32.7z
      to:  D:\home\cynipe\.pik\downloads\ruby-1.9.2-p136-i386-mingw32.7z

ruby-1.9.2-p136-i386-min...7z: 100% |oooooooooo|   5.8MB/  5.8MB Time: 00:00:28
INFO: Extracting:  D:\home\cynipe\.pik\downloads\ruby-1.9.2-p136-i386-mingw32.7z

      to:  D:\home\cynipe\.pik\rubies\ruby-1.9.2-p136


There was an error.
 Error: Permission denied - D:\home\cynipe/.pik/rubies/ruby-1.9.2-p136/ruby-1.9.
2-p136-i386-mingw32/lib or D:\home\cynipe/.pik/rubies/ruby-1.9.2-p136/lib

  in: fileutils.rb:506:in `rename'
  in: fileutils.rb:506:in `mv'
  in: fileutils.rb:1397:in `fu_each_src_dest'
  in: fileutils.rb:1411:in `fu_each_src_dest0'
  in: fileutils.rb:1395:in `fu_each_src_dest'
  in: fileutils.rb:495:in `mv'
  in: pik/installer.rb:48:in `mv_r'
  in: pik/installer.rb:82:in `extract'
  in: pik/installer.rb:81:in `each'
  in: pik/installer.rb:81:in `extract'
  in: pik/installer.rb:74:in `each'
  in: pik/installer.rb:74:in `extract'
  in: pik/commands/install_command.rb:29:in `execute'
  in: pik_runner:27

HOMEを変えてるせいかなんか怒られた。試しにも一度叩いてみたら何故かうまくいった。

C:\Documents and Settings\cynipe>pik install --force ruby-1.9.2
INFO: Installing ruby-1.9.2-p136

INFO: Removing D:\home\cynipe\.pik\rubies\ruby-1.9.2-p136

INFO: Downloading:  http://rubyforge.org/frs/download.php/73723/ruby-1.9.2-p136-
i386-mingw32.7z
      to:  D:\home\cynipe\.pik\downloads\ruby-1.9.2-p136-i386-mingw32.7z

INFO: Extracting:  D:\home\cynipe\.pik\downloads\ruby-1.9.2-p136-i386-mingw32.7z

      to:  D:\home\cynipe\.pik\rubies\ruby-1.9.2-p136

      Extraction complete.
INFO: Adding:  [ruby-]1.9.2[-p136]
      Located at:  D:\home\cynipe\.pik\rubies\ruby-1.9.2-p136\bin

気をとりなおしてデフォルトをruby-1.9.2にする。

C:\Documents and Settings\cynipe>pik default ruby-1.9.2

C:\Documents and Settings\cynipe>ruby -v
ruby 1.9.2p136 (2010-12-25) [i386-mingw32]

うまくいった。わーい。

Bundlerをインストール

gemを管理する為にもBundlerをインストールする。

C:\Documents and Settings\cynipe>gem install bundler
Successfully installed bundler-1.0.13
1 gem installed
Installing ri documentation for bundler-1.0.13...
Installing RDoc documentation for bundler-1.0.13...

動くか確認。

C:\Documents and Settings\cynipe>bundle --version
Bundler version 1.0.13

わーいわーい。

まとめ

これで少なくとも今自分がMac上で使ってる簡易ビルドスクリプトとかJenkinsのユーティリティとかもみんなにも使ってもらえそう。

正直Windows上でRuby環境整えるのとか億劫になってる人は多いと思うのだけど*2、これだけ簡単に導入出来るならいける!勝てる!簡単にスライドにまとめてみんなやってね!とすればRubyでハッピーな日々が送れるに違いない!やったねたえちゃん!

*1:まぁ、アーカイブを拾えばいいのだけど

*2:特にメインでは使わず簡易スクリプトだけ実行したいな人の場合とか

JenkinsのJobを一括で有効/無効にするスクリプト

1個ずつ有効/無効の切り替えをするのがだるいので書いてみた。

hashに対して動的にアクセスするのでintern使ってるけどこれってそもそもお行儀のいいやり方なのかしら?あとeachのときにdo〜endとするのと{}で書くのってどちらが一般的なのかしら?

#mongotokyoのUSTに触発されてとりあえず動くとこまでやってみた

この資料の発表を見てみたんだけど、プロトタイプの作成には凄く良さそうだなぁと。REST-APIを利用して動くクライアント側の実装者がサーバサイドMock作るにはサクサクっと出来そうで夢が広がる。使いこなしとかは考えず使ってみるのは良さそう。

て、訳でとりあえず動かすとこまでやってみました。

インストール & 起動!

$ brew install mongodb
==> Downloading http://fastdl.mongodb.org/osx/mongodb-osx-x86_64-1.8.1.tgz
######################################################################## 100.0%
==> Caveats
If this is your first install, automatically load on login with:
    mkdir -p ~/Library/LaunchAgents
    cp /usr/local/Cellar/mongodb/1.8.1-x86_64/org.mongodb.mongod.plist ~/Library/LaunchAgents/
    launchctl load -w ~/Library/LaunchAgents/org.mongodb.mongod.plist

If this is an upgrade and you already have the org.mongodb.mongod.plist loaded:
    launchctl unload -w ~/Library/LaunchAgents/org.mongodb.mongod.plist
    cp /usr/local/Cellar/mongodb/1.8.1-x86_64/org.mongodb.mongod.plist ~/Library/LaunchAgents/
    launchctl load -w ~/Library/LaunchAgents/org.mongodb.mongod.plist

Or start it manually:
    mongod run --config /usr/local/Cellar/mongodb/1.8.1-x86_64/mongod.conf
MongoDB 1.8+ includes a feature for Write Ahead Logging (Journaling), which has been enabled by default.
This is not the default in production (Journaling is disabled); to disable journaling, use --nojournal.
==> Summary
/usr/local/Cellar/mongodb/1.8.1-x86_64: 16 files, 93M, built in 2 seconds

Caveatsの指示にしたがって起動。

mongod run --config /usr/local/Cellar/mongodb/1.8.1-x86_64/mongod.conf

Rubyで触ってみる

とりあえずMongoDBのRubyチュートリアルを参考に動かすところまで。

ドライバのインストール

ドライバをgemでインストールする

$ gem install mongodb
$ gem install bson_ext # なんかあるといいよ的な感じで言われたので入れる

で、使ってみる。ruby1.9.2でっす。

# -*- encoding: utf-8 -*-
require 'rubygems'
require 'mongo'

conn = Mongo::Connection.new
db = conn.db('local')
coll = db['testCollection']
coll.insert({name:"cynipe", age:29})
coll.find.each{|row| puts row.inspect}

感想

簡単!!セットアップ〜記事書くまで含めて20分くらいでできちゃった!これからつかっていってみよーっと。

Mechanizeを使ってJenkinsPluginを自動でインストールスクリプトを書いてみた

プロジェクト毎にJenkinsを分けて使うポリシーでいるので、プロジェクトがポコポコと立ち上がると毎度同じ構成で作るのがめんどくなったので作ってみた。とりあえず間に合わせ程度なので全然アレな感じではあるのだけど、ひとまず実用には足りるかと。

Jenkinsの利用可能なプラグインページへからインストールしたいプラグインのチェックボックスのname属性を書いたファイルを作成すれば後は自動でインストールしてくれる感じ。スクリプトを叩き終わった後にJenkinsを再起動すればおっけー。name属性をぶち抜くのも作る予定ではあるけども、とりあえず。

画面遷移図作成ツールBlockdiagをインストールしてみた

確かTwitterで見かけてビビッと来たのと職場ですぐにでも使えそうだな〜ということで入れてみた。

Blockdiagって何?っていう方は以下参照。

インストール手順(Mac OSX Snow Leopard)

easy_install blockdiagしてみたんだけどなんかエラーで怒られてしまった。python環境はバンドルされてるやつそのままなので把握してる環境として作ってみるか〜ということで色々やってみたもののエラー。blockdiagの作者である @tk0miya さんに対策方法のブログを教えてもらい無事完了。まとめると↓な感じ。

これで快適Blockdiagライフ!!

第2回Jenkins勉強会で発表してきた

第2回Jenkins勉強会でJenkins+Maven活用術ってタイトルでMavenのことをしゃべってきました。

初めての発表でかなりgkbrしてましたが最後に @cactusman さんにこういうのが聞きたかったと言っていただけて嬉しかったです。ほんとはもっと突っ込んで話をしたかったりとか色々思ったのですが中々うまくまとめるのは難しいですね・・・。

個人的にはPlay!Frameworkの発表が凄く気になったのであとでしっかりスライド見させていただきたいところです。

稚拙ながら自分のスライドを以下に上げさせてもらいました。サンプルもgithubにその他のexampleプロジェクトとかと一緒にあげてみました。良かったら見てやってください。突っ込み歓迎です!!

https://github.com/cynipe/maven-examples/tree/master/profiled-resources-example

簡単に説明を。各環境毎に

  • develop
  • staging
  • production

としてプロファイルを切ってあるので以下のように実行して確認することが出来ます。

Eclipseで確認したい場合

mvn eclipse:clean eclipse:eclipse -P<profile>

純粋にビルドしたい場合

mvn clean package -P<profile>

またJenkins上でビルドしてあげるとwarのMETA-INF/MANIFEST.MFにビルド情報が書き込まれるようになっています。

こういった形でつくったデフォルトのスタイルをMaven3からはarchetype作るときに$と{のエスケープがいらない - さいないぷは達人になりたいで触れている方法でarchetypeとして作っておくとPJ回す際に色々と社内デフォルトな構成を作れたりしていいんじゃないかと思います。

最後におまけですが、maven+mac or linuxな人はColorize Maven3 for zsh - さいないぷは達人になりたいとかやってみると少し幸せになれるかもしれません。*1


その他の皆様の発表は第二回Jenkins勉強会まとめwikiからたどれます。

http://wiki.jenkins-ci.org/pages/viewpage.action?pageId=54723198

しかし懇親会含め凄く楽しい勉強会でした!また機会あればビルド周りで色々話したいと思います!次回はもう少しまとめて話せるように・・・・。

*1:sedで置換してるだけなのでarchetype:generateとかの時はうまく動いてくれないのでそこだけ注意