mirror of
git://git.suckless.org/ubase
synced 2026-01-26 13:43:16 +00:00
Musl libc realpath implementation calls readlink on a procfs path it computes via __procfdname (code at [1] & [2]). This is problematic if ubase mount is used in a PID 1 because procfs is not mounted and the kernel passes the rootfs mounted read-only, so the first step is to read-write remount the rootfs, which can't be done because procfs is not mounted. Thus we are in a dependency cycle: procfs can't be mounted because the root is read-only and so on. To break this cycle, don't call readlink on "/" (it doesn't really make sense anyway) so the rootfs can be remounted read-write, after which proc itself can be mounted and the rest of mount calls will succeed so systems running ubase + musl can succesfully boot into userspace. [1] https://git.musl-libc.org/cgit/musl/tree/src/misc/realpath.c?h=v1.1.19 [2] https://git.musl-libc.org/cgit/musl/tree/src/internal/procfdname.c?h=v1.1.19 Signed-off-by: Ioan-Adrian Ratiu <adi@adirat.com>
ubase - suckless linux base utils ================================= ubase is a collection of tools similar in spirit to util-linux but much simpler. The complement of ubase is sbase[1] which mostly follows POSIX and provides all the portable tools. Together they are intended to form a base system similar to busybox but much smaller and suckless. Building -------- To build ubase, simply type make. You may have to fiddle with config.mk and config.h depending on your system. You can also build ubase-box, which generates a single binary containing all the required tools. You can then symlink the individual tools to ubase-box or run: make ubase-box-install. To run the tools for ubase-box directly use: ubase-box cmd [args] Ideally you will want to statically link ubase. We highly recommend using musl-libc[2]. ubase is known to compile with gcc, clang and tcc. [1] http://git.suckless.org/sbase/ [2] http://www.musl-libc.org/
Languages
C
80.3%
Roff
16%
Makefile
3.7%