Amazon クラウドで純粋な CentOS 5.9 を使用して独自のイメージを作成する

ご存知のとおり、Amazon クラウドでは仮想インスタンスがイメージ (いわゆる AMI)。 Amazon が多数提供しているほか、サードパーティが用意した公開イメージを使用することもできますが、当然ながらクラウドプロバイダーは一切の責任を負いません。 ただし、イメージのリストにない、必要なパラメーターを備えたクリーンなシステム イメージが必要になる場合があります。 その場合、唯一の解決策は独自の AMI を作成することです。

公式ドキュメントには次のように説明されています プロセス 「インスタンスストアバックド AMI」を作成します。 このアプローチの欠点は、完成したイメージも「EBS-backed AMI」に変換する必要があることです。

この記事では、中間手順なしで Amazon クラウドに独自の EBS-backed AMI を作成する方法について説明します。

行動計画:

  • 環境を準備する
  • クリーンなシステムをインストールし、必要な設定を行う
  • ディスクのスナップショットを取得します
  • AMIを登録する

環境の準備

私たちの目的には、t1.micro であっても、あらゆる形状のあらゆるインスタンスが適しています。 CLI 経由で実行できます。

aws ec2 run-instances --image-id ami-1624987f --max-count 1 --min-count 1 --key-name mel --instance-type t1.micro

ebs-volume を作成しましょう。後でシステムをインストールします。

aws ec2 create-volume --availability-zone us-east-1a --size 10

このコマンドにより、10 Gb のディスクが作成されます。 重要: ディスクはインスタンスと同じゾーンに存在する必要があります (この例では us-east-1a)。
次に、ディスクをインスタンスに接続する必要があります。

aws ec2 attach-volume --instance-id i-2bc0925b --volume-id vol-08ab3079 --device /dev/xvdf

次に、ssh 経由でインスタンスにログインし、ディスクをフォーマットしてディレクトリにマウントしましょう。

mkfs.ext3 /dev/xvdf
mkdir /mnt/centos-image
mount /dev/xvdf /mnt/centos-image
cd !$

クリーンな Centos 5.9 のインストール

システムをインストールする前に、ディレクトリ ツリーを作成し、proc と sysfs をマウントし、最小限のデバイス セットを作成する必要があります。

mkdir centos-image/{boot,tmp,dev,sys,proc,etc,var}
mount -t proc none /mnt/centos-image/proc/
mount -t sysfs none /mnt/centos-image/sys/
for i in console null zero ; do /sbin/MAKEDEV -d /mnt/centos-image/dev -x $i ; done

yum と次の構成ファイルを使用してシステムをインストールします。
yum-centos.conf

