Linux源码包快速升级方法详解

Linux 系统中更新用源码包安装的软件,除了卸载重装这种简单粗暴的方法外,还可以下载补丁文件更新源码包,用新的源码包重新编译安装软件。比较两种方式,后者更新软件的速度更快。

使用补丁文件更新源码包,省去了用 ./configured 生成新的 Makefile 文件,还省去了大量的编译工作,因此效率更高。学完本节会对比有更深入的理解。

Linux补丁文件的生成和使用

Linux 系统中可以使用 diff 命令对比出新旧软件的不同,并生成补丁文件。

diff 命令基本格式为:

[root@localhost ~]# diff 选项 old new
#比较old和new文件的不同

此命令中可使用如下几个选项:

  • -a:将任何文档当作文本文档处理;
  • -b:忽略空格造成的不同;
  • -B:忽略空白行造成的不同;
  • -I:忽略大小写造成的不同;
  • -N:当比较两个目录时,如果某个文件只在一个目录中,则在另一个目录中视作空文件;
  • -r:当比较目录时,递归比较子目录;
  • -u:使用同一输出格式;

从生成补丁文件,到使用其实现更新软件的目的,为了让读者清楚地了解整个过程的来龙去脉,下面我们自己创建两个文件(分别模拟旧软件和新软件),通过对比新旧文件生成补丁文件,最后利用补丁文件更新旧文件,具体步骤如下:

  1. 创建两个文件,执行如下命令:

    [root@localhost ~]# mkdir test
    #建立测试目录
    [root@localhost ~]# cd test
    #进入测试目录
    [root@localhost test]# vi old.txt
    our
    school
    is
    lampbrother
    #文件old.txt,为了便于比较,将每行分开
    [root@localhost test]# vi new.txt
    our
    school
    is
    lampbrother
    in
    Beijing
    #文件new.txt

  2. 利用 diff 命令,比较两个文件(old.txt 和 new.txt)的不同,并生成补丁文件(txt.patch),执行代码如下:

    [root@localhost test]# diff -Naur /root/test/old.txt /root/test/new.txt > txt. patch
    #比较两个文件的不同,同时生成txt.patch补丁文件
    [root@localhost test]#vi txt.patch
    #查看一下这个文件
    –/root/test/old.txt 2012-11-23 05:51:14.347954373 +0800
    #前一个文件
    + + + /root/test/new.txt 2012-11-23 05:50:05.772988210 +0800
    #后一个文件
    @@-2, 3+2, 5@@
    school
    is
    lampbrother
    +in
    +beijing
    #后一个文件比前一个文件多两行(用+表示)

  3. 利用补丁文件 txt.patch 更新 old.txt 旧文件,实现此步操作需利用 patch 命令,该命令基本格式如下:

    [root@localhost test]# patch -pn < 补丁文件
    #按照补丁文件进行更新

    -pn 选项中,n 为数字(例如 p1、p2、p3 等),pn 表示按照补丁文件中的路径,指定更新文件的位置。

    这里对 -pn 选项的使用做一下额外说明。我们知道,补丁文件是要打入旧文件的,但是当前所在目录和补丁文件中记录的目录不一定是匹配的,需要 “-pn” 选项来同步两个目录。

    例如,当前位于 “/root/test/” 目录下(要打补丁的旧文件就在当前目录下),补丁文件中记录的文件目录为 “/root/test/dd.txt”,如果写入 “-p1″(在补丁文件目录中取消一级目录),那么补丁文件会打入 “root/test/root/test/old.txt” 文件中,这显然是不对的;如果写入的是 “-p2″(在补丁文件目录中取消二级目录),补丁文件会打入 “/root/test/test/old.txt” 文件中,这显然也不对。如果写入的是 “-p3″(在补丁文件目录中取消三级目录),补丁文件会打入 “/root/test/old.txt” 文件中,old.txt 文件就在这个目录下,所以应该用 “-p3” 选项。

    如果当前所在目录是 “/root/” 目录呢?因为补丁文件中记录的文件目录为 “/root/test/old.txt”,所以这里就应该用 “-p2” 选项(代表取消两级目录),补丁打在当前目录下的 “test/old.txt” 文件上。

    因此,-pn 选项可以这样理解,即想要在补丁文件中所记录的目录中取消几个 “/”,n 就是几。去掉目录的目的是和当前所在目录匹配。

    现在更新 “old.txt” 文件,命令如下:

    [root@localhost test]# patch -p3 < txt.patch
    patching file old.txt
    #给old.txt文件打补丁
    [root@localhost test]# cat old.txt
    #查看一下dd.txt文件的内容
    our
    school
    is
    lampbrother
    in
    Beijing
    #多出了in Beijing两行

    可以看到,通过使用补丁文件 txt.patch 对旧文件进行更新,使得旧文件和新文件完全相同。

