156 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Groovy
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Groovy
		
	
	
	
	
	
[global]
 | 
						|
   {{ if .compatibility_mode }}
 | 
						|
   client min protocol = NT1
 | 
						|
   server min protocol = NT1
 | 
						|
   {{ else }}
 | 
						|
   server min protocol = SMB2_10
 | 
						|
   client min protocol = SMB2_10
 | 
						|
   {{ end }}
 | 
						|
 | 
						|
   {{if .multi_channel }}
 | 
						|
   server multi channel support = yes
 | 
						|
   aio read size = 1
 | 
						|
   aio write size = 1
 | 
						|
   {{ end }}
 | 
						|
 | 
						|
   dns proxy = yes
 | 
						|
 | 
						|
   ea support = yes
 | 
						|
   vfs objects = catia fruit streams_xattr{{ if .recyle_bin_enabled }} recycle{{ end }}
 | 
						|
   fruit:aapl = yes
 | 
						|
   fruit:model = MacSamba
 | 
						|
 | 
						|
   fruit:resource = file
 | 
						|
   fruit:veto_appledouble = no
 | 
						|
   fruit:posix_rename = yes
 | 
						|
   fruit:wipe_intentionally_left_blank_rfork = yes
 | 
						|
   fruit:zero_file_id = yes
 | 
						|
   fruit:delete_empty_adfiles = yes
 | 
						|
 | 
						|
   # cherry pick from PR#167 to Test
 | 
						|
   fruit:copyfile = yes
 | 
						|
   fruit:nfs_aces = no
 | 
						|
 | 
						|
   # Performance Enhancements for network
 | 
						|
   socket options = TCP_NODELAY IPTOS_LOWDELAY
 | 
						|
   min receivefile size = 16384
 | 
						|
   getwd cache = yes
 | 
						|
   aio read size = 1
 | 
						|
   aio write size = 1
 | 
						|
   # End PR#167
 | 
						|
 | 
						|
   netbios name = {{ env "HOSTNAME" }}
 | 
						|
   workgroup = {{ .workgroup }}
 | 
						|
   server string = Samba NAS HomeAssistant config
 | 
						|
   local master = {{ .local_master | ternary "yes" "no" }}
 | 
						|
   multicast dns register = {{ if or .wsdd .wsdd2 }}no{{ else }}yes{{ end }}
 | 
						|
 | 
						|
   security = user
 | 
						|
   ntlm auth = yes
 | 
						|
   idmap config * : backend = tdb
 | 
						|
   idmap config * : range = 1000000-2000000
 | 
						|
 | 
						|
   load printers = no
 | 
						|
   disable spoolss = yes
 | 
						|
 | 
						|
   {{ $log_level := dict "trace" "5" "debug" "4" "info" "3" "notice" "2" "warning" "1" "error" "1"  "fatal" "1" -}}
 | 
						|
   log level = {{ .log_level | default "warning" | get $log_level }}
 | 
						|
 | 
						|
   bind interfaces only = {{ .bind_all_interfaces | default false | ternary "no" "yes" }}
 | 
						|
   interfaces = 127.0.0.1 {{ .interfaces | join " " }} {{ .docker_interface | default " "}}
 | 
						|
   hosts allow = 127.0.0.1 {{ .allow_hosts | join " " }} {{ .docker_net | default " " }}
 | 
						|
 | 
						|
   mangled names = no
 | 
						|
   dos charset = CP1253
 | 
						|
   unix charset = UTF-8
 | 
						|
 | 
						|
{{ define "SHT" }}
 | 
						|
{{- $unsupported := list "vfat"	"msdos"	"f2fs"	"fuseblk" "exfat" -}}
 | 
						|
{{- $rosupported := list "apfs"}}
 | 
						|
{{- $name := regexReplaceAll "[^A-Za-z0-9_/ ]" .share "_" | regexFind "[A-Za-z0-9_ ]+$" | upper -}}
 | 
						|
{{- $dinfo := get .shares $name | default dict -}}
 | 
						|
