Afirandina wêneya xwe bi CentOS 8.1-a paqij di ewrê Amazonê de

Ev rênîşander "fork" bi heman navî ye gotar di derbarê CentOS 5.9 de, û taybetmendiyên OS-ya nû li ber çavan digire. Heya niha di Bazara AWS de wêneyek Centos8 ya fermî ji centos.org tune.

Wekî ku hûn dizanin, di cloudê Amazonê de mînakên virtual li ser bingeha wêneyan têne destpêkirin (navê AMI). Amazon hejmareke mezin ji wan peyda dike; hûn jî dikarin wêneyên gelemperî yên ku ji hêla aliyên sêyemîn ve hatine amadekirin bikar bînin, ji bo ku pêşkêşkarê ewr, bê guman, berpirsiyariyek nagire. Lê carinan hûn hewce ne ku wêneyek pergala paqij a bi pîvanên pêwîst, ku ne di navnîşa wêneyan de ye.

Wê hingê riya yekane ev e ku hûn AMI-ya xwe çêbikin.

Belgeya fermî diyar dike riya afirandina "mînakek AMI-ya-piştgiriya dikanê".

Kêmasiya vê nêzîkbûnê ev e ku wêneya qediyayî jî pêdivî ye ku bibe "AMI-ya piştgirî-EBS". Di heman demê de hêjayî gotinê ye Cockpit Image Builder. Ew ê bihêle ku hûn wêneyên xwerû, tê de biafirînin CLI an WEB GUI mode, lê gava ku we berê Centos 8 heye.

Meriv çawa AMI-ya xweya bi piştgirîya EBS-ê di ewrê Amazon de bêyî gavên navîn biafirîne dê di vê gotarê de were nîqaş kirin.

Plana çalakiyê

  • Jîngehê amade bikin
  • Pergalek paqij saz bikin û mîhengên pêwîst bikin
  • Wêneyek dîskê bikişînin
  • AMI qeyd bikin

Amadekirina Jîngehê

Ji bo armancên me, her fermî Centos 7 nimûne her şekl, heta t2.micro. Hûn dikarin wê bi rêya CLI-ê bimeşînin:

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}

Ferman dê di VPC-ê de mînakek ku subnet-id-a diyarkirî jê re ye rabike. Pêdivî ye ku subnet gelemperî be, û SG 'default' destûrê dide her tiştî.

Naha em bi ssh ve têkevin nimûneyê, pergalê nûve bikin, saz bikin dnf û ji nû ve saz bikin:

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

Hemî operasyonên din dê ji vir bêne kirin root.

Sazkirina Centos 8.1 paqij

Plansazkirina pergala pelan û sazkirina dabeşkirinê

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

Çêkirina dara pelrêça

Pergala RPM dihêle hûn bi hêsanî û zû darek pelrêça ji bo OS-ya pêşerojê amade bikin:

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 

Ez çêtirîn dibînim ku emrê paşîn bi vî rengî, bi sazkirina pakêtên taybetî, bicîh bikin, û bê guman pakêtên pêşniyarî paşguh bikin.

Heke hûn bixwazin, hûn dikarin tiştek wekî vê bikar bînin:

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

В yum na --excludepkgs, û berî min neçar ma ku koman saz bikim û dûv re pakêtan jê bikim.

Navnîşa pakêt û komên girêdayî bi fermanê dikare were dîtin dnf group info core ji bo komeke core.

Xweserkirina pelê OS

Ka em ji bo torê, fstab, grub2 mîhengan biafirînin û ji bo DNS û NTP navnîşanên 169.254 yên navxweyî yên AWS bikar bînin.

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

Li vir e, li GRUB_CMDLINE_LINUX, ku ez pêşniyar dikim ku selinux=0 diyar bike, ji bo kesên ku hîn jî ji SELinux ditirsin.

Ji nû ve avakirina initramfs li chroot

Piştî guherandina pelên grub û fstab, hûn hewce ne ku ji nû ve ava bikin.
Em nûvekirinê pêk tînin:

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

vir update-crypto-policies - vebijarkî, ji bo paranoîd :)

Ji bo "firotanê", hûn dikarin vê yekê bikin:

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

Piştî barkirina OS, ferman update-crypto-policies --show dê FIPS derxîne.

Destpêkirina Xweser û Paqijkirina Zibilê

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 - pêdivî ye ku meriv pelên konteksta SELinux-ê di boota yekem de bixweber saz bike.

Naha em dîskê jêkin:

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

qeydkirina AMI

Ji bo ku hûn ami ji dîskek ebs bistînin, hûn pêşî hewce ne ku wêneyek dîskê bigirin:

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'

Hûn ê hewce bikin ku ji bo demekê bisekinin. Ka em bi karanîna SnapshotId-a wergirtî statûyê kontrol bikin:

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

Dema ku em wê bigirin "State": "completed", hûn dikarin AMI-ê tomar bikin û wê gelemperî bikin:

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

Navê pêger. Naha hûn dikarin mînakan bidin destpêkirin.

Bi vî rengî, hûn dikarin wêneyek, bi îhtîmalek mezin, bi her belavkirina Linux re biafirînin. Bi kêmanî tam Debian (bikaranîna debootstrap ji bo sazkirina pergalek paqij) û malbata RHEL.

UPDATE Li ser daxwazên xwendevanan. Ev pêvajo dikare otomatîk be pakkeran, Tenê Otomat bike. vir Şablonek nimûne tê pêşkêş kirin.

Source: www.habr.com

Add a comment