通过这个例子,大家要明白以下两点:

  1. 给旧文件打补丁依赖的不是新文件,而是补丁文件,所以即使新文件被删除也没有关系。
  2. 补丁文件中记录的目录和当前所在目录需要通过 “-pn” 选项实现同步,否则更新可能失败。

给apache打入补丁

本节仍以 apache 为例,通过从官网上下载的补丁文件 “mod_proxy_ftp_CVE-2008-2939.diff”,更新 httpd-2.2.9 版本的 apache。

这里使用的补丁文件,修补了 apache 代理 FTP 站点时,模块空指针引用拒绝服务攻击的漏洞(了解即可,不用深究)。

具体更新步骤如下:

  1. 从 apache 官网上下载补丁文件;
  2. 复制补丁文件到 apache 源码包解压目录中,执行命令如下:

    [root@localhost ~]# cp mod_proxy_ftp_CVE-2008-2939.diff httpd-2.2.9

  3. 给旧 apache 打入补丁,具体执行命令如下:

    [root@localhost ~]# cd httpd-2.2.9
    #进入apache源码目录
    [root@localhost httpd-2.2.9]# vi mod_proxy_ftp_CVE-2008-2939.diff
    #查看补丁文件
    –modules/proxy/mod_proxy_ftp.c (Revision 682869)
    + + + modules/proxy/mod_proxy_ftp.c (Revision 682870)
    …省略部分输出…
    #查看一下补丁文件中记录的目录,以便一会儿和当前所在目录同步
    [root@localhost httpd-2.2.9]# patch – p0 < mod_proxy_ftp_CVE-2008-2939.diff
    #打入补丁

    为什么是 “-p0” 呢?因为当前在 “/root/httpd-2.2.9” 目录中,但补丁文件中记录的目录是 “modules/proxy/mod_proxy_ftp.c”,就在当前所在目录中,因此一个 “/” 都不需要去掉,所以是 “-p0″。

  4. 重新编译 apache 源码包,执行如下命令:

    [root@localhost httpd-2.2.9]# make

  5. 安装 apache,执行如下命令:

    [root@localhost httpd-2.2.9]# make install

通过对比《Linux源码包安装和卸载》一节中安装源码包的过程,不难发现,打补丁更新软件的过程比安装软件少了 “./configure” 步骤,且编译时也只是编译变化的位置,编译速度更快。

注意,如果未安装过 httpd-2.2.9,就需要先打入补丁,再依次执行 “./configure”、”make”、
“make install” 命令。

patch 命令不仅可以给就文件打入补丁,还可以执行反操作,即恢复用补丁文件修改过的源文件,例如:

[root@localhost httpd-2.2.9]# patch -R < modjDroxy_ftp_CVE-2008-2939.diff

-R(大写)选项表示还原补丁。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/208940.html<

(0)
管理的头像管理
上一篇2025-04-09 05:59
下一篇 2025-04-09 06:00

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注