fateserver
Contents
fateserver is the server software used to power http://fate.ffmpeg.org. It is written by the FFmpeg Project in 2011, using Perl CGI. The main repo for fateserver is located at git://git.ffmpeg.org/fateserver, with a GitHub mirror.
Getting Started on Developing fateserver
When you make a change in fateserver, it is always a good idea to test whether everything work on your own work PC.
Notes:
- fateserver can't be on a sub-dir, which means that it must be something like
http://fate.ffmpeg.org
, but can't behttp://ffmpeg.org/fate
. Otherwise the links are wrong and it won't load the CSS. - Some tools are also needed on the server, like xz.
- In this guide, we assume that the source will be located under
/var/www/fateserver
, and the data gathered from clients under/var/www/fateweb
.
Install fateserver
- Get Apache HTTP Server including CGI module. On Debian derivatives do
sudo apt-get install apache2 libcgi-pm-perl
- Change ownership of
/var/www
to the yourself so you can edit it.
This is only required if the fateserver source is located under a root-only directory like /var/www.
sudo chown -hR (yourusername):(yourusername) /var/www
- Get fateserver and
mkdir
server data directory.cd /var/www git clone git://git.ffmpeg.org/fateserver mkdir /var/www/fateweb
- Make /var/www/fateserver the root of the server. This is OS-dependant, but on Ubuntu you have to modify
/etc/apache2/sites-available/000-default.conf
: FromDocumentRoot /var/www
toDocumentRoot /var/www/fateserver
- Allow CGI to be executed in Apache, add this to
/etc/apache2/apache2.conf
:LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so <Directory /var/www/fateserver> Options +ExecCGI AddHandler cgi-script .cgi .pl </Directory>
- Create a new user for fateserver. These two steps are not required, and doing so is only recommended if you want to really set up a FATE website. If you just want to test fateserver, you don't need to.
- Creating the user:
sudo adduser fate sudo chown -hR fate:fate /var/www/fateweb
- In
/home/fate/.ssh/authorized_keys
, add one entry for each submitter with the following:command="FATEDIR=/var/www/fateweb FATE_USER=timothy_gu /var/www/fateserver/fate-recv.sh" <submitter's public key>
This makes sure they get identified for fateserver and they can only run that one command, so they don't get a shell.
- Creating the user:
I won't get into the basics of creating SSH keys and stuff like that: there are tons of guides online.
- Edit FATE.pm, set the
$fatedir
variable to the fateweb path, if yours is different from the default (/var/www/fateweb
):our $fatedir = "/your/path";
- Now if you go to http://localhost, you will be able to see a FATE error page with contents "No data in $fatedir". Although that is an error, that is considered a good thing at this stage because it shows that CGI works. Now you will need to feed FATE results to fateserver for it to display.
Feed fateserver Data To Display
There are two ways to give fateserver the data it needs to display: using or not using SSH. The official way to submit results is through SSH; but if you are just testing or playing around with fateserver, you can save the hassle by using a small trick.
Using SSH
See the official guide for submitting test for instructions to submit test results. Simply change this line in your fate config script:
fate_recv="ssh -T fate@fate.ffmpeg.org" # command to submit report
to
fate_recv="ssh -T fate@localhost" # command to submit report
Not Using SSH
If you are just testing fateserver and not use it for real, not using SSH might be a good idea. You can first create a wrapper file for fate_recv
with contents:
#!/bin/sh export FATEDIR=/var/www/fateweb FATE_USER=<yourid> /var/www/fateserver/fate-recv.sh -
And then change this line in your fate config script:
fate_recv="ssh -T fate@fate.ffmpeg.org" # command to submit report
to
fate_recv="/path/of/your/script.sh" # command to submit report
After that, follow the official guide for submitting test.
Using Git
WIP
Acknowledgements
Thanks to Ramiro Polla for writing the initial version of this guide. Major updates (in 2014) made by me (Timothy Gu).