[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
exclude=*-debuginfo
gpgcheck=0
obsoletes=1
reposdir=/dev/null

[base]
name=CentOS-5.9 - Base
mirrorlist=http://mirrorlist.centos.org/?release=5.9&arch=x86_64&repo=os
#baseurl=http://mirror.centos.org/centos/5.9/os/x86_64/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

[updates]
name=CentOS-5.9 - Updates
mirrorlist=http://mirrorlist.centos.org/?release=5.9&arch=x86_64&repo=updates
#baseurl=http://mirror.centos.org/centos/5.9/updates/x86_64/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

[extras]
name=CentOS-5.9 - Extras
mirrorlist=http://mirrorlist.centos.org/?release=5.9&arch=x86_64&repo=extras
#baseurl=http://mirror.centos.org/centos/5.9/extras/x86_64/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-5

[centosplus]
name=CentOS-5.9 - Plus
mirrorlist=http://mirrorlist.centos.org/?release=5.9&arch=x86_64&repo=centosplus
#baseurl=http://mirror.centos.org/centos/5.9/centosplus/x86_64/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-5

[contrib]
name=CentOS-5.9 - Contrib
mirrorlist=http://mirrorlist.centos.org/?release=5.9&arch=x86_64&repo=contrib
#baseurl=http://mirror.centos.org/centos/5.9/contrib/x86_64/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-5

yum -c ~/yum-centos.conf --installroot=/mnt/centos-image/ -y groupinstall Base

インストールプロセスが完了したら、同じ方法で必要なパッケージをインストールできます。

yum -c ~/yum-centos.conf --installroot=/mnt/centos-image/ install $packet_name

fstab を編集しましょう。

vi /mnt/centos-image

/dev/xvda1  /      ext3    defaults        0 0
none       /dev/pts  devpts  gid=5,mode=620  0 0
none       /dev/shm  tmpfs   defaults        0 0
none       /proc     proc    defaults        0 0
none       /sys      sysfs   defaults        0 0

CentOS 5.9 でも、xen をサポートするカーネルをインストールする必要があります。

yum -c ~/yum-centos.conf --installroot=/mnt/centos-image/ -y install kernel-xen

Grub をインストールします。

chroot /mnt/centos-image/ grub-install /dev/xvdf

新しい initrd を生成します。

chroot /mnt/centos-image/
cd boot/
mkinitrd --omit-scsi-modules --with=xennet --with=xenblk --fstab=/etc/fstab --preload=xenblk initrd-2.6.18-348.1.1.el5xen.img 2.6.18-348.1.1.el5xen

これらすべてのパラメータと新しい fstab を指定することが非常に重要です。指定しないとシステムが起動しません。
次に、grub 用の menu.lst ファイルを作成する必要があります。

default=0
timeout=5
hiddenmenu
title CentOS_5.9_(x86_64)
        root (hd0)
        kernel /boot/vmlinuz-2.6.18-348.1.1.el5xen ro root=/dev/xvda1
        initrd /boot/initrd-2.6.18-348.1.1.el5xen.img

ネットワークと sshd を設定しましょう。

vi etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes
DEVICE=eth0
BOOTPROTO=dhcp
TYPE=Ethernet
USERCTL=yes
PEERDNS=yes
IPV6INIT=no

vi etc/sysconfig/network
NETWORKING=yes

chroot /mnt/centos5img/ chkconfig --level 2345 network on

vi /mnt/centos5img/etc/ssh/sshd_config
...
UseDNS no
PermitRootLogin without-password

これにより、ネットワークが動作し、キーを使用してインスタンスにログインできるようになります。 ただし、キー自体を何らかの方法でインスタンスに転送する必要があります。 これは、キーを取得してインスタンスに保存するスクリプトを使用して実行できます。

vi /mnt/centos5img/etc/init.d/ec2-get-ssh

ec2-get-ssh#!/ bin / bashに
# chkconfig: 2345 95 20
# プロセス名: ec2-get-ssh
# 説明: EC2 ユーザーの AWS 公開キー認証情報を取得します

#ソース関数ライブラリ
。 /etc/rc.d/init.d/functions

# ソースネットワーク構成
[ -r /etc/sysconfig/network ] &&。 /etc/sysconfig/ネットワーク

# システムの次の環境変数を置き換えます
エクスポート PATH=:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin

# ネットワークが設定されていることを確認する
if [ "${NETWORKING}" = "いいえ" ]; それから
echo "ネットワークが設定されていません。"
1番出口
fi

start(){
もし [! -d /root/.ssh ]; それから
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
# HTTP を使用してメタデータ サーバーから公開キーを取得します
カール -f 169.254.169.254/最新/メタデータ/公開鍵/0/openssh-key > /tmp/私の公開鍵
もし[$? -eq 0 ]; それから
echo "EC2: HTTP を使用してメタデータ サーバーから公開キーを取得します。"
cat /tmp/my-public-key >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
rm /tmp/私の公開鍵
fi
}

やめる() {
エコー「ここでは何もすることはありません」
}

再起動() {
stop
start
}

# 私たちがどのように呼ばれたかを見てください。
ケース「$1」
開始)
start
;;
ストップ)
stop
;;
再起動してください)
再起動
;;
*)
echo $"使用法: $0 {開始|停止|再起動}"
1番出口
ESAC

$を終了しますか?
これを実行可能にしてスタートアップに追加しましょう。

chmod +x /mnt/centos-image/etc/init.d/ec2-get-ssh
/usr/sbin/chroot /mnt/centos-image/ /sbin/chkconfig --level 34 ec2-get-ssh on

Selinux を無効にするか、正しく設定することもお勧めします。 そうしないと、たとえばキーがインスタンスに保存されない可能性があります。
この時点で、システムのセットアップを中止できます。 クラウド上で実行できる純粋な CentOS がすでに用意されています。 残っているのは、システムで ebs ディスクをアンマウントし、ami を登録することだけです。

umount /mnt/centos-image/proc/
umount /mnt/centos-image/sys/
umount /mnt/centos-image/

AMI登録

ebs ディスクから ami を取得するには、まずディスクのスナップショットを取得する必要があります。

aws ec2 create-snapshot --volume-id vol-0b4bd07a --description centos-snap

ami を登録する最も簡単な方法は、AWS マネジメント コンソールを使用することです。 これを行うには、EC2 サービスの「スナップショット」セクションに移動し、必要なスナップショット (この場合は centos-snap) を選択し、それを右クリックして「スナップショットからイメージを作成」を選択するだけです。
次に、開いたウィンドウで、およそ次のパラメータを選択する必要があります。

Amazon クラウドで純粋な CentOS 5.9 を使用して独自のイメージを作成する

次のように、選択するカーネル ID を確認できます。

aws ec2 describe-images --owner amazon --region us-east-1 --output text | grep "/pv-grub-hd0.*-x86_64" | awk '{print $7}' | grep aki
aki-88aa75e1
aki-b4aa75dd

それだけです。 これでインスタンスを起動できるようになりました。
この方法では、ほとんどの場合、どの Linux ディストリビューションでもイメージを作成できます。 少なくとも、間違いなく Debian (debootstrap を使用してクリーン システムをインストールする) と Rhel ファミリです。

出所: habr.com

コメントを追加します