On 5/11/26 16:09, Paul Barker wrote:
On Sun, 2026-05-10 at 16:37 +0100, Paul Barker wrote:
On Sat, 2026-05-09 at 09:41 +0800, Changqing Li wrote:
On 5/8/26 22:58, Paul Barker via lists.openembedded.org wrote:
CAUTION: This email comes from a non Wind River email account!
Do not click links or open attachments unless you recognize the sender and know 
the content is safe.

On Fri, 2026-05-08 at 13:19 +0000, Changqing Li via
lists.openembedded.org wrote:
Hi,

I am trying to build project on ubuntu 26.04.  "bitbake postfix"  failed  at 
do_package since pseudo abort,   after doing  some search, it is caused by ubtunu26.04's 
new change,  Ubuntu has officially begun transitioning its core system utilities from the 
traditional GNU Coreutils (written in C) to uutils (a Rust-based rewrite).   I would like 
to seek some help,  could you give some advices about how we should handle this?  Thanks.

Here is how  it happened:
* ‎  In do_install stage:
There are  2 files target to installed under ${D}: (there are other files 
following this pattern)
${D}/usr/libexec/postfix/smtp:     which is  mv from file under {S}, and then 
chmod
${D}/usr/libexec/postfix/lmtp:      hardlink to ${D}/usr/libexec/postfix/smtp

With the old gnu coreutils:
when install smtp,   mv will call renameat2, which will finally calling real 
syscall since the oldpath is under {S} which is not in PSEUDO_INCLUDE_PATHS.
then chmod call fchmodat,   then fchmodat wrapper will save an entry with uid 0 
in files.db.   install lmtp will also insert an entry with uid 0 in files.db

With the new rust coreutils:
when install smtp,    the behavior of chmod is different,   statx get current 
mode,  rust chmod check the current mode  is the same as the target mode, then
fchmodat is never called, then smtp is not saved in files.db,  and this will 
also make install lmtp insert an entry with real uid like 25610  in files.db 
since smtp is not found in files.db

* ‎  in do_package stage:

Exception: subprocess.CalledProcessError: Command 'tar --exclude=./sysroot-only 
-cf - -C /yocto/build/tmp/work/x86-64-v3-oe-linux/postfix/3.10.8/image -p -S . 
| tar -xf - -C /yocto/build/tmp/work/x86-64-v3-oe-linux/postfix/3.10.8/package' 
returned non-zero exit status 2.

Subprocess output:
abort()ing pseudo client by server request. See 
https://wiki.yoctoproject.org/wiki/Pseudo_Abort for more details on this.
Check logfile: 
/buildarea1/cli10/yocto/build/tmp/work/x86-64-v3-oe-linux/postfix/3.10.8/pseudo//pseudo.log

tar command may  call stat  for ${D}/usr/libexec/postfix/smtp,   since the  we 
have a same inode entry in files.db for lmtp, above error reported.


The key  issue is ${D}/usr/libexec/postfix/smtp is not inserted in files.db in 
do_install stage,  which will cause wrong uid for lmtp and  psedo abort in 
do_package stage.
I think we cannot change behavior of rust coreutils.   I am wondering even we 
patch postfix to not use hardlink, the pseudo abort issue may disappear,  but 
since
chmod not call fchmodat,   we don't insert entries for these files,   maybe the 
uid etc is wrong in final image.

[1] https://github.com/uutils/coreutils/blob/main/src/uu/chmod/src/chmod.rs
[2] https://github.com/coreutils/coreutils/blob/master/src/chmod.c
[3] https://lists.openembedded.org/g/openembedded-devel/topic/119211397    // 
patch for build postfix with linux kernel 7.x
Hi Changqing,

The tar command failing with exit status 2 should be resolved by recent
changes in pseudo. Which Yocto Project version are you using?
I use the latest master branch with pseudo 1.9.6. And this issue only
can reproduce with ubuntu26.04 with uutils installed.

ubuntu24.04 with gnu-coreutils  works well.
Hi Changqing,

I looked into this as the chmod behaviour differences you described
didn't sound like an issue to me.

I think the actual issue is that files moved (instead of copied) into
${D} are not tracked by pseudo. For postfix, when using GNU coreutils
this issue is hidden because chmod always sets the permissions of the
file, which pseudo observes. When using uutils on Ubuntu 26.04, chmod
may not set the permissions if they are already correct, so pseudo
doesn't observe anything it can add to its database.

A simple recipe can reproduce this issue on Debian 13 (where uutils is
not used) as well as Ubuntu 26.04:

     LICENSE = "MIT"
     LIC_FILES_CHKSUM = 
"file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"

     do_compile() {
         echo hello > ${B}/hello.txt
     }

     do_install() {
         mv ${B}/hello.txt ${D}/hello.txt
         ln ${D}/hello.txt ${D}/hello2.txt
     }

     FILES:${PN} += "/hello2.txt /hello.txt"

Building this recipe fails with the same pseudo abort which you are
seeing. If we use "cp" instead of "mv" in do_install then this works as
expected.

I'll discuss this with Mark and see how we want to handle it.
The recipe above also causes a pseudo abort on the initial Scarthgap
release (tag yocto-5.0) so this isn't a new issue, recent changes in
pseudo are not responsible.

Hi, Paul

Thanks for help.  You are right.  And I tried to patch pseudo locally to make renameat2/renameat only ignore

when both oldpath and newpath are not in PSEUDO_INCLUDE_PATHS, and do a simple test,  at least

bitbake postfix works well without pseudo abort.   After tidy up the patch,  I  can send the patch to upstream pseudo

for review.

Regards

Changqing


Best regards,

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#236785): 
https://lists.openembedded.org/g/openembedded-core/message/236785
Mute This Topic: https://lists.openembedded.org/mt/119214074/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to