某应用突然发布了一个紧急补丁,要求必须、尽快给应用打补丁,否则会有一些危险。

(图源 :pixabay)
看了一下补丁以两种形式提供:源代码以及二进制。
因为我一项都是使用源代码自行编译应用,所以首先想到的还是使用源码编译。这就遇到了第一个问题,如何给源码应用补丁。
给源码打补丁
看了一眼源码的补丁后缀为.diff,并且看了一下文件的文本内容,不难判断补丁是由git diff生成。
那么给源码打补丁其实很简单
- 使用
git clone下载指定版本的源代码。 - 使用
scp将对应版本的补丁文件上传至对应目录。 - 使用
git apply --check xxx.diff检查补丁 - 使用
git apply xxx.diff应用补丁(亦即打补丁)
然后按着正常的流程编译代码即可。
make Error 137
以前编译源码都一且顺利,这次编译着编译着,竟然把VPS干死机了,从来没有遇到过的事情。
无奈之下,只能登录到VPS后台控制面板,远程启动启动,然后从新编译并关注输出。然后总算让我发现大量的Error 137信息。
Google查询了一下,make 出现Error 137错误信息,是由于内存不足。
A 137 code is issued when a process is terminated externally because of its memory consumption. The operating system's out of memory manager (OOM) intervenes to stop the program before it destabilizes the host.
可是我的VPS可是有着32G内存的高配主机呀(但是只有4个CPU内核),我试着在编译时指定只使用2个线程,这次倒是没死机。但是出了一堆其它错误后编译失败。
我怀疑错误和这句提示有关:
warning "Versions of libc++ prior to the one shipped with Clang 3.5.0 are not supported by Hana."
但是因为每次编译都需要很长时间,我懒得去找问题所在,决定直接应用二进制补丁啦。
解包.dep文件
官方提供的二进制补丁是一堆不同应用版本&系统版本的.dep后缀文件,所以首先我要选择我要使用的应用版本并且系统版本。
选择好了之后,用scp将文件上传至VPS对应目录。
然后问题来了,一般的操作都是直接将对应的dep文件安装到系统中去,也就是使用如下指令:
sudo dpkg -i xxx.deb
或者
sudo apt install xxx.deb
但是因为之前我都是从源码编译安装的,而且是以用户形式(而不是root)来运行应用的,所以显然这种安装方式并不适合我。
所以我决定将.dep包解包,并从中提取编译好的应用文件,然后替代我的文件。
解包指令为:
mkdir hotfix
dpkg -X xxx.dep hotfix
然后去hotfix目录以及其下的目录中查找就可以找到对应的二进制文件,直接将其复制并覆盖我的文件,一且搞定!
总结
这次被逼无奈使用二进制补丁,突然发现我每次都从源码编译又傻又笨又浪费时间,但是觉得还是自己编译放心一些。

(图源 :pixabay)
当我做完这一切之后,应用又发布了新版本,也就是说,可以直接使用新版本而无需打补丁了,哎,白折腾了,好想喝杯咖啡压压惊,又怕晚上失眠,哎。
这是O哥职业的强迫性 哈哈
哈哈,瑞幸咖啡表示点咖啡就选瑞幸,便宜好喝还顺丰送上门.
啊,那够运费的不?哈哈哈
两杯以上就可以包邮了哦😄
大佬一般都是不走寻常路,不折腾下,怎么知道自己牛不牛?技术有没有精进?😂
@tipu curate
好专业 就是一句没看懂😖
Upvoted 👌 (Mana: 28/58) Liquid rewards.
谢谢点太太
!LOL
lolztoken.com
Well……I hear he is a pain in the neck.
Credit: reddit
@oflyhigh, I sent you an $LOLZ on behalf of gameexp
(4/6)
看不懂😭
把安装包拆了然后直接复制粘贴盖下去的这套操作,我也要学起来,可能偶尔有用……官方没给已编译好但是打包成.tar.gz格式的吗?😂