frigate-support.sh 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #!/usr/bin/env bash
  2. # Copyright (c) 2021-2023 tteck
  3. # Author: tteck (tteckster)
  4. # License: MIT
  5. # https://github.com/tteck/Proxmox/raw/main/LICENSE
  6. function header_info {
  7. clear
  8. cat <<"EOF"
  9. ____ _ __ ____ __
  10. / __/___(_)__ ____ _/ /____ / __/_ _____ ___ ___ ____/ /_
  11. / _// __/ / _ `/ _ `/ __/ -_) _\ \/ // / _ \/ _ \/ _ \/ __/ __/
  12. /_/ /_/ /_/\_, /\_,_/\__/\__/ /___/\_,_/ .__/ .__/\___/_/ \__/
  13. /___/ /_/ /_/
  14. EOF
  15. }
  16. header_info
  17. while true; do
  18. read -p "This will Prepare a LXC Container for Frigate. Proceed (y/n)?" yn
  19. case $yn in
  20. [Yy]*) break ;;
  21. [Nn]*) exit ;;
  22. *) echo "Please answer yes or no." ;;
  23. esac
  24. done
  25. header_info
  26. # The array of device types
  27. # CHAR_DEVS+=(major:minor)
  28. CHAR_DEVS+=("1:1") # mem
  29. CHAR_DEVS+=("29:0") # fb0
  30. CHAR_DEVS+=("188:.*") # ttyUSB*
  31. CHAR_DEVS+=("189:.*") # bus/usb/*
  32. CHAR_DEVS+=("226:0") # card0
  33. CHAR_DEVS+=("226:128") # renderD128
  34. # Proccess char device string
  35. for char_dev in ${CHAR_DEVS[@]}; do
  36. [ ! -z "${CHAR_DEV_STRING-}" ] && CHAR_DEV_STRING+=" -o"
  37. CHAR_DEV_STRING+=" -regex \".*/${char_dev}\""
  38. done
  39. # Store autodev hook script in a variable
  40. read -r -d '' HOOK_SCRIPT <<-EOF || true
  41. for char_dev in \$(find /sys/dev/char -regextype sed $CHAR_DEV_STRING); do
  42. dev="/dev/\$(sed -n "/DEVNAME/ s/^.*=\(.*\)$/\1/p" \${char_dev}/uevent)";
  43. mkdir -p \$(dirname \${LXC_ROOTFS_MOUNT}\${dev});
  44. for link in \$(udevadm info --query=property \$dev | sed -n "s/DEVLINKS=//p"); do
  45. mkdir -p \${LXC_ROOTFS_MOUNT}\$(dirname \$link);
  46. cp -dpR \$link \${LXC_ROOTFS_MOUNT}\${link};
  47. done;
  48. cp -dpR \$dev \${LXC_ROOTFS_MOUNT}\${dev};
  49. done;
  50. EOF
  51. # Remove newline char from the variable
  52. HOOK_SCRIPT=${HOOK_SCRIPT//$'\n'/}
  53. # Generate menu of LXC containers in current node
  54. NODE=$(hostname)
  55. while read -r line; do
  56. TAG=$(echo "$line" | awk '{print $1}')
  57. ITEM=$(echo "$line" | awk '{print substr($0,36)}')
  58. OFFSET=2
  59. if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
  60. MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
  61. fi
  62. CTID_MENU+=("$TAG" "$ITEM " "OFF")
  63. done < <(pct list | awk 'NR>1')
  64. # Selection menu for LXC containers
  65. while [ -z "${CTID:+x}" ]; do
  66. CTID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Containers on $NODE" --radiolist \
  67. "\nSelect a container to add support:\n" \
  68. 16 $(($MSG_MAX_LENGTH + 23)) 6 \
  69. "${CTID_MENU[@]}" 3>&1 1>&2 2>&3) || exit
  70. done
  71. # Add autodev settings
  72. CTID_CONFIG_PATH=/etc/pve/lxc/${CTID}.conf
  73. sed '/autodev/d' $CTID_CONFIG_PATH >CTID.conf
  74. cat CTID.conf >$CTID_CONFIG_PATH
  75. cat <<EOF >>$CTID_CONFIG_PATH
  76. lxc.autodev: 1
  77. lxc.hook.autodev: bash -c '$HOOK_SCRIPT'
  78. EOF
  79. echo -e "\e[1;33m \nFinished....Reboot ${CTID} LXC to apply the changes.\n \e[0m"
  80. # In the Proxmox web shell run
  81. # bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/frigate-support.sh)"
  82. # Reboot the LXC to apply the changes