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.
Thanks,
--
Paul Barker
signature.asc
Description: This is a digitally signed message part
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#236770): https://lists.openembedded.org/g/openembedded-core/message/236770 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]] -=-=-=-=-=-=-=-=-=-=-=-
