From 5a1030ef67405a61a02a661d1b8f34b51059f8d7 Mon Sep 17 00:00:00 2001 From: dianlight Date: Sat, 8 Jul 2023 18:22:06 +0200 Subject: [PATCH] Fix for release --- sambanas/CHANGELOG.md | 12 +++++--- sambanas/DOCS.md | 9 +++++- sambanas/config.yaml | 1 + .../s6-rc.d/cifs-supervisor-mount/run | 18 ++++++++--- .../etc/s6-overlay/s6-rc.d/init-samba/run | 2 +- .../dependencies.d/cifs-supervisor-mount | 0 .../dependencies.d/cifs-supervisor-mount | 0 sambanas/rootfs/usr/share/tempio/smb.gtpl | 30 +++++++++++++------ 8 files changed, 53 insertions(+), 19 deletions(-) create mode 100644 sambanas/rootfs/etc/s6-overlay/s6-rc.d/mqtt-disk-handler/dependencies.d/cifs-supervisor-mount create mode 100644 sambanas/rootfs/etc/s6-overlay/s6-rc.d/mqtt-handler/dependencies.d/cifs-supervisor-mount diff --git a/sambanas/CHANGELOG.md b/sambanas/CHANGELOG.md index 2358e450..5e524f44 100644 --- a/sambanas/CHANGELOG.md +++ b/sambanas/CHANGELOG.md @@ -1,13 +1,17 @@ # Changelog -## 10.0.2-nas3 [Unrelesed] +## 10.0.2-nas3 + +### ✨ Features +- Add support of `acl.usage` to specify what scope of disk is, usefull for network storage mount in ha ([DOCS.md][docs]) ### 🩹 BugFix -- Always add docker network to whitelist - May FIX [#157](https://github.com/dianlight/hassio-addons/issues/157) +- Always add docker network to whitelist - Try fix [#157](https://github.com/dianlight/hassio-addons/issues/157) +- Correct cifs mount precedence. Try fix [[#159](https://github.com/dianlight/hassio-addons/issues/159)] +### 💥 BREAKING CHANGE +- Default `acl.timemachine` option now is set to `true` -### Planned -- Disk Type - Media / Backup etc etc ## 10.0.2-nas2 ### ✨ Features - Read only users [[#141](https://github.com/dianlight/hassio-addons/issues/141)] diff --git a/sambanas/DOCS.md b/sambanas/DOCS.md index a39d906e..d552f429 100644 --- a/sambanas/DOCS.md +++ b/sambanas/DOCS.md @@ -220,7 +220,14 @@ Defaults to none If is true the share is exposed with timechine compatible setting. -Defaults to `false` for internal share. +Defaults to `false` for internal share, `true` forn extra disks. + +### Option: `usage` (optional) (**valid only for external disks**) + +Set the scope of the disk, usefull for ha network storage mount. Valid values are `media`,`backup`,`share` + +Defaults to `media` for external disks if `medialibray` is enabled. + ### Option: `interfaces` (optional) (**advanced users only**) diff --git a/sambanas/config.yaml b/sambanas/config.yaml index f76f6c20..af673b6b 100644 --- a/sambanas/config.yaml +++ b/sambanas/config.yaml @@ -93,6 +93,7 @@ schema: ro_users: - str? timemachine: bool? + usage: list(media|backup|share)? interfaces: - str? log_level: list(trace|debug|info|notice|warning|error|fatal)? diff --git a/sambanas/rootfs/etc/s6-overlay/s6-rc.d/cifs-supervisor-mount/run b/sambanas/rootfs/etc/s6-overlay/s6-rc.d/cifs-supervisor-mount/run index 0c07e1bf..6872fe04 100755 --- a/sambanas/rootfs/etc/s6-overlay/s6-rc.d/cifs-supervisor-mount/run +++ b/sambanas/rootfs/etc/s6-overlay/s6-rc.d/cifs-supervisor-mount/run @@ -9,8 +9,13 @@ if [ -f /tmp/cifs_network ]; then bashio::log.info "Automount Shares..." - interface=$(bashio::network.name) - ipaddress=$(bashio::network.ipv4_address "${interface}") + #interface=$(bashio::network.name) + #ipaddress=$(bashio::network.ipv4_address "${interface}") + #interface=$(bashio::network 'network.info.docker.inerface' '.docker.interface') + #ipaddress=$(bashio::network 'network.info.docker.network' '.docker.address') + #hostname=$(bashio::addon.hostname) + ipaddress=$(bashio::addon.ip_address) + #bashio::log "Addon IP: ${hostname}/${ipaddress}" username=$(bashio::config 'username') password=$(bashio::config 'password') @@ -23,11 +28,16 @@ if [ -f /tmp/cifs_network ]; then #mounts=$(bashio::api.supervisor GET /mounts false) #bashio::log "Mounts: ${mounts}" + #status=$(smbcontrol smbd ping) + #bashio::log "Samba Ready: ${status}" + #bashio::log "Children: $(smbcontrol smbd num-children)" + while read -r -a device; do [[ "share config addons ssl backup media" =~ $device ]] && continue - cmdshare=$(jq -nrc --arg share "$device" --arg ip "${ipaddress/\/*/}" --arg user "$username" --arg pwd "$password" '.name=$share|.usage="media"|.type="cifs"|.server=$ip|.share=$share|.username=$user|.password=$pwd') + usage=$(jq -r --arg xshare "$device" '.acl[] | select(.share==$xshare) | .usage // "media"' <<<"$(bashio::addon.config)") + cmdshare=$(jq -nrc --arg usage "$usage" --arg share "$device" --arg ip "${ipaddress/\/*/}" --arg user "$username" --arg pwd "$password" '.name=$share|.usage=$usage|.type="cifs"|.server=$ip|.share=$share|.username=$user|.password=$pwd') #bashio::log.info "${cmdshare}" status=$(bashio::api.supervisor POST /mounts "${cmdshare}") - bashio::log.info "Return from Mount: ${status}" + #bashio::log.info "Return from Mount: ${status}" done <<<"${available_shares}" fi diff --git a/sambanas/rootfs/etc/s6-overlay/s6-rc.d/init-samba/run b/sambanas/rootfs/etc/s6-overlay/s6-rc.d/init-samba/run index 5aa75439..01ff6d9e 100755 --- a/sambanas/rootfs/etc/s6-overlay/s6-rc.d/init-samba/run +++ b/sambanas/rootfs/etc/s6-overlay/s6-rc.d/init-samba/run @@ -72,5 +72,5 @@ done # Log exposed mounted shares bashio::log.blue "---------------------------------------------------" -bashio::log.info "Exposed Disks Summary:\n$(awk '/\[.*\]/{ DISK=$0; next } /.*path =(.*)/{ printf "%-20s %s\n",DISK,$0 }' /etc/samba/smb.conf)" +bashio::log.info "Exposed Disks Summary:\n$(awk '/\[.*\]/{ DISK=$0; next } /.*path =(.*)/{ PATH=$0; next} /.*TM:(.*)/{ printf "%-20s %s %s#\n",DISK,PATH,$0 }' /etc/samba/smb.conf)" bashio::log.blue "---------------------------------------------------" diff --git a/sambanas/rootfs/etc/s6-overlay/s6-rc.d/mqtt-disk-handler/dependencies.d/cifs-supervisor-mount b/sambanas/rootfs/etc/s6-overlay/s6-rc.d/mqtt-disk-handler/dependencies.d/cifs-supervisor-mount new file mode 100644 index 00000000..e69de29b diff --git a/sambanas/rootfs/etc/s6-overlay/s6-rc.d/mqtt-handler/dependencies.d/cifs-supervisor-mount b/sambanas/rootfs/etc/s6-overlay/s6-rc.d/mqtt-handler/dependencies.d/cifs-supervisor-mount new file mode 100644 index 00000000..e69de29b diff --git a/sambanas/rootfs/usr/share/tempio/smb.gtpl b/sambanas/rootfs/usr/share/tempio/smb.gtpl index d4ae33ec..c041823d 100644 --- a/sambanas/rootfs/usr/share/tempio/smb.gtpl +++ b/sambanas/rootfs/usr/share/tempio/smb.gtpl @@ -53,13 +53,16 @@ path = /{{- .share }} valid users = {{ .users|default .username|join " " }} {{ .ro_users|join " " }} + {{ if .ro_users }} read list = {{ .ro_users|join " " }} + {{ end }} force user = root force group = root veto files = /{{ .veto_files | join "/" }}/ delete veto files = {{ eq (len .veto_files) 0 | ternary "no" "yes" }} - {{- if .timemachine|default false }} +# TM:{{ .timemachine }} {{- if .medialibrary.enable }} USAGE:{{ .usage | default "" }} {{ end }} + {{- if .timemachine }} vfs objects = catia fruit streams_xattr # Time Machine Settings Ref: https://github.com/markthomas93/samba.apple.templates @@ -69,27 +72,36 @@ {{ end }} {{ end }} -{{- $disks := concat (list "config" "addons" "ssl" "share" "backup" "media") (compact .moredisks|default list) -}} +{{- $dfdisk := list "config" "addons" "ssl" "share" "backup" "media" }} +{{- $disks := concat $dfdisk (compact .moredisks|default list) -}} {{- $root := . -}} {{- range $disk := $disks -}} {{- $acld := false -}} {{- range $dd := $root.acl -}} {{- $ndisk := $disk | regexFind "[A-Za-z0-9_]+$" -}} {{- if eq $dd.share $ndisk -}} + {{- $def := deepCopy $dd }} {{- $acld = true -}} {{- if not $dd.disabled -}} {{- $_ := set $dd "share" $disk -}} - {{- template "SHT" deepCopy $root | mergeOverwrite $dd -}} + {{- if has $disk $dfdisk -}} + {{- $_ := set $def "timemachine" false -}} + {{- $_ := set $def "usage" "" -}} + {{- else -}} + {{- $_ := set $def "timemachine" true -}} + {{- $_ := set $def "usage" "media" -}} + {{- end }} + {{- template "SHT" deepCopy $root | mergeOverwrite $def $dd -}} {{- end -}} {{- end -}} {{- end -}} {{- if not $acld -}} {{- $dd := dict "share" $disk "timemachine" true -}} - {{- range $dnt := list "config" "addons" "ssl" "share" "backup" "media" -}} - {{- if eq $dnt $disk -}} - {{- $_ := set $dd "timemachine" false -}} - {{- end -}} - {{- end -}} - {{- template "SHT" deepCopy $root | mergeOverwrite $dd -}} + {{- $_ := set $dd "usage" "media" -}} + {{- if has $disk $dfdisk -}} + {{- $_ := set $dd "timemachine" false -}} + {{- $_ := set $dd "usage" "" -}} + {{- end }} + {{- template "SHT" (deepCopy $root | mergeOverwrite $dd) -}} {{- end -}} {{- end -}}