From f7a5c029fff70480a5149ba639cc4036b3cd2175 Mon Sep 17 00:00:00 2001 From: zhangqiumiao Date: Sat, 5 Nov 2022 16:11:00 +0800 Subject: [PATCH] add support for mbsc Signed-off-by: zhangqiumiao (cherry picked from commit 9c46f8c3fdb9f5132c398f4699e75e7951952ca3) --- 0002-support-mbsc.patch | 342 ++++++++++++++++++++++++++++++++++++++++ install-scripts.spec | 10 +- 2 files changed, 350 insertions(+), 2 deletions(-) create mode 100644 0002-support-mbsc.patch diff --git a/0002-support-mbsc.patch b/0002-support-mbsc.patch new file mode 100644 index 0000000..db47bcf --- /dev/null +++ b/0002-support-mbsc.patch @@ -0,0 +1,342 @@ +From a179ee1222064472dad6cb09f7e97eceac69b575 Mon Sep 17 00:00:00 2001 +From: zhangqiumiao +Date: Tue, 1 Nov 2022 10:56:16 +0800 +Subject: [PATCH] support mbsc + +--- + usr/Euler/project/disk/hwcompatible.sh | 27 ++++++++++ + usr/Euler/project/init/LinuxSetup.sh | 8 +++ + usr/Euler/project/install/setupOS.sh | 71 ++++++++++++++++++++++++-- + usr/Euler/project/load/filetransfer.sh | 10 ++-- + usr/Euler/project/load/load.sh | 16 +++--- + 5 files changed, 115 insertions(+), 17 deletions(-) + +diff --git a/usr/Euler/project/disk/hwcompatible.sh b/usr/Euler/project/disk/hwcompatible.sh +index 97f3b78..e28b1ff 100644 +--- a/usr/Euler/project/disk/hwcompatible.sh ++++ b/usr/Euler/project/disk/hwcompatible.sh +@@ -16,6 +16,7 @@ + #machine type + CON_MACHINE_TYPE_GENERAL="general" + CON_MACHINE_TYPE_HP="hp" ++CON_MACHINE_TYPE_RED3="red3" + + #version for kernel and crash kernel + CON_KERNEL_TYPE_XEN="xen" +@@ -35,6 +36,8 @@ function DM_GetMachineType() + #get machine type + if [ ! -z "`ls -l /sys/block | grep "c0d"`" ]; then + machine_type=${CON_MACHINE_TYPE_HP} ++ elif [ ! -z "`ls -l /sys/block | grep "md"`" ]; then ++ machine_type=${CON_MACHINE_TYPE_RED3} + else + machine_type=${CON_MACHINE_TYPE_GENERAL} + fi +@@ -76,6 +79,9 @@ function DM_GetPartitionName() + ${CON_MACHINE_TYPE_HP}) + echo "${disk_dev}p${partition_count}" + ;; ++ ${CON_MACHINE_TYPE_RED3}) ++ echo "${disk_dev}p${partition_count}" ++ ;; + *) + if [[ ${disk_dev} == /dev/nvme* ]]; then + echo "${disk_dev}p${partition_count}" +@@ -119,6 +125,9 @@ function DM_GetPartitionNumber() + ${CON_MACHINE_TYPE_HP}) + echo "${partition_name}" | sed "s ${disk_dev}p " + ;; ++ ${CON_MACHINE_TYPE_RED3}) ++ echo "${partition_name}" | sed "s ${disk_dev}p " ++ ;; + *) + if [[ ${disk_dev} == /dev/nvme* ]]; then + echo "${partition_name}" | sed "s ${disk_dev}p " +@@ -161,6 +170,9 @@ function DM_GetPartitionById() + ${CON_MACHINE_TYPE_HP}) + partition_by_id="`echo "${partition_by_id}" | grep "^cciss"`" + ;; ++ ${CON_MACHINE_TYPE_RED3}) ++ partition_by_id="`echo "${partition_by_id}" | grep "^md-uuid"`" ++ ;; + *) + partition_by_id_tmp=${partition_by_id} + partition_by_id="`echo "${partition_by_id_tmp}" | grep "^scsi"`" +@@ -273,6 +285,14 @@ function DM_GetGrubInfo() + command="`printf "%d" "'${harddisk_id}"` - `printf "%d" "'0"`" + disk_dev="`hwinfo --disk --short | awk '{print $1}' | grep -w "${disk_dev}"`" + ;; ++ ${CON_MACHINE_TYPE_RED3}) ++ first_disk="`DM_Get_FirstDiskName`" ++ first_disk_id="`echo ${first_disk} | awk '{print substr($NF,length($NF),1)}'`" ++ disk_dev="`echo ${partition_info} | awk -F "/" '{print $NF}' | sed "s p${partition_id}$ "`" ++ harddisk_id="`echo ${disk_dev} | awk '{print substr($NF,length($NF),1)}'`" ++ command="`printf "%d" "'${harddisk_id}"` - `printf "%d" "'${first_disk_id}"`" ++ disk_dev="/dev/${disk_dev}" ++ ;; + *) + if [[ ${partition_info} == */nvme* ]]; then + disk_dev="`echo ${partition_info} | awk -F "/" '{print $NF}' | sed "s p${partition_id}$ "`" +@@ -293,6 +313,13 @@ function DM_GetGrubInfo() + harddisk_id="`echo ${disk_dev} | awk -F "/" '{print substr($NF,length($NF),1)}'`" + command="`printf "%d" "'${harddisk_id}"` - `printf "%d" "'0"`" + ;; ++ ${CON_MACHINE_TYPE_RED3}) ++ first_disk="`DM_Get_FirstDiskName`" ++ first_disk_id="`echo ${first_disk} | awk '{print substr($NF,length($NF),1)}'`" ++ disk_dev="`echo ${partition_name} | sed "s p${partition_id}$ "`" ++ harddisk_id="`echo ${disk_dev} | awk -F "/" '{print substr($NF,length($NF),1)}'`" ++ command="`printf "%d" "'${harddisk_id}"` - `printf "%d" "'${first_disk_id}"`" ++ ;; + *) + if [[ ${partition_name} == */nvme* ]]; then + disk_dev="`echo ${partition_name} | sed "s p${partition_id}$ "`" +diff --git a/usr/Euler/project/init/LinuxSetup.sh b/usr/Euler/project/init/LinuxSetup.sh +index 0cfb8c3..7311e8a 100644 +--- a/usr/Euler/project/init/LinuxSetup.sh ++++ b/usr/Euler/project/init/LinuxSetup.sh +@@ -126,6 +126,7 @@ function INIT_Setup_Main() + local tmp= + local sysconfig_conf=`basename ${SYSCONFIG_CONF}` + local cmdline=/proc/cmdline ++ local pstore_files= + + #initialize the drivers + ${INIT_MODULES} +@@ -196,6 +197,13 @@ function INIT_Setup_Main() + fi + g_LOG_Notice "Initializing environment success." + ++ if [ -d /sys/fs/pstore ]; then ++ g_LOG_Info "Removing files stored in nonvolatile ram created by the pstore subsystem..." ++ pstore_files=`find /sys/fs/pstore/ -type f` ++ g_LOG_Debug "Removing files: [${pstore_files}]" ++ find /sys/fs/pstore/ -type f -delete ++ fi ++ + INIT_Execute_Hook ${BEFORE_PARTITION_HOOK_PATH} ${PARTITION_CONF} + if [ $? -ne 0 ]; then + g_LOG_Error "Execute custom hook failed before partition." +diff --git a/usr/Euler/project/install/setupOS.sh b/usr/Euler/project/install/setupOS.sh +index fdbf17c..f1040c4 100644 +--- a/usr/Euler/project/install/setupOS.sh ++++ b/usr/Euler/project/install/setupOS.sh +@@ -813,6 +813,16 @@ function SetupOS_GrubCfg() + sed -i "s/${title_str}/${MENU_VERSION}/g" ${grub_cfg} + fi + ++ if cat /proc/cmdline | grep "product=mbsc" &>/dev/null; then ++ g_LOG_Info "copy ${LOCAL_CONFIG_PATH}/grub.cfg to ${LOCAL_DISK_PATH}${SI_GRUB2_PATH}" ++ cp -af ${LOCAL_CONFIG_PATH}/grub.cfg ${LOCAL_DISK_PATH}${SI_GRUB2_PATH} >> ${OTHER_TTY} 2>&1 ++ chmod 600 ${grub_cfg} ++ if [ $? -ne 0 ]; then ++ g_LOG_Error "chmod grub.cfg failed." ++ return 1 ++ fi ++ fi ++ + g_LOG_Notice "instsall OS grub.cfg success." + + return 0 +@@ -906,6 +916,52 @@ function SetupOS_Menulst() + return 0 + } + ++######################################################### ++# Description: SetupOS_LoadSourceToDisk ++# Input none ++# Return: 0: SUCCESS ++# 1: Internal Error. ++######################################################### ++function SetupOS_LoadSourceToDisk() ++{ ++ local cmdline=/proc/cmdline ++ ++ pxecfg_path="`INIT_Get_CmdLineParamValue 'install_saveosdir' ${cmdline}`" ++ if [ -z "${pxecfg_path}" ]; then ++ g_LOG_Notice "The install_saveosdir parameter is not set so we can not copy the source file to the target disk." ++ return 0 ++ fi ++ ++ g_LOG_Debug "Load source to disk ..." ++ if [ ! -d ${LOCAL_DISK_PATH}/${pxecfg_path} ]; then ++ mkdir -p ${LOCAL_DISK_PATH}/${pxecfg_path} ++ if [ $? -ne 0 ]; then ++ g_LOG_Error "Create directory ${LOCAL_DISK_PATH}/${pxecfg_path} failed." ++ return 1 ++ fi ++ fi ++ ++ dirtype=$(df -hT ${LOCAL_DISK_PATH}/${pxecfg_path} | sed -n 2p | awk '{print $1}' | grep "\/dev") ++ if [ -z ${dirtype} ]; then ++ g_LOG_Error "Directory ${pxecfg_path} is not in a disk" ++ return 1 ++ fi ++ ++ partition_size=$(df -lm ${LOCAL_DISK_PATH}/${pxecfg_path} | sed -n 2p | awk '{print $4}') ++ file_size=$(du -m ${LOCAL_SOURCE_PATH}/ | awk '{print $1}') ++ if [ ${file_size} -ge ${partition_size} ]; then ++ g_LOG_Error "Direcotry ${pxecfg_path} space is not enough to store source files." ++ return 1 ++ fi ++ ++ cp -ap ${LOCAL_SOURCE_PATH}/* ${LOCAL_DISK_PATH}/${pxecfg_path} ++ if [ $? -ne 0 ]; then ++ g_LOG_Error "Copy ${SI_OSTARNAME} to ${LOCAL_DISK_PATH}/${pxecfg_path} failed." ++ return 1 ++ fi ++ g_LOG_Debug "Copy ${SI_OSTARNAME} to ${LOCAL_DISK_PATH}/${pxecfg_path} success" ++} ++ + ######################################################### + # Description: SetupOS_clean + # Input none +@@ -1049,6 +1105,8 @@ function SetupOS_Install() + fi + fi + ++ SetupOS_LoadSourceToDisk ++ + #拷贝new.part到/etc目录中,用于下次安装进行分区比较 + if [ -f "${LOCAL_TEMPCFG_PATH}/new.part" ] && [ -d "${LOCAL_DISK_PATH}/etc" ]; then + g_LOG_Info "copy ${LOCAL_TEMPCFG_PATH}/new.part to ${LOCAL_DISK_PATH}/etc" +@@ -1099,13 +1157,18 @@ function SetupOS() + esac + } + +- +-if [ ! -z "`cat /proc/mounts | grep " ${LOCAL_DISK_PATH} "`" ]; then ++if cat /proc/cmdline | grep "product=mbsc" &>/dev/null; then ++ g_LOG_Info "start mbsc SetupOS" + SetupOS + ret=$? + else +- g_LOG_Error "${LOCAL_DISK_PATH} is not mounted." +- ret=1 ++ if [ ! -z "`cat /proc/mounts | grep " ${LOCAL_DISK_PATH} "`" ]; then ++ SetupOS ++ ret=$? ++ else ++ g_LOG_Error "${LOCAL_DISK_PATH} is not mounted." ++ ret=1 ++ fi + fi + + exit ${ret} +diff --git a/usr/Euler/project/load/filetransfer.sh b/usr/Euler/project/load/filetransfer.sh +index 5d75640..7066f25 100644 +--- a/usr/Euler/project/load/filetransfer.sh ++++ b/usr/Euler/project/load/filetransfer.sh +@@ -261,7 +261,7 @@ function tftp_download() + + if echo ${fileName} | grep -q ${FT_FILE_LIST} ;then + #download filelist first +- result=`${FT_TFTP} ${serverIp} ${serverPort} -c get ${sourceFile}/${filelist} ${targetFile} 2>&1` ++ result=`${FT_TFTP} -m binary ${serverIp} ${serverPort} -c get ${sourceFile}/${filelist} ${targetFile} 2>&1` + if [ ! -z "${result}" ];then + g_LOG_Error "${result}" + g_LOG_Error "Download remote file [${FT_FILE_LIST}] failed, maybe it's not exist." +@@ -289,7 +289,7 @@ function tftp_download() + fi + echo "${line}" | grep "\/$" > /dev/null 2>&1 + if [ $? -ne 0 ];then +- result=`${FT_TFTP} ${serverIp} ${serverPort} -c get ${sourceFile}/${line} ${targetDir}/${line} 2>&1` ++ result=`${FT_TFTP} -m binary ${serverIp} ${serverPort} -c get ${sourceFile}/${line} ${targetDir}/${line} 2>&1` + if [ ! -z "${result}" ]; then + rm -rf ${targetDir}/${line} > /dev/null 2>&1 + g_LOG_Warn "${result}" +@@ -298,7 +298,7 @@ function tftp_download() + fi + done < ${targetFile} + else +- result=`${FT_TFTP} ${serverIp} ${serverPort} -c get ${sourceFile} ${targetFile} 2>&1` ++ result=`${FT_TFTP} -m binary ${serverIp} ${serverPort} -c get ${sourceFile} ${targetFile} 2>&1` + if [ ! -z "${result}" ];then + rm -rf ${targetFile} > /dev/null 2>&1 + g_LOG_Error "${result}" +@@ -315,7 +315,7 @@ function parseUrl() + local serverUrl= + local userName= + local password= +- local pattern="^[fF][iI][lL][eE]$|^[cC][dD]$|^[nN][fF][sS]$|^[fF][tT][pP]$|^[hH][tT][tT][pP]$|^[tT][fF][tT][pP]$" ++ local pattern="^[fF][iI][lL][eE]$|^[cC][dD]$|^[nN][fF][sS]$|^[cC][iI][fF][sS]$|^[fF][tT][pP]$|^[hH][tT][tT][pP]$|^[tT][fF][tT][pP]$" + local ipPattern="^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$" + local tmpPath= + local TMP_PARAMS= +@@ -327,7 +327,7 @@ function parseUrl() + serverUrl=$1 + FT_TRAN_PROTOCOL=`echo ${serverUrl} | awk -F ":" '{print $1}'` + if ! echo ${FT_TRAN_PROTOCOL} | grep -q -E "${pattern}"; then +- g_LOG_Error "The serverurl protocol must be cd, nfs, ftp, http or tftp" ++ g_LOG_Error "The serverurl protocol must be cd, nfs, cifs, ftp, http or tftp" + return 1 + fi + g_LOG_Debug "file transfer protocol is ${FT_TRAN_PROTOCOL}" +diff --git a/usr/Euler/project/load/load.sh b/usr/Euler/project/load/load.sh +index 700e5fc..2f0a5d8 100644 +--- a/usr/Euler/project/load/load.sh ++++ b/usr/Euler/project/load/load.sh +@@ -20,12 +20,12 @@ MODPROBE="`which modprobe`" + MKFS_EXT3="`which mkfs.ext3`" + MOUNT="`which mount`" + ###################################################### +-#function g_LOAD_CONFIG ++#function g_Load_Config + #input none +-#dataAccess $CFG_SERVER_URL $LOCAL_CONFIG_PATH ++#dataAcess $CFG_SERVER_URL $LOCAL_CONFIG_PATH + # LOCAL_TEMPCFG_PATH + ###################################################### +-function g_LOAD_CONFIG ++function g_Load_Config + { + local returnValue + g_LOG_Info "begin load config file" +@@ -65,7 +65,7 @@ function g_LOAD_CONFIG + ###################################################### + #function g_LOAD_Os + #description load os repo to targetdir +-#dataAccess $REPO_SERVER_URL $LOCAL_SOURCE_PATH ++#dataAcess $REPO_SERVER_URL $LOCAL_SOURCE_PATH + ###################################################### + function g_Load_Os + { +@@ -82,7 +82,7 @@ function g_Load_Os + fi + + if [ -n "${REPO_SERVER_URL}" -a -n "${LOCAL_SOURCE_PATH}" ];then +- INIT_RAMDISK ++ INIT_Ramdisk + if [ $? -ne 0 ];then + g_LOG_Error "init load os storage error" + return 1 +@@ -114,7 +114,7 @@ function g_Load_Os + LOCAL_SOURCE_PATH="$LOCAL_SOURCE_PATH/repo" + fi + else +- LOCAL_SOURCE_PATH="$LOCAL_SOURCE_PATH/repo" ++ LOCAL_SOURCE_PATH="$LOCAL_SOURCE_PATH/repo" + fi + else + returnValue=1 +@@ -126,7 +126,7 @@ function g_Load_Os + ########################################################## + #description init a ramdisk and mount 2 $LOCAL_SOURCE_PATH + ########################################################## +-function INIT_RAMDISK() ++function INIT_Ramdisk() + { + $MODPROBE brd rd_size=3072000 rd_nr=1 max_part=1 >>$OTHER_TTY 2>&1 + if [ -b /dev/ram0 ];then +@@ -136,7 +136,7 @@ function INIT_RAMDISK() + g_LOG_Error "mkdir $LOCAL_SOURCE_PATH failed" + return 1 + fi +- ++ + $MOUNT -t ext3 /dev/ram0 $LOCAL_SOURCE_PATH >>$OTHER_TTY 2>&1 + if [ $? -ne 0 ]; then + g_LOG_Error "mount /dev/ram0 to $LOCAL_SOURCE_PATH error" +-- +2.27.0 + diff --git a/install-scripts.spec b/install-scripts.spec index 2208903..1d5fdaa 100644 --- a/install-scripts.spec +++ b/install-scripts.spec @@ -3,11 +3,11 @@ Summary: scripts for system installation Group: Applications/System License: MulanPSL-2.0 Version: 1.2 -Release: 3 +Release: 4 SOURCE0: %{name}-%{version}.tar.gz Patch0001: 0001-add-support-for-nvme-disk.patch - +Patch0002: 0002-support-mbsc.patch Requires: kernel BuildRequires: dos2unix coreutils findutils BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -102,6 +102,12 @@ rm -rf %{_tmppath}/%{name}-%{version} rm -rf $RPM_BUILD_DIR/%{name}-%{version} %changelog +* Sat Nov 5 2022 zhangqiumiao - 1.2-4 +- Type:requirement +- CVE:NA +- SUG:NA +- DESC:add support for mbsc + * Tue Aug 16 2022 fushanqing - 1.2-3 - Unified license name specification -- Gitee