Skep jou eie beeld met pure CentOS 8.1 in die Amazon-wolk

Hierdie gids is 'n "vurk" met dieselfde naam Artikel oor CentOS 5.9, en neem die kenmerke van die nuwe bedryfstelsel in ag. Daar is tans geen amptelike Centos8-beeld van centos.org in die AWS Marketplace nie.

Soos u weet, word virtuele gevalle in die Amazon-wolk geloods op grond van beelde (die sogenaamde AMI). Amazon verskaf 'n groot aantal daarvan; jy kan ook openbare beelde gebruik wat deur derde partye voorberei is, waarvoor die wolkverskaffer natuurlik geen verantwoordelikheid dra nie. Maar soms benodig jy 'n skoon stelselbeeld met die nodige parameters, wat nie in die lys van beelde is nie.

Dan is die enigste uitweg om jou eie AMI te maak.

Die amptelike dokumentasie beskryf manier van die skep van 'n "instansie winkel-gesteunde AMI".

Die nadeel van hierdie benadering is dat die voltooide beeld ook in 'n "EBS-gesteunde AMI" omgeskakel moet word. Ook opmerklik is Cockpit Image Builder. Dit sal jou toelaat om persoonlike beelde te skep, in CLI of WEB GUI modus, maar wanneer jy reeds Centos 8 het.

Hoe om jou eie EBS-gesteunde AMI in die Amazon-wolk te skep sonder tussenstappe, sal in hierdie artikel bespreek word.

Aksieplan

  • Berei die omgewing voor
  • Installeer 'n skoon stelsel en maak die nodige instellings
  • Neem 'n momentopname van die skyf
  • Registreer AMI

Voorbereiding van die omgewing

Vir ons doeleindes, enige amptelike Centos 7-instansie enige vorm, selfs t2.micro. U kan dit via die CLI laat loop:

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}

Die opdrag sal 'n instansie in die VPC opstel waaraan die gespesifiseerde subnet-ID behoort. Die subnet is veronderstel om publiek te wees, en SG 'default' laat alles toe.

Laat ons nou via ssh by die instansie aanmeld, die stelsel opdateer, installeer dnf en herlaai:

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

Alle verdere operasies sal vanaf root.

Installeer skoon Centos 8.1

Lêerstelseluitleg en partisiemontering

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

Skep 'n gidsboom

Die RPM-stelsel laat jou toe om maklik en vinnig 'n gidsboom vir die toekomstige bedryfstelsel voor te berei:

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 

Ek beskou dit as optimaal om die laaste opdrag op hierdie manier uit te voer, deur spesifieke pakkette te installeer, en maak seker dat u die aanbevole pakkette ignoreer.

As jy wil, kan jy so iets gebruik:

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

В yum geen --excludepkgs, en voordat ek groepe moes installeer en dan pakkette moes verwyder.

Die lys van pakkette en afhanklike groepe kan met die opdrag bekyk word dnf group info core vir 'n groep core.

OS lêer aanpassing

Kom ons skep konfigurasies vir die netwerk, fstab, grub2 en gebruik AWS interne 169.254 adresse vir DNS en 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

Dit is hier, in GRUB_CMDLINE_LINUX, wat ek aanbeveel om selinux=0 te spesifiseer, vir diegene wat nog bang is vir SELinux.

Herbou initramfs in chroot

Nadat u die grub- en fstab-lêers geredigeer het, moet u dit herbou.
Ons voer die opdatering uit:

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

Hier update-crypto-policies - opsioneel, vir die paranoïes :)

Vir "verkoop", kan jy dit doen:

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

Na die laai van die OS, die opdrag update-crypto-policies --show FIPS sal uitreik.

Autostart en vullis skoonmaak

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 - nodig om outomaties SELinux-kontekslêers by die eerste selflaai te installeer.

Kom ons ontkoppel nou die skyf:

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

AMI registrasie

Om ami van 'n ebs-skyf af te kry, moet jy eers 'n momentopname van die skyf neem:

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'

Jy sal 'n geruime tyd moet wag. Kom ons kyk na die status met behulp van die ontvangde SnapshotId:

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

Wanneer ons dit kry "State": "completed", kan jy 'n AMI registreer en dit publiek maak:

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}]'

Dis al. Nou kan jy gevalle begin.

Op hierdie manier kan jy 'n beeld skep, heel waarskynlik, met enige Linux-verspreiding. Ten minste presies Debian (gebruik debootstrap om 'n skoon stelsel te installeer) en die RHEL-familie.

UPDATE Gebaseer op versoeke van lesers. Hierdie proses kan geoutomatiseer word Packer, Outomatiseer slegs. Hier 'n Voorbeeld sjabloon word aangebied.

Bron: will.com

Voeg 'n opmerking