Erstellt Äert eegent Bild mat pure CentOS 8.1 an der Amazon Cloud

Dëse Guide ass eng "Gabel" mam selwechten Numm Artikelen iwwer CentOS 5.9, an hëlt Rechnung de Fonctiounen vun der neier OS. Et gëtt momentan keen offiziellen Centos8 Bild vun centos.org am AWS Maartplaz.

Wéi Dir wësst, ginn an der Amazon Cloud virtuell Instanzen op Basis vu Biller (de sougenannte Ami). Amazon stellt eng grouss Zuel vun hinnen zur Verfügung; Dir kënnt och ëffentlech Biller benotzen, déi vun Drëttubidder virbereet sinn, fir déi de Cloud Provider natierlech keng Verantwortung dréit. Awer heiansdo brauch Dir e proppert Systembild mat den néidege Parameteren, wat net an der Lëscht vun de Biller ass.

Dann ass deen eenzege Wee eraus Ären eegene AMI ze maachen.

Déi offiziell Dokumentatioun beschreift Wee eng "Instanz Store-ënnerstëtzt AMI" erstellen.

Den Nodeel vun dëser Approche ass datt de fäerdege Bild och an en "EBS-backed AMI" ëmgewandelt muss ginn. Och ze bemierken ass Cockpit Image Builder. Et erlaabt Iech personaliséiert Biller ze kreéieren, an CLI oder WEB GUI Modus, awer wann Dir schonn Centos 8 hutt.

Wéi Dir Ären eegene EBS-gestützte AMI an der Amazon Cloud ouni Zwësche Schrëtt erstellt, gëtt an dësem Artikel diskutéiert.

Aktiounsplang

  • Preparéieren d'Ëmwelt
  • Installéiert e proppere System a maacht déi néideg Astellungen
  • Maacht e Snapshot vun der Disk
  • AMI Aschreiwung

Ëmweltvirbereedung

Fir eis Zwecker, all offiziell Centos 7 Instanz all Form, souguer t2.micro. Dir kënnt et iwwer de CLI lafen:

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}

De Kommando wäert eng Instanz an der VPC erhéijen, zu där déi spezifizéiert Subnet-ID gehéiert. De Subnet soll ëffentlech sinn, an SG 'Standard' erlaabt alles.

Loosst eis elo op d'Instanz via ssh umellen, de System aktualiséieren, installéieren dnf an nei starten:

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

All weider Operatiounen wäert ausgefouert ginn root.

Installéiert propper Centos 8.1

Dateisystem Layout a Partitionsmontage

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

Schafen vun engem Verzeechnes Bam

De RPM System erlaabt Iech einfach a séier e Verzeechnesbam fir dat zukünfteg OS virzebereeden:

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 

Ech betruechten et optimal fir de leschte Kommando op dës Manéier auszeféieren, andeems Dir spezifesch Packagen installéiert, a gitt sécher déi recommandéiert Packagen ze ignoréieren.

Wann Dir wëllt, kënnt Dir esou eppes benotzen:

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

В yum kee --excludepkgs, a ier ech Gruppen installéiere muss an dann Pakete läschen.

D'Lëscht vu Packagen an ofhängege Gruppen kann mam Kommando gekuckt ginn dnf group info core fir eng Grupp core.

OS Datei Personnalisatioun

Loosst eis Konfiguratioune fir den Netz erstellen, fstab, grub2 a benotzen AWS intern 169.254 Adressen fir DNS an 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

Et ass hei, am GRUB_CMDLINE_LINUX, datt ech recommandéiere selinux = 0 ze spezifizéieren, fir déi, déi nach Angscht virun SELinux hunn.

Initramfs am Chroot nei opzebauen

Nodeems Dir d'Grub a fstab Dateien geännert hutt, musst Dir nei opbauen.
Mir maachen den Update:

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

hei update-crypto-policies - fakultativ, fir déi paranoid :)

Fir "Verkaaf" kënnt Dir dëst maachen:

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

Nom Luede vum OS, de Kommando update-crypto-policies --show wäert FIPS erausginn.

Autostart a Gerempels Botzen

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 - néideg fir automatesch SELinux Kontextdateien um éischte Boot z'installéieren.

Loosst eis elo den Disk demontéieren:

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

AMI Aschreiwung

Fir Ami vun enger ebs Disk ze kréien, musst Dir als éischt e Snapshot vun der Disk maachen:

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'

Dir musst fir eng Zäit waarden. Loosst eis de Status iwwerpréiwen mat dem kritt SnapshotId:

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

Wa mir et kréien "State": "completed", Dir kënnt en AMI registréieren an ëffentlech maachen:

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

Dat ass alles. Elo kënnt Dir Instanzen starten.

Op dës Manéier kënnt Dir e Bild erstellen, héchstwahrscheinlech, mat all Linux Verdeelung. Op d'mannst genau Debian (mat Debootstrap fir e proppere System z'installéieren) an d'RHEL Famill.

Wéi fonctionnéiert Baséiert op Ufroe vu Lieser. Dëse Prozess kann automatiséiert ginn Packer, Automatiséiert nëmmen. hei E Beispill Schabloun gëtt presentéiert.

Source: will.com

Setzt e Commentaire