Panduan ini adalah “garpu” dengan nama yang sama Artikel tentang CentOS 5.9, dan mempertimbangkan fitur-fitur OS baru. Saat ini tidak ada gambar Centos8 resmi dari centos.org di AWS Marketplace.
Seperti yang Anda ketahui, di cloud Amazon, instans virtual diluncurkan berdasarkan gambar (yang disebut AMI). Amazon menyediakan banyak sekali; Anda juga dapat menggunakan gambar publik yang disiapkan oleh pihak ketiga, yang tentu saja tidak bertanggung jawab atas penyedia cloud. Namun terkadang Anda memerlukan image sistem yang bersih dengan parameter yang diperlukan, yang tidak ada dalam daftar image.
Maka satu-satunya jalan keluar adalah membuat AMI sendiri.
Dokumentasi resmi menjelaskan jalan membuat “AMI yang didukung penyimpanan instans”.
Kerugian dari pendekatan ini adalah gambar akhir juga perlu diubah menjadi “AMI yang didukung EBS”. Yang juga perlu diperhatikan adalah Cockpit Image Builder. Ini akan memungkinkan Anda membuat gambar khusus, di CLI atau WEB GUI mode, tetapi ketika Anda sudah memiliki Centos 8.
Cara membuat AMI Anda sendiri yang didukung EBS di cloud Amazon tanpa langkah perantara akan dibahas dalam artikel ini.
Rencana aksi
- Mempersiapkan lingkungan
- Instal sistem yang bersih dan buat pengaturan yang diperlukan
- Ambil snapshot dari disk
- Daftarkan AMI
Mempersiapkan Lingkungan
Untuk tujuan kami, apa pun contoh resmi Centos 7 bentuk apa pun, bahkan t2.micro. Anda dapat menjalankannya melalui 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}
Perintah ini akan memunculkan sebuah instance di VPC yang memiliki subnet-id yang ditentukan. Subnet seharusnya bersifat publik, dan SG 'default' mengizinkan semuanya.
Sekarang mari masuk ke instance melalui ssh, perbarui sistem, instal dnf
dan reboot:
sudo yum update -y && sudo yum install -y dnf && sudo reboot
Semua operasi lebih lanjut akan dilakukan dari root
.
Menginstal Centos 8.1 yang bersih
Tata letak sistem file dan pemasangan partisi
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
Membuat pohon direktori
Sistem RPM memungkinkan Anda dengan mudah dan cepat menyiapkan pohon direktori untuk OS masa depan:
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
Saya menganggap optimal untuk menjalankan perintah terakhir dengan cara ini, dengan menginstal paket tertentu, dan pastikan untuk mengabaikan paket yang disarankan.
Jika mau, Anda dapat menggunakan sesuatu seperti ini:
dnf --installroot=$ROOTFS groupinstall base core
--excludepkgs "NetworkManager*"
-e "i*-firmware"
В yum
tidak --excludepkgs
, dan sebelumnya saya harus menginstal grup dan kemudian menghapus paket.
Daftar paket dan grup dependen dapat dilihat dengan perintah dnf group info core
untuk grup core
.
Kustomisasi file OS
Mari buat konfigurasi untuk jaringan, fstab, grub2 dan gunakan alamat internal 169.254 AWS untuk DNS dan 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
Di sinilah, di GRUB_CMDLINE_LINUX, saya sarankan untuk menentukan selinux=0, bagi mereka yang masih takut dengan SELinux.
Membangun kembali initramf di chroot
Setelah mengedit file grub dan fstab, Anda perlu membangunnya kembali.
Kami melakukan pembaruan:
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
Di sini update-crypto-policies
- opsional, untuk paranoid :)
Untuk “dijual”, Anda dapat melakukan ini:
chroot $ROOTFS fips-mode-setup --enable
chroot $ROOTFS grub2-mkconfig -o /boot/grub2/grub.cfg
chroot $ROOTFS grub2-install $DEVICE
Setelah memuat OS, perintah update-crypto-policies --show
akan menerbitkan FIPS.
Mulai Otomatis dan Pembersihan Sampah
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
- diperlukan untuk menginstal file konteks SELinux secara otomatis pada boot pertama.
Sekarang mari kita lepas disknya:
sync
umount $ROOTFS/{proc,sys,dev,run}
umount $ROOTFS
Pendaftaran AMI
Untuk mendapatkan ami dari disk ebs, Anda perlu mengambil snapshot disk terlebih dahulu:
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'
Anda harus menunggu beberapa saat. Mari kita periksa statusnya menggunakan SnapshotId yang diterima:
aws ec2 describe-snapshots --region us-east-1 --snapshot-ids snap-0b665542fc59e58ed
Saat kita mendapatkannya "State": "completed"
, Anda dapat mendaftarkan AMI dan menjadikannya publik:
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}]'
Itu saja. Sekarang Anda dapat meluncurkan instance.
Dengan cara ini, kemungkinan besar Anda dapat membuat image dengan distribusi Linux apa pun. Setidaknya persis Debian (menggunakan debootstrap untuk menginstal sistem yang bersih) dan keluarga RHEL.
UPDATE Berdasarkan permintaan dari pembaca. Proses ini dapat diotomatisasi Packer, Otomatiskan saja. Di sini Contoh template disajikan.
Sumber: www.habr.com