สร้างอิมเมจของคุณเองด้วย CentOS 8.1 ล้วนๆ ในระบบคลาวด์ของ Amazon

คู่มือนี้เป็นฉบับแยกที่มีชื่อเดียวกัน บทความ เกี่ยวกับ CentOS 5.9 และคำนึงถึงฟีเจอร์ของระบบปฏิบัติการใหม่ ปัจจุบันยังไม่มีภาพ CentOS 8 อย่างเป็นทางการจาก centos.org บน AWS Marketplace

ดังที่คุณทราบ อินสแตนซ์เสมือนบนคลาวด์ของ Amazon จะเปิดตัวตามรูปภาพ (ที่เรียกว่า AMI) Amazon มีให้เลือกมากมาย และคุณยังสามารถใช้รูปภาพสาธารณะที่จัดทำโดยองค์กรภายนอกได้ ซึ่งแน่นอนว่าผู้ให้บริการคลาวด์จะไม่รับผิดชอบใดๆ อย่างไรก็ตาม บางครั้งคุณอาจต้องการรูปภาพระบบที่สะอาดพร้อมพารามิเตอร์ที่จำเป็นซึ่งไม่มีอยู่ในรายการรูปภาพ

ทางออกเดียวคือการสร้าง AMI ของคุณเอง

เอกสารอย่างเป็นทางการอธิบาย วิธีการของ การสร้าง "AMI ที่ได้รับการสนับสนุนจากที่เก็บข้อมูลอินสแตนซ์"

ข้อเสียของวิธีนี้คือภาพสำเร็จรูปจะต้องถูกแปลงเป็น "EBS-backed AMI" ด้วย Cockpit Image Builder ก็น่าสนใจเช่นกัน ช่วยให้คุณสร้างภาพแบบกำหนดเองได้ CLI หรือเว็บ GUI โหมดแต่เมื่อคุณมี Centos 8 แล้ว

วิธีสร้าง AMI ที่สนับสนุน EBS ของคุณเองในระบบคลาวด์ของ Amazon โดยไม่มีขั้นตอนกลางจะกล่าวถึงในบทความนี้

แผนปฏิบัติการ

  • เตรียมสิ่งแวดล้อม
  • ติดตั้งระบบที่สะอาดและทำการตั้งค่าที่จำเป็น
  • ถ่ายภาพสแนปชอตของดิสก์
  • ลงทะเบียน AMI

การเตรียมสิ่งแวดล้อม

ใครก็ได้ที่จะทำเพื่อจุดประสงค์ของเรา อินสแตนซ์ CentOS 7 อย่างเป็นทางการ รูปร่างใดก็ได้ แม้แต่ t2.micro คุณสามารถเปิดใช้งานผ่าน CLI ได้:

aws ec2 run-instances 
  --image-id ami-4bf3d731 
  --region us-east-1 
  --key-name alpha 
  --instance-type t2.micro 
  --subnet-id subnet-240a8618 
  --associate-public-ip-address 
  --block-device-mappings DeviceName=/dev/sda1,Ebs={VolumeSize=8} 
  --block-device-mappings DeviceName=/dev/sdb,Ebs={VolumeSize=4}

คำสั่งนี้จะปรับใช้อินสแตนซ์ไปยัง VPC ที่เชื่อมโยงกับ ID ซับเน็ตที่ระบุ โดยถือว่าซับเน็ตนั้นเป็นแบบสาธารณะ และ SG 'เริ่มต้น' อนุญาตให้เข้าถึงได้ทั้งหมด

ตอนนี้ให้เราเข้าสู่ระบบอินสแตนซ์ผ่าน ssh อัปเดตระบบและติดตั้ง dnf และรีบูต:

sudo yum update -y && sudo yum install -y dnf && sudo reboot

การดำเนินการต่อไปทั้งหมดจะดำเนินการตั้งแต่ root.

การติดตั้ง Centos 8.1 ใหม่ทั้งหมด

การแบ่งพาร์ติชันระบบไฟล์และการติดตั้งพาร์ติชัน

DEVICE=/dev/xvdb
ROOTFS=/rootfs
parted -s ${DEVICE} mktable gpt
parted -s ${DEVICE} mkpart primary ext2 1 2
parted -s ${DEVICE} set 1 bios_grub on
parted -s ${DEVICE} mkpart primary xfs 2 100%

