osbuild: Move /var in BuildRoot outside of tmpfs
In BuildRoot a new mount /var pointing to temporary directory in host's /var/tmp is created. This enables us to have temporary storage inside the container which is not hosted on tmpfs. Thanks to that we can move larger files out of the part of filesystem which is hosted on tmpfs to save up memory on machines with low memory capacity.
This commit is contained in:
parent
883b9dc3c5
commit
6bd568192a
1 changed files with 19 additions and 0 deletions
|
|
@ -16,7 +16,13 @@ class BuildRoot:
|
|||
def __init__(self, root, path="/run/osbuild"):
|
||||
self.root = tempfile.mkdtemp(prefix="osbuild-buildroot-", dir=path)
|
||||
self.api = tempfile.mkdtemp(prefix="osbuild-api-", dir=path)
|
||||
self.var = tempfile.mkdtemp(prefix="osbuild-var-", dir="/var/tmp")
|
||||
self.mounts = []
|
||||
|
||||
self.mount_root(root)
|
||||
self.mount_var()
|
||||
|
||||
def mount_root(self, root):
|
||||
for p in ["usr", "bin", "sbin", "lib", "lib64"]:
|
||||
source = os.path.join(root, p)
|
||||
target = os.path.join(self.root, p)
|
||||
|
|
@ -30,6 +36,16 @@ class BuildRoot:
|
|||
raise
|
||||
self.mounts.append(target)
|
||||
|
||||
def mount_var(self):
|
||||
target = os.path.join(self.root, "var")
|
||||
os.mkdir(target)
|
||||
try:
|
||||
subprocess.run(["mount", "-o", "bind", self.var, target], check=True)
|
||||
except subprocess.CalledProcessError:
|
||||
self.unmount()
|
||||
raise
|
||||
self.mounts.append(target)
|
||||
|
||||
def unmount(self):
|
||||
for path in self.mounts:
|
||||
subprocess.run(["umount", "--lazy", path], check=True)
|
||||
|
|
@ -41,6 +57,9 @@ class BuildRoot:
|
|||
if self.api:
|
||||
shutil.rmtree(self.api)
|
||||
self.api = None
|
||||
if self.var:
|
||||
shutil.rmtree(self.var)
|
||||
self.var = None
|
||||
|
||||
def run(self, argv, binds=None, readonly_binds=None, **kwargs):
|
||||
"""Runs a command in the buildroot.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue