#!/bin/bash
set -x
set -e
export PS4=+{$LINENO:${FUNCNAME[0]}}
trap 'echo "---NEWKERNARGS=$NEWKERNARGS xx=$xx------"' DEBUG
NEWKERNARGS=""
grubby --info=`/sbin/grubby --default-kernel` 2>/dev/null | grep -q crashkernel
if [ $? -ne 0 ];then
NEWKERNARGS="--kernel-args=\"crashkernel=auto\""
fi
grubby --info=`/sbin/grubby --default-kernel` 2>/dev/null | grep -q "nopti noibrs noibpb"
if [ $? -ne 0 ];then
NEWKERNARGS="--kernel-args=\"crashkernel=auto nopti noibrs noibpb\""
fi
/sbin/new-kernel-pkg --package kernel%{?1:-%{1}} %{!?1:--make-default} --install %{KVERREL}%{?1:.%{1}}
上面的這種做法其實存在3個問題:
1 缺失一種場景,即是grub的內核入口參數中包含"crashkernel=auto"但不包含"nopti noibrs noibpb",
2 轉義字符使用過多,不便理解且容易出錯,可參照--install將--kernel-args參數選項移出變量的賦值過程,大大簡化原有邏輯和復雜度;
3 NEWKERNARGS參數的賦值其實可以采用字符串加方式,這樣可以減少grubby查詢次數
具體做法如下:
#!/bin/bash
set -x
set -e
export PS4=+{$LINENO:${FUNCNAME[0]}}
trap 'echo "---NEWKERNARGS=$NEWKERNARGS xx=$xx------"' DEBUG
NEWKERNARGS=""
grubby --info=`/sbin/grubby --default-kernel` 2>/dev/null | grep -q crashkernel
if [ $? -ne 0 ];then
NEWKERNARGS="crashkernel=auto"
fi
grubby --info=`/sbin/grubby --default-kernel` 2>/dev/null | grep -q "nopti noibrs noibpb"
if [ $? -ne 0 ];then
NEWKERNARGS=${NEWKERNARGS}"nopti noibrs noibpb"
fi
/sbin/new-kernel-pkg --package kernel%{?1:-%{1}} %{!?1:--make-default} --install %{KVERREL}%{?1:.%{1}} --kernel-args="$NEWKERNARGS"
