Hi fans,
I would like to announce that I have just released [Uglendix][1] to
docker hub. 🐋 (whale emoji - sorry, I had to.)
You can enjoy two images, docker.io/arusekk/uglendix:9legacy and
docker.io/arusekk/uglendix:9front.
If there is interest in historical releases of Plan 9 from Bell Labs, I
can add them, too. They will probably work just as well, userspace does
not bit rot.
They allow performing some basic compilation tasks, but are currently
limited by several Docker deficiencies like the following:
- Docker mounts sysfs on /sys (pretty sure it cannot be disabled).
Workaround:
docker run --cap-add SYS_ADMIN arusekk/uglendix
and then unmount /sys inside
- Docker disallows any mounts by default, so there is no /bin union.
Partial workaround: $path is set accordingly.
- There is no /srv by default, for the same reason. Workaround: add
CAP_SYS_ADMIN and run /usr/libexec/uglendix-devsrv (not tested)
There are also some Uglendix deficiencies:
- There is no /net. I currently have some half-baked chimera from
drawterm and vncs in the source tree, but it requires manual compilation
and transplant of several components. Only usable for testing, not in
the image (yet).
- There is no devproc, but there is procfs.
- There are unions, but emulated via overlayfs, with its quirks.
Overlayfs broke my assumptions surprisingly often, so take caution.
Notably, it does not support layer contents changing while mounted.
- There is no /env. This is not a problem normally, a 'plain' filesystem
works even for rebuilding the whole 9front, as long as NPROC=1, but
still missing.
- There is no /dev/draw, /dev/mouse, /dev/cons, no '#something' paths.
Not even sure what uses these for real.
- v9fs is used; 9pfuse from plan9port would probably be better for
correctness, but worse for performance.
And finally there are some Linux (v9fs) weaknesses (or strengths, it
depends):
- procfs is not devproc
- v9fs is not transparent 9p, it assumes disk files, it cannot write to
a file while reading it, it loses uids/gids, it loses error messages, it
loses short reads and short writes, it loses everything (some kernel
patches available in the repo);
- Linux is not 9, Linux is not 9k
- Uglendix seriously strains Linux security model
- Linux has more hardware drivers
That's about the downsides, the upside is you can cd around and ls
around, and explore the system.
You almost certainly want --cap-add SYS_ADMIN for almost anything
serious, because otherwise you have no control over your namespace.
There are some other miniprojects I did using Uglendix in its earlier
versions (=not docker), including typesetting its IWP9 paper (in the
[repo][1]), developing a [bitfields patch][2] with Jonas Amoson, and
testing a [Ghidra patch][3] for plan9 binaries.
Please let me know what you think, and how to improve the docker image
to be actually useful with little extra effort for some quick-and-dirty
CI/CD maybe. If you have any questions, try to start with the README,
but I will also be happy to answer.
Have fun!
Arusekk
[1]: https://sr.ht/~arusekk/uglendix
[2]: https://git.sr.ht/~arusekk/9front/commit/kenccbitfields5.patch
[3]: https://github.com/NationalSecurityAgency/ghidra/pull/8218
------------------------------------------
9fans: 9fans
Permalink:
https://9fans.topicbox.com/groups/9fans/T042d47d00253333c-M95de9e31093a382ea7be5be2
Delivery options: https://9fans.topicbox.com/groups/9fans/subscription