Buat gambar Anda dengan CentOS 8.1 murni di cloud Amazon

Panduan ini adalah sebuah garpu dari CentOS 5.9 artikel dari nama yang sama , dan memperhitungkan fitur dari OS baru. Saat ini tidak ada gambar Centos8 resmi dari centos.org di AWS Marketplace.


Seperti yang Anda ketahui, di cloud Amazon, instance virtual diluncurkan berdasarkan gambar (yang disebut AMI ). Amazon menyediakan sejumlah besar dari mereka, Anda juga dapat menggunakan gambar publik yang disiapkan oleh pihak ketiga, di mana penyedia cloud, tentu saja, tidak bertanggung jawab. Tetapi kadang-kadang Anda membutuhkan gambar dari sistem yang bersih dengan parameter yang diperlukan, yang tidak ada dalam daftar gambar.


Maka satu-satunya jalan keluar adalah membuat AMI Anda.


Dokumentasi resmi menjelaskan cara membuat "instance AMI yang didukung toko."


Kerugian dari pendekatan ini adalah bahwa gambar yang sudah jadi juga perlu dikonversi ke AMI yang didukung EBS. Yang juga perlu diperhatikan adalah Cockpit Image Builder. Ini akan memungkinkan Anda untuk membuat gambar khusus dalam mode CLI atau WEB GUI , tetapi ketika Anda sudah memiliki Centos 8.


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


Rencana aksi


  • Persiapkan lingkungan
  • Instal sistem yang bersih, buat pengaturan yang diperlukan
  • Buat snapshot (snapshot) dari disk
  • Daftarkan AMI

Persiapan lingkungan


Untuk tujuan kami, setiap instance resmi Centos 7 dalam bentuk apa pun cocok, setidaknya t2.micro. Anda dapat menjalankannya melalui 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, subnet-id. , , 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 169.254 AWS 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/# \0/" $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=0, 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

, 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


ebs- ami, :


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


UPDATE . Packer, . .


All Articles