Amazon buludunda təmiz CentOS 8.1 ilə öz imicinizi yaratmaq

Bu bələdçi eyni adlı “çəngəl”dir Məqalə CentOS 5.9 haqqında və yeni ƏS-nin xüsusiyyətlərini nəzərə alır. Hazırda AWS Marketplace-də centos.org saytından rəsmi Centos8 şəkli yoxdur.

Bildiyiniz kimi, Amazon buludunda virtual instansiyalar şəkillər əsasında işə salınır (sözdə AMI). Amazon onların çoxlu sayda təqdim edir; siz həmçinin üçüncü tərəflər tərəfindən hazırlanmış ictimai şəkillərdən istifadə edə bilərsiniz, bunun üçün bulud provayderi, əlbəttə ki, heç bir məsuliyyət daşımır. Ancaq bəzən şəkillər siyahısında olmayan lazımi parametrləri olan təmiz sistem şəklinə ehtiyacınız var.

Onda yeganə çıxış yolu öz AMI-ni yaratmaqdır.

Rəsmi sənədlər təsvir edir yol "nümunə mağazası tərəfindən dəstəklənən AMI" yaratmaq.

Bu yanaşmanın dezavantajı odur ki, bitmiş görüntü də "EBS dəstəkli AMI"-yə çevrilməlidir. Cockpit Image Builder də diqqətəlayiqdir. Bu, xüsusi şəkillər yaratmağa imkan verəcəkdir CLI və ya WEB GUI rejimi, lakin sizdə artıq Centos 8 olduqda.

Aralıq addımlar olmadan Amazon buludunda öz EBS dəstəkli AMI-nizi necə yaratmaq bu məqalədə müzakirə olunacaq.

Fəaliyyət planı

  • Ətraf mühiti hazırlayın
  • Təmiz bir sistem quraşdırın və lazımi parametrləri edin
  • Diskin şəklini çəkin
  • AMI-ni qeydiyyatdan keçirin

Ətraf Mühitin Hazırlanması

Bizim məqsədlərimiz üçün hər hansı rəsmi Centos 7 nümunəsi istənilən forma, hətta t2.micro. Siz onu CLI vasitəsilə işlədə bilərsiniz:

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}

Komanda göstərilən alt şəbəkə id-nin aid olduğu VPC-də nümunə qaldıracaq. Alt şəbəkənin ictimai olması nəzərdə tutulur və SG 'defolt' hər şeyə icazə verir.

İndi ssh vasitəsilə instansiyaya daxil olaq, sistemi yeniləyək, quraşdıraq dnf və yenidən başladın:

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

Bütün sonrakı əməliyyatlar dən həyata keçiriləcək root.

Təmiz Centos 8.1 quraşdırılması

Fayl sisteminin tərtibatı və bölmənin quraşdırılması

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

Kataloq ağacının yaradılması

RPM sistemi gələcək OS üçün asanlıqla və tez bir kataloq ağacını hazırlamağa imkan verir:

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 

Xüsusi paketləri quraşdıraraq sonuncu əmri bu şəkildə yerinə yetirməyi optimal hesab edirəm və tövsiyə olunan paketlərə məhəl qoymayın.

İstəyirsinizsə, belə bir şey istifadə edə bilərsiniz:

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

В yum нет --excludepkgs, və əvvəl qrupları quraşdırmalı və sonra paketləri silməli oldum.

Komanda ilə paketlərin və asılı qrupların siyahısına baxmaq olar dnf group info core bir qrup üçün core.

OS faylının fərdiləşdirilməsi

Şəbəkə, fstab, grub2 üçün konfiqurasiyalar yaradaq və DNS və NTP üçün AWS daxili 169.254 ünvanlarından istifadə edək.

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

Məhz burada, GRUB_CMDLINE_LINUX-da hələ də SELinux-dan qorxanlar üçün selinux=0 təyin etməyi tövsiyə edirəm.

Chroot-da initramfların yenidən qurulması

Grub və fstab fayllarını redaktə etdikdən sonra yenidən qurmalısınız.
Yeniləməni həyata keçiririk:

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

Burada update-crypto-policies - isteğe bağlı, paranoyak üçün :)

"Satış" üçün bunu edə bilərsiniz:

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

ƏS yüklədikdən sonra əmr update-crypto-policies --show FIPS verəcək.

Autostart və Zibil Təmizləmə

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 - ilk açılışda SELinux kontekst fayllarını avtomatik quraşdırmaq üçün lazımdır.

İndi diski ayıraq:

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

AMI qeydiyyatı

Bir ebs diskindən ami əldə etmək üçün əvvəlcə diskin şəklini çəkməlisiniz:

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'

Bir müddət gözləməli olacaqsınız. Gəlin qəbul edilən SnapshotId-dən istifadə edərək statusu yoxlayaq:

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

Aldığımız zaman "State": "completed", siz AMI-ni qeydiyyatdan keçirib onu ictimai edə bilərsiniz:

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

Hamısı budur. İndi nümunələri işə sala bilərsiniz.

Bu şəkildə, çox güman ki, hər hansı bir Linux paylanması ilə bir şəkil yarada bilərsiniz. Ən azı tam olaraq Debian (təmiz sistem qurmaq üçün debotstrap istifadə edərək) və RHEL ailəsi.

UPDATE Oxucuların müraciətləri əsasında. Bu proses avtomatlaşdırıla bilər Packer, Yalnız avtomatlaşdırın. Burada Bir nümunə şablon təqdim olunur.

Mənbə: www.habr.com

Добавить комментарий