Lines Matching full:arch
44 $ ssh crosvm_$ARCH
61 Arch = Literal["x86_64", "aarch64"] variable
88 def data_dir(arch: Arch): argument
89 return cargo_target_dir().joinpath("crosvm_tools").joinpath(arch)
92 def pid_path(arch: Arch): argument
93 return data_dir(arch).joinpath("pid")
96 def base_img_name(arch: Arch): argument
97 return f"base-{arch}-{BASE_IMG_VERSION}.qcow2"
100 def base_img_url(arch: Arch): argument
101 return f"{IMAGE_DIR_URL}/{base_img_name(arch)}"
104 def base_img_path(arch: Arch): argument
105 return data_dir(arch).joinpath(base_img_name(arch))
108 def rootfs_img_path(arch: Arch): argument
109 return data_dir(arch).joinpath(f"rootfs-{arch}-{BASE_IMG_VERSION}.qcow2")
113 SSH_PORTS: dict[Arch, int] = {
127 ARCH_TO_QEMU: dict[Arch, tuple[str, list[Iterable[str]]]] = {
128 # arch: (qemu-binary, [(param, value), ...])
155 def ssh_opts(arch: Arch) -> dict[str, str]: argument
157 "Port": str(SSH_PORTS[arch]),
166 def ssh_cmd_args(arch: Arch): argument
167 return [f"-o{k}={v}" for k, v in ssh_opts(arch).items()]
170 def ssh_exec(arch: Arch, cmd: Optional[str] = None): argument
175 *ssh_cmd_args(arch),
181 def ping_vm(arch: Arch): argument
188 *ssh_cmd_args(arch),
199 def write_pid_file(arch: Arch, pid: int): argument
200 with open(pid_path(arch), "w") as pid_file:
204 def read_pid_file(arch: Arch): argument
205 if not pid_path(arch).exists():
208 with open(pid_path(arch), "r") as pid_file:
213 arch: Arch, argument
217 (binary, arch_args) = ARCH_TO_QEMU[arch]
221 ("-serial", f"file:{data_dir(arch).joinpath('vm_log')}")
229 write_pid_file(arch, process.pid)
234 def run_vm(arch: Arch, background: bool = False): argument
236 arch,
237 rootfs_img_path(arch),
242 def is_running(arch: Arch): argument
243 pid = read_pid_file(arch)
255 def kill_vm(arch: Arch): argument
256 pid = read_pid_file(arch)
261 def build_if_needed(arch: Arch, reset: bool = False): argument
262 if reset and is_running(arch):
264 kill_vm(arch)
267 data_dir(arch).mkdir(parents=True, exist_ok=True)
269 base_img = base_img_path(arch)
271 print(f"Downloading base image ({base_img_url(arch)})...")
272 request.urlretrieve(base_img_url(arch), base_img_path(arch))
274 rootfs_img = rootfs_img_path(arch)
295 def up(arch: Arch): argument
296 if is_running(arch):
300 arch,
301 rootfs_img_path(arch),
306 def run(arch: Arch): argument
307 if is_running(arch):
310 arch,
311 rootfs_img_path(arch),
316 def wait(arch: Arch, timeout: int = 120): argument
317 if not is_running(arch):
318 up(arch)
319 elif ping_vm(arch):
328 if ping_vm(arch):
334 def ssh(arch: Arch, timeout: int): argument
335 wait(arch, timeout)
336 ssh_exec(arch)
339 def ssh_config(arch: Arch): argument
340 print(f"Host crosvm_{arch}")
342 for opt, value in ssh_opts(arch).items():
346 def stop(arch: Arch): argument
347 if not is_running(arch):
350 ssh_exec(arch, "sudo poweroff")
353 def kill(arch: Arch): argument
354 if not is_running(arch):
357 kill_vm(arch)
360 def clean(arch: Arch): argument
361 if is_running(arch):
362 kill(arch)
363 shutil.rmtree(data_dir(arch))
381 "--arch",
382 choices=typing.get_args(Arch),
399 if not args.arch:
403 clean(args.arch)
406 if not args.arch:
407 print("--arch argument is required")
413 ssh_config(args.arch)
417 build_if_needed(args.arch, reset=args.reset)
422 run(args.arch)
424 up(args.arch)
426 ssh(args.arch, args.timeout)
428 stop(args.arch)
430 kill(args.arch)
432 wait(args.arch, args.timeout)