Howto set up a mirror of

By Chris Chroom, 2004; revised by Jonas Holmgren, 2008.

Due to an increasing number of DDoS attacks we had to restrict this service to official mirrors only. Please contact us if you have questions about what the requirements are to become an official mirror.

Please don't hesitate to email us if you are trying to set up a mirror and having problems.

Things you need

These instructions assume that you have shell access to a UNIX/Linux web server that has rsync and Apache installed.

Root access makes it easier to tweak the Apache setup but it's not necessary.

Mirror the MIA using rsync

Decide where on your file system you are going to store the MIA archive. For instance:


Prepare the file that will contain the password used for authenticating to the rsync module:

    cat <<- EOF > /etc/rsync/marxists.secret
    chmod 600 /etc/rsync/marxists.secret

Start the download (synchronization) with

    rsync -rptzv --delete --no-motd --password-file=/etc/rsync/marxists.secret /var/www/marxists-org/html/

For rsync versions prior to 3.0.7, use this instead:

     export USER=username
     export RSYNC_PASSWORD=password
     rsync -rptzv --delete --no-motd /var/www/marxists-org/html/
     unset USER

This will take a while as there will be over 100GB downloaded the first time.

Setup Apache

If you don't have write permissions in the /etc/httpd/conf.d or /etc/apache2/sites-available directory then you can skip this set of instructions.

Add the following to either /etc/httpd/conf.d/mia.conf (RHEL, CentOS, etc.) or /etc/apache2/sites-available/mia.conf (Debian, Ubuntu, etc.):

# example of a named-based virtual host configuration
<VirtualHost *:80>

	DocumentRoot	/var/www/marxists-org/html

	<Directory	/var/www/marxists-org/html>
		DirectoryIndex index.htm index.html
		Options -Indexes +FollowSymLinks
		AllowOverride None
		<IfVersion >= 2.3>
			Require all granted
		<IfVersion < 2.3>
			Order allow,deny
			Allow from all
	<IfVersion >= 2.3>
		LogLevel info rewrite:warn
	<IfVersion < 2.3>
		RewriteLogLevel 1

	ErrorLog ${APACHE_LOG_DIR}/
	CustomLog ${APACHE_LOG_DIR}/ combined

Using cron to automate updates

There is no need to run rsync as root so the crontab can be edited as a regular user. The only requirement is that this user has write permissions in the webroot, e.g. /var/www/marxists-org/html/.

Use the command crontab -e to open the crontab in editor mode, this will generally open in vi, and then add a line like this:

# run at quarter past one every morning
15 1 * * *      /usr/bin/rsync -rptzv --delete --no-motd --stats --password-file=/etc/rsync/marxists.secret \
       /var/www/marxists-org/html/ 2>&1 >>/var/log/

Internal Notes

A replacement for rsh can be specified, such as ssh. Here's an example that uses SSH to get a subdirectory branch.

rsync -rptzv -e ssh ~/Documents


Contact the Marxists Internet Archive Admin Committee for further information