mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-10-03 17:50:11 +02:00
added 'mirrors' option to config for giving official mirror URLs
serverwebroot has long supported uploading to multiple servers, this bit of metadata communicates those official mirrors to the client so that it can automatically do something useful with that information. closes #14 https://gitlab.com/fdroid/fdroidserver/issues/14
This commit is contained in:
parent
a7a053c4f5
commit
3967a0068b
@ -149,6 +149,18 @@ The repository of older versions of applications from the main demo repository.
|
|||||||
# 'bar.info:/var/www/fdroid',
|
# 'bar.info:/var/www/fdroid',
|
||||||
# }
|
# }
|
||||||
|
|
||||||
|
# Any mirrors of this repo, for example all of the servers declared in
|
||||||
|
# serverwebroot, will automatically be used by the client. If one
|
||||||
|
# mirror is not working, then the client will try another. If the
|
||||||
|
# client has Tor enabled, then the client will prefer mirrors with
|
||||||
|
# .onion addresses. This base URL will be used for both the main repo
|
||||||
|
# and the archive, if it is enabled. So these URLs should end in the
|
||||||
|
# 'fdroid' base of the F-Droid part of the web server like serverwebroot.
|
||||||
|
#
|
||||||
|
# mirrors = {
|
||||||
|
# 'https://foo.bar/fdroid',
|
||||||
|
# 'http://foobarfoobarfoobar.onion/fdroid',
|
||||||
|
# }
|
||||||
|
|
||||||
# optionally specific which identity file to use when using rsync over SSH
|
# optionally specific which identity file to use when using rsync over SSH
|
||||||
#
|
#
|
||||||
|
@ -27,6 +27,7 @@ import socket
|
|||||||
import zipfile
|
import zipfile
|
||||||
import hashlib
|
import hashlib
|
||||||
import pickle
|
import pickle
|
||||||
|
import urlparse
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from xml.dom.minidom import Document
|
from xml.dom.minidom import Document
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
@ -760,6 +761,15 @@ def make_index(apps, sortedids, apks, repodir, archive, categories):
|
|||||||
|
|
||||||
repoel = doc.createElement("repo")
|
repoel = doc.createElement("repo")
|
||||||
|
|
||||||
|
mirrorcheckfailed = False
|
||||||
|
for mirror in config.get('mirrors', []):
|
||||||
|
base = os.path.basename(urlparse.urlparse(mirror).path.rstrip('/'))
|
||||||
|
if config.get('nonstandardwebroot') is not True and base != 'fdroid':
|
||||||
|
logging.error("mirror '" + mirror + "' does not end with 'fdroid'!")
|
||||||
|
mirrorcheckfailed = True
|
||||||
|
if mirrorcheckfailed:
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
if archive:
|
if archive:
|
||||||
repoel.setAttribute("name", config['archive_name'])
|
repoel.setAttribute("name", config['archive_name'])
|
||||||
if config['repo_maxage'] != 0:
|
if config['repo_maxage'] != 0:
|
||||||
@ -767,6 +777,9 @@ def make_index(apps, sortedids, apks, repodir, archive, categories):
|
|||||||
repoel.setAttribute("icon", os.path.basename(config['archive_icon']))
|
repoel.setAttribute("icon", os.path.basename(config['archive_icon']))
|
||||||
repoel.setAttribute("url", config['archive_url'])
|
repoel.setAttribute("url", config['archive_url'])
|
||||||
addElement('description', config['archive_description'], doc, repoel)
|
addElement('description', config['archive_description'], doc, repoel)
|
||||||
|
urlbasepath = os.path.basename(urlparse.urlparse(config['archive_url']).path)
|
||||||
|
for mirror in config.get('mirrors', []):
|
||||||
|
addElement('mirror', urlparse.urljoin(mirror, urlbasepath), doc, repoel)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
repoel.setAttribute("name", config['repo_name'])
|
repoel.setAttribute("name", config['repo_name'])
|
||||||
@ -775,8 +788,11 @@ def make_index(apps, sortedids, apks, repodir, archive, categories):
|
|||||||
repoel.setAttribute("icon", os.path.basename(config['repo_icon']))
|
repoel.setAttribute("icon", os.path.basename(config['repo_icon']))
|
||||||
repoel.setAttribute("url", config['repo_url'])
|
repoel.setAttribute("url", config['repo_url'])
|
||||||
addElement('description', config['repo_description'], doc, repoel)
|
addElement('description', config['repo_description'], doc, repoel)
|
||||||
|
urlbasepath = os.path.basename(urlparse.urlparse(config['repo_url']).path)
|
||||||
|
for mirror in config.get('mirrors', []):
|
||||||
|
addElement('mirror', urlparse.urljoin(mirror, urlbasepath), doc, repoel)
|
||||||
|
|
||||||
repoel.setAttribute("version", "14")
|
repoel.setAttribute("version", "15")
|
||||||
repoel.setAttribute("timestamp", str(int(time.time())))
|
repoel.setAttribute("timestamp", str(int(time.time())))
|
||||||
|
|
||||||
nosigningkey = False
|
nosigningkey = False
|
||||||
|
@ -129,6 +129,7 @@ cd $REPOROOT
|
|||||||
|
|
||||||
$fdroid init
|
$fdroid init
|
||||||
sed -i.tmp 's,^ *repo_description.*,repo_description = """获取已安装在您的设备上的应用的,' config.py
|
sed -i.tmp 's,^ *repo_description.*,repo_description = """获取已安装在您的设备上的应用的,' config.py
|
||||||
|
echo "mirrors = {'https://foo.bar/fdroid', 'http://secret.onion/fdroid'}" >> config.py
|
||||||
mkdir metadata
|
mkdir metadata
|
||||||
cp $WORKSPACE/tests/urzip.apk repo/
|
cp $WORKSPACE/tests/urzip.apk repo/
|
||||||
cp $WORKSPACE/tests/metadata/info.guardianproject.urzip.txt metadata/
|
cp $WORKSPACE/tests/metadata/info.guardianproject.urzip.txt metadata/
|
||||||
|
Loading…
Reference in New Issue
Block a user