Skapa din egen bild med ren CentOS 8.1 i Amazons moln

Den här guiden är en "gaffel" med samma namn Artikel om CentOS 5.9, och tar hänsyn till funktionerna i det nya operativsystemet. Det finns för närvarande ingen officiell Centos8-bild från centos.org på AWS Marketplace.

Som ni vet, i Amazonas moln lanseras virtuella instanser baserade på bilder (de så kallade AMI). Amazon tillhandahåller ett stort antal av dem, du kan också använda offentliga bilder som tagits fram av tredje part, vilket molnleverantören naturligtvis inte tar något ansvar för. Men ibland behöver du en ren systembild med nödvändiga parametrar, som inte finns i listan över bilder.

Då är den enda utvägen att göra din egen AMI.

Den officiella dokumentationen beskriver sätt att skapa en "instansbutiksstödd AMI".

Nackdelen med detta tillvägagångssätt är att den färdiga bilden också måste konverteras till en "EBS-stödd AMI". Också värt att notera är Cockpit Image Builder. Det låter dig skapa anpassade bilder, i CLI eller WEB GUI läge, men när du redan har Centos 8.

Den här artikeln kommer att diskutera hur du skapar din egen EBS-stödda AMI i Amazons moln utan mellanliggande steg.

Handlingsplan

  • Förbered miljön
  • Installera ett rent system och gör nödvändiga inställningar
  • Ta en ögonblicksbild av disken
  • Registrera AMI

Att förbereda miljön

För våra ändamål, någon officiell Centos 7-instans vilken form som helst, även t2.micro. Du kan köra det via 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}

Kommandot kommer att ta upp en instans i VPC:n som det angivna subnät-id tillhör. Subnätet är tänkt att vara offentligt, och SG 'default' tillåter allt.

Låt oss nu logga in på instansen via ssh, uppdatera systemet, installera dnf och starta om:

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

Alla ytterligare operationer kommer att utföras fr.o.m root.

Installera ren Centos 8.1

Filsystemlayout och partitionsmontering

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

Skapa ett katalogträd

RPM-systemet låter dig enkelt och snabbt förbereda ett katalogträd för det framtida operativsystemet:

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 

Jag anser att det är optimalt att utföra det sista kommandot på detta sätt, genom att installera specifika paket, och se till att ignorera de rekommenderade paketen.

Om du vill kan du använda något sånt här:

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

В yum ingen --excludepkgs, och innan jag var tvungen att installera grupper och sedan ta bort paket.

Listan över paket och beroende grupper kan ses med kommandot dnf group info core för en grupp core.

OS-filanpassning

Låt oss skapa konfigurationer för nätverket, fstab, grub2 och använda AWS interna 169.254-adresser för DNS och 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

Det är här, i GRUB_CMDLINE_LINUX, som jag rekommenderar att du specificerar selinux=0, för de som fortfarande är rädda för SELinux.

Bygger om initramfs i chroot

Efter att ha redigerat grub- och fstab-filerna måste du bygga om.
Vi utför uppdateringen:

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

Här update-crypto-policies - valfritt, för paranoida :)

För "försäljning" kan du göra så här:

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

Efter att ha laddat operativsystemet, kommandot update-crypto-policies --show kommer att utfärda FIPS.

Autostart och soprensning

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 - behövs för att automatiskt installera SELinux kontextfiler vid första uppstart.

Låt oss nu avmontera disken:

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

AMI-registrering

För att hämta ami från en ebs-skiva måste du först ta en ögonblicksbild av skivan:

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'

Du får vänta ett tag. Låt oss kontrollera statusen med hjälp av det mottagna SnapshotId:

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

När vi får det "State": "completed", kan du registrera en AMI och göra den offentlig:

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

Det är allt. Nu kan du starta instanser.

På så sätt kan du skapa en bild, med största sannolikhet, med vilken Linux-distribution som helst. Åtminstone exakt Debian (använder debootstrap för att installera ett rent system) och RHEL-familjen.

UPPDATERING Baserat på förfrågningar från läsare. Denna process kan automatiseras Packer, Endast automatisera. Här En exempelmall presenteras.

Källa: will.com

Lägg en kommentar