[{{- $name -}}]
 | 
						|
   browseable = yes
 | 
						|
   writeable = {{ has $dinfo.fs $rosupported | ternary "no" "yes" }}
 | 
						|
 | 
						|
   # cherry pick from PR#167 to Test
 | 
						|
   create mask = 0664
 | 
						|
   force create mode = 0664
 | 
						|
   directory mask = 0775
 | 
						|
   force directory mode = 0775
 | 
						|
   # End PR#167
 | 
						|
 | 
						|
   path = /{{- if eq .share "config" }}homeassistant{{- else }}{{- .share }}{{- end }}
 | 
						|
   valid users =_ha_mount_user_ {{ .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" }}
 | 
						|
 | 
						|
# DEBUG: {{ toJson $dinfo  }}|.share={{ .share }}|$name={{ $name }}|.shares={{ .shares }}|
 | 
						|
 | 
						|
{{if .recyle_bin_enabled }}
 | 
						|
   recycle:repository = .recycle/%U
 | 
						|
   recycle:keeptree = yes
 | 
						|
   recycle:versions = yes
 | 
						|
   recycle:touch = yes
 | 
						|
   recycle:touch_mtime = no
 | 
						|
   recycle:directory_mode = 0777
 | 
						|
   #recycle:subdir_mode = 0700
 | 
						|
   #recycle:exclude =
 | 
						|
   #recycle:exclude_dir =
 | 
						|
   #recycle:maxsize = 0
 | 
						|
{{ end }}
 | 
						|
 | 
						|
# TM:{{ if has $dinfo.fs $unsupported }}unsupported{{else}}{{ .timemachine }}{{ end }} US:{{ .users|default .username|join "," }} {{ .ro_users|join "," }}{{- if .medialibrary.enable }}{{ if .usage }} CL:{{ .usage }}{{ end }} FS:{{ $dinfo.fs | default "native" }} {{ if .recyle_bin_enabled }}RECYCLEBIN{{ end }} {{ end }}
 | 
						|
{{- if and .timemachine (has $dinfo.fs $unsupported | not ) }}
 | 
						|
   vfs objects = catia fruit streams_xattr{{ if .recyle_bin_enabled }} recycle{{ end }}
 | 
						|
 | 
						|
   # Time Machine Settings Ref: https://github.com/markthomas93/samba.apple.templates
 | 
						|
   fruit:time machine = yes
 | 
						|
   #fruit:time machine max size = SIZE [K|M|G|T|P]
 | 
						|
   fruit:metadata = stream
 | 
						|
{{ end }}
 | 
						|
{{- if has $dinfo.fs $unsupported }}
 | 
						|
   vfs objects = catia{{ if .recyle_bin_enabled }} recycle{{ end }}
 | 
						|
{{ end }}
 | 
						|
 | 
						|
{{ end }}
 | 
						|
 | 
						|
{{- $dfdisk := list "config" "addons" "ssl" "share" "backup" "media" "addon_configs" }}
 | 
						|
{{- $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|upper) ($ndisk|upper) -}}
 | 
						|
                        {{- $def := deepCopy $dd }}
 | 
						|
                        {{- $acld = true -}}
 | 
						|
                        {{- if not $dd.disabled -}}
 | 
						|
                           {{- $_ := set $dd "share" $disk -}}
 | 
						|
                           {{- 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 -}}
 | 
						|
                {{- $_ := set $dd "usage" "media" -}}
 | 
						|
                {{- if has $disk $dfdisk -}}
 | 
						|
                        {{- $_ := set $dd "timemachine" false -}}
 | 
						|
                        {{- $_ := set $dd "usage" "" -}}
 | 
						|
                {{- end }}
 | 
						|
                {{- template "SHT" (deepCopy $root | mergeOverwrite $dd) -}}
 | 
						|
        {{- end -}}
 | 
						|
{{- end -}}
 |