mkfs.xfs -L root ${DEVICE}2
mkdir -p $ROOTFS
mount ${DEVICE}2 $ROOTFS

mkdir $ROOTFS/{proc,sys,dev,run}
mount --bind /proc $ROOTFS/proc
mount --bind /sys $ROOTFS/sys
mount --bind /dev $ROOTFS/dev
mount --bind /run $ROOTFS/run

การสร้างไดเร็กทอรีทรี

ระบบ RPM ช่วยให้คุณเตรียมไดเร็กทอรีทรีสำหรับระบบปฏิบัติการในอนาคตของคุณได้อย่างรวดเร็วและง่ายดาย:

PKGSURL=http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages
rpm --root=$ROOTFS --initdb
rpm --root=$ROOTFS -ivh 
  $PKGSURL/centos-release-8.1-1.1911.0.8.el8.x86_64.rpm 
  $PKGSURL/centos-gpg-keys-8.1-1.1911.0.8.el8.noarch.rpm 
  $PKGSURL/centos-repos-8.1-1.1911.0.8.el8.x86_64.rpm

dnf --installroot=$ROOTFS --nogpgcheck --setopt=install_weak_deps=False 
   -y install audit authselect basesystem bash biosdevname coreutils 
   cronie curl dnf dnf-plugins-core dnf-plugin-spacewalk dracut-config-generic 
   dracut-config-rescue e2fsprogs filesystem firewalld glibc grub2 grubby hostname 
   initscripts iproute iprutils iputils irqbalance kbd kernel kernel-tools 
   kexec-tools less linux-firmware lshw lsscsi ncurses network-scripts 
   openssh-clients openssh-server passwd plymouth policycoreutils prefixdevname 
   procps-ng  rng-tools rootfiles rpm rsyslog selinux-policy-targeted setup 
   shadow-utils sssd-kcm sudo systemd util-linux vim-minimal xfsprogs 
   chrony cloud-init 

ฉันคิดว่าจะเป็นการดีที่สุดที่จะรันคำสั่งสุดท้ายด้วยวิธีนี้ โดยติดตั้งแพ็คเกจเฉพาะ และอย่าลืมละเว้นแพ็คเกจที่แนะนำ

หากคุณต้องการคุณสามารถใช้สิ่งนี้:

dnf --installroot=$ROOTFS groupinstall base core 
    --excludepkgs "NetworkManager*" 
     -e "i*-firmware"

В yum ไม่ --excludepkgsและก่อนหน้านี้จำเป็นต้องติดตั้งกลุ่มและลบแพ็กเกจ

สามารถดูรายการแพ็กเกจและกลุ่มที่ขึ้นอยู่กับแพ็กเกจได้ด้วยคำสั่ง dnf group info core สำหรับกลุ่ม core.

การปรับแต่งไฟล์ OS

มาสร้างการกำหนดค่าสำหรับเครือข่าย fstab, grub2 และใช้ที่อยู่ภายใน AWS 169.254 สำหรับ DNS และ NTP กัน

cat > $ROOTFS/etc/resolv.conf << HABR
nameserver 169.254.169.253
HABR

cat > $ROOTFS/etc/sysconfig/network << HABR
NETWORKING=yes
NOZEROCONF=yes
HABR

cat > $ROOTFS/etc/sysconfig/network-scripts/ifcfg-eth0  << HABR
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
HABR

cat > $ROOTFS/etc/fstab << HABR
LABEL=root / xfs defaults,relatime 1 1
HABR

sed -i  "s/cloud-user/centos/" $ROOTFS/etc/cloud/cloud.cfg
echo "server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4" >> $ROOTFS/etc/chrony.conf
sed -i "/^pool /d" $ROOTFS/etc/chrony.conf
sed -i "s/^AcceptEnv/# /" $ROOTFS/etc/ssh/sshd_config

cat > $ROOTFS/etc/default/grub << HABR
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto console=ttyS0,115200n8 console=tty0 net.ifnames=0 biosdevname=0"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
HABR

ฉันขอแนะนำให้ระบุ selinux=0 ใน GRUB_CMDLINE_LINUX สำหรับผู้ที่ยังคงกลัว SELinux

กำลังสร้าง initramfs ใหม่ใน chroot

