mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-07-06 18:03:12 +02:00
44 lines
1.3 KiB
Bash
Executable File
44 lines
1.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# Run makepkg inside a constrained user scope to protect desktop responsiveness.
|
|
|
|
set -euo pipefail
|
|
|
|
CPU_QUOTA="${MAKEPKG_CPU_QUOTA:-70%}"
|
|
MEMORY_MAX="${MAKEPKG_MEMORY_MAX:-12G}"
|
|
TASKS_MAX="${MAKEPKG_TASKS_MAX:-2048}"
|
|
NICE_LEVEL="${MAKEPKG_NICE_LEVEL:-10}"
|
|
IONICE_CLASS="${MAKEPKG_IONICE_CLASS:-2}"
|
|
IONICE_LEVEL="${MAKEPKG_IONICE_LEVEL:-7}"
|
|
|
|
if ! command -v makepkg >/dev/null 2>&1; then
|
|
echo "makepkg_capped: makepkg not found in PATH" >&2
|
|
exit 127
|
|
fi
|
|
|
|
run_makepkg_fallback() {
|
|
exec ionice -c "$IONICE_CLASS" -n "$IONICE_LEVEL" \
|
|
nice -n "$NICE_LEVEL" \
|
|
makepkg "$@"
|
|
}
|
|
|
|
if ! command -v systemd-run >/dev/null 2>&1; then
|
|
echo "makepkg_capped: systemd-run unavailable, falling back to local limits" >&2
|
|
run_makepkg_fallback "$@"
|
|
fi
|
|
|
|
# Keep builds in the user manager scope. If this fails (no user manager),
|
|
# gracefully fall back to ionice+nice only.
|
|
if ! systemd-run --user --scope --quiet true 2>/dev/null; then
|
|
echo "makepkg_capped: user systemd scope unavailable, falling back" >&2
|
|
run_makepkg_fallback "$@"
|
|
fi
|
|
|
|
exec systemd-run --user --scope --quiet --same-dir --collect \
|
|
-p "CPUQuota=${CPU_QUOTA}" \
|
|
-p "MemoryMax=${MEMORY_MAX}" \
|
|
-p "MemorySwapMax=0" \
|
|
-p "TasksMax=${TASKS_MAX}" \
|
|
ionice -c "$IONICE_CLASS" -n "$IONICE_LEVEL" \
|
|
nice -n "$NICE_LEVEL" \
|
|
makepkg "$@"
|