From 68f74cd1c8c9ec976d4eba9c2ea2797a3887cab7 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sun, 30 Sep 2018 21:56:28 -0400 Subject: libremakepkg: Fix launching `distcc-tool idaemon` - Drop `distcc-tool-idaemon.pid`; we can just check `jobs -p` - _distcc_start_idaemon() and _distcc_stop_idaemon() are thereby simplified to the point where they can just be inlined. - Why did I keep doing `foo & wait`!? - Don't forget to write DISTCC_HOSTS to makepkg.conf - There was a typo in makepkg.conf; it said "_discc_start_idaemon" --- src/chroot-tools/hooks-distcc.sh | 69 ++++++++++++---------------------------- 1 file changed, 20 insertions(+), 49 deletions(-) diff --git a/src/chroot-tools/hooks-distcc.sh b/src/chroot-tools/hooks-distcc.sh index d65fd1e..b19c223 100644 --- a/src/chroot-tools/hooks-distcc.sh +++ b/src/chroot-tools/hooks-distcc.sh @@ -1,5 +1,5 @@ #!/hint/bash -euE -o pipefail -# Copyright (C) 2013, 2017 Luke Shumaker +# Copyright (C) 2013, 2017-2018 Luke Shumaker # # License: GNU GPLv2+ # @@ -29,10 +29,10 @@ _distcc_check() { # From previous versions "$home/.makepkg.conf" "$copydir/run/distcc-tool.pid" + "$copydir/run/distcc-tool-idaemon.pid" # From this version "$copydir/bin/distcc-tool" - "$copydir/run/distcc-tool-idaemon.pid" "$copydir/run/distcc-tool-odaemon.pid" "$home/.config/pacman/makepkg.conf" "$home/.ssh/config" @@ -50,26 +50,6 @@ _distcc_check() { fi } -_distcc_start_idaemon() { - ( - set -C - echo $BASHPID >/run/distcc-tool-idaemon.pid || exit 0 - trap 'jobs -p | xargs -r kill --' EXIT - /bin/distcc-tool idaemon "$@" & - wait - ) &>/dev/null & -} - -_distcc_stop_idaemon() { - if [[ -f /run/distcc-tool-idaemon.pid ]]; then - local idaemon - idaemon=$(< /run/distcc-tool-idaemon.pid) || exit - kill -- "$idaemon" || exit - - rm -f -- /run/distcc-tool-idaemon.pid - fi -} - distcc_start_odaemon() { local copydir=$1 @@ -89,32 +69,24 @@ distcc_start_odaemon() { local _distcc_tool; _distcc_tool="$(librelib chroot/distcc-tool)" install -m755 "$_distcc_tool" "$copydir/bin/distcc-tool" - mkdir -p "$home/.config/pacman" - { - declare -f _distcc_start_idaemon - declare -f _distcc_stop_idaemon - printf '%s\n' \ - '_discc_start_idaemon "$DISTCC_HOSTS"' \ - 'trap _distcc_stop_idaemon EXIT' \ - 'DISTCC_HOSTS="$(/bin/distcc-tool rewrite "$DISTCC_HOSTS")"' - } > "$home/.config/pacman/makepkg.conf" - - mkdir -p "$home/.ssh" - printf '%s\n' \ - 'Host *' \ - ' ProxyCommand /bin/distcc-tool client %h %p' \ - > "$home/.ssh/config" - - ( - echo $BASHPID >"$copydir"/run/distcc-tool-odaemon.pid + local DISTCC_HOSTS + DISTCC_HOSTS="$(get_var makepkg DISTCC_HOSTS '')" + local rewritten_DISTCC_HOSTS + rewritten_DISTCC_HOSTS=$("$_distcc_tool" rewrite "${DISTCC_HOSTS:-}") + + install -Dm644 /dev/stdin "$home/.config/pacman/makepkg.conf" <<-eot trap 'jobs -p | xargs -r kill --' EXIT - "$_distcc_tool" odaemon "$copydir" & - wait - # Redirecting to /dev/null here is important, - # because otherwise our stdout/stderr are - # connected to the caller's `|& indent` and - # that'll end up waiting for us. - ) &>/dev/null & + /bin/distcc-tool idaemon ${DISTCC_HOSTS@Q} /dev/null & + DISTCC_HOSTS=${rewritten_DISTCC_HOSTS@Q} + eot + + install -Dm644 /dev/stdin "$home/.ssh/config" <<-'eot' + Host * + ProxyCommand /bin/distcc-tool client %h %p + eot + + "$_distcc_tool" odaemon "$copydir" /dev/null & + echo $! > "$copydir/run/distcc-tool-odaemon.pid" fi } @@ -137,7 +109,6 @@ distcc_stop_odaemon() { "$home/.config/pacman/makepkg.conf" \ "$home/.ssh/config" \ "$copydir/bin/distcc-tool" \ - "$copydir/run/distcc-tool-odaemon.pid" \ - "$copydir/run/distcc-tool-idaemon.pid" + "$copydir/run/distcc-tool-odaemon.pid" fi } -- cgit v1.2.2