X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=source%2Fsteps%2FInstallWriteConfig.py;h=95f50699b7f3febf27bc349b19ce30b42959625c;hb=67804cf640321ef514677de8f5f925d71ab45707;hp=98167f914d877452f7a17218f36a6f224e57df54;hpb=d4be39e78e9a1a0c1885958e74189280a281be1b;p=bootmanager.git diff --git a/source/steps/InstallWriteConfig.py b/source/steps/InstallWriteConfig.py index 98167f9..95f5069 100644 --- a/source/steps/InstallWriteConfig.py +++ b/source/steps/InstallWriteConfig.py @@ -1,4 +1,3 @@ -#!/usr/bin/python # # Copyright (c) 2003 Intel Corporation # All rights reserved. @@ -7,13 +6,14 @@ # All rights reserved. # expected /proc/partitions format +# pylint: disable=c0111, c0103 + import os import os.path from Exceptions import * import utils -import BootAPI -import ModelOptions + def Run(vars, log): @@ -24,7 +24,7 @@ def Run(vars, log): /etc/ssh/ssh_host_key /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_dsa_key - + Expect the following variables from the store: VERSION the version of the install SYSIMG_PATH the path where the system image will be mounted @@ -36,11 +36,11 @@ def Run(vars, log): configuration file Sets the following variables: None - + """ - log.write( "\n\nStep: Install: Writing configuration files.\n") - + log.write("\n\nStep: Install: Writing configuration files.\n") + # make sure we have the variables we need try: VERSION = vars["VERSION"] @@ -52,7 +52,7 @@ def Run(vars, log): raise ValueError("SYSIMG_PATH") PARTITIONS = vars["PARTITIONS"] - if PARTITIONS == None: + if PARTITIONS is None: raise ValueError("PARTITIONS") PLCONF_DIR = vars["PLCONF_DIR"] @@ -63,13 +63,14 @@ def Run(vars, log): if INTERFACE_SETTINGS == "": raise ValueError("INTERFACE_SETTINGS") - except KeyError, var: + except KeyError as var: raise BootManagerException("Missing variable in vars: {}\n".format(var)) - except ValueError, var: + except ValueError as var: raise BootManagerException("Variable in vars, shouldn't be: {}\n".format(var)) log.write("Setting local time to UTC\n") - utils.sysexec_chroot(SYSIMG_PATH, + utils.sysexec_chroot( + SYSIMG_PATH, "ln -sf /usr/share/zoneinfo/UTC /etc/localtime", log) log.write("Creating system directory {}\n".format(PLCONF_DIR)) @@ -78,29 +79,27 @@ def Run(vars, log): return 0 log.write("Writing system /etc/fstab\n") - fstab = file("{}/etc/fstab".format(SYSIMG_PATH), "w") - fstab.write("{} none swap sw 0 0\n"\ - .format(PARTITIONS["mapper-swap"])) - fstab.write("{} / ext3 defaults 1 1\n"\ - .format(PARTITIONS["mapper-root"])) - if (vars['ONE_PARTITION'] != '1'): - if vars['virt'] == 'vs': - fstab.write("{} /vservers ext3 tagxid,defaults 1 2\n"\ - .format(PARTITIONS["mapper-vservers"])) - else: - fstab.write("{} /vservers btrfs defaults 1 2\n"\ - .format(PARTITIONS["mapper-vservers"])) - fstab.write("none /proc proc defaults 0 0\n") - fstab.write("none /dev/shm tmpfs defaults 0 0\n") - fstab.write("none /dev/pts devpts defaults 0 0\n") - fstab.close() + with open("{}/etc/fstab".format(SYSIMG_PATH), "w") as fstab: + fstab.write("{} none swap sw 0 0\n"\ + .format(PARTITIONS["swap"])) + fstab.write("{} / ext3 defaults 1 1\n"\ + .format(PARTITIONS["root"])) + if (vars['ONE_PARTITION'] != '1'): + if vars['virt'] == 'vs': + fstab.write("{} /vservers ext3 tagxid,defaults 1 2\n"\ + .format(PARTITIONS["vservers"])) + else: + fstab.write("{} /vservers btrfs defaults 1 2\n"\ + .format(PARTITIONS["vservers"])) + fstab.write("none /proc proc defaults 0 0\n") + fstab.write("none /dev/shm tmpfs defaults 0 0\n") + fstab.write("none /dev/pts devpts defaults 0 0\n") log.write("Writing system /etc/issue\n") - issue= file("{}/etc/issue".format(SYSIMG_PATH), "w") - issue.write("PlanetLab Node: \\n\n") - issue.write("Kernel \\r on an \\m\n") - issue.write("http://www.planet-lab.org\n\n") - issue.close() + with open("{}/etc/issue".format(SYSIMG_PATH), "w") as issue: + issue.write("PlanetLab Node: \\n\n") + issue.write("Kernel \\r on an \\m\n") + issue.write("http://www.planet-lab.org\n\n") if (vars['ONE_PARTITION'] != '1'): log.write("Setting up authentication (non-ssh)\n") @@ -119,33 +118,45 @@ def Run(vars, log): method = vars['INTERFACE_SETTINGS']['method'] except: pass - + if method == "dhcp": utils.sysexec("cp /etc/resolv.conf {}/etc/".format(SYSIMG_PATH), log) - log.write("Writing node install version\n") + log.write("Writing node install_version\n") utils.makedirs("{}/etc/planetlab".format(SYSIMG_PATH)) - ver = file("{}/etc/planetlab/install_version".format(SYSIMG_PATH), "w") - ver.write("{}\n".format(VERSION)) - ver.close() + with open("{}/etc/planetlab/install_version".format(SYSIMG_PATH), "w") as ver: + ver.write("{}\n".format(VERSION)) - # for upgrades : do not overwrite already existing keys + # for upgrades : do not overwrite already existing keys log.write("Creating ssh host keys\n") key_gen_prog = "/usr/bin/ssh-keygen" + # fedora23 seems to come with a release of openssh that lacks suppport + # for ssh1, and thus rsa1 keys; so we consider that failing to produce + # the rsa1 key is not a showstopper key_specs = [ - ("/etc/ssh/ssh_host_key", 'rsa1', "SSH1 RSA"), - ("/etc/ssh/ssh_host_rsa_key", 'rsa', "SSH2 RSA"), - ("/etc/ssh/ssh_host_dsa_key", 'dsa', "SSH2 DSA"), + ("/etc/ssh/ssh_host_key", 'rsa1', "SSH1 RSA", False), + ("/etc/ssh/ssh_host_rsa_key", 'rsa', "SSH2 RSA", True), + ("/etc/ssh/ssh_host_dsa_key", 'dsa', "SSH2 DSA", True), ] - for key_file, key_type, label in key_specs: + for key_file, key_type, label, mandatory in key_specs: abs_file = "{}/{}".format(SYSIMG_PATH, key_file) if not os.path.exists(abs_file): - log.write("Generating {} host key {}\n".format(label, key_file)) - utils.sysexec_chroot(SYSIMG_PATH, "{} -q -t {} -f {} -C '' -N ''"\ - .format(key_gen_prog, key_type, key_file), log) - utils.sysexec("chmod 600 {}/{}".format(SYSIMG_PATH, key_file), log) - utils.sysexec("chmod 644 {}/{}.pub".format(SYSIMG_PATH, key_file), log) + log.write("Generating {} host key {} (mandatory success={})\n" + .format(label, key_file, mandatory)) + if mandatory: + run = utils.sysexec + run_chroot = utils.sysexec_chroot + else: + run = utils.sysexec_noerr + run_chroot = utils.sysexec_chroot_noerr + run_chroot( + SYSIMG_PATH, + "{} -q -t {} -f {} -C '' -N ''" + .format(key_gen_prog, key_type, key_file), + log) + run("chmod 600 {}/{}".format(SYSIMG_PATH, key_file), log) + run("chmod 644 {}/{}.pub".format(SYSIMG_PATH, key_file), log) return 1