From cb9412d95537a8096d0e6d331ebc7171ea2c5d43 Mon Sep 17 00:00:00 2001 From: stedylan <836671668@qq.com> Date: Sat, 6 Aug 2022 01:40:44 +0800 Subject: [PATCH 1/5] add physical machine boot --- scripts/00bootup/Global.cfg | 12 ++ scripts/00bootup/grub.cfg | 183 ++++++++++++++++++ scripts/00bootup/module-setup.sh | 29 +++ scripts/00bootup/mount.sh | 313 +++++++++++++++++++++++++++++++ scripts/create/imageCreate.sh | 3 +- scripts/rpmlist | 10 +- scripts/set_in_chroot.sh | 3 + 7 files changed, 550 insertions(+), 3 deletions(-) create mode 100644 scripts/00bootup/Global.cfg create mode 100644 scripts/00bootup/grub.cfg create mode 100644 scripts/00bootup/module-setup.sh create mode 100644 scripts/00bootup/mount.sh diff --git a/scripts/00bootup/Global.cfg b/scripts/00bootup/Global.cfg new file mode 100644 index 00000000..29ed2f7d --- /dev/null +++ b/scripts/00bootup/Global.cfg @@ -0,0 +1,12 @@ +# rootfs file name +rootfs_name=os.tar + +# select the target disk to install kubeOS +disk=/dev/sda + +# address where stores the rootfs on the http server +server_ip=192.168.1.50 + +local_ip=192.168.1.100 + +route_ip=192.168.1.1 \ No newline at end of file diff --git a/scripts/00bootup/grub.cfg b/scripts/00bootup/grub.cfg new file mode 100644 index 00000000..90507c45 --- /dev/null +++ b/scripts/00bootup/grub.cfg @@ -0,0 +1,183 @@ +## Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. + # KubeOS is licensed under the Mulan PSL v2. + # You can use this software according to the terms and conditions of the Mulan PSL v2. + # You may obtain a copy of Mulan PSL v2 at: + # http://license.coscl.org.cn/MulanPSL2 + # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR + # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR + # PURPOSE. +## See the Mulan PSL v2 for more details. +set pager=1 + +if [ -f ${config_directory}/grubenv ]; then + load_env -f ${config_directory}/grubenv +elif [ -s $prefix/grubenv ]; then + load_env +fi +if [ "${next_entry}" ] ; then + set default="${next_entry}" + set next_entry= + save_env next_entry + set boot_once=true +else + set default="${saved_entry}" +fi + +if [ x"${feature_menuentry_id}" = xy ]; then + menuentry_id_option="--id" +else + menuentry_id_option="" +fi + +export menuentry_id_option + +if [ "${prev_saved_entry}" ]; then + set saved_entry="${prev_saved_entry}" + save_env saved_entry + set prev_saved_entry= + save_env prev_saved_entry + set boot_once=true +fi + +function savedefault { + if [ -z "${boot_once}" ]; then + saved_entry="${chosen}" + save_env saved_entry + fi +} + +function load_video { + if [ x$feature_all_video_module = xy ]; then + insmod all_video + else + insmod efi_gop + insmod efi_uga + insmod ieee1275_fb + insmod vbe + insmod vga + insmod video_bochs + insmod video_cirrus + fi +} + +terminal_output console +if [ x$feature_timeout_style = xy ] ; then + set timeout_style=menu + set timeout=5 +# Fallback normal timeout code in case the timeout_style feature is +# unavailable. +else + set timeout=5 +fi +set superusers="root" +### END /etc/grub.d/00_header ### + +### BEGIN /etc/grub.d/01_users ### +if [ -f ${prefix}/user.cfg ]; then + source ${prefix}/user.cfg + if [ -n "${GRUB2_PASSWORD}" ]; then + set superusers="root" + export superusers + password_pbkdf2 root ${GRUB2_PASSWORD} + fi +fi +### END /etc/grub.d/01_users ### + +### BEGIN /etc/grub.d/10_linux ### +menuentry 'A' --class KubeOS --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'KubeOS-A' { + load_video + set gfxpayload=keep + insmod gzio + insmod part_msdos + 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 /vmlinuz + else + search --no-floppy --file --set=root /vmlinuz + fi + 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' { + load_video + set gfxpayload=keep + insmod gzio + insmod part_msdos + 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 /vmlinuz + else + search --no-floppy --file --set=root /vmlinuz + fi + 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 ### + +### BEGIN /etc/grub.d/10_reset_boot_success ### +# Hiding the menu is ok if last boot was ok or if this is a first boot attempt to boot the entry +if [ "${boot_success}" = "1" -o "${boot_indeterminate}" = "1" ]; then + set menu_hide_ok=1 +else + set menu_hide_ok=0 +fi +# Reset boot_indeterminate after a successful boot +if [ "${boot_success}" = "1" ] ; then + set boot_indeterminate=0 +# Avoid boot_indeterminate causing the menu to be hidden more then once +elif [ "${boot_indeterminate}" = "1" ]; then + set boot_indeterminate=2 +fi +# Reset boot_success for current boot +set boot_success=0 +save_env boot_success boot_indeterminate +### END /etc/grub.d/10_reset_boot_success ### + +### BEGIN /etc/grub.d/12_menu_auto_hide ### +if [ x$feature_timeout_style = xy ] ; then + if [ "${menu_show_once}" ]; then + unset menu_show_once + save_env menu_show_once + set timeout_style=menu + set timeout=60 + elif [ "${menu_auto_hide}" -a "${menu_hide_ok}" = "1" ]; then + set orig_timeout_style=${timeout_style} + set orig_timeout=${timeout} + if [ "${fastboot}" = "1" ]; then + # timeout_style=menu + timeout=0 avoids the countdown code keypress check + set timeout_style=menu + set timeout=0 + else + set timeout_style=hidden + set timeout=1 + fi + fi +fi +### END /etc/grub.d/12_menu_auto_hide ### + +### BEGIN /etc/grub.d/20_linux_xen ### +### END /etc/grub.d/20_linux_xen ### + +### BEGIN /etc/grub.d/20_ppc_terminfo ### +### END /etc/grub.d/20_ppc_terminfo ### + +### BEGIN /etc/grub.d/30_uefi-firmware ### +### END /etc/grub.d/30_uefi-firmware ### + +### BEGIN /etc/grub.d/40_custom ### +# This file provides an easy way to add custom menu entries. Simply type the +# menu entries you want to add after this comment. Be careful not to change +# the 'exec tail' line above. +### END /etc/grub.d/40_custom ### + +### BEGIN /etc/grub.d/41_custom ### +if [ -f ${config_directory}/custom.cfg ]; then + source ${config_directory}/custom.cfg +elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then + source $prefix/custom.cfg; +fi +### END /etc/grub.d/41_custom ### diff --git a/scripts/00bootup/module-setup.sh b/scripts/00bootup/module-setup.sh new file mode 100644 index 00000000..db0511ba --- /dev/null +++ b/scripts/00bootup/module-setup.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +check() { + return 0 +} + +depends() { + echo systemd +} + +install() { + inst_multiple -o grub2-mkimage mkfs.ext4 mkfs.vfat lsblk tar cpio gunzip lspci parted dhclient ifconfig curl hwinfo head tee arch df awk route + inst_hook mount 00 "$moddir/mount.sh" + inst_simple "$moddir/mount.sh" "/mount.sh" + inst_simple "$moddir/Global.cfg" "/Global.cfg" + inst_simple "$moddir/grub.cfg" "/grub.cfg" +} + +installkernel() { + hostonly='' \ + instmods \ + =drivers/ata \ + =drivers/nvme \ + =drivers/scsi \ + =drivers/net \ + =fs/fat \ + =fs/nls +} + diff --git a/scripts/00bootup/mount.sh b/scripts/00bootup/mount.sh new file mode 100644 index 00000000..fe43b8f8 --- /dev/null +++ b/scripts/00bootup/mount.sh @@ -0,0 +1,313 @@ +#!/bin/bash +arch=$(arch) +min_size=8 +log=/install.log + +source /Global.cfg + +function CheckSpace() { + local disk_ava="$(parted -l | grep ${disk} | awk '{print $3}')" + if echo "${disk_ava}" | grep [GT]B$; then + if echo "${disk_ava}" | grep GB$; then + disk_ava="$(echo ${disk_ava} | awk -F G '{print $1}' | awk -F . '{print $1}')" + if [ "${disk_ava}" -lt ${min_size} ]; then + echo "The available disk space is not enough, at least ${min_size}GB." | tee -a ${log} + return 1 + fi + fi + else + echo "The available disk space is not enough, at least ${min_size}G." | tee -a ${log} + return 1 + fi + + return 0 +} + +function GetDisk() { + disks=$(hwinfo --disk --short | grep -vi "^disk" | awk '{print $1}') + if [ ! -z ${disks} ]; then + if [ ! -z ${disk} ] && echo "${disks[@]}" | grep -wq "${disk}" ; then + echo "${disk} exists, start partition" | tee -a ${log} + else + echo "disk not exist, choose default disk" | tee -a ${log} + disk=$(echo ${disks[0]}) + fi + else + echo "no disk found" | tee -a ${log} + return 1 + fi + + + CheckSpace + if [ $? -ne 0 ]; then + echo "no enough space on ${disk}" | tee -a ${log} + return 1 + fi + + return 0 +} + +function PartitionAndFormatting() { + echo "Partitioning and formatting disk $disk..." + # partition and format + parted ${disk} -s mklabel gpt >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "partition failed" | tee -a ${log} + return 1 + fi + + parted ${disk} -s mkpart primary fat16 1M 100M >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "partition failed" | tee -a ${log} + return 1 + fi + + parted ${disk} -s mkpart primary ext4 100M 2600M >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "partition failed" | tee -a ${log} + return 1 + fi + + parted ${disk} -s mkpart primary ext4 2600M 5100M >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "partition failed" | tee -a ${log} + return 1 + fi + + parted ${disk} -s mkpart primary ext4 5100M 100% >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "partition failed" | tee -a ${log} + return 1 + fi + + parted ${disk} -s set 1 boot on >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "partition failed" | tee -a ${log} + return 1 + fi + + mkfs.vfat -n "BOOT" ${disk}1 >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "format failed" | tee -a ${log} + return 1 + fi + + mkfs.ext4 -L "ROOT-A" ${disk}2 >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "format failed" | tee -a ${log} + return 1 + fi + + mkfs.ext4 -L "ROOT-B" ${disk}3 >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "format failed" | tee -a ${log} + return 1 + fi + + mkfs.ext4 -L "PERSIST" ${disk}4 >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "format failed" | tee -a ${log} + return 1 + fi + + return 0 +} + +function InitNetwork() { + echo "Initializing network..." + # 获取网卡信息,默认只有一个网卡 + net_name=`ifconfig -a | awk '{print $1}' | grep : | grep '^e' | awk -F: '{print $1}'` + # dhclient --timeout 60 >> ${log} 2>&1 + + ifconfig ${net_name} up + if [ $? -ne 0 ]; then + echo "load net card failed" | tee -a ${log} + return 1 + fi + sleep 3 + + ifconfig ${net_name} ${local_ip} netmask 255.255.255.0 >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "ip set failed" | tee -a ${log} + return 1 + fi + sleep 3 + + route add default gw ${route_ip} >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "add route failed" | tee -a ${log} + return 1 + fi + sleep 3 + + + + return 0 +} + +function MountRoot() { + echo "Mounting rootfs..." + # mount rootfs + mount ${disk}2 /sysroot >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "mount rootfs failed" | tee -a ${log} + return 1 + fi + + return 0 +} + +function MountPersist() { + echo "Mounting persist" + mkdir /persist + mount ${disk}4 /persist >> ${log} 2>&1 + if [ $? -ne 0 ]; then + return 1 + fi + mkdir /persist/{var,etc,etcwork} + mkdir -p /persist/etc/KubeOS/certs + return 0 +} + +function GetRootfs() { + echo "Downloading rootfs..." + + curl -o /persist/${rootfs_name} http://${server_ip}/${rootfs_name} + if [ ! -e "/persist/${rootfs_name}" ]; then + echo "download rootfs failed" | tee -a ${log} + return 1 + fi + + tar -xvf /persist/${rootfs_name} -C /sysroot + if [ $? -ne 0 ]; then + echo "decompose rootfs failed" | tee -a ${log} + return 1 + fi + + rm -rf /persist/${rootfs_name} + + return 0 +} + +function Inst_Grub2_x86() { + # copy the files that boot need + cp -r /sysroot/usr/lib/grub/x86_64-efi /sysroot/boot/efi/EFI/openEuler + eval "grub2-mkimage -d /sysroot/usr/lib/grub/x86_64-efi -O x86_64-efi --output=/sysroot/boot/efi/EFI/openEuler/grubx64.efi '--prefix=(,gpt1)/EFI/openEuler' fat part_gpt part_msdos linux" >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "grub2-mkimage on x86 failed" | tee -a ${log} + return 1 + fi + + mkdir -p /sysroot/boot/efi/BOOT/ + cp -f /sysroot/boot/efi/EFI/openEuler/grubx64.efi /sysroot/boot/efi/BOOT/BOOTX64.EFI + + return 0 +} + +function Inst_Grub2_aarch64() { + cp -r /sysroot/usr/lib/grub/arm64-efi /sysroot/boot/efi/EFI/openEuler/ + eval "grub2-mkimage -d /sysroot/usr/lib/grub/arm64-efi -O arm64-efi --output=/sysroot/boot/efi/EFI/openEuler/grubaa64.efi '--prefix=(,gpt1)/EFI/openEuler' fat part_gpt part_msdos linux" >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "grub2-mkimage on aarch64 failed" | tee -a ${log} + return 1 + fi + + mkdir -p /sysroot/boot/EFI/BOOT/ + cp -f /sysroot/boot/efi/EFI/openEuler/grubaa64.efi /sysroot/boot/EFI/BOOT/BOOTAA64.EFI + + return 0 +} + +function SetBoot() { + # mount boot + echo "Mounting boot" + mount ${disk}1 /sysroot/boot/efi + + if [ $arch == "x86_64" ]; then + Inst_Grub2_x86 + if [ $? -ne 0 ]; then + echo "install grub on x86 failed" | tee -a ${log} + return 1 + fi + fi + + if [ $arch == "aarch64" ]; then + Inst_Grub2_aarch64 + if [ $? -ne 0 ]; then + echo "install grub on aarch64 failed" | tee -a ${log} + return 1 + fi + fi + + return 0 +} + +function Bootup_Main() { + # get disk + echo "Checking disk info..." | tee -a ${log} + GetDisk + if [ $? -ne 0 ]; then + echo "Checking disk info failed" | tee -a ${log} + return 1 + fi + + # partition and format disk + echo "Partion and formatting..." | tee -a ${log} + PartitionAndFormatting + if [ $? -ne 0 ]; then + echo "Partition and formatting disk failed" | tee -a ${log} + return 1 + fi + + # init network + echo "Initializing network..." | tee -a ${log} + InitNetwork + if [ $? -ne 0 ]; then + echo "Initializing network failed" | tee -a ${log} + return 1 + fi + + # mount partitions + echo "Mounting root..." | tee -a ${log} + MountRoot + if [ $? -ne 0 ]; then + echo "Mounting root failed" | tee -a ${log} + return 1 + fi + + # mount persist + echo "Mounting persisst..." | tee -a ${log} + MountPersist + if [ $? -ne 0 ]; then + echo "Mounting persist failed" | tee -a ${log} + return 1 + fi + + # download rootfs + echo "Downloading rootfs..." | tee -a ${log} + GetRootfs + if [ $? -ne 0 ]; then + echo "Downloading rootfs failed" | tee -a ${log} + return 1 + fi + + # set boot + echo "Setting boot..." | tee -a ${log} + SetBoot + if [ $? -ne 0 ]; then + echo "Setting boot failed" | tee -a ${log} + return 1 + fi + + return 0 +} + +Bootup_Main +ret=$? +if [ ${ret} -eq 0 ]; then + echo "kubeOS install success! switch to root" | tee -a ${log} + cp ${log} /persist +else + echo "kubeOS install failed, see install.log" | tee -a ${log} +fi + diff --git a/scripts/create/imageCreate.sh b/scripts/create/imageCreate.sh index f8dafbe0..adbf6e05 100644 --- a/scripts/create/imageCreate.sh +++ b/scripts/create/imageCreate.sh @@ -62,7 +62,7 @@ function create_pxe_img() { case $opt in "repo") create_os_tar_from_repo "$@" - tar -xvf os.tar ./boot/initramfs.img + tar -xvf os.tar ./initramfs.img tar -xvf os.tar ./boot/vmlinuz ;; "docker") @@ -71,7 +71,6 @@ function create_pxe_img() { tar -xvf os.tar boot/vmlinuz ;; esac - mv os.tar kubeos.tar } function create_docker_image() { local DOCKER_IMG="$5" diff --git a/scripts/rpmlist b/scripts/rpmlist index 7a9adfac..077a1642 100644 --- a/scripts/rpmlist +++ b/scripts/rpmlist @@ -13,4 +13,12 @@ socat conntrack-tools ebtables ethtool -rsyslog \ No newline at end of file +rsyslog +vi +net-tools +hwinfo +dracut +coreutils +gawk +parted +dosfstools \ No newline at end of file diff --git a/scripts/set_in_chroot.sh b/scripts/set_in_chroot.sh index bacef789..4b061df6 100644 --- a/scripts/set_in_chroot.sh +++ b/scripts/set_in_chroot.sh @@ -11,3 +11,6 @@ sed -i '/^root:/d' /etc/shadow_bak echo "root:"${ROOT_PWD}${str:1} > /etc/shadow cat /etc/shadow_bak >> /etc/shadow rm -rf /etc/shadow_bak + +dracut -f -v --add bootup /initramfs.img --kver `ls /lib/modules` +rm -rf /usr/lib/dracut/modules.d/00bootup \ No newline at end of file -- Gitee From 13ebf91ab51458c0b27530d866c88e8c67a570fe Mon Sep 17 00:00:00 2001 From: stedylan <836671668@qq.com> Date: Sat, 6 Aug 2022 10:43:11 +0800 Subject: [PATCH 2/5] add doc --- docs/pxe.md | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 docs/pxe.md diff --git a/docs/pxe.md b/docs/pxe.md new file mode 100644 index 00000000..4a5a6ef2 --- /dev/null +++ b/docs/pxe.md @@ -0,0 +1,99 @@ +## 关闭防火墙以及selinux +### 关闭防火墙 +``` bash + systemctl stop firewalld +``` +关闭selinux +临时关闭 +`setenforce 0` +永久关闭 +``` bash + vim /etc/selinux/config + + SELINUX=disabled +``` +查询selinux状态 +`getenforce` +## 配置静态IP +``` + vim /etc/sysconfig/network-scripts/ifcfg-enp3s0 # enp3s0为网卡名,不同机器可能不一样 + + # 修改为如下 + TYPE=Ethernet + BOOTPROTO=static + NAME=enp3s0 + DEVICE=enp3s0 + ONBOOT=yes + IPADDR=192.168.1.50 + NETMASK=255.255.255.0 + GATEWAY=192.168.1.1 + + # 载入配置 + nmcli conn up enp3s0 +``` +## 安装dhcp, tftp, http +### httpd的安装 +``` bash + dnf install httpd -y + systemctl start httpd + systemctl enable httpd +``` +### tftp的安装与配置 +安装 +``` bash + dnf install tftp-server -y + systemctl start tftp + systemctl enable tftp +``` +复制openEuler官方镜像的目录pxeboot里的`grubx64.efi`以及`grub.cfg`到`tftpboot`目录下 + +复制生成的物理机启动文件`initramfs.img`以及`vmlinuz`到`tftpboot`目录里,并设置相应的权限 + +修改grub.cfg +打开文件 +``` bash + vim /var/lib/tftpboot/grub.cfg +``` +修改目录部分为如下 +``` bash + menuentry 'kubeOS install' --class openeuler --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-5.10.0-60.18.0.50.oe2203.x86_64-advanced-96974102-92e3-4dbf-9deb-d77dc0a29c92' { + load_video + set gfxpayload=keep + insmod gzio + insmod part_gpt + insmod ext2 + set root=(tftp,192.168.1.50) + linux /vmlinuz-5.10.0-60.18.0.50.oe2203.x86_64 + initrd /kubeos-initrd.img + } +``` +root部分为pxe服务器地址 +### dhcp安装和配置 +安装 +``` bash + dnf install dhcp -y +``` +配置 +打开配置文件 +`vim /etc/dhcp/dhcpd.conf` +修改配置 +``` bash + ddns-update-style interim; + ignore client-updates; + filename "grubx64.efi"; + next-server 192.168.1.50; + subnet 192.168.1.0 netmask 255.255.255.0 { + option routers 192.168.1.1; + option subnet-mask 255.255.255.0; + range dynamic-bootp 192.168.1.100 192.168.1.200; + default-lease-time 21600; + max-lease-time 43200; + } +``` +启动服务 +``` bash + systemctl start dhcpd + systemctl enable dhcpd +``` + +生成之后,重启,开启UEFI以及pxe启动选项 \ No newline at end of file -- Gitee From c02e8e9f32f64ebfa6fe32a13129edab4cd8c287 Mon Sep 17 00:00:00 2001 From: stedylan <836671668@qq.com> Date: Sun, 7 Aug 2022 00:23:50 +0800 Subject: [PATCH 3/5] fix bug --- scripts/00bootup/Global.cfg | 2 +- scripts/00bootup/grub.cfg | 183 --------------------------------- scripts/00bootup/mount.sh | 33 ++++-- scripts/create/imageCreate.sh | 5 +- scripts/create/rootfsCreate.sh | 1 + 5 files changed, 31 insertions(+), 193 deletions(-) delete mode 100644 scripts/00bootup/grub.cfg diff --git a/scripts/00bootup/Global.cfg b/scripts/00bootup/Global.cfg index 29ed2f7d..cad4e33c 100644 --- a/scripts/00bootup/Global.cfg +++ b/scripts/00bootup/Global.cfg @@ -1,5 +1,5 @@ # rootfs file name -rootfs_name=os.tar +rootfs_name=kubeos.tar # select the target disk to install kubeOS disk=/dev/sda diff --git a/scripts/00bootup/grub.cfg b/scripts/00bootup/grub.cfg deleted file mode 100644 index 90507c45..00000000 --- a/scripts/00bootup/grub.cfg +++ /dev/null @@ -1,183 +0,0 @@ -## Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. - # KubeOS is licensed under the Mulan PSL v2. - # You can use this software according to the terms and conditions of the Mulan PSL v2. - # You may obtain a copy of Mulan PSL v2 at: - # http://license.coscl.org.cn/MulanPSL2 - # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR - # IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR - # PURPOSE. -## See the Mulan PSL v2 for more details. -set pager=1 - -if [ -f ${config_directory}/grubenv ]; then - load_env -f ${config_directory}/grubenv -elif [ -s $prefix/grubenv ]; then - load_env -fi -if [ "${next_entry}" ] ; then - set default="${next_entry}" - set next_entry= - save_env next_entry - set boot_once=true -else - set default="${saved_entry}" -fi - -if [ x"${feature_menuentry_id}" = xy ]; then - menuentry_id_option="--id" -else - menuentry_id_option="" -fi - -export menuentry_id_option - -if [ "${prev_saved_entry}" ]; then - set saved_entry="${prev_saved_entry}" - save_env saved_entry - set prev_saved_entry= - save_env prev_saved_entry - set boot_once=true -fi - -function savedefault { - if [ -z "${boot_once}" ]; then - saved_entry="${chosen}" - save_env saved_entry - fi -} - -function load_video { - if [ x$feature_all_video_module = xy ]; then - insmod all_video - else - insmod efi_gop - insmod efi_uga - insmod ieee1275_fb - insmod vbe - insmod vga - insmod video_bochs - insmod video_cirrus - fi -} - -terminal_output console -if [ x$feature_timeout_style = xy ] ; then - set timeout_style=menu - set timeout=5 -# Fallback normal timeout code in case the timeout_style feature is -# unavailable. -else - set timeout=5 -fi -set superusers="root" -### END /etc/grub.d/00_header ### - -### BEGIN /etc/grub.d/01_users ### -if [ -f ${prefix}/user.cfg ]; then - source ${prefix}/user.cfg - if [ -n "${GRUB2_PASSWORD}" ]; then - set superusers="root" - export superusers - password_pbkdf2 root ${GRUB2_PASSWORD} - fi -fi -### END /etc/grub.d/01_users ### - -### BEGIN /etc/grub.d/10_linux ### -menuentry 'A' --class KubeOS --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'KubeOS-A' { - load_video - set gfxpayload=keep - insmod gzio - insmod part_msdos - 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 /vmlinuz - else - search --no-floppy --file --set=root /vmlinuz - fi - 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' { - load_video - set gfxpayload=keep - insmod gzio - insmod part_msdos - 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 /vmlinuz - else - search --no-floppy --file --set=root /vmlinuz - fi - 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 ### - -### BEGIN /etc/grub.d/10_reset_boot_success ### -# Hiding the menu is ok if last boot was ok or if this is a first boot attempt to boot the entry -if [ "${boot_success}" = "1" -o "${boot_indeterminate}" = "1" ]; then - set menu_hide_ok=1 -else - set menu_hide_ok=0 -fi -# Reset boot_indeterminate after a successful boot -if [ "${boot_success}" = "1" ] ; then - set boot_indeterminate=0 -# Avoid boot_indeterminate causing the menu to be hidden more then once -elif [ "${boot_indeterminate}" = "1" ]; then - set boot_indeterminate=2 -fi -# Reset boot_success for current boot -set boot_success=0 -save_env boot_success boot_indeterminate -### END /etc/grub.d/10_reset_boot_success ### - -### BEGIN /etc/grub.d/12_menu_auto_hide ### -if [ x$feature_timeout_style = xy ] ; then - if [ "${menu_show_once}" ]; then - unset menu_show_once - save_env menu_show_once - set timeout_style=menu - set timeout=60 - elif [ "${menu_auto_hide}" -a "${menu_hide_ok}" = "1" ]; then - set orig_timeout_style=${timeout_style} - set orig_timeout=${timeout} - if [ "${fastboot}" = "1" ]; then - # timeout_style=menu + timeout=0 avoids the countdown code keypress check - set timeout_style=menu - set timeout=0 - else - set timeout_style=hidden - set timeout=1 - fi - fi -fi -### END /etc/grub.d/12_menu_auto_hide ### - -### BEGIN /etc/grub.d/20_linux_xen ### -### END /etc/grub.d/20_linux_xen ### - -### BEGIN /etc/grub.d/20_ppc_terminfo ### -### END /etc/grub.d/20_ppc_terminfo ### - -### BEGIN /etc/grub.d/30_uefi-firmware ### -### END /etc/grub.d/30_uefi-firmware ### - -### BEGIN /etc/grub.d/40_custom ### -# This file provides an easy way to add custom menu entries. Simply type the -# menu entries you want to add after this comment. Be careful not to change -# the 'exec tail' line above. -### END /etc/grub.d/40_custom ### - -### BEGIN /etc/grub.d/41_custom ### -if [ -f ${config_directory}/custom.cfg ]; then - source ${config_directory}/custom.cfg -elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then - source $prefix/custom.cfg; -fi -### END /etc/grub.d/41_custom ### diff --git a/scripts/00bootup/mount.sh b/scripts/00bootup/mount.sh index fe43b8f8..a04a364f 100644 --- a/scripts/00bootup/mount.sh +++ b/scripts/00bootup/mount.sh @@ -162,6 +162,7 @@ function MountPersist() { mkdir /persist mount ${disk}4 /persist >> ${log} 2>&1 if [ $? -ne 0 ]; then + echo "mount persist failed" | tee -a ${log} return 1 fi mkdir /persist/{var,etc,etcwork} @@ -169,6 +170,17 @@ function MountPersist() { return 0 } +function MountBoot() { + echo "Mounting boot" + mkdir -p /sysroot/boot/efi + mount ${disk}1 /sysroot/boot/efi >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "mount boot failed" | tee -a ${log} + return 1 + fi + return 0 +} + function GetRootfs() { echo "Downloading rootfs..." @@ -198,8 +210,8 @@ function Inst_Grub2_x86() { return 1 fi - mkdir -p /sysroot/boot/efi/BOOT/ - cp -f /sysroot/boot/efi/EFI/openEuler/grubx64.efi /sysroot/boot/efi/BOOT/BOOTX64.EFI + mkdir -p /sysroot/boot/efi/EFI/BOOT/ + cp -f /sysroot/boot/efi/EFI/openEuler/grubx64.efi /sysroot/boot/efi/EFI/BOOT/BOOTX64.EFI return 0 } @@ -212,18 +224,17 @@ function Inst_Grub2_aarch64() { return 1 fi - mkdir -p /sysroot/boot/EFI/BOOT/ - cp -f /sysroot/boot/efi/EFI/openEuler/grubaa64.efi /sysroot/boot/EFI/BOOT/BOOTAA64.EFI + mkdir -p /sysroot/boot/efi/EFI/BOOT/ + cp -f /sysroot/boot/efi/EFI/openEuler/grubaa64.efi /sysroot/boot/efi/EFI/BOOT/BOOTAA64.EFI return 0 } function SetBoot() { # mount boot - echo "Mounting boot" - mount ${disk}1 /sysroot/boot/efi + echo "Setting boot" - if [ $arch == "x86_64" ]; then + if [ $arch == "x86_64" ]; then Inst_Grub2_x86 if [ $? -ne 0 ]; then echo "install grub on x86 failed" | tee -a ${log} @@ -283,6 +294,14 @@ function Bootup_Main() { return 1 fi + # mount boot + echo "Mounting boot..." | tee -a ${log} + MountBoot + if [ $? -ne 0 ]; then + echo "Mounting boot failed" | tee -a ${log} + return 1 + fi + # download rootfs echo "Downloading rootfs..." | tee -a ${log} GetRootfs diff --git a/scripts/create/imageCreate.sh b/scripts/create/imageCreate.sh index adbf6e05..77e4618e 100644 --- a/scripts/create/imageCreate.sh +++ b/scripts/create/imageCreate.sh @@ -67,10 +67,11 @@ function create_pxe_img() { ;; "docker") create_os_tar_from_docker "$@" - tar -xvf os.tar boot/initramfs.img - tar -xvf os.tar boot/vmlinuz + tar -xvf os.tar ./initramfs.img + tar -xvf os.tar ./boot/vmlinuz ;; esac + mv os.tar kubeos.tar } function create_docker_image() { local DOCKER_IMG="$5" diff --git a/scripts/create/rootfsCreate.sh b/scripts/create/rootfsCreate.sh index 8049f093..e5c53d53 100644 --- a/scripts/create/rootfsCreate.sh +++ b/scripts/create/rootfsCreate.sh @@ -61,6 +61,7 @@ EOF mv "${RPM_ROOT}"/boot/initramfs* "${RPM_ROOT}/boot/initramfs.img" cp grub.cfg "${RPM_ROOT}"/boot/grub2 cp grub.cfg "${RPM_ROOT}"/boot/efi/EFI/openEuler + cp -r ./00bootup ${RPM_ROOT}/usr/lib/dracut/modules.d/ cp set_in_chroot.sh "${RPM_ROOT}" ROOT_PWD="${PASSWD}" chroot "${RPM_ROOT}" bash /set_in_chroot.sh rm "${RPM_ROOT}/set_in_chroot.sh" -- Gitee From 48e70065f294316ca2a800ecce8b7d1cf26055db Mon Sep 17 00:00:00 2001 From: stedylan <836671668@qq.com> Date: Sun, 7 Aug 2022 00:45:54 +0800 Subject: [PATCH 4/5] delete dracut grub --- scripts/00bootup/module-setup.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/00bootup/module-setup.sh b/scripts/00bootup/module-setup.sh index db0511ba..5460b2bc 100644 --- a/scripts/00bootup/module-setup.sh +++ b/scripts/00bootup/module-setup.sh @@ -13,7 +13,6 @@ install() { inst_hook mount 00 "$moddir/mount.sh" inst_simple "$moddir/mount.sh" "/mount.sh" inst_simple "$moddir/Global.cfg" "/Global.cfg" - inst_simple "$moddir/grub.cfg" "/grub.cfg" } installkernel() { -- Gitee From 2ee3842bf65005f89fc9535a29056e2a60347868 Mon Sep 17 00:00:00 2001 From: stedylan <836671668@qq.com> Date: Sat, 6 Aug 2022 01:40:44 +0800 Subject: [PATCH 5/5] Write a tool to support KubeOS deployment on physical machines. This tool uses dracut module to make partitions and formatting, set network infomation, get rootfs and set boot options in initramfs before switch to the real root. --- docs/pxe.md | 99 +++++++++ scripts/00bootup/Global.cfg | 12 ++ scripts/00bootup/module-setup.sh | 28 +++ scripts/00bootup/mount.sh | 332 +++++++++++++++++++++++++++++++ scripts/create/imageCreate.sh | 6 +- scripts/create/rootfsCreate.sh | 1 + scripts/rpmlist | 10 +- scripts/set_in_chroot.sh | 3 + 8 files changed, 487 insertions(+), 4 deletions(-) create mode 100644 docs/pxe.md create mode 100644 scripts/00bootup/Global.cfg create mode 100644 scripts/00bootup/module-setup.sh create mode 100644 scripts/00bootup/mount.sh diff --git a/docs/pxe.md b/docs/pxe.md new file mode 100644 index 00000000..4a5a6ef2 --- /dev/null +++ b/docs/pxe.md @@ -0,0 +1,99 @@ +## 关闭防火墙以及selinux +### 关闭防火墙 +``` bash + systemctl stop firewalld +``` +关闭selinux +临时关闭 +`setenforce 0` +永久关闭 +``` bash + vim /etc/selinux/config + + SELINUX=disabled +``` +查询selinux状态 +`getenforce` +## 配置静态IP +``` + vim /etc/sysconfig/network-scripts/ifcfg-enp3s0 # enp3s0为网卡名,不同机器可能不一样 + + # 修改为如下 + TYPE=Ethernet + BOOTPROTO=static + NAME=enp3s0 + DEVICE=enp3s0 + ONBOOT=yes + IPADDR=192.168.1.50 + NETMASK=255.255.255.0 + GATEWAY=192.168.1.1 + + # 载入配置 + nmcli conn up enp3s0 +``` +## 安装dhcp, tftp, http +### httpd的安装 +``` bash + dnf install httpd -y + systemctl start httpd + systemctl enable httpd +``` +### tftp的安装与配置 +安装 +``` bash + dnf install tftp-server -y + systemctl start tftp + systemctl enable tftp +``` +复制openEuler官方镜像的目录pxeboot里的`grubx64.efi`以及`grub.cfg`到`tftpboot`目录下 + +复制生成的物理机启动文件`initramfs.img`以及`vmlinuz`到`tftpboot`目录里,并设置相应的权限 + +修改grub.cfg +打开文件 +``` bash + vim /var/lib/tftpboot/grub.cfg +``` +修改目录部分为如下 +``` bash + menuentry 'kubeOS install' --class openeuler --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-5.10.0-60.18.0.50.oe2203.x86_64-advanced-96974102-92e3-4dbf-9deb-d77dc0a29c92' { + load_video + set gfxpayload=keep + insmod gzio + insmod part_gpt + insmod ext2 + set root=(tftp,192.168.1.50) + linux /vmlinuz-5.10.0-60.18.0.50.oe2203.x86_64 + initrd /kubeos-initrd.img + } +``` +root部分为pxe服务器地址 +### dhcp安装和配置 +安装 +``` bash + dnf install dhcp -y +``` +配置 +打开配置文件 +`vim /etc/dhcp/dhcpd.conf` +修改配置 +``` bash + ddns-update-style interim; + ignore client-updates; + filename "grubx64.efi"; + next-server 192.168.1.50; + subnet 192.168.1.0 netmask 255.255.255.0 { + option routers 192.168.1.1; + option subnet-mask 255.255.255.0; + range dynamic-bootp 192.168.1.100 192.168.1.200; + default-lease-time 21600; + max-lease-time 43200; + } +``` +启动服务 +``` bash + systemctl start dhcpd + systemctl enable dhcpd +``` + +生成之后,重启,开启UEFI以及pxe启动选项 \ No newline at end of file diff --git a/scripts/00bootup/Global.cfg b/scripts/00bootup/Global.cfg new file mode 100644 index 00000000..cad4e33c --- /dev/null +++ b/scripts/00bootup/Global.cfg @@ -0,0 +1,12 @@ +# rootfs file name +rootfs_name=kubeos.tar + +# select the target disk to install kubeOS +disk=/dev/sda + +# address where stores the rootfs on the http server +server_ip=192.168.1.50 + +local_ip=192.168.1.100 + +route_ip=192.168.1.1 \ No newline at end of file diff --git a/scripts/00bootup/module-setup.sh b/scripts/00bootup/module-setup.sh new file mode 100644 index 00000000..5460b2bc --- /dev/null +++ b/scripts/00bootup/module-setup.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +check() { + return 0 +} + +depends() { + echo systemd +} + +install() { + inst_multiple -o grub2-mkimage mkfs.ext4 mkfs.vfat lsblk tar cpio gunzip lspci parted dhclient ifconfig curl hwinfo head tee arch df awk route + inst_hook mount 00 "$moddir/mount.sh" + inst_simple "$moddir/mount.sh" "/mount.sh" + inst_simple "$moddir/Global.cfg" "/Global.cfg" +} + +installkernel() { + hostonly='' \ + instmods \ + =drivers/ata \ + =drivers/nvme \ + =drivers/scsi \ + =drivers/net \ + =fs/fat \ + =fs/nls +} + diff --git a/scripts/00bootup/mount.sh b/scripts/00bootup/mount.sh new file mode 100644 index 00000000..a04a364f --- /dev/null +++ b/scripts/00bootup/mount.sh @@ -0,0 +1,332 @@ +#!/bin/bash +arch=$(arch) +min_size=8 +log=/install.log + +source /Global.cfg + +function CheckSpace() { + local disk_ava="$(parted -l | grep ${disk} | awk '{print $3}')" + if echo "${disk_ava}" | grep [GT]B$; then + if echo "${disk_ava}" | grep GB$; then + disk_ava="$(echo ${disk_ava} | awk -F G '{print $1}' | awk -F . '{print $1}')" + if [ "${disk_ava}" -lt ${min_size} ]; then + echo "The available disk space is not enough, at least ${min_size}GB." | tee -a ${log} + return 1 + fi + fi + else + echo "The available disk space is not enough, at least ${min_size}G." | tee -a ${log} + return 1 + fi + + return 0 +} + +function GetDisk() { + disks=$(hwinfo --disk --short | grep -vi "^disk" | awk '{print $1}') + if [ ! -z ${disks} ]; then + if [ ! -z ${disk} ] && echo "${disks[@]}" | grep -wq "${disk}" ; then + echo "${disk} exists, start partition" | tee -a ${log} + else + echo "disk not exist, choose default disk" | tee -a ${log} + disk=$(echo ${disks[0]}) + fi + else + echo "no disk found" | tee -a ${log} + return 1 + fi + + + CheckSpace + if [ $? -ne 0 ]; then + echo "no enough space on ${disk}" | tee -a ${log} + return 1 + fi + + return 0 +} + +function PartitionAndFormatting() { + echo "Partitioning and formatting disk $disk..." + # partition and format + parted ${disk} -s mklabel gpt >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "partition failed" | tee -a ${log} + return 1 + fi + + parted ${disk} -s mkpart primary fat16 1M 100M >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "partition failed" | tee -a ${log} + return 1 + fi + + parted ${disk} -s mkpart primary ext4 100M 2600M >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "partition failed" | tee -a ${log} + return 1 + fi + + parted ${disk} -s mkpart primary ext4 2600M 5100M >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "partition failed" | tee -a ${log} + return 1 + fi + + parted ${disk} -s mkpart primary ext4 5100M 100% >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "partition failed" | tee -a ${log} + return 1 + fi + + parted ${disk} -s set 1 boot on >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "partition failed" | tee -a ${log} + return 1 + fi + + mkfs.vfat -n "BOOT" ${disk}1 >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "format failed" | tee -a ${log} + return 1 + fi + + mkfs.ext4 -L "ROOT-A" ${disk}2 >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "format failed" | tee -a ${log} + return 1 + fi + + mkfs.ext4 -L "ROOT-B" ${disk}3 >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "format failed" | tee -a ${log} + return 1 + fi + + mkfs.ext4 -L "PERSIST" ${disk}4 >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "format failed" | tee -a ${log} + return 1 + fi + + return 0 +} + +function InitNetwork() { + echo "Initializing network..." + # 获取网卡信息,默认只有一个网卡 + net_name=`ifconfig -a | awk '{print $1}' | grep : | grep '^e' | awk -F: '{print $1}'` + # dhclient --timeout 60 >> ${log} 2>&1 + + ifconfig ${net_name} up + if [ $? -ne 0 ]; then + echo "load net card failed" | tee -a ${log} + return 1 + fi + sleep 3 + + ifconfig ${net_name} ${local_ip} netmask 255.255.255.0 >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "ip set failed" | tee -a ${log} + return 1 + fi + sleep 3 + + route add default gw ${route_ip} >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "add route failed" | tee -a ${log} + return 1 + fi + sleep 3 + + + + return 0 +} + +function MountRoot() { + echo "Mounting rootfs..." + # mount rootfs + mount ${disk}2 /sysroot >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "mount rootfs failed" | tee -a ${log} + return 1 + fi + + return 0 +} + +function MountPersist() { + echo "Mounting persist" + mkdir /persist + mount ${disk}4 /persist >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "mount persist failed" | tee -a ${log} + return 1 + fi + mkdir /persist/{var,etc,etcwork} + mkdir -p /persist/etc/KubeOS/certs + return 0 +} + +function MountBoot() { + echo "Mounting boot" + mkdir -p /sysroot/boot/efi + mount ${disk}1 /sysroot/boot/efi >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "mount boot failed" | tee -a ${log} + return 1 + fi + return 0 +} + +function GetRootfs() { + echo "Downloading rootfs..." + + curl -o /persist/${rootfs_name} http://${server_ip}/${rootfs_name} + if [ ! -e "/persist/${rootfs_name}" ]; then + echo "download rootfs failed" | tee -a ${log} + return 1 + fi + + tar -xvf /persist/${rootfs_name} -C /sysroot + if [ $? -ne 0 ]; then + echo "decompose rootfs failed" | tee -a ${log} + return 1 + fi + + rm -rf /persist/${rootfs_name} + + return 0 +} + +function Inst_Grub2_x86() { + # copy the files that boot need + cp -r /sysroot/usr/lib/grub/x86_64-efi /sysroot/boot/efi/EFI/openEuler + eval "grub2-mkimage -d /sysroot/usr/lib/grub/x86_64-efi -O x86_64-efi --output=/sysroot/boot/efi/EFI/openEuler/grubx64.efi '--prefix=(,gpt1)/EFI/openEuler' fat part_gpt part_msdos linux" >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "grub2-mkimage on x86 failed" | tee -a ${log} + return 1 + fi + + mkdir -p /sysroot/boot/efi/EFI/BOOT/ + cp -f /sysroot/boot/efi/EFI/openEuler/grubx64.efi /sysroot/boot/efi/EFI/BOOT/BOOTX64.EFI + + return 0 +} + +function Inst_Grub2_aarch64() { + cp -r /sysroot/usr/lib/grub/arm64-efi /sysroot/boot/efi/EFI/openEuler/ + eval "grub2-mkimage -d /sysroot/usr/lib/grub/arm64-efi -O arm64-efi --output=/sysroot/boot/efi/EFI/openEuler/grubaa64.efi '--prefix=(,gpt1)/EFI/openEuler' fat part_gpt part_msdos linux" >> ${log} 2>&1 + if [ $? -ne 0 ]; then + echo "grub2-mkimage on aarch64 failed" | tee -a ${log} + return 1 + fi + + mkdir -p /sysroot/boot/efi/EFI/BOOT/ + cp -f /sysroot/boot/efi/EFI/openEuler/grubaa64.efi /sysroot/boot/efi/EFI/BOOT/BOOTAA64.EFI + + return 0 +} + +function SetBoot() { + # mount boot + echo "Setting boot" + + if [ $arch == "x86_64" ]; then + Inst_Grub2_x86 + if [ $? -ne 0 ]; then + echo "install grub on x86 failed" | tee -a ${log} + return 1 + fi + fi + + if [ $arch == "aarch64" ]; then + Inst_Grub2_aarch64 + if [ $? -ne 0 ]; then + echo "install grub on aarch64 failed" | tee -a ${log} + return 1 + fi + fi + + return 0 +} + +function Bootup_Main() { + # get disk + echo "Checking disk info..." | tee -a ${log} + GetDisk + if [ $? -ne 0 ]; then + echo "Checking disk info failed" | tee -a ${log} + return 1 + fi + + # partition and format disk + echo "Partion and formatting..." | tee -a ${log} + PartitionAndFormatting + if [ $? -ne 0 ]; then + echo "Partition and formatting disk failed" | tee -a ${log} + return 1 + fi + + # init network + echo "Initializing network..." | tee -a ${log} + InitNetwork + if [ $? -ne 0 ]; then + echo "Initializing network failed" | tee -a ${log} + return 1 + fi + + # mount partitions + echo "Mounting root..." | tee -a ${log} + MountRoot + if [ $? -ne 0 ]; then + echo "Mounting root failed" | tee -a ${log} + return 1 + fi + + # mount persist + echo "Mounting persisst..." | tee -a ${log} + MountPersist + if [ $? -ne 0 ]; then + echo "Mounting persist failed" | tee -a ${log} + return 1 + fi + + # mount boot + echo "Mounting boot..." | tee -a ${log} + MountBoot + if [ $? -ne 0 ]; then + echo "Mounting boot failed" | tee -a ${log} + return 1 + fi + + # download rootfs + echo "Downloading rootfs..." | tee -a ${log} + GetRootfs + if [ $? -ne 0 ]; then + echo "Downloading rootfs failed" | tee -a ${log} + return 1 + fi + + # set boot + echo "Setting boot..." | tee -a ${log} + SetBoot + if [ $? -ne 0 ]; then + echo "Setting boot failed" | tee -a ${log} + return 1 + fi + + return 0 +} + +Bootup_Main +ret=$? +if [ ${ret} -eq 0 ]; then + echo "kubeOS install success! switch to root" | tee -a ${log} + cp ${log} /persist +else + echo "kubeOS install failed, see install.log" | tee -a ${log} +fi + diff --git a/scripts/create/imageCreate.sh b/scripts/create/imageCreate.sh index f8dafbe0..77e4618e 100644 --- a/scripts/create/imageCreate.sh +++ b/scripts/create/imageCreate.sh @@ -62,13 +62,13 @@ function create_pxe_img() { case $opt in "repo") create_os_tar_from_repo "$@" - tar -xvf os.tar ./boot/initramfs.img + tar -xvf os.tar ./initramfs.img tar -xvf os.tar ./boot/vmlinuz ;; "docker") create_os_tar_from_docker "$@" - tar -xvf os.tar boot/initramfs.img - tar -xvf os.tar boot/vmlinuz + tar -xvf os.tar ./initramfs.img + tar -xvf os.tar ./boot/vmlinuz ;; esac mv os.tar kubeos.tar diff --git a/scripts/create/rootfsCreate.sh b/scripts/create/rootfsCreate.sh index 8049f093..e5c53d53 100644 --- a/scripts/create/rootfsCreate.sh +++ b/scripts/create/rootfsCreate.sh @@ -61,6 +61,7 @@ EOF mv "${RPM_ROOT}"/boot/initramfs* "${RPM_ROOT}/boot/initramfs.img" cp grub.cfg "${RPM_ROOT}"/boot/grub2 cp grub.cfg "${RPM_ROOT}"/boot/efi/EFI/openEuler + cp -r ./00bootup ${RPM_ROOT}/usr/lib/dracut/modules.d/ cp set_in_chroot.sh "${RPM_ROOT}" ROOT_PWD="${PASSWD}" chroot "${RPM_ROOT}" bash /set_in_chroot.sh rm "${RPM_ROOT}/set_in_chroot.sh" diff --git a/scripts/rpmlist b/scripts/rpmlist index 7a9adfac..077a1642 100644 --- a/scripts/rpmlist +++ b/scripts/rpmlist @@ -13,4 +13,12 @@ socat conntrack-tools ebtables ethtool -rsyslog \ No newline at end of file +rsyslog +vi +net-tools +hwinfo +dracut +coreutils +gawk +parted +dosfstools \ No newline at end of file diff --git a/scripts/set_in_chroot.sh b/scripts/set_in_chroot.sh index bacef789..4b061df6 100644 --- a/scripts/set_in_chroot.sh +++ b/scripts/set_in_chroot.sh @@ -11,3 +11,6 @@ sed -i '/^root:/d' /etc/shadow_bak echo "root:"${ROOT_PWD}${str:1} > /etc/shadow cat /etc/shadow_bak >> /etc/shadow rm -rf /etc/shadow_bak + +dracut -f -v --add bootup /initramfs.img --kver `ls /lib/modules` +rm -rf /usr/lib/dracut/modules.d/00bootup \ No newline at end of file -- Gitee