From 56c02b7e2fe5508802ffd1cdf029e5927c657c37 Mon Sep 17 00:00:00 2001 From: liyuanr Date: Thu, 16 Dec 2021 17:51:21 +0800 Subject: [PATCH] KubeOS:add arm architecture support to the OS image Signed-off-by: liyuanr (cherry picked from commit 230b157db00cd15d21ccb6edff7cd38e72bd426b) --- ...architecture-support-to-the-OS-image.patch | 298 ++++++++++++++++++ KubeOS.spec | 18 +- 2 files changed, 311 insertions(+), 5 deletions(-) create mode 100644 0003-KubeOS-add-arm-architecture-support-to-the-OS-image.patch diff --git a/0003-KubeOS-add-arm-architecture-support-to-the-OS-image.patch b/0003-KubeOS-add-arm-architecture-support-to-the-OS-image.patch new file mode 100644 index 0000000..0700480 --- /dev/null +++ b/0003-KubeOS-add-arm-architecture-support-to-the-OS-image.patch @@ -0,0 +1,298 @@ +From a19218ad25eac323ead61ec5ff1fbb04a6dc2539 Mon Sep 17 00:00:00 2001 +From: liyuanr +Date: Fri, 3 Dec 2021 11:16:22 +0800 +Subject: [PATCH] KubeOS:add arm architecture support to the OS image + +Signed-off-by: liyuanr +--- + cmd/agent/server/server.go | 5 +- + files/{boot-grub2.mount => boot.mount} | 6 +- + scripts/bootloader.sh | 40 +++++++++++++ + scripts/generate.sh | 83 +++++++++++++++----------- + scripts/grub.cfg | 16 ++--- + scripts/rpmlist | 3 +- + scripts/set_in_chroot.sh | 2 +- + 7 files changed, 107 insertions(+), 48 deletions(-) + rename files/{boot-grub2.mount => boot.mount} (92%) + create mode 100644 scripts/bootloader.sh + +diff --git a/cmd/agent/server/server.go b/cmd/agent/server/server.go +index 711e0c8..e4db02e 100644 +--- a/cmd/agent/server/server.go ++++ b/cmd/agent/server/server.go +@@ -174,7 +174,10 @@ func install(imagePath string, mainPart string, partB string) error { + if side != partB { + next = "A" + } +- return runCommand("grub2-set-default", next) ++ if err := runCommand("grub2-set-default", next); err != nil { ++ return err ++ } ++ return runCommand("cp", "/boot/grub2/grubenv", "/boot/efi/EFI/openEuler") + } + + func (s *Server) reboot() error { +diff --git a/files/boot-grub2.mount b/files/boot.mount +similarity index 92% +rename from files/boot-grub2.mount +rename to files/boot.mount +index a53fff7..a228aae 100644 +--- a/files/boot-grub2.mount ++++ b/files/boot.mount +@@ -15,9 +15,9 @@ Conflicts=umount.target + Before=local-fs.target umount.target + + [Mount] +-What=/dev/disk/by-label/GRUB2 +-Where=/boot/grub2 +-Type=ext4 ++What=/dev/disk/by-label/BOOT ++Where=/boot ++Type=vfat + Options=defaults + + [Install] +diff --git a/scripts/bootloader.sh b/scripts/bootloader.sh +new file mode 100644 +index 0000000..b93c314 +--- /dev/null ++++ b/scripts/bootloader.sh +@@ -0,0 +1,40 @@ ++#!/bin/bash ++set -eu ++set -o pipefail ++set -x ++ARCH=`arch` ++ ++function install_grub2_x86 () ++{ ++ # make boot.img/core.img and setup, to support legacy boot mode ++ GRUBNAME=$(which grub2-install) ++ echo "Installing GRUB2..." ++ GRUB_OPTS=${GRUB_OPTS:-"--force"} ++ GRUB_OPTS="$GRUB_OPTS --target=i386-pc" ++ ++ $GRUBNAME --modules="biosdisk part_msdos" $GRUB_OPTS $DEVICE ++ ++ # make efi file, and save in FAT16 partition, to support UEFI boot mode ++ cp -r /usr/lib/grub/x86_64-efi boot/efi/EFI/openEuler ++ eval "grub2-mkimage -d /usr/lib/grub/x86_64-efi -O x86_64-efi --output=/boot/efi/EFI/openEuler/grubx64.efi '--prefix=(,msdos1)/efi/EFI/openEuler' fat part_gpt part_msdos linux" ++ ++ mkdir -p /boot/EFI/BOOT/ ++ cp -f /boot/efi/EFI/openEuler/grubx64.efi /boot/EFI/BOOT/BOOTX64.EFI ++} ++ ++function install_grub2_efi () ++{ ++ cp -r /usr/lib/grub/arm64-efi /boot/efi/EFI/openEuler/ ++ eval "grub2-mkimage -d /usr/lib/grub/arm64-efi -O arm64-efi --output=/boot/efi/EFI/openEuler/grubaa64.efi '--prefix=(,msdos1)/efi/EFI/openEuler' fat part_gpt part_msdos linux" ++ ++ mkdir -p /boot/EFI/BOOT/ ++ cp -f /boot/efi/EFI/openEuler/grubaa64.efi /boot/EFI/BOOT/BOOTAA64.EFI ++} ++ ++if [ $ARCH == "x86_64" ]; then ++ install_grub2_x86 ++fi ++ ++if [ $ARCH == "aarch64" ]; then ++ install_grub2_efi ++fi +diff --git a/scripts/generate.sh b/scripts/generate.sh +index 73830ea..c481e30 100644 +--- a/scripts/generate.sh ++++ b/scripts/generate.sh +@@ -22,6 +22,7 @@ TMP_MOUNT_PATH="${PWD}/mnt" + RPM_ROOT="${PWD}/rootfs" + LOCK=./test.lock + CHECK_REGEX='\||;|&|&&|\|\||>|>>|<|,|#|!|\$' ++ARCH=$(arch) + + function show_options() { + cat << EOF +@@ -76,9 +77,14 @@ function init_part() { + offset=$(echo "${offset}*512" | bc) + local loop=$(losetup -f) + losetup -o "${offset}" --sizelimit "${sizelimit}" "${loop}" system.img +- mkfs.ext4 -L "$2" "${loop}" +- mount -t ext4 "${loop}" "$3" +- rm -rf "$3/lost+found" ++ if [ $2 == "BOOT" ];then ++ mkfs.vfat -n "$2" "${loop}" ++ mount -t vfat "${loop}" "$3" ++ else ++ mkfs.ext4 -L "$2" "${loop}" ++ mount -t ext4 "${loop}" "$3" ++ rm -rf "$3/lost+found" ++ fi + } + + function delete_dir() { +@@ -183,12 +189,15 @@ function install_packages() { + fi + + local rpms=$(cat ./rpmlist | tr "\n" " ") +- yum -y --installroot="${RPM_ROOT}" install --nogpgcheck --setopt install_weak_deps=False ${rpms} +- yum -y --installroot="${RPM_ROOT}" clean all ++ if [ "${ARCH}" == "x86_64" ]; then ++ yum -y --installroot="${RPM_ROOT}" install --nogpgcheck --setopt install_weak_deps=False ${rpms} grub2 grub2-efi-x64-modules grub2-pc-modules ++ elif [ "${ARCH}" == "aarch64" ]; then ++ yum -y --installroot="${RPM_ROOT}" install --nogpgcheck --setopt install_weak_deps=False ${rpms} grub2-efi-aa64-modules ++ fi ++ yum -y --installroot="${RPM_ROOT}" clean all + } + + function install_misc() { +- cp grub.cfg "${RPM_ROOT}/boot/grub2/" + cp ../files/*mount ../files/os-agent.service "${RPM_ROOT}/usr/lib/systemd/system/" + cp ../files/os-release "${RPM_ROOT}/usr/lib/" + cp "${AGENT_PATH}" "${RPM_ROOT}/usr/bin" +@@ -204,38 +213,46 @@ EOF + mv "${RPM_ROOT}"/boot/initramfs* "${RPM_ROOT}/boot/initramfs.img" + + cp set_in_chroot.sh "${RPM_ROOT}" +- ROOT_PWD="${PASSWD}" chroot "$RPM_ROOT" bash /set_in_chroot.sh ++ ROOT_PWD="${PASSWD}" chroot "${RPM_ROOT}" bash /set_in_chroot.sh + rm "${RPM_ROOT}/set_in_chroot.sh" + } + + function create_img() { + rm -f system.img update.img + qemu-img create system.img ${IMG_SIZE}G +- parted system.img -- mklabel msdos +- parted system.img -- mkpart primary ext4 1MiB 20MiB +- parted system.img -- mkpart primary ext4 20MiB 2120MiB +- parted system.img -- mkpart primary ext4 2120MiB 4220MiB +- parted system.img -- mkpart primary ext4 4220MiB 100% +- +- local device=$(losetup -f) +- losetup "${device}" system.img +- +- mkdir -p "${TMP_MOUNT_PATH}" +- +- init_part system.img2 ROOT-A "${TMP_MOUNT_PATH}" +- local grub2_path="${TMP_MOUNT_PATH}/boot/grub2" +- mkdir -p "${grub2_path}" +- init_part system.img1 GRUB2 "${grub2_path}" +- +- tar -x -C "${TMP_MOUNT_PATH}" -f os.tar +- sync +- +- dd if=/dev/disk/by-label/ROOT-A of=update.img bs=8M +- mount_proc_dev_sys "${TMP_MOUNT_PATH}" +- chroot "${TMP_MOUNT_PATH}" grub2-install --modules="biosdisk part_msdos" "${device}" +- sync +- unmount_dir "${TMP_MOUNT_PATH}" +- ++ parted system.img -- mklabel msdos ++ parted system.img -- mkpart primary fat16 1MiB 60MiB ++ parted system.img -- mkpart primary ext4 60MiB 2160MiB ++ parted system.img -- mkpart primary ext4 2160MiB 4260MiB ++ parted system.img -- mkpart primary ext4 4260MiB 100% ++ ++ local device=$(losetup -f) ++ losetup "${device}" system.img ++ ++ mkdir -p "${TMP_MOUNT_PATH}" ++ ++ init_part system.img2 ROOT-A "${TMP_MOUNT_PATH}" ++ local BOOT_PATH=${TMP_MOUNT_PATH}/boot ++ mkdir -p ${BOOT_PATH} ++ chmod 755 ${BOOT_PATH} ++ init_part system.img1 BOOT "${BOOT_PATH}" ++ ++ mv -f ${RPM_ROOT}/boot/* ${BOOT_PATH} || true ++ [ -d ${RPM_ROOT}/boot/ ] && rm -rf ${RPM_ROOT}/boot/ ++ sudo mv -t ${TMP_MOUNT_PATH} ${RPM_ROOT}/* || true ++ cp bootloader.sh "${TMP_MOUNT_PATH}" ++ mount_proc_dev_sys "${TMP_MOUNT_PATH}" ++ DEVICE="${device}" chroot "${TMP_MOUNT_PATH}" bash bootloader.sh ++ cp grub.cfg ${TMP_MOUNT_PATH}/boot/grub2 ++ cp grub.cfg ${TMP_MOUNT_PATH}/boot/efi/EFI/openEuler ++ rm -rf "${TMP_MOUNT_PATH}/bootloader.sh" ++ sync ++ ++ dd if=/dev/disk/by-label/ROOT-A of=update.img bs=8M ++ sync ++ unmount_dir "${TMP_MOUNT_PATH}" ++ ++ + init_part system.img3 ROOT-B "${TMP_MOUNT_PATH}" + umount "${TMP_MOUNT_PATH}" + +@@ -251,8 +268,6 @@ function create_os_tar() { + install_packages + install_misc + unmount_dir "${RPM_ROOT}" +- +- tar -C "${RPM_ROOT}" -cf ./os.tar . + } + + test_lock +diff --git a/scripts/grub.cfg b/scripts/grub.cfg +index d10e4cf..90507c4 100644 +--- a/scripts/grub.cfg ++++ b/scripts/grub.cfg +@@ -92,12 +92,12 @@ menuentry 'A' --class KubeOS --class gnu-linux --class gnu --class os --unrestri + insmod ext2 + set root='hd0,msdos2' + if [ x$feature_platform_search_hint = xy ]; then +- search --no-floppy --file --set=root --hint-bios=hd0,msdos2 --hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2 /boot/vmlinuz ++ search --no-floppy --file --set=root --hint-bios=hd0,msdos2 --hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2 /vmlinuz + else +- search --no-floppy --file --set=root /boot/vmlinuz ++ search --no-floppy --file --set=root /vmlinuz + fi +- linux /boot/vmlinuz root=/dev/sda2 ro rootfstype=ext4 nomodeset quiet oops=panic softlockup_panic=1 nmi_watchdog=1 rd.shell=0 selinux=0 crashkernel=256M panic=3 +- initrd /boot/initramfs.img ++ linux /vmlinuz root=/dev/sda2 ro rootfstype=ext4 nomodeset quiet oops=panic softlockup_panic=1 nmi_watchdog=1 rd.shell=0 selinux=0 crashkernel=256M panic=3 ++ initrd /initramfs.img + } + + menuentry 'B' --class KubeOS --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'KubeOS-B' { +@@ -108,12 +108,12 @@ menuentry 'B' --class KubeOS --class gnu-linux --class gnu --class os --unrestri + insmod ext2 + set root='hd0,msdos3' + if [ x$feature_platform_search_hint = xy ]; then +- search --no-floppy --file --set=root --hint-bios=hd0,msdos3 --hint-efi=hd0,msdos3 --hint-baremetal=ahci0,msdos3 /boot/vmlinuz ++ search --no-floppy --file --set=root --hint-bios=hd0,msdos3 --hint-efi=hd0,msdos3 --hint-baremetal=ahci0,msdos3 /vmlinuz + else +- search --no-floppy --file --set=root /boot/vmlinuz ++ search --no-floppy --file --set=root /vmlinuz + fi +- linux /boot/vmlinuz root=/dev/sda3 ro rootfstype=ext4 nomodeset quiet oops=panic softlockup_panic=1 nmi_watchdog=1 rd.shell=0 selinux=0 crashkernel=256M panic=3 +- initrd /boot/initramfs.img ++ linux /vmlinuz root=/dev/sda3 ro rootfstype=ext4 nomodeset quiet oops=panic softlockup_panic=1 nmi_watchdog=1 rd.shell=0 selinux=0 crashkernel=256M panic=3 ++ initrd /initramfs.img + } + + ### END /etc/grub.d/10_linux ### +diff --git a/scripts/rpmlist b/scripts/rpmlist +index 93c277c..7a9adfa 100644 +--- a/scripts/rpmlist ++++ b/scripts/rpmlist +@@ -1,6 +1,7 @@ + kernel + passwd +-grub2 ++grub2-efi ++grub2-tools + dhcp + NetworkManager + openssh-server +diff --git a/scripts/set_in_chroot.sh b/scripts/set_in_chroot.sh +index 3b8313f..49e3894 100644 +--- a/scripts/set_in_chroot.sh ++++ b/scripts/set_in_chroot.sh +@@ -1,7 +1,7 @@ + #!/bin/bash + ln -s /usr/lib/systemd/system/os-agent.service /usr/lib/systemd/system/multi-user.target.wants/os-agent.service + ln -s /usr/lib/systemd/system/kubelet.service /usr/lib/systemd/system/multi-user.target.wants/kubelet.service +-ln -s /usr/lib/systemd/system/boot-grub2.mount /lib/systemd/system/local-fs.target.wants/boot-grub2.mount ++ln -s /usr/lib/systemd/system/boot.mount /lib/systemd/system/local-fs.target.wants/boot.mount + ln -s /usr/lib/systemd/system/etc.mount /lib/systemd/system/local-fs.target.wants/etc.mount + + str=`sed -n '/^root:/p' /etc/shadow | awk -F "root:" '{print $2}'` +-- +2.30.0 + diff --git a/KubeOS.spec b/KubeOS.spec index 7948a44..db61b04 100644 --- a/KubeOS.spec +++ b/KubeOS.spec @@ -2,13 +2,13 @@ Name: KubeOS Version: 1.0.1 -Release: 4 +Release: 5 Summary: O&M platform used to update the whole OS as an entirety License: Mulan PSL v2 Source0: https://gitee.com/openeuler/KubeOS/repository/archive/v%{version}.tar.gz Patch1: 0001-KubeOS-modify-checks-in-generate.sh-and-change-modul.patch Patch2: 0002-change-generate-argument-from-isopath-to-repopath.patch -ExclusiveArch: x86_64 +Patch3: 0003-KubeOS-add-arm-architecture-support-to-the-OS-image.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: make BuildRequires: golang >= 1.13 @@ -21,7 +21,7 @@ it should be running in kubernetes environment. %package scripts Summary: Scripts to build the os image and binaries of os-proxy and os-operator -Requires: qemu-img, parted, bc, tar, docker +Requires: qemu-img, parted, bc, tar, docker, dosfstools %description scripts The scripts package includes scripts which could build the os image and binaries of os-proxy and os-operator @@ -47,9 +47,10 @@ install -p -m 0600 ./scripts/rpmlist %{buildroot}/opt/kubeOS/scripts install -p -m 0500 ./scripts/generate.sh %{buildroot}/opt/kubeOS/scripts install -p -m 0500 ./scripts/set_in_chroot.sh %{buildroot}/opt/kubeOS/scripts install -p -m 0600 ./scripts/grub.cfg %{buildroot}/opt/kubeOS/scripts +install -p -m 0500 ./scripts/bootloader.sh %{buildroot}/opt/kubeOS/scripts install -d -m 0740 %{buildroot}/opt/kubeOS/files -install -p -m 0600 ./files/boot-grub2.mount %{buildroot}/opt/kubeOS/files +install -p -m 0600 ./files/boot.mount %{buildroot}/opt/kubeOS/files install -p -m 0600 ./files/etc.mount %{buildroot}/opt/kubeOS/files install -p -m 0600 ./files/persist.mount %{buildroot}/opt/kubeOS/files install -p -m 0600 ./files/var.mount %{buildroot}/opt/kubeOS/files @@ -59,7 +60,7 @@ install -p -m 0600 ./files/os-release %{buildroot}/opt/kubeOS/files %files %attr(0500,root,root) /opt/kubeOS/bin/os-agent %defattr(-,root,root,0500) -%attr(0600,root,root) /opt/kubeOS/files/boot-grub2.mount +%attr(0600,root,root) /opt/kubeOS/files/boot.mount %attr(0600,root,root) /opt/kubeOS/files/etc.mount %attr(0600,root,root) /opt/kubeOS/files/persist.mount %attr(0600,root,root) /opt/kubeOS/files/var.mount @@ -74,11 +75,18 @@ install -p -m 0600 ./files/os-release %{buildroot}/opt/kubeOS/files %attr(0500,root,root) /opt/kubeOS/scripts/generate.sh %attr(0500,root,root) /opt/kubeOS/scripts/set_in_chroot.sh %attr(0600,root,root) /opt/kubeOS/scripts/grub.cfg +%attr(0500,root,root) /opt/kubeOS/scripts/bootloader.sh %clean rm -rfv %{buildroot} %changelog +* Fri Dec 17 2021 liyuanrong - 1.0.1-5 +- Type:requirement +- CVE:NA +- SUG:restart +- DESC:add arm architecture support to the OS image + * Wed Dec 08 2021 linxiaoxu - 1.0.1-4 - Type:requirement - CVE:NA -- Gitee