mkarchroot: unshare mount namespace to avoid broken root chroot creation

While `extra-x86_64-build -c` is running `pacstrap` and has
`/var/lib/archbuild/extra-x86_64/root/run` mounted, another user logs
in, thus creating a new mountpoint `/run/user/$uid` that propagates into
`/var/lib/archbuild/extra-x86_64/root/run/user/$uid` leading to a broken
root chroot.

Successive `extra-x86_64-build -c` calls will result in cleanup errors:

```
$ extra-x86_64-build -c
==> Creating chroot for [extra] (x86_64)...
-> Deleting chroot copy 'root'...
rm: skipping '/var/lib/archbuild/extra-x86_64/root/run', since it's on a different device
rm: skipping '/var/lib/archbuild/extra-x86_64/root/run', since it's on a different device
==> ERROR: Working directory '/var/lib/archbuild/extra-x86_64/root' already exists
==> ERROR: Aborting...
```

Reported by and patch adjusted from archlinuxcn.

Fixes FS#64698
This commit is contained in:
Felix Yan 2022-02-18 13:35:43 +00:00 committed by Levente Polyak
parent c2f163b640
commit 0c61761f33
No known key found for this signature in database
GPG Key ID: FC1B547C8D8172C8
1 changed files with 1 additions and 1 deletions

View File

@ -81,7 +81,7 @@ for file in "${files[@]}"; do
cp "$file" "$working_dir$file"
done
pacstrap -${umode}Mcd ${pac_conf:+-C "$pac_conf"} "$working_dir" \
unshare --mount pacstrap -${umode}Mcd ${pac_conf:+-C "$pac_conf"} "$working_dir" \
"${cache_dirs[@]/#/--cachedir=}" "$@" || die 'Failed to install all packages'
printf '%s.UTF-8 UTF-8\n' en_US de_DE > "$working_dir/etc/locale.gen"