2013年12月29日日曜日

ZFS on CentOS 6.5

新PCにCentOS 6.5をセットアップして、 ZFS on Linux をインストールしました。
構成はこんな感じです。
  • ASRock H87E-ITX/ac
  • Intel Core i7-4770S
  • メモリ16GB
  • HGST HDT725032VLA360 x1台
  • Seagete ST3000DM001 x5台
なんでHGSTの古いディスクを使用しているかというと、Samsung SSD 840PROを起動ディスクに使用する予定が、うまく認識させることが出来なかったから。
ブート時に高頻度でストールして、しばらく待っているとタイムアウトして起動するという状態で、安定性に欠けるため今回は諦めて、急遽、退役したものを引っ張りだしてきたという訳です。

さて、 ZFS on Linux ですが、RPMが用意されていてインストールが楽になっていました。
手順は、 RHEL/CentOS/SL のページにあります。
おまけにDKMS対応になっているので、Kernelアップデート時も楽ちんです。有難いですね。

今回は、RAIDZ-2でセットアップして、bonnie++で性能を測ってみました。
# zpool status
  pool: dtpool
 state: ONLINE
  scan: none requested
config:

        NAME                                          STATE     READ WRITE CKSUM
        dtpool                                        ONLINE       0     0     0
          raidz2-0                                    ONLINE       0     0     0
            scsi-SATA_ST3000DM001-AAAAAAAAAAAA-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-BBBBBBBBBBBB-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-CCCCCCCCCCCC-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-DDDDDDDDDDDD-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-FFFFFFFFFFFF-part1  ONLINE       0     0     0

errors: No known data errors
#
bonnie++の結果はこんな感じです。
# zpool sttus
$ bonnie++
〜 略 〜
Version 1.03e       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
abcde.locald 31208M 155581  98 484348  42 196870  22 124679  78 423075  17 148.9   0
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 +++++ +++ +++++ +++  7014  91 30914  94 +++++ +++ 17554  99
abcde.locald,31208M,155581,98,484348,42,196870,22,124679,78,423075,17,148.9,0,16,+++++,+++,+++++,+++,7014,91,30914,94,+++++,+++,17554,99
以前、MicroServerで計測した stripe raidz と比べると速いですね。
まあ、HDDは同じでも接続がSATA3で、CPUスペックも違うので当たり前なんですが。

2013年12月28日土曜日

FreeBSD 9.2-RELEASE(amd64) doesn't boot on KVM

Intel Atom 330で動かしているFreeBSDサーバをリプレースすべく、新しくPCを組むことにしました。
本当はC2750を使いたかったのですが、なかなか手に入らないので次のような構成にしました。
  • ASRock H87E-ITX/ac
  • Intel Core i7-4770S
  • メモリ 16GB
CentOS+KVMをホストにして、HDDをたくさん積んで色々集約する予定。
で、FreeBSDもゲストOSとして使用することにしたのですが、64bit版のインストールが出来ませんでした。 ホストOSは、こんな感じ。
  • CentOS 6.5
  • Kernel: 2.6.32-431.1.2.0.1.el6.x86_64
  • qemu: qemu-kvm-0.12.1.2-2.415.el6_5.3.x86_64
使用したインストールイメージは、FreeBSD-9.2-RELEASE-amd64-dvd1.isoです。
virt-managerを使用して、ハイパーバイザにkvmを選択、アーキテクチャにx86_64を選択すると、こんな感じでBooting...の後ろの「/」が回らないで止まってしまい、VMのCPUが使用率100%で回りっぱなしになります。


VMのCPUモデルを色々変えて試してもダメ。
ハイパーバイザをqemuにかえると、激遅ながらも辛うじてインストールは出来ましたが、インストール後のbootがこれまた遅すぎて実用にならない。10分待ってもブートしない。

しかし、ハイパーバイザkvm、アーキテクチャx86_64でも、32bit版(FreeBSD-9.2-RELEASE-i386-dvd1.iso)ならすんなりインストール出来ます。
ググると、Haswell環境に起因していそうなことはわかったのですが、今のところ解決できたという情報はなさそうです。
ちなみに、CentOS6.5(64bit)はゲストOSとして普通にインストール出来て使えています。

Haswell環境ではないですが、CentOS+KVMのゲストOSでFreeBSD-9.2-RELEASE(adm64)を使用出来ていたので、まさかはまるとは思ってませんでした。
当面は32bit版を使うしかないのかな。うーん。

2013年11月26日火曜日

MicroServerのHDD故障

ワンセグ野郎で使用しているHP ProLiant MicroServerのHDDが壊れました。
ZFSの情報は次のような感じで、Express5800/GT110dのHDDと同じように物理的に認識しなくなっていました。
# zpool status
  pool: dtpool
 state: DEGRADED
status: One or more devices are faulted in response to persistent errors.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Replace the faulted device, or use 'zpool clear' to mark the device
        repaired.
 scan: scrub repaired 44K in 66h55m with 0 errors on Tue Sep 10 20:31:00 2013
config:

        NAME                                          STATE     READ WRITE CKSUM
        dtpool                                        DEGRADED     0     0     0
          raidz1-0                                    DEGRADED     0     0     0
            scsi-SATA_ST3000DM001-AAAAAAAAAAAA-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-BBBBBBBBBBBB-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-CCCCCCCCCCCC-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-DDDDDDDDDDDD-part1  FAULTED      0   854     0  too many errors

