本指南是同名的“叉子” 文章 關於 CentOS 5.9,並考慮到新作業系統的功能。目前 AWS Marketplace 中沒有 centos.org 的官方 Centos8 映像。
大家知道,亞馬遜雲端中的虛擬執行個體是基於鏡像啟動的(所謂的 急性心肌梗死)。亞馬遜提供了大量的;您也可以使用第三方準備的公共鏡像,當然雲端提供者對此不承擔任何責任。但有時您需要一個具有必要參數的乾淨系統映像,而該映像不在映像清單中。
那麼唯一的出路就是製作自己的 AMI。
官方文檔描述了 過程 建立「執行個體儲存支援的 AMI」。
這種方法的缺點是完成的映像還需要轉換為「EBS 支援的 AMI」。另外值得注意的是駕駛艙影像產生器。它將允許您創建自訂圖像, CLI的 或網頁 GUI 模式,但當你已經有 Centos 8 時。
本文將討論如何在 Amazon 雲端中建立您自己的 EBS 支援的 AMI,無需中間步驟。
行動計劃
- 準備環境
- 安裝乾淨的系統並進行必要的設置
- 拍攝磁碟快照
- 註冊 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}
該指令將在指定的子網路 ID 所屬的 VPC 中引發一個實例。該子網路應該是公共的,SG「預設」允許一切。
現在我們透過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
.
作業系統檔案定制
讓我們為網路、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
對於那些仍然害怕 SELinux 的人,我建議在 GRUB_CMDLINE_LINUX 中指定 selinux=0。
在 chroot 中重建 initramfs
編輯 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 註冊
要從 ebs 磁碟取得 ami,首先需要拍攝該磁碟的快照:
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 系列。
更新 根據讀者的要求。這個過程可以自動化 帕克, 僅自動化。 這裡 提供了一個範例模板。
來源: www.habr.com