Эҷоди тасвири шахсии худ бо CentOS 8.1 дар абри Amazon

Ин дастур як "форк"-и ҳамон ном аст мақолаҳо дар бораи CentOS 5.9 ва хусусиятҳои OS навро ба назар мегирад. Дар айни замон ягон тасвири расмии Centos8 аз centos.org дар Marketplace AWS мавҷуд нест.

Тавре ки шумо медонед, дар абрҳои Amazon инстансияҳои виртуалӣ дар асоси тасвирҳо (ба ном AMI). Amazon шумораи зиёди онҳоро таъмин мекунад; шумо инчунин метавонед тасвирҳои оммавии аз ҷониби шахсони сеюм таҳияшударо истифода баред, ки барои онҳо провайдери абр, албатта, ҳеҷ гуна масъулият надорад. Аммо баъзан ба шумо тасвири системаи тоза бо параметрҳои зарурӣ лозим аст, ки дар рӯйхати тасвирҳо нест.

Он гоҳ роҳи ягонаи баромадан ин сохтани AMI-и худ аст.

Ҳуҷҷатҳои расмӣ тавсиф мекунанд роҳ эҷод кардани "AMI аз мағозаи намунавӣ".

Камбудии ин равиш дар он аст, ки тасвири тайёр инчунин бояд ба "AMI-и аз EBS дастгирӣшаванда" табдил дода шавад. Инчунин қобили қайд аст, ки Cockpit Image Builder. Он ба шумо имкон медиҳад, ки тасвирҳои фармоиширо дар CLI ё WEB GUI режим, аммо вақте ки шумо аллакай Centos 8 доред.

Чӣ тавр сохтани AMI-и худро аз ҷониби EBS дар абри Амазонка бидуни қадамҳои мобайнӣ дар ин мақола муҳокима хоҳад кард.

Нақшаи амал

  • Муҳити зистро омода кунед
  • Системаи тозаро насб кунед ва танзимоти заруриро созед
  • Сурати дискро гиред
  • AMI-ро ба қайд гиред

Омода кардани муҳити зист

Барои максадхои мо, ягон намунаи расмии Centos 7 ҳама гуна шакл, ҳатто t2.micro. Шумо метавонед онро тавассути 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}

Фармон як мисолро дар VPC эҷод мекунад, ки идентификати зершабакаи мушаххас ба он тааллуқ дорад. Зершабақа бояд оммавӣ бошад ва SG 'default' ҳама чизро иҷозат медиҳад.

Акнун биёед ба мисол тавассути ssh ворид шавем, системаро навсозӣ кунем ва насб кунем dnf ва аз нав оғоз кунед:

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

Ҳамаи амалиётҳои минбаъда аз он анҷом дода мешаванд root.

Насб кардани Centos 8.1 тоза

Тарҳбандии системаи файлӣ ва васлкунии қисмҳо

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

Эҷоди дарахти директория

Системаи RPM ба шумо имкон медиҳад, ки ба осонӣ ва зуд дарахти директорияро барои ОС оянда омода созед:

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 

Ман бо ин роҳ иҷро кардани фармони охиринро бо насби бастаҳои мушаххас беҳтарин мешуморам ва ҳатман бастаҳои тавсияшударо сарфи назар кунед.

Агар шумо хоҳед, шумо метавонед чунин чизеро истифода баред:

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

В yum нест --excludepkgs, ва пеш аз он ки ман маҷбур будам, ки гурӯҳҳоро насб кунам ва бастаҳоро хориҷ кунам.

Рӯйхати бастаҳо ва гурӯҳҳои вобастаро бо фармон дидан мумкин аст dnf group info core барои як гурӯҳ core.

Мутобиқсозии файли OS

Биёед конфигуратсияҳоро барои шабака, fstab, grub2 созем ва суроғаҳои дохилии AWS 169.254-ро барои DNS ва 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

Маҳз дар ин ҷо, дар GRUB_CMDLINE_LINUX, ман тавсия медиҳам, ки selinux=0-ро барои онҳое, ки ҳанӯз аз SELinux метарсанд, нишон диҳам.

Барқарор кардани initramfs дар chroot

Пас аз таҳрири файлҳои grub ва fstab, шумо бояд аз нав барқарор кунед.
Мо навсозӣ мекунем:

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

дар ин ҷо update-crypto-policies - ихтиёрӣ, барои параноид :)

Барои "фурӯш" шумо метавонед ин корро кунед:

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

Пас аз бор кардани ОС, фармон update-crypto-policies --show FIPS мебарорад.

Автостарт ва тозакунии партов

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 - барои ба таври худкор насб кардани файлҳои контексти SELinux дар бори аввал лозим аст.

Акнун биёед дискро ҷудо кунем:

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

Бақайдгирии AMI

Барои гирифтани ami аз диски ebs, шумо аввал бояд акси дискро гиред:

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'

Шумо бояд чанд вақт интизор шавед. Биёед вазъиятро бо истифода аз SnapshotId-и гирифташуда тафтиш кунем:

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

Вақте ки мо онро мегирем "State": "completed", шумо метавонед AMI-ро ба қайд гиред ва онро оммавӣ гардонед:

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

Ҳамааш ҳамин. Акнун шумо метавонед мисолҳоро оғоз кунед.

Бо ин роҳ, шумо метавонед тасвиреро эҷод кунед, эҳтимолан бо ҳама тақсимоти Linux. Ҳадди ақал маҳз Debian (бо истифода аз debootstrap барои насб кардани системаи тоза) ва оилаи RHEL.

UPDATE Дар асоси дархости хонандагон. Ин равандро автоматӣ кардан мумкин аст Packer, Танҳо автоматӣ. дар ин ҷо Намунаи намуна пешниҳод карда мешавад.

Манбаъ: will.com

Илова Эзоҳ