The idea came to me from a friend. I wanted to install a small network storage system to use merely as a file exchange repository at the office and I was looking to buy some kind of Ethernet disk, when he said to me
why don't you do it with a raspberry and a USB flash drive?. The thought was intriguing -- to say the least, so here I am with all the little details:
I am not going to go through the entire process of downloading and preparing the raspberry SD card from the Raspberry Pi Downloads page. The cool thing with raspberry is that once you get it running for the first time, you get a real Debian Linux that does all you expect a descent OS to do.
A pleasant surprise with the raspberry image was that the default set-up registered itself to my dynamic DNS and I was able to log into
raspberrypi the moment I plugged it into my LAN without touching a thing.
The first thing that I needed to do was change the hostname of the device. That way there would be no name conflicts when I add a fresh one for the next God knows what project that will come up...
Changing the host name is as simple as editing the file
/etc/hostname, changing the single line with the word
xena (Yes i wanted an ... epic name) and then rebooting. The DNS picked up the name change and logging into xina was as easy as typing
ssh -l pi xena -X. (An even easier way to accomplish the task is to use
raspi-config. Check the advanced options menu)
Next thing would be a plug the USB disk and make sure it gets mounted every time the system boots. I suppose that the proper way to make this work would be to tamper with
/etc/fstab. I chose to do it a bit differently and ended up creating a file containing the last things that the system should do right after booting.
First create a mount point and mount the USB disk. In my case, I created
/mnt/SFTP-Data and tested it with a:
mount /dev/sda1 /mnt/STFP-Data
The idea with executing commands right after boot is that we need to create a file, let's call it
system-startup.sh that contains the above mount command, plua the necessary LSB comments, place it in
/etc/init.d, make it executable and then run
insserv to add this command as the last default runlevel action. The format of the comments section is :
#! /bin/sh ### BEGIN INIT INFO # Provides: system-start.sh # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start up script after boot # Description: Enable service provided by daemon. ### END INIT INFO mount /dev/sda1 /mnt/STFP-Data
...and the actual command to make this work is:
sudo insserv /etc/init.d/system-startup.sh
Finally, it time to install and configure Samba. The Debian Administrator's handbook
says it all. Just remember that raspebrry-pi only has 256MB of actual RAM so keep away from web configuration tools like swat and go with the
debconf and manually editing the the
smb.conf file option.
After Samba is up and running edit the file
/etc/samba/smb.conf and fix the basic staff like work group name and server description. Mine looks like this:
[global] ## Browsing/Identification ### # Change this to the workgroup/NT-domain name your Samba server will part of workgroup = aryballos # server string is the equivalent of the NT Description field server string = %h Raspberry-PI Server # Windows Internet Name Serving Support Section: # WINS Support - Tells the NMBD component of Samba to enable its WINS Server wins support = yes
In order to create a read write share that anyone can use, we need to create a new user that has read/write access to the disk and then force that use and group everytime that someone accesses data through the Samba share.
pi@xena /etc/samba $ groupadd microsoft pi@xena /etc/samba $ useradd -c "Samba user" -m -d /mnt/mdz-disk/shared/ -g microsoft bill
There are two things here. First Bill does not have a password so he can not log in interactively. Second Bill's home is the directory on the disk where I want everybody to have full read/write access. Telling this to the Samba server requires that the following section be placed at the end of the
smb.comf file ...
[public] comment = Public data in the USB drive for our work-group read only = no path = /mnt//mnt/STFP-Data/public guest ok = yes force user = bill force group = microsoft
... the directory is made and permissions are set
pi@xena /mnt/SFTP-Data $ sudo mkdir public pi@xena /mnt/SFTP-Data $ sudo chown bill.microsoft public/
... and finally the samba service is restarted...
pi@xena /etc/samba $ sudo service samba restart [ ok ] Stopping Samba daemons: nmbd smbd. [ ok ] Starting Samba daemons: nmbd smbd. pi@xena /etc/samba $