44 lines
956 B
Bash
44 lines
956 B
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
helper_dir=${SLOPTRAP_HELPER_DIR:-/run/sloptrap-helper}
|
|
queue_dir="$helper_dir/queue"
|
|
mkdir -p "$queue_dir"
|
|
|
|
if [[ ${1-} != "install" ]]; then
|
|
printf 'usage: slop-apt install <package...>\n' >&2
|
|
exit 2
|
|
fi
|
|
shift
|
|
|
|
if [[ $# -eq 0 ]]; then
|
|
printf 'slop-apt: at least one package is required\n' >&2
|
|
exit 2
|
|
fi
|
|
|
|
for package in "$@"; do
|
|
if [[ ! $package =~ ^[A-Za-z0-9+.-]+$ ]]; then
|
|
printf 'slop-apt: invalid package name %s\n' "$package" >&2
|
|
exit 2
|
|
fi
|
|
done
|
|
|
|
request_dir=$(mktemp -d "$queue_dir/request.XXXXXX.req")
|
|
trap 'rm -rf "$request_dir"' EXIT INT TERM HUP
|
|
printf 'apt-install\n' >"$request_dir/op"
|
|
printf '%s\n' "$@" >"$request_dir/packages"
|
|
|
|
while [[ ! -f "$request_dir/status" ]]; do
|
|
sleep 1
|
|
done
|
|
|
|
if [[ -s "$request_dir/stdout" ]]; then
|
|
cat "$request_dir/stdout"
|
|
fi
|
|
if [[ -s "$request_dir/stderr" ]]; then
|
|
cat "$request_dir/stderr" >&2
|
|
fi
|
|
|
|
status=$(<"$request_dir/status")
|
|
exit "$status"
|