diff --git a/compile_pkgs b/compile_pkgs
index b02e82f417e4a2b9d06f888248b5b4d4da0f2bef..47b9308915a4bca6e5b5e38ce41dd3e652fce400 100755
--- a/compile_pkgs
+++ b/compile_pkgs
@@ -21,7 +21,7 @@ shopt -s nullglob
 DEFAULT_STEPS=( "prepare" "compile" "sign" "store_hash" "pkgsrepo" "stats" "gen_junit" )
 
 # Paths to OpenWRT build and turris-build sources
-src_dir="$(dirname "$(readlink -f "$0")")"
+src_dir="$(readlink -f "${0%/*}")"
 build_dir="$(readlink -f "$(pwd)")"
 if [ "$build_dir" == "$src_dir" ]; then
 	# Protect against turris-build repository wipe
diff --git a/generate_lists b/generate_lists
index 38ec0132fca2dfcef801586c0004e813436ca8fd..52912af49470e03535d7c3c097cebf826778b170 100755
--- a/generate_lists
+++ b/generate_lists
@@ -16,7 +16,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 set -e
 
-src_dir="$(dirname "$(readlink -f "$0")")"
+src_dir="$(readlink -f "${0%/*}")"
 . "$src_dir/helpers/common.sh"
 . "$src_dir/helpers/generate_common.sh"
 
diff --git a/generate_medkits b/generate_medkits
index 0dbdd80ff2dc5c3b357539d0cc6ed3c5de9b6bba..1abb3c802c2edd77e45f45f0b8591510319ccb56 100755
--- a/generate_medkits
+++ b/generate_medkits
@@ -16,7 +16,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 set -eu
 
-src_dir="$(dirname "$(readlink -f "$0")")"
+src_dir="$(readlink -f "${0%/*}")"
 . "$src_dir/helpers/common.sh"
 . "$src_dir/helpers/generate_common.sh"
 . "$src_dir/defaults.sh"
diff --git a/helpers/generate_medkit.sh b/helpers/generate_medkit.sh
index 5dda51c86a7f33ab275f86f289ba7ef9e2caceb8..43173d396b9d83eb9279dca90f67558468bdb2d1 100755
--- a/helpers/generate_medkit.sh
+++ b/helpers/generate_medkit.sh
@@ -16,7 +16,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 set -e
 
-src_dir="$(dirname "$(readlink -f "$0/..")")"
+src_dir="$(dirname "$(readlink -f "${0%/*}")")"
 . "$src_dir/helpers/common.sh"
 . "$src_dir/helpers/generate_common.sh"