Mar 222013

Hi everyone, sorry for the lack of updates !
Been a bit busy at home but I’ll try and post up a few of my ideas in the coming weeks.
I am also running low on bandwidth 🙁 Hopefully my blog will last until the end of the month !

At the moment I have the below ideas on my to-do list of blog posts, if anyone wants anything similar to these, please don’t hesitate to drop me a request in the comments 🙂

Video ideas –
Mounting a USB stick as the root partition

Post ideas –
Mounting a USB stick as the root partition
Pi as a ADSL router
Pi as a wifi client bridge
Pi as a standalone wifi point with a welcome page
Readonly Pi

I’ll keep this list updated as I think of more ideas, at least in the meantime 😀

Mar 102013

I’ve had a few queries regarding streaming audio as well as video on the Raspberry Pi, so tonight I set up my little Raspberry Pi with a Logitech C110. This webcam also has a microphone integrated which the Pi can use to record audio.
Everything has been setup as per part 3 of my ffmpeg streaming guide.

A little investigation reveals which hardware device the microphone is recognised as.

# arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: C110 [Webcam C110], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0

So the device is recognised as card 1. This comes in later when we are setting up the audio part of the streaming.

I’ve updated the script to reflect the fact that we are now recording sound –

ffserver -f /root/ff.conf & ffmpeg -vcodec mjpeg -v verbose -r 15 -s 176x128 -f video4linux2 -i /dev/video0 -f alsa -ac 1 -i hw:1 http://localhost:81/webcam.ffm

And I also need to update ff.conf with the new streaming settings
The Stream webcam section has now turned into this –
<Stream webcam.avi>
Feed webcam.ffm
Format avi
VideoSize 176x128
VideoFrameRate 15
VideoBufferSize 40
VideoBitRate 64
AudioBitRate 32
AudioChannels 1
AudioSampleRate 11025
VideoQMin 1
VideoQMax 20

With this configuration, I could start ffmpeg with audio and video streaming. However I could not get my laptop with vlc to connect to it for now, so I’ll have to keep investigating that.
Hopefully this helps though.

Please support the continued development of any useful scripts and tutorials that you have found useful !

Mar 102013

There’s been a few threads recently on the Raspberry Pi forums regarding SD Card images too big to fit on other SD cards.
So I’ve come up with a script to automatically resize SD Cards to the smallest size possible. At the moment it is Linux only unfortunately, but I may release a windows version if there’s demand.

The script can be downloaded from here

or copied and pasted from here

# Automatic Image file resizer
# Written by SirLagz

if [[ ! $(whoami) =~ "root" ]]; then
echo ""
echo "**********************************"
echo "*** This should be run as root ***"
echo "**********************************"
echo ""

if [[ -z $1 ]]; then
echo "Usage: ./ "

if [[ ! -e $1 || ! $(file $1) =~ "x86" ]]; then
echo "Error : Not an image file, or file doesn't exist"

partinfo=`parted -m $1 unit B print`
partnumber=`echo "$partinfo" | grep ext4 | awk -F: ' { print $1 } '`
partstart=`echo "$partinfo" | grep ext4 | awk -F: ' { print substr($2,0,length($2)-1) } '`
loopback=`losetup -f --show -o $partstart $1`
e2fsck -f $loopback
minsize=`resize2fs -P $loopback | awk -F': ' ' { print $2 } '`
minsize=`echo $minsize+1000 | bc`
resize2fs -p $loopback $minsize
sleep 1
losetup -d $loopback
partnewsize=`echo "$minsize * 4096" | bc`
newpartend=`echo "$partstart + $partnewsize" | bc`
part1=`parted $1 rm 2`
part2=`parted $1 unit B mkpart primary $partstart $newpartend`
endresult=`parted -m $1 unit B print free | tail -1 | awk -F: ' { print substr($2,0,length($2)-1) } '`
truncate -s $endresult $1

Please support the continued development of any useful scripts and tutorials that you have found useful !

Mar 042013

A few people wanted a 1 GB image for Raspbian Server Edition, and I finally got around to putting it together !

It’s the same 2GB image that has been repackaged into a 1GB image.
It has been resized so it should fit any 1GB SD card in existence.

You can Download it here !

SHA1 hash –
74abe17fdea4dc862e0aa6d68a33daa434934cc5 1gbRSEv2.3.img.gz

Please support the continued development of Raspbian Server Edition by donating !

Mar 042013

I have now built a script to do this automatically.
The script will minimise the size as much as possible.
Script can be found here

