2013年11月10日日曜日

oVirtを使ってみた

Ovirtについて、Wikiにまとめましたので、そちらもご参照ください。

この所クラウド基板調査をして正直辛い大変なのですが、OpenStackの構築に心が折れてしまい、諦めていたところ、oVirtというのを教えてもらったので、試してみました。
(っといっても知ったのはつい3日くらい前なんですがね)

oVirtって聞いた事ないし、ググってもあまり情報が出てこないので、少々不安だったのですが。

  • 日本語対応
  • メモリオーバーコミット対応
  • KVMベース
  • スケールアウトも出来そう
  • Webベース
  • インストールは比較的楽

っと感触は良さそうです。
ではさっそくデモ環境をセットアップしてみましょう。

前提条件
OS:CentOS6.4(64bit)またはFedora
CPU仮想支援のあるPC
最低1つのNIC
割と大きなHDD(40GByteもあればいいかな)
対象となるサーバのホスト名がDNSで名前解決(正引き、逆引き)出来ること。
(hostsに記載だけでは、逆引きが出来ないのでNG)
  1. CentOS6.4をインストール。
    1. お試しなのでディスク全体を使用。LVMで自動パテーションを切ってしまうと、/homeが別パテーションになるので注意。
    2. IPは固定(DHCPでもいいけど、後が楽なので)
  2. アップデート
    1. yum -y update
    2. yum -y upgrade
  3. リポジトリ登録
    1. yum localinstall http://ovirt.org/releases/ovirt-release-el.noarch.rpm
    2. yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
  4. リポジトリを修正
    1. vim /etc/yum.repos.d/el6-ovirt.repo
    2. baseurl=http://resources.ovirt.org/releases/stable/rpm/EL/$releaserver
      の行を以下に変更。
      baseurl=http://resources.ovirt.org/releases/stable/rpm/EL/6/
  5. oVirtエンジンをインストールします。
    1. yum install -y ovirt-engine
  6. デモ環境なので一台で済ませるため、AllinOneプラグインをインストールします。
    1. yum install -y ovirt-engine-setup-plugin-allinone
  7. セットアップを走らせます。
    1.  engine-setup

[root@test ~]# engine-setup
[ INFO  ] Stage: Initializing
[ INFO  ] Stage: Environment setup
          Configuration files: ['/etc/ovirt-engine-setup.conf.d/10-packaging-aio.conf', '/etc/ovirt-engine-setup.conf.d/10-packaging.conf']
          Log file: /var/log/ovirt-engine/setup/ovirt-engine-setup-20131109232823.log
          Version: otopi-1.1.2 (otopi-1.1.2-1.el6)
[WARNING] Cannot detect if hardware supports virtualization
[ INFO  ] Stage: Environment packages setup
[ INFO  ] Stage: Programs detection
[ INFO  ] Stage: Environment setup
[ INFO  ] Stage: Environment customization
          Configure VDSM on this host? (Yes, No) [No]: yes     <-----Yesと応答
          Local storage domain path [/var/lib/images]:         <-----そのままEnter
          Local storage domain name [local_storage]:           <-----そのままEnter
          --== PACKAGES ==--
[ INFO  ] Checking for product updates...
[ INFO  ] No product updates found
          --== NETWORK CONFIGURATION ==--
          Host fully qualified DNS name of this server [test.localdomain.localdomain]:                  <-----そのままEnter
          iptables was detected on your computer. Do you wish Setup to configure it? (yes, no) [yes]:no <-----noと応答(デモ環境なので)
          --== DATABASE CONFIGURATION ==--
          Where is the database located? (Local, Remote) [Local]:    <-----そのままEnter
          Setup can configure the local postgresql server automatically for the engine to run. This may conflict with existing applications.
          Would you like Setup to automatically configure postgresql, or prefer to perform that manually? (Automatic, Manual) [Automatic]:    <-----そのままEnter
          Using existing credentials
          --== OVIRT ENGINE CONFIGURATION ==--
          Engine admin password:    <-----Webログイン用パスワードを入力
          Confirm engine admin password:    <-----パスワードを入力
[WARNING] Password is weak: 辞書の単語に基づいています
          Use weak password? (Yes, No) [No]: yes    <-----yesと応答(デモ環境なので)
          Application mode (Both, Virt, Gluster) [Both]:    <-----そのままEnter
          Default storage type: (NFS, FC, ISCSI, POSIXFS) [NFS]:    <-----そのままEnter
          --== PKI CONFIGURATION ==--
          Organization name for certificate [localdomain.localdomain]:    <-----そのままEnter
          --== APACHE CONFIGURATION ==--
          Setup can configure the default page of the web server to present the application home page. This may conflict with existing applications.
          Do you wish to set the application as the default page of the web server? (Yes, No) [Yes]:    <-----そのままEnter
          Setup can configure apache to use SSL using a certificate issued from the internal CA.
          Do you wish Setup to configure that, or prefer to perform that manually? (Automatic, Manual) [Automatic]:    <-----そのままEnter
          --== SYSTEM CONFIGURATION ==--
          Configure an NFS share on this server to be used as an ISO Domain? (Yes, No) [Yes]:    <-----そのままEnter
          Local ISO domain path [/var/lib/exports/iso]:    <-----そのままEnter
          Local ISO domain name [ISO_DOMAIN]:    <-----そのままEnter
          --== END OF CONFIGURATION ==--
