【linux升级ssh】 利用rpmbuild工具对ssh打包为rpm包进场安装升级

chatgpt/2023/9/24 0:44:37

制作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_64libXt-devel is needed by openssh-8.8.p1-1.el7.x86_64imake is needed by openssh-8.8.p1-1.el7.x86_64gtk2-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 文件

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 - 简书

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-5314414.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

fixed-视频倍速

首先fn12打开开发者模式 然后进入console控制台 document.getElementsByTagName(“video”)[0].playbackRate 3 数字3 就是多少倍速 可以替换想要的倍速 直接快进到 最后 let video document.getElementsByTagName(‘video’) for (let i0; i<video.length; i) { video[…

数据结构-串的模式匹配(25分) KMP算法/next数组/KMP的优化

先记录一个小坑。 int KMP() {getNext();int i 0, j 0;//写成下面这样&#xff0c;结果不对。原因是&#xff0c;当j-1时&#xff0c;循环条件-1 < strlen(P)被认为是false&#xff0c;会跳出循环while (i < strlen(T) && j < strlen(P)) {if (j -1 || T[…

分解质因子,将一个不小于2的整数分解质因数,例如,输入90,则输出:90=2*3*3*5

假设一个不小于2的整数n&#xff0c;对从2开始的自然数k&#xff0c;这个试探它是否是整数n的一个因子&#xff0c;如果是&#xff0c;则输出该因子&#xff0c;并将n/k的结果赋给n&#xff08;接下来只需要对n除以已经找到的因子之后的结果继续找因子&#xff09;。如果n的值不…

jenkins自定义邮件发送人姓名

jenkins发送邮件的时候发送人姓名默认的&#xff0c;如果要自定义发件人姓名&#xff0c;只需要修改如下信息即可&#xff1a; 系统管理-system-Jenkins Location下的系统管理员邮件地址 格式为&#xff1a;自定义姓名<邮件地址>

[PAT乙级] 1029 旧键盘 C++实现

题目描述&#xff1a; 旧键盘上坏了几个键&#xff0c;于是在敲一段文字的时候&#xff0c;对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字&#xff0c;请你列出肯定坏掉的那些键。 输入格式&#xff1a; 输入在 2 行中分别给出应该输入的文字、以…

c++11 标准模板(STL)(std::basic_ifstream)(一)

定义于头文件 <fstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_ifstream : public std::basic_istream<CharT, Traits> 类模板 basic_ifstream 实现文件流上的高层输入操作。它将 std::basic_istream…

hive整合es,详细过程。

参考官网 Apache Hive integration | Elasticsearch for Apache Hadoop [7.17] | Elastic 官网的介绍很简单&#xff0c;我看了很多博客&#xff0c;写的也很简单&#xff0c;但是我搞了半天才勉强成功&#xff0c;分享下&#xff0c;免得各位多走弯路。 环境准备 官网也很…

【目标检测】基于yolov5的水下垃圾检测(附代码和数据集,7684张图片)

写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 路虽远,行则将至;事虽难,做则必成。只要有愚公移山的志气、滴水穿石的毅力,脚踏实地,埋头苦干,积跬步以至千里,就…
推荐文章