diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-03-28 08:50:27 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-03-31 22:23:19 +0100 |
commit | 40731942515ec8d80c727ad561174986d4f05818 (patch) | |
tree | 3725e5d5014a7bcc664caa4f62bd7a370d1f3406 /meta | |
parent | 3c284cfd052367adde54f9235f3dc97cd8647dd0 (diff) | |
download | poky-40731942515ec8d80c727ad561174986d4f05818.tar.gz |
dpkg-native: Avoid 'file changed' errors from tar
Hardlink count duing do_package_write_deb can change causing dpkg-deb
failures. We don't care about this error case so avoid it by checking
the tar exit code.
[YOCTO #7529]
(From OE-Core rev: 8ee36a5f2f9367550d28bf271afc53bca6ff3d5f)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r-- | meta/recipes-devtools/dpkg/dpkg.inc | 2 | ||||
-rw-r--r-- | meta/recipes-devtools/dpkg/dpkg/tar-error-code.patch | 54 |
2 files changed, 56 insertions, 0 deletions
diff --git a/meta/recipes-devtools/dpkg/dpkg.inc b/meta/recipes-devtools/dpkg/dpkg.inc index bbbd881e47..5db1fde8f1 100644 --- a/meta/recipes-devtools/dpkg/dpkg.inc +++ b/meta/recipes-devtools/dpkg/dpkg.inc | |||
@@ -4,6 +4,8 @@ SECTION = "base" | |||
4 | 4 | ||
5 | SRC_URI = "${DEBIAN_MIRROR}/main/d/dpkg/dpkg_${PV}.tar.xz" | 5 | SRC_URI = "${DEBIAN_MIRROR}/main/d/dpkg/dpkg_${PV}.tar.xz" |
6 | 6 | ||
7 | SRC_URI_append_class-native = " file://tar-error-code.patch" | ||
8 | |||
7 | DEPENDS = "zlib bzip2 perl ncurses" | 9 | DEPENDS = "zlib bzip2 perl ncurses" |
8 | DEPENDS_class-native = "bzip2-replacement-native zlib-native virtual/update-alternatives-native gettext-native perl-native" | 10 | DEPENDS_class-native = "bzip2-replacement-native zlib-native virtual/update-alternatives-native gettext-native perl-native" |
9 | RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_update-alternatives} xz run-postinsts perl" | 11 | RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_update-alternatives} xz run-postinsts perl" |
diff --git a/meta/recipes-devtools/dpkg/dpkg/tar-error-code.patch b/meta/recipes-devtools/dpkg/dpkg/tar-error-code.patch new file mode 100644 index 0000000000..7be2090206 --- /dev/null +++ b/meta/recipes-devtools/dpkg/dpkg/tar-error-code.patch | |||
@@ -0,0 +1,54 @@ | |||
1 | When running do_package_write_deb, we have trees of hardlinked files | ||
2 | such as the dbg source files in ${PN}-dbg. If something makes another | ||
3 | copy of one of those files (or deletes one), the number of links a file | ||
4 | has changes and tar can notice this, e.g.: | ||
5 | |||
6 | | DEBUG: Executing python function do_package_deb | ||
7 | | 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'. | ||
8 | | tar: ./usr/lib/sed/ptest/testsuite/tst-regex2: file changed as we read it | ||
9 | | dpkg-deb: error: subprocess tar -cf returned error exit status 1 | ||
10 | |||
11 | Tar returns an error of 1 when files 'change' and other errors codes | ||
12 | in other error cases. We tweak dpkg-deb here so that it ignores an exit | ||
13 | code of 1 from tar. The files don't really change (and we have locking in | ||
14 | place to avoid that kind of issue). | ||
15 | |||
16 | Upsteam-Status: Inappropriate | ||
17 | RP 2015/3/27 | ||
18 | |||
19 | Index: dpkg-1.17.21/dpkg-deb/build.c | ||
20 | =================================================================== | ||
21 | --- dpkg-1.17.21.orig/dpkg-deb/build.c | ||
22 | +++ dpkg-1.17.21/dpkg-deb/build.c | ||
23 | @@ -398,7 +398,7 @@ do_build(const char *const *argv) | ||
24 | bool subdir; | ||
25 | char *tfbuf; | ||
26 | int arfd; | ||
27 | - int p1[2], p2[2], gzfd; | ||
28 | + int p1[2], p2[2], gzfd, rc; | ||
29 | pid_t c1, c2; | ||
30 | |||
31 | /* Decode our arguments. */ | ||
32 | @@ -493,7 +493,9 @@ do_build(const char *const *argv) | ||
33 | } | ||
34 | close(p1[0]); | ||
35 | subproc_reap(c2, "gzip -9c", 0); | ||
36 | - subproc_reap(c1, "tar -cf", 0); | ||
37 | + rc = subproc_reap(c1, "tar -cf", SUBPROC_RETERROR); | ||
38 | + if (rc && rc != 1) | ||
39 | + ohshite(_("subprocess %s returned error exit status %d"), "tar -cf", rc); | ||
40 | |||
41 | if (lseek(gzfd, 0, SEEK_SET)) | ||
42 | ohshite(_("failed to rewind temporary file (%s)"), _("control member")); | ||
43 | @@ -581,7 +583,10 @@ do_build(const char *const *argv) | ||
44 | /* All done, clean up wait for tar and gzip to finish their job. */ | ||
45 | close(p1[1]); | ||
46 | subproc_reap(c2, _("<compress> from tar -cf"), 0); | ||
47 | - subproc_reap(c1, "tar -cf", 0); | ||
48 | + rc = subproc_reap(c1, "tar -cf", SUBPROC_RETERROR); | ||
49 | + if (rc && rc != 1) | ||
50 | + ohshite(_("subprocess %s returned error exit status %d"), "tar -cf", rc); | ||
51 | + | ||
52 | /* Okay, we have data.tar as well now, add it to the ar wrapper. */ | ||
53 | if (deb_format.major == 2) { | ||
54 | char datamember[16 + 1]; | ||