[ INFO  ] Stage: Setup validation
[WARNING] Less than 16384MB of memory is available
          --== CONFIGURATION PREVIEW ==--
          Database name                      : engine
          Database secured connection        : False
          Database host                      : localhost
          Database user name                 : engine
          Database host name validation      : False
          Datbase port                       : 5432
          NFS setup                          : True
          PKI organization                   : localdomain.localdomain
          NFS mount point                    : /var/lib/exports/iso
          Application mode                   : both
          Firewall manager                   : iptables
          Host FQDN                          : test.localdomain.localdomain
          Datacenter storage type            : nfs
          Configure local database           : True
          Set application as default page    : True
          Configure Apache SSL               : True
          Configure VDSM on this host        : True
          Local storage domain directory     : /var/lib/images
          Please confirm installation settings (OK, Cancel) [OK]:<-----そのままEnter
あとは自動でインストールが走ります。
インストールが終了したら、
http://<サーバのIP>/にアクセスします。

まずは管理用ポータルにアクセスします。

ユーザID:admin、パスワードはインストール時に設定したものでログインします。

defaultのデータセンターはどうやら機能しないようです。
defaultのストレージにISO_DOMAINというISOファイルを格納する場所があるので、
それと同じ設定をlocal_datacenterに設定します。
(画面キャプチャは設定済みです。)
おそらくNFSサーバがある場合、その設定をすればいいと思いますが、今回環境を用意できなかったので試せていません。

仮想マシンへのインストール用ISOイメージの登録は以下のコマンドで行います。
# engine-iso-uploader -i ISO_DOMAIN upload <ISO FIlename>
仮想マシンの構築や運用は、ユーザーポータルで行います。
同じく、ID:admin、パスワードはインストール時に設定したものでログインできます。
Windowsを入れる際にドライバが必要になりますが、ここからISOファイルをDLして入れます。
WebインターフェースからVNCが表示されない問題があります。ここから専用のクライアントをDLして入れ、console.vvというファイルに関連付けをしておきます。
仮想マシンの作成方法とかまで手が回りませんでしたが、こんな感じの画面です。


2013年11月9日土曜日

RubyのUFO演算子を利用したソート処理について

今日、長年?の疑問がひとつ解消したが、また忘れそうなのでメモ。
Rubyでイテレータを使ったソートのコード。
例えば、以下のコードは文字列配列arrayの中身をアルファベット順にソートする。

array=%w(R U B Y)
sorted=array.sort{|a,b|
a <=>b
}

これ、実はよく分かっていなくて、ずっと引っかかっていた。
イテレータなのだが、よく処理を渡すと説明がある。

以下疑問点
・処理を渡す引数は何処?|a,b|のaとbに何か渡すの?
・突然出てくる、a<=>bの箇所が不明。UFO演算子でA < Bならば負の数を返し、
A > Bならば正の数を返し、AとBが等しければ0を返す。は分かるが、その戻り値は何処に返っているの?
・a<=>bでアルファベット順に並べるとあるので、これ自体がアルファベット順に並べる命令?とすると、数字を並べるのは1<=>2とか??
・そもそも、ソート処理にブロックを渡しているのが違和感がある。
・イテレーターってループ処理のことじゃなかったっけ??

今となってはかなりアホな疑問なのだが、ついさっきまで理解できていなかった。
(なので、定型句としての理解だった)

a<=>bというのは、上記の通り2つの値を比較するもの。
数字や文字コードなどの比較を行い、その大小に応じて、-1,0,1を返す。
http://docs.ruby-lang.org/ja/search/query:%EF%BC%9C%EF%BC%9D%EF%BC%9E/

で、これ、ソートの判定条件をセットしているんです。

っといっても、鈍感な私はピンと来なかったわけです。
で、こいつを分解していきます。

sorted=array.sort{<ソートする判定条件>}
これが最初の疑問処理を渡す引数は何処?の答え。
では、その中身がどういう動きをしているのか書いてみる。
簡単なバブルソートの例ですが。

array=%w(R U B Y)
cnt=array.size-1
for i in 0..cnt
  for j in 0..cnt -i -1
    case array[j]<=>array[j+1] #ここ
    when +1 then
      swap=array[j]
      array[j]=array[j+1]
      array[j+1]=swap
    end
  end
end

2番目の疑問。
こいつ自体は、ソート時の判定処理に組み込まれる。
この例では、+1の時しか役に立っていないが、+1,0,-1を返すことを期待されている。
ここまで来ると、3つ目の疑問が自ずと解消される。
これは、
|a,b|
A~Bという意味ではなく、単なる変数で、array[j]とarray[j+1]がセットされる。
なので、別に|z,a|でも良い。
そして、次の
a<=>bが結果的に
array[j]<=>array[j+1]
となり、上記のcase文判定条件となる。

4つ目の疑問。
これはソート条件をプラグインで差し替えることを目的としている。
例えば、
a<=>b
の箇所を
a.length<=>b.length
にすると、結果的に
array[j].length<=>array[j+1].length
となり、文字列長での並び替えとなる。

処理を渡すと言われると、上記のコードを丸々変数か何かに入れて渡すとかをイメージするので、訳が分からなかったが、
上記コードが遮蔽されていて、判定条件部分を渡すのなら合点が行った次第。


ちなみに、UFO演算子は宇宙船演算子が正しい??






2013年11月3日日曜日

OpenNebulaを使ってみた。

突然ですが、
広島Ruby勉強会 #035に参加してきました。(遅刻しましたが。)
主な目的はChef入門を聞くことでしたが。

が、最後の最後でなんかしゃべろと予想通りムチャぶりされてしまったので、少しOpenNebulaの紹介をさせて頂きました。
といっても、つい昨日触ったばっかりなんですけどね(笑)

その中で、インストール方法をブログに乗っけると言ってしまったので、ざっくりと書いて見ました。