众所周知 lsb_release 是常用的检查发行版版本的命令行工具,但是不幸的是,在 RHEL 9 及 CentOS Stream 9 上这个包已经被废弃,官方没有提供这些包及其相关依赖。
一般来说没有也不影响使用,但是部分比较老旧的程序内关于系统的判断还是基于此命令,因此没有会导致一些兼容性问题,就需要想办法手动安装 lsb_release
。
啰嗦
顺便一提在此过程中一个神奇的发现,在 CentOS 宣布滚动发行前,迭代顺序为:
Fedora -> RedHat -> CentOS
简而言之:所有新特性会在 Fedora 中添加和迭代,稳定后进入红帽收费版 RHEL,然后剥离收费套件和私有套件变为开源 CentOS,用于培养免费用户,滋养红帽系列生态。
而 CentOS 宣布放弃普通版本,变为滚动更新版后,迭代顺序变为:
Fedora -> CentOS Stream -> RedHat
可以看到在新线路中,Fedora 迭代的包会立即进入 CentOS Stream 中,然后再进入 RHEL。
奇怪的点就在这里,实际上 lsb_release 这个包在 Fedora 中还是有的,但是不知道什么原因在进入 CentOS Stream 中时被砍了。所以可以从上游获取源码进行构建。
构建
环境准备
先安装构建环境
sudo dnf groupinstall 'RPM Development Tools'
sudo dnf groupinstall 'Development Tools'
获取源码
然后获取源码包,需要从 Fedora 仓库中获取,需要注意的是,经过实测,ncurses-compat-libs
这个包依赖系统的ncurses
包,因此需要与系统自带的版本匹配,所以只能从旧版本的 Fedora 中获取,对比后只有 Fedora 35 版本的源码可用,Fedora 35 之后的版本构建出来的包与仓库中的 ncurses 版本冲突。
因为 Fedora 实际上也是滚动更新,停止维护的版本的包会被移动到 Fedora Project Archives 归档网站中。包名搜索和子包关系可以在 Fedora Project Packages 中进行搜索。
wget https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/35/Everything/source/tree/Packages/n/ncurses-6.2-8.20210508.fc35.src.rpm
wget https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/35/Everything/source/tree/Packages/r/redhat-lsb-4.1-55.fc35.src.rpm
wget https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/35/Everything/source/tree/Packages/s/star-1.6-5.fc35.src.rpm
构建依赖
补充构建所需的依赖
sudo dnf install -y e2fsprogs-devel \
gpm-devel \
libacl-devel \
libattr-devel \
libselinux-devel
编译
然后从源码中构建,注意此步骤必须在普通用户中执行。
rpmbuild --rebuild ncurses-6.2-8.20210508.fc35.src.rpm
rpmbuild --rebuild redhat-lsb-4.1-55.fc35.src.rpm
rpmbuild --rebuild star-1.6-5.fc35.src.rpm
使用
构建完成后安装即可
cd ~/rpmbuild/RPMS/x86_64
sudo dnf localinstall redhat-lsb-core-4.1-55.el9.x86_64.rpm redhat-lsb-submod-security-4.1-55.el9.x86_64.rpm ncurses-compat-libs-6.2-8.20210508.el9.x86_64.rpm spax-1.6-5.el9.x86_64.rpm
检查
在 CentOS Stream 9 中
[kane@centos9 ~]$ lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: CentOSStream Description: CentOS Stream release 9 Release: 9 Codename: n/a
在 RHEL 9 中
[kane@rhel9 ~]$ lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: RedHatEnterprise Description: Red Hat Enterprise Linux release 9.2 (Plow) Release: 9.2 Codename: Plow
理论上所有 RHEL 衍生版本(比如:Rocky Linux、AmlaLinux 等)都可以通过此方法进行构建,注意甄别一下 ncurses 版本即可。
附录
参考链接
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2023-10-24 11:46 AM