From 2ec284f69b9e7e7300a34bdba4a4b065693a30c5 Mon Sep 17 00:00:00 2001 From: Alexandre Pary Date: Wed, 13 Oct 2021 11:16:08 +0200 Subject: [PATCH] Initial build --- readarr/CHANGELOG.md | 1 + readarr/Dockerfile | 66 ++++++++++++++++ readarr/Readme.md | 61 +++++++++++++++ readarr/apparmor.txt | 48 ++++++++++++ readarr/build.json | 8 ++ readarr/config.json | 55 +++++++++++++ readarr/icon.png | Bin 0 -> 18350 bytes readarr/logo.png | Bin 0 -> 18350 bytes readarr/root/etc/cont-init.d/00-banner.sh | 39 ++++++++++ readarr/root/etc/cont-init.d/00-ha-env | 5 ++ readarr/root/etc/cont-init.d/20-folders | 19 +++++ .../etc/cont-init.d/92-local_mounts_v1.1.sh | 26 +++++++ .../etc/cont-init.d/92-smb_mounts_v1.5.sh | 72 ++++++++++++++++++ 13 files changed, 400 insertions(+) create mode 100644 readarr/CHANGELOG.md create mode 100644 readarr/Dockerfile create mode 100644 readarr/Readme.md create mode 100644 readarr/apparmor.txt create mode 100644 readarr/build.json create mode 100644 readarr/config.json create mode 100644 readarr/icon.png create mode 100644 readarr/logo.png create mode 100644 readarr/root/etc/cont-init.d/00-banner.sh create mode 100644 readarr/root/etc/cont-init.d/00-ha-env create mode 100644 readarr/root/etc/cont-init.d/20-folders create mode 100644 readarr/root/etc/cont-init.d/92-local_mounts_v1.1.sh create mode 100644 readarr/root/etc/cont-init.d/92-smb_mounts_v1.5.sh diff --git a/readarr/CHANGELOG.md b/readarr/CHANGELOG.md new file mode 100644 index 000000000..93f181116 --- /dev/null +++ b/readarr/CHANGELOG.md @@ -0,0 +1 @@ +- Initial release (nightly builds) diff --git a/readarr/Dockerfile b/readarr/Dockerfile new file mode 100644 index 000000000..db45d9ff3 --- /dev/null +++ b/readarr/Dockerfile @@ -0,0 +1,66 @@ +ARG BUILD_FROM +ARG BUILD_VERSION +FROM ${BUILD_FROM} +ARG BASHIO_VERSION=0.13.1 + +RUN \ + ################ + # Install apps # + ################ + apt-get clean \ + && apt-get update \ + && apt-get install -y \ + jq \ + curl \ + cifs-utils \ + keyutils \ + samba \ + \ + ################### + # Install bashio # + ################## + && mkdir -p /tmp/bashio \ + && curl -L -f -s "https://github.com/hassio-addons/bashio/archive/v${BASHIO_VERSION}.tar.gz" \ + | tar -xzf - --strip 1 -C /tmp/bashio \ + && mv /tmp/bashio/lib /usr/lib/bashio \ + && ln -s /usr/lib/bashio/bashio /usr/bin/bashio \ + && rm -rf /tmp/bashio \ + \ + # use /data instead of /config for hass.io environment + && sed -i "s|/config|/config/readarr|g" /etc/services.d/readarr/run \ + && sed -i "s|/config|/config/readarr|g" /etc/cont-init.d/30-config \ + \ + # 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 + +# copy local files +COPY root/ / + +### 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/readarr/Readme.md b/readarr/Readme.md new file mode 100644 index 000000000..a389fa326 --- /dev/null +++ b/readarr/Readme.md @@ -0,0 +1,61 @@ +# Home assistant add-on: readarr + +![Supports aarch64 Architecture][aarch64-shield] ![Supports amd64 Architecture][amd64-shield] ![Supports armhf Architecture][armhf-shield] ![Supports armv7 Architecture][armv7-shield] +![Supports smb mounts][smb-shield] + +# About + +--- + +[Readarr](https://github.com/Readarr/Readarr) is book Manager and Automation (Sonarr for Ebooks). +This addon is based on the docker image https://github.com/linuxserver/docker-readarr + +# 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 + +--- + +Webui can be found at . +The default username/password : described in the startup log. +Configurations can be done through the app webUI, except for the following options + +```yaml +GUID: user +GPID: user +TZ: timezone +localdisks: "sda1" # Optional +networkdisks: "//SERVER/SHARE" # optional, list of smb servers to mount, separated by commas +cifsusername: "username" # optional, smb username, same for all smb shares +cifspassword: "password" # optional, smb password +``` + +## Support + +Create an issue on github + +# Illustration + +--- + +![illustration](https://www.geekzone.fr/wp-content/uploads/2018/05/readarr_1.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 +[armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg +[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg diff --git a/readarr/apparmor.txt b/readarr/apparmor.txt new file mode 100644 index 000000000..2a2fbdb93 --- /dev/null +++ b/readarr/apparmor.txt @@ -0,0 +1,48 @@ +#include + +profile readarr_addon flags=(attach_disconnected,mediate_deleted) { + #include + + capability, + file, + mount, + umount, + remount, + + 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/readarr/build.json b/readarr/build.json new file mode 100644 index 000000000..aa47149e5 --- /dev/null +++ b/readarr/build.json @@ -0,0 +1,8 @@ +{ + "build_from": { + "armhf": "linuxserver/readarr:arm32v7-nightly", + "armv7": "linuxserver/readarr:arm32v7-nightly", + "aarch64": "linuxserver/readarr:arm64v8-nightly", + "amd64": "linuxserver/readarr:amd64-nightly" + } +} diff --git a/readarr/config.json b/readarr/config.json new file mode 100644 index 000000000..ebb179480 --- /dev/null +++ b/readarr/config.json @@ -0,0 +1,55 @@ +{ + "arch": ["aarch64", "amd64", "armv7", "armhf"], + "boot": "auto", + "description": "Book Manager and Automation", + "devices": [ + "/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" + ], + "environment": { + "PUID": "0", + "PGID": "0" + }, + "map": ["config:rw", "share:rw", "media:rw", "config:rw"], + "name": "readarr NAS", + "options": { + "PUID": 0, + "PGID": 0, + "networkdisks": ",", + "cifsusername": "", + "cifspassword": "" + }, + "ports": { + "8787/tcp": 8787 + }, + "ports_description": { + "8787/tcp": "web interface" + }, + "privileged": ["SYS_ADMIN", "DAC_READ_SEARCH"], + "schema": { + "PUID": "int", + "PGID": "int", + "TZ": "str?", + "localdisks": "str?", + "networkdisks": "str?", + "cifsusername": "str?", + "cifspassword": "str?" + }, + "slug": "readarr_nas", + "upstream": "0.8.1.2135-ls63", + "url": "https://github.com/alexbelgium/hassio-addons", + "version": "0.8.1.2135-ls63-2", + "webui": "http://[HOST]:[PORT:8787]" +} diff --git a/readarr/icon.png b/readarr/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2ce063920a758a6ab703cd9e6a3b73a02537ca8f GIT binary patch literal 18350 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 z /var/run/s6/container_environment/$k +done diff --git a/readarr/root/etc/cont-init.d/20-folders b/readarr/root/etc/cont-init.d/20-folders new file mode 100644 index 000000000..b6edad0e9 --- /dev/null +++ b/readarr/root/etc/cont-init.d/20-folders @@ -0,0 +1,19 @@ +#!/usr/bin/with-contenv bash + +if [ ! -d /share/music ]; then + echo "Creating /share/music" + mkdir -p /share/music + chown -R abc:abc /share/music +fi + +if [ ! -d /share/downloads ]; then + echo "Creating /share/downloads" + mkdir -p /share/downloads + chown -R abc:abc /share/downloads +fi + +if [ ! -d /config/readarr ]; then + echo "Creating /config/readarr" + mkdir -p /config/readarr + chown -R abc:abc /config/readarr +fi diff --git a/readarr/root/etc/cont-init.d/92-local_mounts_v1.1.sh b/readarr/root/etc/cont-init.d/92-local_mounts_v1.1.sh new file mode 100644 index 000000000..bdefdc56b --- /dev/null +++ b/readarr/root/etc/cont-init.d/92-local_mounts_v1.1.sh @@ -0,0 +1,26 @@ +#!/usr/bin/with-contenv bashio + +###################### +# MOUNT LOCAL SHARES # +###################### + +bashio::log.info 'Mounting external hdd...' + +# Mount local Share if configured and if Protection Mode is active +if bashio::config.has_value 'localdisks'; then + MOREDISKS=$(bashio::config 'localdisks') + bashio::log.info "Local Disks mounting.. ${MOREDISKS}" && \ + for disk in ${MOREDISKS//,/ } # Separate comma separated values + do + bashio::log.info "Mount ${disk}" + mkdir -p /share/$disk && \ + if [ ! -d /share/$disk ]; then + echo "Creating /share/$disk" + mkdir -p /share/$disk + chown -R abc:abc /share/$disk + fi + mount /dev/$disk /share/$disk && \ + bashio::log.info "Success!" + done || \ + bashio::log.warning "Protection mode is ON. Unable to mount local drives!" +fi diff --git a/readarr/root/etc/cont-init.d/92-smb_mounts_v1.5.sh b/readarr/root/etc/cont-init.d/92-smb_mounts_v1.5.sh new file mode 100644 index 000000000..a31ade114 --- /dev/null +++ b/readarr/root/etc/cont-init.d/92-smb_mounts_v1.5.sh @@ -0,0 +1,72 @@ +#!/usr/bin/with-contenv bashio + +#################### +# MOUNT SMB SHARES # +#################### +if bashio::config.has_value 'networkdisks'; then + + # Define variables + MOREDISKS=$(bashio::config 'networkdisks') + CIFS_USERNAME=$(bashio::config 'cifsusername') + CIFS_PASSWORD=$(bashio::config 'cifspassword') + MOUNTED=false + SMBVERS="" + SECVERS="" + + # Dont execute if still default + [ ${MOREDISKS::1} == "<" ] && exit 0 + + # Mount CIFS Share if configured and if Protection Mode is active + bashio::log.info 'Mounting smb share(s)...' + + if bashio::config.has_value 'cifsdomain'; then + DOMAIN=",domain=$(bashio::config 'cifsdomain')" + else + DOMAIN="" + fi + + # Mounting disks + for disk in ${MOREDISKS//,/ } # Separate comma separated values + do + # Clean name of network share + disk=$(echo $disk | sed "s,/$,,") # Remove / at end of name + diskname=${disk//\\//} #replace \ with / + diskname=${diskname##*/} # Get only last part of the name + # Prepare mount point + mkdir -p /mnt/$diskname + chown -R root:root /mnt/$diskname + + #Tries to mount with default options + mount -t cifs -o rw,username=$CIFS_USERNAME,password=${CIFS_PASSWORD}$DOMAIN $disk /mnt/$diskname 2>ERRORCODE && MOUNTED=true || MOUNTED=false + + # if Fail test different smb and sec versions + if [ $MOUNTED = false ]; then + for SMBVERS in ",vers=3" ",vers=1.0" ",vers=2.1" ",vers=3.0" ",nodfs" ",uid=0,gid=0,forceuid,forcegid" ",noforceuid,noforcegid" ",${DOMAIN}" + do + mount -t cifs -o rw,file_mode=0777,dir_mode=0777,username=$CIFS_USERNAME,password=${CIFS_PASSWORD}$SMBVERS $disk /mnt/$diskname 2>/dev/null && MOUNTED=true && break || MOUNTED=false + for SECVERS in ",sec=ntlmi" ",sec=ntlmv2" ",sec=ntlmv2i" ",sec=ntlmssp" ",sec=ntlmsspi" ",sec=ntlm" ",sec=krb5i" ",sec=krb5" ",iocharset=utf8" + do + mount -t cifs -o rw,file_mode=0777,dir_mode=0777,username=$CIFS_USERNAME,password=${CIFS_PASSWORD}$SMBVERS$SECVERS $disk /mnt/$disk name 2>/dev/null && MOUNTED=true && break 2 && break || MOUNTED=false + done + done + fi + + # Test smbclient if not mounted yet + if [ $MOUNTED = false ]; then + smbclient -L $disk -U $CIFS_USERNAME%$CIFS_PASSWORD --option="client min protocol"="NT1" && \ + bashio::log.info "Mounted with smbclient" + fi + + # Messages + if [ $MOUNTED = true ]; then + #Test write permissions + touch /mnt/$diskname/testaze && rm /mnt/$diskname/testaze && bashio::log.info "... $disk successfully mounted to /mnt/$diskname with options $SMBVERS$SECVERS" || bashio::log.fatal "Disk is mounted, however unable to write in the shared disk. Please check UID/GID for permissions, and if the share is rw" + else + # message if still fail + bashio::log.fatal "Unable to mount $disk to /mnt/$diskname with username $CIFS_USERNAME, $CIFS_PASSWORD. Please check your remote share path, username, password, domain, try putting 0 in UID and GID" # Mount share + bashio::log.fatal "Error read : $(