精华内容
下载资源
问答
  • 对于Linux 下打补丁,大家可能还没意识到这是个学习Linux内核的非常好的机会,每个补丁的分析都会让你更加了解内核,日积月累,相信逐步积累终会引发质变,我们都会成为大牛~

    对于长期使用Linux的童鞋来说,不说有没有打过补丁,至少这个词大家并不陌生,下面我们通过一个实例来说说:

           前几天接触了TQ3358这块天嵌的ARM板子,想给它装个实时Linux并做测试,在自带的光盘中我找到了“Kernel_3.2_TQ3358_for_Linux_v1.2” 这样一个内核版本(从Makefile中我们可以看到这是个 3.2.0 版本的内核),我下载了实时补丁“ patch-3.2.6-rt13.patch ”(因为官方的内核3.2和3.2.6好像没什么区别,所以我们使用了这个补丁),并下载了Kernel-3.2.6 官方内核(用于在打补丁出问题时查看并判断)。

    注:对于一个实时补丁对应的kernel.org官网上有两个文件我们需要下载,比如说我们的这个3.2.6版本,我们需要下载一个patch-3.2.6-rt13.patch.bz2patches-3.2.6-rt13.tar.bz2,前者用于打补丁后者用于分析学习补丁。

    所以在整个工作开始前我们有下面四个文件:

    $ ls
    Kernel_3.2_TQ3358_for_Linux_v1.2    linux-3.2.6    patch-3.2.6-rt13.patch      patches


    1. 首先我们试打补丁

         在打补丁时使用 --dry-run 参数就会试运行打补丁的过程(并没有真正的改变文件内容)!在内核文件 linux/Documentation/applying-patches.txt 中这样介绍:“--dry-run which causes patch to just print a listing of what would happen, but doesn't actually make any changes” (使用 --dry-run 会打印一系列在打补丁时要发生的事,但是不会真正的作任何改变!)

    我们使用如下命令试打这个补丁并将输出记录到 /tmp/log 文件中:

                                          patch  -p1 --dry-run <../patch-3.2.6-rt13.patch >/tmp/log

    打开 /tmp/log 文件我们会发现里面又出现很多类似于下面这样的Hunk:

    patching file kernel/sched.c
    Hunk #1 succeeded at 190 (offset 1 line).
    Hunk #2 succeeded at 943 (offset 1 line).
    Hunk #3 succeeded at 1283 (offset 1 line).
    Hunk #4 succeeded at 2571 (offset 1 line).
    Hunk #5 succeeded at 2656 (offset 1 line).
    Hunk #6 succeeded at 2833 (offset 1 line).
    Hunk #7 succeeded at 2909 (offset 1 line).
    Hunk #8 succeeded at 2925 (offset 1 line).
    Hunk #9 succeeded at 3211 (offset 1 line).
    ......
    

    那么对于这样的Hunk 我们的补丁会不会有什么影响呢?会不会因为有Hunk 打不上补丁呢?这就要我们根据每个Hunk指定的文件来判断。


    2. 简介 Linux 补丁的原理

    我们使用vim 打开 patch 文件,就会发现patch 文件中充满了这样的结构:

    Index: linux-3.2/arch/x86/kernel/apic/apic.c
    ===================================================================
    --- linux-3.2.orig/arch/x86/kernel/apic/apic.c
    +++ linux-3.2/arch/x86/kernel/apic/apic.c
    @@ -876,8 +876,8 @@void __irq_entry smp_apic_timer_interrup
         * Besides, if we don't timer interrupts ignore the global
         * interrupt lock, which is the WrongThing (tm) to do.
         */
    -   exit_idle();
        irq_enter();
    +   exit_idle();
        local_apic_timer_interrupt();
        irq_exit();

    ...

    那么聪明的你应该大致能猜出来这是什么个结构:

    首先使用 Index: linux-3.2/arch/x86/kernel/apic/apic.c 指明下面的这段修改是什么文件中的;

    再用 “--- linux-3.2.orig/arch/x86/kernel/apic/apic.c
    +++ linux-3.2/arch/x86/kernel/apic/apic.c” 这么两行标注一小段补丁,这两行称之为补丁头,---开头的那行 表示旧文件,+++开头的那行 表示新文件。感觉这两行和Index 那行有点冗余!

    接下来是补丁内容:@@ -876,8 +876,8 @@ 用于表述补丁所要修改的代码位于这个文件中的第几行,void __irq_entry smp_apic_timer_interrup用于指定所要修改的代码在哪个函数里面。 如上面这个补丁在文件中的状况为:

     865 void __irq_entry smp_apic_timer_interrupt(struct pt_regs *regs)    // 补丁>所要修改的函数函数
     866 {
            ...
     876      * Besides, if we don't timer interrupts ignore the global     // 补丁>起始位置,876行
     877      * interrupt lock, which is the WrongThing (tm) to do.
     878      */
     879     exit_idle();               // 现在exit_idle();是在irq_enter();之前的,>我们可以看到这个补丁所要做的其实就是把它放到irq_enter();后面去
     880     irq_enter();
     881     local_apic_timer_interrupt();
     882     irq_exit();
     883 
     884     set_irq_regs(old_regs);
     885 }
     886 
     887 int setup_profiling_timer(unsigned int multiplier)

    Linux的补丁内容还包括三个部分:修改语句前三句 + 修改语句 + 修改语句后三句。

    我们可以看到在正式修改的语句 -   exit_idle();之前有三句正常的代码,这是用来给补丁定位的,因为单纯只靠行数来确定补丁修改的位置是不够的,作为开源软件,Linux系统内的代码可能会被修改,所以得在补丁之前添加三句代码用来给补丁定位。

    我们还能看到在+   exit_idle();语句的后面还有三句正常的代码,这是补丁结束的标志,也需要匹配以便检查我们的补丁是否合适!


    3. 对Hunk的分析

    好了,现在我们已经知道了Linux的补丁是如何运作的,那么我们可以根据上面使用 --dry-run 记录的打补丁记录来分析里面出现的所有Hunk,比如上面提到的:

    patching file kernel/sched.c
    Hunk #1 succeeded at 190 (offset 1 line).
    Hunk #2 succeeded at 943 (offset 1 line).
    Hunk #3 succeeded at 1283 (offset 1 line).
    Hunk #4 succeeded at 2571 (offset 1 line).
    Hunk #5 succeeded at 2656 (offset 1 line).
    Hunk #6 succeeded at 2833 (offset 1 line).
    Hunk #7 succeeded at 2909 (offset 1 line).
    Hunk #8 succeeded at 2925 (offset 1 line).
    Hunk #9 succeeded at 3211 (offset 1 line).
    ......
    


    这很有可能就是在当前打补丁的文件中在前面有一个空白行,导致后面所有的补丁都有(offset 1 line) ! 

    我们可以在补丁里面打开这个文件(kernel/sched.c)的补丁,我们可以看到第一个补丁是:

    @@ -189,6 +189,7 @@ void init_rt_bandwidth(struct rt_bandwid

        hrtimer_init(&rt_b->rt_period_timer,
                CLOCK_MONOTONIC, HRTIMER_MODE_REL);
    +   rt_b->rt_period_timer.irqsafe = 1;
        rt_b->rt_period_timer.function = sched_rt_period_timer;
     }

    所以我们知道,这个补丁是靠 一个空白行加上hrtimer_init函数占用的两行作为定位,并且空白行位于第189行。

    下面我们打开kernel/sched.c 打开这个发生Hunk 的文件,跳转到第189 行,我们可以看到:

     189     raw_spin_lock_init(&rt_b->rt_runtime_lock);
     190 
     191     hrtimer_init(&rt_b->rt_period_timer,
     192             CLOCK_MONOTONIC, HRTIMER_MODE_REL);
     193     rt_b->rt_period_timer.function = sched_rt_period_timer;
     194 }


    这也应证了我们的猜想,补丁中用于定位的空白行应该在第189行,而在这个内核中的第189行并不是空白行,补丁自动上下找,在190~192这三行找到对应的定位,并试打补丁,前三句加后三句都正常,所以这个补丁虽然有 1 行的误差,但是正常了!所以 “ Hunk #1 succeeded at 190 (offset 1 line). ”提示这里虽然有Hunk但是是succeeded的!在这个文件的第一个补丁就有一个偏移,所以后面的所有的补丁都有一行偏移,这也解释了为什么这个文件那么多Hunk的原由!

    同样,我们可以看到:

    patching file kernel/fork.c
    Hunk #2 succeeded at 212 (offset 16 lines).
    Hunk #3 succeeded at 568 (offset 16 lines).
    Hunk #4 succeeded at 1063 (offset 16 lines).
    Hunk #5 succeeded at 1174 (offset 16 lines).
    Hunk #6 succeeded at 1236 (offset 16 lines).

    这样的偏移有十六行的总不能有十六个空白行吧?大家应该猜到了这样大的偏移应该是程序猿在这个文件里添加了一个函数或者类似的!


    其实,在内核中这样的Hunk succeeded 都没多大问题,虽然有Hunk但是都正常了!但是如果是作产品级开发,我们不能放过任何一个Hunk,我们需要的是团队合作 + 分析patch log中所有的Hunk + 准确的记录(包括这个Hunk的原由,重不重要等)! 


    那么Hunk FAILED呢?我们在这个log中找到了这样几行:

    patching file arch/arm/kernel/process.c
    Hunk #1 FAILED at 214.
    Hunk #2 succeeded at 612 (offset 121 lines).
    1 out of 2 hunks FAILED -- saving rejects to file arch/arm/kernel/process.c.rej

    这里有个Hunk FAILED,说明补丁的前三句和后三句定位出问题了,按照常理,我们先找到相应的文件补丁:

    --- linux-3.2.orig/arch/arm/kernel/process.c
    +++ linux-3.2/arch/arm/kernel/process.c

    @@ -214,9 +214,7 @@ void cpu_idle(void)
            }
            leds_event(led_idle_end);
            tick_nohz_restart_sched_tick();
    -       preempt_enable_no_resched();
    -       schedule();
    -       preempt_disable();

    +       schedule_preempt_disabled();
        }
     }

    我们发现当前这个补丁是中规中矩的“前三+所做修改+后三”的格式,那么为什么会失败呢?赶紧打开内核中的这个文件一探究静:打开arm/kernel/process.c文件,找到 cpu_idle函数,我们发现所要删除的前三句和补丁中的不一样而且位置也有所偏移:

    254         }
    255         tick_nohz_restart_sched_tick();
    256         idle_notifier_call_chain(IDLE_END);
    257         preempt_enable_no_resched();
    258         schedule();
    259         preempt_disable();
    260     }
    261 }
    

    这应该是这个文件经过厂家修改,所以我们预先准备好的官方 kernel-3.2.6就用上了: 使用 vimdiff arch/arm/kernel/process.c ../linux-3.2.6/arch/arm/kernel/process.c查看两个文件之间的区别,并找到我们补丁对应的位置:


    我们可以看到官方内核中的代码对应补丁是前三句后三句都匹配的,而这个内核中的是前三句完全不匹配,从而导致patch的失败!

    对于这样的情况,我们要做的工作就是调查这个补丁对应的所有文档:包括整个补丁包中还有没有类似补丁包括 patches 里对应的补丁说明;包括在 linux-stable-rt 的 git 仓库中使用git blame 查明是谁、为什么要做这个修改。

    如果你自己是在闹不明白,可以上邮件列表或者直接给补丁的作者发邮件问清楚这个补丁是干什么的?为什么需要?为什么在实时内核中需要在普通内核中不需要?在这个文件中的这个补丁会引发多大的性能损失?...

    在做嵌入式开发时、在做系统内核的调研时要多做查询、多作测试才能做好产品,才能做好学习!


    4. 真正的打上补丁并对rej 文件处理

    经过查资料 + 调研 + 测试,你会发现这个补丁是否对你有用,我在这说明这个补丁是对RT-Linux 很重要的补丁:

     1462 +/**
     1463 + * schedule_preempt_disabled - called with preemption disabled
     1464 + *
     1465 + * Returns with preemption disabled. Note: preempt_count must be 1
     1466 + */
     1467 +void __sched schedule_preempt_disabled(void)
     1468 +{
     1469 +   __preempt_enable_no_resched();
     1470 +   schedule();
     1471 +   preempt_disable();
     1472 +}

    我们可以看到在补丁中的 linux-3.2/kernel/sched.c 的实时补丁中使用schedule_preempt_disabled();函数将三句“    preempt_enable_no_resched();         schedule();         preempt_disable(); ” 封装在一起。那么这个封装对实时系统的抢占很重要么? 这是一个大的补丁,在这整个大的补丁中对于所有的这三句都进行替换,所以这是个对实时内核很重要的一个修改。(注:至此的判断已经足矣让我们在失败的补丁中确定这个修改的重要性!但是如果你想更好的学习内核,你需要继续找它的用途知道原理~本文不详述)

    所以我们下们进行正式的打补丁: patch  -p1  <../patch-3.2.6-rt13.patch >/tmp/log1   (去掉了 --dry-run 参数)

    我们会在日志中发现与上面一样的Hunk FAILED:

    patching file arch/arm/kernel/process.c
    Hunk #1 FAILED at 214.
    Hunk #2 succeeded at 612 (offset 121 lines).
    1 out of 2 hunks FAILED -- saving rejects to file arch/arm/kernel/process.c.rej

    因为我们已经确定了这个failed 可能对内核产生实时性能的影响,所以我们可以去 arch/arm/kernel/process.c 手动的将    preempt_enable_no_resched();      schedule();   preempt_disable();这三句去掉,添加上     schedule_preempt_disabled(); 。


    5. patch学习总结

          分析内核补丁是个漫长的过程,如果你是个新手,一个Hunk是需要很久的,整个log 文件可能会花上你一周甚至更久! 但是对于产品级的内核就要达到这样的精准度,字字句句斟酌斟酌再斟酌! 当你是个大牛时,你会发现前面的这个工作是非常重要的更是非常有价值的!


    6. 试验自制个补丁

    比如说我们目前有这么个Helloworld.c文件:

    #include "stdio.h"
    int main(int argc ,char **argv)
    {
        printf("Hello World");
    }

    我想给它改成:

    #include "stdio.h"
    int main(int argc ,char **argv)
    {
        printf("Hello World\n");
        return 0;
    }

    前面的helloworld程序命名hello.c,后面的命名为hello_new.c

    生成补丁需要用这个命令  :  diff -uN from-file to-file >to-file.patch  ,所以我们的这个补丁需要这么用: diff -uN hello.c hello_new.c >patch.test.patch

    打开生成的patch.test.patch,我们可以看到:

    --- helloworld.c    2013-11-26 20:35:48.736255687 +0800
    +++ helloworld1.c   2013-11-26 20:36:10.340255754 +0800
    @@ -1,5 +1,6 @@
     #include "stdio.h"
     int main(int argc ,char **argv)
     {
    -   printf("Hello World");
    +   printf("Hello World\n");
    +   return 0;
     }

    恩,效果不错!!!了罢此文~~~


    =====================================

    引用资料:

    【1】 Linux 内核文档: linux/Documentation/applying-patches.txt    & patch的 manpage(man patch)

    【2】 RT_PREEMPT的维基主页 https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO

    【3】 linux下patch命令使用详解---linux打补丁命令  http://www.linuxso.com/command/patch.html

    【4】 补丁(patch)的制作与应用  http://linux-wiki.cn/wiki/zh-hans/%E8%A1%A5%E4%B8%81(patch)%E7%9A%84%E5%88%B6%E4%BD%9C%E4%B8%8E%E5%BA%94%E7%94%A8


    ======================================

    注:本文来自 著名的实时系统专家、Safety专家 Nicholas Mc Guire 的课!我这只能算作学习总结,同时也是写给众多学习Linux的童鞋们学习之用,大家好好努力,与我同进步!





    展开全文
  • 内核打补丁

    千次阅读 2018-10-10 15:37:31
    内核打补丁 如果需要的某些特性并没有被现有内核支持,则需要去获取相关的补丁。比如,为了使内核支持图形化的启动界面,我们可能要用到bootsplash工具。!bootsplash项目 http://www.bootsplash.org/ 上提供了针对很...

    内核打补丁

    如果需要的某些特性并没有被现有内核支持,则需要去获取相关的补丁。比如,为了使内核支持图形化的启动界面,我们可能要用到bootsplash工具。!bootsplash项目 http://www.bootsplash.org/ 上提供了针对很多内核版本的补丁供下载。

    • 通过打补丁升级内核

    通过打补丁的方法升级内核,可以不用下载整个内核源码。针对每个内核版本的补丁文件可以在 ftp.kernel.org 上面获得,问题是我们应该选择哪个补丁文件,一个补丁文件到底应该打在哪个版本的内核上。下面小节介绍了如何应用和卸载补丁,详细的内容请查看内核文档Document/applying-patchs.txt
       
       1. 什么是补丁
        一个补丁文件就是一个文本文档,由diff工具创建,它存放了两个不同版本的源码之间的差异
       2. 如何打补丁与卸载补丁
        patch工具可以用于打补丁和卸载补丁。内核的补丁是相对于保存内核源码的父目录生成的,这就意味着,补丁文件中的文件路径包含了内核源码存放目录的名字(比如,linux-2.6.29,或者像是"/a"和"/b"之类的其它名字)。但是很可能我们本地系统上的内核源码存放目录和补丁中不匹配,为了解决这个问题,我们需要切换到自己的源码目录,并且在执行patch命令的时候加上"-p1"参数,这样就会去掉补丁文件中路径的第一个分量,比如:

    # cd /usr/src/linux
    # patch -p1 < ../patch.x.y.z
    

    为了卸载一个以前打上的补丁,需要使用"-R"参数。

    # patch -R -p1 < ../patch.x.y.z
    

    3. 如何利用补丁升级内核
       考虑这样的几个场景:将内核从2.6.23升级到2.6.24;将内核从2.6.23.8升级到2.6.24.6;将内核从2.6.23.6升级到2.6.23.8。不管处于哪种场景,打补丁时要谨记的一点是:内核的补丁文件都是以2.6.x(基础稳定版basic stable, 2.6.x.y是稳定版 stable)为基础发布的。下面对这3种场景分别进行介绍

    (1)将内核从2.6.23升级到2.6.24。这种情况,可直接使用补丁文件patch-2.6.24

    # patch -p1 < ../patch-2.6.24
    

    因为下载得到的补丁文件通常是使用gzip或者bzip2压缩的格式,所以使用前还要将其解压生成patch-x.y文件。不过,我们也可以不解压,使用下面的命令形式:

    # bzcat ../patch-2.6.24.bz2 | patch -p1(bz2格式)
    or # zcat ../patch-2.6.24.gz | patch -p1(gz格式)
    

    (2)将内核从2.6.23.8升级到2.6.24.6。这种情况下,我们需要将升级的过程分解为几个步骤,首先将2.6.23.8退回到2.6.23,然后再升级到2.6.24,最后升级到2.6.24.6。

    # bzcat ../patch-2.6.23.8.bz2 | patch -p1 -R
    # bzcat ../patch-2.6.24.bz2 | patch -p1
    # bzcat ../patch-2.6.24.6.bz2 | patch -p1
    

    (3)将内核从2.6.23.6升级到2.6.23.8。在这种情况下,我们同样需要将升级过程分解,首先将2.6.23.6退回到2.6.23,然后再升级到2.6.23.8。

    # bzcat ../patch-2.6.23.6.bz2 | patch -p1 -R
    # bzcat ../patch-2.6.23.8.bz2 | patch -p1
    

    除了patch之外,也有其它的用来打补丁的工具,比如interdiff、ketchup等。

    展开全文
  • Linux文件打补丁

    千次阅读 2019-03-30 11:27:37
    (最强的武器就是打补丁 ^ ^) 假如有1.c和2.c 其中2.c为高版本文件,1.c为低版本文件 我们想要用2.c文件替换掉1.c文件中内容 可以用命令diff 1.c 2.c > test.patch 来生成补丁包 其中patch文件中 '<'代表的...

    (最强的武器就是打补丁 ^ ^)

    假如有1.c和2.c
    在这里插入图片描述
    其中2.c为高版本文件,1.c为低版本文件
    我们想要用2.c文件替换掉1.c文件中内容
    可以用命令diff 1.c 2.c > test.patch
    来生成补丁包
    在这里插入图片描述
    其中patch文件中 '<'代表的是后面要删除的内容,而 '>'代表的是后面要增加的内容。
    然后是"1,3c1,3"的意思

    为了方便理解我再生成一个补丁包
    在这里插入图片描述对比一下"2c2,3",可以发现这句话的意思就是删除第一个文件(旧版本)的第2行,在后面增加另一个文件(新版本)的第2到3行。所以上面的"1,3c1,3"代表的是删除第一个文件的第1到3行,在后面增加第二个文件的第1到3行咯。

    接下来是打补丁的操作
    用命令 patch -p0 1.c(想被打的文件) < test.patch(补丁)
    在这里插入图片描述
    在这里插入图片描述
    看看那结果是不是和预期一样捏。

    另外还有一个反向打补丁的操作(反打的意思吗哈哈)
    patch -Rp0 1.c < test.patch (R means : reverse)

    在这里插入图片描述
    在这里插入图片描述
    我的理解是还原打补丁前的文件,将< >这两个符号方向调换,那不就是负负等正吗。

    我觉得这打补丁用在大量需要修改文件的项目中有奇效啊。

    展开全文
  • Oracle打补丁步骤

    2020-02-20 20:18:52
    2、将下载好的zip文件传入要打补丁的主机。解压到一个文件夹里(可以是自己临时创建的一个文件夹<PATCH_TOP_DIR>,但需要注意整个文件夹包括里面的文件的属主都修改为oracle) 3、关闭数据库...

    1、登录MOS,在patches&updates查找自己想要安装的补丁号或者bug code,下载补丁。同时查阅readme,这里面写的是怎么安装补丁以及安装补丁的事项。

    2、将下载好的zip文件传入要打补丁的主机。解压到一个文件夹里(可以是自己临时创建的一个文件夹<PATCH_TOP_DIR>,但需要注意整个文件夹包括里面的文件的属主都修改为oracle)

    3、关闭数据库(shutdown immediate)。

    4、关闭监听(su - grid。lsnrctl stop)。

    5、$ cd <PATCH_TOP_DIR>/<patch_id>
          $ export PATH=$PATH:$ORACLE_HOME/OPatch
          $ opatch prereq CheckConflictAgainstOHWithDetail -ph ./

    6、开始安装:
          $ cd <PATCH_TOP_DIR>/<patch_id>
          $ opatch apply

    7、查看清单,确认已经安装补丁
          $ opatch lsinventory

    8、启动监听,启动数据库

    9、如果是rac集群的话,需要每个节点都打一次补丁

     

    展开全文
  • git 打补丁

    千次阅读 2013-09-13 10:03:05
    使用git apply打补丁 如果收到一个通过电邮发来的补丁,你应该先把它应用到特性分支上进行评估。有两种应用补丁的方法:git apply 或者 git am。使用 apply 命令应用补丁如果收到的补丁文件是用 git diff 或由其它 ...
  • 制作补丁与打补丁

    2019-03-02 00:59:46
    在Uboot学习中,接触到了打补丁这个操作,首先来学习下diff的patch文件格式. 命令参数 diff 常使用的 patch 参数: ”-u”:表示在比较结果中输出上下文中一些相同的行 “-r“:表示递归比较各个子目录下的文件...
  • weblogic打补丁方法

    千次阅读 2019-05-31 15:57:47
    先到官网下载对应weblogic的版本补丁 如果没有对应weblogic的版本补丁,建议重新安装一个对应版本的...补丁包是windows和linux共用的,一般windows在打补丁前要把服务停掉,linux打完重启服务即可生效 下载补丁...
  • java项目代码打补丁

    千次阅读 2018-11-27 11:42:56
    这个打补丁主要针对的是java项目: 1、首先要知道为什么打补丁: 通常来说,当我们自己在研发过程中需要对代码进行修改时,是不需要打补丁的,因为是我们自己的项目,我们可以直接改动对应的代码文件即可。但...
  • python 模块打补丁

    2020-02-25 14:08:07
    先自定义两个模块,然后,我们调用模块时,用打补丁方式,改写mod_1.py模块。为mod_2.py内容;其实这就相当于,在不改动mod_1.py模块的前提下,打上补丁。 写这个主要是gevent协程的时候,用到的monkey.patch_all()...
  • Git打补丁常见问题

    千次阅读 2018-11-11 11:23:08
    Git打补丁常见问题
  • Linux Weblogic打补丁

    2019-11-11 12:43:32
    1.学习打补丁的链接地址 URl:http://paperbee.definesys.com/content?id=6cfd4afba6284066b2f1833ff454fca2 2.首先我们先创建文件夹PATCH_TOP,如果你有了就不用了,没有就创建一个。 3.将补丁包上传至新建...
  • linux下打补丁和生成补丁

    千次阅读 2018-06-16 17:49:02
    之前在公司做项目的时候用到了在linux打补丁的技术(呵呵,其实也不是什么技术说大了就是一条命令),感觉这个还是挺有用的,因为很多原厂都是给出源码基础或是他们修改基础上的补丁包都我们,让我们自己打上去来...
  • Oracle打补丁

    2013-08-09 22:07:38
    打补丁是个技术活。 1、阅读readme 2、先打GI的补丁:  停掉GI,Has(high voilable server)  以grid身份进入到grid的家目录,将OPatch解压到家目录(准确的说是安装目录,家目录和安装目录可以不同)。...
  • 一、linux打补丁方法1、处理单个文件补丁的方法:2、对整个文件夹打补丁的情况:二、git打patch方法1、git format-patch (推荐)2、git diff 一、linux打补丁方法 1、处理单个文件补丁的方法: # ...
  • 为oracle 12c打补丁

    千次阅读 2018-02-07 20:17:24
    用惯了sqlserver,今天给oracle打补丁,才发现oracle与sqlserver区别真不是一般的大,怕忘了做个记录 一、首先设置相关环境变量 1、 ORACLE_HOME:路径E:\app\Administrator\virtual\product\12.2.0\dbhome_1 ...
  • linux内核打补丁步骤

    千次阅读 2016-05-28 10:00:14
    1, 打补丁之前需要准备好原始文件和补丁文件,例如给linux系统打补丁需要准备好linux-2.6.22.6.tar.bz2(原始文件)和linux-2.6.22.6_jz2440.patch(补丁文件), 2, 将这两个文件放到linux系统的一个文件夹下如/...
  • 安装Mysql8打补丁顺序

    2020-08-12 14:10:46
    windows Server 2008 R2安装Mysql 8的打补丁顺序一、前言二、打补丁顺序三、其它平台 一、前言 原以为已经完全搞定Mysql 8在Windows平台上的安装,不料在将一台旧服务器搭建测试环境时又出问题。经一整天折腾,总算...
  • weblogic每个季度都会有psu更新,打补丁操作也变成了每个季度都要做的事情,我们往往是通过登陆xshell等工具,一台一台的停服务打补丁启动服务。如果是单机部署的weblogic并且数量不多的话还好,通过手动登陆系统...
  • sql server升级打补丁

    千次阅读 2018-11-29 11:01:00
    sql server打补丁 sql server升级打补丁 SQLServer怎么升级补丁?一直以来打算整理 SQL Server 补丁资料,刚好今天有事醒的早,于是把之前的资料整理一下。在入DBA这坑以来,开始那一两年,甚...
  • 程序是人设计出来的,总是会有这样那样的问题与漏洞,目前的主流解决方法就是为有问题的程序打补丁,升级新版本。 在Linux系统中diff命令可以为我们生成补丁文件,然后使用patch命令为有问题的程序代码打补丁。 ...
  • windows 打补丁转载)

    2019-03-08 14:47:52
    windows 打补丁转载)补丁安装的风险 因为主机安装补丁后重启才会生效,因此极小概率主机无法正常重启或重启时间较长,而导致影响业务。插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格...
  • Linux打补丁常用命令

    千次阅读 2017-01-09 10:22:04
    生成补丁文件diff -Nurp 源文件或文件夹 新的文件或文件夹 > xxx.patch打补丁patch -p0 操作需要在当前目录下,先比较两个文件或文件夹的不同,再用patch将生成的xxx.patch打到目标文件或文件夹中。
  • win7打补丁提示0x80240037

    千次阅读 2019-06-10 17:11:12
    1、先将要打补丁后缀名msu改为cab,然后解压,将解压的cab文件复制到d盘根目录 2、以管理权限运行CMD 3、dism /online /add-package /packagepath:"d:\文件名.cab ...
  • ORACLE之打补丁

    千次阅读 2015-08-01 13:14:30
    在这里先吐槽一下,打补丁,方法有很多,有的需要看文档,敲命令,有的直接解压覆盖,作为一名安安静静的美男子,能不能安安静静的装个补丁。 1.查看当前版本 select * from v$version; 然后oracle那个收费的...
  • 打补丁遇到的常见问题整理

    千次阅读 2018-05-31 14:47:16
    之前打补丁遇到了一些问题,下面对这些问题做一个总结。1、操作系统参数配置;linux:cat /etc/sysctl.confaix:smitty操作系统参数配置不当会导致很多问题,知识点也很丰富,此篇暂不展开2、udev配置cat /etc/udev/...
  • 使用diff和patch工具打补丁

    千次阅读 2018-07-03 17:13:26
    程序是人设计出来的,总是会有这样那样的问题与漏洞,目前的主流解决方法就是为有问题的程序打补丁,升级新版本。 在Linux系统中diff命令可以为我们生成补丁文件,然后使用patch命令为有问题的程序代码打补丁。...
  • 系统审计 服务安全 Linux安全之打补丁
  • EBS系统打补丁(Patch)1. 前期准备2.Oracle EBS R12系统打补丁2.1. R12 的文件系统2.2. ADOP3.R11打patch3.1. R11系统打补丁 1. 前期准备 查询需要的补丁 1:搜索需要的补丁,(已确定需要的补丁号:25185917 ) ...
  • Oracle数据库如何打补丁

    千次阅读 2016-09-03 21:29:13
    1.数据库打补丁 2.回退

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 120,056
精华内容 48,022
关键字:

打补丁