目录
前言
背景
近期公司系统检测出漏洞,需要进行更新,almaLinux官方最新的是8.0。想着同架构的Fedora更新较快,结果就算是Fedora也最高是8.9。可是被检测出有漏洞的版本刚好就是到8.9。各大三方rpm构建网站都没有找到最新的openssh最新的。只好自己构建一份,用于生产环境的快速更新。
- 文中代码全部可以直接复制使用,部分运行结果请注意不要复制。
- 在生产环境更新时强烈建议开启备用连接方式。(telnet、VNC、带外管理)
编译环境
#计算机架构:x86_64 PC
#编译环境:AlmaLinux release 8.5 (Arctic Sphynx)
#网络环境:联网
#内核:5.4.188
uname -a
Linux 5.4.188-1.el8.elrepo.x86_64 #1 SMP Mon Mar 28 09:09:25 EDT 2022 x86_64 x86_64 x86_64 GNU/Linux
最终结果
openssh-9.1p1-1.el8.x86_64
openssh-askpass-9.1p1-1.el8.x86_64
openssh-clients-9.1p1-1.el8.x86_64
openssh-server-9.1p1-1.el8.x86_64
解释
BUILD,存放源代码解压以后的文件,自己无需操作,只需要提供build目录
RPMS,存放制作完成的RPM包,此目录下会有子目录
SOURCES,存放收集的原材料和配置文件,源码包,补丁包
SPECS,存放spec文件,每个rpm包的制作,都必须要有一个spec文件,用来指导文件。此文件以软件包的名字命名,以spec为扩展名
SRPMS,src格式的rpm包的存放位置。无平台相关的概念
创建编译目录
mkdir -pv /root/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
制作准备
安装必要的包
yum install rpm-build rpm-devel rpmdevtools \
gcc gcc-c++ glibc glibc-devel \
openssl-devel openssl zlib zlib-devel lrzsz \
make wget krb5-devel pam-devel libX11-devel xmkmf \
libXt-devel initscripts imake perl-devel gtk2-devel unzip
备份关键文件,以便编译出错恢复
cp /etc/pam.d/sshd /etc/pam.d/sshd-bak
cp -p /etc/pam.d/system-auth /etc/pam.d/system-auth-bak
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config-bak
cp -p /etc/ssh/ssh_config /etc/ssh/ssh_config-bak
下载源码包到指定位置
cd /root/rpmbuild/SOURCES/
curl -O https://src.fedoraproject.org/repo/pkgs/openssh/\
x11-ssh-askpass-1.2.4.1.tar.gz/8f2e41f3f7eaa8543a2440454637f3c3/\
x11-ssh-askpass-1.2.4.1.tar.gz
curl -O https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/\
portable/openssh-9.1p1.tar.gz
解压tar包文件到指定目录
tar zxvf openssh-9.1p1.tar.gz -C /root/rpmbuild/SPECS/
cd /root/rpmbuild/SPECS/openssh-9.1p1/contrib/redhat/
修改openssh.spec,修改好的文件配置文档在末尾
vim /root/rpmbuild/SPECS/openssh-9.1p1/contrib/redhat/openssh.spec
输入半角 :,然后输入 set nu,回车
#第 11-15 行: 是否生成 x11-askpass、gnome-askpass 两个 RPM 包。可以不选,不选的话就不要 x11-ssh-askpass-1.2.4.1.tar.gz 包;默认生成,建议选上
# Do we want to disable building of x11-askpass? (1=yes 0=no)
%global no_x11_askpass 0
# Do we want to disable buildi