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 "$@"