rhel6编译ssh的src.rpm包并修改spec参数
安全扫描要求屏蔽ssh版本信息,也就是说在你ssh -V的时候,不能够显示ssh的版本信息,我之后在网上查找了一些资料,都说需要使用tar包安装ssh,并在解压之后修改sshd.c文件,将version部分进行修
改,我这个项目中有700多台设备,所以需要使用rpm包,之后通过脚本来进行升级ssh的操作。
那如何将tar包变成rpm包呢,使用rpmbuild工具是可以将tar包编译成rpm包的,但我没这么做,我从rhn上下载了ssh的src.rpm包,我觉得这个更可靠,毕竟是redhat发布的,并且这个ssh包的版本也符合安
全整改的要求。
我之后下载了openssh-5.3p1-114.el6_7.src.rpm,之后步骤如下:
step1:rpm -ivh 安装src.rpm
rpm -ivh openssh-5.3p1-114.el6_7.src.rpm
step2:安装rpmbuild的环境
yum install compat-gcc* gcc* rpm-build rpm-devel rpm-libs 其他包忘了,可以在网上找相应的文章
step3:第一步之后会在/root下生成一个rpmbuild目录,自动创建几个目录,你也不用手动创建其他的目录,因为你在编译的过程中rpmbuild会自动创建齐全如下6个目录:
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
BUILD和BUILDROOT是编译过程中需要的目录,其中BUILDROOT是中间过程目录
RPMS是编译完成后生成的rpm包的存放地址
SOURCES是编译过程在自动解压后,存放解压文件的目录
SPECS目录很重要,是你制作或修改spec文件的存放目录
SRPMS是存放.src.rpm文件的目录
关于这些目录和rpmbuild的工作原理,这里就不详细说了,具体可以参考网上其他文章
step4:修改spec文件===这步是重点,本文会详细描述。在修改过程中遇到了几个问题,一并记录如下。
############################################
【spec中各主要部分说明如下】
%pre和%setup和%patch -bp 解压tar包,并应用补丁
%setup通常是从/usr/src/asianux/SOURCES里的包解压到/usr/src/asianux/BUILD/%{name}-%{version}中。
%build -bc build。等于tar包的make===在/usr/src/asianux/BUILD/%{name}-%{version}目录中进行make的工作
%configure 执行源代码的configure配置在/usr/src/asianux/BUILD/%{name}-%{version}目录中进行
%instal -bi make install===在/usr/src/asianux/BUILD/%{name}-%{version}目录中进行make install的操作
-bb 是构建一个binary包;===执行了所有过程
-ba 是构建一个binary包和一个source包===执行了所有过程
%files 定义那些文件或目录会放入rpm中
%defattr (-,root,root) 指定包装文件的属性,分别是(mode,owner,group),-表示默认值,对文本文件是0644,可执行文件是0755
bp=tar+copy
bc=configure+make
bi=make install
%file是将所有的文件、包都做成rpm形式
bb=bp+bc+bi
ba=bp+bc+bi+bb
############################################
我最初的设想是这样的:
先执行-bp,将源码解压到BUILD目录
之后修改sshd.c
之后修改spec文件,注释掉%pre、%setup、%patch部分
之后执行-bb,因为-bb包括了-bp/-bc/-bi等步骤,所以之前注释掉%pre,%setup,%patch部分后就会使用修改后的sshd.c文件来执行%build步骤、%configure步骤和%instal、%file步骤了
后来发现rpmbuild -bb或-ba都不行,因为bb=bp+bc+bi,ba更狠,还加上了bb,这个过程会将你之前解压出来的修改后的sshd.c给覆盖掉======【这也是这篇文章要解决的核心问题】
后来我又想,有没有什么参数,可以跳过-bb和-ba过程中的bp、bc步骤呢,也就是这样:
首先我用-bp解压,并将解压后的各种文件拷贝到相关目录(自动的进行),例如spec文件拷贝到SPEC目录,其他文件拷贝到BUILD目录或者SOURCE===执行rpm -ivh ssh.src.rpm即可
之后修改sshd.c文件
之后修改iaspec文件
之后用某个特殊的参数执行rpmbuild -bb或-ba,让-bb或-ba跳过解压和configure、make步骤,后来发现,根本不好使。
是有2个参数,--nobuild和--short-circuit,命令如下:rpmbuild -bb spec --nobuild;或者rpmbuild --short-circuit -bi spec,但结果不行
之后我又查看了一下rpmbuild文档,上边说rpmbuild的过程支持使用脚本,这是个大好消息!!!这样就可以在spec文件中调用脚本了,问题解决了。如下:
########################
%prep段
这个段是预处理段,通常用来执行一些解开源程序包的命令,为下一步的编译安装作准备。%prep和下面的%build,%install段一样,除了可以执行RPM所定义的宏命令(以%开头)以外,还可以执行SHELL命令
,命令可以有很多行,如我们常写的tar解包命令。
########################
我在%configure 行的前边添加了如下两行:
sed -i s#'snprintf(buf, sizeof buf, "SSH-%d.%d-%.100s%s", major, minor,'#'snprintf(buf, sizeof buf, "goodbye");'#g sshd.c
sed -i '/(options.show_patchlevel == 1) ? SSH_VENDOR_PATCHLEVEL : SSH_VERSION, newline);/ d' sshd.c
之后会执行step5
step5:rpmbuild -ba openssh.spec
step6:之后到RPMS目录,就可以yum localinstall openssh-5.3p1-114.el6.x86_64.rpm
注意:会编译出很多包,如下,可以都一起安装,也可以只安装ssh
[root@scd1 x86_64]# ls
openssh-5.3p1-114.el6.x86_64.rpm openssh-ldap-5.3p1-114.el6.x86_64.rpm
openssh-askpass-5.3p1-114.el6.x86_64.rpm openssh-server-5.3p1-114.el6.x86_64.rpm
openssh-clients-5.3p1-114.el6.x86_64.rpm pam_ssh_agent_auth-0.9.3-114.el6.x86_64.rpm
openssh-debuginfo-5.3p1-114.el6.x86_64.rpm
安装更新完毕,我又在另一个节点上"ssh -V 更新ssh的节点ip" 试了一下,发现还是有版本信息,可见,网上的这种方法不行,不能屏蔽ssh版本信息,但确实解决了rpmbuild过程修改软件内容这一问题。
转载于:https://blog.51cto.com/hashing123/2162197
rhel6编译ssh的src.rpm包并修改spec参数相关推荐
- linux 编译src.rpm,CentOS6.5下编译src.rpm包的内核
CentOS6.5原生内核版本是 Linux 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_6 ...
- mysql src.rpm_从.src.rpm包中提取出完整的源码的方法
1 什么是完整的源码 就是说,最初始的源码加上打了所有的patch后的源码,即最新的源码. 2 过程 2.1 从.src.rpm中提取完整的rpm工程文件 2.1.1 rpm to cpio rpm2 ...
- 提取原rpm包里的SPEC文件及重新打包
一.概要 目的是要修改原rsyslog rpm包的systemd rsyslog.service文件,添加一行"ExecStartPre=/bin/bash -c "/usr/bi ...
- 编译OpenSSH8.4的RPM包及升级
目录 一.安装相关依赖包 二.创建rpmbuild目录并下载源码 三.打包及排错 四.升级到OpenSSH 8.4p1 以下是打包好的OpenSSH 8.4p1,包括7个rpm包,欢迎下载使用. Op ...
- 解决编译nginx模块与rpm包安装的nginx不兼容问题
环境:centos nginx-10.0.1 现象: 自己开发一个nginx模块,放到rpm包安装的nginx服务器上启动服务时报错如下: 30490#0: module "/usr/li ...
- mysql rpm 日志_mysql5.1.48-1的src.rpm包安装日志(一)
对linux的菜鸟我来说,装上这个有难度,特意记下来. 安装的系统是centos.升级到最高版本2.6.34,但是没成功,还没找原因. root@localhost lost+found)#rpm - ...
- linux4.9编译内核,centos编译linux-4.9内核rpm包
实际环境中,有时需要用到某个版本的linux内核,但这个版本的内核并没有rpm包,这时我们就需要编译linux内核rpm包.本文介绍在centos6下编译linux-4.9版本内核rpm包,以linu ...
- RPM包制作之Spec文件详解
看这篇文章的人基本都有一个想法,就是:"劳资不想用YUM的安装!不是版本太低就是文件分布太野路子",此时我们需要自己订制软件包的需求,我们会把一些源码包按照我们的需求来做成rpm包 ...
- linux安装spec编译器,RPM包制作之Spec文件参数详解
看这篇文章的人基本都有一个想法,就是:"劳资不想用YUM的安装!不是版本太低就是文件分布太野路子",此时我们需要自己订制软件包的需求,我们会把一些源码包按照我们的需求来做成rpm包 ...
最新文章
- 大数据时代,一名优秀的开发者应具备怎样的特质?
- zzuli 2269:minval
- MySQL 高级- case结构
- (十一)开发环境【不会这些,你就会被认定是菜鸟小白,没做过项目】
- Day5:python之函数(3)
- Kafka常用命令之kafka-console-consumer.sh
- PKMS的queryIntentActivities分析
- Centos 6.5安装python3.5.1
- 雷电模拟器配置文件参数解读
- krpano默认皮肤详解
- Bezier和B样条曲线
- Arch Linux 下安装 st (终端模拟器)
- ionic安卓打印终极解决方案,支持USB打印
- java公路车为什么会被喷,最全指南
- MFC中改变按钮颜色的方法
- linux 关闭浏览器,在Linux和Windows下关闭谷歌Chrome浏览器中的通知提醒的方法
- 多个excel文件不在一个视图里分开独立显示
- 网络钓鱼常用手段大揭秘,超级科技教你如何防范
- 263Echarts - 3D 折线图(三维折线图正交投影)
- mysql源码下载地址
热门文章
- python 遍历字典
- Bootstrap 基本模板
- 统计学习导论 Chapter2--What Is Statistical Learning?
- jstatd,VisualVM使用和报错解决:Could not create remote object--java.security.AccessControlException
- Debian/Ubuntu 报错解决:-bash: ifconfig: command not found
- Apache的管理及优化web
- 计算机 微课 论文,探析毕业论文怎么写 关于微课和电脑论文范例30000字
- php5中魔术方法函数有哪几个,php中的类魔术方法有哪些
- java面向对象思维导图_2020年Java进阶架构师的必备思维导图,让你少走弯路!
- jpa SessionFactory事物失效