I recently had to resize a Raspbian Server Edition image into a 1 gigabyte image. As I didn’t actually have a 1 gigabyte SD card to use as a template, I generated my own by resizing the original 2 gigabyte image.

This was done on another computer, but this can also be done on the Pi itself, and you can even flash the resulting image to an SD card if you have a USB SD Card reader on the Pi.

Also, most commands will need to be run as root, or use sudo to run the commands.

Step 1 : Mounting the image

First thing I did was make a copy of the 2gb image to work on, this is not essential if you downloaded the image originally, but I’m working on the original RSE image.

# cp RSEv2.3.img RSE1g.img

Similar to part 1, we need to mount the image via loopback.

# losetup -f --show RSE1g.img

This will mount the image file as a loopback device, and show you which one it was mounted as. By default, it should be /dev/loop0

Step 2: Resizing the Partition

Once the image is mounted, we then need to run parted on the image file, and get it to print out the current partitions.

# parted /dev/loop0
GNU Parted 2.3
Using /dev/loop0
Welcome to GNU Parted! Type 'help' to view a list of commands.

Running the print command will output the current setup.

(parted) print
Model: Loopback device (loop)
Disk /dev/loop0: 2003MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number Start End Size Type File system Flags
1 4194kB 62.9MB 58.7MB primary fat16 lba
2 62.9MB 1940MB 1877MB primary ext4


As you can see, the 2nd partition, which is the linux partition, is 1877 megabytes. To resize the partition, we need to remove it, and recreate it with a new size.

Running the command rm 2 will remove the 2nd partition.

(parted) rm 2

To recreate it, we need to use mkpart command, and specify that we will be creating it as a primary partition, starts at 62.9MB, and ends at 900MB to give us a partition of 837 MB.

(parted) mkpart primary 62.9 900

Once the partition has been created, running print again will show us the new setup.

(parted) print
Model: Loopback device (loop)
Disk /dev/loop0: 2003MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number Start End Size Type File system Flags
1 4194kB 62.9MB 58.7MB primary fat16 lba
2 62.9MB 900MB 837MB primary ext4

We will also need to get the amount of sectors in the new partition so we can resize the filesystem to the right size later. To do that, we change the units to sectors, and then run the print command again

(parted) unit s

Now when we run the print command, the partitions will show up with sectors as the units instead

(parted) print
Model: Loopback device (loop)
Disk /dev/loop0: 3911680s
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number Start End Size Type File system Flags
1 8192s 122879s 114688s primary fat16 lba
2 122880s 1757183s 1634304s primary ext4

We’ll need to take a note of the size of the number 2 partition (1634304 sectors) and the sector size (512 bytes), and also the start of the partition (sector 122880).

Step 3: Resizing the Filesystem

Once the partition has been resized, we will then need to resize the filesystem that resides in the partition.

We need to calculate where the partition starts so we can mount the specific partition rather than the whole image. To calculate it, we take the starting sector, and multiply it by the sector size.

I’m using bc to do the calculation here

# echo '122880 * 512' | bc

So to mount the partition itself, we need to mount the image with an offset. This should mount it on /dev/loop1

# losetup -f --show -o 62914560 RSE1g.img

Before we can resize the filesystem, we need to check it for errors first. We’ll need to force it as the filesystem is meant to be clean.

# e2fsck -f /dev/loop1
e2fsck 1.42.5 (29-Jul-2012)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/loop1: 28754/114688 files (0.1% non-contiguous), 153181/458240 blocks

Once the filesystem has been verified as clean, we can then use resize2fs to resize the filesystem.
We will need to calculate the size of the new filesystem to resize it correctly. To do that, we need to take the size of the partition in sectors (1634304), and divide by 8 (4KB blocks divided by 512 bytes/sector), assuming we are using 4KB blocks in the filesystem.

# echo '1634304 / 8' | bc

We can use resize2fs now to resize the filesystem to the correct size.

# resize2fs /dev/loop1 204288
resize2fs 1.42.5 (29-Jul-2012)
Resizing the filesystem on /dev/loop1 to 204288 (4k) blocks.
The filesystem on /dev/loop1 is now 204288 blocks long.

Once the resize is done, we can now remove all loopback devices

# losetup -d /dev/loop0 /dev/loop1

Step 4: Resize the image file

Once the resize is all completed, we just need to lop off the end of the image file that has all the free space.
Since the 2nd partition ends at the 900MB mark, we can lop it off right there with the truncate command

# truncate -s 900M RSE1g.img

The filesize will now be 900 Megabytes which is small enough to fit onto any 1GB SD Card.