ื™ืฆื™ืจืช ืชืžื•ื ื” ืžืฉืœืš ืขื CentOS 8.1 ื˜ื”ื•ืจ ื‘ืขื ืŸ ืืžื–ื•ืŸ

ืžื“ืจื™ืš ื–ื” ื”ื•ื "ืžื–ืœื’" ื‘ืขืœ ืื•ืชื• ืฉื ืžืืžืจื™ื ืขืœ CentOS 5.9, ื•ืœื•ืงื— ื‘ื—ืฉื‘ื•ืŸ ืืช ื”ืชื›ื•ื ื•ืช ืฉืœ ืžืขืจื›ืช ื”ื”ืคืขืœื” ื”ื—ื“ืฉื”. ื›ืจื’ืข ืื™ืŸ ืชืžื•ื ื” ืจืฉืžื™ืช ืฉืœ Centos8 ืž-centos.org ื‘-AWS Marketplace.

ื›ืคื™ ืฉืืชื” ื™ื•ื“ืข, ื‘ืขื ืŸ ืืžื–ื•ืŸ ืžื•ืคืขืœื™ื ืžื•ืคืขื™ื ื•ื™ืจื˜ื•ืืœื™ื™ื ื”ืžื‘ื•ืกืกื™ื ืขืœ ืชืžื•ื ื•ืช (ืžื” ืฉื ืงืจื ืขืžื™). ืืžื–ื•ืŸ ืžืกืคืงืช ืžืกืคืจ ื’ื“ื•ืœ ืžื”ื; ื ื™ืชืŸ ื’ื ืœื”ืฉืชืžืฉ ื‘ืชืžื•ื ื•ืช ืฆื™ื‘ื•ืจื™ื•ืช ืฉื”ื•ื›ื ื• ืขืœ ื™ื“ื™ ืฆื“ื“ื™ื ืฉืœื™ืฉื™ื™ื, ืฉืกืคืง ื”ืขื ืŸ ื›ืžื•ื‘ืŸ ืื™ื ื• ื ื•ืฉื ื‘ืื—ืจื™ื•ืช ื›ืœืฉื”ื™. ืื‘ืœ ืœืคืขืžื™ื ืฆืจื™ืš ืชืžื•ื ืช ืžืขืจื›ืช ื ืงื™ื™ื” ืขื ื”ืคืจืžื˜ืจื™ื ื”ื“ืจื•ืฉื™ื, ืฉืื™ื ื” ื‘ืจืฉื™ืžืช ื”ืชืžื•ื ื•ืช.

ื•ืื– ื”ื“ืจืš ื”ื™ื—ื™ื“ื” ืœืฆืืช ื”ื™ื ืœื™ืฆื•ืจ AMI ืžืฉืœืš.

ื”ืชื™ืขื•ื“ ื”ืจืฉืžื™ ืžืชืืจ ืชื”ืœื™ืš ื™ืฆื™ืจืช "AMI ืžื’ื•ื‘ื” ื‘ื—ื ื•ืช ืžื•ืคืขื™ื".

ื”ื—ื™ืกืจื•ืŸ ืฉืœ ื’ื™ืฉื” ื–ื• ื”ื•ื ืฉื’ื ืืช ื”ืชืžื•ื ื” ื”ืžื•ื’ืžืจืช ื™ื”ื™ื” ืฆื•ืจืš ืœื”ืžื™ืจ ืœ"AMI ืžื’ื•ื‘ื” EBS". ืจืื•ื™ ืœืฆื™ื™ืŸ ื’ื ื”ื•ื Cockpit Image Builder. ื–ื” ื™ืืคืฉืจ ืœืš ืœื™ืฆื•ืจ ืชืžื•ื ื•ืช ืžื•ืชืืžื•ืช ืื™ืฉื™ืช, ื‘ CLI ืื• WEB 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 ืฉืืœื™ื• ืฉื™ื™ืš ื”-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 ื•ื ืฉืชืžืฉ ื‘ื›ืชื•ื‘ื•ืช 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=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

ื›ื“ื™ ืœืงื‘ืœ 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}]'

ื–ื” ื”ื›ืœ. ืขื›ืฉื™ื• ืืชื” ื™ื›ื•ืœ ืœื”ืคืขื™ืœ ืžื•ืคืขื™ื.

ื‘ื“ืจืš ื–ื•, ืืชื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืชืžื•ื ื”, ื›ื›ืœ ื”ื ืจืื”, ืขื ื›ืœ ื”ืคืฆืช ืœื™ื ื•ืงืก. ืœืคื—ื•ืช ื‘ื“ื™ื•ืง ื“ื‘ื™ืืŸ (ื‘ืืžืฆืขื•ืช debootstrap ืœื”ืชืงื ืช ืžืขืจื›ืช ื ืงื™ื™ื”) ื•ืžืฉืคื—ืช RHEL.

ืขื“ื›ื•ืŸ ืžื‘ื•ืกืก ืขืœ ื‘ืงืฉื•ืช ืฉืœ ืงื•ืจืื™ื. ืชื”ืœื™ืš ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืื•ื˜ื•ืžื˜ื™ ืื•ืจื–, ืื•ื˜ื•ืžืฆื™ื” ื‘ืœื‘ื“. ื›ืืŸ ืžื•ืฆื’ืช ืชื‘ื ื™ืช ืœื“ื•ื’ืžื”.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”