【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 HatのFTPサーバーからソースファイルをダウンロードします。
# 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を利用できるようになります。
手順は次の通りです。
- Linux KVM環境で仮想マシンを作成(ディスクはqcow2を推奨)
- 仮想マシンにOracle Linux 7をインストール
- ビルドしたpython-pygmentsをインストール
- EPELリポジトリーの追加
- cloud-initのインストール
- 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 #ユーザー名
以上の設定をしたイメージをクラウドに登録するだけです。
ログインする時は、公開鍵を使って公開鍵認証します。
# 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のクラウドイメージを作って使うまでの流れでした。