Membuat image Anda sendiri dengan CentOS 5.9 murni di cloud Amazon

Seperti yang Anda ketahui, di cloud Amazon, instans virtual diluncurkan berdasarkan gambar (yang disebut AMI). Amazon menyediakan banyak sekali; Anda juga dapat menggunakan gambar publik yang disiapkan oleh pihak ketiga, yang tentu saja tidak bertanggung jawab atas penyedia cloud. Namun terkadang Anda memerlukan image sistem yang bersih dengan parameter yang diperlukan, yang tidak ada dalam daftar image. Maka satu-satunya jalan keluar adalah membuat AMI sendiri.

Dokumentasi resmi menjelaskan jalan membuat β€œAMI yang didukung penyimpanan instans”. Kerugian dari pendekatan ini adalah gambar akhir juga perlu diubah menjadi β€œAMI yang didukung EBS”

Cara membuat AMI Anda sendiri yang didukung EBS di cloud Amazon tanpa langkah perantara akan dibahas dalam artikel ini.

Rencana Tindakan:

  • Mempersiapkan lingkungan
  • Instal sistem yang bersih dan buat pengaturan yang diperlukan
  • Ambil snapshot dari disk
  • Daftarkan AMI

Mempersiapkan Lingkungan

Untuk tujuan kami, instance apa pun dalam bentuk apa pun cocok, bahkan t1.micro. Anda dapat menjalankannya melalui CLI:

aws ec2 run-instances --image-id ami-1624987f --max-count 1 --min-count 1 --key-name mel --instance-type t1.micro

Mari kita buat ebs-volume, dimana kita akan menginstal sistem kita nanti:

aws ec2 create-volume --availability-zone us-east-1a --size 10

Perintah ini akan membuatkan disk 10 Gb untuk kita. Penting: disk harus berada di zona yang sama dengan instance (dalam kasus kami adalah us-east-1a).
Selanjutnya, Anda perlu melampirkan disk ke instance:

aws ec2 attach-volume --instance-id i-2bc0925b --volume-id vol-08ab3079 --device /dev/xvdf

Sekarang mari masuk ke instance melalui ssh, format disk dan pasang di direktori:

mkfs.ext3 /dev/xvdf
mkdir /mnt/centos-image
mount /dev/xvdf /mnt/centos-image
cd !$

Menginstal Centos 5.9 yang bersih

Sebelum menginstal sistem, Anda perlu membuat pohon direktori, memasang proc dan sysfs, dan membuat kumpulan perangkat minimum:

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

Kami akan menginstal sistem menggunakan yum dan file konfigurasi berikut:
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

Setelah menyelesaikan proses instalasi, Anda dapat menginstal paket apa pun yang diperlukan dengan cara yang sama:

yum -c ~/yum-centos.conf --installroot=/mnt/centos-image/ install $packet_name

Mari kita edit 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

Di CentOS 5.9 Anda masih perlu menginstal kernel dengan dukungan xen:

yum -c ~/yum-centos.conf --installroot=/mnt/centos-image/ -y install kernel-xen

Instal Grub:

chroot /mnt/centos-image/ grub-install /dev/xvdf

dan buat initrd baru:

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

Sangat penting untuk menentukan semua parameter ini dan fstab baru, jika tidak, sistem tidak akan bisa boot.
Selanjutnya Anda perlu membuat file menu.lst untuk 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

Mari konfigurasikan jaringan dan 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

Dengan demikian, kita akan mendapatkan jaringan yang berfungsi dan kemampuan untuk masuk ke instance menggunakan kunci. Namun kuncinya sendiri perlu ditransfer ke instance. Hal ini dapat dilakukan dengan menggunakan skrip yang akan mengambil kunci dan menyimpannya di instance:

vi /mnt/centos5img/etc/init.d/ec2-get-ssh

ec2-get-ssh#! / bin / bash
#chkconfig: 2345 95 20
# nama proses: ec2-get-ssh
# deskripsi: Ambil kredensial kunci publik AWS untuk pengguna EC2

#Perpustakaan fungsi sumber
. /etc/rc.d/init.d/functions

# Konfigurasi jaringan sumber
[ -r /etc/sysconfig/network ] &&. /etc/sysconfig/network

# Ganti variabel lingkungan berikut untuk sistem Anda
ekspor PATH=:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin

# Periksa apakah jaringan sudah dikonfigurasi
jika [ "${NETWORKING}" = "tidak" ]; Kemudian
echo "Jaringan tidak dikonfigurasi."
keluar 1
fi

Mulailah () {
jika [! -d /root/.ssh ]; Kemudian
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
# Ambil kunci publik dari server metadata menggunakan HTTP
keriting -f 169.254.169.254/terbaru/meta-data/kunci-publik/0/kunci-openssh > /tmp/kunci-publik-saya
jika [$? -persamaan 0 ]; Kemudian
echo "EC2: Ambil kunci publik dari server metadata menggunakan HTTP."
kucing /tmp/kunci-publik-saya >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
rm /tmp/kunci-publik-saya
fi
}

berhenti() {
gema "Tidak ada yang bisa dilakukan di sini"
}

mengulang kembali() {
berhenti
awal
}

# Lihat bagaimana kami dipanggil.
kasus "$ 1" dalam
Mulailah)
awal
;;
berhenti)
berhenti
;;
restart)
Restart
;;
*)
echo $"Penggunaan: $0 {mulai|berhenti|mulai ulang}"
keluar 1
esac

keluar $?
Mari kita membuatnya dapat dieksekusi dan menambahkannya ke startup:

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

Disarankan juga untuk menonaktifkan Selinux, atau mengkonfigurasinya dengan benar. Jika tidak, misalnya, kuncinya mungkin tidak disimpan di instance.
Pada titik ini Anda dapat berhenti menyiapkan sistem. Kami sudah memiliki CentOS murni yang siap dijalankan di cloud. Yang tersisa hanyalah meng-unmount disk ebs dengan sistem kami dan mendaftarkan ami.

umount /mnt/centos-image/proc/
umount /mnt/centos-image/sys/
umount /mnt/centos-image/

Pendaftaran AMI

Untuk mendapatkan ami dari disk ebs, Anda perlu mengambil snapshot disk terlebih dahulu:

aws ec2 create-snapshot --volume-id vol-0b4bd07a --description centos-snap

Cara termudah untuk mendaftarkan ami adalah melalui AWS Management Console. Untuk melakukan ini, Anda hanya perlu pergi ke bagian "Snapshots" di layanan EC2, pilih yang Anda perlukan (dalam kasus kami ini adalah centos-snap), klik kanan padanya dan pilih "Buat Gambar dari Snapshot"
Kemudian, di jendela yang terbuka, Anda perlu memilih kira-kira parameter berikut:

Membuat image Anda sendiri dengan CentOS 5.9 murni di cloud Amazon

Anda dapat mengetahui ID Kernel mana yang harus dipilih sebagai berikut:

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

Itu saja. Sekarang Anda dapat meluncurkan instance.
Dengan cara ini, kemungkinan besar Anda dapat membuat image dengan distribusi Linux apa pun. Setidaknya, pasti Debian (menggunakan debootstrap untuk menginstal sistem yang bersih) dan keluarga Rhel.

Sumber: www.habr.com

Tambah komentar