[Toybox] [mkroot] Cannot Overwrite non-directory "$ROOT/bin/" with directory "[Path to overlay]"
Rob Landley
rob at landley.net
Tue May 7 14:05:08 PDT 2024
On 5/7/24 15:50, Rob Landley wrote:
> And THAT was based on the old environment setup I used to do in Firmware Linux
> to give User Mode Linux a mostly writeable chroot despite starting with
> https://user-mode-linux.sourceforge.net/hostfs.html but that was back before git
> was invented so I just have a bunch of tarball snapshots over the years (at
> https://landley.net/aboriginal/downloads/old/) rather than
A) Sorry, forgot to explain,
B) That's not even the old one I'm talking about,
https://landley.net/aboriginal/old/download/snapshots probably is.
User Mode Linux is a port of Linux to userspace, I.E. making the "vmlinux" ELF
file built at the top of the tree an actual runnable Linux program, which boots
its own little VM and runs processes inside it. This predated QEMU or KVM by a
decade, and was one of the first ways to run a virtual Linux system without
requiring root access on the host. Firmware Linux was built around it,
Aboriginal Linux was the relaunch targeting QEMU instead (and doing cross
compiling, because UML only ever properly supported x86 for some reason).
UML had the "hostfs" filesystem, which acted like a network filesystem making a
directory from the host appear in a directory of the virtual system. (Again,
decades before virtfs and friends, although NFS and Samba were around.)
The problem was, a hostfs file belonging to root (UID 0) wasn't writeable to
root within the VM. The mount point was SORT of writeable, but it was getting
translated on the host to reads/writes/renames/deletes as the host user running
UML, and then the translated syscall would fail and failures that shouldn't
happen were getting returned on the client. And this included fixups you needed
to do like replacing /etc/mtab with a symlink to /proc/mounts (because mount
points became a per-process attribute in Linux 2.5, so a single global mount
table as a filesystem maintained by the userspace mount tool didn't cut it anymore).
So I made a script that created a new directory in the host user's fully
writeable space and populated it with symlinks to host resources before
chrooting into it (all within UML), so I had access to the host stuff I needed
but could also replace it all as needed. And that's what I did my emulated Linux
>From Scratch build in, back around 2004.
Anyway, "here's a thing that needs to be spliced into the $PATH, you may want to
use symlinks" sometimes goes "whoosh" over my head as "hard for people who
haven't done it before" because to ME it's a 20 year old trick. Sorry 'bout that...
Rob
More information about the Toybox
mailing list