summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AptSources/DistInfo.py17
-rw-r--r--AptSources/aptsources.py316
-rw-r--r--data/templates/Debian.info.in83
-rw-r--r--data/templates/Debian.mirrors757
-rw-r--r--debian/changelog2
-rw-r--r--debian/control4
-rw-r--r--debian/dirs2
-rw-r--r--debian/docs0
-rwxr-xr-xutils/get_debian_mirrors.py66
9 files changed, 1126 insertions, 121 deletions
diff --git a/AptSources/DistInfo.py b/AptSources/DistInfo.py
index 2dbd9a1b..6387dbd2 100644
--- a/AptSources/DistInfo.py
+++ b/AptSources/DistInfo.py
@@ -43,6 +43,17 @@ class Suite:
self.distribution = None
self.available = True
+ def get_comp_desc(self, comp, short=False):
+ ''' Return a human readable description of a component '''
+ if self.components.has_key(comp):
+ if self.components[comp][1] == "" or short == True:
+ return self.components[comp][0]
+ elif self.components[comp][1] != "":
+ return self.components[comp][1]
+ else:
+ return "Unnamed component"
+ return None
+
class Component:
def __init__(self):
self.name = ""
@@ -102,7 +113,7 @@ class DistInfo:
# reuse some properties of the parent suite
if suite.match_uri == None:
suite.match_uri = nanny.match_uri
- if suite.valid_mirrors == None:
+ if suite.valid_mirrors == []:
suite.valid_mirrors = nanny.valid_mirrors
if suite.base_uri == None:
suite.base_uri = nanny.base_uri
@@ -148,7 +159,7 @@ class DistInfo:
if __name__ == "__main__":
- d = DistInfo ("Ubuntu", "../../data/templates")
+ d = DistInfo ("Ubuntu", "/usr/share/python-aptsources/templates")
print d.changelogs_uri
for suite in d.suites:
print "\nSuite: %s" % suite.name
@@ -157,7 +168,7 @@ if __name__ == "__main__":
print "MatchURI: %s" % suite.match_uri
print "Mirrors: %s" % suite.valid_mirrors
for component in suite.components:
- print " %s - %s - %s - %s" % (component,
+ print " %s - %s - %s" % (component,
suite.components[component][0],
suite.components[component][1])
for child in suite.children:
diff --git a/AptSources/aptsources.py b/AptSources/aptsources.py
index 713b0ff8..646a92ac 100644
--- a/AptSources/aptsources.py
+++ b/AptSources/aptsources.py
@@ -32,7 +32,7 @@ import shutil
import time
import os.path
import sys
-
+from gettext import gettext as _
#import pdb
#from UpdateManager.Common.DistInfo import DistInfo
@@ -141,7 +141,7 @@ class SourceEntry:
self.disabled = True
pieces = string.split(line[1:])
# if it looks not like a disabled deb line return
- if not (pieces[0] == "deb" or pieces[0] == "deb-src"):
+ if not pieces[0] in ("rpm", "rpm-src", "deb", "deb-src"):
self.invalid = True
return
else:
@@ -160,7 +160,7 @@ class SourceEntry:
# Type, deb or deb-src
self.type = string.strip(pieces[0])
# Sanity check
- if self.type not in ("deb", "deb-src"):
+ if self.type not in ("deb", "deb-src", "rpm", "rpm-src"):
self.invalid = True
return
# URI
@@ -306,7 +306,8 @@ class SourcesList:
" restore sources.list files based on the backup extension "
dir = apt_pkg.Config.FindDir("Dir::Etc")
file = apt_pkg.Config.Find("Dir::Etc::sourcelist")
- if os.path.exists(dir+file+backup_ext):
+ if os.path.exists(dir+file+backup_ext) and \
+ os.path.exists(dir+file):
shutil.copy(dir+file+backup_ext,dir+file)
# now sources.list.d
partsdir = apt_pkg.Config.FindDir("Dir::Etc::sourceparts")
@@ -321,7 +322,7 @@ class SourcesList:
if backup_ext == None:
backup_ext = time.strftime("%y%m%d.%H%M")
for source in self.list:
- if not source.file in already_backuped:
+ if not source.file in already_backuped and os.path.exists(source.file):
shutil.copy(source.file,"%s%s" % (source.file,backup_ext))
return backup_ext
@@ -421,40 +422,24 @@ class SourceEntryMatcher:
return found
class Distribution:
- def __init__(self):
+ def __init__(self, id, codename, description, release):
""" Container for distribution specific informations """
# LSB information
- self.id = ""
- self.codename = ""
- self.description = ""
- self.release = ""
-
- # get the LSB information
- lsb_info = []
- for lsb_option in ["-i", "-c", "-d", "-r"]:
- pipe = os.popen("lsb_release %s -s" % lsb_option)
- lsb_info.append(pipe.read().strip())
- del pipe
- (self.id, self.codename, self.description, self.release) = lsb_info
+ self.id = id
+ self.codename = codename
+ self.description = description
+ self.release = release
- # get a list of country codes and real names
- self.countries = {}
- try:
- f = open("/usr/share/iso-codes/iso_3166.tab", "r")
- lines = f.readlines()
- for line in lines:
- parts = line.split("\t")
- self.countries[parts[0].lower()] = parts[1]
- except:
- print "could not open file '%s'" % file
- else:
- f.close()
+ self.binary_type = "deb"
+ self.source_type = "deb-src"
- def get_sources(self, sources_list):
+ def get_sources(self, sourceslist):
"""
Find the corresponding template, main and child sources
for the distribution
"""
+
+ self.sourceslist = sourceslist
# corresponding sources
self.source_template = None
self.child_sources = []
@@ -475,8 +460,8 @@ class Distribution:
self.used_servers = []
# find the distro template
- for template in sources_list.matcher.templates:
- if template.name == self.codename and\
+ for template in self.sourceslist.matcher.templates:
+ if self.is_codename(template.name) and\
template.distribution == self.id:
#print "yeah! found a template for %s" % self.description
#print template.description, template.base_uri, template.components
@@ -493,11 +478,11 @@ class Distribution:
cdrom_comps = []
enabled_comps = []
source_code = []
- for source in sources_list.list:
+ for source in self.sourceslist.list:
if source.invalid == False and\
- source.dist == self.codename and\
+ self.is_codename(source.dist) and\
source.template and\
- source.template.name == self.codename:
+ self.is_codename(source.template.name):
#print "yeah! found a distro repo: %s" % source.line
# cdroms need do be handled differently
if source.uri.startswith("cdrom:") and \
@@ -507,21 +492,23 @@ class Distribution:
elif source.uri.startswith("cdrom:") and \
source.disabled == True:
self.cdrom_sources.append(source)
- elif source.type == "deb" and source.disabled == False:
+ elif source.type == self.binary_type and \
+ source.disabled == False:
self.main_sources.append(source)
comps.extend(source.comps)
media.append(source.uri)
- elif source.type == "deb" and source.disabled == True:
+ elif source.type == self.binary_type and \
+ source.disabled == True:
self.disabled_sources.append(source)
- elif source.type.endswith("-src") and source.disabled == False:
+ elif source.type == self.source_type and source.disabled == False:
self.source_code_sources.append(source)
- elif source.type.endswith("-src") and source.disabled == True:
+ elif source.type == self.source_type and source.disabled == True:
self.disabled_sources.append(source)
if source.invalid == False and\
source.template in self.source_template.children:
- if source.disabled == False and source.type == "deb":
+ if source.disabled == False and source.type == self.binary_type:
self.child_sources.append(source)
- elif source.disabled == False and source.type == "deb-src":
+ elif source.disabled == False and source.type == self.source_type:
self.source_code_sources.append(source)
else:
self.disabled_sources.append(source)
@@ -541,22 +528,6 @@ class Distribution:
# the main server is stored in the template
self.main_server = self.source_template.base_uri
- # try to guess the nearest mirror from the locale
- # FIXME: for debian we need something different
- if self.id == "Ubuntu":
- locale = os.getenv("LANG", default="en.UK")
- a = locale.find("_")
- z = locale.find(".")
- if z == -1:
- z = len(locale)
- country_code = locale[a+1:z].lower()
- self.nearest_server = "http://%s.archive.ubuntu.com/ubuntu/" % \
- country_code
- if self.countries.has_key(country_code):
- self.country = self.countries[country_code]
- else:
- self.country = None
-
# other used servers
for medium in self.used_media:
if not medium.startswith("cdrom:"):
@@ -568,7 +539,7 @@ class Distribution:
else:
self.default_server = self.main_sources[0].uri
- def add_source(self, sources_list, type=None,
+ def add_source(self, type=None,
uri=None, dist=None, comps=None, comment=""):
"""
Add distribution specific sources
@@ -581,18 +552,16 @@ class Distribution:
if comps == None:
comps = list(self.enabled_comps)
if type == None:
- type = "deb"
- if comment == "":
- comment == "Added by software-properties"
- new_source = sources_list.add(type, uri, dist, comps, comment)
+ type = self.binary_type
+ new_source = self.sourceslist.add(type, uri, dist, comps, comment)
# if source code is enabled add a deb-src line after the new
# source
- if self.get_source_code == True and not type.endswith("-src"):
- sources_list.add("%s-src" % type, uri, dist, comps, comment,
- file=new_source.file,
- pos=sources_list.list.index(new_source)+1)
+ if self.get_source_code == True and tpye == self.binary_type:
+ self.sourceslist.add(self.source_type, uri, dist, comps, comment,
+ file=new_source.file,
+ pos=self.sourceslist.list.index(new_source)+1)
- def enable_component(self, sourceslist, comp):
+ def enable_component(self, comp):
"""
Enable a component in all main, child and source code sources
(excluding cdrom based sources)
@@ -621,40 +590,41 @@ class Distribution:
sources = []
sources.extend(self.main_sources)
sources.extend(self.child_sources)
- sources.extend(self.source_code_sources)
# store what comps are enabled already per distro (where distro is
# e.g. "dapper", "dapper-updates")
comps_per_dist = {}
+ comps_per_sdist = {}
for s in sources:
- if s.type != "deb":
- continue
- if not comps_per_dist.has_key(s.dist):
- comps_per_dist[s.dist] = set()
- map(comps_per_dist[s.dist].add, s.comps)
+ if s.type == self.binary_type:
+ if not comps_per_dist.has_key(s.dist):
+ comps_per_dist[s.dist] = set()
+ map(comps_per_dist[s.dist].add, s.comps)
+ for s in self.source_code_sources:
+ if s.type == self.source_type:
+ if not comps_per_sdist.has_key(s.dist):
+ comps_per_sdist[s.dist] = set()
+ map(comps_per_sdist[s.dist].add, s.comps)
+
# check if there is a main source at all
if len(self.main_sources) < 1:
# create a new main source
- self.add_source(sourceslist, comps=["%s"%comp])
+ self.add_source(comps=["%s"%comp])
else:
# add the comp to all main, child and source code sources
for source in sources:
add_component_only_once(source, comps_per_dist)
- # now do the same for source dists
+ # check if there is a main source code source at all
if self.get_source_code == True:
- comps_per_dist = {}
- for s in self.source_code_sources:
- if s.type != "deb-src":
- continue
- if not comps_per_dist.has_key(s.dist):
- comps_per_dist[s.dist] = set()
- map(comps_per_dist[s.dist].add, s.comps)
- for source in self.source_code_sources:
- if comp not in source.comps:
- add_component_only_once(source, comps_per_dist)
-
+ if len(self.source_code_sources) < 1:
+ # create a new main source
+ self.add_source(type=self.source_type, comps=["%s"%comp])
+ else:
+ # add the comp to all main, child and source code sources
+ for source in self.source_code_sources:
+ add_component_only_once(source, comps_per_sdist)
- def disable_component(self, sourceslist, comp):
+ def disable_component(self, comp):
"""
Disable a component in all main, child and source code sources
(excluding cdrom based sources)
@@ -671,19 +641,181 @@ class Distribution:
if comp in source.comps:
source.comps.remove(comp)
if len(source.comps) < 1:
- sourceslist.remove(source)
+ self.sourceslist.remove(source)
def change_server(self, uri):
''' Change the server of all distro specific sources to
a given host '''
sources = []
+ seen = []
sources.extend(self.main_sources)
sources.extend(self.child_sources)
sources.extend(self.source_code_sources)
for source in sources:
- # FIXME: ugly
- if not "security.ubuntu.com" in source.uri:
- source.uri = uri
+ # Avoid creating duplicate entries
+ source.uri = uri
+ for comp in source.comps:
+ if [source.uri, source.dist, comp] in seen:
+ source.comps.remove(comp)
+ else:
+ seen.append([source.uri, source.dist, comp])
+ if len(source.comps) < 1:
+ self.sourceslist.remove(source)
+
+ def is_codename(self, name):
+ ''' Compare a given name with the release codename. '''
+ if name == self.codename:
+ return True
+ else:
+ return False
+
+ def get_server_list(self):
+ ''' Return a list of used and suggested servers '''
+
+ # Store all available servers:
+ # Name, URI, active
+ mirrors = []
+
+ mirrors.append([_("Main server"), self.main_server,
+ len(self.used_servers) == 1 and
+ self.used_servers[0] == self.main_server])
+
+ if len(self.used_servers) == 1 and not re.match(self.used_servers[0],
+ self.main_server):
+ # Only one server is used
+ server = self.used_servers[0]
+ mirrors.append([server, server, True])
+ elif len(self.used_servers) > 1:
+ # More than one server is used. Since we don't handle this case
+ # in the user interface we set "custom servers" to true and
+ # append a list of all used servers
+ mirrors.append([_("Custom servers"), None, True])
+ for server in self.used_servers:
+ if not [server, server, False] in mirrors:
+ mirrors.append([server, server, False])
+
+ return mirrors
+
+ if len(self.used_servers) == 1 and not is_single_server(self.main_server):
+ mirrors.append(["%s" % self.used_servers[0],
+ self.used_servers[0], True])
+ elif len(self.used_servers) > 1 or not is_single_server(self.main_server):
+ mirrors.append([_("Custom servers"), None, True])
+
+ return mirrors
+
+
+class DebianDistribution(Distribution):
+ ''' Class to support specific Debian features '''
+
+ def is_codename(self, name):
+ ''' Compare a given name with the release codename and check if
+ if it can be used as a synonym for a development releases '''
+ if name == self.codename or self.release in ("testing", "unstable"):
+ return True
+ else:
+ return False
+
+class UbuntuDistribution(Distribution):
+ ''' Class to support specific Ubuntu features '''
+ def get_mirrors(self):
+ Distribution.get_mirrors(self)
+ # get a list of country codes and real names
+ self.countries = {}
+ try:
+ f = open("/usr/share/iso-codes/iso_3166.tab", "r")
+ lines = f.readlines()
+ for line in lines:
+ parts = line.split("\t")
+ self.countries[parts[0].lower()] = parts[1]
+ except:
+ print "could not open file '%s'" % file
+ else:
+ f.close()
+
+ # try to guess the nearest mirror from the locale
+ self.country = None
+ locale = os.getenv("LANG", default="en.UK")
+ a = locale.find("_")
+ z = locale.find(".")
+ if z == -1:
+ z = len(locale)
+ country_code = locale[a+1:z].lower()
+ self.nearest_server = "http://%s.archive.ubuntu.com/ubuntu/" % \
+ country_code
+ if self.countries.has_key(country_code):
+ self.country = self.countries[country_code]
+
+ def get_server_list(self):
+ ''' Return a list of used and suggested servers '''
+
+ def get_mirror_name(server):
+ ''' Try to get a human readable name for the main mirror of a country'''
+ country = None
+ i = server.find("://")
+ l = server.find(".archive.ubuntu.com")
+ if i != -1 and l != -1:
+ country = server[i+len("://"):l]
+ if self.countries.has_key(country):
+ # TRANSLATORS: %s is a country
+ return _("Server for %s") % \
+ gettext.dgettext("iso-3166",
+ self.countries[country].rstrip()).rstrip()
+ else:
+ return("%s" % server)
+
+ # Store all available servers:
+ # Name, URI, active
+ mirrors = []
+ if len(self.used_servers) == 1 and self.used_servers[0] == self.main_server:
+ mirrors.append([_("Main server"), self.main_server, True])
+ mirrors.append([get_mirror_name(self.nearest_server),
+ self.nearest_server, False])
+ elif len(self.used_servers) == 1 and not re.match(self.used_servers[0],
+ self.main_server):
+ mirrors.append([_("Main server"), self.main_server, False])
+ # Only one server is used
+ server = self.used_servers[0]
+
+ # Append the nearest server if it's not already used
+ if not re.match(server, self.nearest_server):
+ mirrors.append([get_mirror_name(self.nearest_server),
+ self.nearest_server, False])
+ mirrors.append([get_mirror_name(server), server, True])
+
+ elif len(self.used_servers) > 1:
+ # More than one server is used. Since we don't handle this case
+ # in the user interface we set "custom servers" to true and
+ # append a list of all used servers
+ mirrors.append([_("Main server"), self.main_server, False])
+ mirrors.append([get_mirror_name(self.nearest_server),
+ self.nearest_server, False])
+ mirrors.append([_("Custom servers"), None, True])
+ for server in self.used_servers:
+ if re.match(server, self.nearest_server):
+ continue
+ elif not [get_mirror_name(server), server, False] in mirrors:
+ mirrors.append([get_mirror_name(server), server, False])
+
+ return mirrors
+
+def get_distro():
+ ''' Check the currently used distribution and return the corresponding
+ distriubtion class that supports distro specific features. '''
+ lsb_info = []
+ for lsb_option in ["-i", "-c", "-d", "-r"]:
+ pipe = os.popen("lsb_release %s -s" % lsb_option)
+ lsb_info.append(pipe.read().strip())
+ del pipe
+ (id, codename, description, release) = lsb_info
+ if id == "Ubuntu":
+ return UbuntuDistribution(id, codename, description,
+ release)
+ elif id == "Debian":
+ return DebianDistribution(id, codename, description,
+ release)
+ else:
+ return Distribution(id, codename, description, relase)
# some simple tests
if __name__ == "__main__":
diff --git a/data/templates/Debian.info.in b/data/templates/Debian.info.in
index ea2d1e53..8a2eead3 100644
--- a/data/templates/Debian.info.in
+++ b/data/templates/Debian.info.in
@@ -1,57 +1,98 @@
_ChangelogURI: http://packages.debian.org/changelogs/pool/%s/%s/%s/%s_%s/changelog
+Suite: etch
+RepositoryType: deb
+BaseURI: http://http.us.debian.org/debian/
+MatchUri: ftp[0-9]*\.[a-z]\.debian\.org
+MirrorsFile: /usr/share/python-aptsources/templates/Debian.mirrors
+_Description: Debian 4.0 'Etch'
+Component: main
+_CompDescription: Officially supported
+Component: contrib
+_CompDescription: DFSG-compatible Software with Non-Free Dependencies
+Component: non-free
+_CompDescription: Non-DFSG-compatible Software
+
+Suite: etch-proposed-updates
+RepositoryType: deb
+ParentSuite: etch
+_Description: Proposed updates
+
+Suite: etch/updates
+RepositoryType: deb
+ParentSuite: etch
+_Description: Security updates
+
Suite: sarge
RepositoryType: deb
-_BaseURI: http://http.us.debian.org/debian/
-_Description: Debian 3.1 "Sarge"
+BaseURI: http://http.us.debian.org/debian/
+MatchUri: ftp[0-9]*\.[a-z]\.debian\.org
+MirrorsFile: /usr/share/python-aptsources/templates/Debian.mirrors
+_Description: Debian 3.1 'Sarge'
Component: main
-Enabled: 1
_CompDescription: Officially supported
Component: contrib
-Enabled: 0
_CompDescription: DFSG-compatible Software with Non-Free Dependencies
Component: non-free
-Enabled: 0
_CompDescription: Non-DFSG-compatible Software
+Suite: sarge-proposed-updates
+RepositoryType: deb
+ParentSuite: sarge
+_Description: Proposed updates
+
Suite: sarge/updates
RepositoryType: deb
-_BaseURI: http://security.debian.org/
-_Description: Debian 3.1 "Sarge" Security Updates
+ParentSuite: sarge
+_Description: Security updates
+
+Suite: stable
+RepositoryType: deb
+BaseURI: http://http.us.debian.org/debian/
+MatchUri: ftp[0-9]*\.[a-z]\.debian\.org
+MirrorsFile: /usr/share/python-aptsources/templates/Debian.mirrors
+_Description: Debian current stable release
Component: main
-Enabled: 1
_CompDescription: Officially supported
Component: contrib
-Enabled: 0
_CompDescription: DFSG-compatible Software with Non-Free Dependencies
Component: non-free
-Enabled: 0
_CompDescription: Non-DFSG-compatible Software
-Suite: etch
+Suite: testing
RepositoryType: deb
-_BaseURI: http://http.us.debian.org/debian/
-_Description: Debian "Etch" (testing)
+BaseURI: http://http.us.debian.org/debian/
+MatchUri: ftp[0-9]*\.[a-z]\.debian\.org
+MirrorsFile: /usr/share/python-aptsources/templates/Debian.mirrors
+_Description: Debian testing
Component: main
-Enabled: 1
_CompDescription: Officially supported
Component: contrib
-Enabled: 0
_CompDescription: DFSG-compatible Software with Non-Free Dependencies
Component: non-free
-Enabled: 0
_CompDescription: Non-DFSG-compatible Software
Suite: sid
RepositoryType: deb
-_BaseURI: http://http.us.debian.org/debian/
-_Description: Debian "Sid" (unstable)
+BaseURI: http://http.us.debian.org/debian/
+MatchUri: ftp[0-9]*\.[a-z]\.debian\.org
+MirrorsFile: /usr/share/python-aptsources/templates/Debian.mirrors
+_Description: Debian 'Sid' (unstable)
+Component: main
+_CompDescription: Officially supported
+Component: contrib
+_CompDescription: DFSG-compatible Software with Non-Free Dependencies
+Component: non-free
+_CompDescription: Non-DFSG-compatible Software
+
+Suite: unstable
+RepositoryType: deb
+BaseURI: http://http.us.debian.org/debian/
+MirrorsFile: /usr/share/python-aptsources/templates/Debian.mirrors
+_Description: Debian 'Sid' (unstable)
Component: main
-Enabled: 1
_CompDescription: Officially supported
Component: contrib
-Enabled: 0
_CompDescription: DFSG-compatible Software with Non-Free Dependencies
Component: non-free
-Enabled: 0
_CompDescription: Non-DFSG-compatible Software
diff --git a/data/templates/Debian.mirrors b/data/templates/Debian.mirrors
new file mode 100644
index 00000000..88a4c8c7
--- /dev/null
+++ b/data/templates/Debian.mirrors
@@ -0,0 +1,757 @@
+http://debian.logiclinux.com/debian/
+ftp://ftp.ccc.uba.ar/pub/linux/debian/debian/
+http://ftp.ccc.uba.ar/pub/linux/debian/debian/
+ftp://ftp.at.debian.org/debian/
+ftp://debian.sil.at/debian/
+ftp://ftp.debian.at/debian/
+http://ftp.at.debian.org/debian/
+http://debian.sil.at/debian/
+http://ftp.debian.at/debian/
+ftp://gd.tuwien.ac.at/opsys/linux/debian/
+ftp://ftp.tuwien.ac.at/opsys/linux/debian/
+http://gd.tuwien.ac.at/opsys/linux/debian/
+http://ftp.tuwien.ac.at/opsys/linux/debian/
+ftp://debian.mur.at/debian/
+ftp://algo.mur.at/debian/
+http://debian.mur.at/debian/
+http://algo.mur.at/debian/
+ftp://ftp.tu-graz.ac.at/mirror/debian/
+ftp://ftp.tugraz.at/mirror/debian/
+http://ftp.tu-graz.ac.at/mirror/debian/
+http://ftp.tugraz.at/mirror/debian/
+ftp://ftp.univie.ac.at/systems/linux/debian/debian/
+http://ftp.univie.ac.at/systems/linux/debian/debian/
+ftp://debian.inode.at/debian/
+http://debian.inode.at/debian/
+ftp://ftp.wa.au.debian.org/debian/
+ftp://ftp.it.net.au/debian/
+ftp://poledra.it.net.au/debian/
+http://ftp.wa.au.debian.org/debian/
+http://ftp.it.net.au/debian/
+http://poledra.it.net.au/debian/
+ftp://ftp.au.debian.org/debian/
+ftp://planetmirror.com/debian/
+http://ftp.au.debian.org/debian/
+http://planetmirror.com/debian/
+ftp://mirror.aarnet.edu.au/debian/
+http://mirror.aarnet.edu.au/debian/
+ftp://ftp.monash.edu.au/pub/linux/debian/
+http://ftp.monash.edu.au/pub/linux/debian/
+ftp://ftp.uwa.edu.au/mirrors/linux/debian/
+ftp://mirror.eftel.com/debian/
+ftp://mirror.q-net.net.au/debian/
+http://mirror.eftel.com/debian/
+http://mirror.q-net.net.au/debian/
+ftp://mirror.pacific.net.au/debian/
+http://mirror.pacific.net.au/debian/
+ftp://ftp.iinet.net.au/debian/debian/
+http://ftp.iinet.net.au/debian/debian/
+http://debian.goldweb.com.au/debian/
+ftp://mirror.datafast.net.au/debian/
+http://mirror.datafast.net.au/debian/
+http://mirror.optus.net/debian/
+http://mirror.optusnet.com.au/debian/
+ftp://ftp.kulnet.kuleuven.ac.be/debian/
+http://ftp.kulnet.kuleuven.ac.be/debian/
+ftp://ftp.easynet.be/debian/
+http://ftp.easynet.be/ftp/debian/
+ftp://ftp.belnet.be/debian/
+ftp://dalet.belnet.be/debian/
+http://ftp.belnet.be/debian/
+http://dalet.belnet.be/debian/
+ftp://ftp.debian.skynet.be/debian/
+http://ftp.debian.skynet.be/ftp/debian/
+ftp://ftp.scarlet.be/pub/debian/
+http://ftp.scarlet.be/pub/debian/
+ftp://ftp.bg.debian.org/debian/
+ftp://debian.spnet.net/debian/
+http://ftp.bg.debian.org/debian/
+http://debian.spnet.net/debian/
+ftp://debian.ludost.net/debian/
+ftp://marla.ludost.net/debian/
+http://debian.ludost.net/debian/
+http://marla.ludost.net/debian/
+ftp://ftp.uni-sofia.bg/debian/
+http://ftp.uni-sofia.bg/debian/
+ftp://debian.telecoms.bg/debian/
+http://debian.telecoms.bg/debian/
+ftp://ftp.br.debian.org/debian/
+ftp://ftp.inf.ufpr.br/debian/
+ftp://www.inf.ufpr.br/debian/
+http://ftp.br.debian.org/debian/
+http://ftp.inf.ufpr.br/debian/
+http://www.inf.ufpr.br/debian/
+http://sft.if.usp.br/debian/
+http://fma.if.usp.br/debian/
+ftp://linorg.usp.br/debian/
+http://linorg.usp.br/debian/
+http://linux.iq.usp.br/debian/
+http://torio.iq.usp.br/debian/
+ftp://ftp.pucpr.br/debian/
+http://ftp.pucpr.br/debian/
+ftp://www.las.ic.unicamp.br/pub/debian/
+ftp://seraph.las.ic.unicamp.br/pub/debian/
+ftp://ftp.las.ic.unicamp.br/pub/debian/
+http://www.las.ic.unicamp.br/pub/debian/
+http://seraph.las.ic.unicamp.br/pub/debian/
+http://ftp.las.ic.unicamp.br/pub/debian/
+http://debian.pop-sc.rnp.br/debian/
+http://mirror.pop-sc.rnp.br/debian/
+ftp://linux.org.by/debian/
+http://linux.org.by/debian/
+ftp://ftp.mgts.by/debian/
+http://debian.yorku.ca/debian/
+ftp://ftp3.nrc.ca/debian/
+http://ftp3.nrc.ca/debian/
+ftp://gulus.usherbrooke.ca/debian/
+http://gulus.usherbrooke.ca/debian/
+ftp://mirror.cpsc.ucalgary.ca/debian/
+http://mirror.cpsc.ucalgary.ca/debian/
+http://mirror.peer1.net/debian/
+ftp://debian.mirror.rafal.ca/debian/
+http://debian.mirror.rafal.ca/debian/
+ftp://debian.savoirfairelinux.net/debian/
+ftp://gpl.savoirfairelinux.net/debian/
+http://debian.savoirfairelinux.net/debian/
+http://gpl.savoirfairelinux.net/debian/
+ftp://ftp.ch.debian.org/debian/
+ftp://debian.ethz.ch/debian/
+ftp://kaerpf.ethz.ch/debian/
+http://ftp.ch.debian.org/debian/
+http://debian.ethz.ch/debian/
+http://kaerpf.ethz.ch/debian/
+ftp://mirror.switch.ch/mirror/debian/
+http://mirror.switch.ch/ftp/mirror/debian/
+ftp://ftp.cl.debian.org/debian/
+ftp://debian.ciencias.uchile.cl/debian/
+http://ftp.cl.debian.org/debian/
+http://debian.ciencias.uchile.cl/debian/
+ftp://debian.experimentos.cl/Debian/debian/
+ftp://experimentos1.fis.utfsm.cl/Debian/debian/
+http://debian.experimentos.cl/debian/
+http://experimentos1.fis.utfsm.cl/debian/
+http://debian.ubiobio.cl/debian/
+ftp://ftp.linuxforum.net/debian/
+ftp://www2.linuxforum.net/debian/
+ftp://mirrors.geekbone.org/debian/
+http://mirrors.geekbone.org/debian/
+ftp://debian.cn99.com/debian/
+ftp://mirrors.cn99.com/debian/
+http://debian.cn99.com/debian/
+http://mirrors.cn99.com/debian/
+http://mirror.vmmatrix.net/debian/
+http://mirrors.vmmatrix.net/debian/
+http://fatboy.umng.edu.co/debian/
+ftp://ftp.cz.debian.org/debian/
+ftp://ftp.debian.cz/debian/
+ftp://www.debian.cz/debian/
+http://ftp.cz.debian.org/debian/
+http://ftp.debian.cz/debian/
+http://www.debian.cz/debian/
+ftp://debian.sh.cvut.cz/debian/
+ftp://ftp.sh.cvut.cz/debian/
+http://debian.sh.cvut.cz/debian/
+http://ftp.sh.cvut.cz/debian/
+ftp://ftp.zcu.cz/pub/linux/debian/
+http://ftp.zcu.cz/ftp/pub/linux/debian/
+ftp://ftp.de.debian.org/debian/
+ftp://ftp1.de.debian.org/debian/
+ftp://debian.inf.tu-dresden.de/debian/
+http://ftp.de.debian.org/debian/
+http://ftp1.de.debian.org/debian/
+http://debian.inf.tu-dresden.de/debian/
+ftp://ftp2.de.debian.org/debian/
+ftp://ftp.rfc822.org/debian/
+ftp://source.rfc822.org/debian/
+http://ftp2.de.debian.org/debian/
+http://ftp.rfc822.org/debian/
+http://source.rfc822.org/debian/
+ftp://ftp.tu-clausthal.de/pub/linux/debian/
+ftp://pegasus.rz.tu-clausthal.de/pub/linux/debian/
+ftp://debian.uni-essen.de/debian/
+ftp://debian.physik.uni-essen.de/debian/
+http://debian.uni-essen.de/debian/
+http://debian.physik.uni-essen.de/debian/
+ftp://ftp.freenet.de/pub/ftp.debian.org/debian/
+http://ftp.freenet.de/debian/
+ftp://ftp.uni-erlangen.de/pub/Linux/debian/
+http://ftp.uni-erlangen.de/pub/Linux/debian/
+ftp://sunsite.informatik.rwth-aachen.de/pub/Linux/debian/
+http://sunsite.informatik.rwth-aachen.de/ftp/pub/Linux/debian/
+ftp://ftp-stud.fht-esslingen.de/debian/
+http://ftp-stud.fht-esslingen.de/debian/
+ftp://ftp.stw-bonn.de/debian/
+http://ftp.stw-bonn.de/debian/
+ftp://ftp.fu-berlin.de/pub/unix/linux/mirrors/debian/
+ftp://Hefe.ZEDAT.FU-Berlin.DE/pub/unix/linux/mirrors/debian/
+ftp://debian.tu-bs.de/debian/
+http://debian.tu-bs.de/debian/
+ftp://ftp.uni-koeln.de/debian/
+http://ftp.uni-koeln.de/debian/
+ftp://debian.pffa.de/pub/mirrors/debian/
+ftp://debian.ipv6.fhtw-berlin.de/pub/mirrors/debian/
+http://debian.pffa.de/mirrors/debian/
+http://debian.ipv6.fhtw-berlin.de/mirrors/debian/
+ftp://ftp.mpi-sb.mpg.de/pub/linux/distributions/debian/debian/
+ftp://ftp.tiscali.de/pub/debian/debian/
+ftp://pandemonium.tiscali.de/pub/debian/debian/
+http://ftp.tiscali.de/pub/debian/debian/
+http://pandemonium.tiscali.de/pub/debian/debian/
+ftp://ftp.tu-chemnitz.de/pub/linux/debian/debian/
+http://ftp.tu-chemnitz.de/pub/linux/debian/debian/
+ftp://ftp.uni-kl.de/debian/
+http://ftp.uni-kl.de/debian/
+ftp://ftp.uni-bayreuth.de/pub/linux/Debian/debian/
+ftp://rsync.uni-bayreuth.de/pub/linux/Debian/debian/
+ftp://btr0x2.rz.uni-bayreuth.de/pub/linux/Debian/debian/
+ftp://btr0qx.rz.uni-bayreuth.de/pub/linux/Debian/debian/
+http://ftp.uni-bayreuth.de/linux/Debian/debian/
+http://rsync.uni-bayreuth.de/linux/Debian/debian/
+http://btr0x2.rz.uni-bayreuth.de/linux/Debian/debian/
+http://btr0qx.rz.uni-bayreuth.de/linux/Debian/debian/
+ftp://ftp.informatik.hu-berlin.de/pub/Mirrors/ftp.de.debian.org/debian/
+ftp://ftp.gwdg.de/pub/linux/debian/debian/
+http://ftp.gwdg.de/pub/linux/debian/debian/
+ftp://ftp.hosteurope.de/pub/linux/debian/
+http://ftp.hosteurope.de/pub/linux/debian/
+ftp://ftp.informatik.uni-frankfurt.de/pub/linux/Mirror/ftp.debian.org/debian/
+ftp://ftp.cs.uni-frankfurt.de/pub/linux/Mirror/ftp.debian.org/debian/
+http://ftp.informatik.uni-frankfurt.de/debian/
+http://ftp.cs.uni-frankfurt.de/debian/
+ftp://debian.netcologne.de/debian/
+http://debian.netcologne.de/debian/
+ftp://artfiles.org/debian/
+http://artfiles.org/debian/
+http://debian.intergenia.de/debian/
+http://debian.server4you.de/debian/
+http://debian.vserver.de/debian/
+http://debian.plusserver.de/debian/
+ftp://ftp.dk.debian.org/debian/
+ftp://mirrors.dotsrc.org/debian/
+http://ftp.dk.debian.org/debian/
+http://mirrors.dotsrc.org/debian/
+ftp://ftp.dkuug.dk/pub/debian/
+http://ftp.dkuug.dk/debian/
+http://mirror.here.dk/debian/
+http://debian.uni-c.dk/debian/
+http://ymer.uni-c.dk/debian/
+ftp://mirrors.telianet.dk/debian/
+ftp://mirrors.dk.telia.net/debian/
+http://mirrors.telianet.dk/debian/
+http://mirrors.dk.telia.net/debian/
+ftp://ftp.ee.debian.org/debian/
+ftp://ftp.linux.ee/debian/
+ftp://linux.ee/debian/
+http://ftp.ee.debian.org/debian/
+http://ftp.linux.ee/debian/
+http://linux.ee/debian/
+ftp://ftp.es.debian.org/debian/
+ftp://ulises.adi.uam.es/debian/
+http://ftp.es.debian.org/debian/
+http://ulises.adi.uam.es/debian/
+ftp://toxo.com.uvigo.es/debian/
+http://toxo.com.uvigo.es/debian/
+ftp://ftp.rediris.es/debian/
+http://ftp.rediris.es/debian/
+http://jane.uab.es/debian/
+ftp://ftp.caliu.info/debian/
+http://ftp.caliu.info/debian/
+ftp://ftp.cica.es/debian/
+ftp://horacio.cica.es/debian/
+ftp://ftp.gva.es/pub/mirror/debian/
+ftp://frigga.gva.es/pub/mirror/debian/
+http://ftp.gva.es/mirror/debian/
+http://frigga.gva.es/mirror/debian/
+ftp://ftp.gul.uc3m.es/debian/
+ftp://ftp.gul.es/debian/
+http://ftp.gul.uc3m.es/debian/
+http://ftp.gul.es/debian/
+ftp://ftp.fi.debian.org/debian/
+ftp://trumpetti.atm.tut.fi/debian/
+http://ftp.fi.debian.org/debian/
+http://trumpetti.atm.tut.fi/debian/
+ftp://ftp.funet.fi/pub/linux/mirrors/debian/
+http://ftp.funet.fi/pub/linux/mirrors/debian/
+ftp://ftp.jyu.fi/debian/
+ftp://lennon.cc.jyu.fi/debian/
+http://ftp.jyu.fi/debian/
+http://lennon.cc.jyu.fi/debian/
+ftp://ftp.fr.debian.org/debian/
+ftp://debian.proxad.net/debian/
+ftp://ftpmirror.proxad.net/debian/
+http://ftp.fr.debian.org/debian/
+http://debian.proxad.net/debian/
+http://ftpmirror.proxad.net/debian/
+ftp://ftp2.fr.debian.org/debian/
+ftp://ftp.oleane.net/debian/
+http://ftp2.fr.debian.org/debian/
+http://ftp.oleane.net/debian/
+ftp://ftp.iut-bm.univ-fcomte.fr/debian/
+http://ftp.iut-bm.univ-fcomte.fr/debian/
+ftp://ftp.proxad.net/mirrors/ftp.debian.org/
+ftp://ftp.free.fr/mirrors/ftp.debian.org/
+ftp://ftp.online.fr/mirrors/ftp.debian.org/
+ftp://ftp.proxad.fr/mirrors/ftp.debian.org/
+ftp://ftp.lip6.fr/pub/linux/distributions/debian/
+http://ftp.lip6.fr/pub/linux/distributions/debian/
+ftp://debian.ens-cachan.fr/debian/
+ftp://ftp.ens-cachan.fr/debian/
+http://debian.ens-cachan.fr/ftp/debian/
+http://ftp.ens-cachan.fr/ftp/debian/
+ftp://ftp.u-picardie.fr/mirror/debian/
+http://ftp.u-picardie.fr/mirror/debian/
+ftp://debian.mirrors.easynet.fr/debian/
+ftp://tengu.easynet.fr/debian/
+http://debian.mirrors.easynet.fr/
+http://tengu.easynet.fr/
+ftp://ftp.u-strasbg.fr/debian/
+http://ftp.u-strasbg.fr/debian/
+ftp://debian.ibisc.univ-evry.fr/debian/
+http://debian.ibisc.univ-evry.fr/debian/
+ftp://mir1.ovh.net/debian/
+http://mir1.ovh.net/debian/
+http://mir2.ovh.net/debian/
+http://mirror.ovh.net/debian/
+ftp://ftp.nerim.net/debian/
+http://ftp.nerim.net/debian/
+ftp://ftp.crihan.fr/debian/
+http://ftp.crihan.fr/debian/
+ftp://debian.mines.inpl-nancy.fr/debian/
+ftp://ftp.mines.inpl-nancy.fr/debian/
+http://debian.mines.inpl-nancy.fr/debian/
+http://ftp.mines.inpl-nancy.fr/debian/
+ftp://ftp.debian.ikoula.com/debian/
+ftp://webb.ens-cachan.fr/debian/
+ftp://debian.ens-cachan.fr/debian/
+http://webb.ens-cachan.fr/debian/
+http://debian.ens-cachan.fr/debian/
+ftp://mirrors.ircam.fr/pub/debian/
+http://mirrors.ircam.fr/pub/debian/
+ftp://ftp.uk.debian.org/debian/
+ftp://debian.hands.com/debian/
+http://ftp.uk.debian.org/debian/
+http://debian.hands.com/debian/
+ftp://debian.hands.com/debian/
+ftp://open.hands.com/debian/
+http://debian.hands.com/debian/
+http://open.hands.com/debian/
+ftp://ftp.demon.co.uk/pub/mirrors/linux/debian/
+ftp://ftp.demon.net/pub/mirrors/linux/debian/
+ftp://ftp.mcc.ac.uk/pub/linux/distributions/Debian/
+ftp://www.mirrorservice.org/sites/ftp.debian.org/debian/
+ftp://ftp.mirrorservice.org/sites/ftp.debian.org/debian/
+http://www.mirrorservice.org/sites/ftp.debian.org/debian/
+http://ftp.mirrorservice.org/sites/ftp.debian.org/debian/
+ftp://download.mirror.ac.uk/sites/ftp.debian.org/debian/
+ftp://ftp.mirror.ac.uk/sites/ftp.debian.org/debian/
+http://download.mirror.ac.uk/sites/ftp.debian.org/debian/
+http://ftp.mirror.ac.uk/sites/ftp.debian.org/debian/
+ftp://ftp.ticklers.org/debian/
+ftp://rib.ticklers.org/debian/
+http://ftp.ticklers.org/debian/
+http://rib.ticklers.org/debian/
+ftp://debian.blueyonder.co.uk/pub/debian/
+ftp://mirror2.blueyonder.co.uk/pub/debian/
+http://debian.blueyonder.co.uk/
+http://mirror2.blueyonder.co.uk/
+ftp://mirror.positive-internet.com/debian/
+http://mirror.positive-internet.com/debian/
+ftp://the.earth.li/debian/
+http://the.earth.li/debian/
+ftp://mirror.ox.ac.uk/debian/
+http://mirror.ox.ac.uk/debian/
+ftp://debian.otenet.gr/pub/linux/debian/
+http://debian.otenet.gr/debian/
+ftp://ftp.ntua.gr/pub/linux/debian/
+http://ftp.ntua.gr/pub/linux/debian/
+ftp://ftp.duth.gr/debian/
+http://ftp.duth.gr/debian/
+ftp://ftp.softnet.tuc.gr/pub/linux/debian/
+ftp://antirix.softnet.tuc.gr/pub/linux/debian/
+http://ftp.softnet.tuc.gr/ftp/linux/debian/
+http://antirix.softnet.tuc.gr/ftp/linux/debian/
+ftp://debian.internet.gr/debian/
+http://debian.internet.gr/debian/
+ftp://ftp.hk.debian.org/debian/
+ftp://ftp.debian.org.hk/debian/
+http://ftp.hk.debian.org/debian/
+http://ftp.debian.org.hk/debian/
+http://www.zentek-international.com/mirrors/debian/
+ftp://ftp.hr.debian.org/debian/
+ftp://debian.carnet.hr/debian/
+http://ftp.hr.debian.org/debian/
+http://debian.carnet.hr/debian/
+ftp://ftp.irb.hr/debian/
+http://ftp.irb.hr/debian/
+ftp://ftp.carnet.hr/debian/
+http://ftp.carnet.hr/debian/
+ftp://debian.iskon.hr/debian/
+http://debian.iskon.hr/debian/
+ftp://ftp.hu.debian.org/debian/
+ftp://ftp.fsn.hu/debian/
+http://ftp.hu.debian.org/debian/
+http://ftp.fsn.hu/debian/
+ftp://debian.inf.elte.hu/debian/
+http://debian.inf.elte.hu/debian/
+ftp://ftp.bme.hu/OS/Linux/dist/debian/
+http://ftp.bme.hu/OS/Linux/dist/debian/
+ftp://kebo.vlsm.org/debian/
+ftp://surabaya.vlsm.org/debian/
+ftp://katmai.its.ac.id/debian/
+http://kebo.vlsm.org/debian/
+http://surabaya.vlsm.org/debian/
+http://katmai.its.ac.id/debian/
+http://debian.indika.net.id/debian/
+ftp://ftp.ie.debian.org/debian/
+ftp://debian.heanet.ie/debian/
+ftp://debian.ipv6.heanet.ie/debian/
+ftp://canyonero.heanet.ie/debian/
+http://ftp.ie.debian.org/debian/
+http://debian.heanet.ie/debian/
+http://debian.ipv6.heanet.ie/debian/
+http://canyonero.heanet.ie/debian/
+ftp://ftp.esat.net/pub/linux/debian/
+http://ftp.esat.net/pub/linux/debian/
+http://mirror.hamakor.org.il/pub/mirrors/debian/
+ftp://ftp.iitm.ac.in/debian/
+http://ftp.iitm.ac.in/debian/
+ftp://ftp.is.debian.org/debian/
+ftp://ftp.rhnet.is/debian/
+http://ftp.is.debian.org/debian/
+http://ftp.rhnet.is/debian/
+ftp://ftp.it.debian.org/debian/
+ftp://ftp.bofh.it/debian/
+ftp://vlad-tepes.bofh.it/debian/
+http://ftp.it.debian.org/debian/
+http://ftp.bofh.it/debian/
+http://vlad-tepes.bofh.it/debian/
+ftp://ftp.bononia.it/debian/
+http://ftp.bononia.it/debian/
+ftp://freedom.dicea.unifi.it/pub/linux/debian/
+http://freedom.dicea.unifi.it/ftp/pub/linux/debian/
+ftp://ftp.eutelia.it/pub/Debian_Mirror/
+ftp://mi.mirror.garr.it/mirrors/debian/
+http://mi.mirror.garr.it/mirrors/debian/
+ftp://debian.fastweb.it/debian/
+http://debian.fastweb.it/debian/
+ftp://ftp.unina.it/pub/linux/distributions/debian/
+http://ftp.unina.it/pub/linux/distributions/debian/
+ftp://debian.fastbull.org/debian/
+ftp://bull02.fastbull.org/debian/
+http://debian.fastbull.org/debian/
+http://bull02.fastbull.org/debian/
+ftp://ftp.jp.debian.org/debian/
+ftp://ftp.nara.wide.ad.jp/debian/
+ftp://ftp.aist-nara.ac.jp/debian/
+http://ftp.jp.debian.org/debian/
+http://ftp.nara.wide.ad.jp/debian/
+http://ftp.aist-nara.ac.jp/debian/
+ftp://ftp2.jp.debian.org/debian/
+ftp://ftp.debian.or.jp/debian/
+ftp://http.debian.or.jp/debian/
+http://ftp2.jp.debian.org/debian/
+http://ftp.debian.or.jp/debian/
+http://http.debian.or.jp/debian/
+ftp://ring.asahi-net.or.jp/pub/linux/debian/debian/
+http://ring.asahi-net.or.jp/archives/linux/debian/debian/
+ftp://ftp.dti.ad.jp/pub/Linux/debian/
+http://ftp.dti.ad.jp/pub/Linux/debian/
+ftp://dennou-k.gfd-dennou.org/library/Linux/debian/
+ftp://dennou-k.gaia.h.kyoto-u.ac.jp/library/Linux/debian/
+http://dennou-k.gfd-dennou.org/library/Linux/debian/
+http://dennou-k.gaia.h.kyoto-u.ac.jp/library/Linux/debian/
+ftp://dennou-q.gfd-dennou.org/library/Linux/debian/
+ftp://dennou-q.geo.kyushu-u.ac.jp/library/Linux/debian/
+http://dennou-q.gfd-dennou.org/library/Linux/debian/
+http://dennou-q.geo.kyushu-u.ac.jp/library/Linux/debian/
+ftp://ftp.yz.yamagata-u.ac.jp/debian/
+ftp://linux.yz.yamagata-u.ac.jp/debian/
+http://ftp.yz.yamagata-u.ac.jp/debian/
+http://linux.yz.yamagata-u.ac.jp/debian/
+ftp://sb.itc.u-tokyo.ac.jp/DEBIAN/debian/
+ftp://ftp.ecc.u-tokyo.ac.jp/DEBIAN/debian/
+ftp://ftp.riken.go.jp/pub/Linux/debian/debian/
+http://ftp.riken.go.jp/pub/Linux/debian/debian/
+http://debian.shimpinomori.net/debian/
+ftp://www.ring.gr.jp/pub/linux/debian/debian/
+ftp://ftp.ring.gr.jp/pub/linux/debian/debian/
+http://www.ring.gr.jp/archives/linux/debian/debian/
+http://ftp.ring.gr.jp/archives/linux/debian/debian/
+ftp://ftp.jaist.ac.jp/pub/Linux/Debian/
+http://ftp.jaist.ac.jp/pub/Linux/Debian/
+ftp://ftp.kr.debian.org/debian/
+ftp://ftp.kaist.ac.kr/debian/
+http://ftp.kr.debian.org/debian/
+http://ftp.kaist.ac.kr/debian/
+ftp://ameba.sc-uni.ktu.lt/debian/
+http://ameba.sc-uni.ktu.lt/debian/
+ftp://debian.balt.net/debian/
+http://debian.balt.net/debian/
+ftp://ftp.latnet.lv/linux/debian/
+ftp://milzis.latnet.lv/linux/debian/
+http://ftp.latnet.lv/linux/debian/
+http://milzis.latnet.lv/linux/debian/
+ftp://nisamox.fciencias.unam.mx/debian/
+http://nisamox.fciencias.unam.mx/debian/
+http://debian.uni.edu.ni/debian/
+ftp://ftp.nl.debian.org/debian/
+ftp://slagroom.snt.utwente.nl/debian/
+http://ftp.nl.debian.org/debian/
+http://slagroom.snt.utwente.nl/debian/
+ftp://ftp.nluug.nl/pub/os/Linux/distr/debian/
+http://ftp.nluug.nl/pub/os/Linux/distr/debian/
+ftp://ftp.surfnet.nl/pub/os/Linux/distr/debian/
+http://ftp.surfnet.nl/os/Linux/distr/debian/
+ftp://download.xs4all.nl/pub/mirror/debian/
+ftp://dl.xs4all.nl/pub/mirror/debian/
+ftp://ftp.debian.nl/debian/
+ftp://morpheus.hoho.nl/debian/
+http://ftp.debian.nl/debian/
+http://morpheus.hoho.nl/debian/
+ftp://ftp.tiscali.nl/pub/mirrors/debian/
+http://ftp.tiscali.nl/debian/
+ftp://debian.essentkabel.com/debian/
+http://debian.essentkabel.com/debian/
+ftp://ftp.no.debian.org/debian/
+ftp://ftp.uninett.no/debian/
+http://ftp.no.debian.org/debian/
+http://ftp.uninett.no/debian/
+ftp://ftp.nz.debian.org/debian/
+ftp://ftp.citylink.co.nz/debian/
+http://ftp.nz.debian.org/debian/
+http://ftp.citylink.co.nz/debian/
+ftp://debian.ihug.co.nz/debian/
+http://debian.ihug.co.nz/debian/
+ftp://ftp.pl.debian.org/debian/
+ftp://ftp.task.gda.pl/debian/
+http://ftp.pl.debian.org/debian/
+http://ftp.task.gda.pl/debian/
+ftp://ftp.icm.edu.pl/pub/Linux/debian/
+ftp://sunsite.icm.edu.pl/pub/Linux/debian/
+http://ftp.icm.edu.pl/pub/Linux/debian/
+http://sunsite.icm.edu.pl/pub/Linux/debian/
+ftp://ftp.man.szczecin.pl/pub/Linux/debian/
+ftp://rubycon.man.szczecin.pl/pub/Linux/debian/
+ftp://ftp.uevora.pt/debian/
+ftp://khaverna.sc.uevora.pt/debian/
+http://ftp.uevora.pt/debian/
+http://khaverna.sc.uevora.pt/debian/
+ftp://ftp.eq.uc.pt/pub/software/Linux/debian/
+http://ftp.eq.uc.pt/software/Linux/debian/
+ftp://debian.ua.pt/debian/
+ftp://ftp.ua.pt/debian/
+http://debian.ua.pt/debian/
+http://ftp.ua.pt/debian/
+ftp://ftp.linux.pt/pub/mirrors/debian/
+http://ftp.linux.pt/pub/mirrors/debian/
+ftp://ftp.ro.debian.org/debian/
+ftp://ftp.iasi.roedu.net/debian/
+http://ftp.ro.debian.org/debian/
+http://ftp.iasi.roedu.net/debian/
+ftp://ftp.lug.ro/debian/
+http://ftp.lug.ro/debian/
+ftp://ftp.ru.debian.org/debian/
+ftp://ftp.chg.ru/debian/
+http://ftp.ru.debian.org/debian/
+http://ftp.chg.ru/debian/
+ftp://debian.nsu.ru/debian/
+http://debian.nsu.ru/debian/
+ftp://debian.udsu.ru/debian/
+ftp://ftp.udsu.ru/debian/
+http://debian.udsu.ru/debian/
+http://ftp.udsu.ru/debian/
+ftp://ftp.psn.ru/debian/
+ftp://server.psn.ru/debian/
+http://ftp.psn.ru/debian/
+http://server.psn.ru/debian/
+ftp://ftp.corbina.ru/pub/Linux/debian/
+ftp://earth.corbina.net/pub/Linux/debian/
+ftp://ftp.mipt.ru/debian/
+ftp://petrel.telecom.mipt.ru/debian/
+ftp://ftp.se.debian.org/debian/
+ftp://ftp.acc.umu.se/debian/
+http://ftp.se.debian.org/debian/
+http://ftp.acc.umu.se/debian/
+ftp://ftp.sunet.se/pub/os/Linux/distributions/debian/
+http://ftp.sunet.se/pub/os/Linux/distributions/debian/
+ftp://ftp.du.se/debian/
+http://ftp.du.se/debian/
+ftp://ftp.port80.se/debian/
+http://ftp.port80.se/debian/
+ftp://ftp.ds.hj.se/pub/os/linux/debian/
+http://ftp.ds.hj.se/pub/os/linux/debian/
+ftp://mirror.averse.net/debian/
+http://mirror.averse.net/debian/
+ftp://mirror.nus.edu.sg/pub/Debian/
+ftp://mirror.comp.nus.edu.sg/pub/Debian/
+http://mirror.nus.edu.sg/Debian/
+http://mirror.comp.nus.edu.sg/Debian/
+ftp://debian.wow-vision.com.sg/debian/
+http://debian.wow-vision.com.sg/debian/
+ftp://ftp.si.debian.org/debian/
+ftp://ftp.camtp.uni-mb.si/debian/
+ftp://debian.camtp.uni-mb.si/debian/
+http://ftp.si.debian.org/debian/
+http://ftp.camtp.uni-mb.si/debian/
+http://debian.camtp.uni-mb.si/debian/
+ftp://ftp.arnes.si/packages/debian/
+ftp://ftp.sk.debian.org/debian/
+ftp://ftp.tuke.sk/debian/
+ftp://ccfrog.ke.sanet.sk/debian/
+http://ftp.sk.debian.org/debian/
+http://ftp.tuke.sk/debian/
+http://ccfrog.ke.sanet.sk/debian/
+ftp://ftp.nectec.or.th/pub/linux-distributions/Debian/
+ftp://download.nectec.or.th/pub/linux-distributions/Debian/
+ftp://ftp.coe.psu.ac.th/debian/
+ftp://debian.coe.psu.ac.th/debian/
+http://ftp.coe.psu.ac.th/debian/
+http://debian.coe.psu.ac.th/debian/
+ftp://ftp.tr.debian.org/debian/
+ftp://debian.ankara.edu.tr/debian/
+ftp://ftp.ankara.edu.tr/debian/
+http://ftp.tr.debian.org/debian/
+http://debian.ankara.edu.tr/debian/
+http://ftp.ankara.edu.tr/debian/
+ftp://ftp.linux.org.tr/pub/mirrors/debian/
+ftp://ftp.tw.debian.org/debian/
+ftp://debian.linux.org.tw/debian/
+http://ftp.tw.debian.org/debian/
+http://debian.linux.org.tw/debian/
+ftp://debian.csie.ntu.edu.tw/pub/debian/
+http://debian.csie.ntu.edu.tw/debian/
+ftp://linux.cdpa.nsysu.edu.tw/debian/
+http://linux.cdpa.nsysu.edu.tw/debian/
+ftp://opensource.nchc.org.tw/debian/
+ftp://os.nchc.org.tw/debian/
+http://opensource.nchc.org.tw/debian/
+http://os.nchc.org.tw/debian/
+http://debian.nctu.edu.tw/debian/
+http://debian.ntcu.net/debian/
+ftp://debian.osdn.org.ua/pub/Debian/debian/
+http://debian.osdn.org.ua/debian/
+ftp://debian.org.ua/debian/
+ftp://mirror.3logic.net/debian/
+ftp://mirror.debian.org.ua/debian/
+http://debian.org.ua/debian/
+http://mirror.3logic.net/debian/
+http://mirror.debian.org.ua/debian/
+ftp://ftp.3logic.net/debian/
+ftp://ftp.us.debian.org/debian/
+ftp://http.us.debian.org/debian/
+http://ftp.us.debian.org/debian/
+http://http.us.debian.org/debian/
+ftp://ftp.debian.org/debian/
+http://ftp.debian.org/debian/
+ftp://debian.crosslink.net/debian/
+http://debian.crosslink.net/debian/
+ftp://ftp.gtlib.gatech.edu/pub/debian/
+http://ftp.gtlib.gatech.edu/debian/
+ftp://ftp.egr.msu.edu/debian/
+ftp://ike.egr.msu.edu/debian/
+http://ftp.egr.msu.edu/debian/
+http://ike.egr.msu.edu/debian/
+ftp://distro.ibiblio.org/pub/linux/distributions/debian/
+http://distro.ibiblio.org/pub/linux/distributions/debian/
+ftp://ftp-mirror.internap.com/pub/debian/
+http://ftp-mirror.internap.com/pub/debian/
+ftp://ftp.cerias.purdue.edu/pub/os/debian/
+ftp://ftp9.freebsd.org/pub/os/debian/
+ftp://ftp8.usa.openbsd.org/pub/os/debian/
+ftp://omelas.cerias.purdue.edu/pub/os/debian/
+http://ftp.cerias.purdue.edu/pub/os/debian/
+http://ftp9.freebsd.org/pub/os/debian/
+http://ftp8.usa.openbsd.org/pub/os/debian/
+http://omelas.cerias.purdue.edu/pub/os/debian/
+ftp://ftp.cs.unm.edu/mirrors/debian/
+ftp://thelma.cs.unm.edu/mirrors/debian/
+ftp://mirrors.cs.unm.edu/mirrors/debian/
+ftp://mirror.cs.wisc.edu/pub/mirrors/linux/debian/
+http://mirror.cs.wisc.edu/pub/mirrors/linux/debian/
+ftp://ftp.uwsg.indiana.edu/linux/debian/
+ftp://uwsg.iu.edu/linux/debian/
+http://ftp.uwsg.indiana.edu/linux/debian/
+http://uwsg.iu.edu/linux/debian/
+ftp://ftp.ndlug.nd.edu/debian/
+http://ftp.ndlug.nd.edu/mirrors/debian/
+ftp://debian.uchicago.edu/debian/
+ftp://linux.uchicago.edu/debian/
+http://debian.uchicago.edu/debian/
+http://linux.uchicago.edu/debian/
+ftp://carroll.aset.psu.edu/pub/linux/distributions/debian/
+ftp://carroll.cac.psu.edu/pub/linux/distributions/debian/
+http://carroll.aset.psu.edu/pub/linux/distributions/debian/
+http://carroll.cac.psu.edu/pub/linux/distributions/debian/
+ftp://debian.fifi.org/pub/debian/
+ftp://ftp.fifi.org/pub/debian/
+http://debian.fifi.org/debian/
+http://ftp.fifi.org/debian/
+ftp://gladiator.real-time.com/linux/debian/
+ftp://mirrors.kernel.org/debian/
+ftp://rsync.kernel.org/debian/
+http://mirrors.kernel.org/debian/
+http://rsync.kernel.org/debian/
+ftp://ftp.keystealth.org/debian/
+http://ftp.keystealth.org/debian/
+ftp://debian.lcs.mit.edu/debian/
+ftp://debian.ipv6.lcs.mit.edu/debian/
+http://debian.lcs.mit.edu/debian/
+http://debian.ipv6.lcs.mit.edu/debian/
+ftp://linux.csua.berkeley.edu/debian/
+ftp://screwdriver.csua.berkeley.edu/debian/
+http://linux.csua.berkeley.edu/debian/
+http://screwdriver.csua.berkeley.edu/debian/
+ftp://debian.secsup.org/pub/linux/debian/
+http://debian.secsup.org/
+ftp://debian.teleglobe.net/debian/
+ftp://cont1.njy.teleglobe.net/debian/
+ftp://cont1.lhx.teleglobe.net/debian/
+http://debian.teleglobe.net/
+http://cont1.njy.teleglobe.net/
+http://cont1.lhx.teleglobe.net/
+ftp://techweb.rfa.org/debian/
+ftp://chameleon.techweb.rfa.org/debian/
+http://techweb.rfa.org/debian/
+http://chameleon.techweb.rfa.org/debian/
+ftp://debian.osuosl.org/debian/
+ftp://debian.oregonstate.edu/debian/
+ftp://ftp.oregonstate.edu/debian/
+ftp://ftp.osuosl.org/debian/
+http://debian.osuosl.org/debian/
+http://debian.oregonstate.edu/debian/
+http://ftp.oregonstate.edu/debian/
+http://ftp.osuosl.org/debian/
+http://lyre.mit.edu/debian/
+ftp://mirror.anl.gov/pub/debian/
+http://mirror.anl.gov/debian/
+http://debian.2z.net/debian/
+ftp://sluglug.ucsc.edu/debian/
+http://sluglug.ucsc.edu/debian/
+ftp://mirrors.geeks.org/debian/
+http://mirrors.geeks.org/debian/
+http://debian.midco.net/debian/
+ftp://mirrors.usc.edu/pub/linux/distributions/debian/
+http://mirrors.usc.edu/pub/linux/distributions/debian/
+ftp://debian.mirrors.pair.com/
+http://debian.mirrors.pair.com/
+ftp://lug.mtu.edu/debian/
+http://lug.mtu.edu/debian/
+ftp://debian.mirrors.tds.net/debian/
+http://debian.mirrors.tds.net/debian/
+ftp://debian.cites.uiuc.edu/pub/debian/
+ftp://bazaar.cites.uiuc.edu/pub/debian/
+ftp://cosmos.cites.uiuc.edu/pub/debian/
+http://debian.cites.uiuc.edu/pub/debian/
+http://bazaar.cites.uiuc.edu/pub/debian/
+http://cosmos.cites.uiuc.edu/pub/debian/
+ftp://mirrors.tummy.com/pub/ftp.debian.org/
+http://mirrors.tummy.com/debian/
+ftp://debian.mirror.frontiernet.net/debian/
+http://debian.mirror.frontiernet.net/debian/
+http://debian.unesr.edu.ve/debian/
+ftp://ftp.is.co.za/debian/
+http://ftp.is.co.za/debian/
+ftp://ftp.sun.ac.za/debian/
+ftp://archive.sun.ac.za/debian/
+http://ftp.sun.ac.za/ftp/debian/
+http://archive.sun.ac.za/ftp/debian/
diff --git a/debian/changelog b/debian/changelog
index dc89f8be..99cfc55e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-python-aptsources (0.0.1) unstable; urgency=low
+python-aptsources (0.0.1) feisty; urgency=low
* Initial Release.
diff --git a/debian/control b/debian/control
index 1ede02b3..5f661bc6 100644
--- a/debian/control
+++ b/debian/control
@@ -1,9 +1,9 @@
Source: python-aptsources
-Section: unknown
+Section: python
Priority: optional
XS-Python-Version: all
Maintainer: Sebastian Heinlein <glatzor@ubuntu.com>
-Build-Depends: cdbs, debhelper (>= 5.0.37.2), python-central (>= 0.5), python-distutils-extra
+Build-Depends: cdbs, debhelper (>= 5.0.37.2), python-central (>= 0.5), python-distutils-extra, python-all-dev
Standards-Version: 3.7.2
Package: python-aptsources
diff --git a/debian/dirs b/debian/dirs
deleted file mode 100644
index ca882bbb..00000000
--- a/debian/dirs
+++ /dev/null
@@ -1,2 +0,0 @@
-usr/bin
-usr/sbin
diff --git a/debian/docs b/debian/docs
deleted file mode 100644
index e69de29b..00000000
--- a/debian/docs
+++ /dev/null
diff --git a/utils/get_debian_mirrors.py b/utils/get_debian_mirrors.py
new file mode 100755
index 00000000..5964de72
--- /dev/null
+++ b/utils/get_debian_mirrors.py
@@ -0,0 +1,66 @@
+#!/usr/bin/env python
+#
+# get_debian_mirrors.py
+#
+# Download the latest list with available mirrors from the Debian
+# website and extract the hosts from the raw page
+#
+# Copyright (c) 2006 Free Software Foundation Europe
+#
+# Author: Sebastian Heinlein <glatzor@ubuntu.com>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA
+
+import urllib2
+import re
+import os
+import commands
+import sys
+
+# the list of official Ubuntu servers
+mirrors = []
+# path to the local mirror list
+list_path = "../data/templates/Debian.mirrors"
+
+req = urllib2.Request("http://www.debian.org/mirror/mirrors_full")
+match = re.compile("^.*>([A-Za-z0-9-.\/_]+)<\/a>.*\n$")
+
+def add_sites(line, proto, sites, mirror_type):
+ path = match.sub(r"\1", line)
+ for site in sites:
+ mirror_type.append("%s://%s%s" % (proto, site.lstrip(), path))
+
+try:
+ print "Downloading mirrors list from the Debian website..."
+ uri=urllib2.urlopen(req)
+ for line in uri.readlines():
+ if line.startswith("Site:"):
+ sites = line[6:-1].split(",")
+ elif line.startswith('Packages over HTTP'):
+ add_sites(line, "http", sites, mirrors)
+ elif line.startswith('Packages over FTP'):
+ add_sites(line, "ftp", sites, mirrors)
+ uri.close()
+except:
+ print "Failed to download or to extract the mirrors list!"
+ sys.exit(1)
+
+print "Writing local mirrors list: %s" % list_path
+list = open(list_path, "w")
+for mirror in mirrors:
+ list.write("%s\n" % mirror)
+list.close()
+print "Done."