diff --git a/live-build/build-livefs-lxd b/live-build/build-livefs-lxd index 608e1f9b..5d43670e 100755 --- a/live-build/build-livefs-lxd +++ b/live-build/build-livefs-lxd @@ -1,5 +1,6 @@ #!/usr/bin/env python3 +import configparser import pathlib import subprocess import time @@ -7,6 +8,15 @@ import time import click +_CONFIG_FILE = pathlib.Path.home() / ".config" / "livecd-rootfs" / "build-livefs.conf" + + +def _read_config() -> dict[str, str]: + cp = configparser.ConfigParser() + cp.read(_CONFIG_FILE) + return dict(cp["defaults"]) if "defaults" in cp else {} + + @click.command( context_settings={"ignore_unknown_options": True, "allow_extra_args": True} ) @@ -16,25 +26,39 @@ import click default=None, help="LXD VM name (default: livefs-builder-{suite})", ) +@click.option( + "--http-proxy", + default=None, + help="HTTP proxy URL for apt inside the VM (also read from build-livefs.conf)", +) @click.argument("extra_args", nargs=-1, type=click.UNPROCESSED) -def main(suite, vm_name, extra_args): +def main(suite, vm_name, http_proxy, extra_args): livecd_rootfs_root = pathlib.Path(__file__).resolve().parent.parent vm_name = vm_name or f"livefs-builder-{suite}" host_conf = ( pathlib.Path.home() / ".config" / "livecd-rootfs" / "build-livefs.conf" ) + if http_proxy is None: + http_proxy = _read_config().get("http-proxy") + result = subprocess.run(["lxc", "info", vm_name], capture_output=True) if result.returncode != 0: - subprocess.run( - [ - "lxc", "launch", f"ubuntu-daily:{suite}", vm_name, "--vm", - "--config", "limits.cpu=4", - "--config", "limits.memory=8GiB", - "--device", "root,size=100GiB", - ], - check=True, - ) + launch_cmd = [ + "lxc", "launch", f"ubuntu-daily:{suite}", vm_name, "--vm", + "--config", "limits.cpu=4", + "--config", "limits.memory=8GiB", + "--device", "root,size=100GiB", + ] + user_data = "#cloud-config\npackage_update: true\n" + if http_proxy is not None: + user_data += ( + "apt:\n" + f" http_proxy: {http_proxy}\n" + f" https_proxy: {http_proxy}\n" + ) + launch_cmd += ["--config", f"user.user-data={user_data}"] + subprocess.run(launch_cmd, check=True) device_info = subprocess.run( ["lxc", "config", "device", "show", vm_name],