We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Is it possible to create system extensions based on Arch Linux
I have followed the documentation to the best of my abilities, however it seems not to be possible. When using `BaseTrees=…` and `Overlay=true`, pacman fails because it cannot lock its database. This is the reported error message:

```
‣ Building extension image
Create subvolume '/home/x/mkosi-test/.mkosi-tmp_eq6cbps/root'
‣  Mounting base trees…
‣   Installing extra packages for Arch
:: Synchronizing package databases...
error: failed to synchronize all databases (unable to lock database)
‣ "bwrap --dev-bind / / --chdir /home/x/mkosi-test --tmpfs /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/run --tmpfs /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/tmp --bind /home/x/mkosi-test/.mkosi-tmp_eq6cbps /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/var/tmp --proc /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/proc --dev /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/dev --ro-bind /sys /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/sys --unsetenv TMPDIR --ro-bind /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/etc/machine-id /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/etc/machine-id --bind /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/etc/passwd /etc/passwd --bind /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/etc/group /etc/group --bind /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/etc/shadow /etc/shadow --bind /x/mkosi-test/.mkosi-tmp_eq6cbps/root/etc/gshadow /etc/gshadow sh -c 'chmod 1777 /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/tmp /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/var/tmp /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/dev/shm && mkdir /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/run/host && echo mkosi >/home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/run/host/container-manager && exec $0 "$@"' pacman --config /home/x/mkosi-test/.mkosi-tmp_eq6cbps/pkgmngr/etc/pacman.conf --root /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root --logfile=/dev/null --cachedir '/home/x/mkosi-test/mkosi.cache/arch~rolling' --gpgdir /etc/pacman.d/gnupg --hookdir /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/etc/pacman.d/hooks --arch x86_64 --color auto --noconfirm --needed -Sy base-devel helix" returned non-zero exit code 1.
```

Is there any known solution or workaround?

### Basic Info
Host OS: Arch Linux (up to date)
mkosi version: 16

### Small Example

Create a `mkosi` directory with two presets, `base` and `extension`. Create a `mkosi.conf` file in both, with the following contents.

`mkosi.presets/base/mkosi.conf`:
```
[Distribution]
Distribution=arch

[Output]
Format=directory
ImageId=base

[Content]
Packages=
        base
        linux
Bootable=false
```

