docker-setup.sh 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #!/usr/bin/env bash
  2. # setup.sh
  3. # Installer for Retro AIM Server Docker Setup
  4. set -e
  5. #
  6. # boiler plate
  7. #
  8. RED='\033[0;31m'
  9. GREEN='\033[0;32m'
  10. YELLOW='\033[1;33m'
  11. CYAN='\033[0;36m'
  12. NC='\033[0m'
  13. log() { echo -e "${CYAN}[*] $1${NC}"; }
  14. success(){ echo -e "${GREEN}[✔] $1${NC}"; }
  15. warn() { echo -e "${YELLOW}[!] $1${NC}"; }
  16. error() { echo -e "${RED}[✖] $1${NC}"; exit 1; }
  17. check_prereqs() {
  18. log "Checking for required tools..."
  19. for cmd in git docker make; do
  20. if ! command -v $cmd &> /dev/null; then
  21. error "Missing required command: $cmd"
  22. fi
  23. done
  24. success "All prerequisites are installed."
  25. }
  26. clone_repo() {
  27. if [ -d "retro-aim-server" ]; then
  28. warn "Directory 'retro-aim-server' already exists. Skipping clone."
  29. else
  30. log "Cloning Retro AIM Server repository..."
  31. git clone https://github.com/mk6i/retro-aim-server.git || error "Failed to clone repository"
  32. fi
  33. cd retro-aim-server || error "Failed to enter repo directory"
  34. success "Repository ready."
  35. }
  36. build_images() {
  37. log "Building Docker images..."
  38. make docker-images || error "Docker image build failed"
  39. success "Docker images built successfully."
  40. }
  41. setup_ssl_cert() {
  42. read -rp "$(echo -e ${YELLOW}"Enter the OSCAR_HOST (e.g., ras.dev): "${NC})" OSCAR_HOST < /dev/tty
  43. if [ -z "$OSCAR_HOST" ]; then
  44. error "OSCAR_HOST is required"
  45. fi
  46. log "SSL certificate options:"
  47. echo -e "${YELLOW}1) Generate self-signed certificate"
  48. echo -e "2) Use existing PEM certificate at certs/server.pem${NC}"
  49. read -rp "$(echo -e ${CYAN}"Choose an option [1/2]: "${NC})" cert_choice < /dev/tty
  50. if [ "$cert_choice" == "1" ]; then
  51. log "Generating self-signed SSL certificate for $OSCAR_HOST..."
  52. make docker-cert OSCAR_HOST="$OSCAR_HOST" || error "Failed to generate self-signed cert"
  53. success "Self-signed certificate generated."
  54. elif [ "$cert_choice" == "2" ]; then
  55. if [ ! -f "certs/server.pem" ]; then
  56. error "certs/server.pem not found. Please place your PEM file there and rerun."
  57. fi
  58. success "Using existing certificate at certs/server.pem."
  59. else
  60. error "Invalid option for certificate setup."
  61. fi
  62. }
  63. generate_nss() {
  64. log "Generating NSS certificate database..."
  65. make docker-nss || error "Failed to generate NSS cert DB"
  66. success "NSS certificate database created at certs/nss/"
  67. }
  68. start_server() {
  69. log "Starting Retro AIM Server with hostname $OSCAR_HOST..."
  70. make docker-run-bg OSCAR_HOST="$OSCAR_HOST" || error "Failed to start server"
  71. success "Retro AIM Server is running."
  72. }
  73. final_steps() {
  74. echo -e "${GREEN}
  75. Retro AIM Server setup complete!
  76. ===================================
  77. Next Steps:
  78. 1. Copy the NSS certs from 'certs/nss/' to each AIM 6.2+ client.
  79. 2. Ensure clients can resolve '${OSCAR_HOST}' to your server IP.
  80. Add the following to each client's hosts file if DNS isn't used:
  81. ${NC}
  82. ${YELLOW}127.0.0.1 $OSCAR_HOST${NC}
  83. ${GREEN}
  84. 3. For AIM 6.x client setup instructions, see:
  85. https://github.com/mk6i/retro-aim-server/blob/main/docs/AIM6.md#aim-6265312-setup
  86. Enjoy!
  87. ${NC}"
  88. }
  89. main() {
  90. check_prereqs
  91. clone_repo
  92. build_images
  93. setup_ssl_cert
  94. generate_nss
  95. start_server
  96. final_steps
  97. }
  98. main "$@"