Skapa din egen bild med ren CentOS 5.9 i Amazons moln

Som ni vet, i Amazonas moln lanseras virtuella instanser baserade på bilder (de så kallade AMI). Amazon tillhandahåller ett stort antal av dem; du kan också använda offentliga bilder som tagits fram av tredje part, för vilka molnleverantören naturligtvis inte bär något ansvar. Men ibland behöver du en ren systembild med nödvändiga parametrar, som inte finns i listan över bilder. Då är den enda utvägen att göra din egen AMI.

Den officiella dokumentationen beskriver sätt att skapa en "instansbutiksstödd AMI". Nackdelen med detta tillvägagångssätt är att den färdiga bilden också måste konverteras till en "EBS-stödd AMI"

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 169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/my-public-key
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:

Skapa din egen bild med ren CentOS 5.9 i Amazons moln

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

Lägg en kommentar