def refresh_arch_repo(repo): """ Refresh all mirrors of an arch linux repo """ fname = '{0!s}.db'.format(repo.repo_id) for mirror in repo.mirror_set.filter(refresh=True): res = find_mirror_url(mirror.url, [fname]) mirror.last_access_ok = response_is_valid(res) if mirror.last_access_ok: mirror_url = res.url text = 'Found arch repo - {0!s}'.format(mirror_url) info_message.send(sender=None, text=text) data = download_url(res, 'Downloading repo info:') if data is None: mirror.fail() return sha1 = get_sha1(data) if mirror.file_checksum == sha1: text = 'Mirror checksum has not changed, ' text += 'not refreshing package metadata' warning_message.send(sender=None, text=text) else: packages = extract_arch_packages(data) mirror.last_access_ok = True mirror.timestamp = datetime.now() update_mirror_packages(mirror, packages) mirror.file_checksum = sha1 packages.clear() else: mirror.fail() mirror.save()
def get_sha(checksum_type, data): """ Returns the checksum of the data. Returns None otherwise. """ if checksum_type == 'sha' or checksum_type == 'sha1': sha = get_sha1(data) elif checksum_type == 'sha256': sha = get_sha256(data) else: text = 'Unknown checksum type: {0!s}'.format(checksum_type) error_message.send(sender=None, text=text) return sha
def update_errata(force=False): """ Update CentOS errata from https://cefs.steve-meier.de/ and mark packages that are security updates """ data = download_errata_checksum() expected_checksum = parse_errata_checksum(data) data = download_errata() actual_checksum = get_sha1(data) if actual_checksum != expected_checksum: e = 'CEFS checksum did not match, skipping errata parsing' error_message.send(sender=None, text=e) else: if data: parse_errata(bunzip2(data), force)
def refresh_deb_repo(repo): """ Refresh a debian repo. Checks for the Packages* files to determine what the mirror urls are and then downloads and extracts packages from those files. """ formats = ['Packages.bz2', 'Packages.gz', 'Packages'] if lzma is not None: formats.insert(0, 'Packages.xz') for mirror in repo.mirror_set.filter(refresh=True): res = find_mirror_url(mirror.url, formats) mirror.last_access_ok = response_is_valid(res) if mirror.last_access_ok: mirror_url = res.url text = 'Found deb repo - {0!s}'.format(mirror_url) info_message.send(sender=None, text=text) data = download_url(res, 'Downloading repo info:') if data is None: mirror.fail() return sha1 = get_sha1(data) if mirror.file_checksum == sha1: text = 'Mirror checksum has not changed, ' text += 'not refreshing package metadata' warning_message.send(sender=None, text=text) else: packages = extract_deb_packages(data, mirror_url) mirror.last_access_ok = True mirror.timestamp = datetime.now() update_mirror_packages(mirror, packages) mirror.file_checksum = sha1 packages.clear() else: mirror.fail() mirror.save()