Appearance
Installer Fails with "Permission denied" on ./util.sh
This page covers a common installer failure on hardened Linux systems where /tmp is mounted with noexec.
Symptoms
During install, setup, or migration, you may see output like:
bash
Running SafeCall installer (version 5.x.x)...
./v5.sh: line 508: ./util.sh: Permission deniedThis usually happens right after the binary download completes.
Root Cause
The installer creates a temporary directory and runs helper scripts from it.
If that temporary directory is on a filesystem mounted with noexec (commonly /tmp), Linux blocks script execution and returns Permission denied.
Verify
Check mount options for /tmp:
bash
findmnt -no OPTIONS /tmpIf the output contains noexec, this is the cause.
Alternative check:
bash
mount | grep ' /tmp 'Resolution
Use an executable temp directory for the installer:
bash
SAFECALL_TMPDIR=/var/tmp ./v5.sh setupIf you install via curl:
bash
curl -fsSL https://updates.wantok.cz/download/safecall/installer | SAFECALL_TMPDIR=/var/tmp sudo bash -s -- --setupNotes
/var/tmpis typically mounted withexecon most systems.- You can also use another exec-enabled path if your environment requires it.
- If both
/tmpand/var/tmparenoexec, setSAFECALL_TMPDIRto a different writable exec-enabled directory.
For Existing 4.x -> 5.x Migrations
The same issue affects migration flows because they execute installer helper scripts from a temp directory before entering setup/repair logic.
Run migration/repair with an explicit temp dir:
bash
SAFECALL_TMPDIR=/var/tmp ./v5.sh setupOr if already installed:
bash
cd /opt/safecall
sudo SAFECALL_TMPDIR=/var/tmp ./util.sh system repair --migrate