diff --git a/.github/paths-filter.yml b/.github/paths-filter.yml index 21fb6e94f..7b8e57ae0 100644 --- a/.github/paths-filter.yml +++ b/.github/paths-filter.yml @@ -9,10 +9,10 @@ fireflyiii_fints_importer: fireflyiii_fints_importer/config.* plex_meta_manager: plex_meta_manager/config.* scrutiny_fa: scrutiny_fa/config.* spotweb: spotweb/config.* +tdarr: tdarr/config.* webtop: webtop/config.* webtop_kde: webtop_kde/config.* zoneminder: zoneminder/config.* - ################# # MANUAL BUILDS # ################# @@ -64,4 +64,4 @@ zoneminder: zoneminder/config.* #webtrees: webtrees/config.* #wger: wger/config.* #whoogle-search: whoogle-search/config.* -#xteve: xteve/config.* +#xteve: xteve/config.* diff --git a/README.md b/README.md index 4e866c187..9e83a5367 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,7 @@ https://github.com/alexbelgium/hassio-addons - [Portainer](portainer/) ![privileged][privileged-shield] ![ingress][ingress-shield] : Manage your docker environment - [Scrutiny](scrutiny/) ![support][support-shield] ![ingress][ingress-shield]: Scrutiny WebUI for smartd S.M.A.R.T monitoring - [Spotweb](spotweb/) : Spotweb is a decentralized usenet community based on the Spotnet protocol +- [Tdarr](tdarr/): Distributed transcode automation using FFmpeg/HandBrake + Audio/Video library analytics + video health checking - [Teamspeak](teamspeak/): Voice communication for online gaming, education and training. ### ✓ Multimedia distributors diff --git a/tdarr/CHANGELOG.md b/tdarr/CHANGELOG.md new file mode 100644 index 000000000..848bf5eb7 --- /dev/null +++ b/tdarr/CHANGELOG.md @@ -0,0 +1,4 @@ +## 2.00.16.3 (24-03-2022) + +- Update to latest version from haveagitgat/tdarr +- Initial build diff --git a/tdarr/Dockerfile b/tdarr/Dockerfile new file mode 100644 index 000000000..2e9fd7598 --- /dev/null +++ b/tdarr/Dockerfile @@ -0,0 +1,85 @@ +#============================# +# ALEXBELGIUM'S DOCKERFILE # +#============================# +# _.------. +# _.-` ('>.-`"""-. +# '.--'` _'` _ .--.) +# -' '-.-';` ` +# ' - _.' ``'--. +# '---` .-'""` +# /` +#=== Home Assistant Addon ===# + +################# +# 1 Build Image # +################# + +ARG BUILD_FROM +ARG BUILD_VERSION +FROM ${BUILD_FROM} + +################## +# 2 Modify Image # +################## + +################## +# 3 Install apps # +################## + +# Add rootfs +COPY rootfs/ / + +# Modules +ARG MODULES="00-banner.sh 92-local_mounts.sh 92-smb_mounts.sh" + +# Automatic modules download +RUN if ! command -v bash >/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends bash || apk add --no-cache bash) >/dev/null; fi \ + && if ! command -v curl >/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends curl || apk add --no-cache curl) >/dev/null; fi \ + && mkdir -p /etc/cont-init.d \ + && for scripts in $MODULES; do echo "$scripts" && curl -f -L -s -S "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/$scripts" -o /etc/cont-init.d/"$scripts" && [ "$(sed -n '/\/bin/p;q' /etc/cont-init.d/"$scripts")" != "" ] || (echo "script failed to install $scripts" && exit 1); done \ + && chmod -R 755 /etc/cont-init.d || printf '%s\n' "${MODULES}" >/MODULESFILE + +# Manual apps +ENV PACKAGES="libgles2-mesa libgles2-mesa-dev xorg-dev" + +# Automatic apps & bashio +RUN if ! command -v bash >/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends bash || apk add --no-cache bash) >/dev/null; fi \ + && if ! command -v curl >/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends curl || apk add --no-cache curl) >/dev/null; fi \ + && curl -f -L -s -S "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/automatic_packages.sh" --output /automatic_packages.sh \ + && chmod 777 /automatic_packages.sh \ + && eval /./automatic_packages.sh "${PACKAGES:-}" \ + && rm /automatic_packages.sh || printf '%s\n' "${PACKAGES:-}" > /ENVFILE + +################ +# 4 Entrypoint # +################ + +############ +# 5 Labels # +############ + +ARG BUILD_ARCH +ARG BUILD_DATE +ARG BUILD_DESCRIPTION +ARG BUILD_NAME +ARG BUILD_REF +ARG BUILD_REPOSITORY +ARG BUILD_VERSION +LABEL \ + io.hass.name="${BUILD_NAME}" \ + io.hass.description="${BUILD_DESCRIPTION}" \ + io.hass.arch="${BUILD_ARCH}" \ + io.hass.type="addon" \ + io.hass.version=${BUILD_VERSION} \ + maintainer="alexbelgium (https://github.com/alexbelgium)" \ + org.opencontainers.image.title="${BUILD_NAME}" \ + org.opencontainers.image.description="${BUILD_DESCRIPTION}" \ + org.opencontainers.image.vendor="Home Assistant Add-ons" \ + org.opencontainers.image.authors="alexbelgium (https://github.com/alexbelgium)" \ + org.opencontainers.image.licenses="MIT" \ + org.opencontainers.image.url="https://github.com/alexbelgium" \ + org.opencontainers.image.source="https://github.com/${BUILD_REPOSITORY}" \ + org.opencontainers.image.documentation="https://github.com/${BUILD_REPOSITORY}/blob/main/README.md" \ + org.opencontainers.image.created=${BUILD_DATE} \ + org.opencontainers.image.revision=${BUILD_REF} \ + org.opencontainers.image.version=${BUILD_VERSION} diff --git a/tdarr/README.md b/tdarr/README.md new file mode 100644 index 000000000..77b7e0cfd --- /dev/null +++ b/tdarr/README.md @@ -0,0 +1,56 @@ +# Home assistant add-on: Tdarr + +[![Donate][donation-badge]](https://www.buymeacoffee.com/alexbelgium) + +![Version](https://img.shields.io/badge/dynamic/json?label=Version&query=%24.version&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2FTdarr%2Fconfig.json) +![Ingress](https://img.shields.io/badge/dynamic/json?label=Ingress&query=%24.ingress&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2FTdarr%2Fconfig.json) +![Arch](https://img.shields.io/badge/dynamic/json?color=success&label=Arch&query=%24.arch&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2FTdarr%2Fconfig.json) + +[![Codacy Badge](https://app.codacy.com/project/badge/Grade/9c6cf10bdbba45ecb202d7f579b5be0e)](https://www.codacy.com/gh/alexbelgium/hassio-addons/dashboard?utm_source=github.com&utm_medium=referral&utm_content=alexbelgium/hassio-addons&utm_campaign=Badge_Grade) +[![GitHub Super-Linter](https://github.com/alexbelgium/hassio-addons/workflows/Lint%20Code%20Base/badge.svg)](https://github.com/marketplace/actions/super-linter) +[![Builder](https://github.com/alexbelgium/hassio-addons/workflows/Builder/badge.svg)](https://github.com/alexbelgium/hassio-addons/actions/workflows/builder.yaml) + +[donation-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee-%23d32f2f?logo=buy-me-a-coffee&style=flat&logoColor=white + +_Thanks to everyone having starred my repo! To star it click on the image below, then it will be on top right. Thanks!_ + +[![Stargazers repo roster for @alexbelgium/hassio-addons](https://reporoster.com/stars/alexbelgium/hassio-addons)](https://github.com/alexbelgium/hassio-addons/stargazers) + +## About + +[Tdarr](https://tdarr.io) is a closed-source distributed transcoding system for automating media library transcode/remux management and making sure your files are exactly how you need them to be in terms of codecs/streams/containers and so on. Put your spare hardware to use with Tdarr Nodes for Windows, Linux (including Linux arm) and macOS. + +This addon is based on the [docker image](https://hub.docker.com/r/hurlenko/Tdarr) from hurlenko. + +## Configuration + +Webui can be found at . +App documentation can be found here : https://docs.tdarr.io/docs/welcome/what/ + +```yaml +localdisks: sda1 #put the hardware name of your drive to mount separated by commas, or its label. Ex: sda1, sdb1, MYNAS... +networkdisks: "//SERVER/SHARE" # optional, list of smbv2/3 servers to mount, separated by commas +cifsusername: "username" # optional, smb username, same for all smb shares +cifspassword: "password" # optional, smb password, same for all smb shares) +``` + +## Installation + +The installation of this add-on is pretty straightforward and not different in +comparison to installing any other Hass.io add-on. + +1. [Add my Hass.io add-ons repository][repository] to your Hass.io instance. +1. Install this add-on. +1. Click the `Save` button to store your configuration. +1. Start the add-on. +1. Check the logs of the add-on to see if everything went well. +1. Carefully configure the add-on to your preferences, see the official documentation for for that. + +## Support + +Create an issue on github, or ask on the [home assistant thread](https://community.home-assistant.io/t/home-assistant-addon-Tdarr/282108/3) + +[repository]: https://github.com/alexbelgium/hassio-addons +[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg +[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg +[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg diff --git a/tdarr/apparmor.txt b/tdarr/apparmor.txt new file mode 100644 index 000000000..78c5be80d --- /dev/null +++ b/tdarr/apparmor.txt @@ -0,0 +1,56 @@ +#include + +profile db21ed7f_tdarr flags=(attach_disconnected,mediate_deleted) { + #include + + capability, + file, + signal, + mount, + umount, + remount, + network udp, + network tcp, + network dgram, + network stream, + network inet, + network inet6, + network netlink raw, + + capability setgid, + capability setuid, + capability sys_admin, + capability dac_read_search, + # capability dac_override, + # capability sys_rawio, + +# S6-Overlay + /bin/** ix, + /usr/bin/** ix, + /usr/lib/bashio/** ix, + /etc/s6/** rix, + /run/s6/** rix, + /etc/services.d/** rwix, + /etc/cont-init.d/** rwix, + /etc/cont-finish.d/** rwix, + /init rix, + /var/run/** mrwkl, + /var/run/ mrwkl, + /dev/i2c-1 mrwkl, + # Files required + /dev/sda1 mrwkl, + /dev/sdb1 mrwkl, + /dev/mmcblk0p1 mrwkl, + /dev/* mrwkl, + /tmp/** mrkwl, + + # Data access + /data/** rw, + + # suppress ptrace denials when using 'docker ps' or using 'ps' inside a container + ptrace (trace,read) peer=docker-default, + + # docker daemon confinement requires explict allow rule for signal + signal (receive) set=(kill,term) peer=/usr/bin/docker, + +} diff --git a/tdarr/build.json b/tdarr/build.json new file mode 100644 index 000000000..31c4e8f61 --- /dev/null +++ b/tdarr/build.json @@ -0,0 +1,10 @@ +{ + "build_from": { + "aarch64": "ghcr.io/haveagitgat/tdarr:latest", + "amd64": "ghcr.io/haveagitgat/tdarr:latest", + "armv7": "ghcr.io/haveagitgat/tdarr:latest" + }, + "codenotary": { + "signer": "alexandrep.github@gmail.com" + } +} diff --git a/tdarr/config.json b/tdarr/config.json new file mode 100644 index 000000000..5631d7199 --- /dev/null +++ b/tdarr/config.json @@ -0,0 +1,97 @@ +{ + "apparmor": true, + "arch": ["aarch64", "amd64", "armv7"], + "backup_exclude": [ + "*/cache/", + "*/logs/", + "*/transcoding-temp/", + "*/metadata/" + ], + "description": "Distributed transcode automation using FFmpeg/HandBrake + Audio/Video library analytics + video health checking", + "devices": [ + "/dev/sda", + "/dev/sdb", + "/dev/sdc", + "/dev/sdd", + "/dev/sde", + "/dev/sdf", + "/dev/sdg", + "/dev/nvme", + "/dev/mmcblk", + "/dev/sda1", + "/dev/sdb1", + "/dev/sdc1", + "/dev/sdd1", + "/dev/sde1", + "/dev/sdf1", + "/dev/sdg1", + "/dev/sda2", + "/dev/sdb2", + "/dev/sdc2", + "/dev/sdd2", + "/dev/sde2", + "/dev/sdf2", + "/dev/sdg2", + "/dev/sda3", + "/dev/sdb3", + "/dev/sda4", + "/dev/sdb4", + "/dev/nvme0", + "/dev/nvme1", + "/dev/nvme2" + ], + "environment": { + "serverIP": "0.0.0.0", + "serverPort": "8266", + "webUIPort": "8265", + "internalNode": "true", + "nodeID": "MyInternalNode", + "nodeIP": "0.0.0.0", + "nodePort": "8267", + "TZ": "Europe/London", + "PUID": "0", + "PGID": "0", + "NVIDIA_DRIVER_CAPABILITIES": "all", + "NVIDIA_VISIBLE_DEVICES": "all" + }, + "host_dbus": true, + "image": "ghcr.io/alexbelgium/tdarr-{arch}", + "map": [ + "media:rw", + "config:rw", + "addons:rw", + "backup:rw", + "share:rw", + "ssl:rw" + ], + "name": "Tdarr", + "options": { + "CONFIG_LOCATION": "/config/addons_config/tdarr" + }, + "panel_icon": "mdi:file-search", + "ports": { + "8265/tcp": 8265, + "8266/tcp": 8266 + }, + "ports_description": { + "8265/tcp": "Web UI port", + "8266/tcp": "Server Port" + }, + "privileged": ["SYS_ADMIN", "DAC_READ_SEARCH"], + "schema": { + "CONFIG_LOCATION": "str", + "TZ": "str?", + "cifsdomain": "str?", + "cifspassword": "str?", + "cifsusername": "str?", + "localdisks": "str?", + "networkdisks": "str?" + }, + "slug": "tdarr", + "upstream": "2.00.16.3", + "url": "https://github.com/alexbelgium/hassio-addons", + "codenotary": "alexandrep.github@gmail.com", + "version": "2.00.16.3", + "video": true, + "webui": "[PROTO:ssl]://[HOST]:[PORT:8265]" +} diff --git a/tdarr/icon.png b/tdarr/icon.png new file mode 100644 index 000000000..d6c957662 Binary files /dev/null and b/tdarr/icon.png differ diff --git a/tdarr/logo.png b/tdarr/logo.png new file mode 100644 index 000000000..d6c957662 Binary files /dev/null and b/tdarr/logo.png differ diff --git a/tdarr/rootfs/etc/cont-init.d/00-aaa_dockerfile_backup.sh b/tdarr/rootfs/etc/cont-init.d/00-aaa_dockerfile_backup.sh new file mode 100644 index 000000000..8989b365f --- /dev/null +++ b/tdarr/rootfs/etc/cont-init.d/00-aaa_dockerfile_backup.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# If dockerfile failed install manually + +############################## +# Automatic modules download # +############################## +if [ -e "/MODULESFILE" ]; then + MODULES=$(/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends bash || apk add --no-cache bash) >/dev/null; fi \ + && if ! command -v curl >/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends curl || apk add --no-cache curl) >/dev/null; fi \ + && mkdir -p /etc/cont-init.d \ + && for scripts in $MODULES; do echo "$scripts" && curl -f -L -s -S "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/$scripts" -o /etc/cont-init.d/"$scripts" && [ "$(sed -n '/\/bin/p;q' /etc/cont-init.d/"$scripts")" != "" ] || (echo "script failed to install $scripts" && exit 1); done \ + && chmod -R 755 /etc/cont-init.d +fi + +####################### +# Automatic installer # +####################### +if [ -e "/ENVFILE" ]; then + PACKAGES=$(/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends bash || apk add --no-cache bash) >/dev/null; fi \ + && if ! command -v curl >/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends curl || apk add --no-cache curl) >/dev/null; fi \ + && curl -f -L -s -S "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/automatic_packages.sh" --output /automatic_packages.sh \ + && chmod 777 /automatic_packages.sh \ + && eval /./automatic_packages.sh "${PACKAGES:-}" \ + && rm /automatic_packages.sh +fi diff --git a/tdarr/rootfs/etc/cont-init.d/00-configuration.sh b/tdarr/rootfs/etc/cont-init.d/00-configuration.sh new file mode 100644 index 000000000..c525f7f8f --- /dev/null +++ b/tdarr/rootfs/etc/cont-init.d/00-configuration.sh @@ -0,0 +1,44 @@ +#!/usr/bin/with-contenv bashio +# shellcheck shell=bash + +################# +# Set PUID PGID # +################# + +# Get from options +PGID=$(bashio::config 'PGID') +PUID=$(bashio::config 'PUID') +# If blank, set 0 +[[ "$PUID" = "null" ]] && PUID=0 +[[ "$PGID" = "null" ]] && PGID=0 +# Write in permission file +sed -i "1a PGID=$PGID" /etc/cont-init.d/01-setup-perms +sed -i "1a PUID=$PUID" /etc/cont-init.d/01-setup-perms +# Information +bashio::log.info "Setting PUID=$PUID, PGID=$PGID" + +##################### +# Set Configuration # +##################### + +# Config location +CONFIGLOCATION="$(bashio::config 'CONFIG_LOCATION')" + +# Create folder +mkdir -p "$CONFIGLOCATION" + +# Rename base folder +mv /app /tdarr +sed -i "s|/app|/tdarr|g" /etc/cont-init.d/* +sed -i "s|/app|/tdarr|g" /etc/services.d/*/run + +# Symlink configs +[ -d /tdarr/configs ] && rm -r /tdarr/configs +ln -snf "$CONFIGLOCATION" /tdarr/configs + +# Symlink server data +[ -d /tdarr/server ] && rm -r /tdarr/server/Tdarr +ln -snf "/config/addons_config/tdarr" /tdarr/server/Tdarr + +# Text +bashio::log.info "Setting config location to $CONFIGLOCATION"