okochangの馬鹿でありがとう

ふらふら適当に世間を生きる日々でございます

Amazon Linuxで使われてるcloud-initをCentOS6で使ってみる

新年あけましておめでとうございます。
年明け最初の更新をこんなに早くするとは自分でも驚きですが、今年もブログをゆるく継続していきたいと思います。
 
さて、AWSを使用している方はAmazon Linuxに興味を持った事があると思います。 Redhat系のディストリビューションを使用していた方は操作感も近くてスイッチしやすいのではないでしょうか?
私も何度かAmazon Linuxを使用しましたが、その中でcloud-initってとても便利だなと思いました。
cloud-initはもともとUbuntuに搭載されたクラウド環境でのセットアップツールみたいですが、Amazon Linuxではこの機能が標準で移植されております。 個人的にはChefとかよりもチャラく使えるようなイメージでしょうか。。。
AWSで提供されているUbuntuやAmazon Linuxはcloud-initを使って、指定したSSH公開鍵の設置や、セキュリティアップデートなどが行われているようです。
自前でCentOSなどのAMIを作成した経験がある方はSSHの公開鍵を設置するスクリプトを使った事があると思いますが、Amazon Linuxではcloud-init経由でec2-userに公開鍵を設置しているのですね。
『なるほどー、これはCentOSでも使ってみたいですよねー』というネタです。
 
■AmazonLinuxで使用されているcloud-initのsrpmを取得する。
Amazon Linuxで以下のようにコマンドを実行すると/usr/src/srpm/debug/以下にsrpmが保存されるので、これをCentOSでビルドします。
# get_reference_source -p cloud-init

Requested package: cloud-init
Found package from local RPM database: cloud-init-0.5.15-20.amzn1
Corresponding source RPM to found package : cloud-init-0.5.15-20.amzn1.src.rpm

Are these parameters correct? Please type 'yes' to continue: yes
Source RPM downloaded to: /usr/src/srpm/debug/cloud-init-0.5.15-20.amzn1.src.rpm
CentOSでcloud-initのrpmを作成するビルドに必要なライブラリをインストールします。
epelをyumのリポジトリに追加している方はPyYAMLとlibyamlもyumでインストールが出来ると思います。
# yum -y groupinstall "Development Tools" "Development Libraries" && yum -y update
# yum install python-devel python-configobj python-cheetah
# cd /usr/local/src/
# wget ftp://ftp.iij.ad.jp/pub/linux/fedora/epel/6/i386/PyYAML-3.09-5.el6.i686.rpm
# wget ftp://ftp.iij.ad.jp/pub/linux/fedora/epel/6/i386/libyaml-0.1.3-1.el6.i686.rpm
# rpm -ivh libyaml-0.1.3-1.el6.i686.rpm PyYAML-3.09-5.el6.i686.rpm 
■次に事前に転送しておいたcloud-initのsrpmをビルドします。 一部specファイルを以下のように編集しています。
# rpm -ivh --nomd5 cloud-init-0.5.15-20.amzn1.src.rpm 
# cd /root/rpmbuild/
# grep ^BuildRequire ./SPECS/cloud-init.spec 
BuildRequires: python-devel-abi
# grep ^Require ./SPECS/cloud-init.spec 
Requires: sudo
Requires: rpm
Requires: yum
Requires:      python-configobj
Requires:      python-cheetah
Requires:      python-yaml
# vi ./cloud-init.spec 
     21 #BuildRequires: python-devel-abi
     22 BuildRequires: python-devel
     25 #Requires:      python-yaml
     26 Requires:      PyYAML
# grep ^Source ./SPECS/cloud-init.spec 
Source0:   cloud-init-%{version}.tar.gz
# cd ./SPECS/
# time rpmbuild -bb --clean ./cloud-init.spec 

real 0m0.061s
user 0m0.043s
sys 0m0.017s
■インストール作成されたcloud-initのrpmをインストールします。
specファイルを見ると分かりますが、インストールするとec2-userやsudoの設定が追加されます。
# rpm -ivh /root/rpmbuild/RPMS/noarch/cloud-init-0.5.15-20.el6.noarch.rpm 
準備中...                ########################################### [100%]
   1:cloud-init             ########################################### [100%]
 ■動作確認インストールしたインスタンスからAMIを作成し、以下のようなUserDataを指定して起動してみました。 
無事にec2-userへの公開鍵登録と 指定したパッケージがインストールされていましたよ:)
#cloud-config
packages:
- httpd
- postfix
こんな事するならAmazon Linux使った方が(ryという突っ込みはご勘弁下さい:D