Стварэнне сваёй выявы з чыстым CentOS 5.9 у воблаку Amazon

Як вядома, у воблаку Amazon віртуальныя інстансы запускаюцца на аснове вобразаў (так званыя AMI). Amazon падае вялікую іх колькасць, таксама можна выкарыстоўваць публічныя выявы, падрыхтаваныя іншымі арганізацыямі, за якія хмарны правайдэр, натуральна, ніякай адказнасці не нясе. Але часам патрэбен выява чыстай сістэмы з патрэбнымі параметрамі, якога няма ў спісе выяў. Тады адзінае выйсце – зрабіць свой AMI.

У афіцыйнай дакументацыі апісаны спосаб стварэння "instance store-backed AMI". Мінус такога падыходу заключаецца ў тым, што гатовы вобраз трэба будзе яшчэ і сканвертаваць у "EBS-backed AMI".

Аб тым, як стварыць свой EBS-backed AMI у воблаку Amazon без прамежкавых крокаў, пайдзе прамову ў гэтым артыкуле.

План дзеянняў:

  • Падрыхтаваць асяроддзе
  • Усталяваць чыстую сістэму, зрабіць неабходныя наладкі
  • Зрабіць snapshot (злепак) дыска
  • Зарэгістраваць 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 Гб. Важна: дыск павінен быць у той жа зоне, што і інстанс (у нашым выпадку гэта 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, інакш сістэма не загрузіцца.
Далей трэба стварыць файл menu.lst для grub:

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 / Баш
# chkconfig: 2345 95 20
# processname: ec2-get-ssh
# description: Capture AWS Public key credentials for EC2 user

# Source function library
. /etc/rc.d/init.d/functions

# Source networking configuration
[ -r /etc/sysconfig/network ] &&. /etc/sysconfig/network

# Replace the following environment variables for your system
export PATH=:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin

# Check that networking is configured
if [ "${NETWORKING}" = "no"]; then
echo "Networking is not configured."
выхад 1
fi

start () {
if [! -d /root/.ssh]; then
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
# Retrieve public key from metadata server using HTTP
curl -f 169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/my-public-key
if [ $? -eq 0]; then
echo "EC2: Retrieve public key from metadata server using HTTP."
cat /tmp/my-public-key >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
rm /tmp/my-public-key
fi
}

stop() {
echo "Не думайце"
}

restart() {
спыніць
Пачатак
}

# See how we were called.
case "$1" in
пачатак)
Пачатак
;;
спыніцца)
спыніць
;;
перазапуск)
перазапуск
;;
*)
echo $«Usage: $0 {start|stop|restart}»
выхад 1
эсак

выйсьці $?
Зробім яго выкананым і дадамо ў аўтазагрузку:

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 Management Console. Для гэтага трэба проста ў сэрвісе EC2 перайсці ў раздзел "Snapshots", выбраць патрэбны (у нашым выпадку гэта centos-snap), клікнуць на яго правай кнопкай і выбраць "Create Image from Snapshot"
Затым, у якое адкрылася акне, трэба абраць прыкладна наступныя параметры:

Стварэнне сваёй выявы з чыстым CentOS 5.9 у воблаку Amazon

Які Kernel 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

Дадаць каментар