diff options
Diffstat (limited to 'ec2-set-apt-sources.py')
-rwxr-xr-x | ec2-set-apt-sources.py | 77 |
1 files changed, 19 insertions, 58 deletions
diff --git a/ec2-set-apt-sources.py b/ec2-set-apt-sources.py index d48e5167..10fea8ec 100755 --- a/ec2-set-apt-sources.py +++ b/ec2-set-apt-sources.py @@ -19,70 +19,31 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # import os -import sys -import urllib -import socket -import apt -import apt_pkg +import subprocess from Cheetah.Template import Template -def checkServer(): - s = socket.socket() - try: - address = '169.254.169.254' - port = 80 - s.connect((address,port)) - except socket.error, e: - print "!!! Unable to connect to %s." % address - sys.exit(0) +import ec2init -def detectZone(): - api_ver = '2008-02-01' +def main(): + ec2 = ec2init.EC2Init() - base_url = 'http://169.254.169.254/%s/meta-data' % api_ver - zone = urllib.urlopen('%s/placement/availability-zone' % base_url).read() - if zone.startswith("us"): - archive = "http://us.ec2.archive.ubuntu.com/ubuntu/" - elif zone.startswith("eu"): - archive = "http://eu.ec2.archive.ubuntu.com/ubuntu/" + mirror = ec2.get_mirror_for_availability_zone() - return(archive) + if not os.path.exists("/var/run/ec2/sources.lists"): + t = os.popen("lsb_release -cs").read() + codename = t.strip() -def updateList(filename): - mirror = detectZone() - if not os.path.exists("/var/ec2/sources.lists"): - t = os.popen("lsb_release -c").read() - codename = t.split() - distro = codename[1] - - mp = {'mirror' : mirror, 'codename' : distro} - t = Template(file="/etc/ec2-init/templates/sources.list.tmpl", searchList=[mp]) - f = open("/var/ec2/sources.list", "w") - f.write('%s' %(t)) + mp = { 'mirror' : mirror, 'codename' : codename } + t = Template(file='/etc/ec2-init/templates/sources.list.tmpl', searchList=[mp]) + f = open("/var/run/ec2/sources.list", "w") + f.write(t.respond()) f.close() - os.system("mv /etc/apt/sources.list /etc/apt/sources.list-ec2-init") - os.symlink("/var/ec2/sources.list", "/etc/apt/sources.list") - cache = apt.Cache(apt.progress.OpProgress()) - prog = apt.progress.FetchProgress() - cache.update(prog) - - os.system('touch %s' %(filename)) - -def get_ami_id(): - api_ver = '2008-02-01' - - url = 'http://169.254.169.254/%s/meta-data' % api_ver - ami_id = urllib.urlopen('%s/ami-id/' %url).read() - return ami_id - - -checkServer() - -ami_id = get_ami_id() -filename = '/var/ec2/.apt-already-ran.%s' %ami_id + if not os.path.exists("/etc/apt/sources.list-ec2-init"): + os.rename('/etc/apt/sources.list', '/etc/apt/sources.list-ec2-init') + os.symlink('/var/run/ec2/sources.list', '/etc/apt/sources.list') + aptget = subprocess.Popen(['apt-get', 'update']) + aptget.communicate() -if os.path.exists(filename): - print "ec2-set-apt-sources already ran....skipping." -else: - updateList(filename) +if __name__ == '__main__': + main() |