在亞馬遜雲端中使用純 CentOS 5.9 創建您自己的鏡像

大家知道,亞馬遜雲端中的虛擬執行個體是基於鏡像啟動的(所謂的 急性心肌梗死)。亞馬遜提供了大量的;您也可以使用第三方準備的公共鏡像,當然雲端提供者對此不承擔任何責任。但有時您需要一個具有必要參數的乾淨系統映像,而該映像不在映像清單中。那麼唯一的出路就是製作自己的 AMI。

官方文檔描述了 過程 建立「執行個體儲存支援的 AMI」。這種方法的缺點是完成的圖像還需要轉換為“EBS 支援的 AMI”

本文將討論如何在 Amazon 雲端中建立您自己的 EBS 支援的 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#!/斌/慶典
# 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

# 檢查網路是否配置
如果[“${NETWORKING}”=“否”];然後
echo “網路未配置。”
退出1
fi

開始(){
如果 [! -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 從元資料伺服器檢索公鑰。”
貓 /tmp/my-public-key >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
rm /tmp/我的公鑰
fi
}

停() {
echo“這裡沒什麼可做的”
}

重新開始() {
停止
開始
}

# 看看我們是如何被稱呼的。
案例“$1”
開始)
開始
;;
停止)
停止
;;
重新啟動)
重新開始
;;
*)
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),右鍵單擊它並選擇“從快照建立映像”
然後,在開啟的視窗中,您需要選擇大約以下參數:

在亞馬遜雲端中使用純 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 系列。

來源: www.habr.com

添加評論