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>
This commit is contained in:
parent
3c284cfd05
commit
4073194251
|
@ -4,6 +4,8 @@ SECTION = "base"
|
|||
|
||||
SRC_URI = "${DEBIAN_MIRROR}/main/d/dpkg/dpkg_${PV}.tar.xz"
|
||||
|
||||
SRC_URI_append_class-native = " file://tar-error-code.patch"
|
||||
|
||||
DEPENDS = "zlib bzip2 perl ncurses"
|
||||
DEPENDS_class-native = "bzip2-replacement-native zlib-native virtual/update-alternatives-native gettext-native perl-native"
|
||||
RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_update-alternatives} xz run-postinsts perl"
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
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).
|
||||
|
||||
Upsteam-Status: Inappropriate
|
||||
RP 2015/3/27
|
||||
|
||||
Index: dpkg-1.17.21/dpkg-deb/build.c
|
||||
===================================================================
|
||||
--- dpkg-1.17.21.orig/dpkg-deb/build.c
|
||||
+++ dpkg-1.17.21/dpkg-deb/build.c
|
||||
@@ -398,7 +398,7 @@ do_build(const char *const *argv)
|
||||
bool subdir;
|
||||
char *tfbuf;
|
||||
int arfd;
|
||||
- int p1[2], p2[2], gzfd;
|
||||
+ int p1[2], p2[2], gzfd, rc;
|
||||
pid_t c1, c2;
|
||||
|
||||
/* Decode our arguments. */
|
||||
@@ -493,7 +493,9 @@ do_build(const char *const *argv)
|
||||
}
|
||||
close(p1[0]);
|
||||
subproc_reap(c2, "gzip -9c", 0);
|
||||
- subproc_reap(c1, "tar -cf", 0);
|
||||
+ rc = subproc_reap(c1, "tar -cf", SUBPROC_RETERROR);
|
||||
+ if (rc && rc != 1)
|
||||
+ ohshite(_("subprocess %s returned error exit status %d"), "tar -cf", rc);
|
||||
|
||||
if (lseek(gzfd, 0, SEEK_SET))
|
||||
ohshite(_("failed to rewind temporary file (%s)"), _("control member"));
|
||||
@@ -581,7 +583,10 @@ do_build(const char *const *argv)
|
||||
/* All done, clean up wait for tar and gzip to finish their job. */
|
||||
close(p1[1]);
|
||||
subproc_reap(c2, _("<compress> from tar -cf"), 0);
|
||||
- subproc_reap(c1, "tar -cf", 0);
|
||||
+ rc = subproc_reap(c1, "tar -cf", SUBPROC_RETERROR);
|
||||
+ if (rc && rc != 1)
|
||||
+ ohshite(_("subprocess %s returned error exit status %d"), "tar -cf", rc);
|
||||
+
|
||||
/* Okay, we have data.tar as well now, add it to the ar wrapper. */
|
||||
if (deb_format.major == 2) {
|
||||
char datamember[16 + 1];
|
Loading…
Reference in New Issue