From 7c3322a6d47e7e9efdfdc800c2cbe5680bc05719 Mon Sep 17 00:00:00 2001 From: Bogdan Vlaicu Date: Sat, 11 Apr 2020 10:19:17 -0400 Subject: [PATCH] MiniDLNA add-on --- minidlna/Dockerfile | 2 +- minidlna/config.json | 2 +- minidlna/rootfs/etc/cont-init.d/20-dirs.sh | 12 +++ minidlna/rootfs/etc/cont-init.d/30-mount.sh | 11 +++ .../rootfs/etc/cont-init.d/40-dirs-torrent.sh | 12 +++ .../etc/cont-init.d/41-dirs-incomplete.sh | 12 +++ minidlna/rootfs/etc/minidlna.conf | 91 +++++++++++++++++++ .../rootfs/etc/services.d/minidlna/finish | 9 ++ minidlna/rootfs/etc/services.d/minidlna/run | 10 ++ 9 files changed, 159 insertions(+), 2 deletions(-) create mode 100644 minidlna/rootfs/etc/cont-init.d/20-dirs.sh create mode 100644 minidlna/rootfs/etc/cont-init.d/30-mount.sh create mode 100644 minidlna/rootfs/etc/cont-init.d/40-dirs-torrent.sh create mode 100644 minidlna/rootfs/etc/cont-init.d/41-dirs-incomplete.sh create mode 100644 minidlna/rootfs/etc/minidlna.conf create mode 100644 minidlna/rootfs/etc/services.d/minidlna/finish create mode 100644 minidlna/rootfs/etc/services.d/minidlna/run diff --git a/minidlna/Dockerfile b/minidlna/Dockerfile index 7e16219..775c14e 100644 --- a/minidlna/Dockerfile +++ b/minidlna/Dockerfile @@ -2,7 +2,7 @@ ARG BUILD_FROM=hassioaddons/base-amd64:1.2.0 FROM ${BUILD_FROM} # Copy root filesystem -#COPY rootfs / +COPY rootfs / # Setup base RUN apk add --no-cache minidlna diff --git a/minidlna/config.json b/minidlna/config.json index 50803e7..dfe3ac9 100644 --- a/minidlna/config.json +++ b/minidlna/config.json @@ -1,6 +1,6 @@ { "name": "MiniDLNA", - "version": "0.0.2", + "version": "0.0.3", "slug": "minidlna", "description": "RedyMedia MiniDLNA daemon serves media files (music, pictures, and video) to clients on a network", "url": "https://github.com/bvlaicu/home-assistant-addons/tree/master/minidlna", diff --git a/minidlna/rootfs/etc/cont-init.d/20-dirs.sh b/minidlna/rootfs/etc/cont-init.d/20-dirs.sh new file mode 100644 index 0000000..a337776 --- /dev/null +++ b/minidlna/rootfs/etc/cont-init.d/20-dirs.sh @@ -0,0 +1,12 @@ +#!/usr/bin/with-contenv bash +# ============================================================================== +# Community Hass.io Add-ons: torrdlna +# Ensures necessary directories exists +# ============================================================================== +# shellcheck disable=SC1091 +source /usr/lib/hassio-addons/base.sh + +if ! hass.directory_exists '/share/hdd'; then + mkdir -p /share/hdd || hass.die 'Could not create hdd mount directory' + chmod -R 0777 /share/hdd +fi diff --git a/minidlna/rootfs/etc/cont-init.d/30-mount.sh b/minidlna/rootfs/etc/cont-init.d/30-mount.sh new file mode 100644 index 0000000..6e57994 --- /dev/null +++ b/minidlna/rootfs/etc/cont-init.d/30-mount.sh @@ -0,0 +1,11 @@ +#!/usr/bin/with-contenv bash +# ============================================================================== +# Community Hass.io Add-ons: torrdlna +# Ensures necessary mounting is done +# ============================================================================== +# shellcheck disable=SC1091 +source /usr/lib/hassio-addons/base.sh + +if ! grep -qs '/share/hdd' /proc/mounts; then + mount /dev/sda1 /share/hdd || hass.die 'Could not mount hdd' +fi diff --git a/minidlna/rootfs/etc/cont-init.d/40-dirs-torrent.sh b/minidlna/rootfs/etc/cont-init.d/40-dirs-torrent.sh new file mode 100644 index 0000000..3169b41 --- /dev/null +++ b/minidlna/rootfs/etc/cont-init.d/40-dirs-torrent.sh @@ -0,0 +1,12 @@ +#!/usr/bin/with-contenv bash +# ============================================================================== +# Community Hass.io Add-ons: torrdlna +# Ensures necessary directories exists +# ============================================================================== +# shellcheck disable=SC1091 +source /usr/lib/hassio-addons/base.sh + +if ! hass.directory_exists '/share/hdd/torrents'; then + mkdir -p /share/hdd/torrents || hass.die 'Could not create hdd torrents directory' + chmod -R 0777 /share/hdd/torrents +fi diff --git a/minidlna/rootfs/etc/cont-init.d/41-dirs-incomplete.sh b/minidlna/rootfs/etc/cont-init.d/41-dirs-incomplete.sh new file mode 100644 index 0000000..3a28ee6 --- /dev/null +++ b/minidlna/rootfs/etc/cont-init.d/41-dirs-incomplete.sh @@ -0,0 +1,12 @@ +#!/usr/bin/with-contenv bash +# ============================================================================== +# Community Hass.io Add-ons: torrdlna +# Ensures necessary directories exists +# ============================================================================== +# shellcheck disable=SC1091 +source /usr/lib/hassio-addons/base.sh + +if ! hass.directory_exists '/share/hdd/incomplete'; then + mkdir -p /share/hdd/incomplete || hass.die 'Could not create hdd torrents incomplete directory' + chmod -R 0777 /share/hdd/incomplete +fi diff --git a/minidlna/rootfs/etc/minidlna.conf b/minidlna/rootfs/etc/minidlna.conf new file mode 100644 index 0000000..e6b1810 --- /dev/null +++ b/minidlna/rootfs/etc/minidlna.conf @@ -0,0 +1,91 @@ +# port for HTTP (descriptions, SOAP, media transfer) traffic +port=8200 + +# network interfaces to serve, comma delimited +#network_interface=eth0 + +# specify the user account name or uid to run as +#user=jmaggard + +# set this to the directory you want scanned. +# * if you want multiple directories, you can have multiple media_dir= lines +# * if you want to restrict a media_dir to specific content types, you +# can prepend the types, followed by a comma, to the directory: +# + "A" for audio (eg. media_dir=A,/home/jmaggard/Music) +# + "V" for video (eg. media_dir=V,/home/jmaggard/Videos) +# + "P" for images (eg. media_dir=P,/home/jmaggard/Pictures) +# + "PV" for pictures and video (eg. media_dir=PV,/home/jmaggard/digital_camera) +media_dir=/share/hdd/torrents + +# set this to merge all media_dir base contents into the root container +# note: the default is no +#merge_media_dirs=no + +# set this if you want to customize the name that shows up on your clients +#friendly_name=My DLNA Server + +# set this if you would like to specify the directory where you want MiniDLNA to store its database and album art cache +#db_dir=/var/cache/minidlna + +# set this if you would like to specify the directory where you want MiniDLNA to store its log file +#log_dir=/var/log + +# set this to change the verbosity of the information that is logged +# each section can use a different level: off, fatal, error, warn, info, or debug +#log_level=general,artwork,database,inotify,scanner,metadata,http,ssdp,tivo=warn + +# this should be a list of file names to check for when searching for album art +# note: names should be delimited with a forward slash ("/") +album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg + +# set this to no to disable inotify monitoring to automatically discover new files +# note: the default is yes +inotify=yes + +# set this to yes to enable support for streaming .jpg and .mp3 files to a TiVo supporting HMO +enable_tivo=no + +# set this to beacon to use legacy broadcast discovery method +# defauts to bonjour if avahi is available +tivo_discovery=bonjour + +# set this to strictly adhere to DLNA standards. +# * This will allow server-side downscaling of very large JPEG images, +# which may hurt JPEG serving performance on (at least) Sony DLNA products. +strict_dlna=no + +# default presentation url is http address on port 80 +#presentation_url=http://www.mylan/index.php + +# notify interval in seconds. default is 895 seconds. +notify_interval=900 + +# serial and model number the daemon will report to clients +# in its XML description +serial=12345678 +model_number=1 + +# specify the path to the MiniSSDPd socket +#minissdpdsocket=/var/run/minissdpd.sock + +# use different container as root of the tree +# possible values: +# + "." - use standard container (this is the default) +# + "B" - "Browse Directory" +# + "M" - "Music" +# + "V" - "Video" +# + "P" - "Pictures" +# + Or, you can specify the ObjectID of your desired root container (eg. 1$F for Music/Playlists) +# if you specify "B" and client device is audio-only then "Music/Folders" will be used as root +#root_container=. + +# always force SortCriteria to this value, regardless of the SortCriteria passed by the client +#force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title + +# maximum number of simultaneous connections +# note: many clients open several simultaneous connections while streaming +#max_connections=50 + +# set this to yes to allow symlinks that point outside user-defined media_dirs. +#wide_links=no +friendly_name=Hass.io-DLNA-Server diff --git a/minidlna/rootfs/etc/services.d/minidlna/finish b/minidlna/rootfs/etc/services.d/minidlna/finish new file mode 100644 index 0000000..9724c18 --- /dev/null +++ b/minidlna/rootfs/etc/services.d/minidlna/finish @@ -0,0 +1,9 @@ +#!/usr/bin/execlineb -S0 +# ============================================================================== +# Community Hass.io Add-ons: torrdlna +# Take down the S6 supervision tree when the miniDLNA daemon fails +# ============================================================================== +if -n { s6-test $# -ne 0 } +if -n { s6-test ${1} -eq 256 } + +s6-svscanctl -t /var/run/s6/services \ No newline at end of file diff --git a/minidlna/rootfs/etc/services.d/minidlna/run b/minidlna/rootfs/etc/services.d/minidlna/run new file mode 100644 index 0000000..09030c7 --- /dev/null +++ b/minidlna/rootfs/etc/services.d/minidlna/run @@ -0,0 +1,10 @@ +#!/usr/bin/with-contenv bash +# ============================================================================== +# Community Hass.io Add-ons: torrdlna +# Runs the MiniDLNA daemon +# ============================================================================== +# shellcheck disable=SC1091 +source /usr/lib/hassio-addons/base.sh + +# Run the Tor daemon +exec minidlnad