From 0d536365ba6cc7b0881f61c4e60aba22ab61d73d Mon Sep 17 00:00:00 2001
From: Rob Landley
+ ++Huge as office blocks, silent as birds. They hung in the air exactly the same +way that bricks don't.
+- The Hitchhiker's Guide to the Galaxy
+
Toybox 0.8.8 +(git commit) +is out, with prebuilt static binaries and +mkroot images +bootable under QEMU (built using vanilla linux-5.19).
+ +No new or promoted commands this time. (Time based releases mean NOT +holding the release to wait for things like that.)
+ +Thanks to Google for sponsoring the project's maintainer to focus on toybox +for a while. (They want a hermetic build, I want Android to build under +Android. Working on it...)
+ +Features: +The new timeout -i option kills a command for inactivity (output +to stdout resets the timer). +Basic support for tar --xform (but not yet the special tar-only s///x +options). +--long options now support unambigous abbrevations by default, so you can +go "ls --col" and it'll figure out you mean --color. +Added blkid -o understanding "full", "value", and "export" output +formats. Added nsenter -C (cgroup namespace) and -a (enable all +supported namespaces). +Added mount -R and switched the bind mount default to be recursive +(it still autodetects --bind and --loop mounts based on the source/target type, +all --bind or --rbind do is switch the recursive flag on and off).
+ +Elliott implemented tar --null, +and taught file to recognize some Linux kernel images, and +binaries for Linux's newly merged +arch/loongarch (a mips64 variant +from china).
+ +Bugfixes: +Several cleanups to taskset, mostly due to reviewing it before making +an explainer video, but the review found an inappropriate use of +TOYFLAG_STAYROOT that got fixed. +Argument parsing for unshare and nsenter should now match +debian's (I.E. "unshare -npu" works the same as "unshare -n -p -u" not +"unshare --net=pu"). +kill 1 no longer says "unknown pid 1: not permitted" (it +says "bad pid" like everywhere else). +test -x and friends now test live access, not permission bits. +(Root ignores a lot of permissions, chmod u-x blocks you from executing your +own file even if g+x and o+x should let you access it, things like selinux can +further break the unix permission model, etc). + +
In lib/ a fencepost error in chomp() could read one byte past the start of the string, and +xpclose_both() no longer closes the parent's stdin and stdout +when they're explicitly passed through to the child. +In scripts/runtest.sh, moving tests into subshells broke failure reporting with VERBOSE=all. +While "make install" was creating directories when $PREFIX pointed to a +nonexistent directory, "make toybox" didn't even though it tried to place the +output file there.
+ +James Farrell switched the test suite from detecting root via $UID to +$(id -u). (It's not a security issue, this just controls which tests we attempt. +It's another workaround for missing features in mksh.) +Taolaw spotted that httpd could segfault when xabspath() returns NULL +(for error conditions such as infinitely looping symlinks +or "." not resolving when the current directory was deleted).
+ +Documentation: +We recorded the +move from C99 to the C11 standard, which was actually made a while ago: +the typecast constants we've +been using for a while are a 2011 feature not available in the 1999 edition +of the C standard. (This came up when we had to move to C11's "_Noreturn" to work around a compiler bug in llvm. +Yes __attribute__((__noreturn__)) should be identical, that's the bug part.)
+ +The website's nav bar got updated (among other things, linking to +our youtube +channel), and the FAQ entry on cross compiling got +expanded. +The toys/example commands moved from "make list" to "make list_example" +(since they're not enabled in defconfig either). +The cross compiling example command line in "make help" now sets +LDFLAGS=--static instead of putting that in CFLAGS.
+ +The web archive is back, and since the missing messages were +never delivered (the mailserver trying to deliver them timed out and bounced +them back after a couple days) this means unlike previous failures the web +archive isn't out of sync with reality: the hole was the list actually being +down until Dreamhost tech support figured out what they broke this time.
+ +Pending: +More work on toysh: case/esac was confused by nested flow control blocks, +support for [[ < > =~ ]] tests, implemented the rest of the $((math)) +operators and support for ((math)) tests and "for ((math;math;math))" loops, +and so on. (The next toysh goal is to get the test suite running under mkroot, but +other stuff keeps coming up.) +James Farrell upgraded diff, adding three line format options and support +for diffing FIFOs. +Rob did several rounds of dd cleanup, then got distracted by diff cleanup +which turned into a complete rewrite of diff. +Neither was ready to promote in time for this release though (although the release +got delayed almost a week before Rob admitted that).
+ +Library: +The lib/args.c command line parser now has two optional modifiers +(" " and ";") for each argument type, providing 4 combinations (both unset, +both set, one of each set), and all 4 now have defined semantics and +tests/skeleton.test exercises them. (This was motivated by unshare +needing a new combination to match the debian behavior.) +lib/args.c also added "~" to collate bare longopts (so multiple bare +longopts can be synonyms setting the same flag or argument variable).
+ +New function xrunread() which launches a child function, writes a +string to its stdin, and returns everything the child wrote to stdout as another +string (or NULL if it couldn't run or exited with an error), leaving +stderr alone (so it goes to the same place the parent's goes).
+ +New functions same_file() and same_def_ino() to simplify +file metadata comparisons. (If you're wondering why something so simple should +have a function encapsulating the logic, this release also has at least 3 +different bugfix commits for thinkos from switching all the commands over +to use them instead of doing the test ourselves. All missing/extra ! or +&& vs || level stuff.)
+ +The exit_signal() handler now blocks signals so sigatexit() won't +re-enter the list when it receives two different killer signals. (Since +xexit() capture uses siglongjmp() this should clean itself up +when not actually exiting.)
+ +Plumbing: +Several warning suppressions due to things like llvm's fortify finding +false positives, gcc's "int and long are identical on 32 bits!" warnings +(yes... they are), the MacOS build being crotchety about vfork()... All verified +non-issues at present.
+ +The build plumbing now puts more effort into resolving dependencies and figuring +out when stuff needs to be rebuilt. This includes noticing when the +toolchain we're building with changes flags, and outputting a warning +when it detects the need to run "make oldconfig" again. (At the moment +calling kconfig/ from scripts/ would be a layering violation: I need to +rewrite kconfig from scratch before it can do that automatically.).
+ +Removed most compile time probes from scripts/genconfig.sh, +replaced with things like #ifdef (_NR_syscall) and +#if __has_include(<utmpx.h>), or acknowledging when a probe is a bug +workaround for a specific libc version and testing for that instead, +plus simply deleting some config options due to the 7 year horizon expiring +so we can trust it to be there now.
+ +Usual batch of musl workarounds for behavior that +doesn't match +glibc and bionic or where they've been +arguing about +stuff for years without actually fixing it. +Ed Maste of FreeBSD added some FreeBSD checks/cases to +lib/portability.[hc], mostly in places we already supported Apple or +OpenBSD. +The top level "configure" is now re-entrant (shouldn't append stuff +to enviornment varibles like $CFLAGS twice when read twice). +The MacOS defconfig now includes a lot more commands.
+ +Test suite: +The diff for failing tests is now output after the FAIL line instead +of before, "make tests" now runs tar.test by default, +a new skeleton.test uses toys/example/skeleton.c to exercise the +lib/args.c command line parsing plumbing, +scripts/runtest.sh now uses do_pass and do_fail consistently, +and Rob keeps accidentally checking in bashisms and Elliott keeps submitting +patches to remove them because android runs the tests under mksh and +toysh isn't ready yet.
+ +Work in progress to make TEST_HOST=1 pass on newer debian, which is a moving +target. (The tests didn't change, but the behavior of the gnu utilities +is not consistent. Or standardized. Or coherent. Or predictable. Or sane.) +Some minor changes to commands like xxd and cmp to +make their output look more like what debian's currently producing.
+ +Making the tests pass on MacOS is harder: that calls group 0 "wheel" +instead of "root" (so things like "tar.test" don't get the same result), +stuff like "du" or "ls" often cares what filesystem you're mounted on +(and MacOS hasn't even got the same ones _available_), +and we even found a mac kernel bug where extending a sparse +file sparsely allocates the previous length as actual zeroed disk space +(ala "truncate -s 3m file; truncate -s 5m file; du file" says it's using +3 megabytes of disk space). There's probably more but +that's where we stopped looking for now: since Rob doesn't have a mac +to test on and the github tests don't reliably run when new commits are +pushed (skipped when the servers are busy), fixing this hasn't +been a priority. Lots of little red X in the github history because of this, +though...
+ +Mkroot: +The output file names are now consistent across architectures: each +root/$TARGET directory now contains an fs subdirectory with the +expanded root filesystem, packaged into initramfs.cpio.gz, +a linux-kernel built from linux-fullconfig which is built +from linux-miniconfig, and a run-qemu.sh script to launch +it under qemu. No more architecture name in the filenames (that's what +the directory name is for), and no more "bzImage" or "vmlinux" depending +on what filename the kernel build produced.
+ +The fs/init script has better chroot support (not warning about /dev/shm and +/dev/pts already existing). +The airlock build no longer includes ftpd (you can use +httpd and wget, scp out of dropbear, mount a network filesystem from the +host, or if you really want to still use ftp can match ftpget and ftpput). +When mkroot is downloading extra packages (for example in the dropbear build), +it falls back to the host wget if it can't fetch with toybox's version. +(This is because toybox hasn't got built-in https support yet, it's on the +todo list.) +Updated the dropbear build to the current version and fixed a compiler +path issue. +Fixed version skew in the workaround +so the Linux kernel build doesn't require a third ELF package (but only +for x86, not for any other architecture).
+Sorry the mailing list has been down since the 19th, Dreamhost -happened +happened again. (First the web archive was empty, then it was down, then it was restored from a backup taken before the "upgrade" but was not updating with new messages, which they denied was an actual problem but now timeout bounce -- 2.39.2