summaryrefslogtreecommitdiff
path: root/src/chroot-tools
diff options
context:
space:
mode:
authorLuke Shumaker <LukeShu@sbcglobal.net>2013-10-07 16:08:00 -0400
committerLuke Shumaker <LukeShu@sbcglobal.net>2013-10-07 16:08:00 -0400
commit8cce4095d3465863fcb26b7264371d97db31990a (patch)
tree2a98580947ff400dc70161f00b9f77497af92d15 /src/chroot-tools
parentc366cd83bb86440dcc15a2203df57be75ff3f11f (diff)
revert last commit, it makes systemd-nspawn not handle signals correctly.
I'm a fan of systemd-nspawn. I really am. It handles a lot of things the "right" way, so you don't have to. However, it handles PTYs and signals in an incredibly stupid way. Working around one is f---ed up by the other being wrong. Before I implemented the change that this reverts, this is what happens: systemd-nspawn> I need to create a PTY and proxy between it and stdio. I can specify a terminal size when doing this--I should set it to reflect the terminal I am connected to. systemd-nspawn> /dev/stdout: Are you a TTY? /dev/stdout> systemd-nspawn: No. ---- The correct thing to do here would be to either not set the size, ---- or set it to 80×24 systemd-nspawn> /dev/stdin: Are you a TTY? /dev/stdin> systemd-nspawn: Yes. systemd-nspawn> /dev/stdin: Great, what size are you? /dev/stdin> systemd-nspawn: I am X×Y. systemd-nspawn: libc: Please give me a PTY that is X×Y. ---- Why the f--- would you do this? The size only effects *output*. ---- If you don't know the characteristics of the output, set ---- reasonable defaults! Don't base it on the characteristics of the ---- input! My solution was to make /dev/stdin not be a TTY by closing it. This had the desired effect, but tripped up the signal handling. Here is how signals were handled before: systemd-nspawn> /dev/stdin: Are you a TTY? /dev/stdin> systemd-nspawn: Yes. systemd-nspawn> /dev/stdin: Great, please don't send SIGINT on C-c. I will handle it myself. *user presses C-c, systemd reads it* systemd-nspawn> child processes: here's a SIGINT. Here's what happens when I close, or do other things to make stdin not be a TTY: systemd-nspawn> /dev/stdin: Are you a TTY? /dev/stdin> systemd-nspawn: No. systemd-nspawn> /dev/stdin: Oh, OK. *user presses C-c, /dev/stdin interprets it* /dev/stdin> systemd-nspawn: Here's a SIGINT. systemd-nspawn> *dies, abandoning child processes* The clear correct thing to do would have been to *handle* SIGINT, and pass it along to the children.
Diffstat (limited to 'src/chroot-tools')
-rwxr-xr-xsrc/chroot-tools/libremakepkg10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/chroot-tools/libremakepkg b/src/chroot-tools/libremakepkg
index 963747f..fc6418c 100755
--- a/src/chroot-tools/libremakepkg
+++ b/src/chroot-tools/libremakepkg
@@ -117,10 +117,10 @@ build() (
fi
prepare_chroot "$copydir" "$LIBREHOME" "$repack" false
- "${run[@]}" /chrootprepare "$@" 0>&- |& indent
+ "${run[@]}" /chrootprepare "$@" |& indent
run_hook pre_build "$copydir"
trap "run_hook post_build '$copydir'" EXIT
- "${run[@]}" /chrootbuild "$@" 0>&- |& indent
+ "${run[@]}" /chrootbuild "$@" |& indent
)
# The main program #############################################################
@@ -244,7 +244,7 @@ main() {
"Waiting for existing lock on chroot copy to be released: [%s]" "$copy"
# Create the chroot if it does not exist
msg 'Initializing the chroot...'
- librechroot "${librechroot_flags[@]}" make 0>&- |& indent
+ librechroot "${librechroot_flags[@]}" make |& indent
fi
# Set target CARCH
@@ -255,7 +255,7 @@ main() {
msg 'Starting pre-build activities...'
run_hook check_pkgbuild
msg 'Downloading sources...'
- download_sources "$copydir" "$LIBREUSER" 0>&- |& indent
+ download_sources "$copydir" "$LIBREUSER" |& indent
# Build
msg 'Starting to build the package...'
@@ -265,7 +265,7 @@ main() {
# Post-build
msg 'Starting post-build activities...'
run_hook check_pkg
- add_to_local_repo "$copydir" "$copydir"/pkgdest/*.pkg.tar* 0>&- |& indent
+ add_to_local_repo "$copydir" "$copydir"/pkgdest/*.pkg.tar* |& indent
}
main "$@"