colo-node-onacquire.sh 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #!/usr/bin/env bash
  2. # These variable must be set before the main body is called
  3. SOLANA_LOCK_FILE="${SOLANA_LOCK_FILE:?}"
  4. INSTANCE_NAME="${INSTANCE_NAME:?}"
  5. PREEMPTIBLE="${PREEMPTIBLE:?}"
  6. SSH_AUTHORIZED_KEYS="${SSH_AUTHORIZED_KEYS:?}"
  7. SSH_PRIVATE_KEY_TEXT="${SSH_PRIVATE_KEY_TEXT:?}"
  8. SSH_PUBLIC_KEY_TEXT="${SSH_PUBLIC_KEY_TEXT:?}"
  9. NETWORK_INFO="${NETWORK_INFO:-"Network info unavailable"}"
  10. CREATION_INFO="${CREATION_INFO:-"Creation info unavailable"}"
  11. if [[ ! -f "${SOLANA_LOCK_FILE}" ]]; then
  12. exec 9>>"${SOLANA_LOCK_FILE}"
  13. flock -x -n 9 || ( echo "Failed to acquire lock!" 1>&2 && exit 1 )
  14. SOLANA_USER="${SOLANA_USER:?"SOLANA_USER undefined"}"
  15. {
  16. echo "export SOLANA_LOCK_USER=${SOLANA_USER}"
  17. echo "export SOLANA_LOCK_INSTANCENAME=${INSTANCE_NAME}"
  18. echo "export PREEMPTIBLE=${PREEMPTIBLE}"
  19. echo "[[ -v SSH_TTY && -f \"${HOME}/.solana-motd\" ]] && cat \"${HOME}/.solana-motd\" 1>&2"
  20. } >&9
  21. exec 9>&-
  22. cat > /solana-scratch/id_ecdsa <<EOF
  23. ${SSH_PRIVATE_KEY_TEXT}
  24. EOF
  25. cat > /solana-scratch/id_ecdsa.pub <<EOF
  26. ${SSH_PUBLIC_KEY_TEXT}
  27. EOF
  28. chmod 0600 /solana-scratch/id_ecdsa
  29. cat > /solana-scratch/authorized_keys <<EOF
  30. ${SSH_AUTHORIZED_KEYS}
  31. ${SSH_PUBLIC_KEY_TEXT}
  32. EOF
  33. cp /solana-scratch/id_ecdsa "${HOME}/.ssh/id_ecdsa"
  34. cp /solana-scratch/id_ecdsa.pub "${HOME}/.ssh/id_ecdsa.pub"
  35. cp /solana-scratch/authorized_keys "${HOME}/.ssh/authorized_keys"
  36. cat > "${HOME}/.solana-motd" <<EOF
  37. ${NETWORK_INFO}
  38. ${CREATION_INFO}
  39. EOF
  40. # Stamp creation MUST be last!
  41. touch /solana-scratch/.instance-startup-complete
  42. else
  43. # shellcheck disable=SC1090
  44. exec 9<"${SOLANA_LOCK_FILE}" && flock -s 9 && . "${SOLANA_LOCK_FILE}" && exec 9>&-
  45. echo "${INSTANCE_NAME} candidate is already ${SOLANA_LOCK_INSTANCENAME}" 1>&2
  46. false
  47. fi