errors: No known data errors
ZFSのHDDリプレースは二回目なので、サクッと対応完了。
壊れたHDDの情報は読めないので、起動用HDDのS.M.A.R.Tの情報を確認すると通電時間は13536時間でした。 3年位は持ってほしいなぁ。
#壊れたHDDのRMA期間は過ぎていました。残念。

2013年9月22日日曜日

MacBook Air購入

Mavericksが出てからにしようと思ってたのですが、急に欲しくなって買ってしまいました。
BTOでメモリ8GBとSSD 512GBにしたんですが、意外と良心的な価格設定でした。

起動も速くバッテリーの持ちもいいし、ちょっと高かったですが、いい買い物をしました。
Mountain Lionに対応していないMacBookからの買い替えなので…。

2013年9月14日土曜日

raidzのディスク交換

Express5800/GT110dで使用しているZFSが調子悪くなっていました。
zpool statusの結果はこんな感じです。
# zpool status
  pool: dtpool
 state: DEGRADED
status: One or more devices are faulted in response to IO failures.
action: Make sure the affected devices are connected, then run 'zpool clear'.
   see: http://zfsonlinux.org/msg/ZFS-8000-HC
 scan: resilvered 766G in 2h10m with 0 errors on Sun Dec 30 19:11:52 2012
config:

        NAME                                          STATE     READ WRITE CKSUM
        NAME                                          STATE     READ WRITE CKSUM
        dtpool                                        DEGRADED    18     4     0
          raidz1-0                                    DEGRADED    48    12     0
            scsi-SATA_ST3000DM001-AAAAAAAAAAAA-part1  FAULTED      0   286     0
  too many errors
            scsi-SATA_ST3000DM001-BBBBBBBBBBBB-part1  ONLINE      79    12     0
            scsi-SATA_ST3000DM001-CCCCCCCCCCCC-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-DDDDDDDDDDDD-part1  ONLINE       0     0     0

errors: 20 data errors, use '-v' for a list
# zpool status -v
  pool: dtpool
 state: DEGRADED
status: One or more devices are faulted in response to IO failures.
action: Make sure the affected devices are connected, then run 'zpool clear'.
   see: http://zfsonlinux.org/msg/ZFS-8000-HC
 scan: resilvered 766G in 2h10m with 0 errors on Sun Dec 30 19:11:52 2012
config:

        NAME                                          STATE     READ WRITE CKSUM
        dtpool                                        DEGRADED    18     4     0
          raidz1-0                                    DEGRADED    48    12     0
            scsi-SATA_ST3000DM001-AAAAAAAAAAAA-part1  FAULTED      0   286     0
  too many errors
            scsi-SATA_ST3000DM001-BBBBBBBBBBBB-part1  ONLINE      79    12     0
            scsi-SATA_ST3000DM001-CCCCCCCCCCCC-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-DDDDDDDDDDDD-part1  ONLINE       0     0     0

errors: Permanent errors have been detected in the following files:

        dtpool/ts:<0x0>
        dtpool/ts:<0x4cf02>
        dtpool/ts:<0x50c65>
        dtpool/ts:<0x34d69>
        dtpool/ts:<0x16271>
        dtpool/ts:<0x47086>
        dtpool/ts:<0x47088>
        dtpool/ts:<0x4708b>
        dtpool/ts:<0x4708d>
        dtpool/ts:<0x4708f>
        dtpool/ts:<0x47095>
        dtpool/ts:<0x514a6>
        dtpool/ts:<0x514a7>
        dtpool/ts:<0x514a8>
        dtpool/ts:<0x514ab>
        dtpool/ts:<0x514ac>
        dtpool/ts:<0x514b0>
        dtpool/ts:<0x46fb6>
        dtpool/ts:<0x330c1>
        dtpool/ts:<0xffffffffffffffff>
#
zpool clearを実行しろとのことなので、実行してみます。
# zpool clear dtpool
cannot clear errors for dtpool: I/O error
いやな予感。
# zpool status
  pool: dtpool
 state: UNAVAIL
status: One or more devices are faulted in response to IO failures.
action: Make sure the affected devices are connected, then run 'zpool clear'.
   see: http://zfsonlinux.org/msg/ZFS-8000-HC
 scan: resilvered 766G in 2h10m with 0 errors on Sun Dec 30 19:11:52 2012
config:

        NAME                                          STATE     READ WRITE CKSUM
        dtpool                                        UNAVAIL      0     0     0
  insufficient replicas
          raidz1-0                                    UNAVAIL      0     0     0
  insufficient replicas
            scsi-SATA_ST3000DM001-AAAAAAAAAAAA-part1  FAULTED      0     0     0
  too many errors
            scsi-SATA_ST3000DM001-BBBBBBBBBBBB-part1  FAULTED      0     0     0
  too many errors
            scsi-SATA_ST3000DM001-CCCCCCCCCCCC-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-DDDDDDDDDDDD-part1  ONLINE       0     0     0

errors: 20 data errors, use '-v' for a list
#
2台、逝っちゃった?

rebootしてみると、FAULTEDになっているHDD2台が物理的に認識されていないようです。
少し離れた場所にあるのでshutdownして、翌日見に行くことにしました。

で、翌日。
raidzなので、2台壊れてたとなるとデータ復旧できないな…と考えながら電源を入れると、カッコン、カッコンと例の壊れたHDDの音を立てながら起動してきました。

