From 8abbd7ab5a003410d9c78dbcbd18ea6b42acab5a Mon Sep 17 00:00:00 2001 From: mamani828 Date: Tue, 3 Jun 2025 17:51:34 -0700 Subject: [PATCH] fixes --- erl_toolkit/docker/run_docker.py | 62 ++++++++++++++++++++++++++++++++ setup.py | 1 + 2 files changed, 63 insertions(+) create mode 100644 erl_toolkit/docker/run_docker.py diff --git a/erl_toolkit/docker/run_docker.py b/erl_toolkit/docker/run_docker.py new file mode 100644 index 0000000..b4b6d0a --- /dev/null +++ b/erl_toolkit/docker/run_docker.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 +#run_docker +import argparse +import os +import socket +import sys + +def build_docker_run_cmd(image: str) -> str: + script_dir = os.path.dirname(os.path.realpath(__file__)) + home_dir = os.path.abspath(os.path.join(script_dir, os.pardir)) + + xauth = os.path.join(home_dir, ".Xauthority") + if not os.path.isdir(home_dir): + print(f"[ERROR] Could not find home directory '{home_dir}'.", file=sys.stderr) + sys.exit(1) + if not os.path.isfile(xauth): + print(f"[WARNING] XAUTHORITY file '{xauth}' does not exist. Continuing anyway...", file=sys.stderr) + + display = os.environ.get("DISPLAY", "") + ros_master = os.environ.get("ROS_MASTER_URI", "http://localhost:11311") + ros_host = os.environ.get("ROS_HOSTNAME", "localhost") + + ros_cache = os.path.join(home_dir, ".ros") + os.makedirs(ros_cache, exist_ok=True) + + cmd_parts = [ + "docker run -it", + "--network host", + f"-e HOME={home_dir}", + f"-e ROS_HOME={ros_cache}", + f"-e DISPLAY={display}", + f"-e XAUTHORITY={xauth}", + f"-e ROS_MASTER_URI={ros_master}", + f"-e ROS_HOSTNAME={ros_host}", + f"-v {home_dir}:{home_dir}", + f"-v /etc/passwd:/etc/passwd:ro", + f"-v /etc/group:/etc/group:ro", + f"-v {xauth}:{xauth}:ro", + f"-v {ros_cache}:{ros_cache}", + "-v /tmp/.X11-unix:/tmp/.X11-unix:ro", + image + ] + return " \\\n ".join(cmd_parts) + +def main(): + parser = argparse.ArgumentParser( + description="Run a docker" + ) + parser.add_argument( + "--image", + "-i", + type=str, + required=True, + help="Docker image." + ) + args = parser.parse_args() + run_cmd = build_docker_run_cmd(args.image) + print(f"[INFO] Running:\n\n{run_cmd}\n") + os.system(run_cmd) + +if __name__ == "__main__": + main() diff --git a/setup.py b/setup.py index 80638ae..43c287e 100644 --- a/setup.py +++ b/setup.py @@ -24,6 +24,7 @@ f"erl-docker-create-container={pkg_name}.docker.create_container:main", f"erl-docker-login-container={pkg_name}.docker.login_container:main", f"erl-docker-build-images={pkg_name}.docker.build_images:main", + f"erl-docker-run-docker={pkg_name}.docker.run_docker:main", f"erl-docker-clean-docker={pkg_name}.docker.clean_docker:main", f"erl-archlinux-ros-noetic-install={pkg_name}.archlinux.ros_noetic.install:main", f"erl-archlinux-paru-helper={pkg_name}.archlinux.paru_helper:main",