Как известно, в облаке Amazon виртуальные экземпляры запускаются на основе образов (так называемые АМИ ).
Amazon предоставляет их большое количество; вы также можете использовать публичные изображения, подготовленные третьими лицами, за что провайдер облака, естественно, не несет никакой ответственности.
Но иногда вам нужен чистый образ системы с нужными параметрами, которого нет в списке образов.
Тогда единственный выход — сделать свой AMI. В официальной документации описано способ создание «AMI, поддерживаемого хранилищем экземпляров».
Недостаток этого подхода заключается в том, что готовый образ также необходимо будет преобразовать в «AMI с поддержкой EBS».
В этой статье будет обсуждаться, как создать собственный AMI на базе EBS в облаке Amazon без промежуточных шагов.
План Действий:
- Подготовьте окружающую среду
- Установите чистую систему и произведите необходимые настройки
- Сделать снимок диска
- Зарегистрировать АМИ
Подготовка окружающей среды
Для наших целей подойдет любой экземпляр любой формы, даже t1.micro. Вы можете запустить его через CLI:Создадим ebs-том, куда позже установим нашу систему:aws ec2 run-instances --image-id ami-1624987f --max-count 1 --min-count 1 --key-name mel --instance-type t1.micro
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 и следующий файл конфигурации: ням-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
Установите Груб:
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-получить-ssh #!/бин/баш
# chkconfig: 2345 95 20
# имя процесса: ec2-get-ssh
# описание: Захват учетных данных открытого ключа AWS для пользователя EC2.
#Исходная библиотека функций
.
/etc/rc.d/init.d/функции # Исходная сетевая конфигурация [ -r /etc/sysconfig/сеть ] &&.
/etc/sysconfig/сеть # Замените следующие переменные среды для вашей системы экспортировать PATH=:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin # Проверьте, настроена ли сеть if [ "${NETWORKING}" = "нет"]; затем echo «Сеть не настроена».
выход 1 фи начинать() { если [! -d /root/.
ssh]; затем mkdir -p /root/.
ssh chmod 700 /root/.
ssh фи # Получить открытый ключ с сервера метаданных с помощью HTTP локон -f 169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/мой-открытый ключ если [$? -экв 0 ]; затем echo «EC2: получить открытый ключ с сервера метаданных с помощью HTTP».
cat /tmp/мой-публичный-ключ > > /root/.
ssh/authorized_keys chmod 600 /root/.
ssh/authorized_keys rm /tmp/мой-открытый ключ фи } останавливаться() { эхо "Здесь нечего делать" } перезапуск() { останавливаться начинать } # Посмотрите, как нас звали.
случай "$1" в
начинать)
начинать
;;
останавливаться)
останавливаться
;;
перезапуск)
перезапуск
;;
*)
echo $"Использование: $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-диска, сначала нужно сделать снимок диска: aws ec2 create-snapshot --volume-id vol-0b4bd07a --description centos-snap
Самый простой способ зарегистрировать ami — через Консоль управления AWS. Для этого вам просто нужно зайти в раздел «Снимки» в сервисе EC2, выбрать нужный (в нашем случае это centos-snap), нажать на него правой кнопкой мыши и выбрать «Создать образ из снимка» Затем в открывшемся окне нужно выбрать примерно следующие параметры:
Узнать, какой 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. Теги: #aws #ebs #centos #ami
-
Палиндром
19 Oct, 24 -
Как Упростить Публикацию В Блоге
19 Oct, 24 -
Как Использовать Настроение
19 Oct, 24 -
Небольшой Тест На Ваши Знания Js.
19 Oct, 24 -
Paypal X: Будьте Готовы К Новому Paypal
19 Oct, 24 -
Utf-Преобразование
19 Oct, 24 -
Расширенный Чат На Node.js
19 Oct, 24