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