読者です 読者をやめる 読者になる 読者になる

仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

Oracle Linux 7のクラウドイメージを自作してOpenStackで使う

KVM OpenStack サーバー 技術解説
【8/27/2015更新】Oracle Linuxクラウドイメージは現在、Oracle Software Delivery Cloudで公開されています。EL6系とEL7系のクラウドイメージが利用可能です。ログインユーザーはcloud-userでした。

Oracle Linuxには公式のクラウドイメージがなく、自分で作成する必要があります。

とはいえ、Linux KVM環境でVMを作り、OSを入れてcloud-initをいれてあとは設定をごにょごにょするだけなので、そんなに難しくはないよねと思っていたら意外とはまったので、ここに記しておこうと思いました。

まずCloud-initですが、公式パッケージはなくEPELリポジトリーのパッケージを使います。CentOS 7なら"yum install epel-release"でEPELリポジトリーを使えますが、Oracle Linux 7,7.1では標準リポジトリーにepel-releaseがありません。そのため、

# yum install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

を実行する必要がありました。

さて、このあとcloud-initパッケージを入れるわけですが、ここでも問題が発生します。実際にコマンドを実行すると分かるのですが、パッケージの依存関係を解決できずエラーとなってしまうのです。

# yum install cloud-init
...
Error: Package: python-cheetah-2.4.4-4.el7.x86_64 (epel)
 Requires: python-pygments
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

じゃあ、そのpython-pygmentsを入れれば良いじゃないかと思うのですが、そのパッケージもリポジトリーにありません。

# yum info python-pygments
Error: No matching Packages to list

そこで、python-pygmentsパッケージをビルドしてRPMパッケージを作ることにしました。

開発環境のセットアップ

まずは開発環境のインストールをします。

# yum groupinstall "Development Tools"
# yum install python-devel python-nose ncurses-devel libacl-devel libselinux-devel gtk2-devel libSM-devel libXt-devel libXpm-devel perl-ExtUtils-Embed

次に、Red HatFTPサーバーからソースファイルをダウンロードします。

# curl -LO http://ftp.redhat.com/pub/redhat/linux/enterprise/7Server/en/RH-COMMON/SRPMS/python-pygments-1.4-9.el7.src.rpm

依存パッケージを確認します。

# rpmbuild --rebuild python-pygments-1.4-9.el7.src.rpm

「警告: ユーザー mockbuild は存在しません - root を使用します」...というエラーが出るので、ダミーユーザーを作成します。

# useradd -s /sbin/nologin mockbuild

Specファイルを作成します。

# rpm -Uvh --nomd5 python-pygments-1.4-9.el7.src.rpm

ソースパッケージからRPMパッケージをビルドします。

# rpmbuild -ba ~/rpmbuild/SPECS/python-pygments.spec
...
書き込み完了: /root/rpmbuild/SRPMS/python-pygments-1.4-9.el7.src.rpm
書き込み完了: /root/rpmbuild/RPMS/noarch/python-pygments-1.4-9.el7.noarch.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.qcrthC
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd Pygments-1.4
+ rm -rf /root/rpmbuild/BUILDROOT/python-pygments-1.4-9.el7.x86_64
+ exit 0

RPMパッケージが無事ビルドできました。

クラウドイメージの作成

以上で必要なパッケージが作られたので、あとは次の手順でKVMイメージを作成するだけです。作ったイメージを例えばOpenStackなどに登録すると、クラウド上でOracle Linuxを利用できるようになります。

手順は次の通りです。

  1. Linux KVM環境で仮想マシンを作成(ディスクはqcow2を推奨)
  2. 仮想マシンOracle Linux 7をインストール
  3. ビルドしたpython-pygmentsをインストール
  4. EPELリポジトリーの追加
  5. cloud-initのインストール
  6. cloud.cfgへ初期設定を仕込む

最後にcloud.cfgについて、少々解説します。

cloud.cfg初期設定

Cloud-initをインストールすると、初期設定ファイルが/etc/cloud/cloud.cfgに展開されます。Cloud-initが導入されたOSが起動時にこの設定が呼び出されてカスタマイズされますので、配布用の設定を事前に仕込んでおきます。

Cloud-initではアカウントの設定やリポジトリーの設定、初回起動時や起動毎にスクリプトを実行するなど様々なことができますが、デフォルトのユーザーを定義するには次のあたりの設定を変更するだけです。

users:
- default
disable_root: 1
ssh_pwauth:   0

...

system_info:
  default_user:
    name: oracle     #ユーザー名

以上の設定をしたイメージをクラウドに登録するだけです。

2015-03-25 02:03:58 +00001

ログインする時は、公開鍵を使って公開鍵認証します。

# ssh -i .ssh/id_rsa oracle@public-ip-address

私はいちいち鍵を指定するのが面倒なので、次のようなエイリアスを指定しています。

alias sshcloud="ssh -i /Users/myname/.ssh/id_rsa "

エイリアスを設定すると次のように実行できます。

# sshcloud oracle@public-ip-address

以上、Oracle Linux 7のクラウドイメージを作って使うまでの流れでした。