Monday, June 25, 2012

Give me spaaaaace!

More on my Raspberry Pi experiences. 

On the default disk image of Debian recommended by the Raspberry foundation, after install the VNC server as described in my previous post, you're left with just shy of 300MB of disk space to play with. This seems measly when you're used to talking about how many GB free space a disk has.

So what can we do about it without plugging in more *stuff* to my lovely little minimalist Pi? The answer is ... mount a network drive from the PC that acts as a file server and first-stage backup server to the rest of the house!

I have a Projects folder on my desktop, where I keep any coding ... well... projects, funnily enough. The drive that contains that folder has plenty of free space (about 200GB as it happens), so this is just fine for my purposes today.
  1. First up, create a share in Windows, with Guest as the Co-owner (yes, i know I could create a Pi user on my box, but I'm feeling lazy at this stage)
  2. Now ssh or VNC and open a terminal session on the Pi.
  3. run "sudo mkdir /mnt/projects"
  4. run "sudo vi /etc/fstab" and add the lines as follows

Contents of /etc/fstab:

# these lines exist already
proc            /proc           proc    defaults        0       0
/dev/mmcblk0p1  /boot           vfat    defaults        0       0
#/dev/mmcblk0p3  none            swap    sw              0       0

# this is the new line:
//192.168.0.5/Projects /mnt/projects cifs user=guest%,uid=1000,gid=1000

Notes:

  1. "192.168.0.5" is the IP of my PC - I would use the named UNC path, but I have Virtual Box on the machine too, which is advertising another address under the same name, that just seems to confuse Samba on the Pi.
  2. "Projects" is the name of the Windows share
  3. "/mnt/projects" is the director where the files will appear on the Pi
  4. "cifs" is the type of file system
  5. "user=guest%" indicates we're logging into Windows as guest, with no password (I know, I know, even a private network needs security, I leave this as an exercise for you, the reader)
  6. "uid=1000,gid=1000" tells the file system to be owned by the "pi" user and group on the Pi, so we can read & write to the files without needing to "sudo" all the time.
Pretty simple really. And because I've used SyncToy on the windows folder to contribute any files from the Projects folder into my backup drive (external USB) and then into my DropBox account, anything I write from the Pi to /mnt/projects will automatically be double backed up every night. (Afterall, any data that you don't have at least two copies of is data that you don't care about, n'est pas?)

Addendum

I just added a similar line to "/etc/fstab" for an 8GB pendrive in the unused USB socket, to give me more, local, faster space:
#pendrive
/dev/sda1 /media/usbstick vfat rw,uid=1000,gid=1000
(remembering to create the "/media/usbstick" directory first)

Sunday, June 24, 2012

Running a Raspberry Pi in headless mode.

I have just bought a Raspberry Pi micro computer (and boy do they mean 'micro'). It's a neat little computer about the size of your credit card. However it is a bare-bones system with no keyboard, mouse, monitor or hard disk. So what do you need any of them for? Well, with the Pi, you can get away without any of them, except you do need an SD card to act as the hard disk.


My problem is that I don't have an HDMI monitor or a TV in my study, where I want to use my Pi. And I can't be bothered to wait for an adaptor to connect the Pi's HDMI socket to one of my VGA or DVI flat panels. So what am I going to do? Well, a mate of mine solved this problem by using VNC - a remote desktopping solution that I already use at work. The other problem is that I'd really rather like to reduce the cabling required for my Pi even further and do without the heavy-weight LAN cable ... I know, I have an Edimax EW-7711UN wireless dongle that I bought ages ago when my ethernet-over-power failed. I wonder if that will work with the Pi?


So, my aim is a full-screen Pi with no monitor, accessible from my desktop PC, via my domestic wireless network - so I can put the Pi anywhere with power and a wireless signal in the house, and use it as the company intended: X windows on a proper screen.


Here's how I did it.



(Creating the hard disk image on an 2GB SD card I'll leave to other people, because they've done just fine.)
The image of Debian for use with the Pi comes with a an option to enable SSH (secure shell) access to the machine via the LAN cable, so that's where I started:

  1. mount the SD card with a PC card reader, rename "boot_enable_ssh.rc" to "boot.rc" to enable SSH
  2. plug the card into the Pi, connect the LAN cable and power, and boot without a monitor connection
  3. login with pi/raspberry
  4. use "passwd" to change to a real password
  5. run "sudo apt-get install tightvncserver" to install VNC server
  6. run "tightvncserver" and set a password
  7. run "tightvncserver -kill :1" to stop VNC server
  8. run "sudo bash" to elevate to root
  9. create "/etc/init.d/vnc" as below to start VNC server at boot time
  10. run "chmod +x vnc" to make the script runnable
  11. run "update-rc.d vnc defaults" to install the above script for boot
  12. run "aptitude install firmware-ralink wireless-tools" to get the wireless networking tools for Debian
  13. run "aptitude install wpasupplicant" to get the wireless security support for Debian
  14. attach the Edimax 7711 dongle to a usb socket
  15. run "lsusb" to ensure it's powered up and listed
  16. edit "/etc/network/interfaces" as below to boot the wireless card at boot
  17. run "ifup wlan0" to test your configuration - you should get an IP address - write it down.
  18. remove the LAN cable, and reboot 
  19. now you can login via the new IP address via VNC or SSH.
This is my Pi in action: notice the lack of spaghetti cabling so common in other configurations ;-)


I have got a powered USB hub on the way, so that will add another cable to the above, but actually, I'm not sure it'll be needed afterall.

/etc/init.d/vnc:

### BEGIN INIT INFO
# Provides: vncboot
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start VNC Server at boot time
# Description: Start VNC Server at boot time.
### END INIT INFO


#! /bin/sh
# /etc/init.d/vnc


USER=pi
HOME=/home/pi
export USER HOME
case "$1" in
    start)
        echo "Starting VNC Server"
        #Insert your favoured settings for a VNC session
        su - $USER -c "/usr/bin/vncserver :1 -geometry 1280x1024 -depth 24 > /tmp/vncserver.log 2>&1 &" &
    ;;
    stop)
        echo "Stopping VNC Server"
        /usr/bin/vncserver -kill :1
    ;;
    *)
        echo "Usage: /etc/init.d/vncboot {start|stop}"
        exit 1
    ;;
esac
exit 0

/etc/network/interfaces:

# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or
# /usr/share/doc/ifupdown/examples for more information.

auto lo wlan0

iface lo inet loopback
iface eth0 inet dhcp
iface wlan0 inet dhcp
        wireless-essid YOUR SSID
        wpa-ssid YOUR SSID
        wpa-psk "YOUR NETWORK PASSWORD"
There are probably ways to encrypt the network password, but I've not figure them out yet.