mirror of
https://git.launchpad.net/livecd-rootfs
synced 2026-03-18 05:27:45 +00:00
build-livefs-lxd: configure apt proxy and package_update via cloud-init
Read http-proxy from --http-proxy flag or build-livefs.conf and pass it to the VM at launch time via cloud-init user-data (apt.http_proxy / apt.https_proxy). Also set package_update: true so cloud-init runs apt-get update on first boot, removing the need for an explicit call. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
cdd2b7fb01
commit
2b2c057acf
@ -1,5 +1,6 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import configparser
|
||||||
import pathlib
|
import pathlib
|
||||||
import subprocess
|
import subprocess
|
||||||
import time
|
import time
|
||||||
@ -7,6 +8,15 @@ import time
|
|||||||
import click
|
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(
|
@click.command(
|
||||||
context_settings={"ignore_unknown_options": True, "allow_extra_args": True}
|
context_settings={"ignore_unknown_options": True, "allow_extra_args": True}
|
||||||
)
|
)
|
||||||
@ -16,25 +26,39 @@ import click
|
|||||||
default=None,
|
default=None,
|
||||||
help="LXD VM name (default: livefs-builder-{suite})",
|
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)
|
@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
|
livecd_rootfs_root = pathlib.Path(__file__).resolve().parent.parent
|
||||||
vm_name = vm_name or f"livefs-builder-{suite}"
|
vm_name = vm_name or f"livefs-builder-{suite}"
|
||||||
host_conf = (
|
host_conf = (
|
||||||
pathlib.Path.home() / ".config" / "livecd-rootfs" / "build-livefs.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)
|
result = subprocess.run(["lxc", "info", vm_name], capture_output=True)
|
||||||
if result.returncode != 0:
|
if result.returncode != 0:
|
||||||
subprocess.run(
|
launch_cmd = [
|
||||||
[
|
"lxc", "launch", f"ubuntu-daily:{suite}", vm_name, "--vm",
|
||||||
"lxc", "launch", f"ubuntu-daily:{suite}", vm_name, "--vm",
|
"--config", "limits.cpu=4",
|
||||||
"--config", "limits.cpu=4",
|
"--config", "limits.memory=8GiB",
|
||||||
"--config", "limits.memory=8GiB",
|
"--device", "root,size=100GiB",
|
||||||
"--device", "root,size=100GiB",
|
]
|
||||||
],
|
user_data = "#cloud-config\npackage_update: true\n"
|
||||||
check=True,
|
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(
|
device_info = subprocess.run(
|
||||||
["lxc", "config", "device", "show", vm_name],
|
["lxc", "config", "device", "show", vm_name],
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user