• Home
  • Raw
  • Download

Lines Matching +full:- +full:- +full:arch

3 # Use of this source code is governed by a BSD-style license that can be
44 $ ssh crosvm_$ARCH
61 Arch = Literal["x86_64", "aarch64"] variable
68 IMAGE_DIR_URL = "https://storage.googleapis.com/crosvm-testvm"
79 ["cargo", "metadata", "--no-deps", "--format-version=1"],
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] = {
120 ("-display", "none"),
121 ("-device", "virtio-net-pci,netdev=net0"),
122 ("-smp", "8"),
123 ("-m", "4G"),
127 ARCH_TO_QEMU: dict[Arch, tuple[str, list[Iterable[str]]]] = {
128 # arch: (qemu-binary, [(param, value), ...])
130 "qemu-system-x86_64",
132 ("-cpu", "Broadwell,vmx=on"),
133 ("-netdev", f"user,id=net0,hostfwd=tcp::{SSH_PORTS['x86_64']}-:22"),
134 *([("-enable-kvm",)] if KVM_SUPPORT else []),
139 "qemu-system-aarch64",
141 ("-M", "virt"),
142 ("-machine", "virt,virtualization=true,gic-version=3"),
143 ("-cpu", "cortex-a57"),
144 ("-bios", "/usr/share/qemu-efi-aarch64/QEMU_EFI.fd"),
146 "-netdev",
147 f"user,id=net0,hostfwd=tcp::{SSH_PORTS['aarch64']}-:22",
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),
176 *(["-T", cmd] if cmd else []),
181 def ping_vm(arch: Arch): argument
188 *ssh_cmd_args(arch),
189 "-oConnectTimeout=1",
190 "-T",
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]
218 qemu_args = [*arch_args, ("-hda", str(hda))]
221 ("-serial", f"file:{data_dir(arch).joinpath('vm_log')}")
224 qemu_args.append(("-serial", "stdio"))
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)
281 "qemu-img",
283 "-f",
285 "-F",
287 "-b",
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):
324 while (time.time() - start_time) < timeout:
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),
386 "--reset",
391 "--timeout",
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)