's'
This commit is contained in:
@@ -4,8 +4,10 @@ import argparse
|
||||
import os
|
||||
import re
|
||||
import shlex
|
||||
import socket
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
|
||||
import tools.compat as compat
|
||||
from tools.helper import bcolors, print_color
|
||||
@@ -181,6 +183,18 @@ def quote_cmd(args):
|
||||
return " ".join(shlex.quote(part) for part in args)
|
||||
|
||||
|
||||
def wait_tcp_port(host, port, timeout_sec, interval=1.0):
|
||||
"""Return True once TCP connect succeeds, False on timeout."""
|
||||
deadline = time.monotonic() + timeout_sec
|
||||
while time.monotonic() < deadline:
|
||||
try:
|
||||
with socket.create_connection((host, port), timeout=2.0):
|
||||
return True
|
||||
except OSError:
|
||||
time.sleep(interval)
|
||||
return False
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Launch a redroid container with a tested native bridge configuration."
|
||||
@@ -276,6 +290,16 @@ def main():
|
||||
action="store_true",
|
||||
help="Skip compatibility messages and docker/podman probe (still resolves --gpu-mode auto from DRI)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--wait-tcp",
|
||||
type=int,
|
||||
default=0,
|
||||
metavar="SEC",
|
||||
help=(
|
||||
"After start, wait up to SEC seconds for 127.0.0.1:PORT to accept TCP (Android adbd). "
|
||||
"If it never opens, print container logs. Use 90 when debugging failed adb connect."
|
||||
),
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
image = args.image
|
||||
@@ -365,7 +389,31 @@ def main():
|
||||
|
||||
subprocess.run(cmd, check=True)
|
||||
print_color("Container started as {}".format(name), bcolors.GREEN)
|
||||
if args.wait_tcp > 0:
|
||||
print_color(
|
||||
"Waiting up to {}s for 127.0.0.1:{} (adbd TCP) ...".format(args.wait_tcp, args.port),
|
||||
bcolors.GREEN,
|
||||
)
|
||||
if not wait_tcp_port("127.0.0.1", args.port, args.wait_tcp):
|
||||
print_color(
|
||||
"Port {} never opened. Common with androidboot.redroid_gpu_mode=host when EGL/GPU fails inside "
|
||||
"the guest — try: python run_redroid.py ... --gpu-mode guest (and drop DRI if needed).".format(
|
||||
args.port
|
||||
),
|
||||
bcolors.RED,
|
||||
)
|
||||
print_color("Last logs from container {!r}:".format(name), bcolors.YELLOW)
|
||||
subprocess.run([args.container, "logs", "--tail", "100", name], check=False)
|
||||
print(
|
||||
"\nIf the container already exited with --rm, logs are gone; re-run with "
|
||||
"--keep-container (no --rm) to capture docker logs after a crash."
|
||||
)
|
||||
print("ADB: adb connect 127.0.0.1:{}".format(args.port))
|
||||
if effective_gpu_mode == "host":
|
||||
print(
|
||||
"Note: host GPU mode can prevent full boot; if connect fails, use --gpu-mode guest or "
|
||||
"--wait-tcp 90 to diagnose."
|
||||
)
|
||||
if not args.adb_insecure:
|
||||
print(
|
||||
"If the device shows as unauthorized, stop the container and re-run with --adb-insecure "
|
||||
|
||||
Reference in New Issue
Block a user