หลังจากแก้ไขไฟล์ grub และ fstab แล้ว คุณต้องสร้างใหม่
เรากำลังดำเนินการอัปเดต:

KERNEL=$(ls $ROOTFS/lib/modules/) 
chroot $ROOTFS dracut -f -v /boot/initramfs-$KERNEL.img $KERNEL
chroot $ROOTFS grub2-mkconfig -o /boot/grub2/grub.cfg
chroot $ROOTFS grub2-install $DEVICE
chroot $ROOTFS update-crypto-policies --set FUTURE

ที่นี่ update-crypto-policies — ทางเลือก สำหรับคนหวาดระแวง 🙂

สำหรับการ "ขาย" สามารถทำได้ดังนี้:

chroot $ROOTFS fips-mode-setup --enable
chroot $ROOTFS grub2-mkconfig -o /boot/grub2/grub.cfg
chroot $ROOTFS grub2-install $DEVICE

หลังจากโหลด OS แล้ว คำสั่ง update-crypto-policies --show จะออก FIPS

การสตาร์ทอัตโนมัติและการทำความสะอาดขยะ

chroot $ROOTFS systemctl enable network.service
chroot $ROOTFS systemctl enable sshd.service
chroot $ROOTFS systemctl enable cloud-init.service
chroot $ROOTFS systemctl mask tmp.mount
dnf --installroot=$ROOTFS clean all
truncate -c -s 0 $ROOTFS/var/log/*.log
rm -rf var/lib/dnf/*
touch $ROOTFS/.autorelabel

autorelabel — จำเป็นต้องตั้งค่าบริบท SELinux ของไฟล์โดยอัตโนมัติเมื่อบูตครั้งแรก

ตอนนี้เรามาถอดดิสก์ออก:

sync
umount $ROOTFS/{proc,sys,dev,run}
umount $ROOTFS

การลงทะเบียน AMI

หากต้องการรับ ami จากดิสก์ ebs คุณต้องถ่ายภาพสแน็ปช็อตของดิสก์ก่อน:

aws ec2 create-snapshot 
    --volume-id vol-09f26eba4c50da110  --region us-east-1 
    --description 'centos-release-8.1-1.1911.0.8 4.18.0-147.5.1 01'

คุณจะต้องรอสักครู่ เรามาตรวจสอบสถานะโดยใช้ SnapshotId ที่เราได้รับกัน:

aws ec2   describe-snapshots  --region us-east-1 --snapshot-ids snap-0b665542fc59e58ed

เมื่อเราได้รับมัน "State": "completed"คุณสามารถลงทะเบียน AMI และเผยแพร่สู่สาธารณะได้:

aws ec2 register-image 
    --region us-east-1 
    --name 'CentOS-8.1-1.1911.0.8-minimal' 
    --description 'centos-release-8.1-1.1911.0.8 4.18.0-147.5.1 01' 
    --virtualization-type hvm --root-device-name /dev/sda1 
    --block-device-mappings '[{"DeviceName":"/dev/sda1","Ebs": { "SnapshotId": "snap-0b665542fc59e58ed", "VolumeSize":4,  "DeleteOnTermination": true, "VolumeType": "gp2"}}]' 
    --architecture x86_64 --sriov-net-support simple --ena-support

aws ec2 modify-image-attribute 
    --region us-east-1 
    --image-id ami-011ed2a37dc89e206 
    --launch-permission 'Add=[{Group=all}]'

นั่นคือทั้งหมดที่ ตอนนี้คุณสามารถเปิดใช้งานอินสแตนซ์ได้แล้ว

คุณสามารถสร้างอิมเมจของระบบปฏิบัติการ Linux ใดๆ ก็ได้ด้วยวิธีนี้ อย่างน้อย Debian (ใช้ debootstrap เพื่อติดตั้งระบบใหม่) และตระกูล RHEL ก็ได้รับการรองรับอย่างแน่นอน

อัพเดท ตามคำขอของผู้อ่าน กระบวนการนี้สามารถดำเนินการโดยอัตโนมัติได้ เครื่องบรรจุหีบห่อ, มีเพียงระบบอัตโนมัติเท่านั้น ที่นี่ มีการนำเสนอเทมเพลตตัวอย่าง

ที่มา: will.com

เพิ่มความคิดเห็น