build/debian: Fix the resolution of build script's directory

The `$(dirname "$0")` pattern used throughout build.sh does not
reliably point to the build script's directory.
The linked bug report highlights an issue where `$(dirname "$0")`
captures a relative path that is invalidated
after changing the current working directory.

We fix this by capturing the absolute path to the build script's
directory at the beginning of the build script,
and using it in place of the existing `$(dirname "$0")` calls.

We also fix the build.sh invocation within build_in_container.sh
to mimic our Kokoro build scripts.

Bug: 392644919
Change-Id: Ia1623a16e9869a30e374577bd76802d2339f1b7b
Test: ./build_in_container.sh -k
Test: ./build_in_container.sh -k -a aarch64
diff --git a/build/debian/build.sh b/build/debian/build.sh
index da01695..d75c3f6 100755
--- a/build/debian/build.sh
+++ b/build/debian/build.sh
@@ -5,6 +5,8 @@
 # - Add Android-specific packages via a new class
 # - Use a stable release from debian-cloud-images
 
+SCRIPT_DIR="$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
+
 show_help() {
 	echo "Usage: sudo $0 [OPTION]... [FILE]"
 	echo "Builds a debian image and save it to FILE. [sudo is required]"
@@ -170,7 +172,7 @@
 }
 
 build_rust_as_deb() {
-	pushd "$(dirname "$0")/../../guest/$1" > /dev/null
+	pushd "$SCRIPT_DIR/../../guest/$1" > /dev/null
 	cargo deb \
 		--target "${arch}-unknown-linux-gnu" \
 		--output "${debian_cloud_image}/localdebs"
@@ -180,7 +182,7 @@
 build_ttyd() {
 	local ttyd_version=1.7.7
 	local url="https://github.com/tsl0922/ttyd/archive/refs/tags/${ttyd_version}.tar.gz"
-	cp -r "$(dirname "$0")/ttyd" "${workdir}/ttyd"
+	cp -r "$SCRIPT_DIR/ttyd" "${workdir}/ttyd"
 
 	pushd "${workdir}" > /dev/null
 	wget "${url}" -O - | tar xz
@@ -199,13 +201,13 @@
 copy_android_config() {
 	local src
 	local dst
-	src="$(dirname "$0")/fai_config"
+	src="$SCRIPT_DIR/fai_config"
 	dst="${config_space}"
 
 	cp -R "${src}"/* "${dst}"
-	cp "$(dirname "$0")/image.yaml" "${resources_dir}"
+	cp "$SCRIPT_DIR/image.yaml" "${resources_dir}"
 
-	cp -R "$(dirname "$0")/localdebs/" "${debian_cloud_image}/"
+	cp -R "$SCRIPT_DIR/localdebs/" "${debian_cloud_image}/"
 	build_ttyd
 	build_rust_as_deb forwarder_guest
 	build_rust_as_deb forwarder_guest_launcher
@@ -258,7 +260,7 @@
 	            --extract "${dsc_file}"
 	pushd "linux-${debian_kver%-*}" > /dev/null
 
-	local kpatches_src="$(dirname "$0")/kernel_patches"
+	local kpatches_src="$SCRIPT_DIR/kernel_patches"
 	cp -r "${kpatches_src}/avf" debian/patches/
 	cat "${kpatches_src}/series" >> debian/patches/series
 	./debian/rules orig
@@ -316,7 +318,7 @@
 
 generate_output_package() {
 	fdisk -l "${raw_disk_image}"
-	local vm_config="$(realpath $(dirname "$0"))/vm_config.json.${arch}"
+	local vm_config="$SCRIPT_DIR/vm_config.json.${arch}"
 	local root_partition_num=1
 	local bios_partition_num=14
 	local efi_partition_num=15
diff --git a/build/debian/build_in_container.sh b/build/debian/build_in_container.sh
index 967f5ab..e3adcae 100755
--- a/build/debian/build_in_container.sh
+++ b/build/debian/build_in_container.sh
@@ -58,4 +58,4 @@
   -v "$ANDROID_BUILD_TOP/packages/modules/Virtualization:/root/Virtualization" \
   --workdir /root/Virtualization/build/debian \
   ubuntu:22.04 \
-  bash -c "/root/Virtualization/build/debian/build.sh -a $arch $release_flag $kernel_flag $save_workdir_flag $shell_condition bash"
+  bash -c "./build.sh -a $arch $release_flag $kernel_flag $save_workdir_flag $shell_condition bash"