Crearea propriei imagini cu CentOS 8.1 pur în cloud-ul Amazon

Acest ghid este o „furcă” cu același nume articole despre CentOS 5.9 și ia în considerare caracteristicile noului sistem de operare. În prezent, nu există nicio imagine oficială Centos8 de pe centos.org în AWS Marketplace.

După cum știți, în cloud-ul Amazon sunt lansate instanțele virtuale pe baza imaginilor (așa-numitele AMI). Amazon furnizează un număr mare de acestea; puteți folosi și imagini publice pregătite de terți, pentru care furnizorul de cloud, desigur, nu poartă nicio responsabilitate. Dar uneori aveți nevoie de o imagine de sistem curată, cu parametrii necesari, care nu se află în lista de imagini.

Atunci singura cale de ieșire este să-ți faci propriul AMI.

Documentația oficială descrie mod de crearea unui „AMI susținut de magazin de instanțe”.

Dezavantajul acestei abordări este că imaginea finită va trebui, de asemenea, convertită într-un „AMI susținut de EBS”. De remarcat este și Cockpit Image Builder. Vă va permite să creați imagini personalizate, în CLI sau WEB GUI mod, dar când aveți deja Centos 8.

Cum să vă creați propria AMI susținută de EBS în cloudul Amazon fără pași intermediari va fi discutat în acest articol.

Plan de acțiune

  • Pregătiți mediul înconjurător
  • Instalați un sistem curat și faceți setările necesare
  • Faceți un instantaneu al discului
  • Înregistrați AMI

Pregătirea Mediului

Pentru scopurile noastre, orice instanță oficială Centos 7 orice formă, chiar și t2.micro. Îl puteți rula prin intermediul 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}

Comanda va genera o instanță în VPC-ul căreia îi aparține ID-ul de subrețea specificat. Subrețeaua ar trebui să fie publică, iar „implicit” SG permite totul.

Acum să ne conectăm la instanță prin ssh, să actualizăm sistemul, să instalăm dnf și reporniți:

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

Toate operațiunile ulterioare vor fi efectuate de la root.

Instalarea Centos curată 8.1

Aspectul sistemului de fișiere și montarea partițiilor

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

Crearea unui arbore de directoare

Sistemul RPM vă permite să pregătiți ușor și rapid un arbore de directoare pentru viitorul sistem de operare:

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 

Consider că este optim să executi ultima comandă în acest fel, instalând anumite pachete, și ai grijă să ignori pachetele recomandate.

Dacă doriți, puteți folosi ceva de genul acesta:

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

В yum nu --excludepkgs, și înainte a trebuit să instalez grupuri și apoi să elimin pachetele.

Lista pachetelor și a grupurilor dependente poate fi vizualizată cu comanda dnf group info core pentru un grup core.

Personalizarea fișierelor OS

Să creăm configurații pentru rețea, fstab, grub2 și să folosim adresele interne AWS 169.254 pentru 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

Aici, în GRUB_CMDLINE_LINUX, recomand specificarea selinux=0, celor cărora le este încă frică de SELinux.

Reconstruirea initramfs în chroot

După editarea fișierelor grub și fstab, trebuie să reconstruiți.
Efectuăm actualizarea:

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

Aici update-crypto-policies - optional, pentru paranoici :)

Pentru „vânzare”, puteți face acest lucru:

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

După încărcarea sistemului de operare, comanda update-crypto-policies --show va emite FIPS.

Autostart și curățarea gunoiului

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 - necesar pentru a instala automat fișierele de context SELinux la prima pornire.

Acum să demontăm discul:

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

înregistrare AMI

Pentru a obține ami de pe un disc ebs, mai întâi trebuie să faceți un instantaneu al discului:

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'

Va trebui să așteptați ceva timp. Să verificăm starea folosind SnapshotId-ul primit:

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

Când îl primim "State": "completed", puteți înregistra un AMI și îl puteți face public:

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

Asta e tot. Acum puteți lansa instanțe.

În acest fel, poți crea o imagine, cel mai probabil, cu orice distribuție Linux. Cel puțin exact Debian (folosind debootstrap pentru a instala un sistem curat) și familia RHEL.

UPDATE Pe baza cererilor cititorilor. Acest proces poate fi automatizat Ambalator, Numai automatizare. Aici Este prezentat un exemplu de șablon.

Sursa: www.habr.com

Adauga un comentariu