opkg-build: Ignore tar error due to hardlinks issue when creating ipk files

If a the number of hard links decreases or increases while creating
the tar files used for an ipk package, tar fails with error code 1,
if this is the case we ignore the error and continue to create the ipk file

[YOCTO #7933]

(From OE-Core rev: d39e35a206c33f6062ebbaed4754a0559b28d766)

Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Alejandro Hernandez
2015-07-06 10:17:19 +00:00
committed by Richard Purdie
parent 64df5e5f75
commit fb9e6971f5
2 changed files with 50 additions and 1 deletions

View File

@@ -0,0 +1,47 @@
If a the number of hard links decreases or increases while creating
the tar files used for an ipk package, tar fails with error code 1:
| DEBUG: Executing python function do_package_ipk
| tar: ./usr/src/debug/gperf/3.0.4-r0/gperf-3.0.4/src/main.cc: file changed as we read it
NOTE: recipe gperf-3.0.4-r0: task do_package_write_ipk: Failed
ERROR: Task 6539 (recipes-extended/gperf/gperf_3.0.4.bb, do_package_write_ipk) failed with exit code '1'
We detect if the error code produced by tar is 1 and in this case ignore it.
This a similar behavior to the one on dpkg:
http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=40731942515ec8d80c727ad561174986d4f05818
Upsteam-Status: Inappropriate
Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
Index: git/opkg-build
===================================================================
--- git.orig/opkg-build
+++ git/opkg-build
@@ -250,8 +250,21 @@ tmp_dir=$dest_dir/IPKG_BUILD.$$
mkdir $tmp_dir
echo $CONTROL > $tmp_dir/tarX
-( cd $pkg_dir && tar $ogargs -X $tmp_dir/tarX -cz $tarformat -f $tmp_dir/data.tar.gz . )
-( cd $pkg_dir/$CONTROL && tar $ogargs -cz $tarformat -f $tmp_dir/control.tar.gz . )
+
+
+# Ignore error code 1, caused by modifying the number of hard links while creating the tar file
+rc=0
+( cd $pkg_dir && tar $ogargs -X $tmp_dir/tarX -cz $tarformat -f $tmp_dir/data.tar.gz . ) || rc=$?
+if [[ $rc -ne 1 ]] && [[ $rc -ne 0 ]] ;then
+ exit $rc
+fi
+
+rc=0
+( cd $pkg_dir/$CONTROL && tar $ogargs -cz $tarformat -f $tmp_dir/control.tar.gz . ) || rc=$?
+if [[ $rc -ne 1 ]] && [[ $rc -ne 0 ]] ;then
+ exit $rc
+fi
+
rm $tmp_dir/tarX
echo "2.0" > $tmp_dir/debian-binary

View File

@@ -10,7 +10,9 @@ PROVIDES += "virtual/update-alternatives"
SRCREV = "53274f087565fd45d8452c5367997ba6a682a37a"
PV = "0.1.8+git${SRCPV}"
SRC_URI = "git://git.yoctoproject.org/opkg-utils"
SRC_URI = "git://git.yoctoproject.org/opkg-utils "
SRC_URI_append_class-native = "file://tar_ignore_error.patch"
S = "${WORKDIR}/git"