Linux OS を SmartCloud for Enterprise にインポートする方法

IBM SmartCloud Enterprise 2.0 でイメージ取り込み機能が使えるようになり、Linux システムのイメージをクラウドに取り込めるようになりましたが、作業を効果的に進めるには、正式に提供されている情報に加えて、この記事で紹介されている秘訣が役に立ちます。IBM SmartCloud for Enterprise に CentOS や Ubuntu のいろいろなバージョンを取り込んだ経験に基づき、イメージやメタデータの準備の仕方、必要なツール、作業環境の構築方法、作業上のトラブル対応のための秘訣をご説明します。

新島 智之 (niijima@jp.ibm.com), エグゼクティブ IT アーキテクト, クラウド & スマーターシティ事業, 日本アイ・ビー・エム株式会社

新島智之の写真著者の新島智之は、IT アーキテクトであり、20 年以上の大規模、超複雑な IT システムの設計と構築経験があります。彼は 3 冊の AIX Redbook の執筆に参加しており、SAP Professional Journal を含む数冊の雑誌に記事を投稿しています。彼はオープンソースに関しても活発に活動しています。ここ 2 年は、クラウドコンピューティングの領域で主に活動しており、OS やミドルウェア、アプリケーションや運用ツールなどの複雑な要素を、如何に迅速で、柔軟で、効果的に配備し、管理するかというテーマを探求しています。



2012年 4月 05日

IBM SmartCloud Enterprise 2.0 でイメージ取り込み機能が使えるようになり、Linux システムのイメージをクラウドに取り込めるようになりましたが、このイメージ取り込み機能は Linux システムのみをサポートしており、Windows や他の UNIX システムはサポートしていません。“Customizing Images and Software Bundles guide for SmartCloud Enterprise”という資料によると、Red Hat と SuSE のみをサポートすると書かれていますが、この資料に書かれている条件に合致する限り、他の Linux システムのイメージも取り込むことが出来ます。

イメージ取り込みのほとんどの手順はコマンドラインと API を使って行います。SmartCloud の API や、Linux OS の導入と構成に関する詳細な知識が必要です。

“Customizing Images and Software Bundles guide”と“REST API reference 2.0”という資料が、SmartCloud のユーザーに提供されており、参考になる情報が記載されています。この記事では、イメージ取り込みを効果的に行うために、補完的な情報をご説明します。

図 1. SmartCloud Enterprise へのイメージ取り込み作業の概要
SmartCloud Enterprise へのイメージ取り込み作業の概要

イメージ取り込み作業は、次のような 4 つの主要な段階に分類できます。各段階の詳細は後でご説明します。

Linux OS を取り込むための 4 つの段階

  1. Linux OS イメージとメタデータを準備します。Linux OS イメージを作成するには、hypervisor が必要です。メタデータは手作業で作成する必要がありますが、パブリック・イメージのメタデータをテンプレートとして使うことが出来ます。
  2. イメージとメタデータを永続ストレージに書き込みます。永続ストレージを接続したインスタンスを作成すれば、永続ストレージにファイルを書き込むことができます。イメージとメタデータをネットワーク経由でインスタンスに転送するか、あるいはインスタンスの上でイメージとメタデータを作成してください。
  3. 永続ストレージからイメージを取り込み、個人イメージとして登録します。POST {baseURI}/offerings/image という API を使って取り込みます。
  4. 取り込んだイメージからインスタンスを作成します。イメージ取り込みが成功すると、個人イメージ一覧画面に現れますので、他の個人イメージと同様にして、そこからインスタンスを作成することができます。

作業を開始する前に、以下の参考文献を読み、ツールやファイルなどを集めてください。

  • “Customizing Images and Software Bundles guide”と“REST API Reference 2.0”もしくは“reference guide for the command-line tool” (いずれも SmartCloud のポータルサイトのサポートタブで見つかります。)
  • QEMU、ハイパーバイザーとイメージファイルの操作ツール
  • 取り込みたい Linux OS の ISO image
  • RealVNC VNC viewer

さて、それではいよいよ 4 つの段階の詳細についてご説明しましょう。説明の中で、いろいろな秘訣をご紹介します。


Linux OS イメージとメタデータの準備

ここでは以下の項目についてご説明します。

  • メタデータ・テンプレートの準備
  • 作業環境の準備
  • QEMU の導入
  • VNC server の構成
  • OS image の準備
  • QEMU を使った OS の導入
  • 最低限の OS の構成

