Bash – How would you add a share to smb.conf via a script

bashconfigurationsambashell

I'd like to script adding a share to a smb.conf file. My current script just appends it to the end of the file, but that's not ideal. I'd rather have something that will add a new share if it doesn't exist, and replace it if it does.

I'm currently scripting this on a CentOS 7 distro, but would ideally like something that would work across distros, though that's not a requirement.

Also, I'm using bash to do this because the script is run before other packages are added to the system. The script uses yum to install the samba packages, and then is supposed to configure it and add shares.

Best Answer

To fit with modern sysadmin best practices it would be good to add your configs as individual files in /etc/smb/smb.d and then reference them with an include. Sadly samba does not support wildcard includes so you have to do add something like:

include = /etc/smb/includes.conf

in your smb.conf and then generate the includes.conf with something like:

ls /etc/smb/smb.d/* | sed -e 's/^/include = /' > /etc/smb/includes.conf

For a bit more context:

chicks@silver 23:57:23 smb !531 $ ls smb.d
a.conf  c.conf  e.conf
chicks@silver 23:57:29 smb !532 $ ls /etc/smb/smb.d/* | sed -e 's/^/include = /' > /etc/smb/includes.conf
chicks@silver 23:57:40 smb !533 $ cat includes.conf 
include = /etc/smb/smb.d/a.conf
include = /etc/smb/smb.d/c.conf
include = /etc/smb/smb.d/e.conf

So now you can stick any additional samba configs into /etc/smb/smb.d, regenerate includes.conf and restart samba and life is good.