On Mon, 2026-05-11 at 16:47 +0800, Changqing Li wrote:
> 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.Hi Changqing, If you have a patch for pseudo which fixes this, that would be very welcome! 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 (#236789): https://lists.openembedded.org/g/openembedded-core/message/236789 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]] -=-=-=-=-=-=-=-=-=-=-=-
