我正在尝试使用xdelta3远程块设备与本地块设备同步。我可以xdelta3使用以下命令轻松生成补丁文件:
xdelta3 -e -B 33554432 -v -9 -I 0 -s /dev/loop5p2 /dev/loop4p2 patch.xd3
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用以下命令在远程系统上解码时:
xdelta3 -v -d -B 33554432 -s /dev/sda2 patch.xd3 /dev/sda3
Run Code Online (Sandbox Code Playgroud)
...我收到以下错误:
xdelta3: non-seekable source in decode: XD3_INTERNAL
Run Code Online (Sandbox Code Playgroud)
据我了解,这是由于没有足够大的缓冲区造成的。然而,我的-B论点等于补丁的创建者。事实上,我可以将这个尺寸加倍,但仍然行不通。
我需要应用内核补丁(https://lkml.org/lkml/2015/3/31/929)才能让我的触摸板正常工作。我想我应该使用 dkms 来做到这一点。我正在阅读的大部分内容都是关于让 dkms 创建模块的。它也可以用来修补内核吗?
我期待什么:
全部自动进行,但比安装预编译内核慢一点。
我走在正确的轨道上吗?我该怎么做?(你能指出手册中正确的页面吗)
我使用的是Ubuntu 15.04
Linux kubuntu 3.19.0-15-generic #15-Ubuntu SMP 四月 16 日星期四 23:32:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
我曾经diff制作过补丁文件。diff old.txt new.txt:
1c1
< Lorem ipsum dolor sit amet, consectetur adipiscing
---
> The quick brown fox jumps over the lazy dog.
Run Code Online (Sandbox Code Playgroud)
输出采用默认的“正常差异”格式。
我可以在这个补丁文件中写注释吗?如果是这样,补丁文件是否可以合理移植?
我正在尝试将transparency补丁添加到dwm. 我下载了.diff文件并在我的 dwm 目录中运行了这个:
max@linux-vwzy:~/misc/dwm/dwm-5.9> patch < dwm-transparency.diff
patching file config.def.h
patching file dwm.c
Hunk #1 FAILED at 58.
Hunk #5 succeeded at 306 (offset 1 line).
Hunk #6 succeeded at 847 (offset 27 lines).
Hunk #7 succeeded at 882 (offset 27 lines).
Hunk #8 FAILED at 1125.
Hunk #9 succeeded at 1558 with fuzz 1 (offset 2 lines).
2 out of 9 hunks FAILED -- saving rejects to file dwm.c.rej
Run Code Online (Sandbox Code Playgroud)
我之前打过补丁dwm以添加其他几个补丁。它们有可能发生冲突吗?或者这是另一个错误?
我在将 .diff 补丁添加到文件时遇到一些问题。补丁文件本身似乎没问题,但它不断给出错误:
\n\nroot@pipiripi:/home/tomek/mad# patch mifare-mad.pl < pastie1.diff\npatching file mifare-mad.pl\npatch: **** malformed patch at line 434: \nRun Code Online (Sandbox Code Playgroud)\n\n补丁的代码是:
\n\n--- mifare-mad.pl 2011-02-06 08:41:06.000000000 +0100\n+++ mifare-mad.pl 2012-06-28 10:59:36.000000000 +0200\n@@ -7,16 +7,20 @@\n # MIFARE Application Directory (MAD)\n # http://www.nxp.com/acrobat_download2/other/identification/MAD_overview.pdf\n\n-use Data::Dump qw(dump);\n+use Data::Dumper;\n\n my $debug = $ENV{DEBUG} || 0;\n\n my $function_clusters;\n my $mad_id;\n+my $wkm_ttid;\n+my $wkm_pos;\n+my $wkm_line;\n\n while(<DATA>) {\n chomp;\n next if m/^#?\\s*$/;\n+ $_=~s/\\s+#.*//;\n my ( $code, $function ) = split(/\\s+/,$_,2);\n my $h = \'[0-9A-F]\';\n if ( $code =~ m/^($h{2})-($h{2})$/ ) …Run Code Online (Sandbox Code Playgroud) 我从来没有在 Linux 中打过任何补丁,我无法完全弄清楚写这篇文章(第二段)的人是什么意思。该目标源qemu来自 github,要应用的更改是:
diff --git a/linux-user/flatload.c b/linux-user/flatload.c
index 58f679e..c13a201 100644
--- a/linux-user/flatload.c
+++ b/linux-user/flatload.c
@@ -44,7 +44,7 @@
#define ntohl(x) be32_to_cpu(x)
#include
-//#define DEBUG
+#define DEBUG
#ifdef DEBUG
#define DBG_FLT(...) printf(__VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)
这diff对我来说似乎是一个很长的命令,但尝试执行它失败了。经过一番搜索,我虽然必须将其保存为 ieqemu.patch并使用 运行它patch,但是在尝试了一些失败的组合之后。
在这种情况下,我应该如何处理上面的代码片段?
我有一个包含文本文件的小项目文件夹,我想将其张贴在某处以便在论坛上提问。在最简单的情况下,让我们假设我有这样的事情:
mkdir aaa
cd aaa
echo AAA > aaa.txt
mkdir bbb
echo BBB > bbb/bbb.txt
Run Code Online (Sandbox Code Playgroud)
显然,我想要子文件夹结构:
aaa/
??? aaa.txt
??? bbb
??? bbb.txt
Run Code Online (Sandbox Code Playgroud)
......当我分享这个时会被保留下来。所以我想首先使用https://gist.github.com/并为每个文件输入子目录名称;不幸的是 github 回应:
内容文件不能在子目录中或在名称中包含“/”
...而且我不打算在那里注册,只是为了能够通过 检出子目录并将子目录提交到要点git,对于这样的事情(人们希望他们接受 openID,但是......呃)。
所以,我想,也许我可以以某种方式将整个目录结构和文件内容打包为一个diff补丁文件;那么作为单个文件,应该很容易上传到一个要点。但是,我不知道如何指定我的文件夹和空文件夹之间的差异;我试过:
$ diff -Naur /dev/null /tmp/aaa
diff: /tmp/aaa/null: No such file or directory
Run Code Online (Sandbox Code Playgroud)
......但显然,这行不通。
但是,原则上应该是可能的 - 这是一个测试用例git:
mkdir aaa
cd aaa
git init
git config user.name test
git config user.email test@test.com
echo AAA > aaa.txt
mkdir bbb
echo BBB > bbb/bbb.txt
git …Run Code Online (Sandbox Code Playgroud) 我遇到了系统冻结问题,我在 github 上找到了这个讨论,其中之一建议添加 5 个补丁:
当我输入:
patch p1 < 0001-PM-autocomplet.patch
Run Code Online (Sandbox Code Playgroud)
我曾询问过如何在这里应用补丁。我今天尝试在不同的源包上使用相同的过程,但失败了。分享-
\n\n~/games $ mkdir decopy\n\n~/games/decopy $ apt-get source decopy\n\nReading package lists... Done\nNOTICE: \'decopy\' packaging is maintained in the \'Git\' version control system at:\nhttps://anonscm.debian.org/git/collab-maint/decopy.git\nPlease use:\ngit clone https://anonscm.debian.org/git/collab-maint/decopy.git\nto retrieve the latest (possibly unreleased) updates to the package.\nNeed to get 46.9 kB of source archives.\nGet:1 http://debian-mirror.sakura.ne.jp/debian unstable/main decopy\n0.2-1 (dsc) [1,943 B]\nGet:2 http://debian-mirror.sakura.ne.jp/debian unstable/main decopy\n0.2-1 (tar) [43.2 kB]\nGet:3 http://debian-mirror.sakura.ne.jp/debian unstable/main decopy\n0.2-1 (diff) [1,760 B]\nFetched 46.9 kB in 42s (1,103 B/s)\ndpkg-source: info: extracting decopy in decopy-0.2\ndpkg-source: info: unpacking decopy_0.2.orig.tar.gz\ndpkg-source: info: unpacking decopy_0.2-1.debian.tar.xz\nRun Code Online (Sandbox Code Playgroud)\n\n … 我想将补丁文件应用于我当前的 Ubuntu 安装(补丁文件示例)。将补丁文件正确应用到我的 Linux 内核的过程是什么?
我是否需要完成将补丁应用到磁盘映像文件、将其刷入 USB 并安装新的 Linux 副本的整个过程?我可以只修补当前安装吗?或者我可以修补磁盘映像然后使用它来升级我当前的安装吗?
我试过的:
找出我正在运行的内核版本:
$ uname -srm
Linux 5.11.0-25-generic x86_64
Run Code Online (Sandbox Code Playgroud)
转到我的内核目录(我认为):
cd /lib/modules/5.11.0-25-generic/kernel
Run Code Online (Sandbox Code Playgroud)
应用补丁文件
patch -p1 < ~/my-patch-file.patch
Run Code Online (Sandbox Code Playgroud)
但是没有应用补丁。输出是:
can't find file to patch at input line 23
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
...
File to patch:
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?
注意:这个问题不同于如何修补任何随机文件。我知道该怎么做。问题具体是关于如何修补当前安装的内核。