11#! /bin/bash
22set -euo pipefail
33
4- log (){ echo " >$SHELL_MSG $ *" ; }
4+ log (){ echo " >$* " ; }
55
66# -------------------------------
77# 0) Resolve env with defaults
@@ -65,12 +65,10 @@ chmod 777 /proc/self/fd/1 || true
6565# -------------------------------
6666# 2) Container-safe rsyslog setup
6767# -------------------------------
68- # Precreate target log and relax perms so rsyslog can write without chown
6968mkdir -p /var/log
7069touch /var/log/bluecherry.log
7170chmod 666 /var/log/bluecherry.log || true
7271
73- # Strip owner/group directives from shipped config to prevent chown errors
7472RSYS_CFG=" /etc/rsyslog.d/10-bluecherry.conf"
7573if [ -f " $RSYS_CFG " ]; then
7674 sed -i -E \
@@ -79,16 +77,12 @@ if [ -f "$RSYS_CFG" ]; then
7977 -e ' s/(owner|group)=\"?[A-Za-z0-9_.-]+\"?//g' \
8078 " $RSYS_CFG " || true
8179fi
82-
83- # Replace deprecated '~' discard action with 'stop' (quiet warning)
8480sed -i -E ' s/^[[:space:]]*~[[:space:]]*$/stop/' /etc/rsyslog.d/* .conf 2> /dev/null || true
8581
86- # Ensure logs also go to docker logs
8782cat > /etc/rsyslog.d/99-stdout.conf << 'EOF '
8883*.* /proc/self/fd/1
8984EOF
9085
91- # Start rsyslog with a clean pidfile
9286log " Starting rsyslogd"
9387rm -f /run/rsyslogd.pid /var/run/rsyslogd.pid 2> /dev/null || true
9488/usr/sbin/rsyslogd -n &
@@ -119,7 +113,7 @@ start_php_fpm() {
119113}
120114start_php_fpm || true
121115
122- # Create a compatibility symlink for configs expecting /etc/alternatives/php-fpm.sock
116+ # Compat symlink for configs expecting /etc/alternatives/php-fpm.sock
123117for s in /run/php/php8.3-fpm.sock /run/php/php-fpm.sock; do
124118 if [ -S " $s " ]; then
125119 mkdir -p /etc/alternatives
@@ -160,11 +154,7 @@ else
160154 fi
161155fi
162156
163- # -----------------------------------------
164- # 4.1) DB grants for MySQL 8 (quiet backup)
165- # -----------------------------------------
166- # If admin creds are available, ensure the app user has backup-friendly perms
167- # and uses mysql_native_password for compatibility, using your env values.
157+ # DB grants for MySQL 8 (quiet backups + compat auth)
168158if [ -n " ${MYSQL_ADMIN_LOGIN:- } " ] && [ -n " ${MYSQL_ADMIN_PASSWORD:- } " ]; then
169159 log " Ensuring '${DB_USER} ' has PROCESS/SHOW VIEW/EVENT/TRIGGER/LOCK TABLES and native auth"
170160 mysql -h" ${DB_HOST} " -u" ${MYSQL_ADMIN_LOGIN} " -p" ${MYSQL_ADMIN_PASSWORD} " << SQL || true
@@ -175,38 +165,30 @@ FLUSH PRIVILEGES;
175165SQL
176166fi
177167
178- # -----------------------------------------
179- # 4.2) Optional: motion_map one-time fixes
180- # -----------------------------------------
181- # if mysql -h"${DB_HOST}" -u"${DB_USER}" -p"${DB_PASS}" -D"${DB_NAME}" -e "SHOW TABLES LIKE 'Devices'" | grep -q Devices; then
182- # echo "Fixing motion maps..."
183- # mysql -h"${DB_HOST}" -u"${DB_USER}" -p"${DB_PASS}" -D"${DB_NAME}" <<'SQL' || true
184- # UPDATE Devices SET motion_map = REPEAT('3', 768) WHERE protocol LIKE 'IP%' AND LENGTH(motion_map) <> 768;
185- # UPDATE Devices SET motion_map = REPEAT('3', 192) WHERE driver = 'tw5864' AND LENGTH(motion_map) <> 192;
186- # UPDATE Devices SET motion_map = REPEAT('3', 396) WHERE driver LIKE 'solo6%' AND LENGTH(motion_map) <> 396;
187- # UPDATE Devices SET motion_map = REPEAT('3', 330) WHERE driver LIKE 'solo6%' AND LENGTH(motion_map) <> 330;
188- # SQL
189- # fi
168+ # Optional: motion_map fixes (guarded)
169+ if mysql -h" ${DB_HOST} " -u" ${DB_USER} " -p" ${DB_PASS} " -D" ${DB_NAME} " -e " SHOW TABLES LIKE 'Devices'" | grep -q Devices; then
170+ echo " Fixing motion maps..."
171+ mysql -h" ${DB_HOST} " -u" ${DB_USER} " -p" ${DB_PASS} " -D" ${DB_NAME} " << 'SQL ' || true
172+ UPDATE Devices SET motion_map = REPEAT('3', 768) WHERE protocol LIKE 'IP%' AND LENGTH(motion_map) <> 768;
173+ UPDATE Devices SET motion_map = REPEAT('3', 192) WHERE driver = 'tw5864' AND LENGTH(motion_map) <> 192;
174+ UPDATE Devices SET motion_map = REPEAT('3', 396) WHERE driver LIKE 'solo6%' AND LENGTH(motion_map) <> 396;
175+ UPDATE Devices SET motion_map = REPEAT('3', 330) WHERE driver LIKE 'solo6%' AND LENGTH(motion_map) <> 330;
176+ SQL
177+ fi
190178
191- # -------------------------------
192- # 5) DEBUG mode (optional)
193- # -------------------------------
179+ # DEBUG mode
194180if [ " ${DEBUG:- 0} " = " 1" ]; then
195181 export LD_LIBRARY_PATH=/usr/lib/bluecherry
196182 exec /usr/sbin/bc-server -u bluecherry -g bluecherry -d 7
197183fi
198184
199- # -------------------------------
200- # 6) Start Bluecherry server
201- # -------------------------------
185+ # Start Bluecherry server
202186log " Starting bc-server as bluecherry:bluecherry"
203187export LD_LIBRARY_PATH=/usr/lib/bluecherry
204188/usr/sbin/bc-server -u bluecherry -g bluecherry &
205189BC_PID=$!
206190
207- # -------------------------------
208- # 7) Graceful shutdown trap
209- # -------------------------------
191+ # Graceful shutdown
210192graceful_exit () {
211193 echo " > Caught signal, stopping services..."
212194 kill -TERM " ${BC_PID:- 0} " 2> /dev/null || true
@@ -222,9 +204,7 @@ graceful_exit() {
222204}
223205trap graceful_exit TERM INT
224206
225- # -------------------------------
226- # 8) Watchdog loop
227- # -------------------------------
207+ # Watchdog loop
228208log " All services launched. Entering watchdog loop."
229209while sleep 15; do
230210 kill -0 " ${RSYSLOG_PID} " 2> /dev/null || { echo " rsyslogd exited" ; exit 1; }
0 commit comments