dw 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. #!/bin/bash
  2. #
  3. # Dune Weaver CLI
  4. #
  5. # Usage: dw <command>
  6. #
  7. # Commands:
  8. # install Run initial setup (Docker + WiFi fix)
  9. # start Start Dune Weaver
  10. # stop Stop Dune Weaver
  11. # restart Restart Dune Weaver
  12. # update Pull latest changes and restart
  13. # logs View live logs (Ctrl+C to exit)
  14. # status Show container status
  15. # shell Open a shell in the container
  16. # help Show this help message
  17. #
  18. set -e
  19. # Colors
  20. RED='\033[0;31m'
  21. GREEN='\033[0;32m'
  22. YELLOW='\033[1;33m'
  23. BLUE='\033[0;34m'
  24. NC='\033[0m'
  25. # Find dune-weaver directory
  26. find_install_dir() {
  27. # Check common locations
  28. if [[ -f "$HOME/dune-weaver/main.py" ]]; then
  29. echo "$HOME/dune-weaver"
  30. elif [[ -f "/home/pi/dune-weaver/main.py" ]]; then
  31. echo "/home/pi/dune-weaver"
  32. elif [[ -f "./main.py" ]]; then
  33. pwd
  34. else
  35. echo ""
  36. fi
  37. }
  38. # Check if using Docker or systemd
  39. is_docker_mode() {
  40. [[ -f "$INSTALL_DIR/docker-compose.yml" ]] && command -v docker &> /dev/null && docker compose ps &> /dev/null
  41. }
  42. INSTALL_DIR=$(find_install_dir)
  43. # Check if installed
  44. check_installed() {
  45. if [[ -z "$INSTALL_DIR" ]]; then
  46. echo -e "${RED}Error: Dune Weaver not found${NC}"
  47. echo ""
  48. echo "Please install first:"
  49. echo " git clone https://github.com/tuanchris/dune-weaver --single-branch"
  50. echo " cd dune-weaver"
  51. echo " dw install"
  52. exit 1
  53. fi
  54. }
  55. # Commands
  56. cmd_install() {
  57. if [[ -z "$INSTALL_DIR" ]]; then
  58. # Not installed, check if we're in the right directory
  59. if [[ -f "./docker-compose.yml" ]] && [[ -f "./main.py" ]]; then
  60. INSTALL_DIR=$(pwd)
  61. else
  62. echo -e "${RED}Error: Run this from the dune-weaver directory${NC}"
  63. echo ""
  64. echo " git clone https://github.com/tuanchris/dune-weaver --single-branch"
  65. echo " cd dune-weaver"
  66. echo " dw install"
  67. exit 1
  68. fi
  69. fi
  70. cd "$INSTALL_DIR"
  71. bash setup-pi.sh "$@"
  72. }
  73. cmd_start() {
  74. check_installed
  75. echo -e "${BLUE}Starting Dune Weaver...${NC}"
  76. cd "$INSTALL_DIR"
  77. if is_docker_mode; then
  78. docker compose up -d
  79. else
  80. sudo systemctl start dune-weaver
  81. fi
  82. echo -e "${GREEN}Started!${NC} Access at http://$(hostname -I | awk '{print $1}'):8080"
  83. }
  84. cmd_stop() {
  85. check_installed
  86. echo -e "${BLUE}Stopping Dune Weaver...${NC}"
  87. cd "$INSTALL_DIR"
  88. if is_docker_mode; then
  89. docker compose down
  90. else
  91. sudo systemctl stop dune-weaver
  92. fi
  93. echo -e "${GREEN}Stopped${NC}"
  94. }
  95. cmd_restart() {
  96. check_installed
  97. echo -e "${BLUE}Restarting Dune Weaver...${NC}"
  98. cd "$INSTALL_DIR"
  99. if is_docker_mode; then
  100. docker compose restart
  101. else
  102. sudo systemctl restart dune-weaver
  103. fi
  104. echo -e "${GREEN}Restarted${NC}"
  105. }
  106. cmd_update() {
  107. check_installed
  108. echo -e "${BLUE}Updating Dune Weaver...${NC}"
  109. cd "$INSTALL_DIR"
  110. echo "Pulling latest code..."
  111. git pull
  112. if is_docker_mode; then
  113. echo "Pulling latest Docker image..."
  114. docker compose pull
  115. echo "Restarting with new version..."
  116. docker compose up -d
  117. else
  118. echo "Updating Python dependencies..."
  119. source .venv/bin/activate
  120. pip install -r requirements.txt
  121. echo "Restarting service..."
  122. sudo systemctl restart dune-weaver
  123. fi
  124. echo -e "${GREEN}Updated!${NC}"
  125. }
  126. cmd_logs() {
  127. check_installed
  128. cd "$INSTALL_DIR"
  129. if is_docker_mode; then
  130. docker compose logs -f
  131. else
  132. sudo journalctl -u dune-weaver -f
  133. fi
  134. }
  135. cmd_status() {
  136. check_installed
  137. cd "$INSTALL_DIR"
  138. if is_docker_mode; then
  139. docker compose ps
  140. else
  141. sudo systemctl status dune-weaver
  142. fi
  143. }
  144. cmd_shell() {
  145. check_installed
  146. cd "$INSTALL_DIR"
  147. if is_docker_mode; then
  148. docker compose exec dune-weaver /bin/bash
  149. else
  150. echo -e "${YELLOW}Shell not available in systemd mode${NC}"
  151. echo "Use: cd $INSTALL_DIR && source .venv/bin/activate"
  152. fi
  153. }
  154. cmd_help() {
  155. echo -e "${GREEN}Dune Weaver CLI${NC}"
  156. echo ""
  157. echo "Usage: dw <command>"
  158. echo ""
  159. echo "Commands:"
  160. echo " install Run initial setup (Docker + WiFi fix)"
  161. echo " start Start Dune Weaver"
  162. echo " stop Stop Dune Weaver"
  163. echo " restart Restart Dune Weaver"
  164. echo " update Pull latest changes and restart"
  165. echo " logs View live logs (Ctrl+C to exit)"
  166. echo " status Show container status"
  167. echo " shell Open a shell in the container"
  168. echo " help Show this help message"
  169. echo ""
  170. if [[ -n "$INSTALL_DIR" ]]; then
  171. echo -e "Install directory: ${BLUE}$INSTALL_DIR${NC}"
  172. fi
  173. }
  174. # Main
  175. case "${1:-help}" in
  176. install)
  177. shift
  178. cmd_install "$@"
  179. ;;
  180. start)
  181. cmd_start
  182. ;;
  183. stop)
  184. cmd_stop
  185. ;;
  186. restart)
  187. cmd_restart
  188. ;;
  189. update)
  190. cmd_update
  191. ;;
  192. logs)
  193. cmd_logs
  194. ;;
  195. status)
  196. cmd_status
  197. ;;
  198. shell)
  199. cmd_shell
  200. ;;
  201. help|--help|-h)
  202. cmd_help
  203. ;;
  204. *)
  205. echo -e "${RED}Unknown command: $1${NC}"
  206. echo ""
  207. cmd_help
  208. exit 1
  209. ;;
  210. esac