Top posting because it is a long post, and the TL;DR is: Use: su nobody -s /bin/bash << EOF command EOF
instead of: su nobody -s /bin/bash -c "command" Now is the story with bottom posting... On Sun, 2020-05-24 at 22:21 +0100, Ken Moffat via lfs-dev wrote: > On Sun, May 24, 2020 at 10:16:34PM +0100, Ken Moffat wrote: > > On Sun, May 24, 2020 at 07:35:10PM +0200, Pierre Labastie via lfs- > > dev wrote: > > > On Sun, 2020-05-24 at 16:44 +0200, Pierre Labastie via lfs-dev > > > wrote: > > > > Hi, > > > > Here are test results from a jhalfs run: > > > > [... > > > > > > about vim test > > > > =================================== > > > > [...] > > > > ------------------- > > > > vim: stops at test1: > > > > test1 FAILED - terminal size must be 80x24 or larger > > > > Executed: 0 Tests > > > > Skipped: 0 Tests > > > > Failed: 0 Tests > > > > > > For some reason, my gnome terminal had 80 columns and 23 lines. > > > Vim tests do not run if the number of lines is less than 24! > > > and the number of columns is less than 80. > > > > > > Note that the in chroot the command "tty" returns "Not a tty", > > > and that > > > may explains some test failures, specially with bash tests > > > > > > Pierre > > > > > Hi Pierre, > > > > thanks for looking at this. > > > > One of the reasons why my build has taken so long is that I'm > > trying > > to look at every failign testsuite, to see if there is a way around > > it. For some things (e.g. iproute) we just say it doesn't work - > > at > > the moment I don't know if it can work (needs libmna, and then it > > wants sudo for rmmod), but in chroot I'm going to suggest it SHOULD > > NOT be run and therefore its missing deps can be ignored. > > > > And in particular, I had not realised that tty fails like that. It > > does indeed explain apparent failures in the bash tests. I wonder > > if, instead of mounting dev/pts we should bind it ? > > Or, better - because we bind /mnt/lfs/dev to /dev, perhaps NOT mount > /dev/pts in chroot ? In theory, that should give us what is on the > host in /dev/pts, but then the group may be wrong if the host uses a > different group from LFS. Tried both: - not mounting /dev/pts at all: /dev/pts is empty, so I guess it is unusable - binding /dev/pts: works, and "tty" returns /dev/fd/0 (progress) Unfortunately, bash tests still fail because of: /dev/tty: No such device or address Now, tried the following (this is what is performed by one of the tests: ----- (lfs chroot)...# test -t 0 </dev/tty (lfs chroot)...# echo $? 0 ----- But: ----- (lfs chroot)...# su nobody -s /bin/bash \ -c "PATH=$PATH HOME=/home test -t 0 </dev/tty" bash: /dev/tty: No such device or address ----- So /dev/tty is not accessible to user "nobody". Note that it exists: ----- (lfs chroot)...# su nobody -s /bin/bash \ -c "PATH=$PATH HOME=/home ls -l /dev/tty" crw-rw-rw- 1 root tty 5, 0 May 25 09:28 /dev/tty ----- At this point, I was lucky enough to find (by chance) tty(4): """ The file /dev/tty is a character file with major number 5 and minor number 0, usually with mode 0666 and ownership root:tty. It is a syn‐ onym for the controlling terminal of a process, if any. """ And we have to understand where the "controlling terminal" is lost... Ah, here we go: su(1) states, about the "-c" option: """ -c, --command COMMAND Specify a command that will be invoked by the shell using its -c. The executed command will have no controlling terminal. This option cannot be used to execute interactive programs which need a controlling TTY. """ Let's try (No quote on EOF: we need $PATH to be expanded): su nobody -s /bin/bash << EOF PATH=$PATH HOME=/home make tests EOF No more /dev/tty error. Still there are two errors, which were present before too. Now this has been done with /dev/pts bind mounted. Let's try with /dev/pts mounted normally... Same, that is: no /dev/tty error... Pierre -- http://lists.linuxfromscratch.org/listinfo/lfs-dev FAQ: http://www.linuxfromscratch.org/faq/ Unsubscribe: See the above information page