First, for users/downloaders: the address http://ftpmirror.gnu.org/ multiplexes between the mirrors, trying to choose one that is nearby and up to date. E.g., http://ftpmirror.gnu.org/emacs/ goes to a mirror's directory of GNU Emacs. We recommend using this generic ftpmirror.gnu.org address wherever possible in links, documentation, etc., to reduce load on the main GNU server.
Mirroring the GNU FTP server requires approximately 121GB disk space (as of December 2021). You can rsync directly from ftp.gnu.org:
rsync -rltpHS --delete-excluded rsync://ftp.gnu.org/gnu/ /your/dir/
However, please consider mirroring from another site, again to reduce load on the GNU server. These sites provide access to all the material on ftp.gnu.org. They update from us nightly (at least), and you may access them via rsync with the same options as above:
(South Africa)
(Canada)
(Canada)
(Canada)
(Canada)
(Canada)
(Canada)
(Canada)
(Arizona, USA)
(California, USA)
(California, USA)
(Idaho, USA)
(Illinois, USA)
(Indiana, USA)
(Massachusetts, USA)
(Brazil)
(Brazil)
(Ecuador)
(Morocco)
(China)
(China)
(Hong Kong)
(Japan)
(Korea)
(Taiwan)
(Austria)
(Finland)
(France)
(Germany)
(Germany)
(Germany)
(Germany)
(Germany)
(Hungary)
(Moldova)
(Moldova)
(Netherlands)
(Netherlands)
(Netherlands)
(Norway)
(Portugal)
(Romania)
(Serbia)
(Sweden)
(UK)
(UK)
(Ukraine)
(New Caledonia)
You can keep your mirror private, but we will be very grateful if you support free software by making it public. However, your mirror needs to meet the following guidelines to be accepted on our public mirror list:
To add your mirror to the public mirror list, we require (and recommend) a daily update frequency. After establishing your mirror, please contact <webmasters@gnu.org> so we can review it. Please provide the following:
It is very useful to make your mirror available to users via HTTP or HTTPS, so please support this if you can. We highly encourage new mirrors to support HTTPS as the most secure option.
Set up your web server configuration to avoid sending the Content-Encoding header because it causes problems with some gateways.
With Apache, we highly recommend the following setting, so that users can see full filenames in generated listings instead of having them be truncated:
IndexOptions NameWidth=*
If you set up an HTTPS mirror, please make sure its SSL certificate carries a valid signature from a certification authority; it's difficult for us to track mirrors with self-signed certificates. If you don't already have a valid signature, Let's Encrypt is a good place to get it.
ftp.gnu.org and other sites also offer alpha.gnu.org (around 10GB) for your mirroring pleasure:
(USA - primary site)
(Arizona, USA)
(Canada)
(Brazil)
(Ecuador)
(Morocco)
(Austria)
(Finland)
(France)
(Germany)
(Hungary)
(Moldova)
(Norway)
(Portugal)
(Sweden)
(UK)
(UK)
(Ukraine)
Nightly updates are sufficient for GNU FTP and Alpha material.
We also greatly appreciate additional mirrors of the nongnu projects hosted at savannah.nongnu.org. The total is currently around 51GB. To do this, we recommend you retrieve and update the files using rsync, with the same options as above for ftp.gnu.org, namely:
rsync -rltpHS --delete-excluded rsync://dl.sv.gnu.org/releases/ /your/dir
These options ensure that it is an exact mirror. (There will probably be some permission errors; just ignore them. They are due to choices or mistakes by individual project maintainers.)
It is fine to update savannah/nongnu once a day as well; twice a day if you like. More than that is not worth the bandwidth, the contents are not that dynamic.
If you can help with this, please email us with the url to your mirror so we can add you to the list. Thanks!
We no longer recommend creating web mirrors, because it has turned out that (a) few people can make use of them, and (b) many mirrors either became out of date or went offline relatively frequently. We don't want outdated information about the GNU project to be disseminated.
Nonetheless, if you wish to mirror www.gnu.org for your own
purposes, that is ok with us. We recommend using mod_proxy
.
Here is an
unsupported recipe of Apache directives for your
<VirtualHost>
:
ServerName gnumirror.example.org CacheRoot "/var/cache/mod_proxy" CacheDefaultExpire 86400 # for Apache 2.0+, value is in seconds ProxyPass / http://www.gnu.org/ CacheEnable disk /
(Thanks to Juri Hoerner for providing this Apache information.)