Skip to content

Commit 111cf2d

Browse files
author
Raghu Kolli
committed
scripts: isolate directory navigation using subshells to fix path state corruption
Problem: In script.sh, script-znver4.sh, script-v3-v4.sh, and srcinfo.sh, directory navigation inside PKGBUILD processing loops relies on `cd $d` followed by `cd ..`. This pattern suffers from critical flaws: 1. It assumes $d is always exactly one directory level below the root. If find returns nested directory paths (e.g., ./dir1/dir2/PKGBUILD), `cd ..` steps back only one level instead of returning to the repository root. 2. If `cd $d` fails for any reason (e.g., unquoted variables or missing permissions), `cd ..` executes from the wrong working directory, causing all subsequent loop iterations to run in invalid paths and corrupting the build process. Solution: Wrap each package build and metadata generation step inside a subshell block `( cd "$d" || exit 1; ... )`. Because working directory modifications inside subshell processes do not persist after subshell termination: - The main shell context remains securely in the repository root directory at all times. - Eliminates the need for manual `cd ..` calls. - Properly quotes path variables `"$d"` to safely handle paths containing spaces.
1 parent 972d31f commit 111cf2d

4 files changed

Lines changed: 43 additions & 36 deletions

File tree

script-v3-v4.sh

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,12 @@ files=$(find . -name "PKGBUILD")
1717

1818
for f in $files
1919
do
20-
d=$(dirname $f)
21-
cd $d
22-
time docker run --name kernelbuild -e EXPORT_PKG=1 -e SYNC_DATABASE=1 -e CHECKSUMS=1 -v $PWD:/pkg pttrr/docker-makepkg-v3
23-
docker rm kernelbuild
24-
cd ..
20+
d=$(dirname "$f")
21+
(
22+
cd "$d" || exit 1
23+
time docker run --name kernelbuild -e EXPORT_PKG=1 -e SYNC_DATABASE=1 -e CHECKSUMS=1 -v "$PWD":/pkg pttrr/docker-makepkg-v3
24+
docker rm kernelbuild
25+
)
2526
done
2627

2728
## LLVM ThinLTO v3 Kernel
@@ -31,11 +32,12 @@ files=$(find . -name "PKGBUILD")
3132

3233
for f in $files
3334
do
34-
d=$(dirname $f)
35-
cd $d
36-
time docker run --name kernelbuild -e EXPORT_PKG=1 -e SYNC_DATABASE=1 -e CHECKSUMS=1 -v $PWD:/pkg pttrr/docker-makepkg-v3
37-
docker rm kernelbuild
38-
cd ..
35+
d=$(dirname "$f")
36+
(
37+
cd "$d" || exit 1
38+
time docker run --name kernelbuild -e EXPORT_PKG=1 -e SYNC_DATABASE=1 -e CHECKSUMS=1 -v "$PWD":/pkg pttrr/docker-makepkg-v3
39+
docker rm kernelbuild
40+
)
3941
done
4042

4143
echo "move kernels to the repo"
@@ -52,11 +54,12 @@ files=$(find . -name "PKGBUILD")
5254

5355
for f in $files
5456
do
55-
d=$(dirname $f)
56-
cd $d
57-
time docker run --name kernelbuild -e EXPORT_PKG=1 -e SYNC_DATABASE=1 -e CHECKSUMS=1 -v $PWD:/pkg pttrr/docker-makepkg-v4
58-
docker rm kernelbuild
59-
cd ..
57+
d=$(dirname "$f")
58+
(
59+
cd "$d" || exit 1
60+
time docker run --name kernelbuild -e EXPORT_PKG=1 -e SYNC_DATABASE=1 -e CHECKSUMS=1 -v "$PWD":/pkg pttrr/docker-makepkg-v4
61+
docker rm kernelbuild
62+
)
6063
done
6164

6265
## LLVM ThinLTO v4 Kernel
@@ -66,11 +69,12 @@ files=$(find . -name "PKGBUILD")
6669

6770
for f in $files
6871
do
69-
d=$(dirname $f)
70-
cd $d
71-
time docker run --name kernelbuild -e EXPORT_PKG=1 -e SYNC_DATABASE=1 -e CHECKSUMS=1 -v $PWD:/pkg pttrr/docker-makepkg-v4
72-
docker rm kernelbuild
73-
cd ..
72+
d=$(dirname "$f")
73+
(
74+
cd "$d" || exit 1
75+
time docker run --name kernelbuild -e EXPORT_PKG=1 -e SYNC_DATABASE=1 -e CHECKSUMS=1 -v "$PWD":/pkg pttrr/docker-makepkg-v4
76+
docker rm kernelbuild
77+
)
7478
done
7579

7680
echo "move kernels to the repo"

script-znver4.sh

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@ files=$(find . -name "PKGBUILD")
1515

1616
for f in $files
1717
do
18-
d=$(dirname $f)
19-
cd $d
20-
time docker run --name kernelbuild -e EXPORT_PKG=1 -e SYNC_DATABASE=1 -e CHECKSUMS=1 -v $PWD:/pkg pttrr/docker-makepkg-znver4
21-
docker rm kernelbuild
22-
cd ..
18+
d=$(dirname "$f")
19+
(
20+
cd "$d" || exit 1
21+
time docker run --name kernelbuild -e EXPORT_PKG=1 -e SYNC_DATABASE=1 -e CHECKSUMS=1 -v "$PWD":/pkg pttrr/docker-makepkg-znver4
22+
docker rm kernelbuild
23+
)
2324
done
2425

2526
echo "move kernels to the repo"

script.sh

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@ files=$(find . -name "PKGBUILD")
1313

1414
for f in $files
1515
do
16-
d=$(dirname $f)
17-
cd $d
18-
time docker run --name kernelbuild -e EXPORT_PKG=1 -e SYNC_DATABASE=1 -e CHECKSUMS=1 -v $PWD:/pkg pttrr/docker-makepkg
19-
docker rm kernelbuild
20-
cd ..
16+
d=$(dirname "$f")
17+
(
18+
cd "$d" || exit 1
19+
time docker run --name kernelbuild -e EXPORT_PKG=1 -e SYNC_DATABASE=1 -e CHECKSUMS=1 -v "$PWD":/pkg pttrr/docker-makepkg
20+
docker rm kernelbuild
21+
)
2122
done
2223

2324
echo "move kernels to the repo"

srcinfo.sh

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ files=$(find . -name "PKGBUILD")
44

55
for f in $files
66
do
7-
d=$(dirname $f)
8-
cd $d
9-
updpkgsums
10-
makepkg --printsrcinfo > .SRCINFO
11-
rm -rf *.patch
12-
cd ..
7+
d=$(dirname "$f")
8+
(
9+
cd "$d" || exit 1
10+
updpkgsums
11+
makepkg --printsrcinfo > .SRCINFO
12+
rm -rf *.patch
13+
)
1314
done

0 commit comments

Comments
 (0)