openEular 22.03 LTS uname -r 显示内核版本错误

【问题复现步骤】
用dnf命令升级内核之后,uname -r命令仍然显示旧版本内核。

【已分析信息
查看uname命令,发现封装了脚本,脚本中uname -r,从rpm -q --qf的第一行取版本号。
系统中同时存在多版本内核时,uname -r显示结果不可靠。

[root@localhost ~]# cat /usr/bin/uname.sh
#!/bin/bash

OUTPUT=`uname.bin $*`
NOT_INSTALLED="is not installed"

if [[ $* == "-r" ]];then
    dir=`rpm -q --qf '%{VERSION}-%{RELEASE}.%{ARCH}\n' kernel | head -n 1`
    if [ -z "$(echo "$dir" | grep "$NOT_INSTALLED")" ]; then
      [ -n "$dir" ] && echo $dir && exit 0
    fi  
    dir=`rpm -q --qf '%{VERSION}-%{RELEASE}.%{ARCH}\n' kernel-devel | head -n 1`
    if [ -z "$(echo "$dir" | grep "$NOT_INSTALLED")" ]; then
       [ -n "$dir" ] && echo $dir && exit 0
    fi  
    dir=`rpm -q --qf '%{VERSION}-%{RELEASE}.%{ARCH}\n' kernel-headers | head -n 1`
    if [ -z "$(echo "$dir" | grep "$NOT_INSTALLED")" ]; then
       [ -n "$dir" ] && echo $dir && exit 0
    fi  
    echo "error: you must installed kernel or kernel-headers" && exit 1

    else
    echo $OUTPUT
fi
[root@localhost ~]# rpm -q --qf '%{VERSION}-%{RELEASE}.%{ARCH}\n' kernel
5.10.0-60.18.0.50.oe2203.aarch64
5.10.0-60.139.0.166.oe2203.aarch64`

不了解当时封装脚本的背景,但是这样可能会导致uname -r显示版本号错误。
一些调用这个名录的脚本会出错。
比如编译驱动的spec文件,经常会用到这个命令。会导致安装路径错误。

1 个赞