ایجاد تصویر خود با CentOS 5.9 خالص در ابر آمازون

همانطور که می دانید در ابر آمازون نمونه های مجازی بر اساس تصاویر راه اندازی می شوند (به اصطلاح AMI). آمازون تعداد زیادی از آنها را ارائه می دهد؛ همچنین می توانید از تصاویر عمومی تهیه شده توسط اشخاص ثالث استفاده کنید که البته ارائه دهنده ابر هیچ مسئولیتی در قبال آنها ندارد. اما گاهی اوقات شما نیاز به یک تصویر سیستم تمیز با پارامترهای لازم دارید که در لیست تصاویر نیست. سپس تنها راه این است که AMI خود را بسازید.

اسناد رسمی توضیح می دهد راه ایجاد یک AMI با پشتوانه فروشگاه نمونه. نقطه ضعف این روش این است که تصویر تمام شده نیز باید به یک AMI با پشتیبانی EBS تبدیل شود.

نحوه ایجاد AMI با پشتیبانی EBS خود در ابر آمازون بدون مراحل میانی در این مقاله مورد بحث قرار خواهد گرفت.

برنامه عملیاتی:

  • محیط را آماده کنید
  • یک سیستم تمیز نصب کنید و تنظیمات لازم را انجام دهید
  • یک عکس فوری از دیسک بگیرید
  • ثبت نام 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 گیگ برای ما می سازد. مهم: دیسک باید در همان منطقه نمونه باشد (در مورد ما 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
# نام فرآیند: ec2-get-ssh
# توضیحات: اعتبارنامه کلید عمومی AWS را برای کاربر EC2 ضبط کنید

#کتابخانه تابع منبع
. /etc/rc.d/init.d/functions

# پیکربندی شبکه منبع
[ -r /etc/sysconfig/network ] &&. /etc/sysconfig/network

# متغیرهای محیطی زیر را برای سیستم خود جایگزین کنید
صادرات PATH=:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin

# بررسی کنید که شبکه پیکربندی شده است
if [ "${NETWORKING}" = "نه" ]; سپس
echo "شبکه پیکربندی نشده است."
خروج 1
fi

شروع () {
اگر [! -d /root/.ssh ]; سپس
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
# کلید عمومی را از سرور ابرداده با استفاده از HTTP بازیابی کنید
حلقه -f 169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/my-public-key
اگر [$? -eq 0 ]; سپس
echo "EC2: بازیابی کلید عمومی از سرور ابرداده با استفاده از HTTP."
cat /tmp/my-public-key >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
rm /tmp/my-public-key
fi
}

متوقف کردن() {
echo "اینجا کاری برای انجام دادن نیست"
}

راه اندازی مجدد() {
متوقف کردن
شروع
}

# ببینید ما را چگونه صدا کردند.
مورد "$ 1" در
شروع)
شروع
;;
متوقف کردن)
متوقف کردن
;;
راه اندازی مجدد)
شروع دوباره
;;
*)
echo $"استفاده: $0 {شروع|توقف|راه اندازی مجدد}"
خروج 1
که C

از $ خارج می شوید؟
بیایید آن را اجرایی کنیم و به راه اندازی اضافه کنیم:

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 را با سیستم خود unmount کرده و 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 است. برای انجام این کار، فقط باید به بخش "Snapshots" در سرویس EC2 بروید، مورد مورد نیاز خود را انتخاب کنید (در مورد ما centos-snap است)، روی آن کلیک راست کرده و "Create Image from Snapshot" را انتخاب کنید.
سپس در پنجره ای که باز می شود باید تقریباً پارامترهای زیر را انتخاب کنید:

ایجاد تصویر خود با CentOS 5.9 خالص در ابر آمازون

شما می توانید به صورت زیر دریابید که کدام شناسه هسته را انتخاب کنید:

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

همین. اکنون می توانید نمونه ها را راه اندازی کنید.
به این ترتیب، به احتمال زیاد با هر توزیع لینوکس می توانید یک تصویر ایجاد کنید. حداقل، قطعاً Debian (استفاده از debootstrap برای نصب یک سیستم تمیز) و Rhel-family.

منبع: www.habr.com

اضافه کردن نظر