ΠΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, Π² ΠΎΠ±Π»Π°ΠΊΠ΅ 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 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, ΠΈΠ½Π°ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ Π·Π°Π³ΡΡΠ·ΠΈΡΡΡ.
ΠΠ°Π»Π΅Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» 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/bash
# 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.Β»
exit 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 Β«Nothing to do hereΒ»
}
restart() {
stop
start
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $Β«Usage: $0 {start|stop|restart}Β»
exit 1
esac
exit $?
Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΌ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΡ:
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