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]]
-=-=-=-=-=-=-=-=-=-=-=-