Som ni vet, i Amazonas moln lanseras virtuella instanser baserade på bilder (de så kallade
Den officiella dokumentationen beskriver
Den här artikeln kommer att diskutera hur du skapar din egen EBS-stödda AMI i Amazons moln utan mellanliggande steg.
Handlingsplan:
- Förbered miljön
- Installera ett rent system och gör nödvändiga inställningar
- Ta en ögonblicksbild av disken
- Registrera AMI
Att förbereda miljön
För våra ändamål kommer alla instanser av vilken form som helst att vara lämpliga, även t1.micro. Du kan köra det via CLI:
aws ec2 run-instances --image-id ami-1624987f --max-count 1 --min-count 1 --key-name mel --instance-type t1.micro
Låt oss skapa ebs-volym, där vi kommer att installera vårt system senare:
aws ec2 create-volume --availability-zone us-east-1a --size 10
Detta kommando kommer att göra en 10 Gb disk åt oss. Viktigt: disken måste vara i samma zon som instansen (i vårt fall är det us-east-1a).
Därefter måste du bifoga disken till instansen:
aws ec2 attach-volume --instance-id i-2bc0925b --volume-id vol-08ab3079 --device /dev/xvdf
Låt oss nu logga in på instansen via ssh, formatera disken och montera den i katalogen:
mkfs.ext3 /dev/xvdf
mkdir /mnt/centos-image
mount /dev/xvdf /mnt/centos-image
cd !$
Installera ren Centos 5.9
Innan du installerar systemet måste du skapa ett katalogträd, montera proc och sysfs och skapa en minsta uppsättning enheter:
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
Vi kommer att installera systemet med yum och följande konfigurationsfil:
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
När du har slutfört installationsprocessen kan du installera alla nödvändiga paket på samma sätt:
yum -c ~/yum-centos.conf --installroot=/mnt/centos-image/ install $packet_name
Låt oss redigera 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
I CentOS 5.9 behöver du fortfarande installera en kärna med xen-stöd:
yum -c ~/yum-centos.conf --installroot=/mnt/centos-image/ -y install kernel-xen
Installera Grub:
chroot /mnt/centos-image/ grub-install /dev/xvdf
och generera en ny 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
Det är mycket viktigt att specificera alla dessa parametrar och en ny fstab, annars kommer systemet inte att starta.
Därefter måste du skapa en menu.lst-fil för 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
Låt oss konfigurera nätverket och 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
Därmed kommer vi att få ett fungerande nätverk och möjlighet att logga in i instansen med hjälp av nycklarna. Men själva nyckeln måste på något sätt överföras till instansen. Detta kan göras med ett skript som tar nyckeln och sparar den i instansen:
vi /mnt/centos5img/etc/init.d/ec2-get-ssh
ec2-get-ssh#! / Bin / bash
# chkconfig: 2345 95 20
# processname: ec2-get-ssh
# beskrivning: Fånga inloggningsuppgifter för AWS publika nyckel för EC2-användare
#Källfunktionsbibliotek
. /etc/rc.d/init.d/functions
# Källnätverkskonfiguration
[ -r /etc/sysconfig/network ] &&. /etc/sysconfig/network
# Byt ut följande miljövariabler för ditt system
export PATH=:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
# Kontrollera att nätverket är konfigurerat
if [ "${NETWORKING}" = "nej" ]; sedan
echo "Nätverk är inte konfigurerat."
avsluta 1
fi
start () {
om [! -d /root/.ssh ]; sedan
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
# Hämta offentlig nyckel från metadataserver med HTTP
curl -f
om [$? -eq 0]; sedan
echo "EC2: Hämta publik nyckel från metadataserver med HTTP."
cat /tmp/my-public-key >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
rm /tmp/my-public-key
fi
}
sluta() {
echo "Inget att göra här"
}
omstart() {
stoppa
starta
}
# Se hur vi kallades.
fallet "$1" in
Start)
starta
;;
sluta)
stoppa
;;
omstart)
omstart
;;
*)
echo $"Användning: $0 {start|stopp|omstart}"
avsluta 1
att C
avsluta $?
Låt oss göra det körbart och lägga till det vid start:
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
Det är också lämpligt att inaktivera Selinux, eller konfigurera det korrekt. Annars kan till exempel nyckeln inte sparas på instansen.
Vid det här laget kan du sluta konfigurera systemet. Vi har redan rent CentOS redo att köras i molnet. Allt som återstår är att avmontera ebs-skivan med vårt system och registrera ami.
umount /mnt/centos-image/proc/
umount /mnt/centos-image/sys/
umount /mnt/centos-image/
AMI-registrering
För att hämta ami från en ebs-skiva måste du först ta en ögonblicksbild av skivan:
aws ec2 create-snapshot --volume-id vol-0b4bd07a --description centos-snap
Det enklaste sättet att registrera ami är genom AWS Management Console. För att göra detta behöver du bara gå till avsnittet "Snapshots" i EC2-tjänsten, välj den du behöver (i vårt fall är det centos-snap), högerklicka på den och välj "Skapa bild från Snapshot"
Sedan, i fönstret som öppnas, måste du välja ungefär följande parametrar:
Du kan ta reda på vilket kärn-ID du ska välja så här:
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
Det är allt. Nu kan du starta instanser.
På så sätt kan du skapa en bild, med största sannolikhet, med vilken Linux-distribution som helst. Åtminstone definitivt Debian (använder debootstrap för att installera ett rent system) och Rhel-familjen.
Källa: will.com