Creant la teva pròpia imatge amb CentOS 8.1 pur al núvol d'Amazon

Aquesta guia és una "forquilla" del mateix nom Article sobre CentOS 5.9 i té en compte les característiques del nou sistema operatiu. Actualment no hi ha cap imatge oficial de Centos8 de centos.org a l'AWS Marketplace.

Com sabeu, al núvol d'Amazon es llancen instàncies virtuals basades en imatges (l'anomenada AMI). Amazon ofereix un gran nombre d'ells; també podeu utilitzar imatges públiques elaborades per tercers, de les quals el proveïdor de núvol, per descomptat, no assumeix cap responsabilitat. Però de vegades necessiteu una imatge del sistema neta amb els paràmetres necessaris, que no es troba a la llista d'imatges.

Llavors, l'única sortida és crear la teva pròpia AMI.

La documentació oficial descriu camí creant una "AMI recolzada per la botiga d'instàncies".

El desavantatge d'aquest enfocament és que la imatge acabada també s'haurà de convertir en una "AMI recolzada per EBS". També val la pena destacar Cockpit Image Builder. Et permetrà crear imatges personalitzades, en CLI o WEB GUI mode, però quan ja teniu Centos 8.

En aquest article es parlarà de com crear la vostra pròpia AMI recolzada per EBS al núvol d'Amazon sense passos intermedis.

Pla d’acció

  • Preparar l'entorn
  • Instal·leu un sistema net i feu els paràmetres necessaris
  • Feu una instantània del disc
  • Registre AMI

Preparant el Medi Ambient

Per als nostres propòsits, qualsevol instància oficial de Centos 7 qualsevol forma, fins i tot t2.micro. Podeu executar-lo mitjançant la 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}

L'ordre generarà una instància a la VPC a la qual pertany l'identificador de subxarxa especificat. Se suposa que la subxarxa és pública i SG "per defecte" ho permet tot.

Ara iniciem sessió a la instància mitjançant ssh, actualitzem el sistema, instal·lem dnf i reinicieu:

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

Totes les operacions posteriors es realitzaran a partir de root.

Instal·lació net Centos 8.1

Disseny del sistema de fitxers i muntatge de particions

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

Creació d'un arbre de directoris

El sistema RPM us permet preparar fàcilment i ràpidament un arbre de directoris per al futur sistema operatiu:

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 

Considero òptim executar l'última ordre d'aquesta manera, instal·lant paquets específics, i assegureu-vos d'ignorar els paquets recomanats.

Si voleu, podeu fer servir alguna cosa com aquesta:

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

В yum нет --excludepkgs, i abans havia d'instal·lar grups i després eliminar paquets.

La llista de paquets i grups dependents es pot veure amb l'ordre dnf group info core per a un grup core.

Personalització de fitxers del sistema operatiu

Creem configuracions per a la xarxa, fstab, grub2 i utilitzem adreces internes 169.254 d'AWS per a DNS i 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

És aquí, a GRUB_CMDLINE_LINUX, on recomano especificar selinux=0, per a aquells que encara tinguin por de SELinux.

Reconstruint initramfs a chroot

Després d'editar els fitxers grub i fstab, heu de reconstruir-lo.
Realitzem l'actualització:

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

Aquí update-crypto-policies - opcional, per als paranoics :)

Per a la "venda", podeu fer això:

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

Després de carregar el sistema operatiu, l'ordre update-crypto-policies --show emetrà FIPS.

Engegada automàtica i neteja d'escombraries

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 - necessari per instal·lar automàticament els fitxers de context SELinux al primer arrencada.

Ara desmuntem el disc:

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

Registre AMI

Per obtenir ami des d'un disc ebs, primer heu de fer una instantània del disc:

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'

Haureu d'esperar una estona. Comprovem l'estat amb l'SnapshotId rebut:

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

Quan ho aconseguim "State": "completed", podeu registrar una AMI i fer-la pública:

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

Això és tot. Ara podeu llançar instàncies.

D'aquesta manera, podeu crear una imatge, molt probablement, amb qualsevol distribució de Linux. Almenys exactament Debian (utilitzant debootstrap per instal·lar un sistema net) i la família RHEL.

ACTUALITZACIÓ A partir de les peticions dels lectors. Aquest procés es pot automatitzar Packer, Només automatitza. Aquí Es presenta una plantilla d'exemple.

Font: www.habr.com

Afegeix comentari