メタデータ・テンプレートの準備

イメージの取り込みのために必要なメタデータを準備するもっとも簡単な方法は、パブリック・イメージのメタデータを再利用することです。もし SuSE を取り込みたいなら、パブリックイメージの SuSE のメタデータを再利用してください。もし、Red Hat や、CentOS のような Red Hat 派生 OS を取り込みたいなら、Red Hat のパブリック・イメージのメタデータを活用しましょう。

  1. パブリック・イメージはコピー不可になっていますので、再利用したいパブリック・イメージからインスタンスを作る必要があります。取り込みたい OS と同じプロセッサ・アーキテクチャの、つまり 32bit か 64bit ということですが、それの copper のインスタンスを作成するようにしてください。
  2. インスタンスが出来たらその個人イメージを保存します。これで SmartCloud のポータルのアセットカタログの画面で、この個人イメージに CopyAllowed = Y の設定ができます。
  3. SmartCloud ポータルのコントロール・パネルのタブに、アセット・カタログへのリンクがあります。リンクをクリックして、マイ・ダッシュボードのタブを開きます。そこに個人イメージのアセット一覧があるはずです。
  4. さっき保存した個人イメージの鉛筆アイコンをクリックし、「続く」をクリックすると、CopyAllowd フラグが現れます。
  5. CopyAllowed フラグの値を Y に変えて、更新ボタンを押します。
  6. 永続ストレージを ext3 フォーマットで作成します。大きさは 60GB 程度でよいでしょう。
  7. PUT {baseURI}/storage/{storage id} API を使って、個人イメージを永続ストレージにコピーします。

作業環境の準備

図 2. 作業環境の概要
作業環境の概要

イメージのコピーが終わったら、この永続ストレージを接続した別のインスタンスを作成します。これが作業環境となります。Red Hat 6.0 64bit がお勧めですが、Linux OS ならなんでもいいです。以降の説明では、永続ストレージが /data にマウントされているものとします。

コピーされたイメージとメタデータは、以下の様に見えるはずです。

$ ls -l /data/image
total 3459192
-rw-rw-r--. 1 idcuser idcuser         451 Jan  3 03:14 BSS.zip
-rw-r--r--. 1 idcuser idcuser 64424509440 Jan  3 00:04 K7BqB_W2SOG3K@rUrln1EA.img
-rw-rw-r--. 1 idcuser idcuser         196 Jan  3 03:23 K7BqB_W2SOG3K@rUrln1EA.mf
-rwxr-xr-x. 1 idcuser idcuser        2013 Jan  3 00:04 K7BqB_W2SOG3K@rUrln1EA.ovf
-rwxr-xr-x. 1 idcuser idcuser       57830 Jan  3 00:04 RAM.zip
-rwxr-xr-x. 1 idcuser idcuser       20648 Jan  3 00:04 Terms.zip

拡張子が .img、.mf、.ovf のファイルのファイル名は、イメージごとに異なります。RAM.zip、Terms.zip と、拡張子が .ovf のファイルはそのまま再利用できます。他のファイルは削除して構いません。

QEMU の導入

QEMU のサイトから、QEMU のソースコードをダウンロードして導入します。

wget http://wiki.qemu.org/download/qemu-1.0.tar.gz
tar -xzf qemu-1.0.tar.gz
cd qemu-1.0
./configure --target-list=x86_64-softmmu,i386-softmmu
make
make install

QEMU 関連ツールが /usr/local/bin に導入されますので、PATH 環境変数に /usr/local/bin を追加しましょう。

VNC サーバーの構成

QEMU は独自の VNC サーバーで仮想コンソールを提供します。この VNC サーバーはインスタンス内の X-Window で動く VNC クライアントから接続する仕組みなので、パソコンの VNC クライアントから一旦インスタンスの X-Window に接続する必要があります。

OS イメージの準備

OS イメージは、Linux OS が導入されたハードディスクのイメージを持つバイナリ・ファイルです。Hypervisor がこれをハードディスクのように扱うので、仮想ディスクとも呼ばれます。OS イメージを作成する最も簡単な方法は、hypervisor と OS のインストール CD/DVD を使って、仮想ディスクに OS をインストールすることです。

QEMU を使った OS の導入

この作業は前述の様に X-Windows 上で VNC クライアントを動かして QEMU のコンソールに接続する必要があるので、VNC セッションを使って実施してください。PC からインスタンスに VNC 接続するには、RealVNC viewer を使うことが出来ます。

  1. 空のイメージファイルを raw フォーマットで作成します:
    qemu-img create -f raw hdd.img 60G
  2. イメージファイルと ISO ファイルを接続して hypervisor を起動します:
    qemu-system-i386 -m 1G -hda hdd.img -cdrom installer_image.iso -boot d
  3. 64bit OS を導入する場合は、qemu-system-x86_64 を使ってください。仮想メモリを増やすには -m フラグを使います。
  4. QEMU のコンソールを見るには、作業環境のインスタンスの X-Window の上で、VNC client を使う必要があります。RHEL 6 では、メニューの Application > Internet の中に、TigarVNC viewer がありますので、これを使ってください。TigarVNC viewer を起動したら、VNC server として localhost を指定して QEMU のコンソールに接続してください。
    図 3. SmartCloud のインスタンス上で VNC を使ってゲスト OS の導入画面を見ているところ
    SmartCloud のインスタンス上で VNC を使ってゲスト OS の導入画面を見ているところ
  5. SmartCloud のインスタンスは、KVM アクセラレータがないので、QEMU の上で OS インストーラー動かすのは、とても遅いかもしれません。この手順を手元の PC で行うこともできますが、出来たイメージファイルは 10GB 近くになり、これをインターネット経由で転送することになります。もし間違えたら再度イメージを作り直して、また再度転送になります。

インストーラーが起動したら、指示に従って OS をインストールしてください。その際、以下の条件に合致するように気をつけてください。

  • LVM を使わないこと。最近の Linux OS のインストーラーは、標準で LVM を使います。カスタムメニューを選らんで LVM を使わないようにしてください。
  • /boot と / パーティションのみを作るようにしてください。どちらもプライマリ・パーティションとして作成し、ext3 フォーマットで初期化する必要があります。この操作もカスタムメニューで実施する必要があるでしょう。
  • swap パーティションを作らない。メモリー不足でインストーラーが止まってしまう場合は、QEMU の -m オプションでメモリーを増やすか、テキスト・ベースのインストーラーを使ってください。しかし、一部のテキスト・ベースのインストーラは、上のふたつの条件を満たすための、カスタムメニューをサポートしていないことがあります。

目的の OS のインストールが成功したら、リブートして root でログインし、virtio のサポートが含まれていることを確認します。以下のふたつのコマンドで、virtio カーネルモジュールが、/lib/modules と起動用 RAM ディスクに含まれていることを確認できます。

modprobe -l | grep virtio
gzip -dc /boot/initr*.img | cpio -t | grep virtio

ふたつのコマンドのいずれか一方で、virtio_pcivirtio_blk が見つからないようなら、virtio カーネルモジュールを追加導入する必要し、起動用 RAM ディスクを作り直す必要があります。そうしないとイメージの取り込みに成功しても、インスタンスが起動できません。

最低限の OS の設定

OS イメージを取り込む前にやるべき、最低限の設定内容を以下に示します。

  1. idcuser の作成
    groupadd -g 501 idcuser
    useradd -u 500 -g 501 idcuser
    passwd idcuser
    mkdir /home/idcuser/.ssh
    chown -R idcuser.idcuser /home/idcuser
    chmod 600 /home/idcuser/.ssh
  2. idcusersudo 可能にする (/etc/sudoers)
    idcuser ALL=(ALL) NOPASSWD:ALL
  3. sshd の構成 (/etc/ssh/sshd_config)

この最後の手順は、idcuser と RSA 鍵でインスタンスにアクセスできてから実施した方がいいかもしれません。

PermitRootLogin no
PasswordAuthentication no
UsePAM no

Red Hat や SuSE、それらの派生以外の Linux OS、例えば Unbuntu など、を取り込む場合は、ネットワーク・インターフェースの構成ファイルを変換する必要があります。固定 IP を作って、その address をイメージに設定してしまう方法もあります。取り合えずそれでインスタンスを作って接続するところまでは出来ますので、クラウド上でインスタンスが動き始めてから、カスタマイズした方が楽かもしれません。


イメージとメタデータを永続ストレージに書き込む

ここでは以下の項目を説明します。

  • メタデータの構造と準備
  • 永続ストレージの切り離し

