Як вядома, у воблаку Amazon віртуальныя інстансы запускаюцца на аснове вобразаў (так званыя
У афіцыйнай дакументацыі апісаны
Аб тым, як стварыць свой 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
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"
Затым, у якое адкрылася акне, трэба абраць прыкладна наступныя параметры:
Які 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