diff --git a/main.sh b/main.sh index 070e023..0837a4e 100755 --- a/main.sh +++ b/main.sh @@ -3,27 +3,55 @@ IFS=$'\n' set -eu -o pipefail + cleanup () { echo + + # if Unbound is not started, exit from function + [ -v unbound_pid ] || return + echo '==> Stopping Unbound' - [ -v unbound_pid ] && kill -INT "$unbound_pid" + kill -INT "$unbound_pid" echo } trap cleanup EXIT + +built_or_system () { + # args: [1]custom/build/path [2]program_name [3]build_script [4]package_name + + if [ -e "$1" ]; then + echo "$2: using custom build at $1" >&2 # stderr; just a message to user + echo "$1" # stdout; captured into a variable with $(), see below + + elif exe=$(which "$2"); then + echo "$exe" # stdout + + else + echo " ** $2: not found neither built nor in-system" >&2 # stderr + echo " use script './$3' to automatically build it at the correct path" >&2 + + # if $4 is set, say about possible pkg name + [ -v 4 ] && \ + echo " or install it from your package manager, usually pkg is named '$4'" >&2 + + return 1 + fi +} + +exe_dig="bind9/bin/dig/dig" +exe_drill="ldns/drill/drill" +exe_hr="hickory-dns/target/release/resolve" + echo echo '==> Checking deps' -echo 'Note: dig is installed from package usually named "bind-utils"' -echo ' drill -- package "ldns"' -echo " and hickory's resolve can be built with ./build_hr.sh" -echo ' (this script will find it in subdir, no need to install)' which unbound which hyperfine -which dig -which drill -hr="hickory-dns/target/release/resolve" -[ -e "$hr" ] || hr=$(which resolve) +exe_dig=$(built_or_system "$exe_dig" dig "build_dig.sh" bind-utils) +exe_drill=$(built_or_system "$exe_drill" drill "build_drill.sh" ldns) +exe_hr=$(built_or_system "$exe_hr" resolve "build_hr.sh") + echo echo '==> Starting Unbound' @@ -31,30 +59,35 @@ unbound -c ./unbound.conf -dp 2>unbound.log & unbound_pid=$! sleep 2 + echo echo '==> Benchmarks for A domain.tld.' hyperfine -N \ - "dig -p 2253 domain.tld @127.0.0.1" \ - "drill -p 2253 domain.tld @127.0.0.1" \ - "$hr -n 127.0.0.1:2253 domain.tld" + "$exe_dig -p 2253 domain.tld @127.0.0.1" \ + "$exe_drill -p 2253 domain.tld @127.0.0.1" \ + "$exe_hr -n 127.0.0.1:2253 domain.tld" echo echo '==> Benchmarks for AAAA domain.tld.' hyperfine -N \ - "dig -p 2253 aaaa domain.tld @127.0.0.1" \ - "drill -p 2253 aaaa domain.tld @127.0.0.1" \ - "$hr -n 127.0.0.1:2253 -t AAAA domain.tld" + "$exe_dig -p 2253 aaaa domain.tld @127.0.0.1" \ + "$exe_drill -p 2253 aaaa domain.tld @127.0.0.1" \ + "$exe_hr -n 127.0.0.1:2253 -t AAAA domain.tld" echo echo '==> Benchmarks for MX domain.tld.' hyperfine -N \ - "dig -p 2253 mx domain.tld @127.0.0.1" \ - "drill -p 2253 mx domain.tld @127.0.0.1" \ - "$hr -n 127.0.0.1:2253 -t MX domain.tld" + "$exe_dig -p 2253 mx domain.tld @127.0.0.1" \ + "$exe_drill -p 2253 mx domain.tld @127.0.0.1" \ + "$exe_hr -n 127.0.0.1:2253 -t MX domain.tld" echo echo '==> Benchmarks for CNAME mail.domain.tld.' hyperfine -N \ - "dig -p 2253 mail.domain.tld @127.0.0.1" \ - "drill -p 2253 mail.domain.tld @127.0.0.1" \ - "$hr -n 127.0.0.1:2253 mail.domain.tld" + "$exe_dig -p 2253 mail.domain.tld @127.0.0.1" \ + "$exe_drill -p 2253 mail.domain.tld @127.0.0.1" \ + "$exe_hr -n 127.0.0.1:2253 mail.domain.tld" + + +echo +echo '==> All done'