メタデータの構造と準備

次の図は SmartCloud のメタデータの構造を示しています。拡張子が .ovf、.img、.mf のファイルと、BSS.zip、RAM.zip は必須です。

図 4. メタデータの構造
Metadata structure

以前説明したように、RAM.zip はパブリックイメージのものを再利用しますが、内容を熟知している場合は、変更しても構いません。

拡張子 .ovf のファイルは、必須ファイルの名前を変更しない限り、変更する必要はありません。言い換えると、拡張子 .img、.ovf などのファイル名を独自のものにしたい場合は、.ovf ファイルの変更が必要です。

  1. メタデータ準備の一番最後に FileValidation.sh を実行して拡張子 .mf のファイルを作成してください。このファイルは他のファイルのチェックサムを持っているので、このファイルを作成してから他のファイルを変更してしまった場合は、再度 FileValidation.sh を実行する必要があります。

    以下に BSS.zip の中の BSS.xml の例を示します。このファイルについての詳細は、“Customizing Images and Software Bundles guide”を参照してください。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ns2:serviceoffering offeringtype="IMAGE" id=""
     xmlns:ns2="http://www.ibm.com/cloud/storage/xml">
        <shortdesc>CentOS 6.1 32bit test</shortdesc>
        <longdesc>CentOS 6.1 32bit test</longdesc>
        <offeringfamilyid>1003</offeringfamilyid>
        <platformVersion>1.2</platformVersion>
        <attributes>
            <os>CentOS 6.1 32bit test/6.1</os>
            <allowedsize.32>COP32,BRZ32,SLV32,GLD32</allowedsize.32>
        </attributes>
    </ns2:serviceoffering>
  2. ここでの小技は、<os> タグです。OS 名の後ろに“/”で区切って OS バージョンを指定することが出来ます。
  3. <offeringfamilyid> の値が 1003 であることを確認してください。ここで違う値を指定すると、違う単価表で請求されてしまいます。64bit OS イメージを取り込む場合は、<allowedsize.32> タグとその値は、別のものになります。
  4. BSS.xml を BSS.zip に格納して、/data/image に置いて:
    zip /data/image/BSS.zip BSS.xml
  5. OS イメージを /data/image にコピーして、xxxx.img というファイル名に変更してください。ここで xxxx の部分は、xxxx.ovf の xxxx の部分と同じにします。
  6. /data/image ディレクトリに移動し、FileValidation.sh を実行します。このスクリプトは、“Customizing Images and Software Bundles”のドキュメントのパッケージに含まれています。 メニューの 2 を選んで、マニフェストファイルを作成します。

永続ストレージの切り離し

永続ストレージの動的切り離し機能が提供されるまでは、永続ストレージを切り離すために作業環境インスタンスを削除する必要があります。作業環境インスタンスを削除する前に、個人イメージを保存することを強くお勧めします。何故なら、この後のイメージ取り込みやプロビジョニングの手順で失敗したら、また作業環境に戻ってイメージやメタデータを修正することになるからです。決して楽観的になりすぎてはいけません。最初の取り込みは、様々な理由で大抵失敗します。作業環境インスタンスの個人イメージを保存したら、作業環境インスタンスを削除する前に、個人イメージから別のインスタンスが作れることを確認してください。


永続ストレージからの個人イメージの取り込み

POST {baseURI}/offerings/image という API を使って、永続ストレージにある OS イメージを SmartCloud の個人イメージとして取り込むことが出来ます。API のレスポンスに image ID が出ていますので、記録しておいてください。イメージ取り込み状況を確認したり、失敗した後削除する場合に image ID が必要になります。まれにポータルの個人イメージ一覧に表示されないのに、内部的に存在して、個人イメージ数のカウントに入っている場合があります。

イメージ取り込みの最初の試みは、大抵失敗します。何故かは聞かないでください。でも心配する必要はありません。諦めるまえに、深呼吸して、お祈りをして、もう一度やってみてください。

それでも失敗したら、メタデータの作成手順に戻ってください。この段階での失敗は、恐らくメタデータの不備によるものです。


イメージからのインスタンスの作成

イメージ取り込みが成功したら、ポータルを使ってインスタンスを作成することができます。インスタンス作成に失敗したら、イメージ作成手順に戻って、全ての条件に合致しているか確認してください。この段階での失敗は、イメージファイル形式の不正によるものです。

