satlab: fix ATE container startup on ChromeOS Satlab hosts

On ChromeOS Satlab hosts (such as puff-moblab), /var/docker/data is
mounted with noexec, so Docker local volumes (ate_tmp and tf_res)
inherit the noexec mount flag inside containers. Additionally,
bind-mounting /dev:/dev alongside tty: true on ate-tradefed shadows the
container's /dev/console PTY with the headless ChromeOS host's
/dev/console, causing runc container init to fail with 'open
/dev/console: no such device'.

- Invoke ate_labserver_entrypoint.sh via /bin/bash in ate-labserver and
  remount /tmp/cloud-ate-shared and /usr/local/google/mobileharness/ate
  with exec on container startup.
- Add ate_tradefed_entrypoint.sh (staged via conf_creator and invoked
  via /bin/bash in ate-tradefed) to remount /tmp/cloud-ate-shared and
  /tradefed with exec before executing /tradefed/tradefed_host_up.sh.
- Remove the redundant /dev:/dev bind mount from ate-tradefed (which
  already runs with privileged: true) so tty: true allocates a valid
  container PTY at /dev/console and keeps Tradefed in interactive
  console mode.
- Set --logger_console_handler_min_log_record_importance=150 on
  ate-labserver to match the ATS container console log threshold.

BUG=b:577050425
TEST=Verified ate-labserver and ate-tradefed on Satlab 100.64.229.27
TAG=agy
CONV=4cc6cd29-7648-4dde-b6c9-0128df922502
Change-Id: I88e8cee27aed067710912bb68cd6d25a306ac6b6
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/satlab/+/8802187
Reviewed-by: Przemysław Filipek <filipek@google.com>
Tested-by: Rafał Gaweł <rafalgawel@google.com>
Commit-Queue: chromeos-auto-runner@chromeos-bot.iam.gserviceaccount.com <chromeos-auto-runner@chromeos-bot.iam.gserviceaccount.com>
Commit-Queue: Rafał Gaweł <rafalgawel@google.com>
diff --git a/src/dockerfiles/compose/docker-compose.yaml b/src/dockerfiles/compose/docker-compose.yaml
index 7fffa52..874efba 100644
--- a/src/dockerfiles/compose/docker-compose.yaml
+++ b/src/dockerfiles/compose/docker-compose.yaml
@@ -383,6 +383,7 @@
       [
         '/tini',
         '--',
+        '/bin/bash',
         '/tmp/cloud-ate-shared/ate_labserver_entrypoint.sh'
       ]
     command:
@@ -404,7 +405,8 @@
         '--android_desktop_executor_devices_num=${EXECUTOR_DEVICES_NUM:-7}',
         '--android_desktop_executor_group=${DRONE_HOSTNAME}',
         '--nodetect_adb_device',
-        '--enable_builtin_credential_file_percentage=100'
+        '--enable_builtin_credential_file_percentage=100',
+        '--logger_console_handler_min_log_record_importance=150'
       ]
     environment:
       - UFS_NAMESPACE=${UFS_NAMESPACE:-os}
@@ -433,6 +435,13 @@
     privileged: true
     tty: true
     stdin_open: true
+    entrypoint:
+      [
+        '/tini',
+        '--',
+        '/bin/bash',
+        '/tmp/cloud-ate-shared/ate_tradefed_entrypoint.sh'
+      ]
     environment:
       - CLUSTER=al-ate-prod
       - ADB_REJECT_KILL_SERVER=1
@@ -448,7 +457,6 @@
       - ate_tmp:/tmp/cloud-ate-shared:rw
       - tf_res:/tradefed:rw
       - satlab_keys:/creds/service_accounts:rw
-      - /dev:/dev
     depends_on:
       - ate-labserver
   ###########################################################################labservice
diff --git a/src/dockerfiles/conf_creator/Dockerfile b/src/dockerfiles/conf_creator/Dockerfile
index 2c6a27d..bed6fc7 100644
--- a/src/dockerfiles/conf_creator/Dockerfile
+++ b/src/dockerfiles/conf_creator/Dockerfile
@@ -21,8 +21,9 @@
 # Copy ATE configuration and entrypoint files into this image.
 COPY dockerfiles/conf_creator/conf/al_ate_mh_device_config .
 COPY dockerfiles/conf_creator/conf/ate_labserver_entrypoint.sh .
+COPY dockerfiles/conf_creator/conf/ate_tradefed_entrypoint.sh .
 
 COPY  dockerfiles/conf_creator/override-env.sh .
-RUN chmod a+x override-env.sh ate_labserver_entrypoint.sh
+RUN chmod a+x override-env.sh ate_labserver_entrypoint.sh ate_tradefed_entrypoint.sh
 # Overrides the GCS bucket from env variable.
 ENTRYPOINT ["/root/override-env.sh"]
diff --git a/src/dockerfiles/conf_creator/conf/ate_labserver_entrypoint.sh b/src/dockerfiles/conf_creator/conf/ate_labserver_entrypoint.sh
index 009737f..2ba7e7f 100755
--- a/src/dockerfiles/conf_creator/conf/ate_labserver_entrypoint.sh
+++ b/src/dockerfiles/conf_creator/conf/ate_labserver_entrypoint.sh
@@ -5,13 +5,15 @@
 
 set -e
 
-if ! command -v socat >/dev/null 2>&1; then
-  { cat ~/passwd 2>/dev/null || true; } | sudo -S sh -e -c '
+{ cat ~/passwd 2>/dev/null || true; } | sudo -S sh -e -c '
+  mount -o remount,exec /tmp/cloud-ate-shared
+  mount -o remount,exec /usr/local/google/mobileharness/ate
+  if ! command -v socat >/dev/null 2>&1; then
     apt-get install -y --no-install-recommends socat || (
       apt-get update && apt-get install -y --no-install-recommends socat
     )
-  '
-fi
+  fi
+'
 
 # Forward localhost:1485 (IPv4 and IPv6) to labservice:1485 for dt-converter
 # and foil-provision running inside the shared ate-labserver network namespace.
diff --git a/src/dockerfiles/conf_creator/conf/ate_tradefed_entrypoint.sh b/src/dockerfiles/conf_creator/conf/ate_tradefed_entrypoint.sh
new file mode 100755
index 0000000..9c88257
--- /dev/null
+++ b/src/dockerfiles/conf_creator/conf/ate_tradefed_entrypoint.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+# Copyright 2026 The ChromiumOS Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+set -e
+
+{ cat ~/passwd 2>/dev/null || true; } | sudo -S sh -e -c '
+  mount -o remount,exec /tmp/cloud-ate-shared
+  mount -o remount,exec /tradefed
+'
+
+exec /tradefed/tradefed_host_up.sh "$@"
diff --git a/src/dockerfiles/conf_creator/override-env.sh b/src/dockerfiles/conf_creator/override-env.sh
index c7c0377..5f0001d 100644
--- a/src/dockerfiles/conf_creator/override-env.sh
+++ b/src/dockerfiles/conf_creator/override-env.sh
@@ -3,5 +3,5 @@
 
 envsubst '${DOCKER_GCS_IMAGE_STORAGE_SERVER}' < /root/nginx.conf > /mnt/conf/nginx/nginx.conf
 chmod 1777 /mnt/conf/ate
-cp -f /root/al_ate_mh_device_config /root/ate_labserver_entrypoint.sh /mnt/conf/ate/
+cp -f /root/al_ate_mh_device_config /root/ate_labserver_entrypoint.sh /root/ate_tradefed_entrypoint.sh /mnt/conf/ate/
 exec "$@"