entrypoint.sh 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/bin/bash
  2. set -eo pipefail
  3. echo "Starting OpenHands..."
  4. if [[ $NO_SETUP == "true" ]]; then
  5. echo "Skipping setup, running as $(whoami)"
  6. "$@"
  7. exit 0
  8. fi
  9. if [ "$(id -u)" -ne 0 ]; then
  10. echo "The OpenHands entrypoint.sh must run as root"
  11. exit 1
  12. fi
  13. if [ -z "$SANDBOX_USER_ID" ]; then
  14. echo "SANDBOX_USER_ID is not set"
  15. exit 1
  16. fi
  17. if [ -z "$WORKSPACE_MOUNT_PATH" ]; then
  18. # This is set to /opt/workspace in the Dockerfile. But if the user isn't mounting, we want to unset it so that OpenHands doesn't mount at all
  19. unset WORKSPACE_BASE
  20. fi
  21. if [[ "$SANDBOX_USER_ID" -eq 0 ]]; then
  22. echo "Running OpenHands as root"
  23. export RUN_AS_OPENHANDS=false
  24. mkdir -p /root/.cache/ms-playwright/
  25. if [ -d "/home/openhands/.cache/ms-playwright/" ]; then
  26. mv /home/openhands/.cache/ms-playwright/ /root/.cache/
  27. fi
  28. "$@"
  29. else
  30. echo "Setting up enduser with id $SANDBOX_USER_ID"
  31. if id "enduser" &>/dev/null; then
  32. echo "User enduser already exists. Skipping creation."
  33. else
  34. if ! useradd -l -m -u $SANDBOX_USER_ID -s /bin/bash enduser; then
  35. echo "Failed to create user enduser with id $SANDBOX_USER_ID. Moving openhands user."
  36. incremented_id=$(($SANDBOX_USER_ID + 1))
  37. usermod -u $incremented_id openhands
  38. if ! useradd -l -m -u $SANDBOX_USER_ID -s /bin/bash enduser; then
  39. echo "Failed to create user enduser with id $SANDBOX_USER_ID for a second time. Exiting."
  40. exit 1
  41. fi
  42. fi
  43. fi
  44. usermod -aG app enduser
  45. # get the user group of /var/run/docker.sock and set openhands to that group
  46. DOCKER_SOCKET_GID=$(stat -c '%g' /var/run/docker.sock)
  47. echo "Docker socket group id: $DOCKER_SOCKET_GID"
  48. if getent group $DOCKER_SOCKET_GID; then
  49. echo "Group with id $DOCKER_SOCKET_GID already exists"
  50. else
  51. echo "Creating group with id $DOCKER_SOCKET_GID"
  52. groupadd -g $DOCKER_SOCKET_GID docker
  53. fi
  54. mkdir -p /home/enduser/.cache/huggingface/hub/
  55. mkdir -p /home/enduser/.cache/ms-playwright/
  56. if [ -d "/home/openhands/.cache/ms-playwright/" ]; then
  57. mv /home/openhands/.cache/ms-playwright/ /home/enduser/.cache/
  58. fi
  59. usermod -aG $DOCKER_SOCKET_GID enduser
  60. echo "Running as enduser"
  61. su enduser /bin/bash -c "${*@Q}" # This magically runs any arguments passed to the script as a command
  62. fi