インスタンスがアクティブになったら、idcuser でアクセスしてみましょう。もし SSH クライアントがタイムアウトしたら、インスタンスが起動していないか、ネットワーク・インターフェースの構成に失敗しています。イメージ作成手順に戻って、virtio の構成を確認してください。

インスタンスの内部で何が起きているのか、知りたいと思うかもしれません。作成したインスタンスの個人イメージを取り、永続ストレージにコピーして、QEMU を使ってイメージを動かして、中をのぞいてみることができます。

もしインスタンスが起動していたのなら、syslog ファイルに何か記録が残っているでしょう。

もし SSH クライアントが認証エラーのメッセージを表示するようなら、RSA 鍵の構成の問題かもしれません。root でのログインを許す構成になっていれば、root でログインできるかもしれません。/home/idcuser 以下のファイルの権限を確認してください。

ログインできたら

idcuser と RSA 鍵を使ってログインできたら、その接続を維持したまま、sshd_config を修正して、root でのログインや、パスワードによるログイン、PAM の利用などを禁止し、sshd を再起動してください。その後、別のセッションを使って、idcuser と RSA 鍵でログイン出来ることを確認してください。

もし全てうまく出来たようなら、最初のインスタンスの個人イメージを保存して、違う IP address や RSA 鍵などを使ってもうひとつのインスタンスを作ってみましょう。

Ubuntu サポートについて

Ubuntu OS のネットワーク構成ファイルは、Red Hat のものと全く異なっています。SmartCloud のプロビジョニング・エンジンは、Red Hat 形式の構成ファイルを設定するので、Ubuntu ではうまく動きません。これに対応するためには、次のようなスクリプトを level 3 から 5 で動くように準備して、Red Hat 形式の構成ファイルを、Ubuntu 形式のものに変換してやる必要があります。

#!/usr/bin/perl

$INTERFACE="/etc/network/interfaces";
$NETCONFDIR="/etc/sysconfig/network-scripts/";

if ( (stat($INTERFACE))[9] > (stat($NETCONFDIR."ifcfg-eth0"))[9] ){
  exit 0;
}

system("/bin/sed -n s/HOSTNAME=//p /etc/sysconfig/network > /etc/hostname");
system("/bin/hostname `cat /etc/hostname`");

open(OUT,">$INTERFACE");
print OUT << "EOF";
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
EOF

open(TT,"ls ".$NETCONFDIR."ifcfg-eth?|");
while (<TT>){
  chop;
  $t=$n=$_;
  $n=~s/^.*\/ifcfg-//;
  open(IF,$t);
  while (<IF>){
    chop;
    if (/^IPADDR=(.*)$/){
      $addr=$1;
    } elsif (/^NETMASK=(.*)$/){
      $mask=$1;
    } elsif (/^GATEWAY=(.*)$/){
      $gw=$1;
    }
  }
  close(IF);

  @a=split(/\./,$addr);
  @m=split(/\./,$mask);

  for ($c=0; $c<4; $c++){
    $a=$a[$c]*1;
    $m=$m[$c]*1;
    $b[$c]=($a & $m) + (255 & ~ $m);
  }
  $bcast=sprintf("%d.%d.%d.%d",$b[0],$b[1],$b[2],$b[3]);

  print(OUT "iface $n inet static\n");
  print(OUT "    address $addr\n");
  print(OUT "    netmask $mask\n");
  print(OUT "    gateway $gw\n");
  print(OUT "    broadcast $bcast\n");
  print(OUT "\n");
}
close(TT);
close(OUT);

system("/etc/init.d/networking restart");
exit(0);

まとめ

IBM SmartCloud for Enterprise 2.0 のイメージ取り込み機能はちゃんと動きます。この機能は Red Hat や SuSE 以外の Linux OS もサポートしますし、イメージ作成のための作業環境自体を SmartCloud の上で動かすことさえできます。しかし、イメージフォーマットに関する条件や制約があり、イメージ取り込みは簡単な作業ではありません。この資料でご紹介したアドバイスを活用すれば、きっと順調に作業が進むと思います。

参考文献

  • “Customizing Images and Software Bundles”, “REST API References 2.0” and “Command Line Tools Reference and Binaries”
  • Document libraries on Support tab on SCE Portal.

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Linux
ArticleID=807080
ArticleTitle=Linux OS を SmartCloud for Enterprise にインポートする方法
publish-date=04052012