[Dev] libretools 20131007 release announcment.
Luke T. Shumaker
lukeshu at sbcglobal.net
Tue Oct 8 03:12:15 GMT 2013
I just pushed libretools 20131007 to [libre]. You may generally
regard it as a bugfix release.
Exciting: There are now man-pages for all of librelib.
I thought that this would be a short bugfix release, but bugs in
systemd-nspawn made things a *lot* more complicated.
Changes from 20130930 to 20131007:
Changes:
- librerelease: Add `-u` flag for upload-only; don't run db-update
- conf.sh: {get,set}_conf_makepkg was generalized to {get,set}_var
- added man-pages for all of librelib
Bugfixes:
- librerelease: The total upload size displayed before the upload was
an error message, instead of a number.
- libremakepkg: Do a better job of post-processing the output so that
it isn't line-buffered, and carriage returns work correctly.
- a couple of fixes in unit tests
- chcleanup: don't search in $PATH for the PKGBUILD
- librechroot: clean-pkgs now looks at /startdir/PKGBUILD instead of
/build/PKGBUILD.
Chroot TTY stuff:
It turns out that systemd-nspawn's TTY/IO handling is buggy as
hell. In general, if stdout/stdin aren't TTYs, it does the wrong
thing. I've mitigated this by adding a (partial) work-around for
when stdout isn't a TTY, and having it print a warning when stdin
isn't a TTY.
I could better mitigate this by writing a PTY wrapper/condom (in C)
to stop systemd-nspawn from f---ing up the TTY, but I don't want to
distribute an architecture-dependent program with libretools, and I
think it would be more productive to fix systemd-nspawn. Hopefully
I will be sending them a patch soon. (Also, the wrapper program that
I am writing anyway is unfinished.)
So, the bugs:
- If stdin isn't a TTY, it does not correctly handle SIGINT, and
instead immediately dies without doing anything with it's child
processes. Which means that without system-nspawn proxying their
stdout to actual stdout, their I/O will block forever, and you
will have to `kill(1)` them.
- If stdout isn't a TTY, it *mostly* ignores the user. Not all
the way but mostly, which is even more confusing.
- It still prints output to stdout (instead of, say /dev/tty).
- But it sets the characteristics (namely size) of the emulated
stdout TTY on stdin (assuming stdin is a TTY). WHY ARE YOU
BASING THE OUTPUT CHARACTERISTICS ON THE INPUT
CHARACTERISTICS!?
- It also will perform `ioctl(3)s` meant for stdout on stdin.
WHAT. THE. HELL.
The correct thing to do, would *obviously* be to have stdout in the
chroot reflect stdout outside of it.
Like I've said, I've mitigated this the best I can in librechroot,
but until systemd-nspawn is fixed, the output of libremakepkg will
be a little buggy.
Happy hacking,
~ Luke Shumaker
More information about the Dev
mailing list