این راهنما یک "چنگال" به همین نام است مقاله در مورد CentOS 5.9، و ویژگی های سیستم عامل جدید را در نظر می گیرد. در حال حاضر هیچ تصویر رسمی Centos8 از centos.org در بازار AWS وجود ندارد.
همانطور که می دانید در ابر آمازون نمونه های مجازی بر اساس تصاویر راه اندازی می شوند (به اصطلاح AMI). آمازون تعداد زیادی از آنها را ارائه می دهد؛ همچنین می توانید از تصاویر عمومی تهیه شده توسط اشخاص ثالث استفاده کنید که البته ارائه دهنده ابر هیچ مسئولیتی در قبال آنها ندارد. اما گاهی اوقات شما نیاز به یک تصویر سیستم تمیز با پارامترهای لازم دارید که در لیست تصاویر نیست.
سپس تنها راه این است که AMI خود را بسازید.
اسناد رسمی توضیح می دهد راه ایجاد یک "AMI مورد حمایت فروشگاه".
نقطه ضعف این روش این است که تصویر تمام شده نیز باید به یک AMI با پشتیبانی EBS تبدیل شود. همچنین باید به Cockpit Image Builder اشاره کرد. به شما این امکان را می دهد که تصاویر دلخواه خود را ایجاد کنید CLI یا وب GUI حالت، اما زمانی که از قبل Centos 8 دارید.
نحوه ایجاد AMI با پشتیبانی EBS خود در ابر آمازون بدون مراحل میانی در این مقاله مورد بحث قرار خواهد گرفت.
برنامه عملیاتی
- محیط را آماده کنید
- یک سیستم تمیز نصب کنید و تنظیمات لازم را انجام دهید
- یک عکس فوری از دیسک بگیرید
- ثبت نام 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 ایجاد می کند که زیرشبکه مشخص شده به آن تعلق دارد. قرار است زیرشبکه عمومی باشد و SG 'default' همه چیز را اجازه می دهد.
حالا بیایید از طریق 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
.
سفارشی سازی فایل سیستم عامل
بیایید پیکربندی هایی برای شبکه، 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
اینجاست، در GRUB_CMDLINE_LINUX، که توصیه میکنم برای کسانی که هنوز از SELinux میترسند، selinux=0 را مشخص کنید.
بازسازی 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
پس از بارگذاری سیستم عامل، دستور 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}]'
همین. اکنون می توانید نمونه ها را راه اندازی کنید.
به این ترتیب، به احتمال زیاد با هر توزیع لینوکس می توانید یک تصویر ایجاد کنید. حداقل دقیقاً Debian (استفاده از debootstrap برای نصب یک سیستم تمیز) و خانواده RHEL.
بروزرسانی بر اساس درخواست خوانندگان این فرآیند می تواند خودکار باشد بستهبند، فقط خودکار. اینجا یک الگوی نمونه ارائه شده است.
منبع: www.habr.com