Something I want to do with my Raspberry Pi Cluster is mount a hard drive and share it like a windows share. To do this I am going to set up Samba on a Raspberry Pi.
Installing the required packages
To run samba as a service we need to install a couple packages. Running the following command will install what you need.
sudo apt-get install samba samba-common-bin
To modify samba configuration on a Raspberry Pi you can use its config file. This file is located /etc/samba/smb.conf once you have installed the appropiate packages. To set up samba to be liking I am going to modify and add a couple lines to the base settings.
The workgroup setting defines which workgroup the user you will be logging in as will need. By default the setting is WORKGROUP but this can be changed to anything required. Here im going to change the workgroup to “bunker”.
workgroup = BUNKER #customize the workgroup
To ensure that only logged in users are able to access the shares I have set the security level to “user”. This method of security validates against samba user accounts and is the most basic level.
security = user #ensure security level is user only
The default samba settings will expose the logged in users home directory however it will not be writeable. By changing “read only” to no this will allow editing the users home directory
[homes] read only = no #allow writing of home dir
Setting up a share folder
To finally set up the share folder you need to add in the details of the share. Again this is modifying the samba config file as above. Below is an example share folder configuration and an explanation of some of the settings.
[BUNKER1] comment = Bunker Node1 Share path = /usr/local/bunker valid users = @samba force group = samba create mask = 0660 directory mask = 0771 read only = no
- [BUNKER1] is the name that windows will assign to the folder
- comment is used in some programs to describe the share
- path is the local path on the Raspberry Pi that the share will be exposing
- valid users lists all valid users which can be a single user, or list of usernames. Here I have used “@samba” to allow all users of the group “samba” to access the share
- force group will force the accessing user to read files as that group. This can be used to determine what the user can access or do.
- create mask is used to apply a bitwise and to the generated permissions. 0660 ensures files are not accessibly by any user, this applies to create files
- directory mask works similarly to the above but applies to created directories. Here I am setting it to 0771 to ensure all directories are executable (browsable)
- read only sets whether you are only allowed to write/delete the files
Configuring users to access samba
Once you have set up samba with the above settings you need to add a user to be able to access samba. Since I have set my folder to require the samba group I can add it to my user by running
sudo groupadd samba sudo usermod -aG samba chewett sudo smbpasswd -a chewett
By default Raspbian has no samba group so it needs to be created therefore the first command creates one. The second command then adds the “samba” group to the user account “chewett”. The third command will set the samba password for the same user account. This will let the user chewett access samba.
Now we need to restart samba so that config takes effect.
sudo /etc/init.d/samba restart
Accessing Samba from windows
Now you should be able to access samba from windows by going to \\hostname\ . Here the hostname is bunker-node1 so I access it by going to \\bunker-node1
Once I have entered the hostname and selected a folder will present a login prompt asking for a username and password. If your computer is on the same workgroup as the samba config you will just need to enter the username and password. If they are running on different work groups you will need to enter workgroup\username as the username. In this case I need to enter bunker\chewett as bunker is the workgroup and chewett is the username.
Now I have access to my raspberry pi files on windows. I can expand this by adding more folders to the samba config I can mount external drives and have them accessible on the windows network.