Pythonサブプロセスとして呼び出されると、tarはシンボリックリンクで失敗します。

Pythonサブプロセスとして呼び出されると、tarはシンボリックリンクで失敗します。

私のDebianをBusterからBullseyeにアップグレードした後、私のyoctoビルドプロセスはdo_package: Function failed: perform_packagecopy次の何百ものメッセージで失敗します。

tar: ./dir/linkfile: Cannot change mode to rwxrwxrwx: No such file or directory

linkfileディレクトリのシンボリックリンクです)。実際のコピー操作が実行され、ファイルとそのシンボリックリンクが予想されるモード設定で表示されます。シンボリックリンクが指すファイルの前にコピーされるように見え、tarはシンボリックリンクのパターンに適応する必要があると思いますが、シンボリックリンクが指すファイルが存在しないため、エラーが発生します(単なる前提です)。

残念ながら、実行時にエラーを再現することはできません。

tar -cf - -C /full/path/image -p -S . | tar -xf - -C /full/path/package

まっすぐ。これは何のエラーも発生しません。pythonyoctoスクリプト地獄で子プロセスとして実行すると、これらのエラーが発生します。場合に備えてtarはい

$ tar --version
tar (GNU tar) 1.34

ベストアンサー1

私たちは同じ問題に遭遇し、GNU tarの代わりにBSD tarを使用するようにYoctoをパッチして問題を回避しました。libarchive-toolsこのバージョンのtarを入手するには、Debianにインストールする必要があります。

私たちはまたtarPATHにBSDを入れようとしましたが、tarYoctoによって拒否されました。バージョン番号が1.28より大きいことを確認してください(GNU以外のバージョンのバージョン番号が異なることを無視しますtar)。tar

これは私たちにとって問題ではないようです。

From aebcd4668cc3500d6072b7ef3fba2e6ea2cf9f43 Mon Sep 17 00:00:00 2001
From: Florian Viguier <[email protected]>
Date: Wed, 3 Nov 2021 09:15:47 +0100
Subject: [PATCH 1/2] [LCB-318] Switch Gnu tar for bsd tar for Debian 11
 compatibility

---
 meta/classes/package.bbclass | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index 5a32e5c2e3..db47edc92a 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -814,7 +814,7 @@ python perform_packagecopy () {
     # Start by package population by taking a copy of the installed
     # files to operate on
     # Preserve sparse files and hard links
-    cmd = 'tar -cf - -C %s -p -S . | tar -xf - -C %s' % (dest, dvar)
+    cmd = '/usr/bin/bsdtar -cf - -C %s -p -S . | /usr/bin/bsdtar -xf - -C %s' % (dest, dvar)
     subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
 
     # replace RPATHs for the nativesdk binaries, to make them relocatable
-- 
2.30.2

From 7680a3ba35c321fc915714fb835782f0b03d105e Mon Sep 17 00:00:00 2001
From: Adrien Destugues <[email protected]>
Date: Thu, 4 Nov 2021 17:43:47 +0100
Subject: [PATCH 2/2] [FIX] Use bsdtar also in sstate

---
 meta/classes/sstate.bbclass | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
index d08d950e76..4e0be994c7 100644
--- a/meta/classes/sstate.bbclass
+++ b/meta/classes/sstate.bbclass
@@ -849,7 +849,7 @@ python sstate_report_unihash() {
 # Will be run from within SSTATE_INSTDIR.
 #
 sstate_unpack_package () {
-   tar -xvzf ${SSTATE_PKG}
+   /usr/bin/bsdtar -xvzf ${SSTATE_PKG}
    # update .siginfo atime on local/NFS mirror
    [ -O ${SSTATE_PKG}.siginfo ] && [ -w ${SSTATE_PKG}.siginfo ] && [ -h ${SSTATE_PKG}.siginfo ] && touch -a ${SSTATE_PKG}.siginfo
    # Use "! -w ||" to return true for read only files
-- 
2.30.2

おすすめ記事