Skip to content

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 denied

This 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 /tmp

If 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 setup

If you install via curl:

bash
curl -fsSL https://updates.wantok.cz/download/safecall/installer | SAFECALL_TMPDIR=/var/tmp sudo bash -s -- --setup

Notes

  • /var/tmp is typically mounted with exec on most systems.
  • You can also use another exec-enabled path if your environment requires it.
  • If both /tmp and /var/tmp are noexec, set SAFECALL_TMPDIR to 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 setup

Or if already installed:

bash
cd /opt/safecall
sudo SAFECALL_TMPDIR=/var/tmp ./util.sh system repair --migrate