Archive for the ‘OpenSolaris’ tag
OpenSolaris b133をOracle VM上でPVMとして作成する
OpenSolaris b133をPVM(準仮想マシン)64bitとしてOracle VM上にクリーンインストールする方法を紹介します。
リファレンス:Starting At The C
*最初にお断りしておきますがソコソコ面倒です。
まずはOpenSolaris b133のisoをダウンロードし、VM Serverの/OVS/iso_poolあたりに置いておきます。
[root@vmserver]# cd /OVS/iso_pool
[root@vmserver]# wget http://www.genunix.org/dist/indiana/osol-dev-133-x86.iso
まずVM ServerでこのVMを格納するためのディレクトリを任意の名前で作成しそのディレクトリに移動します。ここではosolとしています。
[root@vmserver]# mkdir /OVS/running_pool/osol [root@vmserver]# cd /OVS/running_pool/osol
次に仮想ハードディスクをファイルで作成します。Sparse形式で良いでしょう。ここでは推奨値の10GBにしています。(実際は9.8GBくらいになりちょっと足りないのでインストール時に警告がでる。が、無視。)
[root@vmserver]# dd if=/dev/zero of=system.img bs=1M count=1 seek=10000
VMの設定ファイルを作成します。この設定ファイルはインストール用で、インストール後には新しく作り直します。
[root@vmserver]# vi vm_install.cfg bootloader = '/usr/bin/pygrub' bootargs = '--kernel=/platform/i86xpv/kernel/amd64/unix --ramdisk=/platform/i86pc/amd64/boot_archive' name = 'osol' memory = 1024 on_reboot = destroy vif = [ 'type=netfront,bridge=xenbr0,mac=00:16:3e:00:00:52', ] disk = [ 'file:/OVS/iso_pool/osol-dev-133-x86.iso,xvdc:cdrom,r', 'file:/OVS/running_pool/osol/system.img,xvda,w', ]
VMを起動し、コンソールに接続します。
[root@vmserver]# xm create -c vm_install.cfg
言語とキーボード配列を選び、username:jack, password:jackでログインします。
DHCPサーバが動いている環境であればそのうちIPが割り当てられるのでしばらく待ってからifconfig等でIPを確認します。DHCPがない場合は自分で静的IPを割り当てます。IPが設定されたらコンソールを抜け、VNCのポート番号とパスワードを確認します。これは自動的に設定されているものです。
まずxm listコマンドでVMのdomain IDを確認し、次にxenstore-readコマンドでVNCの情報を取得します。
[root@vmserver]# xm list osol Name ID Mem VCPUs State Time(s) osol 15 1024 1 -b---- 32.3 [root@vmserver]# xenstore-read /local/domain/15/guest/vnc/port 5900 [root@vmserver]# xenstore-read /local/domain/15/guest/vnc/password bxukNvkb
ここまでで得たVMのIPアドレス、VNC Port番号、VNCパスワードをもって任意のVNCクライアントから接続します。すると通常OpenSolarisのインストールCDから起動したときと同じ画面にログインできます。画面左のショートカットから通常通りインストールウィザードを起動してインストールを進めてます。そして注意しなければいけないのは、インストールが「Finished」となってもすぐにRebootをしないことです。リブートの前にOpenSolaris上でターミナルを開いて以下の作業を行います。
[jack@osol]$ vi update-dom0.sh #/bin/bash dom0=$1 dompath=$2 unixfile=/platform/i86xpv/kernel/amd64/unix root=`pfexec beadm list -H | grep ';N*R;' | cut -d \; -f 1` mkdir /tmp/root pfexec beadm mount $root /tmp/root 2>/dev/null mount=`pfexec beadm list -H $root | cut -d \; -f 4` pfexec bootadm update-archive -R $mount scp $mount/$unixfile root@$dom0:$dompath/kernel.$root scp $mount/platform/i86pc/amd64/boot_archive root@$dom0:$dompath/ramdisk.$root pfexec beadm umount $root 2>/dev/null echo "Kernel and ramdisk for $root copied to $dom0:$dompath" echo "Kernel cmdline should be:" echo "$unixfile -B zfs-bootfs=rpool/ROOT/$root,bootpath=/xpvd/xdf@51712:a" [jack@osol]$ chmod 755 update-dom0.sh [jack@osol]$ ./update-dom0.sh vmserver1 /OVS/running_pool/osol (dom0のパスワードを訊かれるので入力する)
これが完了したらRebootボタンを押してリブートしてください。ただし実際にはリブートではなくシャットダウンされます。シャットダウンされたらvm.cfgを作成・編集します。
[root@vmserver]# vi vm.cfg name='osol' kernel='/OVS/running_pool/osol/kernel.opensolaris' ramdisk='/OVS/running_pool/osol/ramdisk.opensolaris' extra='/platform/i86xpv/kernel/amd64/unix -B zfs-bootfs="rpool/ROOT/opensolaris",bootpath="/xpvd/xdf@51712:a"' memory=1024 vif= [ 'type=netfront,bridge=xenbr0,mac=00:16:3e:00:00:52', ] disk= [ 'file:/OVS/running_pool/osol/system.img,xvda,w', ]
これでインストールは完了です。vm_install.cfgは削除してしまって構いません。新しく作成した設定ファイルで起動してみてください。
[root@vmserver]# xm create -c vm.cfg
GUIにログインしたい場合は以下のようにVM上でVNC Serverを起動してから任意のVNCクライアントで接続すればOKです。適切なIPアドレス設定を忘れずに。
[nkjm@osol]$ vncserver
Oracle VM上でOpenSolarisをPVMとしてJeOSから作成する方法
注)2010年1月現在、OpenSolarisはOracle VMのゲストOSとしてサポートされていません。
Oracle VM 2.2上でOpenSolaris 2009.06をPVM(準仮想マシン)としてインストールする方法を紹介します。まだプロトタイプという位置づけではあるものの、実はOpenSolaris 2009.06にもいわゆるVMテンプレートが存在します。今回はそのテンプレートを使ってOpenSolarisのPVMを作成します。まずはVMテンプレートをダウンロードします。
OpenSolaris 2009.06 JeOS Prototype VM Images
このページからXen用のPVMイメージをダウンロードします。直リンはこちら。(直リンって久しぶりだな。。)
Xen: Oracle VM, OpenSolaris xVM, etc. KVM: (In XEN HVM mode)
そしてこのイメージは7zipという少し耳慣れないツールで圧縮されています。以下のページからご自身のプラットフォームに応じたモジュールをゲットしてインストールしてください。
http://www.7-zip.org/download.html
僕はp7zip for POSIX/Linuxをダウンロードしてビルドしました。そして使い方で一点ハマリポイントがありました。深く考えずに/usr/local/bin/7za e osol-0906-jeos-proto-xvm-zen-para.7z などとしていたのですが、eだと現在のディレクトリ直下にすべてが解凍されてしまい、サブディレクト内に何にもねぇ!ってことになってしまいます。p7zip for POSIX/Linuxを使われる方はくれぐれも/usr/local/bin/7za x osol-0906-jeos-proto-xvm-zen-para.7z で解凍してください。他のプラットフォームはわかりません。また、Oracle VM Serverにはgcc等の開発キットは含まれていないのでmakeはできません。7zipは他のプラットフォームにインストールしてVMイメージは解凍してからVM Serverに格納するのが吉でしょう。
解凍してできたディレクトリをVM Serverの/OVS/running_pool/直下に保存します。
[root@vmserver]# pwd /OVS/running_pool [root@vmserver]# ls OSOL0906JeOSProto
次に設定ファイル生成スクリプトを編集します。というかこのスクリプトを編集して設定ファイルそのものにしたらいいんじゃないかという気もします。どっちでもいい話ですが、結果的に以下のファイルを作成します。(ファイル名はvm.cfgでなくても良いのですが、Oracle VMの慣例にならってvm.cfgとしておきます。
[root@vmserver]# cd OSOL0906JeOSProto/ [root@vmserver]# vi vm.cfg name = "OSOL0906JeOSProto" vcpus = 1 memory = "768" disk = [ 'file:/OVS/running_pool/OSOL0906JeOSProto/System.raw/vdisk.raw,xvda,w', 'file:/OVS/running_pool/OSOL0906JeOSProto/instance.raw/vdisk.raw,xvdb,w' ] vif = ['type=netfront,bridge=xenbr0,mac=00:16:3e:00:00:01'] on_shutdown = "destroy" on_reboot = "destroy" on_crash = "preserve"
あとはxmコマンドで以下のように起動すればOpenSolarisがPVMとして起動します。
[root@vmserver]# xm create vm.cfg -c
ただしこのOpenSolaris、Just Enoughと名乗るだけあってほんとに軽量版です。汎用的に利用するにはいろいろとパッケージを追加する必要があるでしょう。しかし手元の環境ではsshがうまく起動せず、疲れてきたので作業終了しました(オイオイ)。
どなたかこのJeOSでsshを普通に起動する方法をご存知でしたら教えてください。
1/26追記:/lib/svc/method/sshd -cしておくと起動できました。@satokazさん、有難うございます!
ここまで書いておきながらなんですが、僕は普通にvirshを使ってPVMをインストールしようと思います。その手順はまた後ほど。
ZFSのiSCSI TargetをLinuxから利用するときのアクセス制御設定
仮想化環境でゲストOSにネットワーク経由(iSCSI)で直接ストレージを認識させる場合、ストレージ側で何らかの接続制御を行う必要に迫られます。何も制御してないと、ゲストOS: NKJMからゲストOS:SUZUKI用のボリュームに接続できてしまったりと、意図的であろうとなかろうと本来接続するボリュームとは違うボリュームに接続してしまう可能性があるからです。
ちなみにゲストOSから直接ストレージを認識させる形式ではなく、一旦ホストOS(dom0)に認識させてからゲストOSに貸し出すような形であればホストOS側で制御できるのでそこまでデリケートになる必要はないでしょう。
今回はiSCSIストレージにZFS、ゲストOSにLinux(Oracle Enterprise Linux 5.x, Redhat Enterprise Linux 5.x, CentOS 5.x)を使用しているときのアクセス制御についてまとめておきます。
「オペレーションミスを予防する」という目的であればInitiator IQNでアクセス制御する程度がシンプルでいいでしょう。しかしInitiator IQNは簡単に詐称できるので、セキュリティを真に確保しなければいけないPublicな環境であればより強固な認証を実施することが求められるでしょう。
それぞれの制御方法について順に紹介していきます。
Initiator IQNで認証
特定のTargetにアクセスできるInitiator IQNをあらかじめ定義しておき、アクセス時のInitiator IQNをベースに制御を行うものです。
Initiator側(Linux)
特に設定は必要ありませんが、Initiator IQNの情報だけ取得しておく必要があります。
[root@initiator1]# cat /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.1994-05.com.redhat:123456
Target側(OpenSolaris)
まず接続を許可するInitiator IQNのオブジェクトを作成します。オブジェクト名は何でも構いませんが今回はinitiator1としています。
[root@target]# iscsitadm create initiator -n iqn.1994-05.com.redhat:123456 initiator1
次にそのInitiatorオブジェクトと、アクセスを許可したいTargetを紐づけます。
[root@target]# iscsitadm modify target -l initiator1 [TARGET_NAME]
これでTARGET_NAMEはinitiator1,つまりiqn.1994-05.com.redhat:123456からのアクセスのみを許可するようになります。
CHAP認証
CHAP認証ではInitiator IQNの検査に加えusername/passwordによる認証を行います。
Initiator側(Linux)
CHAPのusername/passwordを設定します。これには設定ファイルを編集する方法と、TargetをDiscoveryして登録し、登録されたTargetのプロファイルを設定する方法があります。前者はグローバルなデフォルト設定になるので、新しく登録されたTargetにはすべてこの設定ファイルに記載されているusername/passwordでログインしにいくようになります。Target個別に認証方法やusername/passwordを設定する場合は後者の方法で設定する必要があります。以下では前者の設定ファイルの編集を解説します。
[root@initiator1]# vi /etc/iscsi/iscsid.conf node.session.auth.authmethod = CHAP node.session.auth.username = user1 node.session.auth.password = zfszfszfszfs (12文字以上16文字以内)
編集が完了したら設定を反映させるためにiscsidをリスタートします。
[root@initiator1]# service iscsi restart
以上でInitiator側の設定は完了です。
Target側(OpenSolaris)
まず接続を許可するInitiator IQNのオブジェクトを作成します。オブジェクト名は何でも構いませんが今回はinitiator1としています。
[root@target]# iscsitadm create initiator -n iqn.1994-05.com.redhat:123456 initiator1
次にそのInitiatorにusername/passwordを設定します。これはInitiator側で設定したusername/passwordと一致しなければなりません。
まずはusernameです。
[root@target]# iscsitadm modify initiator -H initiator1 user1
次にpasswordです。
[root@target]# iscsitadm modify initiator -C initiator1 *プロンプトが表示され、パスワード(今回はzfszfszfszfs)を2度入力します。
次にそのInitiatorオブジェクトと、アクセスを許可したいTargetを紐づけます。
[root@target]# iscsitadm modify target -l initiator1 [TARGET_NAME]
これでTARGET_NAMEはinitiator1,つまりiqn.1994-05.com.redhat:123456からのアクセスのみを許可し、さらにCHAPの認証が通った場合だけアクセスできるようになります。以下のようにInitiator側から登録とログインを行ってみてください。
[root@initiator1]# iscsiadm -m discovery -t st -p [TARGET_IP] [root@initiator1]# iscsiadm -m node --login
なお、すでにInitiator側でTargetを登録した状態でiscsid.confを編集してservice iscsi restartしてもログインは成功しません。すでにそのTargetのプロファイルはCHAP認証なしということで作成されているからです。この場合は一度プロファイルをiscsiadm -m node -o deleteとして削除してdiscoverからやり直すか、Targetのプロファイルを個別に設定してやる必要があります。その方法を以下に記載しておきます。
[root@initiator1]# iscsiadm -m node -T [TARGET_IQN] -o update -n node.session.auth.authmethod -v CHAP [root@initiator1]# iscsiadm -m node -T [TARGET_IQN] -o update -n node.session.auth.username -n user1 [root@initiator1]# iscsiadm -m node -T [TARGET_IQN] -o update -n node.session.auth.password -n zfszfszfszfs
という感じです。
OpenSolaris vs Linuxの超約
最近TuxRadarのOpenSolaris vs Linuxという記事が話題です。
内容はもちろんOpenSolarisとLinuxを比較する記事ですが、細かくスペックを比較するようなコンテンツではなくOpenSolarisの特徴的な機能/制約に言及することで客観的に両者を理解できる簡潔で読みやすいコンテンツになっています。その内容を以下に大雑把にまとめておきます。
広範囲なハードウェアサポートはLinuxに一日の長がある
今日のLinuxカーネルはデバイスドライバがその大部分を占めると言われるだけあって広範囲に及ぶデバイスのカバレージはLinuxに一日の長がある。ただしLinuxは「とにかくサポートするデバイスを増やす」ことに注力しており、そのためにはデバイスドライバ用のカーネルインターフェース仕様を変えることもいとわないというスタンス。それに対してOpenSolarisは互換性重視。今開発したドライバは10年後にも使えるというスタンス。
ZFS
名実ともに今のSolarisの人気を引っ張っているのはこのZFSといっても過言ではない。Linuxの事実上標準ファイルシステムであるext3はext2との互換性を重視したもので、ZFSはそれに比べてかなり先進的な機能が搭載されいている。
プールという概念
ZFSは今までのようにファイルシステム毎にディスクを区切って容量を分配するのではなく、容量はみんなで共有、ファイルシステムは管理上の独立性のために作成という仕様になっている。
注釈> Linuxでは100Gのディスクがひとつ在って、その上に4つのファイルシステムを作成するということはディスクを1/4づつに区切ることを意味する(均等分割すれば)。一方SolarisのZFSでは4つのファイルシステムすべてが100Gを共有するという仕様。より効率的なディスクリソースの使用が可能になる。ディスクはプールに追加され、そのプールをファイルシステムみんなで共有する。そのプールにはオンラインでディスクを抜き差し可能というのも大きなポイント。
スナップショット/リストア
ZFSではスナップショットとそれをリストアするという操作が可能。これらはコマンドラインでも可能だが、OpenSolaris 2009.06では洗練されたGUIが利用可能。中でも「タイムスライダー」は必見。つまみを左右することでタイムマシーンのようにファイルを過去の任意の時点に戻すことができる。

*詳しくは別サイトのこの動画でみてほしい。
仮想化テクノロジー
OpenSolarisではxVMというXenベースの仮想化機構に加え、Zoneという仮想化も使用することができる。
注釈> 最近ZoneについてXenやVMwareにくらべて未熟な仮想化技術と思っている人をしばしば見かけますがそうではありません。Zoneは同じOSを高密度に動かすという要件であればXenやVMwareよりも優れた仮想化技術です。なので集約密度が命のVPSホスティングサービス業者はXenやVMwareよりもVirtuozzoというZoneに似た方式の仮想化ソフトを採用していることが多い。
コマンドの違いまとめ
これは優劣の問題ではないが、LinuxユーザがSolarisをつかったときに、「あれ、/var/log/にあんまりログないな」みたいなことがよくありますがそういうときに役に立つTipsです。
これも詳しくはオリジナルページでみてみてください。
あとはインストール時の注意事項についてもまとめられていますが、あんまり面白い話でもないので割愛。
特徴と言えばあとDTraceがありますが、これには触れられてないですね。
Sun xVMで仮想化環境を構築する – ①インストール
*Sun関係のエントリが続いていますが特に深い意味はありません(本当に)。単なる個人的な趣味です。念のため。
xVMはSunが提供するXenベースの仮想化環境です。現在xVMを使用するには以下のステップがよさそうです。
- まずOpenSolarisを I/Aサーバにインストール
- インストールしたOpenSolarisにxVM関連モジュールをインストール
- xVM関連モジュールに含まれるXenカーネル(xVMカーネル)から起動し直す
- xVM関連サービスを有効化する
それでは実際にやってみましょう。
まずは現時点で最新のOpenSolaris 2009.06をダウンロードしてインストールします。OpenSolarisのインストールはエラク簡単で恐らく猫でもできると思われるので詳細は省略。Live CDで起動して、その後Install OpenSolarisアイコンを叩いてインストールウィザード起動、って感じです。
OpenSolaris 2009.06 – LiveCD (x86) (クリックするとダウンロードが始まります)
OSのセットアップが終わったら早速xVMのインストールに入りましょう。作業は面倒なのですべてrootで行う前提です。
まずxVM専用の起動環境を作ります。これは感覚的にはデュアルブートにする感じですが作業はシンプルで、もう一つOSを入れ直したりする必要はありません。beadm (Boot Environment Admin) コマンドで作成します。
root@opensolaris:# beadm create -a -d xvm xvm
*-aは作成するBEをすぐに有効化するオプション
*-dは作成するBEの説明を指定するオプション
そしてxVM関連パッケージをインストールします。
root@opensolaris:# beadm mount xvm /tmp/xvm-be root@opensolaris:# pkg -R /tmp/xvm-be install xvm-gui root@opensolaris:# beadm umount xvm
*-R [DIRECTORY] はDIRECTORYをルートとして指定するパッケージをインストールするオプション
現在のgrub設定ファイルからxVM環境起動用のエントリを作成します。
root@opensolaris:# awk '
/^title/ { xvm=0; }
/^title.xvm$/ { xvm=1; }
/^(splashimage|foreground|background)/ {
if (xvm == 1) next
}
/^kernel\$/ {
if (xvm == 1) {
print("kernel\$ /boot/\$ISADIR/xen.gz")
sub("^kernel\\$", "module$")
gsub("console=graphics", "console=text")
gsub("i86pc", "i86xpv")
$2=$2 " " $2
}
}
{ print }' /rpool/boot/grub/menu.lst >/var/tmp/menu.lst.xvm
作成されたエントリを確認し、本チャンのファイルを上書きします。
root@opensolaris:# mv /var/tmp/menu.lst.xvm /rpool/boot/grub/menu.lst
リブートして新しいxVMエントリで起動し直します。
root@opensolaris:# rebooot
OSが起動したらログインし、xVM関連のサービスを有効にします。
root@opensolaris:# svcadm enable -r xvm/virtd; svcadm enable -r xvm/domains
*-rは依存するサービスを芋づる式に有効化するオプション
これでxend等が起動します。xm listとかするとおなじみの出力をみることができます。
この手順はほぼほぼ以下のOpenSolaris公式サイトからのパクリです。よければこちらもどうぞ。
