frigate_nvr/arch_install.sh

123 lines
2.8 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
echo "=== Frigate + SMB installer for Arch Linux ==="
read -rp "SMB server IP or hostname: " SMB_SERVER
read -rp "SMB share name: " SMB_SHARE
read -rp "SMB username: " SMB_USER
read -rsp "SMB password: " SMB_PASS
echo
read -rp "Local mount path [/mnt/frigate-recordings]: " MOUNT_PATH
MOUNT_PATH=${MOUNT_PATH:-/mnt/frigate-recordings}
FRIGATE_DIR="/opt/frigate"
CRED_FILE="/etc/samba/frigate-smb.cred"
echo "Installing packages..."
sudo pacman -Syu --needed --noconfirm docker docker-compose cifs-utils
echo "Enabling Docker..."
sudo systemctl enable --now docker
echo "Creating directories..."
sudo mkdir -p "$MOUNT_PATH"
sudo mkdir -p "$FRIGATE_DIR/config"
sudo mkdir -p /etc/samba
echo "Creating SMB credentials file..."
sudo tee "$CRED_FILE" >/dev/null <<EOF
username=$SMB_USER
password=$SMB_PASS
EOF
sudo chmod 600 "$CRED_FILE"
echo "Adding SMB mount to /etc/fstab..."
FSTAB_LINE="//$SMB_SERVER/$SMB_SHARE $MOUNT_PATH cifs credentials=$CRED_FILE,uid=1000,gid=1000,file_mode=0664,dir_mode=0775,iocharset=utf8,nofail,_netdev,x-systemd.automount 0 0"
if ! grep -q "//$SMB_SERVER/$SMB_SHARE" /etc/fstab; then
echo "$FSTAB_LINE" | sudo tee -a /etc/fstab >/dev/null
fi
echo "Mounting SMB share..."
sudo systemctl daemon-reload
sudo mount "$MOUNT_PATH" || true
echo "Testing SMB write access..."
sudo mkdir -p "$MOUNT_PATH/frigate"
sudo touch "$MOUNT_PATH/frigate/test-write.txt"
sudo rm -f "$MOUNT_PATH/frigate/test-write.txt"
echo "Creating Frigate docker-compose.yml..."
sudo tee "$FRIGATE_DIR/docker-compose.yml" >/dev/null <<EOF
services:
frigate:
container_name: frigate
image: ghcr.io/blakeblackshear/frigate:stable
restart: unless-stopped
stop_grace_period: 30s
shm_size: "512mb"
volumes:
- /etc/localtime:/etc/localtime:ro
- $FRIGATE_DIR/config:/config
- $MOUNT_PATH/frigate:/media/frigate
- type: tmpfs
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- "8971:8971"
- "8554:8554"
- "8555:8555/tcp"
- "8555:8555/udp"
environment:
FRIGATE_RTSP_PASSWORD: "change_this_password"
EOF
echo "Creating starter Frigate config..."
sudo tee "$FRIGATE_DIR/config/config.yml" >/dev/null <<EOF
mqtt:
enabled: false
record:
enabled: true
retain:
days: 7
mode: all
snapshots:
enabled: true
retain:
default: 14
storage:
max_usage_percent: 90
cameras:
test_camera:
enabled: false
ffmpeg:
inputs:
- path: rtsp://USER:PASS@CAMERA_IP:554/stream1
roles:
- detect
- record
detect:
width: 1920
height: 1080
fps: 5
EOF
echo "Starting Frigate..."
cd "$FRIGATE_DIR"
sudo docker compose up -d
echo
echo "Done."
echo "Open Frigate at: http://SERVER_IP:8971"
echo "Config file: $FRIGATE_DIR/config/config.yml"
echo "Recordings path: $MOUNT_PATH/frigate"