110 lines
5.1 KiB
Bash
Executable File
110 lines
5.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# skyweave_deploy.sh - Deploy Skyweave API framework
|
|
|
|
# --- Repository and Local Paths ---
|
|
LOCAL_REPO_ROOT="."
|
|
LOCAL_CGI_SCRIPT_RELPATH="cgi_scripts/skyweave.lua"
|
|
LOCAL_SKYWEAVE_MODULE_DIR_RELPATH="skyweave"
|
|
LOCAL_JSON_LIB_RELPATH="lib/json.lua"
|
|
|
|
# --- Remote Target Paths ---
|
|
REMOTE_BASE_DIR="/usr/lib/lua"
|
|
REMOTE_CGI_SCRIPT="/www/cgi-bin/skyweave.lua"
|
|
REMOTE_SKYWEAVE_MODULE_DIR="${REMOTE_BASE_DIR}/skyweave"
|
|
REMOTE_JSON_LIB="${REMOTE_BASE_DIR}/json.lua"
|
|
REMOTE_CGI_DIR="/www/cgi-bin"
|
|
|
|
# --- User-configurable settings ---
|
|
SSH_ALIAS="roof-unit"
|
|
ROOF_IP="192.168.10.254"
|
|
REMOTE_HTTP_PORT="${1:-42069}" # Use first script arg for port, or default
|
|
SCP_FLAG_O="-O -o LogLevel=ERROR" # For legacy SCP mode if needed by server
|
|
|
|
# Colors
|
|
GREEN='\033[0;32m'; RED='\033[0;31m'; YELLOW='\033[0;33m'; NC='\033[0m'
|
|
|
|
echo -e "${YELLOW}Starting Skyweave framework deployment to ${SSH_ALIAS}...${NC}"
|
|
echo -e "${YELLOW}(Ensure '${SSH_ALIAS}' is correctly configured in your ~/.ssh/config)${NC}"
|
|
echo ""
|
|
|
|
# === 1. Check Local Source Files and Directories ===
|
|
echo -e "${YELLOW}Checking local source files and directories...${NC}"
|
|
if [ ! -f "${LOCAL_REPO_ROOT}/${LOCAL_CGI_SCRIPT_RELPATH}" ]; then
|
|
echo -e "${RED}Error: Local CGI script ${LOCAL_REPO_ROOT}/${LOCAL_CGI_SCRIPT_RELPATH} not found!${NC}"
|
|
exit 1
|
|
fi
|
|
if [ ! -d "${LOCAL_REPO_ROOT}/${LOCAL_SKYWEAVE_MODULE_DIR_RELPATH}" ]; then
|
|
echo -e "${RED}Error: Local Skyweave module directory ${LOCAL_REPO_ROOT}/${LOCAL_SKYWEAVE_MODULE_DIR_RELPATH} not found!${NC}"
|
|
exit 1
|
|
fi
|
|
if [ ! -f "${LOCAL_REPO_ROOT}/${LOCAL_JSON_LIB_RELPATH}" ]; then
|
|
echo -e "${RED}Error: Local json.lua library ${LOCAL_REPO_ROOT}/${LOCAL_JSON_LIB_RELPATH} not found!${NC}"
|
|
exit 1
|
|
fi
|
|
echo -e "${GREEN}Local files and directories found.${NC}"
|
|
echo ""
|
|
|
|
# === 2. Create Remote Directories ===
|
|
echo -e "${YELLOW}Creating remote directories...${NC}"
|
|
ssh -q ${SSH_ALIAS} "mkdir -p ${REMOTE_SKYWEAVE_MODULE_DIR}/handlers ${REMOTE_CGI_DIR}"
|
|
if [ $? -ne 0 ]; then
|
|
echo -e "${RED}Error: Failed to create remote directories on ${SSH_ALIAS}!${NC}"
|
|
exit 1
|
|
fi
|
|
echo -e "${GREEN}Remote directories ensured.${NC}"
|
|
echo ""
|
|
|
|
# === 3. Deploy Files ===
|
|
echo -e "${YELLOW}Deploying json.lua library...${NC}"
|
|
scp ${SCP_FLAG_O} "${LOCAL_REPO_ROOT}/${LOCAL_JSON_LIB_RELPATH}" "${SSH_ALIAS}:${REMOTE_JSON_LIB}"
|
|
if [ $? -ne 0 ]; then echo -e "${RED}Error: Failed to copy json.lua to ${SSH_ALIAS}!${NC}"; exit 1; fi
|
|
echo -e "${GREEN}json.lua deployed.${NC}"
|
|
echo ""
|
|
|
|
echo -e "${YELLOW}Deploying Skyweave module directory (${LOCAL_SKYWEAVE_MODULE_DIR_RELPATH})...${NC}"
|
|
scp ${SCP_FLAG_O} -r "${LOCAL_REPO_ROOT}/${LOCAL_SKYWEAVE_MODULE_DIR_RELPATH}/." "${SSH_ALIAS}:${REMOTE_SKYWEAVE_MODULE_DIR}/"
|
|
if [ $? -ne 0 ]; then echo -e "${RED}Error: Failed to copy Skyweave module directory to ${SSH_ALIAS}!${NC}"; exit 1; fi
|
|
echo -e "${GREEN}Skyweave module directory deployed.${NC}"
|
|
echo ""
|
|
|
|
echo -e "${YELLOW}Deploying main CGI script (${LOCAL_CGI_SCRIPT_RELPATH})...${NC}"
|
|
scp ${SCP_FLAG_O} "${LOCAL_REPO_ROOT}/${LOCAL_CGI_SCRIPT_RELPATH}" "${SSH_ALIAS}:${REMOTE_CGI_SCRIPT}"
|
|
if [ $? -ne 0 ]; then echo -e "${RED}Error: Failed to copy CGI script to ${SSH_ALIAS}!${NC}"; exit 1; fi
|
|
echo -e "${GREEN}Main CGI script deployed.${NC}"
|
|
echo ""
|
|
|
|
# === 4. Set Permissions on Remote Files ===
|
|
echo -e "${YELLOW}Setting permissions on remote files...${NC}"
|
|
CGI_CHMOD_FAILED=0
|
|
ssh -q ${SSH_ALIAS} "chmod +x ${REMOTE_CGI_SCRIPT}" || CGI_CHMOD_FAILED=1
|
|
ssh -q ${SSH_ALIAS} "chmod 644 ${REMOTE_JSON_LIB}" || echo -e "${YELLOW}Warning: chmod failed for ${REMOTE_JSON_LIB}.${NC}"
|
|
ssh -q ${SSH_ALIAS} "find ${REMOTE_SKYWEAVE_MODULE_DIR} -type d -exec chmod 755 {} \;" || echo -e "${YELLOW}Warning: chmod failed for module dirs in ${REMOTE_SKYWEAVE_MODULE_DIR}.${NC}"
|
|
ssh -q ${SSH_ALIAS} "find ${REMOTE_SKYWEAVE_MODULE_DIR} -type f -exec chmod 644 {} \;" || echo -e "${YELLOW}Warning: chmod failed for module files in ${REMOTE_SKYWEAVE_MODULE_DIR}.${NC}"
|
|
|
|
if [ "$CGI_CHMOD_FAILED" = "1" ]; then
|
|
echo -e "${RED}Critical permission setting for CGI script failed. Deployment may not be functional.${NC}"
|
|
exit 1
|
|
fi
|
|
echo -e "${GREEN}Remote permissions set.${NC}"
|
|
echo ""
|
|
|
|
# === 5. Test Deployed API ===
|
|
echo -e "${GREEN}All deployment and permission operations complete for ${SSH_ALIAS}!${NC}"
|
|
echo "" # Add a newline for spacing before API test
|
|
echo -e "${YELLOW}Testing API via http://${ROOF_IP}:${REMOTE_HTTP_PORT}...${NC}"
|
|
API_TEST_URL="http://${ROOF_IP}:${REMOTE_HTTP_PORT}/cgi-bin/skyweave.lua?get_config=network_config"
|
|
RESPONSE=$(curl -s -X GET "${API_TEST_URL}")
|
|
|
|
if [ $? -eq 0 ] && [[ "${RESPONSE}" == *'"errCode":0'* ]]; then
|
|
echo -e "${GREEN}API test successful!${NC}"
|
|
echo -e "Response: ${RESPONSE}"
|
|
else
|
|
echo -e "${RED}API test failed!${NC}"
|
|
echo -e "Curl exit status for ${API_TEST_URL}: $?"
|
|
echo -e "Response: ${RESPONSE}"
|
|
fi
|
|
|
|
echo -e "\n${YELLOW}API endpoint: http://${ROOF_IP}:${REMOTE_HTTP_PORT}/cgi-bin/skyweave.lua${NC}"
|
|
echo -e "${YELLOW}Example usage: curl -X POST -H \"Content-Type: application/json\" -d '{\"ssid\":\"MyNetwork\",\"key\":\"MyPassword\",\"encryption\":\"psk2\"}' http://${ROOF_IP}:${REMOTE_HTTP_PORT}/cgi-bin/skyweave.lua?set_config=connect_wifi${NC}"
|
|
echo ""
|
|
echo -e "${GREEN}Deployment script finished.${NC}" |