forked from jkef80/Filament-Management
-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathinstall.sh
More file actions
119 lines (93 loc) · 2.7 KB
/
Copy pathinstall.sh
File metadata and controls
119 lines (93 loc) · 2.7 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
#!/usr/bin/env bash
set -euo pipefail
APP_DIR="/opt/filament-management"
SERVICE_NAME="filament-management"
REPO_URL="https://github.com/koen01/CFSync.git"
if [[ ${EUID} -ne 0 ]]; then
echo "Please run with sudo"
exit 1
fi
REAL_USER="${SUDO_USER:-}"
if [[ -z "$REAL_USER" || "$REAL_USER" == "root" ]]; then
echo "Run via sudo from normal user"
exit 1
fi
ask() {
local prompt="$1"
local default="$2"
local var
if [ -r /dev/tty ]; then
read -r -p "$prompt [$default]: " var < /dev/tty
fi
echo "${var:-$default}"
}
echo "=== CFSync Installer ==="
UI_PORT=$(ask "UI Port" "8005")
PRINTER_IP=$(ask "Printer IP" "192.168.1.144")
DIAM=$(ask "Filament diameter (mm)" "1.75")
SPOOLMAN_URL=$(ask "Spoolman URL (optional, e.g. http://host:7912)" "")
SPOOLMAN_MODE="direct"
if [[ -n "$SPOOLMAN_URL" ]]; then
echo "Spoolman sync mode:"
echo " direct — CFSync reports usage directly to Spoolman on print end"
echo " moonraker — CFSync tells Moonraker's Spoolman plugin which spool is active"
SPOOLMAN_MODE=$(ask "Spoolman mode (direct/moonraker)" "direct")
if [[ "$SPOOLMAN_MODE" != "direct" && "$SPOOLMAN_MODE" != "moonraker" ]]; then
echo "Invalid mode, defaulting to 'direct'"
SPOOLMAN_MODE="direct"
fi
fi
echo "Installing to $APP_DIR"
apt-get update -y
apt-get install -y python3 python3-venv python3-pip git rsync curl sshpass
mkdir -p "$APP_DIR"
echo "Cloning repository..."
rm -rf /tmp/filament-install
git clone --depth 1 "$REPO_URL" /tmp/filament-install
rsync -a --delete \
--exclude ".git/" \
--exclude "data/" \
--exclude "__pycache__/" \
/tmp/filament-install/ "$APP_DIR/"
rm -rf /tmp/filament-install
chown -R "$REAL_USER":"$REAL_USER" "$APP_DIR"
sudo -u "$REAL_USER" bash -lc "
cd '$APP_DIR'
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
"
mkdir -p "$APP_DIR/data"
cat > "$APP_DIR/data/config.json" <<CFG
{
"printer_url": "${PRINTER_IP}",
"filament_diameter_mm": ${DIAM},
"spoolman_url": "${SPOOLMAN_URL}",
"spoolman_mode": "${SPOOLMAN_MODE}"
}
CFG
chown -R "$REAL_USER":"$REAL_USER" "$APP_DIR/data"
cat > "/etc/systemd/system/${SERVICE_NAME}.service" <<SVC
[Unit]
Description=CFSync
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=${REAL_USER}
WorkingDirectory=${APP_DIR}
ExecStart=${APP_DIR}/venv/bin/uvicorn main:app --host 0.0.0.0 --port ${UI_PORT}
Restart=always
RestartSec=2
[Install]
WantedBy=multi-user.target
SVC
systemctl daemon-reload
systemctl enable "$SERVICE_NAME"
systemctl restart "$SERVICE_NAME"
IP=$(hostname -I | awk '{print $1}')
echo ""
echo "✅ Installed successfully"
echo "Open: http://${IP}:${UI_PORT}"
echo "Logs: sudo journalctl -u ${SERVICE_NAME} -f"