幸いなことに認識しないのは1台だけになってました。 まあ、いずれ壊れるのでしょうけど。
zpool statusの結果はこんな感じ。
# zpool status -v
  pool: dtpool
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
 scan: resilvered 766G in 2h10m with 0 errors on Sun Dec 30 19:11:52 2012
config:

        NAME                                          STATE     READ WRITE CKSUM
        dtpool                                        DEGRADED     0     0     0
          raidz1-0                                    DEGRADED     0     0     0
            scsi-SATA_ST3000DM001-AAAAAAAAAAAA-part1  UNAVAIL      0     0     0
            scsi-SATA_ST3000DM001-BBBBBBBBBBBB-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-CCCCCCCCCCCC-part1  ONLINE       0     0     0
            scsi-SATA_ST3000DM001-DDDDDDDDDDDD-part1  ONLINE       0     0     0

errors: No known data errors
早速、shutdownしてHDDを入れ替え、zpool replaceしてみます。
# ls /dev/disk/by-id/scsi-SATA_ST3000DM001-EEEEEEEEEEEE-part1
/dev/disk/by-id/scsi-SATA_ST3000DM001-EEEEEEEEEEEE-part1
#
# zpool replace -f dtpool scsi-SATA_ST3000DM001-AAAAAAAAAAAA-part1 scsi-SATA_ST3000DM001-EEEEEEEEEEEE-part1
cannot replace scsi-SATA_ST3000DM001-AAAAAAAAAAAA-part1 with scsi-SATA_ST3000DM001-EEEEEEEEEEEE-part1: no such device in pool
offline, detatchも試してみましたが、no such device in poolになります。

あれこれと試しながら、ググると情報(zpool attach throws "no such device in pool" error)があったので、試すとうまくいきました。使用しているバージョンは、zfs-0.6.0-rc9です。
こんな感じ。
# zpool replace -f dtpool /dev/disk/by-id/scsi-SATA_ST3000DM001-AAAAAAAAAAAA-part1 scsi-SATA_ST3000DM001-EEEEEEEEEEEE-part1
#
# zpool status
  pool: dtpool
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
 scan: resilver in progress since Sun Sep  8 16:04:04 2013
    33.7G scanned out of 6.27T at 267M/s, 6h47m to go
    8.42G resilvered, 0.52% done
config:

        NAME                                            STATE     READ WRITE CKSUM
        dtpool                                          DEGRADED     0     0     0
          raidz1-0                                      DEGRADED     0     0     0
            replacing-0                                 UNAVAIL      0     0     0
              scsi-SATA_ST3000DM001-AAAAAAAAAAAA-part1  UNAVAIL      0     0     0
              scsi-SATA_ST3000DM001-EEEEEEEEEEEE-part1  ONLINE       0     0     0  (resilvering)
            scsi-SATA_ST3000DM001-BBBBBBBBBBBB-part1    ONLINE       0     0     0
            scsi-SATA_ST3000DM001-CCCCCCCCCCCC-part1    ONLINE       0     0     0
            scsi-SATA_ST3000DM001-DDDDDDDDDDDD-part1    ONLINE       0     0     0

errors: No known data errors
#
うまくいってよかった。

2013年7月20日土曜日

VirtualBox 4.2.16

VirtualBox 4.2.16がリリースされていたので、早速アップデートしました。

Changelogを読むと、以前調べたmanifestファイルがないとクラッシュする問題が解決しているようです。

ちなみに、Download VirtualBox for Linux Hostsに書かれていますが、virtualbox.repoを設定しておくと、yum updateでアップデートできます。

私は、repoファイルをenabled=0に設定しているので、こんな感じです。
# yum update --enablerepo=virtualbox
veeweeでboxを作成するとmanifestファイルが作られないので、面倒くさいなと思ってたので助かりました。

2013年7月14日日曜日

Veeweeを使ってVagrant boxを作成する (その2)

次のようなメッセージを出力して、veeweeの「build」コマンドが失敗してしまったので原因を調べます。
$ bundle exec veewee vbox build 'CentOS-6.4-x86_64'
 :
Typing:[1]:  text ks=http://10.0.2.2:7122/ks.cfg
Error: We executed a shell command and the exit status was not 0
- Command :VBoxManage controlvm "CentOS-6.4-x86_64" keyboardputscancode 0f.
- Exitcode :1.
- Output   :
VBoxManage: error: Guest not running

$
メッセージから、VirtualBoxが上手く動いてないことは分かります。
しかし、VirtualBoxをちゃんと使ったことがないので、仮想マシンの起動の仕方が分かりません。

VirtualBox UserManualで調べると、VBoxManage startvmで、仮想マシンをスタートできるようです。
早速、試してみると次のように失敗しました。
$ VBoxManage startvm "CentOS-6.4-x86_64"
Waiting for VM "CentOS-6.4-x86_64" to power on...
VBoxManage: error: The virtual machine 'CentOS-6.4-x86_64' has terminated unexpe
ctedly during startup with exit code 0
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component Machin
e, interface IMachine
$
ヒントがとれたので、ググるとforums.virtualbox.orgでNS_ERROR_FAILURE (0x80004005)という記事が見つかりました。
読んでみると、どうもGUIを使用しようとして失敗しているような感じです。
確かに、リモートからsshでログインして操作しているので該当しそうです。

