قم بإنشاء صورتك الخاصة باستخدام CentOS 5.9 النقي في سحابة Amazon

كما تعلمون، يتم إطلاق المثيلات الافتراضية في Amazon Cloud بناءً على الصور (ما يسمى AMI). توفر أمازون عددًا كبيرًا منها، ويمكنك أيضًا استخدام الصور العامة التي أعدتها جهات خارجية، والتي لا يتحمل مزود الخدمة السحابية أي مسؤولية عنها بالطبع. لكن في بعض الأحيان تحتاج إلى صورة نظام نظيفة تحتوي على المعلمات الضرورية، وهي غير موجودة في قائمة الصور. ثم السبيل الوحيد للخروج هو إنشاء AMI الخاص بك.

توضح الوثائق الرسمية طريق إنشاء "AMI المدعوم من المتجر". عيب هذا الأسلوب هو أن الصورة النهائية ستحتاج أيضًا إلى تحويلها إلى "AMI مدعومة من EBS"

ستتم مناقشة كيفية إنشاء AMI المدعومة من EBS في سحابة Amazon دون خطوات وسيطة في هذه المقالة.

خطة العمل:

  • تحضير البيئة
  • قم بتثبيت نظام نظيف وقم بإجراء الإعدادات اللازمة
  • خذ لقطة من القرص
  • سجل 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، حيث سنقوم بتثبيت نظامنا لاحقًا:

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 وملف التكوين التالي:
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-get-ssh#! / بن / باش
# تشككونفيغ: 2345 95 20
# اسم العملية: ec2-get-ssh
# الوصف: التقط بيانات اعتماد المفتاح العام لـ AWS لمستخدم EC2

#مكتبة الوظائف المصدر
. /etc/rc.d/init.d/functions

# تكوين الشبكة المصدر
[ -r /etc/sysconfig/network ] &&. /etc/sysconfig/network

# استبدل متغيرات البيئة التالية لنظامك
مسار التصدير=:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin

# تأكد من تكوين الشبكة
إذا [ "${NETWORKING}" = "لا" ]; ثم
صدى "لم يتم تكوين الشبكة."
خروج 1
fi

البداية () {
لو [! -d /root/.ssh ]; ثم
مكدير -p /root/.ssh
شمود 700 /جذر/.ssh
fi
# استرداد المفتاح العام من خادم البيانات الوصفية باستخدام HTTP
حليقة -f 169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/my-public-key
إذا [$؟ -مكافئ 0 ]; ثم
صدى "EC2: استرداد المفتاح العام من خادم بيانات التعريف باستخدام HTTP."
cat /tmp/my-public-key >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
rm /tmp/my-public-key
fi
}

قف() {
صدى "لا يوجد شيء للقيام به هنا"
}

إعادة تشغيل() {
توقف
بداية
}

#انظر كيف تم استدعاؤنا.
حالة "$ 1" في
بدء)
بداية
;;
قف)
توقف
;;
إعادة التشغيل)
إعادة تشغيل
;;
*)
صدى $"الاستخدام: $0 {بدء|إيقاف|إعادة تشغيل}"
خروج 1
ESAC

خروج $؟
لنجعله قابلاً للتنفيذ ونضيفه إلى بدء التشغيل:

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

للحصول على ami من قرص ebs، عليك أولاً التقاط لقطة من القرص:

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

أسهل طريقة لتسجيل ami هي من خلال وحدة الإدارة في AWS. للقيام بذلك، ما عليك سوى الانتقال إلى قسم "اللقطات" في خدمة EC2، وتحديد القسم الذي تحتاجه (في حالتنا هو Centos-snap)، والنقر بزر الماوس الأيمن عليه وتحديد "إنشاء صورة من لقطة"
بعد ذلك، في النافذة التي تفتح، تحتاج إلى تحديد المعلمات التالية تقريبًا:

قم بإنشاء صورتك الخاصة باستخدام CentOS 5.9 النقي في سحابة Amazon

يمكنك معرفة معرف Kernel الذي يجب اختياره على النحو التالي:

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-family.

المصدر: www.habr.com

إضافة تعليق