Files
lisglosips/infra/server-b/s56/deploy-local-recording.sh

99 lines
4.9 KiB
Bash

#!/usr/bin/env bash
set -Eeuo pipefail
commit=${1:?commit is required}
archive=${2:?archive path is required}
expected_sha=${3:?archive sha256 is required}
stamp=$(date -u +%Y%m%dT%H%M%SZ)
backup=/var/backups/lisglosips-s56/$stamp
old=$(readlink -f /opt/lisglosips/current)
new=/opt/lisglosips/releases/s56-b-consolidation-$stamp
echo "phase=verify-upload"
test "$(sha256sum "$archive" | awk '{print $1}')" = "$expected_sha"
test -d "$old"
test ! -e "$new"
echo "phase=data-backup"
systemctl start lisglosips-backup.service
if systemctl --quiet is-failed lisglosips-backup.service; then
systemctl status --no-pager lisglosips-backup.service
exit 1
fi
find /data/backups/mysql -mindepth 1 -maxdepth 1 -type d | sort | tail -1
find /data/backups/redis -mindepth 1 -maxdepth 1 -type d | sort | tail -1
echo "phase=config-backup"
install -d -m 0700 "$backup"
cp -a /etc/lisglosips/recording-worker.env "$backup/recording-worker.env"
cp -a /etc/systemd/system/lisglosips@recording-worker.service.d/10-s28-recording.conf "$backup/10-s28-recording.conf"
printf '%s\n' "$old" > "$backup/previous-release"
[ ! -e /usr/local/sbin/lisglosips-recording-finalize ] || cp -a /usr/local/sbin/lisglosips-recording-finalize "$backup/finalizer.previous"
[ ! -e /etc/systemd/system/lisglosips-recording-finalize.service ] || cp -a /etc/systemd/system/lisglosips-recording-finalize.service "$backup/finalizer-service.previous"
[ ! -e /etc/systemd/system/lisglosips-recording-finalize.timer ] || cp -a /etc/systemd/system/lisglosips-recording-finalize.timer "$backup/finalizer-timer.previous"
changed=0
rollback() {
rc=$?
if [ "$changed" -eq 1 ]; then
echo "phase=rollback rc=$rc"
systemctl disable --now lisglosips-recording-finalize.timer 2>/dev/null || true
cp -a "$backup/recording-worker.env" /etc/lisglosips/recording-worker.env
cp -a "$backup/10-s28-recording.conf" /etc/systemd/system/lisglosips@recording-worker.service.d/10-s28-recording.conf
ln -sfn "$old" /opt/lisglosips/current
systemctl daemon-reload
systemctl restart lisglosips@recording-worker || true
fi
exit "$rc"
}
trap rollback ERR
echo "phase=stage-release"
cp -a --reflink=auto "$old" "$new"
tar -xzf "$archive" -C "$new"
printf '%s\n' "$commit" > "$new/.deployed-commit"
printf '%s\n' "$old" > "$new/.delta-base-release"
chown -R root:lisglosips "$new/apps/worker-recording/dist" "$new/infra/server-b/s56"
chmod -R u=rwX,g=rX,o= "$new/apps/worker-recording/dist" "$new/infra/server-b/s56"
chmod 0755 "$new/infra/server-b/s56/scripts/lisglosips-recording-finalize"
echo "phase=install-local-recording"
install -o root -g root -m 0755 "$new/infra/server-b/s56/scripts/lisglosips-recording-finalize" /usr/local/sbin/lisglosips-recording-finalize
install -o root -g root -m 0644 "$new/infra/server-b/s56/systemd/lisglosips-recording-finalize.service" /etc/systemd/system/lisglosips-recording-finalize.service
install -o root -g root -m 0644 "$new/infra/server-b/s56/systemd/lisglosips-recording-finalize.timer" /etc/systemd/system/lisglosips-recording-finalize.timer
install -o root -g root -m 0644 "$new/infra/server-b/s56/systemd/10-local-recording.conf" /etc/systemd/system/lisglosips@recording-worker.service.d/10-s28-recording.conf
tmp_env=$(mktemp)
grep -Ev '^(RECORDING_SOURCE_MODE|RECORDING_LOCAL_READY_DIR|RECORDING_REMOTE_HOST|RECORDING_SSH_CONFIG|RECORDING_REMOTE_READY_DIR)=' /etc/lisglosips/recording-worker.env > "$tmp_env"
printf '%s\n' 'RECORDING_SOURCE_MODE=local' 'RECORDING_LOCAL_READY_DIR=/dev/shm/voip_rec/ready' >> "$tmp_env"
install -o root -g lisglosips -m 0640 "$tmp_env" /etc/lisglosips/recording-worker.env
rm -f "$tmp_env"
install -d -o rtpengine -g rtpengine -m 0750 /dev/shm/voip_rec /dev/shm/voip_rec/incoming /dev/shm/voip_rec/ready /dev/shm/voip_rec/failed
changed=1
systemctl daemon-reload
systemctl enable --now lisglosips-recording-finalize.timer
systemctl start lisglosips-recording-finalize.service
ln -sfn "$new" /opt/lisglosips/current
systemctl restart lisglosips@recording-worker
sleep 12
echo "phase=verify"
test "$(readlink -f /opt/lisglosips/current)" = "$new"
test "$(cat /opt/lisglosips/current/.deployed-commit)" = "$commit"
test "$(systemctl is-active lisglosips-recording-finalize.timer)" = active
test "$(systemctl is-active rtpengine-recording-daemon)" = active
test "$(systemctl is-active lisglosips@recording-worker)" = active
/opt/lisglosips/current/infra/server-b/s30/lisglosips-release-preflight.sh
journalctl -u lisglosips@recording-worker --since "@$(( $(date +%s) - 60 ))" --no-pager | tail -30
echo "ENV_MODE"
grep -E '^(RECORDING_SOURCE_MODE|RECORDING_LOCAL_READY_DIR|RECORDING_LOCAL_ROOT|RECORDING_DELETE_SOURCE_AFTER_COPY)=' /etc/lisglosips/recording-worker.env
echo "PROCESS_CHECK"
worker_pid=$(systemctl show -p MainPID --value lisglosips@recording-worker)
ps -o pid,ppid,comm,args --forest -g "$(ps -o sid= -p "$worker_pid" | tr -d ' ')" || true
pgrep -a ssh || true
printf 'BACKUP=%s\nRELEASE=%s\nCOMMIT=%s\n' "$backup" "$new" "$commit"
changed=0
trap - ERR