--nogui--forceを付けて再度buildコマンドを実行します。
途中まで実行されているため、--forceを付けないとエラーになります。
$ bundle exec veewee vbox build 'CentOS-6.4-x86_64' --force --nogui
Downloading vbox guest additions iso v 4.2.14 - http://download.virtualbox.org/virtualbox/4.2.14/VBoxGuestAdditions_4.2.14.iso
Checking if isofile VBoxGuestAdditions_4.2.14.iso already exists.
Full path: /home/foo/work/veewee/iso/VBoxGuestAdditions_4.2.14.iso

The isofile VBoxGuestAdditions_4.2.14.iso already exists.
Building Box CentOS-6.4-x86_64 with Definition CentOS-6.4-x86_64:
- debug : false
- cwd : /home/foo/work/veewee
- force : true
- nogui : true
- auto : false
- checksum : false
- redirectconsole : false
- postinstall_include : []
- postinstall_exclude : []

The isofile CentOS-6.4-x86_64-minimal.iso already exists.
VBoxManage unregistervm  "CentOS-6.4-x86_64" --delete
Deleting vm CentOS-6.4-x86_64
Creating vm CentOS-6.4-x86_64 : 480M - 1 CPU - RedHat_64
Creating new harddrive of size 10140, format VDI, variant Standard
Attaching disk: /home/foo/VirtualBox VMs/CentOS-6.4-x86_64/CentOS-6.4-x86_641.vdi
Mounting cdrom: /home/foo/work/veewee/iso/CentOS-6.4-x86_64-minimal.iso
Mounting guest additions: /home/foo/work/veewee/iso/VBoxGuestAdditions_4.2.14.iso
Finding unused TCP port in range: 7222 - 7262
Selected TCP port 7222
Finding unused TCP port in range: 7222 - 7262
Selected TCP port 7222
Waiting 10 seconds for the machine to boot
Finding unused TCP port in range: 7122 - 7199
Selected TCP port 7122
Starting a webserver :7122

Typing:[1]:  text ks=http://10.0.2.2:7122/ks.cfg
Done typing.

 :
 :
