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

5,296

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.

Share:
5,296

Related videos on Youtube

Srikanth
Author by

Srikanth

Updated on September 18, 2022

Comments

  • Srikanth
    Srikanth over 1 year

    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.

    • foxfabi
      foxfabi over 9 years
      Check for pre-existing modules for your favourite scripting language. For example, I quickly found File::Samba for perl
    • Zoredache
      Zoredache over 9 years
      Can you tell us more about the environment and context of what you are doing? If I had a server and I wanted to programmatically change shares often, then I would create a directory, setup an include for that directory. Then I would just place one file per share in that directory.
    • Srikanth
      Srikanth over 9 years
      @glennjackman - That would be ideal, but I was hoping to not have to add additional scripting languages and packages. This is part of an rpm and I'd rather not have a lot of pre-requirements. If I'm going to do that, I might as well use saltstack, puppet, chef or another tool like that. I was hoping for something more lightweight. Too bad there isn't a smbconfmerge command. I wonder what saltstack uses?
  • Srikanth
    Srikanth over 9 years
    Is that independent of the distro? Also, how does that work if you want to update parameters as well as add/remove shares?
  • Philip
    Philip over 9 years
    Yep, that should work well regardless of distro (unless the distro comes with something like this already, but I haven't seen one yet). It'd be the same procedure no matter what you're changing: make x.conf changes/additions/removal, rebuild includes.conf, restart the daemon.
  • Srikanth
    Srikanth over 9 years
    This doesn't work with global settings. It also doesn't fix the issue that a particular share name could be added to one of the a.conf, b.conf, or c.conf files already.
  • chicks
    chicks over 9 years
    There's nothing to stop you from grepping through all of the configs and making sure they are up to some standard. You could use a similar mechanism for global settings too. One include for global settings would point to *.conf and another for shares would point to *.share.
  • chicks
    chicks almost 4 years