From 64f47d1a32c0630407601e6c20494bb330b27e78 Mon Sep 17 00:00:00 2001 From: adlsdztony Date: Tue, 1 Jul 2025 13:20:26 +0000 Subject: [PATCH 1/2] fix: fix proxy setup --- desktop_env/controllers/setup.py | 36 +++++++++++++++---- desktop_env/desktop_env.py | 7 ++-- desktop_env/providers/__init__.py | 10 ++---- desktop_env/providers/aws/manager.py | 2 +- .../5990457f-2adb-467b-a4af-5c857c92d762.json | 3 +- 5 files changed, 37 insertions(+), 21 deletions(-) diff --git a/desktop_env/controllers/setup.py b/desktop_env/controllers/setup.py index 6728370..baac70d 100644 --- a/desktop_env/controllers/setup.py +++ b/desktop_env/controllers/setup.py @@ -59,7 +59,7 @@ class SetupController: { "type": str, corresponding to the `_{:}_setup` methods of this class - "parameters": dick like {str, Any} providing the keyword + "parameters": dict like {str, Any} providing the keyword parameters } """ @@ -368,6 +368,19 @@ class SetupController: Args: client_password (str): Password for sudo operations, defaults to "password" """ + retry = 0 + while retry < MAX_RETRIES: + try: + _ = requests.get(self.http_server + "/terminal") + break + except: + time.sleep(5) + retry += 1 + logger.info(f"retry: {retry}/{MAX_RETRIES}") + + if retry == MAX_RETRIES: + return False + # Get proxy from global proxy pool proxy_pool = get_global_proxy_pool() current_proxy = proxy_pool.get_next_proxy() @@ -380,14 +393,21 @@ class SetupController: proxy_url = proxy_pool._format_proxy_url(current_proxy) logger.info(f"Setting up proxy: {current_proxy.host}:{current_proxy.port}") - # Configure system proxy environment variables + # Configure system proxy environment variables proxy_commands = [ - f"echo '{client_password}' | sudo -S bash -c \"echo 'export http_proxy={proxy_url}' >> /etc/environment\"", - f"echo '{client_password}' | sudo -S bash -c \"echo 'export https_proxy={proxy_url}' >> /etc/environment\"", - f"echo '{client_password}' | sudo -S bash -c \"echo 'export HTTP_PROXY={proxy_url}' >> /etc/environment\"", - f"echo '{client_password}' | sudo -S bash -c \"echo 'export HTTPS_PROXY={proxy_url}' >> /etc/environment\"", + f"echo '{client_password}' | sudo -S bash -c \"apt-get update\"", ## TODO: remove this line if ami is already updated + f"echo '{client_password}' | sudo -S bash -c \"apt-get install -y tinyproxy\"", ## TODO: remove this line if tinyproxy is already installed + f"echo '{client_password}' | sudo -S bash -c \"echo 'Port 18888' > /tmp/tinyproxy.conf\"", + f"echo '{client_password}' | sudo -S bash -c \"echo 'Allow 127.0.0.1' >> /tmp/tinyproxy.conf\"", + f"echo '{client_password}' | sudo -S bash -c \"echo 'Upstream http {current_proxy.username}:{current_proxy.password}@{current_proxy.host}:{current_proxy.port}' >> /tmp/tinyproxy.conf\"", + + # CML commands to set environment variables for proxy + f"echo 'export http_proxy={proxy_url}' >> ~/.bashrc", + f"echo 'export https_proxy={proxy_url}' >> ~/.bashrc", + f"echo 'export HTTP_PROXY={proxy_url}' >> ~/.bashrc", + f"echo 'export HTTPS_PROXY={proxy_url}' >> ~/.bashrc", ] - + # Execute all proxy configuration commands for cmd in proxy_commands: try: @@ -397,6 +417,8 @@ class SetupController: proxy_pool.mark_proxy_failed(current_proxy) raise + self._launch_setup(["tinyproxy -c /tmp/tinyproxy.conf -d"], shell=True) + # Reload environment variables reload_cmd = "source /etc/environment" try: diff --git a/desktop_env/desktop_env.py b/desktop_env/desktop_env.py index 72bea71..72c955c 100644 --- a/desktop_env/desktop_env.py +++ b/desktop_env/desktop_env.py @@ -197,6 +197,9 @@ class DesktopEnv(gym.Env): logger.info("Emulator started.") if task_config is not None: + if task_config.get("proxy", False) and self.enable_proxy: + # If using proxy and proxy is enabled, set up the proxy configuration + self.setup_controller._proxy_setup() self._set_task_info(task_config) self.setup_controller.reset_cache_dir(self.cache_dir) logger.info("Setting up environment...") @@ -214,10 +217,6 @@ class DesktopEnv(gym.Env): break logger.info("Environment setup complete.") - - if task_config.get("proxy", False) and self.enable_proxy: - # If using proxy and proxy is enabled, set up the proxy configuration - self.setup_controller._proxy_setup() observation = self._get_obs() return observation diff --git a/desktop_env/providers/__init__.py b/desktop_env/providers/__init__.py index 792db58..63a07b0 100644 --- a/desktop_env/providers/__init__.py +++ b/desktop_env/providers/__init__.py @@ -21,14 +21,8 @@ def create_vm_manager_and_provider(provider_name: str, region: str, use_proxy: b return VirtualBoxVMManager(), VirtualBoxProvider(region) elif provider_name in ["aws", "amazon web services"]: from desktop_env.providers.aws.manager import AWSVMManager - if use_proxy: - # Use proxy-enabled AWS provider - from desktop_env.providers.aws.provider_with_proxy import AWSProviderWithProxy - return AWSVMManager(proxy_config_file="dataimpulse_proxy_config.json"), AWSProviderWithProxy(region, proxy_config_file="dataimpulse_proxy_config.json") - else: - # Use regular AWS provider - from desktop_env.providers.aws.provider import AWSProvider - return AWSVMManager(), AWSProvider(region) + from desktop_env.providers.aws.provider import AWSProvider + return AWSVMManager(), AWSProvider(region) elif provider_name == "azure": from desktop_env.providers.azure.manager import AzureVMManager from desktop_env.providers.azure.provider import AzureProvider diff --git a/desktop_env/providers/aws/manager.py b/desktop_env/providers/aws/manager.py index bcc89c5..be3dfe4 100644 --- a/desktop_env/providers/aws/manager.py +++ b/desktop_env/providers/aws/manager.py @@ -35,7 +35,7 @@ DEFAULT_REGION = "us-east-1" # todo: Add doc for the configuration of image, security group and network interface # todo: public the AMI images IMAGE_ID_MAP = { - "us-east-1": "ami-025b3f907e5c1b805", + "us-east-1": "ami-0cae20d2680c939d4", "ap-east-1": "ami-0c092a5b8be4116f5", } diff --git a/evaluation_examples/examples/multi_apps/5990457f-2adb-467b-a4af-5c857c92d762.json b/evaluation_examples/examples/multi_apps/5990457f-2adb-467b-a4af-5c857c92d762.json index 7bf0404..6a3e3de 100644 --- a/evaluation_examples/examples/multi_apps/5990457f-2adb-467b-a4af-5c857c92d762.json +++ b/evaluation_examples/examples/multi_apps/5990457f-2adb-467b-a4af-5c857c92d762.json @@ -9,6 +9,7 @@ "parameters": { "command": [ "google-chrome", + "--proxy-server=http://127.0.0.1:18888", "--remote-debugging-port=1337" ] } @@ -104,5 +105,5 @@ "ignore_case": true } }, - "proxy": false + "proxy": true } \ No newline at end of file From 2f9ae1f3adc844cb7eeb01ae4d2b08f416fd6c9d Mon Sep 17 00:00:00 2001 From: adlsdztony Date: Tue, 1 Jul 2025 13:47:16 +0000 Subject: [PATCH 2/2] feat&fix: add proxy support in setup and remove hardcoded proxy from example --- desktop_env/controllers/setup.py | 7 ++++++- desktop_env/desktop_env.py | 2 +- .../multi_apps/5990457f-2adb-467b-a4af-5c857c92d762.json | 1 - 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/desktop_env/controllers/setup.py b/desktop_env/controllers/setup.py index baac70d..4dd5eaf 100644 --- a/desktop_env/controllers/setup.py +++ b/desktop_env/controllers/setup.py @@ -47,11 +47,12 @@ class SetupController: self.http_server: str = f"http://{vm_ip}:{server_port}" self.http_server_setup_root: str = f"http://{vm_ip}:{server_port}/setup" self.cache_dir: str = cache_dir + self.use_proxy: bool = False def reset_cache_dir(self, cache_dir: str): self.cache_dir = cache_dir - def setup(self, config: List[Dict[str, Any]])-> bool: + def setup(self, config: List[Dict[str, Any]], use_proxy: bool = False)-> bool: """ Args: config (List[Dict[str, Any]]): list of dict like {str: Any}. each @@ -63,6 +64,7 @@ class SetupController: parameters } """ + self.use_proxy = use_proxy # make sure connection can be established logger.info(f"try to connect {self.http_server}") retry = 0 @@ -237,6 +239,9 @@ class SetupController: if not shell and isinstance(command, str) and len(command.split()) > 1: logger.warning("Command should be a list of strings. Now it is a string. Will split it by space.") command = command.split() + + if command[0] == "google-chrome" and self.use_proxy: + command.append("--proxy-server=http://127.0.0.1:18888") # Use the proxy server set up by _proxy_setup payload = json.dumps({"command": command, "shell": shell}) headers = {"Content-Type": "application/json"} diff --git a/desktop_env/desktop_env.py b/desktop_env/desktop_env.py index 72c955c..c7d53f1 100644 --- a/desktop_env/desktop_env.py +++ b/desktop_env/desktop_env.py @@ -203,7 +203,7 @@ class DesktopEnv(gym.Env): self._set_task_info(task_config) self.setup_controller.reset_cache_dir(self.cache_dir) logger.info("Setting up environment...") - success = self.setup_controller.setup(self.config) + success = self.setup_controller.setup(self.config, task_config.get("proxy", False) and self.enable_proxy) if success: break else: diff --git a/evaluation_examples/examples/multi_apps/5990457f-2adb-467b-a4af-5c857c92d762.json b/evaluation_examples/examples/multi_apps/5990457f-2adb-467b-a4af-5c857c92d762.json index 6a3e3de..695a9d2 100644 --- a/evaluation_examples/examples/multi_apps/5990457f-2adb-467b-a4af-5c857c92d762.json +++ b/evaluation_examples/examples/multi_apps/5990457f-2adb-467b-a4af-5c857c92d762.json @@ -9,7 +9,6 @@ "parameters": { "command": [ "google-chrome", - "--proxy-server=http://127.0.0.1:18888", "--remote-debugging-port=1337" ] }