mirror of https://github.com/tteck/Proxmox
parent
597162b0a8
commit
d533289dc0
2 changed files with 546 additions and 0 deletions
@ -0,0 +1,340 @@ |
|||||||
|
#!/usr/bin/env bash |
||||||
|
|
||||||
|
# Copyright (c) 2021-2024 tteck |
||||||
|
# Authors: tteck (tteckster), remz1337 |
||||||
|
# License: MIT |
||||||
|
# https://github.com/tteck/Proxmox/raw/main/LICENSE |
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" |
||||||
|
color |
||||||
|
verb_ip6 |
||||||
|
catch_errors |
||||||
|
setting_up_container |
||||||
|
network_check |
||||||
|
update_os |
||||||
|
|
||||||
|
msg_info "Installing Dependencies" |
||||||
|
#Configuration to make unattended installs with APT |
||||||
|
#https://serverfault.com/questions/48724/100-non-interactive-debian-dist-upgrade |
||||||
|
export DEBIAN_FRONTEND=noninteractive |
||||||
|
export APT_LISTCHANGES_FRONTEND=none |
||||||
|
#especially libc6, installed part of the dependency script (install_deps.sh) |
||||||
|
echo 'libc6 libraries/restart-without-asking boolean true' | debconf-set-selections |
||||||
|
cd /opt |
||||||
|
$STD apt update |
||||||
|
$STD apt upgrade -y |
||||||
|
#I tried to install all the dependencies at the beginning, but it induced an error when building nginx, so I kept them in the same order of the Dockerfile |
||||||
|
$STD apt install -y git automake build-essential wget xz-utils |
||||||
|
msg_ok "Installed Dependencies" |
||||||
|
|
||||||
|
|
||||||
|
msg_info "Downloading Frigate" |
||||||
|
#Pull Frigate from repo |
||||||
|
#git clone https://github.com/blakeblackshear/frigate.git |
||||||
|
$STD wget https://github.com/blakeblackshear/frigate/archive/refs/tags/v0.13.0-beta2.tar.gz -O frigate.tar.gz |
||||||
|
mkdir frigate |
||||||
|
$STD tar -xzf frigate.tar.gz -C frigate --strip-components 1 |
||||||
|
cd /opt/frigate |
||||||
|
#Used in build dependencies scripts |
||||||
|
export TARGETARCH=amd64 |
||||||
|
msg_ok "Downloaded Frigate" |
||||||
|
|
||||||
|
msg_info "Building Nginx with custom modules" |
||||||
|
$STD docker/main/build_nginx.sh |
||||||
|
msg_ok "Built Nginx with custom modules" |
||||||
|
|
||||||
|
msg_info "Installing go2rtc" |
||||||
|
mkdir -p /usr/local/go2rtc/bin |
||||||
|
cd /usr/local/go2rtc/bin |
||||||
|
$STD wget -O go2rtc "https://github.com/AlexxIT/go2rtc/releases/download/v1.8.1/go2rtc_linux_${TARGETARCH}" |
||||||
|
chmod +x go2rtc |
||||||
|
msg_ok "Installed go2rtc" |
||||||
|
|
||||||
|
msg_info "Installing object detection models" |
||||||
|
cd /opt/frigate |
||||||
|
|
||||||
|
### OpenVino |
||||||
|
$STD apt install -y wget python3 python3-distutils |
||||||
|
$STD wget https://bootstrap.pypa.io/get-pip.py -O get-pip.py |
||||||
|
$STD python3 get-pip.py "pip" |
||||||
|
$STD pip install -r docker/main/requirements-ov.txt |
||||||
|
|
||||||
|
|
||||||
|
# Get OpenVino Model |
||||||
|
mkdir -p /opt/frigate/models |
||||||
|
cd /opt/frigate/models |
||||||
|
$STD omz_downloader --name ssdlite_mobilenet_v2 |
||||||
|
cd /opt/frigate/models |
||||||
|
$STD omz_converter --name ssdlite_mobilenet_v2 --precision FP16 |
||||||
|
|
||||||
|
# Build libUSB without udev. Needed for Openvino NCS2 support |
||||||
|
cd /opt/frigate |
||||||
|
|
||||||
|
export CCACHE_DIR=/root/.ccache |
||||||
|
export CCACHE_MAXSIZE=2G |
||||||
|
|
||||||
|
$STD apt install -y unzip build-essential automake libtool ccache pkg-config |
||||||
|
|
||||||
|
$STD wget https://github.com/libusb/libusb/archive/v1.0.26.zip -O v1.0.26.zip |
||||||
|
$STD unzip v1.0.26.zip |
||||||
|
cd libusb-1.0.26 |
||||||
|
$STD ./bootstrap.sh |
||||||
|
$STD ./configure --disable-udev --enable-shared |
||||||
|
$STD make -j $(nproc --all) |
||||||
|
|
||||||
|
$STD apt install -y --no-install-recommends libusb-1.0-0-dev |
||||||
|
|
||||||
|
cd /opt/frigate/libusb-1.0.26/libusb |
||||||
|
|
||||||
|
mkdir -p /usr/local/lib |
||||||
|
$STD /bin/bash ../libtool --mode=install /usr/bin/install -c libusb-1.0.la '/usr/local/lib' |
||||||
|
mkdir -p /usr/local/include/libusb-1.0 |
||||||
|
$STD /usr/bin/install -c -m 644 libusb.h '/usr/local/include/libusb-1.0' |
||||||
|
mkdir -p /usr/local/lib/pkgconfig |
||||||
|
cd /opt/frigate/libusb-1.0.26/ |
||||||
|
$STD /usr/bin/install -c -m 644 libusb-1.0.pc '/usr/local/lib/pkgconfig' |
||||||
|
ldconfig |
||||||
|
|
||||||
|
######## Frigate expects model files at root of filesystem |
||||||
|
#cd /opt/frigate/models |
||||||
|
cd / |
||||||
|
|
||||||
|
# Get model and labels |
||||||
|
$STD wget -O edgetpu_model.tflite https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess_edgetpu.tflite |
||||||
|
$STD wget -O cpu_model.tflite https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess.tflite |
||||||
|
|
||||||
|
#cp /opt/frigate/labelmap.txt . |
||||||
|
$STD cp /opt/frigate/labelmap.txt /labelmap.txt |
||||||
|
$STD cp -r /opt/frigate/models/public/ssdlite_mobilenet_v2/FP16 openvino-model |
||||||
|
|
||||||
|
$STD wget https://github.com/openvinotoolkit/open_model_zoo/raw/master/data/dataset_classes/coco_91cl_bkgr.txt -O openvino-model/coco_91cl_bkgr.txt |
||||||
|
sed -i 's/truck/car/g' openvino-model/coco_91cl_bkgr.txt |
||||||
|
# Get Audio Model and labels |
||||||
|
$STD wget -qO cpu_audio_model.tflite https://tfhub.dev/google/lite-model/yamnet/classification/tflite/1?lite-format=tflite |
||||||
|
$STD cp /opt/frigate/audio-labelmap.txt /audio-labelmap.txt |
||||||
|
msg_ok "Installed object detection models" |
||||||
|
|
||||||
|
msg_info "Configuring Python dependencies" |
||||||
|
cd /opt/frigate |
||||||
|
|
||||||
|
$STD apt install -y python3 python3-dev wget build-essential cmake git pkg-config libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev gfortran openexr libatlas-base-dev libssl-dev libtbb2 libtbb-dev libdc1394-22-dev libopenexr-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev gcc gfortran libopenblas-dev liblapack-dev |
||||||
|
|
||||||
|
$STD pip3 install -r docker/main/requirements.txt |
||||||
|
|
||||||
|
$STD pip3 wheel --wheel-dir=/wheels -r /opt/frigate/docker/main/requirements-wheels.txt |
||||||
|
#pip3 wheel --wheel-dir=/trt-wheels -r /opt/frigate/docker/tensorrt/requirements-amd64.txt |
||||||
|
|
||||||
|
#Copy preconfigured files |
||||||
|
$STD cp -a /opt/frigate/docker/main/rootfs/. / |
||||||
|
|
||||||
|
#exports are lost upon system reboot... |
||||||
|
#export PATH="$PATH:/usr/lib/btbn-ffmpeg/bin:/usr/local/go2rtc/bin:/usr/local/nginx/sbin" |
||||||
|
|
||||||
|
# Install dependencies |
||||||
|
$STD /opt/frigate/docker/main/install_deps.sh |
||||||
|
|
||||||
|
#Create symbolic links to ffmpeg and go2rtc |
||||||
|
$STD ln -svf /usr/lib/btbn-ffmpeg/bin/ffmpeg /usr/local/bin/ffmpeg |
||||||
|
$STD ln -svf /usr/lib/btbn-ffmpeg/bin/ffprobe /usr/local/bin/ffprobe |
||||||
|
$STD ln -svf /usr/local/go2rtc/bin/go2rtc /usr/local/bin/go2rtc |
||||||
|
|
||||||
|
$STD pip3 install -U /wheels/*.whl |
||||||
|
ldconfig |
||||||
|
msg_ok "Configured Python dependencies" |
||||||
|
|
||||||
|
msg_info "Installing NodeJS" |
||||||
|
# Install Node 16 |
||||||
|
#wget -O- https://deb.nodesource.com/setup_16.x | bash - |
||||||
|
|
||||||
|
# Install Node 21 |
||||||
|
#curl -fsSL https://deb.nodesource.com/setup_21.x | sudo -E bash - |
||||||
|
#curl -fsSL https://deb.nodesource.com/setup_21.x | bash - |
||||||
|
$STD wget https://deb.nodesource.com/setup_21.x |
||||||
|
$STD /bin/bash setup_21.x |
||||||
|
|
||||||
|
$STD apt install -y nodejs |
||||||
|
#npm install -g npm@9 |
||||||
|
$STD npm install -g npm |
||||||
|
msg_ok "Installed NodeJS" |
||||||
|
|
||||||
|
msg_info "Installing Frigate" |
||||||
|
|
||||||
|
$STD pip3 install -r /opt/frigate/docker/main/requirements-dev.txt |
||||||
|
|
||||||
|
cd /opt/frigate |
||||||
|
|
||||||
|
$STD /opt/frigate/.devcontainer/initialize.sh |
||||||
|
|
||||||
|
$STD make version |
||||||
|
|
||||||
|
# Frigate web build |
||||||
|
# This should be architecture agnostic, so speed up the build on multiarch by not using QEMU. |
||||||
|
cd /opt/frigate/web |
||||||
|
|
||||||
|
$STD npm install |
||||||
|
$STD npm run build |
||||||
|
|
||||||
|
$STD cp -r dist/BASE_PATH/monacoeditorwork/* dist/assets/ |
||||||
|
cd /opt/frigate/ |
||||||
|
$STD cp -r /opt/frigate/web/dist/* /opt/frigate/web/ |
||||||
|
|
||||||
|
### BUILD COMPLETE, NOW INITIALIZE |
||||||
|
|
||||||
|
mkdir /config |
||||||
|
$STD cp -r /opt/frigate/config/. /config |
||||||
|
$STD cp /config/config.yml.example /config/config.yml |
||||||
|
|
||||||
|
################### EDIT CONFIG FILE HERE ################ |
||||||
|
#mqtt: |
||||||
|
# enabled: False |
||||||
|
# |
||||||
|
#cameras: |
||||||
|
# Camera1: |
||||||
|
# ffmpeg: |
||||||
|
# hwaccel_args: -c:v h264_cuvid |
||||||
|
## hwaccel_args: preset-nvidia-h264 #This one is not working... |
||||||
|
# inputs: |
||||||
|
# - path: rtsp://user:password@192.168.1.123:554/h264Preview_01_main |
||||||
|
# roles: |
||||||
|
# - detect |
||||||
|
# detect: |
||||||
|
# enabled: False |
||||||
|
# width: 2560 |
||||||
|
# height: 1920 |
||||||
|
######################################################### |
||||||
|
|
||||||
|
cd /opt/frigate |
||||||
|
msg_ok "Installed Frigate" |
||||||
|
|
||||||
|
msg_info "Configuring Services" |
||||||
|
#####Start order should be: |
||||||
|
#1. Go2rtc |
||||||
|
#2. Frigate |
||||||
|
#3. Nginx |
||||||
|
|
||||||
|
### Starting go2rtc |
||||||
|
#Create systemd service. If done manually, edit the file (nano /etc/systemd/system/go2rtc.service) then copy/paste the service configuraiton |
||||||
|
go2rtc_service="$(cat << EOF |
||||||
|
|
||||||
|
[Unit] |
||||||
|
Description=go2rtc service |
||||||
|
After=network.target |
||||||
|
StartLimitIntervalSec=0 |
||||||
|
|
||||||
|
[Service] |
||||||
|
Type=simple |
||||||
|
Restart=always |
||||||
|
RestartSec=1 |
||||||
|
User=root |
||||||
|
ExecStart=bash /opt/frigate/docker/main/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/run |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=multi-user.target |
||||||
|
|
||||||
|
EOF |
||||||
|
)" |
||||||
|
|
||||||
|
echo "${go2rtc_service}" > /etc/systemd/system/go2rtc.service |
||||||
|
|
||||||
|
$STD systemctl start go2rtc |
||||||
|
$STD systemctl enable go2rtc |
||||||
|
|
||||||
|
#Allow for a small delay before starting the next service |
||||||
|
sleep 3 |
||||||
|
|
||||||
|
#Test go2rtc access at |
||||||
|
#http://<machine_ip>:1984/ |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Starting Frigate |
||||||
|
#First, comment the call to S6 in the run script |
||||||
|
sed -i '/^s6-svc -O \.$/s/^/#/' /opt/frigate/docker/main/rootfs/etc/s6-overlay/s6-rc.d/frigate/run |
||||||
|
|
||||||
|
#Second, install yq, needed by script to check database path |
||||||
|
$STD wget -O /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 |
||||||
|
chmod a+x /usr/local/bin/yq |
||||||
|
|
||||||
|
#Create systemd service |
||||||
|
frigate_service="$(cat << EOF |
||||||
|
|
||||||
|
[Unit] |
||||||
|
Description=Frigate service |
||||||
|
After=go2rtc.service |
||||||
|
StartLimitIntervalSec=0 |
||||||
|
|
||||||
|
[Service] |
||||||
|
Type=simple |
||||||
|
Restart=always |
||||||
|
RestartSec=1 |
||||||
|
User=root |
||||||
|
ExecStart=bash /opt/frigate/docker/main/rootfs/etc/s6-overlay/s6-rc.d/frigate/run |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=multi-user.target |
||||||
|
|
||||||
|
EOF |
||||||
|
)" |
||||||
|
|
||||||
|
echo "${frigate_service}" > /etc/systemd/system/frigate.service |
||||||
|
|
||||||
|
$STD systemctl start frigate |
||||||
|
$STD systemctl enable frigate |
||||||
|
|
||||||
|
#Allow for a small delay before starting the next service |
||||||
|
sleep 3 |
||||||
|
|
||||||
|
### Starting Nginx |
||||||
|
|
||||||
|
## Call nginx from absolute path |
||||||
|
## nginx --> /usr/local/nginx/sbin/nginx |
||||||
|
sed -i 's/exec nginx/exec \/usr\/local\/nginx\/sbin\/nginx/g' /opt/frigate/docker/main/rootfs/etc/s6-overlay/s6-rc.d/nginx/run |
||||||
|
|
||||||
|
#Can't log to /dev/stdout with systemd, so log to file |
||||||
|
sed -i 's/error_log \/dev\/stdout warn\;/error_log nginx\.err warn\;/' /usr/local/nginx/conf/nginx.conf |
||||||
|
sed -i 's/access_log \/dev\/stdout main\;/access_log nginx\.log main\;/' /usr/local/nginx/conf/nginx.conf |
||||||
|
|
||||||
|
#Create systemd service |
||||||
|
nginx_service="$(cat << EOF |
||||||
|
|
||||||
|
[Unit] |
||||||
|
Description=Nginx service |
||||||
|
After=frigate.service |
||||||
|
StartLimitIntervalSec=0 |
||||||
|
|
||||||
|
[Service] |
||||||
|
Type=simple |
||||||
|
Restart=always |
||||||
|
RestartSec=1 |
||||||
|
User=root |
||||||
|
ExecStart=bash /opt/frigate/docker/main/rootfs/etc/s6-overlay/s6-rc.d/nginx/run |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=multi-user.target |
||||||
|
|
||||||
|
EOF |
||||||
|
)" |
||||||
|
|
||||||
|
echo "${nginx_service}" > /etc/systemd/system/nginx.service |
||||||
|
|
||||||
|
$STD systemctl start nginx |
||||||
|
$STD systemctl enable nginx |
||||||
|
msg_ok "Configured Services" |
||||||
|
|
||||||
|
#Test frigate through Nginx access at |
||||||
|
#http://<machine_ip>:5000/ |
||||||
|
|
||||||
|
######## FULL FRIGATE CONFIG EXAMPLE: |
||||||
|
#https://docs.frigate.video/configuration/ |
||||||
|
|
||||||
|
motd_ssh |
||||||
|
customize |
||||||
|
|
||||||
|
msg_info "Cleaning up" |
||||||
|
rm /opt/frigate.tar.gz |
||||||
|
$STD apt-get autoremove |
||||||
|
$STD apt-get autoclean |
||||||
|
msg_ok "Cleaned" |
||||||
|
|
||||||
|
msg_ok "Don't forget to edit the Frigate config file (/config/config.yml) and reboot. Example configuration at https://docs.frigate.video/configuration/" |
||||||
|
msg_ok "Frigate standalone installation complete! You can access the web interface at http://<machine_ip>:5000" |
Loading…
Reference in new issue