-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall.sh
More file actions
259 lines (219 loc) · 7.57 KB
/
install.sh
File metadata and controls
259 lines (219 loc) · 7.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
#!/bin/bash
# Laser UI Master Installation Script
# This script performs a complete installation of Laser UI system
set -e
# Configuration
INSTALL_DIR="/opt/laser-ui"
LOG_FILE="/var/log/laser-ui-install.log"
PYTHON_REQUIREMENTS="python3 python3-pip python3-serial"
SYSTEM_PACKAGES="hostapd dnsmasq nodejs npm"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Logging function
log() {
echo -e "$1" | tee -a "$LOG_FILE"
}
log_error() {
echo -e "${RED}$1${NC}" | tee -a "$LOG_FILE"
}
log_success() {
echo -e "${GREEN}$1${NC}" | tee -a "$LOG_FILE"
}
log_info() {
echo -e "${YELLOW}$1${NC}" | tee -a "$LOG_FILE"
}
log_step() {
echo -e "${BLUE}$1${NC}" | tee -a "$LOG_FILE"
}
# Check if running as root
if [ "$EUID" -ne 0 ]; then
log_error "Error: This script must be run as root"
echo "Please run: sudo $0"
exit 1
fi
# Get the current directory (source directory)
SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Start logging
log_step "============================================"
log_step " Laser UI Installation Started"
log_step " $(date)"
log_step "============================================"
log ""
log "Log file: $LOG_FILE"
log "Source directory: $SOURCE_DIR"
log "Installation directory: $INSTALL_DIR"
log ""
# Detect username
if [ -z "$SUDO_USER" ]; then
USERNAME=$(whoami)
else
USERNAME=$SUDO_USER
fi
log "Installing for user: $USERNAME"
log ""
# Step 1: Update system packages
log_step "[1/10] Updating system packages..."
apt-get update >> "$LOG_FILE" 2>&1
log_success "✓ System packages updated"
# Step 2: Install system dependencies
log_step "[2/10] Installing system dependencies..."
log_info "Installing: $SYSTEM_PACKAGES"
apt-get install -y $SYSTEM_PACKAGES >> "$LOG_FILE" 2>&1
if [ $? -eq 0 ]; then
log_success "✓ System dependencies installed"
else
log_error "✗ Failed to install system dependencies"
log_error "Check log file: $LOG_FILE"
exit 1
fi
# Step 3: Install Python dependencies
log_step "[3/10] Installing Python dependencies..."
log_info "Installing: $PYTHON_REQUIREMENTS"
apt-get install -y $PYTHON_REQUIREMENTS >> "$LOG_FILE" 2>&1
if [ $? -eq 0 ]; then
log_success "✓ Python dependencies installed"
else
log_error "✗ Failed to install Python dependencies"
log_error "Check log file: $LOG_FILE"
exit 1
fi
# Install Python packages via pip
log_info "Installing Python packages via pip..."
pip3 install pyserial >> "$LOG_FILE" 2>&1
# Install optional GPIO libraries
log_info "Installing optional GPIO libraries..."
pip3 install wiringpi >> "$LOG_FILE" 2>&1 || log_info " wiringpi installation skipped (optional)"
pip3 install OPi.GPIO >> "$LOG_FILE" 2>&1 || log_info " OPi.GPIO installation skipped (optional)"
# Verify pyserial installation
if ! python3 -c "import serial" 2>/dev/null; then
log_error "✗ Failed to install pyserial"
log_error "Check log file: $LOG_FILE"
exit 1
fi
log_success "✓ Python packages installed"
# Step 4: Create installation directory
log_step "[4/10] Creating installation directory..."
if [ -d "$INSTALL_DIR" ]; then
log_info "Directory exists, backing up to ${INSTALL_DIR}.backup.$(date +%Y%m%d-%H%M%S)"
mv "$INSTALL_DIR" "${INSTALL_DIR}.backup.$(date +%Y%m%d-%H%M%S)"
fi
mkdir -p "$INSTALL_DIR"
log_success "✓ Installation directory created"
# Step 5: Copy files
log_step "[5/10] Copying files to $INSTALL_DIR..."
cp -r "$SOURCE_DIR"/* "$INSTALL_DIR/" >> "$LOG_FILE" 2>&1
if [ $? -eq 0 ]; then
log_success "✓ Files copied successfully"
else
log_error "✗ Failed to copy files"
log_error "Check log file: $LOG_FILE"
exit 1
fi
# Set proper ownership
chown -R "$USERNAME":"$USERNAME" "$INSTALL_DIR"
log_success "✓ File ownership set to $USERNAME"
# Step 6: Make scripts executable
log_step "[6/10] Making scripts executable..."
chmod +x "$INSTALL_DIR"/*.sh
log_success "✓ Scripts are executable"
# Step 7: Install Node.js dependencies
log_step "[7/10] Installing Node.js dependencies..."
cd "$INSTALL_DIR"
log_info "Running npm install (this may take a few minutes)..."
sudo -u "$USERNAME" npm install >> "$LOG_FILE" 2>&1
if [ $? -eq 0 ]; then
log_success "✓ Node.js dependencies installed"
else
log_error "✗ Failed to install Node.js dependencies"
log_error "Check log file: $LOG_FILE"
exit 1
fi
# Step 8: Build the application
log_step "[8/10] Building the application..."
log_info "Running npm run build..."
sudo -u "$USERNAME" npm run build >> "$LOG_FILE" 2>&1
if [ $? -eq 0 ]; then
log_success "✓ Application built successfully"
else
log_error "✗ Failed to build application"
log_error "Check log file: $LOG_FILE"
exit 1
fi
# Step 9: Update service file paths
log_step "[9/10] Configuring service files..."
sed -i "s|/home/pi/Laser-Ui|${INSTALL_DIR}|g" "$INSTALL_DIR/laser-hotspot.service"
sed -i "s|/home/pi/Laser-Ui|${INSTALL_DIR}|g" "$INSTALL_DIR/laser-ui.service"
sed -i "s|/home/pi/Laser-Ui|${INSTALL_DIR}|g" "$INSTALL_DIR/lightburn-bridge.service"
sed -i "s|User=pi|User=root|g" "$INSTALL_DIR/laser-ui.service"
sed -i "s|User=pi|User=root|g" "$INSTALL_DIR/lightburn-bridge.service"
log_success "✓ Service files configured"
# Step 10: Install and start services
log_step "[10/10] Installing systemd services..."
cd "$INSTALL_DIR"
# Stop any existing services
systemctl stop laser-hotspot.service 2>/dev/null || true
systemctl stop laser-ui.service 2>/dev/null || true
systemctl stop lightburn-bridge.service 2>/dev/null || true
# Copy service files
cp laser-hotspot.service /etc/systemd/system/
cp laser-ui.service /etc/systemd/system/
cp lightburn-bridge.service /etc/systemd/system/
# Reload systemd
systemctl daemon-reload
# Enable services
systemctl enable laser-hotspot.service >> "$LOG_FILE" 2>&1
systemctl enable laser-ui.service >> "$LOG_FILE" 2>&1
systemctl enable lightburn-bridge.service >> "$LOG_FILE" 2>&1
log_success "✓ Services enabled"
# Start services in sequence
log_info "Starting services in sequence..."
systemctl start laser-hotspot.service
sleep 3
systemctl start lightburn-bridge.service
sleep 2
systemctl start laser-ui.service
log_success "✓ Services started"
# Final status check
log ""
log_step "============================================"
log_step " Installation Complete!"
log_step "============================================"
log ""
# Check service status
log_step "Service Status:"
log ""
for service in laser-hotspot laser-ui lightburn-bridge; do
if systemctl is-active --quiet ${service}.service; then
log_success "✓ ${service}: RUNNING"
else
log_error "✗ ${service}: FAILED"
log_info " Check logs: sudo journalctl -u ${service} -n 50"
fi
done
log ""
log_step "Installation Details:"
log " Installation directory: $INSTALL_DIR"
log " Installation log: $LOG_FILE"
log " WiFi SSID: LaserUI-Hotspot"
log " WiFi Password: laserui123"
log " Gateway IP: 192.168.50.1"
log ""
log_step "Useful Commands:"
log " View service status: ${GREEN}sudo systemctl status laser-hotspot|laser-ui|lightburn-bridge${NC}"
log " View service logs: ${GREEN}sudo journalctl -u laser-ui -f${NC}"
log " View all logs: ${GREEN}sudo journalctl -u laser-* -f${NC}"
log " Restart service: ${GREEN}sudo systemctl restart laser-ui${NC}"
log " Stop all services: ${GREEN}sudo systemctl stop laser-*${NC}"
log " Installation log: ${GREEN}cat $LOG_FILE${NC}"
log ""
log_step "Web Interface:"
log " Connect to WiFi: LaserUI-Hotspot"
log " Open browser: http://192.168.50.1:5000"
log ""
log_success "Installation completed successfully!"
log "Full installation log saved to: $LOG_FILE"
log ""