Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save netravnen/b192d8cecf91353b1c401f14ae7d9ec4 to your computer and use it in GitHub Desktop.
Save netravnen/b192d8cecf91353b1c401f14ae7d9ec4 to your computer and use it in GitHub Desktop.
Generates '/etc/apt/sources.list' compatible lists for Ubuntu releases
#!/usr/bin/env python3
import argparse
import getpass
import os
import time
import sys
import lsb_release
# Only LTS release codenames will be listed here - https://wiki.ubuntu.com/Releases
KNOWN_CODENAMES = ['bionic', #18.04
'xenial', #16.04
'trysty'] #14.04
# Get current OS codename
CURRENT_CODENAME = lsb_release.get_lsb_information().get('CODENAME')
# Global DOMAIN for ubuntu archives
UBUNTU_ARCHIVE_SOURCE = 'http://archive.canonical.com/ubuntu'
TEMPLATE = """
# Start: Generated by '{user}' with '{program}' on '{date}'
# Binary
deb {url} {codename} main restricted universe multiverse
deb {url} {codename}-proposed main restricted universe multiverse
deb {url} {codename}-security main restricted universe multiverse
deb {url} {codename}-updates main restricted universe multiverse
deb {url} {codename}-backports main restricted universe multiverse
# Source
deb-src {url} {codename} main restricted universe multiverse
deb-src {url} {codename}-proposed main restricted universe multiverse
deb-src {url} {codename}-security main restricted universe multiverse
deb-src {url} {codename}-updates main restricted universe multiverse
deb-src {url} {codename}-backports main restricted universe multiverse
# End: Generated by '{user}' with '{program}' on '{date}'
"""
def main(args):
valid = validate_codename(CURRENT_CODENAME)
if not valid:
print("[ERR] Codename '{}' is not among the known codenames ({})."
.format(CURRENT_CODENAME, ', '.join(KNOWN_CODENAMES)), file=sys.stderr)
print("[ERR] Exiting...", file=sys.stderr)
sys.exit(1)
# ISO 8601 with 'minute' timespec. same as `date -Imin`
now_iso8601 = time.strftime('%Y-%m-%dT%H:%M%z', time.gmtime())
# The name of this file
script_name = os.path.basename(__file__)
user = getpass.getuser()
print(TEMPLATE.strip().format(
program=script_name,
date=now_iso8601,
user=user,
url=UBUNTU_ARCHIVE_SOURCE,
codename=CURRENT_CODENAME,
))
def validate_codename(codename):
if codename not in KNOWN_CODENAMES:
return False
return True
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description="Generates '/etc/apt/sources.list' compatible lists for Ubuntu releases")
args = parser.parse_args()
main(args)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment