summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/dpkg
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.microsoft.com>2020-06-17 20:44:09 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2020-06-22 13:05:47 +0100
commit3f871fae96e72afa49b9d6a05c96af49173b8a60 (patch)
treefae268a00721a9e8fa95b5aee5569651b1f3eb75 /meta/recipes-devtools/dpkg
parent0d8fd1d44c932073021ef0786e40e43f4f1e330b (diff)
downloadopenembedded-core-contrib-3f871fae96e72afa49b9d6a05c96af49173b8a60.tar.gz
dpkg-native: rebase and reinstate fix for "tar: file changed as we read it"
In OE-Core rev 8ee36a5f2f9367550d28bf271afc53bca6ff3d5f a patch was added for dpkg to ignore a return of 1 from dpkg's calls to tar (which indicates that files changed in some way while tar was operating) we were observing failures on the autobuilder due to changes to link counts in hard-linked file trees. The patch was subsequently rebased and then later removed during an upgrade in 3812f58b3a438ae533c282170416cdd1681868e0 on the assumption that the fix had been applied upstream, however that was not the case. I am now occasionally seeing these errors in my builds without any apparent material change to the files, so rebase and reinstate the patch. Fixes [YOCTO #13913]. Signed-off-by: Paul Eggleton <paul.eggleton@linux.microsoft.com>
Diffstat (limited to 'meta/recipes-devtools/dpkg')
-rw-r--r--meta/recipes-devtools/dpkg/dpkg/0001-build.c-ignore-return-of-1-from-tar-cf.patch52
-rw-r--r--meta/recipes-devtools/dpkg/dpkg_1.20.0.bb2
2 files changed, 54 insertions, 0 deletions
diff --git a/meta/recipes-devtools/dpkg/dpkg/0001-build.c-ignore-return-of-1-from-tar-cf.patch b/meta/recipes-devtools/dpkg/dpkg/0001-build.c-ignore-return-of-1-from-tar-cf.patch
new file mode 100644
index 0000000000..7c35407364
--- /dev/null
+++ b/meta/recipes-devtools/dpkg/dpkg/0001-build.c-ignore-return-of-1-from-tar-cf.patch
@@ -0,0 +1,52 @@
+From 450fece894fce750502be8accabfd88c585bda4c Mon Sep 17 00:00:00 2001
+From: Paul Eggleton <paul.eggleton@linux.microsoft.com>
+Date: Tue, 16 Jun 2020 03:57:25 +0000
+Subject: [PATCH] build.c: ignore return of 1 from tar -cf
+
+When running do_package_write_deb, we have trees of hardlinked files
+such as the dbg source files in ${PN}-dbg. If something makes another
+copy of one of those files (or deletes one), the number of links a file
+has changes and tar can notice this, e.g.:
+
+| DEBUG: Executing python function do_package_deb
+| dpkg-deb: building package `sed-ptest' in `/media/build1/poky/build/tmp/work/i586-poky-linux/sed/4.2.2-r0/deploy-debs/i586/sed-ptest_4.2.2-r0.3_i386.deb'.
+| tar: ./usr/lib/sed/ptest/testsuite/tst-regex2: file changed as we read it
+| dpkg-deb: error: subprocess tar -cf returned error exit status 1
+
+Tar returns an error of 1 when files 'change' and other errors codes
+in other error cases. We tweak dpkg-deb here so that it ignores an exit
+code of 1 from tar. The files don't really change (and we have locking in
+place to avoid that kind of issue).
+
+Upstream-Status: Inappropriate [OE specific]
+
+Original patch by RP 2015/3/27, rebased by Paul Eggleton
+
+Signed-off-by: Paul Eggleton <paul.eggleton@microsoft.com>
+---
+ dpkg-deb/build.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/dpkg-deb/build.c b/dpkg-deb/build.c
+index a3d1912..1de7f9c 100644
+--- a/dpkg-deb/build.c
++++ b/dpkg-deb/build.c
+@@ -427,6 +427,7 @@ tarball_pack(const char *dir, filenames_feed_func *tar_filenames_feeder,
+ {
+ int pipe_filenames[2], pipe_tarball[2];
+ pid_t pid_tar, pid_comp;
++ int rc;
+
+ /* Fork off a tar. We will feed it a list of filenames on stdin later. */
+ m_pipe(pipe_filenames);
+@@ -477,7 +478,9 @@ tarball_pack(const char *dir, filenames_feed_func *tar_filenames_feeder,
+ /* All done, clean up wait for tar and <compress> to finish their job. */
+ close(pipe_filenames[1]);
+ subproc_reap(pid_comp, _("<compress> from tar -cf"), 0);
+- subproc_reap(pid_tar, "tar -cf", 0);
++ rc = subproc_reap(pid_tar, "tar -cf", SUBPROC_RETERROR);
++ if (rc && rc != 1)
++ ohshite(_("subprocess %s returned error exit status %d"), "tar -cf", rc);
+ }
+
+ static time_t
diff --git a/meta/recipes-devtools/dpkg/dpkg_1.20.0.bb b/meta/recipes-devtools/dpkg/dpkg_1.20.0.bb
index d539c57522..c98a9e58e2 100644
--- a/meta/recipes-devtools/dpkg/dpkg_1.20.0.bb
+++ b/meta/recipes-devtools/dpkg/dpkg_1.20.0.bb
@@ -16,5 +16,7 @@ SRC_URI = "${DEBIAN_MIRROR}/main/d/${BPN}/${BPN}_${PV}.tar.xz \
file://0001-Add-support-for-riscv32-CPU.patch \
"
+SRC_URI_append_class-native = " file://0001-build.c-ignore-return-of-1-from-tar-cf.patch"
+
SRC_URI[md5sum] = "f88f077236a3ff3decae3b25c989893d"
SRC_URI[sha256sum] = "b633cc2b0e030efb61e11029d8a3fb1123f719864c9992da2e52b471c96d0900"