No Match for argument: bitstream-vera-fonts
No Packages marked for removal
Loaded plugins: fastestmirror
Cleaning repos: base epel extras puppetlabs puppetlabs-dependencies updates
Cleaning up Everything
Cleaning up list of fastest mirrors
Waiting for ssh login on 127.0.0.1 with user veewee to sshd on port => 7222 to work, timeout=10000 sec
.
Executing command: echo 'veewee'|sudo -S sh './zerodisk.sh'
dd: writing `/EMPTY': デバイスに空き領域がありません
7454+0 records in
7453+0 records out
7815069696 bytes (7.8 GB) copied, 12.6561 s, 617 MB/s
The box CentOS-6.4-x86_64 was built successfully!
You can now login to the box with:
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 7222 -l veewee 127.0.0.1
$
なんかメッセージが出てますが、とりあえず成功したようです。
試しに、最後のメッセージにあるようにsshしたところ、ログインも出来ました。

次は、validateコマンドで作成した仮想マシンの検証をします。
$ bundle exec veewee vbox validate 'CentOS-6.4-x86_64'
Checking user - OK
Checking sudo - OK
Checking ruby - OK
Checking gem - OK
Checking chef - OK
Checking puppet - OK
Checking shared folder - OK
$
問題ないようです。
いよいよ、exportコマンドでboxを作ります。
$ bundle exec veewee vbox export 'CentOS-6.4-x86_64'
Vagrant requires the box to be shutdown, before it can export
Sudo also needs to work for user veewee
Performing a clean shutdown now.
Waiting for ssh login on 127.0.0.1 with user veewee to sshd on port => 7222 to work, timeout=10000 sec
.
Executing command: echo '/sbin/halt -h -p' > /tmp/shutdown.sh
Waiting for ssh login on 127.0.0.1 with user veewee to sshd on port => 7222 to work, timeout=10000 sec
.
Executing command: chmod +x /tmp/shutdown.sh
Waiting for ssh login on 127.0.0.1 with user veewee to sshd on port => 7222 to work, timeout=10000 sec
.
Executing command: echo 'veewee'|sudo -S sh '/tmp/shutdown.sh'
.......
Machine CentOS-6.4-x86_64 is powered off cleanly
Creating a temporary directory for export
Adding additional files
Creating Vagrantfile
Exporting the box
Executing VBoxManage export CentOS-6.4-x86_64 --output /tmp/d20130713-10173-1y2vmzn/box.ovf
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Successfully exported 1 machine(s).
Packaging the box
Cleaning up temporary directory

To import it into vagrant type:
vagrant box add 'CentOS-6.4-x86_64' '/home/foo/work/veewee/CentOS-6.4-x86_64.box'

To use it:
vagrant init 'CentOS-6.4-x86_64'
vagrant up
vagrant ssh
$
$ ls *.box
CentOS-6.4-x86_64.box
$
やっとboxができました。

Veeweeを使ってVagrant boxを作成する (その1)

Vagrant便利ですね。

でもboxが無いとダメだよね。何処にあるの?どうやって作るの?となります。
ググるとVagrantbox.esなどでboxが公開されていますが、作成者がハッキリしないものは使いたくないので作ることにしました。

VAGRANT DOCSを見ると、次の手順になるようです。
  1. VirtualBoxで仮想マシンを作り、OSをインストールしてexportする。
  2. vagrant packageコマンドでパッケージ化する。
仮想マシン上にvagrant用のユーザ設定や共有フォルダ設定もしておくようです。

で、色々やってくれるツールとしてVeeweeがあります。
Veeweeは、VirtualBoxだけでなくKVM、VMware Fusion、Parallelsの仮想マシンイメージを作ることができるようです。すばらしい。

インストールは、Veewee Installationに書かれているとおりで問題なくできました。
gemでもインストールできるようですが、最新のものでは無いようなのでソースからインストールしました。

私の環境では、rbenvを使用しているので、手順は次のようになります。
git cloneしてbundle installするだけです。
$ git clone https://github.com/jedi4ever/veewee.git
Initialized empty Git repository in /home/foo/work/veewee/.git/
remote: Counting objects: 12661, done.
remote: Compressing objects: 100% (4587/4587), done.
remote: Total 12661 (delta 8416), reused 11992 (delta 7873)
Receiving objects: 100% (12661/12661), 3.74 MiB | 1.30 MiB/s, done.
Resolving deltas: 100% (8416/8416), done.

$ cd veewee
$ rbenv versions
  1.8.7-p371
* 1.9.3-p429 (set by /usr/local/rbenv/version)
  2.0.0-p195
$ rbenv local 1.9.3-p429
$ bundle install
Fetching http://github.com/hh/em-winrm.git
remote: Counting objects: 144, done.
remote: Compressing objects: 100% (100/100), done.
remote: Total 144 (delta 68), reused 113 (delta 43)
Receiving objects: 100% (144/144), 23.55 KiB, done.
Resolving deltas: 100% (68/68), done.
Fetching gem metadata from http://rubygems.org/........
Fetching gem metadata from http://rubygems.org/..
Resolving dependencies...
Installing rake (10.1.0)
Installing libxml-ruby (2.6.0)
 :
Installing whichr (0.3.6)
Using veewee (0.3.7) from source at /home/foo/work/veewee
Your bundle is complete!
Gems in the group kvm were not installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
$
$ rbenv rehash
動かしてみます。
$ bundle exec veewee
Commands:
  veewee fusion          # Subcommand for Vmware fusion
  veewee help [COMMAND]  # Describe available commands or one specific command
  veewee kvm             # Subcommand for KVM
  veewee parallels       # Subcommand for Parallels
  veewee vbox            # Subcommand for VirtualBox
  veewee version         # Prints the Veewee version information

$ bundle exec veewee vbox
Commands:
  veewee vbox build [BOX_NAME]                     # Build box
  veewee vbox copy [BOX_NAME] [SRC] [DST]          # Copy a file to the VM
  veewee vbox define [BOX_NAME] [TEMPLATE]         # Define a new basebox sta...
  veewee vbox destroy [BOX_NAME]                   # Destroys the virtualmach...
  veewee vbox export [BOX_NAME]                    # Exports the basebox to t...
  veewee vbox halt [BOX_NAME]                      # Activates a shutdown the...
  veewee vbox help [COMMAND]                       # Describe subcommands or ...
  veewee vbox list                                 # Lists all defined boxes
  veewee vbox ostypes                              # List the available Opera...
  veewee vbox screenshot [BOX_NAME] [PNGFILENAME]  # Takes a screenshot of th...
  veewee vbox sendkeys [BOX_NAME] [SEQUENCE]       # Sends the key sequence (...
  veewee vbox ssh [BOX_NAME] [COMMAND]             # SSH to box
  veewee vbox templates                            # List the currently avail...
  veewee vbox undefine [BOX_NAME]                  # Removes the definition o...
  veewee vbox up [BOX_NAME]                        # Starts a Box
  veewee vbox validate [BOX_NAME]                  # Validates a box against ...
  veewee vbox winrm [BOX_NAME] [COMMAND]           # Execute command via winrm

Options:
          [--debug]           # enable debugging
  -w, --workdir, [--cwd=CWD]  # Change the working directory. (The folder contai
ning the definitions folder).
                              # Default: /home/hide/work/veewee

$
早速、Veewee Basicsに沿って、boxを作ってみます。
まずは、使用するテンプレートを決めます。
CentOSのboxを使用することにして、次のようにしてテンプレートのリストを表示させます。
$ bundle exec veewee vbox templates |grep -i centos
veewee vbox define '' 'CentOS-4.8-i386' --workdir=/home/foo/work/veewee
veewee vbox define '' 'CentOS-5.5-i386-netboot' --workdir=/home/foo/work/veewee
 :
veewee vbox define '' 'CentOS-6.4-i386-minimal' --workdir=/home/foo/work/veewee
veewee vbox define '' 'CentOS-6.4-i386-netboot' --workdir=/home/foo/work/veewee
veewee vbox define '' 'CentOS-6.4-x86_64-minimal' --workdir=/home/foo/work/veewee
veewee vbox define '' 'CentOS-6.4-x86_64-netboot' --workdir=/home/foo/work/veewee
$
たくさん表示されましたが、今回は「CentOS-6.4-x86_64-minimal」を使用することにしました。
次に、「define」コマンドで定義ファイルを出力させます。
$ bundle exec veewee vbox define 'CentOS-6.4-x86_64' 'CentOS-6.4-x86_64-minimal'
The basebox 'CentOS-6.4-x86_64' has been successfully created from the template 'CentOS-6.4-x86_64-minimal'
You can now edit the definition files stored in /home/foo/work/veewee/definitions/CentOS-6.4-x86_64 or build the box with:
veewee vbox build 'CentOS-6.4-x86_64' --workdir=/home/foo/work/veewee
$
「CentOS-6.4-x86_64」という名前で定義ファイルができています。
$ ls definitions/
CentOS-6.4-x86_64
$ ls definitions/CentOS-6.4-x86_64/
base.sh  cleanup.sh     ks.cfg     vagrant.sh     vmfusion.sh
chef.sh  definition.rb  puppet.sh  virtualbox.sh  zerodisk.sh
$
ファイルの説明は、Customizing Definitionsにあります。
definition.rbが主設定ファイル、ks.cfgがkickstartファイル、*.shがインストール後に実行されるスクリプトという感じのようです。
今回は、次のようにISOイメージのダウンロードサイトと、キックスタートでの言語、キーボード、タイムゾーンだけ変更してみました。
$ diff -uw definitions/CentOS-6.4-x86_64/{definition.rb.original,definition.rb}
--- definitions/CentOS-6.4-x86_64/definition.rb.original        2013-07-13 21:35:08.719699339 +0900
+++ definitions/CentOS-6.4-x86_64/definition.rb 2013-07-14 11:27:50.263552526 +0900
@@ -6,7 +6,7 @@
   :hostiocache => 'off',
   :os_type_id => 'RedHat6_64',
   :iso_file => "CentOS-6.4-x86_64-minimal.iso",
-  :iso_src => "http://yum.singlehop.com/CentOS/6.4/isos/x86_64/CentOS-6.4-x86_64-minimal.iso",
+  :iso_src => "http://ftp.riken.jp/Linux/centos/6.4/isos/x86_64/CentOS-6.4-x86_64-minimal.iso",
   :iso_md5 => "4a5fa01c81cc300f4729136e28ebe600",
   :iso_download_timeout => 1000,
   :boot_wait => "10",
$
$ diff -uw definitions/CentOS-6.4-x86_64/{ks.cfg.original,ks.cfg}
--- definitions/CentOS-6.4-x86_64/ks.cfg.original       2013-07-13 21:35:08.719699339 +0900
+++ definitions/CentOS-6.4-x86_64/ks.cfg        2013-07-14 11:28:32.210553491 +0900
@@ -1,13 +1,13 @@
 install
 cdrom
-lang en_US.UTF-8
-keyboard us
+lang ja_JP.UTF-8
+keyboard jp106
 network --bootproto=dhcp
 rootpw --iscrypted $1$damlkd,f$UC/u5pUts5QiU3ow.CSso/
 firewall --enabled --service=ssh
 authconfig --enableshadow --passalgo=sha512
 selinux --disabled
-timezone UTC
+timezone Asia/Tokyo
 bootloader --location=mbr

 text
いよいよ、仮想マシンの作成です。
「build」コマンドを実行します。
$ bundle exec veewee vbox build 'CentOS-6.4-x86_64'
Downloading vbox guest additions iso v 4.2.14 - http://download.virtualbox.org/virtualbox/4.2.14/VBoxGuestAdditions_4.2.14.iso
Checking if isofile VBoxGuestAdditions_4.2.14.iso already exists.
Full path: /home/foo/work/veewee/iso/VBoxGuestAdditions_4.2.14.iso

The isofile VBoxGuestAdditions_4.2.14.iso already exists.
Building Box CentOS-6.4-x86_64 with Definition CentOS-6.4-x86_64:
- debug : false
- cwd : /home/foo/work/veewee
- force : false
- nogui : false
- auto : false
- checksum : false
- redirectconsole : false
- postinstall_include : []
- postinstall_exclude : []

We did not find an isofile here : /home/foo/work/veewee/iso/CentOS-6.4-x86_64-minimal.iso.

The definition provided the following download information:
- Download url: http://ftp.riken.jp/Linux/centos/6.4/isos/x86_64/CentOS-6.4-x86_64-minimal.iso
- Md5 Checksum: 4a5fa01c81cc300f4729136e28ebe600


Download? (Yes/No) Yes
Checking if isofile CentOS-6.4-x86_64-minimal.iso already exists.
Full path: /home/foo/work/veewee/iso/CentOS-6.4-x86_64-minimal.iso
Moving /tmp/open-uri20130713-9671-3i1bbnotoo/home/foo/work/veewee/iso/CentOS-6.4-x86_64-minimal.iso|   343M   6.1MB/s ETA:  0:00:00
Creating vm CentOS-6.4-x86_64 : 480M - 1 CPU - RedHat_64
Creating new harddrive of size 10140, format VDI, variant Standard
Attaching disk: /home/foo/VirtualBox VMs/CentOS-6.4-x86_64/CentOS-6.4-x86_641.vdi
Mounting cdrom: /home/foo/work/veewee/iso/CentOS-6.4-x86_64-minimal.iso
Mounting guest additions: /home/foo/work/veewee/iso/VBoxGuestAdditions_4.2.14.iso
Finding unused TCP port in range: 7222 - 7262
Selected TCP port 7222
Finding unused TCP port in range: 7222 - 7262
Selected TCP port 7222
Waiting 10 seconds for the machine to boot
Finding unused TCP port in range: 7122 - 7199
Selected TCP port 7122
Starting a webserver :7122

Typing:[1]:  text ks=http://10.0.2.2:7122/ks.cfg
Error: We executed a shell command and the exit status was not 0
- Command :VBoxManage controlvm "CentOS-6.4-x86_64" keyboardputscancode 0f.
- Exitcode :1.
- Output   :
VBoxManage: error: Guest not running

$
うーん、失敗したようです。
しばらく待ってもプロンプトが帰ってこないので、CTRL+Cで抜けました。

ちなみに、途中「Download? (Yes/No)」の箇所で正しく「Yes」と入力しないと、手動でダウンロードするように言われます。
Download? (Yes/No) Y
You have selected manual download:
curl -C - -L 'http://ftp.riken.jp/Linux/centos/6.4/isos/x86_64/CentOS-6.4-x86_64-minimal.iso' -o 'iso/CentOS-6.4-x86_64-minimal.iso'
md5 'iso/CentOS-6.4-x86_64-minimal.iso'

$
つづく

2013年6月29日土曜日

VirtualBox 4.2.14 with Vagrant 1.2.2

VirtualBox, Vagrantをセットアップしましたが、vagrant upで失敗してしまいました。
使用したRPMは、2013/6/29現在の最新版です。
  • VirtualBox-4.2-4.2.14_86644_el6-1.x86_64.rpm
  • vagrant_1.2.2_x86_64.rpm
vagrant up実行時のメッセージは、次になります。
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'precise32'...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["import", "/home/hide/.vagrant.d/boxes/precise32/virtualbox/box.ovf"]

Stderr: 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Interpreting /home/hide/.vagrant.d/boxes/precise32/virtualbox/box.ovf...
OK.
0%...
Progress object failure: NS_ERROR_CALL_FAILED
$
原因を調べてみると、VirtualBoxのTicket #11895に該当するようで、すでにリポジトリ上では修正されているようです。
しかし、対応版のRPMはまだリリースされていないようですので、チケットにあるワークアラウンドを試してみることにしました。

コメントによると、manifest fileを作成すればいいようで、Webページが紹介されています。
という事で、precise32 BOXのマニフェストファイルを作成してみます。
$ cd ~/.vagrant.d/boxes/precise32/virtualbox
$ openssl sha1 *.vmdk *.ovf > box.mf
$ ls
Vagrantfile  box-disk1.vmdk  box.mf  box.ovf  metadata.json
$
で、先ほど試していたプロジェクトディレクトリに移動して、vagrant upを再度実行してみます。
$ cd -
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'precise32'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /vagrant
$
うまく行きました!
早速、ログインしてみます。
$ vagrant ssh
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686)

 * Documentation:  https://help.ubuntu.com/
Welcome to your Vagrant-built virtual machine.
Last login: Fri Sep 14 06:22:31 2012 from 10.0.2.2
vagrant@precise32:~$
vagrant@precise32:~$ uname -a
Linux precise32 3.2.0-23-generic-pae #36-Ubuntu SMP Tue Apr 10 22:19:09 UTC 2012 i686 i686 i386 GNU/Linux
vagrant@precise32:~$
vagrant@precise32:~$ df -h
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/precise32-root   79G  2.0G   73G   3% /
udev                        178M  4.0K  178M   1% /dev
tmpfs                        74M  272K   74M   1% /run
none                        5.0M     0  5.0M   0% /run/lock
none                        185M     0  185M   0% /run/shm
/dev/sda1                   228M   24M  192M  12% /boot
/vagrant                    138G   12G  127G   9% /vagrant
vagrant@precise32:~$
おお!なかなか面白い仕組みです。

Vagrant on CentOS

以前から気になっていたVagrantをCentOS 6.4 (64bit)にインストールしました。

VagrantVirtualBoxともに2013/6/29現在の最新版の次のRPMを使用しました。
  • VirtualBox-4.2-4.2.14_86644_el6-1.x86_64.rpm
  • vagrant_1.2.2_x86_64.rpm
Vagrant、VirtualBoxともにRPMで提供されているので、インストールは特に問題なく終了。

早速Vagrantを使ってみます。
まずは、Getting Startedの記述に沿って、開発元が提供しているイメージを使用して仮想マシンを作ってみることにします。

プロジェクト用のディレクトリ作成と初期化
$ mkdir vagrant_getting_started
$ cd vagrant_getting_started
$ vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
$
BOXのインストール
BOXとは、仮想マシンの雛形のようなもの(?)のようです。
一度設定すると再利用できるようです。
$ vagrant box add precise32 http://files.vagrantup.com/precise32.box
Downloading or copying the box...
Extracting box...te: 1161k/s, Estimated time remaining: 0:00:01)
Successfully added box 'precise32' with provider 'virtualbox'!
$
どうも、~/.vagrant.d配下に色々置かれるようです。
Vagrantfileのconfig.vm.box = "base"の記述を次のように編集します。
]$ diff -uw Vagrantfile.original Vagrantfile
--- Vagrantfile.original        2013-06-29 12:07:25.388634683 +0900
+++ Vagrantfile 2013-06-29 12:31:21.501632951 +0900
@@ -7,7 +7,7 @@
   # please see the online documentation at vagrantup.com.

   # Every Vagrant virtual environment requires a box to build off of.
-  config.vm.box = "base"
+  config.vm.box = "precise32"

   # The url from where the 'config.vm.box' box will be fetched if it
   # doesn't already exist on the user's system.
ここまでで、下準備はおしまいです。
いよいよ、仮想マシンをブートさせます。
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'precise32'...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["import", "/home/hide/.vagrant.d/boxes/precise32/virtualbox/box.ovf"]

Stderr: 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Interpreting /home/hide/.vagrant.d/boxes/precise32/virtualbox/box.ovf...
OK.
0%...
Progress object failure: NS_ERROR_CALL_FAILED
うーん、失敗したようです。
少し調べる必要がありそうです。

2013年6月26日水曜日

rbenv on CentOS

Rubyで試してみたい事が出来たので、rbenvを使ってみることにしました。

複数バージョンのRubyを使い分ける仕組みとしては、RVMもあるようですがrbenvを使うことにしました。
環境は、CentOS 6.4 (x86_64)です。

rbenvの標準では、~/.rbenv配下にrubyがインストールされるようです。
ホームディレクトリ配下に色々インストールされるのは、ちょっと嫌だったので/usr/local配下にインストールすることにしました。

まず、git cloneでrbenvを取得します。
# /usr/local
# git clone https://github.com/sstephenson/rbenv.git rbenv
次に、README.mdの記述に従いPATH/usr/local/rbenv/binを追加します。
検索順序がなんとなく嫌な感じですが、まずはREADME.mdに記述に沿って設定していくことにします。

~/.bash_profileに次の記述を追加します。

export PATH=/usr/local/rbenv/bin:$PATH
export RBENV_ROOT=/usr/local/rbenv
eval "$(rbenv init -)"

以上で、rbenvのインストールは終了です。
次に、Rubyのインストールに使用するプラグインruby-buildをインストールします。
これもgit cloneで取得します。
# git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins
/ruby-build
Rubyのインストールは、次のように行います。
まず、インストールできるバージョンのリストを次のコマンドで取得します。
# rbenv install -l
今回は、1.8.7-p371, 193-p429, 2.0.0-p195をインストールします。
# rbenv install 1.8.7-p371
Downloading ruby-1.8.7-p371.tar.gz...
-> http://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p371.tar.gz
Installing ruby-1.8.7-p371...
Installed ruby-1.8.7-p371 to /usr/local/rbenv/versions/1.8.7-p371

Downloading rubygems-1.6.2.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/0c95a9869914ba1a45bf71d3b8048420
Installing rubygems-1.6.2...
Installed rubygems-1.6.2 to /usr/local/rbenv/versions/1.8.7-p371

# rbenv install 1.9.3-p429
Downloading yaml-0.1.4.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/36c852831d02cf90508c29852361d01b
Installing yaml-0.1.4...
Installed yaml-0.1.4 to /usr/local/rbenv/versions/1.9.3-p429

Downloading ruby-1.9.3-p429.tar.gz...
-> http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p429.tar.gz
Installing ruby-1.9.3-p429...
Installed ruby-1.9.3-p429 to /usr/local/rbenv/versions/1.9.3-p429

# rbenv install 2.0.0-p195
Downloading ruby-2.0.0-p195.tar.gz...
-> http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p195.tar.gz
Installing ruby-2.0.0-p195...
Installed ruby-2.0.0-p195 to /usr/local/rbenv/versions/2.0.0-p195
以上で、Rubyのインストールはおしまいです。
取りあえず、グローバル設定のバージョンを1.9.3p429にしてみます。
# rbenv global 1.9.3-p429
# rbenv versions
  1.8.7-p371
* 1.9.3-p429 (set by /usr/local/rbenv/version)
  2.0.0-p195
# rbenv version
1.9.3-p429 (set by /usr/local/rbenv/version)
# ruby -v
ruby 1.9.3p429 (2013-05-15 revision 40747) [x86_64-linux]
# which ruby
/usr/local/rbenv/shims/ruby
特に嵌ることなくインストールできました。便利ですね。

2013年6月8日土曜日

iPad mini(Wi-Fi + Cellularモデル)購入

iPad miniは要らないかなと考えていたのですが、MVNO通信サービスが最近良くなってきたので買っちゃいました。

SIMフリー版iPad mini (Wi-Fi + Cellularモデル)をexpansysで購入しました。
以前利用したときは1週間くらい掛かった気がするのですが、今回は2日で届きました。
同時に申し込んだIIJmio 高速モバイル/D は、iPad miniから2日遅れで届きました。(国内発送が香港発送に負けるとは)

IIJmio 高速モバイル/D のSIMは、本体に挿してAPNの設定をするだけでLTE接続が出来ました。
ただ、インターネット共有は、本体の設定では有効に出来ないようで、IIJmio 高速モバイル/D iOS APN構成プロファイルにあるプロファイルを使用する必要がありました。(iOS 6.1.3)

私の使い方だとiPhoneよりiPad miniの方が使い勝手がいいようです。

2013年2月9日土曜日

Raspberry Pi購入

遅蒔きながら、Raspberry Piを購入しました。

2012年12月中旬に注文して、1月には届いていたのですが箱から出してませんでした。
ModMyPiで購入したのですが、一緒に購入したpIO microSD Card Adaptorの入荷待ちで少し発送が遅れたみたいですが、1ヶ月かからずに届きました。
本体だけなら直ぐに発送してくれそうです。

取り敢えず、Raspbianをインストールしてみるつもりです。
FreeBSDも動くようで楽しめそうです。