Vytvorte si svoj obrázok s čistým CentOS 8.1 v cloude Amazon

Táto príručka je odnožou s rovnakým názvom Článok o CentOS 5.9 a zohľadňuje funkcie nového operačného systému. Na AWS Marketplace momentálne nie je k dispozícii žiadny oficiálny obraz. Centos8 z centos. Org.

Ako viete, v cloude Amazon sa virtuálne inštancie spúšťajú na základe obrazov (tzv. AMI). Amazon ich poskytuje veľké množstvo a môžete použiť aj verejné obrazy pripravené tretími stranami, za ktoré poskytovateľ cloudu samozrejme nenesie žiadnu zodpovednosť. Niekedy však potrebujete čistý obraz systému s požadovanými parametrami, ktorý nie je zahrnutý v zozname obrazov.

Potom je jedinou cestou von vytvorenie vlastného AMI.

Oficiálna dokumentácia popisuje spôsob vytvorenie „AMI podporovaného úložiskom inštancií“.

Nevýhodou tohto prístupu je, že hotový obraz bude potrebné previesť aj na „AMI podporovaný EBS“. Za zmienku stojí aj Cockpit Image Builder. Umožňuje vám vytvárať vlastné obrazy, CLI alebo WEB GUI режиме, но когда у вас уже будет Centos 8.

Tento článok sa bude venovať tomu, ako si vytvoriť vlastné AMI s podporou EBS v cloude Amazon bez medzikrokov.

Akčný plán

  • Pripravte si prostredie
  • Nainštalujte čistý systém a vykonajte potrebné nastavenia
  • Vytvorte snímku disku
  • Registrácia AMI

Príprava prostredia

Pre naše účely postačí ktokoľvek официальный инстанс Centos 7 akýkoľvek tvar, dokonca aj t2.micro. Môžete ho spustiť cez 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}

Tento príkaz nasadí inštanciu do VPC priradenej k zadanému ID podsiete. Predpokladá sa, že podsieť je verejná a „predvolená“ podsieť povoľuje všetok prístup.

Teraz sa prihlásme do inštancie cez ssh, aktualizujme systém a nainštalujme dnf a reštartujte:

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

Všetky ďalšie operácie budú vykonané od root.

Inštalácia čistého Centos 8.1

Rozdelenie súborového systému a pripojenie oddielov

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

Vytvorenie adresárového stromu

Systém RPM vám umožňuje rýchlo a jednoducho pripraviť adresárový strom pre váš budúci operačný systém:

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 

Myslím si, že je najlepšie spustiť posledný príkaz týmto spôsobom, nainštalovať konkrétne balíky a určite ignorovať odporúčané balíky.

Ak chcete, môžete použiť niečo takéto:

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

В yum nie --excludepkgsa predtým bolo potrebné nainštalovať skupiny a potom odstrániť balíky.

Zoznam balíkov a závislých skupín si môžete zobraziť pomocou príkazu dnf group info core pre skupinu core.

Prispôsobenie súborov operačného systému

Vytvorme konfigurácie pre sieť, fstab, grub2 a použijeme interné adresy AWS 169.254 pre DNS a 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.

Obnova initramfs v chroote

Po úprave súborov grub a fstab je potrebné systém znova zostaviť.
Vykonávame aktualizáciu:

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

tu update-crypto-policies — voliteľné, pre paranoikov 🙂

Pre „predaj“ to môžete urobiť takto:

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

Po načítaní operačného systému príkaz update-crypto-policies --show vydá FIPS.

Automatické spustenie a čistenie odpadu

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 контекста файлов при первой загрузке.

Teraz odpojíme disk:

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

Registrácia AMI

Ak chcete získať súbor ami z disku ebs, musíte najprv vytvoriť snímku disku:

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'

Budete musieť chvíľu počkať. Skontrolujme stav pomocou prijatého SnapshotId:

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

Keď to dostaneme "State": "completed", môžete zaregistrovať AMI a zverejniť ho:

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

To je všetko. Teraz môžete spustiť inštancie.

Týmto spôsobom môžete vytvoriť obrázok, s najväčšou pravdepodobnosťou s akýmkoľvek Linux-дистрибутивом. По крайней мере, точно Debian (используя debootstrap для установки чистой системы) и RHEL-семейства.

UPDATE Na žiadosť čitateľov. Tento proces je možné automatizovať. Balič, iba automatizovať. tu Je uvedený príklad šablóny.

Zdroj: hab.com

Kúpte si spoľahlivý hosting pre stránky s DDoS ochranou, VPS VDS servery 🔥 Kúpte si spoľahlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster