Esta guía é un "garfo" co mesmo nome Artigo sobre CentOS 5.9 e ten en conta as características do novo sistema operativo. Actualmente non hai ningunha imaxe oficial de Centos8 de centos.org no AWS Marketplace.
Como sabedes, na nube de Amazon lánzanse instancias virtuais baseadas en imaxes (as chamadas AMI). Amazon ofrece un gran número delas; tamén podes utilizar imaxes públicas elaboradas por terceiros, das que o provedor da nube, por suposto, non se fai responsable. Pero ás veces necesitas unha imaxe limpa do sistema cos parámetros necesarios, que non está na lista de imaxes.
Entón, a única saída é facer a túa propia AMI.
Descríbese a documentación oficial camiño creando unha "AMI apoiada na tenda de instancias".
A desvantaxe deste enfoque é que a imaxe rematada tamén terá que converterse nunha "AMI apoiada por EBS". Tamén vale a pena destacar o Cockpit Image Builder. Permitirache crear imaxes personalizadas, en CLI ou WEB GUI modo, pero cando xa tes Centos 8.
Neste artigo comentarase como crear a túa propia AMI apoiada por EBS na nube de Amazon sen pasos intermedios.
Plan de acción
- Preparar o medio ambiente
- Instale un sistema limpo e realice os axustes necesarios
- Fai unha instantánea do disco
- Rexistrarse AMI
Preparando o Medio Ambiente
Para os nosos fins, calquera instancia oficial de Centos 7 calquera forma, incluso t2.micro. Pode executalo a través da 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}
O comando xerará unha instancia na VPC á que pertence o ID de subrede especificado. Suponse que a subrede é pública e SG "predeterminado" permíteo todo.
Agora imos iniciar sesión na instancia mediante ssh, actualizar o sistema e instalar dnf
e reinicia:
sudo yum update -y && sudo yum install -y dnf && sudo reboot
Todas as operacións posteriores realizaranse desde root
.
Instalación limpa Centos 8.1
Disposición do sistema de ficheiros e montaxe de particións
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ón dunha árbore de directorios
O sistema RPM permítelle preparar de xeito sinxelo e rápido unha árbore de directorios para o futuro SO:
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 que é óptimo executar o último comando deste xeito, instalando paquetes específicos, e asegúrese de ignorar os paquetes recomendados.
Se queres, podes usar algo así:
dnf --installroot=$ROOTFS groupinstall base core
--excludepkgs "NetworkManager*"
-e "i*-firmware"
В yum
non --excludepkgs
, e antes tiven que instalar grupos e despois eliminar paquetes.
A lista de paquetes e grupos dependentes pódese ver co comando dnf group info core
para un grupo core
.
Personalización de ficheiros do sistema operativo
Creemos configuracións para a rede, fstab, grub2 e usemos enderezos internos 169.254 de AWS para DNS e 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
É aquí, en GRUB_CMDLINE_LINUX, onde recomendo especificar selinux=0, para os que aínda lle teñen medo a SELinux.
Reconstruíndo initramfs en chroot
Despois de editar os ficheiros grub e fstab, cómpre reconstruír.
Realizamos a actualización:
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, para paranoicos :)
Para "venda", podes facer isto:
chroot $ROOTFS fips-mode-setup --enable
chroot $ROOTFS grub2-mkconfig -o /boot/grub2/grub.cfg
chroot $ROOTFS grub2-install $DEVICE
Despois de cargar o sistema operativo, o comando update-crypto-policies --show
emitirá FIPS.
Arranque automático e limpeza de lixo
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
- necesario para instalar automaticamente os ficheiros de contexto de SELinux no primeiro arranque.
Agora imos desmontar o disco:
sync
umount $ROOTFS/{proc,sys,dev,run}
umount $ROOTFS
Rexistro AMI
Para obter ami dun disco ebs, primeiro cómpre facer unha instantánea do disco:
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'
Terás que esperar algún tempo. Comprobamos o estado usando o SnapshotId recibido:
aws ec2 describe-snapshots --region us-east-1 --snapshot-ids snap-0b665542fc59e58ed
Cando o consigamos "State": "completed"
, pode rexistrar unha AMI e facela 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}]'
Iso é todo. Agora podes lanzar instancias.
Deste xeito, podes crear unha imaxe, moi probablemente, con calquera distribución de Linux. Polo menos exactamente Debian (usando debootstrap para instalar un sistema limpo) e a familia RHEL.
Actualización Baseado en peticións dos lectores. Este proceso pódese automatizar Empaquetador, Só automatizar. Aquí Preséntase un modelo de exemplo.
Fonte: www.habr.com