From 36b584f0c6415bbc110504e8aabf8216c9f90e9f Mon Sep 17 00:00:00 2001 From: Alexandre Date: Mon, 7 Feb 2022 09:47:50 +0100 Subject: [PATCH] initial build --- plex_meta_manager/CHANGELOG.md | 1 + plex_meta_manager/Dockerfile | 108 ++++++++++++++++++ plex_meta_manager/README.md | 79 +++++++++++++ plex_meta_manager/apparmor.txt | 56 +++++++++ plex_meta_manager/build.json | 7 ++ plex_meta_manager/config.json | 32 ++++++ plex_meta_manager/icon.png | Bin 0 -> 22528 bytes plex_meta_manager/logo.png | Bin 0 -> 22528 bytes .../cont-init.d/00-aaa_dockerfile_backup.sh | 33 ++++++ .../etc/cont-init.d/20-configuration.sh | 30 +++++ 10 files changed, 346 insertions(+) create mode 100644 plex_meta_manager/CHANGELOG.md create mode 100644 plex_meta_manager/Dockerfile create mode 100644 plex_meta_manager/README.md create mode 100644 plex_meta_manager/apparmor.txt create mode 100644 plex_meta_manager/build.json create mode 100644 plex_meta_manager/config.json create mode 100644 plex_meta_manager/icon.png create mode 100644 plex_meta_manager/logo.png create mode 100644 plex_meta_manager/rootfs/etc/cont-init.d/00-aaa_dockerfile_backup.sh create mode 100644 plex_meta_manager/rootfs/etc/cont-init.d/20-configuration.sh diff --git a/plex_meta_manager/CHANGELOG.md b/plex_meta_manager/CHANGELOG.md new file mode 100644 index 000000000..68dde260e --- /dev/null +++ b/plex_meta_manager/CHANGELOG.md @@ -0,0 +1 @@ +- Initial build diff --git a/plex_meta_manager/Dockerfile b/plex_meta_manager/Dockerfile new file mode 100644 index 000000000..d57eec952 --- /dev/null +++ b/plex_meta_manager/Dockerfile @@ -0,0 +1,108 @@ +#============================# +# ALEXBELGIUM'S DOCKERFILE # +#============================# +# _.------. +# _.-` ('>.-`"""-. +# '.--'` _'` _ .--.) +# -' '-.-';` ` +# ' - _.' ``'--. +# '---` .-'""` +# /` +#=== Home Assistant Addon ===# + +################# +# 1 Build Image # +################# + +ARG BUILD_FROM +ARG BUILD_VERSION +FROM ${BUILD_FROM} + +################## +# 2 Modify Image # +################## + +ENV HOME=/config/addons_config/plex-data-manager + +RUN \ + # use /data instead of /config for hass.io environment + sed -i "s|/config|/config/addons_config/plex-meta-manager|g" /etc/services.d/*/run \ + && sed -i "s|/config|/config/addons_config/plex-meta-manager|g" /etc/cont-init.d/* \ + \ + # Allow UID and GID setting + && sed -i 's/bash/bashio/g' /etc/cont-init.d/10-adduser \ + && sed -i 's/{PUID:-911}/(bashio::config "PUID")/g' /etc/cont-init.d/10-adduser \ + && sed -i 's/{PGID:-911}/(bashio::config "PGID")/g' /etc/cont-init.d/10-adduser \ + \ + # Add template config.yaml + && mkdir /templates \ + && curl -L -f -s -S "https://github.com/meisnate12/Plex-Meta-Manager/blob/master/config/config.yml.template" -o /templates/config.yaml + + +################## +# 3 Install apps # +################## + +# Add rootfs +COPY rootfs/ / + +# Modules +ARG MODULES="00-banner.sh 00-global_var.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 curl -L -f -s -S "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/$scripts" -o /etc/cont-init.d/"$scripts" || (echo "script failed to install $scripts" && exit 1); done \ + && chmod -R 755 /etc/cont-init.d + +# Manual apps +ENV PACKAGES="" + +# 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 -L -f -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 + +################ +# 4 Entrypoint # +################ + +#RUN chmod 777 /entrypoint.sh +#WORKDIR / +#ENTRYPOINT [ "/usr/bin/env" ] +#CMD [ "/entrypoint.sh" ] +#SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +############ +# 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/plex_meta_manager/README.md b/plex_meta_manager/README.md new file mode 100644 index 000000000..84b8ec96f --- /dev/null +++ b/plex_meta_manager/README.md @@ -0,0 +1,79 @@ +# Home assistant add-on: Plex-meta-manager + +[![Donate][donation-badge]](https://www.buymeacoffee.com/alexbelgium) + +[donation-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee-%23d32f2f?logo=buy-me-a-coffee&style=flat&logoColor=white + +![Supports + Architecture][aarch64-shield] ![Supports amd64 Architecture][amd64-shield] ![Supports armv7 Architecture][armv7-shield] +![Supports smb mounts][smb-shield] + +_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 + +--- + +[Plex-meta-manager](https://plex-meta-manager.video/) is a Python 3 script that can be continuously run using YAML configuration files to update on a schedule the metadata of the movies, shows, and collections in your libraries as well as automatically build collections based on various methods all detailed in the wiki. + +This addon is based on the docker image https://github.com/linuxserver/docker-plex-meta-manager + +## Installation + +--- + +The installation of this add-on is pretty straightforward and not different in comparison to installing any other add-on. + +1. Add my add-ons repository to your home assistant instance (in supervisor addons store at top right, or click button below if you have configured my HA) + [![Open your Home Assistant instance and show the add add-on repository dialog with a specific repository URL pre-filled.](https://my.home-assistant.io/badges/supervisor_add_addon_repository.svg)](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Falexbelgium%2Fhassio-addons) +1. Install this add-on. +1. Click the `Save` button to store your configuration. +1. Set the add-on options to your preferences +1. Start the add-on. +1. Check the logs of the add-on to see if everything went well. +1. Open the webUI and adapt the software options + +## Configuration + +There is a [walkthrough](https://github.com/meisnate12/Plex-Meta-Manager/wiki/Docker-Walkthrough#setting-up-the-initial-config-file) available to help get you up and running. +For more information see the [official wiki](https://github.com/meisnate12/Plex-Meta-Manager/wiki). + +Options can be configured through two ways : + +- Addon options + +```yaml +CONFIG_LOCATION: location of the config.yaml # Sets the location of the config.yaml (see below) +PUID: 1000 #for UserID - see below for explanation +PGID: 1000 #for GroupID - see below for explanation +TZ: Europe/London #Specify a timezone to use EG Europe/London. +PMM_CONFIG: /config/addons_config/plex-data-manager/config/config.yml #Specify a custom config file to use. +PMM_TIME: 03:00 #Comma-separated list of times to update each day. Format: HH:MM. +PMM_RUN: False #Set to True to run without the scheduler. +PMM_TEST: False #Set to True to run in debug mode with only collections that have test: true. +PMM_NO_MISSING: False #Set to True to run without any of the missing movie/show functions. +``` + +- Config.yaml + +Additional variables can be set as ENV variables by adding them in the config.yaml in the location defined in your addon options + +The complete list of ENV variables can be seen here : https://github.com/meisnate12/Plex-Meta-Manager/wiki/Run-Commands-&-Environmental-Variables + +## Support + +Create an issue on github + +## Illustration + +--- + +![illustration](https://dausruddin.com/wp-content/uploads/2020/05/plex-meta-manager-v3-1024x515.png) + +[repository]: https://github.com/alexbelgium/hassio-addons +[smb-shield]: https://img.shields.io/badge/smb-yes-green.svg +[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/plex_meta_manager/apparmor.txt b/plex_meta_manager/apparmor.txt new file mode 100644 index 000000000..0ce1f85fb --- /dev/null +++ b/plex_meta_manager/apparmor.txt @@ -0,0 +1,56 @@ +#include + +profile plex-meta-manager_addon 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/plex_meta_manager/build.json b/plex_meta_manager/build.json new file mode 100644 index 000000000..bae4f216e --- /dev/null +++ b/plex_meta_manager/build.json @@ -0,0 +1,7 @@ +{ + "build_from": { + "armv7": "linuxserver/plex-meta-manager:arm32v7-latest", + "aarch64": "linuxserver/plex-meta-manager:arm64v8-latest", + "amd64": "linuxserver/plex-meta-manager:amd64-latest" + } +} diff --git a/plex_meta_manager/config.json b/plex_meta_manager/config.json new file mode 100644 index 000000000..7f7c39a5b --- /dev/null +++ b/plex_meta_manager/config.json @@ -0,0 +1,32 @@ +{ + "name": "Plex meta manager", + "version": "1.0", + "slug": "plex-meta-manager", + "description": "Python script to update metadata information for movies, shows, and collections as well as automatically build collections", + "url": "https://github.com/alexbelgium/hassio-addons/tree/master/plex_meta_manager", + "apparmor": true, + "arch": ["aarch64", "amd64", "armv7"], + "boot": "auto", + "upstream": "1.0", + "devices": [], + "image": "ghcr.io/alexbelgium/plex-media-manager-{arch}", + "environment": {}, + "map": ["config:rw"], + "options": { + "PUID": 0, + "PGID": 0, + "HOME": "/config/addons_config/plex-data-manager" + }, + "privileged": ["SYS_ADMIN", "DAC_READ_SEARCH"], + "schema": { + "PUID": "bool", + "PGID": "bool", + "TZ": "str?", + "HOME": "str", + "PMM_CONFIG": "str?", + "PMM_TIME": "str?", + "PMM_RUN": "bool?", + "PMM_TEST": "bool?", + "PMM_NO_MISSING": "bool?" + } +} diff --git a/plex_meta_manager/icon.png b/plex_meta_manager/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9caa607c098abee9a7440ce6c58d7a83948c23bd GIT binary patch literal 22528 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 V+9q0X4VU/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 curl -L -f -s -S "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/$scripts" -o /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 + echo "Executing script" + 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 -L -f -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/plex_meta_manager/rootfs/etc/cont-init.d/20-configuration.sh b/plex_meta_manager/rootfs/etc/cont-init.d/20-configuration.sh new file mode 100644 index 000000000..fe1e0c221 --- /dev/null +++ b/plex_meta_manager/rootfs/etc/cont-init.d/20-configuration.sh @@ -0,0 +1,30 @@ +#!/usr/bin/with-contenv bashio + +################## +# Create folders # +################## + +PUID=$(bashio::config 'PUID') +GUID=$(bashio::config 'GUID') + +if [ ! -d /config/addons_config/plex-meta-manager ]; then + echo "Creating /config/addons_config/plex-meta-manager" + mkdir -p /config/addons_config/plex-meta-manager +fi + +chown -R "$PUID":"$GUID" /config/addons_config/plex-meta-manager + +################### +# Set config.yaml # +################### + +# Where is the config +CONFIGSOURCE=$(bashio::config "HOME") + +# Check if config file is there, or create one from template +if [ -f $CONFIGSOURCE/config.yml ]; then + echo "Using config file found in $CONFIGSOURCE" +else + echo "No config file, creating one from template" + cp /templates/config.yml "$(dirname "${CONFIGSOURCE}")" +fi