`mkosi.presets/extension/mkosi.conf`:
```
[Preset]
Dependencies=base

[Distribution]
Distribution=arch

[Output]
Format=directory
ImageId=extension
Overlay=true

[Content]
BaseTrees=../../mkosi.output/base/
Packages=
        base-devel
        helix
Bootable=false
```

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `mkosi/state.py`
Content:
```
1 # SPDX-License-Identifier: LGPL-2.1+
2 
3 from pathlib import Path
4 
5 from mkosi.config import MkosiArgs, MkosiConfig
6 from mkosi.tree import make_tree
7 from mkosi.util import umask
8 
9 
10 class MkosiState:
11     """State related properties."""
12 
13     def __init__(self, args: MkosiArgs, config: MkosiConfig, workspace: Path) -> None:
14         self.args = args
15         self.config = config
16         self.workspace = workspace
17 
18         with umask(~0o755):
19             make_tree(self.config, self.root)
20         self.staging.mkdir()
21         self.pkgmngr.mkdir()
22         self.install_dir.mkdir(exist_ok=True)
23         self.cache_dir.mkdir(parents=True, exist_ok=True)
24 
25     @property
26     def root(self) -> Path:
27         return self.workspace / "root"
28 
29     @property
30     def staging(self) -> Path:
31         return self.workspace / "staging"
32 
33     @property
34     def pkgmngr(self) -> Path:
35         return self.workspace / "pkgmngr"
36 
37     @property
38     def cache_dir(self) -> Path:
39         return self.config.cache_dir or self.workspace / f"cache/{self.config.distribution}~{self.config.release}"
40 
41     @property
42     def install_dir(self) -> Path:
43         return self.workspace / "dest"
44
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/mkosi/state.py b/mkosi/state.py
--- a/mkosi/state.py
+++ b/mkosi/state.py
@@ -16,7 +16,13 @@
         self.workspace = workspace
 
         with umask(~0o755):
-            make_tree(self.config, self.root)
+            # Using a btrfs subvolume as the upperdir in an overlayfs results in EXDEV so make sure we create
+            # the root directory as a regular directory if the Overlay= option is enabled.
+            if config.overlay:
+                self.root.mkdir()
+            else:
+                make_tree(self.config, self.root)
+
         self.staging.mkdir()
         self.pkgmngr.mkdir()
         self.install_dir.mkdir(exist_ok=True)

{"golden_diff": "diff --git a/mkosi/state.py b/mkosi/state.py\n--- a/mkosi/state.py\n+++ b/mkosi/state.py\n@@ -16,7 +16,13 @@\n         self.workspace = workspace\n \n         with umask(~0o755):\n-            make_tree(self.config, self.root)\n+            # Using a btrfs subvolume as the upperdir in an overlayfs results in EXDEV so make sure we create\n+            # the root directory as a regular directory if the Overlay= option is enabled.\n+            if config.overlay:\n+                self.root.mkdir()\n+            else:\n+                make_tree(self.config, self.root)\n+\n         self.staging.mkdir()\n         self.pkgmngr.mkdir()\n         self.install_dir.mkdir(exist_ok=True)\n", "issue": "Is it possible to create system extensions based on Arch Linux\nI have followed the documentation to the best of my abilities, however it seems not to be possible. When using `BaseTrees=\u2026` and `Overlay=true`, pacman fails because it cannot lock its database. This is the reported error message:\r\n\r\n```\r\n\u2023 Building extension image\r\nCreate subvolume '/home/x/mkosi-test/.mkosi-tmp_eq6cbps/root'\r\n\u2023  Mounting base trees\u2026\r\n\u2023   Installing extra packages for Arch\r\n:: Synchronizing package databases...\r\nerror: failed to synchronize all databases (unable to lock database)\r\n\u2023 \"bwrap --dev-bind / / --chdir /home/x/mkosi-test --tmpfs /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/run --tmpfs /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/tmp --bind /home/x/mkosi-test/.mkosi-tmp_eq6cbps /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/var/tmp --proc /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/proc --dev /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/dev --ro-bind /sys /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/sys --unsetenv TMPDIR --ro-bind /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/etc/machine-id /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/etc/machine-id --bind /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/etc/passwd /etc/passwd --bind /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/etc/group /etc/group --bind /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/etc/shadow /etc/shadow --bind /x/mkosi-test/.mkosi-tmp_eq6cbps/root/etc/gshadow /etc/gshadow sh -c 'chmod 1777 /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/tmp /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/var/tmp /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/dev/shm && mkdir /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/run/host && echo mkosi >/home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/run/host/container-manager && exec $0 \"$@\"' pacman --config /home/x/mkosi-test/.mkosi-tmp_eq6cbps/pkgmngr/etc/pacman.conf --root /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root --logfile=/dev/null --cachedir '/home/x/mkosi-test/mkosi.cache/arch~rolling' --gpgdir /etc/pacman.d/gnupg --hookdir /home/x/mkosi-test/.mkosi-tmp_eq6cbps/root/etc/pacman.d/hooks --arch x86_64 --color auto --noconfirm --needed -Sy base-devel helix\" returned non-zero exit code 1.\r\n```\r\n\r\nIs there any known solution or workaround?\r\n\r\n### Basic Info\r\nHost OS: Arch Linux (up to date)\r\nmkosi version: 16\r\n\r\n### Small Example\r\n\r\nCreate a `mkosi` directory with two presets, `base` and `extension`. Create a `mkosi.conf` file in both, with the following contents.\r\n\r\n`mkosi.presets/base/mkosi.conf`:\r\n```\r\n[Distribution]\r\nDistribution=arch\r\n\r\n[Output]\r\nFormat=directory\r\nImageId=base\r\n\r\n[Content]\r\nPackages=\r\n        base\r\n        linux\r\nBootable=false\r\n```\r\n\r\n`mkosi.presets/extension/mkosi.conf`:\r\n```\r\n[Preset]\r\nDependencies=base\r\n\r\n[Distribution]\r\nDistribution=arch\r\n\r\n[Output]\r\nFormat=directory\r\nImageId=extension\r\nOverlay=true\r\n\r\n[Content]\r\nBaseTrees=../../mkosi.output/base/\r\nPackages=\r\n        base-devel\r\n        helix\r\nBootable=false\r\n```\n", "before_files": [{"content": "# SPDX-License-Identifier: LGPL-2.1+\n\nfrom pathlib import Path\n\nfrom mkosi.config import MkosiArgs, MkosiConfig\nfrom mkosi.tree import make_tree\nfrom mkosi.util import umask\n\n\nclass MkosiState:\n    \"\"\"State related properties.\"\"\"\n\n    def __init__(self, args: MkosiArgs, config: MkosiConfig, workspace: Path) -> None:\n        self.args = args\n        self.config = config\n        self.workspace = workspace\n\n        with umask(~0o755):\n            make_tree(self.config, self.root)\n        self.staging.mkdir()\n        self.pkgmngr.mkdir()\n        self.install_dir.mkdir(exist_ok=True)\n        self.cache_dir.mkdir(parents=True, exist_ok=True)\n\n    @property\n    def root(self) -> Path:\n        return self.workspace / \"root\"\n\n    @property\n    def staging(self) -> Path:\n        return self.workspace / \"staging\"\n\n    @property\n    def pkgmngr(self) -> Path:\n        return self.workspace / \"pkgmngr\"\n\n    @property\n    def cache_dir(self) -> Path:\n        return self.config.cache_dir or self.workspace / f\"cache/{self.config.distribution}~{self.config.release}\"\n\n    @property\n    def install_dir(self) -> Path:\n        return self.workspace / \"dest\"\n", "path": "mkosi/state.py"}], "after_files": [{"content": "# SPDX-License-Identifier: LGPL-2.1+\n\nfrom pathlib import Path\n\nfrom mkosi.config import MkosiArgs, MkosiConfig\nfrom mkosi.tree import make_tree\nfrom mkosi.util import umask\n\n\nclass MkosiState:\n    \"\"\"State related properties.\"\"\"\n\n    def __init__(self, args: MkosiArgs, config: MkosiConfig, workspace: Path) -> None:\n        self.args = args\n        self.config = config\n        self.workspace = workspace\n\n        with umask(~0o755):\n            # Using a btrfs subvolume as the upperdir in an overlayfs results in EXDEV so make sure we create\n            # the root directory as a regular directory if the Overlay= option is enabled.\n            if config.overlay:\n                self.root.mkdir()\n            else:\n                make_tree(self.config, self.root)\n\n        self.staging.mkdir()\n        self.pkgmngr.mkdir()\n        self.install_dir.mkdir(exist_ok=True)\n        self.cache_dir.mkdir(parents=True, exist_ok=True)\n\n    @property\n    def root(self) -> Path:\n        return self.workspace / \"root\"\n\n    @property\n    def staging(self) -> Path:\n        return self.workspace / \"staging\"\n\n    @property\n    def pkgmngr(self) -> Path:\n        return self.workspace / \"pkgmngr\"\n\n    @property\n    def cache_dir(self) -> Path:\n        return self.config.cache_dir or self.workspace / f\"cache/{self.config.distribution}~{self.config.release}\"\n\n    @property\n    def install_dir(self) -> Path:\n        return self.workspace / \"dest\"\n", "path": "mkosi/state.py"}]}