123 lines
2.8 KiB
Bash
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" |