fateserver is the server software used to power It is written by the FFmpeg Project in 2011, using Perl CGI. The main repo for fateserver is located at git://, 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.


  • fateserver can't be on a sub-dir, which means that it must be something like, but can't be 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

  1. Get Apache HTTP Server including CGI module. On Debian derivatives do
    sudo apt-get install apache2 libcgi-pm-perl
  1. 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
  1. Get fateserver and mkdir server data directory.
    cd /var/www
    git clone git://
    mkdir /var/www/fateweb
  1. 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: From
    DocumentRoot /var/www
    DocumentRoot /var/www/fateserver
  1. Allow CGI to be executed in Apache, add this to /etc/apache2/apache2.conf:
    LoadModule cgi_module /usr/lib/apache2/modules/
    <Directory /var/www/fateserver>
            Options +ExecCGI
            AddHandler cgi-script .cgi .pl
  1. 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.
    1. Creating the user:
      sudo adduser fate
      sudo chown -hR fate:fate /var/www/fateweb
    2. 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/" <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.

I won't get into the basics of creating SSH keys and stuff like that: there are tons of guides online.

  1. Edit, set the $fatedir variable to the fateweb path, if yours is different from the default (/var/www/fateweb):
    our $fatedir = "/your/path";
  1. 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" # command to submit report


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:

export FATEDIR=/var/www/fateweb FATE_USER=<yourid>
/var/www/fateserver/ -

And then change this line in your fate config script:

fate_recv="ssh -T" # command to submit report


fate_recv="/path/of/your/"     # command to submit report

After that, follow the official guide for submitting test.

Using Git



Thanks to Ramiro Polla for writing the initial version of this guide. Major updates (in 2014) made by me (Timothy Gu).

Last modified 6 years ago Last modified on Dec 9, 2016, 3:50:10 PM
Note: See TracWiki for help on using the wiki.