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

制作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.mzph.cn/news/10125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二、深入浅出WPF之系统学习XAML语法

二、系统学习XAML语法 2.1 Xaml的树形结构 跟Winforms一样,UI也是个平面结构,与winforms的设计思维不同,WPF使用树形逻辑来描述UI,下面是UI布局的简单代码 <StackPanel Background="LightBlue"><TextBox x:Name="textBox1" Margin="5&q…

本地缓存LoadingCache

引入依赖 <!-- https://mvnrepository.com/artifact/com.google.guava/guava --> <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>32.1.1-jre</version> </dependency>主要代…

(三)InfluxDB入门(借助Web UI)

以下内容来自 尚硅谷&#xff0c;写这一系列的文章&#xff0c;主要是为了方便后续自己的查看&#xff0c;不用带着个PDF找来找去的&#xff0c;太麻烦&#xff01; 第 3 章 InfluxDB入门&#xff08;借助Web UI&#xff09; 借助Web UI&#xff0c;我们可以更好地理解InfluxD…

C语言入门篇(八)

前言   本篇分享的是部分操作符的概念与用法&#xff0c;从经典例题入手&#xff0c;带你快速了解和掌握。   收录专栏&#xff1a;浅谈C语言 操作符详解上 1. 操作符分类2. 算术操作符3. 移位操作符3.1 左移操作符3.2 右移操作符 4. 位操作符5. 赋值操作符6. 单目操作符6.…

Excel双向柱状图的绘制

Excel双向柱状图在绘制增减比较的时候经常用到&#xff0c;叫法繁多&#xff0c;双向柱状图、上下柱状图、增减柱状图都有。 这里主要介绍一下Excel的基础绘制方法和复杂一点的双向柱状图的绘制 基础双向柱状图的绘制 首先升降的数据如下&#xff1a; 月份上升下降20220359-…

如何创建高级 CSS 下拉菜单

效果展示 实现思路及部分代码 1、定义整体页面结构 从上述的效果展示图可以看出&#xff0c;页面的整体结构应该需要一个总菜单容器来装载父级菜单项&#xff0c;并且对应的父级菜单项应该有对应的菜单子项。子菜单是分类的话&#xff0c;我们还需要额外在扩展对应的容器来装…

代码随想录算法训练营day11 | 20. 有效的括号,1047. 删除字符串中的所有相邻重复项

目录 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值 20. 有效的括号 难度&#xff1a;easy 类型&#xff1a;栈与队列 思路&#xff1a; 利用栈来做括号匹配&#xff1b; 代码&#xff1a; class Solution {public boolean isValid(String…

Django全局捕获view函数中的所有异常、Python中获取异常(Exception)信息

文章目录 一、Django全局捕获view函数中的所有异常1. 使用中间件2. 使用视图装饰器3. DRF(Django REST framework)全局异常处理【重要】在 Django 中,self.get_response(request) 返回的是一个处理过的响应对象4. Django全局捕获view函数中的所有异常 演示demo二、Python中获取…

Unity UGUI的RectMask2D(2D遮罩)组件的介绍及使用

Unity UGUI的RectMask2D&#xff08;2D遮罩&#xff09;组件的介绍及使用 1. 什么是RectMask2D组件&#xff1f; RectMask2D是Unity UGUI中的一个组件&#xff0c;用于实现2D遮罩效果。它可以限制子对象在指定的矩形区域内显示&#xff0c;超出区域的部分将被遮罩隐藏。 2. …

Flutter 最佳实践和编码准则

Flutter 最佳实践和编码准则 视频 前言 最佳实践是一套既定的准则&#xff0c;可以提高代码质量、可读性和可靠性。它们确保遵循行业标准&#xff0c;鼓励一致性&#xff0c;并促进开发人员之间的合作。通过遵循最佳实践&#xff0c;代码变得更容易理解、修改和调试&#xff…

【新日语(2)】第4課 人びとの生活をもっと豊かにしなければなりません

第4課 人びとの生活をもっと豊かにしなければなりません 注释&#xff1a; 人びと&#xff1a;人们。しなければなりません&#xff1a;必须让。动词「する」的否定条件式助动词「なる」的否定敬体终止形&#xff1b;しなければ&#xff1a;する ない&#xff0b;れば、「す…

vue中Cascader 级联选择器实现-修改实现

vue 的cascader研究了好长时间&#xff0c;看了官网给的示例&#xff0c;上网查找了好多信息&#xff0c;才解决修改时回显的问题&#xff0c;现将方法总结如下&#xff1a; vue代码&#xff1a; <el-form-item label"芯片" prop"firmware"> <…

vue3-简单登录认证前端实现样例

登录页面 登录页面需要与业务功能页面独立开&#xff0c;请参考《多级路由》一文。 登录框 一个简单的登录页面代码如下所示&#xff0c;需包含用户名、密码的输入框&#xff0c;登录按钮等基础组件&#xff0c;可根据需要进行美化。 <template><div style"d…

Mongodb 多文档聚合操作处理方法三(聚合管道)

聚合 聚合操作处理多个文档并返回计算结果。您可以使用聚合操作来&#xff1a; 将多个文档中的值分组在一起。 对分组数据执行操作以返回单个结果。 分析数据随时间的变化。 要执行聚合操作&#xff0c;您可以使用&#xff1a; 聚合管道 单一目的聚合方法 Map-reduce 函…

【C# 数据结构】Heap 堆

【C# 数据结构】Heap 堆 先看看C#中有那些常用的结构堆的介绍完全二叉树最大堆 Heap对类进行排序实现 IComparable<T> 接口 对CompareTo的一点解释 参考资料 先看看C#中有那些常用的结构 作为 数据结构系类文章 的开篇文章&#xff0c;我们先了解一下C# 有哪些常用的数据…

系统架构设计师 10:软件架构的演化和维护

一、软件架构演化 如果软件架构的定义是 SA{components, connectors, constraints}&#xff0c;也就是说&#xff0c;软件架构包括组件、连接件和约束三大要素&#xff0c;这类软件架构演化主要关注的就是组件、连接件和约束的添加、修改与删除等。 二、面向对象软件架构演化…

[oeasy]python0075_删除变量_del_delete_variable

删除变量 回忆上次内容 上次我们研究了字节序 字节序有两种 符号英文名称中文名称<little-endian小字节序>big-endian大字节序 字节序 用来 明确 整型数字存储的 顺序 如果 读写数字出了错 可以 考虑一下 是否 字节序出了问题 变量现在可以 声明初始化存储了 但是 …

thinkphp5拦截验证token

写一个BaseController 类 基本思路&#xff1a; 1、继承一个公共基类&#xff0c;将验证相关代码放在基类 2、根据 孩子类下的notNeedToken 来决定是否进行验证 3、验证失败后&#xff0c;直接响应回来 这里需要封装一个主要代码&#xff1a; protected function response($da…

Spring Boot中整合MyBatis(基于xml方式基于注解实现方式)

一、前提准备 在Spring Boot中整合MyBatis时&#xff0c;你需要导入JDBC&#xff08;不需要手动添加&#xff09;和Druid的相关依赖。 JDBC依赖&#xff1a;在Spring Boot中整合MyBatis时&#xff0c;并不需要显式地添加JDBC的包依赖。这是因为&#xff0c;当你添加mybatis-sp…

i.MX6ULL(二十) linux platform 设备驱动

Linux 系统要考虑到驱动的可重用性&#xff0c;因 此提出了驱动的分离与分层这样的软件思路&#xff0c;在这个思路下诞生了我们将来最常打交道的 platform 设备驱动&#xff0c;也叫做平台设备驱动。 1 Linux 驱动的分离与分层 1.1 驱动的分隔与分离 对于 Linux 这样一…