Content Delivery Network
Mechanism of Action
On the Raspbmc server, a mod_rewrite rule and PHP script redirect to a random mirror when a file is requested, preserving the URI and passing it on to the mirroring server.
Becoming a CDN mirror
It is now possible to become a mirror with any web hosting servers including IIS and Apache, and thus, will not be platform dependent as no server side scripting will be needed in the serving of content. You must meet the following requirements to be a CDN mirror for the Raspbmc project:
1. You must have at least a 100Mbit connection or greater.
2. You must have an unmetered connection. This is for your own good, as the volume of downloads is very great.
3. You must synchronise with the Raspbmc server hourly. Otherwise some users may find updates not propagating for a long time.
Obviously, there may be other reasons why you would not make a suitable CDN mirror, such as if your server is offline frequently. Note: you may be removed from the CDN.
To apply to be a mirror, you should send an email
Mirroring under Linux
This guide assumes you have a working HTTP server.
First, you should verify that you have rSync on your system. In Debian or Ubuntu you can do this as follows:
apt-get update apt-get install rsync
Next, create a working folder in which you will store your password to access the rSync server and an automated script:
mkdir /var/mirror-raspbmc/
Create a password file, accessible by ONLY the user which will run the script. Note: if you do not heed this warning, rSync will fail.
echo "somepassword" > /var/mirror-raspbmc/passwordfile
If I was running as root (global cron), I would thus
chmod 600 /var/mirror-raspbmc/passwordfile chown root:root /var/mirror-raspbmc/passwordfile
Now, we should create the script which will synchronise with the Raspbmc server.
touch /var/mirror-raspbmc/sync.sh chmod +x /var/mirror-raspbmc/sync.sh // not technically necessary as we will invoke bash from cron. chmod 600 /var/mirror-raspbmc/sync.sh //security chown root:root /var/mirror-raspbmc/passwordfile
With your favourite text editor, add the following:
#!/bin/bash cd /var/www/mirrorlocation rsync -auP --delete --password-file=/var/mirror-raspbmc/passwordfile rsync://username@87.106.137.136/raspbmc-downloads/ downloads chown -R www-data:www-data
Note: substitute the location for the actual password file and ‘username’ for the username provided to you. Also ensure you substitute /var/www/mirrorlocation for the path where you are planning to serve the files from.
Run the script initially and verify that it works:
bash /var/mirror-raspbmc/sync.sh
If that goes OK, then proceed to add it as a regular event.
Edit cron:
(sudo)crontab -e
Note: run as sudo if you are not already root to make the script run as root
Note: if your desired editor does not initialise with this command, prefix with, for example:
EDITOR=nano crontab -e
For a daily synchronisation at midnight, the following example would suffice:
@daily /bin/bash /var/mirror-raspbmc/sync.sh
Windows
I will create an application that allows synchronisation scheduling shortly.
Current CDN mirrors
Many thanks to those who are already volunteering as mirrors for the Raspbmc project. These are the people to thank for being able to install, update and enjoy Raspbmc as they allow such a great number of users.
You can view the list of mirrors from the Downloads page.




