diff options
| -rw-r--r-- | AptSources/DistInfo.py | 17 | ||||
| -rw-r--r-- | AptSources/aptsources.py | 316 | ||||
| -rw-r--r-- | data/templates/Debian.info.in | 83 | ||||
| -rw-r--r-- | data/templates/Debian.mirrors | 757 | ||||
| -rw-r--r-- | debian/changelog | 2 | ||||
| -rw-r--r-- | debian/control | 4 | ||||
| -rw-r--r-- | debian/dirs | 2 | ||||
| -rw-r--r-- | debian/docs | 0 | ||||
| -rwxr-xr-x | utils/get_debian_mirrors.py | 66 |
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." |
