制作rpm包
rpmbuild命令用于创建软件的二进制包和源代码包。
官方文档:rpm.org - RPM Reference Manual rpmbuild 中文手册:rpmbuild 中文手册 [金步国]
使用rpmbuild将tar包打成rpm包
RPM打包使用的是rpmbuild命令,这个命令来自rpm-build包,这个是必装的。 #yum install rpm-build 当然也可以直接安装rpmdevtools,这个工具还包含一些其他的工具,同时它依赖rpm-build,所以直接安装的话会同时把rpm-build装上。 #yum install rpmdevtools 当然,根据不同的软件构建过程,还需要其他的编译打包工具,比如C语言的make、gcc,python的setuptools等,根据需要安装即可
执行如下命令来生成rpmbuild的工作目录
#rpmdev-setuptree 提示:rpmdev-setuptree命令默认将再当前用户主目录下创建一个RPM构建根目录结构,如果需要改变次默认位置,可以修改配置文件:~/.rpmmacros中变量_topdir对应的值即可。 rpmbuild/ ├── BUILD #打包过程中的工作目录 ├── BUILDROOT ├── RPMS #存放生成的二进制包 ├── SOURCES #放置打包资源,包括源码打包文件和补丁文件等 ├── SPECS #放置SPEC文档 └── SRPMS #存放生成的源码包
编辑SPEC文件
SPEC撰写是打包RPM的核心,也算是最难的一步,好在我们可以从参照一个简单的模板文件开始,在可以实现基本功能的基础上再一步一步的扩充文档内容,直至完全达到要求。下面是一个简单的SPEC文档,其中包括了一些说明信息(注:#后面的内容为说明信息),该SPEC文档是对一个测试的软件项目hellorpm写的,hellorpm软件包编译后仅有一个执行文件、一个手册文件和一个项目说文件。 Emacs 和 vi 的最新版本有 .spec 文件编辑模式,它会在创建新文件时打开一个类似的模板。所以可使用以下命令来自动使用模板文件:
#cd ~/rpmbuild/SPECS #vim hello.spec
相关资料:Redirect Notice How to create a GNU Hello RPM package/zh-cn - Fedora Project Wiki https://www.iteye.com/blog/hlee-3434994、构建RPM包
构建操作
开始构建操作,首先进入到当前用户的rpmbuild根目录
#cd ~/rpmbuild/ #rpmbuild -ba SPECS/*.spec 提示:-ba表示build all,即生成包括二进制包和源代码包的所有RPM包,如果正常的话,rpmbuild将正常退出,同时在RPMS目录和SRPMS目录中将生成对应的RPM包
openssh打包安装
安装服务和相关依赖
yum install zlib-devel openssl-devel gcc perl-devel pam-devel libXt-devel imake gtk2-devel -y yum install rpm-build yum install rpmdevtools
到官网上下载对应版本的源码包
创建所需目录
rpmdev-setuptree
把所需的包拷贝到该目录下面
cd /root/rpmbuild/ cp /root/openssh-8.8p1.tar.gz . cp /root/openssh-8.8p1.tar.gz SOURCES wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz cp x11-ssh-askpass-1.2.4.1.tar.gz SOURCES tar xf openssh-8.8p1.tar.gz #openssh会自带.spec文件可根据linunx版本选择配置文件 ./openssh-8.8p1/contrib/redhat/openssh.spec ./openssh-8.8p1/contrib/suse/openssh.spec
修改配置文件
sed -i -e "s/%define no_x11_askpass 0/%define no_x11_askpass 1/g" openssh.spec sed -i -e "s/%define no_gnome_askpass 0/%define no_gnome_askpass 1/g" openssh.spec
构建
rpmbuild -ba openssh.spec /root/rpmbuild/RPMS/x86_64下查看构建完成的rpm包
注:构建完成后在备用的机器上侧防止升级不成功导致无法登录
报错:
第一个报错
/usr/include/X11/Xlib.h error: Failed build dependencies: /usr/include/X11/Xlib.h is needed by openssh-8.8.p1-1.el7.x86_64 libXt-devel is needed by openssh-8.8.p1-1.el7.x86_64 imake is needed by openssh-8.8.p1-1.el7.x86_64 gtk2-devel is needed by openssh-8.8.p1-1.el7.x86_64
解决办法
yum install libXt-devel imake gtk2-devel openssl-libs -y
第二个报错
openssl-devel < 1.1 被 openssh-8.8p1-1.el7.x86_64 需要 构建依赖失败:openssl-devel < 1.1 被 openssh-8.8p1-1.el7.x86_64 需要 解决方法: [root@localhost SPECS]# vim openssh.spec 注释掉 BuildRequires: openssl-devel < 1.1 这一行
第三个报错:
RPM build errors: Installed (but unpackaged) file(s) found: /usr/libexec/openssh/ssh-sk-helper /usr/share/man/man8/ssh-sk-helper.8.gz
解决方法:
vi /usr/lib/rpm/macros #%__check_files %{_rpmconfigdir}/check-files %{buildroot} 注释改行
第四个报错:
RPM build errors: Bad exit status from /var/tmp/rpm-tmp.85UQUm (%build)
解决方法:
可能是时间不对更新时间,再重新试。
打包成功
Wrote: /root/rpmbuild/SRPMS/openssh-8.8p1-1.el7.src.rpm Wrote: /root/rpmbuild/RPMS/x86_64/openssh-8.8p1-1.el7.x86_64.rpm Wrote: /root/rpmbuild/RPMS/x86_64/openssh-clients-8.8p1-1.el7.x86_64.rpm Wrote: /root/rpmbuild/RPMS/x86_64/openssh-server-8.8p1-1.el7.x86_64.rpm Wrote: /root/rpmbuild/RPMS/x86_64/openssh-askpass-8.8p1-1.el7.x86_64.rpm Wrote: /root/rpmbuild/RPMS/x86_64/openssh-askpass-gnome-8.8p1-1.el7.x86_64.rpm Wrote: /root/rpmbuild/RPMS/x86_64/openssh-debuginfo-8.8p1-1.el7.x86_64.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.DTNijH + umask 022 + cd /root/rpmbuild/BUILD + cd openssh-8.8p1 + rm -rf /root/rpmbuild/BUILDROOT/openssh-8.8p1-1.el7.x86_64 + exit 0
升级前的准备(一定要进行)
注:升级请做好备份,在备机上进行测试,查看构建的rpm包是否有问题
备份pam 文件文章来源:https://www.toymoban.com/news/detail-611107.html
cp /etc/pam.d/{sshd,sshd.bak}
开始升级
yum install pango atk gtk2 libXt rpm -Uvh openssh-*
出现的问题
如出现安装完成后无法登录情况 检查/etc/ssh/下的文件或备份还原。 如出现安装完成自己跳出登录后无法登录的情况 请检查/root/rpmbuild/BUILD/openssh-8.8p1/sshd_config文件是否有问题(端口没开或禁止登录) 修改后重新构建rpm包,再进行升级。 sshd重启报错 修改sshd文件的权限 cd /etc/ssh/ chmod 400 ssh_host_ecdsa_key ssh_host_ed25519_key ssh_host_rsa_key systemctl restart sshd
sshd 验证
ssh -V OpenSSH_8.8p1, OpenSSL 1.0.2k-fips 26 Jan 2017
相关文档:centos7 安装openssh8.3 - 简书文章来源地址https://www.toymoban.com/news/detail-611107.html
到了这里,关于【linux升级ssh】 利用rpmbuild工具对ssh打包为rpm包进场安装升级的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!