From 67804cf640321ef514677de8f5f925d71ab45707 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Mon, 31 Dec 2018 13:20:25 +0100 Subject: [PATCH] various cleanups and cosmetic improvements in utils and InstallWriteConfig still py2, but closer to py3 --- source/steps/InstallWriteConfig.py | 81 +++++++++++++++--------------- source/utils.py | 74 ++++++++++++--------------- 2 files changed, 74 insertions(+), 81 deletions(-) diff --git a/source/steps/InstallWriteConfig.py b/source/steps/InstallWriteConfig.py index 381e9b1..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["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") - 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,17 +118,16 @@ 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") 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" @@ -153,9 +151,12 @@ def Run(vars, log): 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_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 diff --git a/source/utils.py b/source/utils.py index 76d2d47..c97d8be 100644 --- a/source/utils.py +++ b/source/utils.py @@ -1,4 +1,3 @@ -#!/usr/bin/python # # Copyright (c) 2003 Intel Corporation # All rights reserved. @@ -7,29 +6,30 @@ # All rights reserved. # expected /proc/partitions format +# pylint: disable=c0111 + from __future__ import print_function -import os, sys, shutil +import sys +import os +import shutil import subprocess import shlex import socket import fcntl -import string -import exceptions +# handling breakpoints in the startup process +import select from Exceptions import * #################### -# the simplest way to debug is to let the node take off, +# the simplest way to debug is to let the node take off, # ssh into it as root using the debug ssh key in /etc/planetlab -# then go to /tmp/source +# then go to /tmp/source # edit this file locally to turn on breakpoints if needed, then run # ./BootManager.py #################### -### handling breakpoints in the startup process -import select, sys, string - ### global debugging settings # enabling this will cause the node to ask for breakpoint-mode at startup @@ -53,15 +53,15 @@ def prompt_for_breakpoint_mode(): display = "[y]/n" else: display = "y/[n]" - sys.stdout.write ("Want to run in breakpoint mode ? {} ".format(display)) + sys.stdout.write("Want to run in breakpoint mode ? {} ".format(display)) sys.stdout.flush() - r, w, e = select.select ([sys.stdin], [], [], PROMPT_TIMEOUT) + r, w, e = select.select([sys.stdin], [], [], PROMPT_TIMEOUT) if r: - answer = string.strip(sys.stdin.readline()) + answer = sys.stdin.readline().strip() else: sys.stdout.write("\nTimed-out ({}s)".format(PROMPT_TIMEOUT)) if answer: - BREAKPOINT_MODE = (answer == "y" or answer == "Y") + BREAKPOINT_MODE = (answer in 'yY') else: BREAKPOINT_MODE = default_answer label = "Off" @@ -69,7 +69,7 @@ def prompt_for_breakpoint_mode(): label = "On" sys.stdout.write("\nCurrent BREAKPOINT_MODE is {}\n".format(label)) -def breakpoint (message, cmd = None): +def breakpoint (message, cmd=None): if BREAKPOINT_MODE: @@ -81,7 +81,7 @@ def breakpoint (message, cmd = None): os.system(cmd) else: - print("Ignoring breakpoint (BREAKPOINT_MODE=False) : {}".format(message)) + print("Ignoring breakpoint (BREAKPOINT_MODE=False) : {}".format(message)) ######################################## @@ -105,7 +105,7 @@ def makedirs(path): os.listdir(path) except OSError: raise BootManagerException("Unable to create directory tree: {}".format(path)) - + return 1 @@ -122,9 +122,9 @@ def removedir(path): try: shutil.rmtree(path) - except OSError as desc: + except OSError: raise BootManagerException("Unable to remove directory tree: {}".format(path)) - + return 1 @@ -173,16 +173,16 @@ def sysexec(cmd, log=None, fsck=False, shell=False): returncode = prog.wait() if fsck: - # The exit code returned by fsck is the sum of the following conditions: - # 0 - No errors - # 1 - File system errors corrected - # 2 - System should be rebooted - # 4 - File system errors left uncorrected - # 8 - Operational error - # 16 - Usage or syntax error - # 32 - Fsck canceled by user request - # 128 - Shared library error - if returncode != 0 and returncode != 1: + # The exit code returned by fsck is the sum of the following conditions: + # 0 - No errors + # 1 - File system errors corrected + # 2 - System should be rebooted + # 4 - File system errors left uncorrected + # 8 - Operational error + # 16 - Usage or syntax error + # 32 - Fsck canceled by user request + # 128 - Shared library error + if returncode not in (0, 1): raise BootManagerException("Running {} failed (rc={})".format(cmd, returncode)) else: if returncode != 0: @@ -196,15 +196,7 @@ def sysexec_chroot(path, cmd, log=None, shell=False): """ same as sysexec, but inside a chroot """ - preload = "" - release = os.uname()[2] - # 2.6.12 kernels need this - if release[:5] == "2.6.1": - library = "{}/lib/libc-opendir-hack.so".format(path) - if not os.path.exists(library): - shutil.copy("./libc-opendir-hack.so", library) - preload = "/bin/env LD_PRELOAD=/lib/libc-opendir-hack.so" - sysexec("chroot {} {} {}".format(path, preload, cmd), log, shell=shell) + return sysexec("chroot {} {}".format(path, cmd), log, shell=shell) def sysexec_chroot_noerr(path, cmd, log=None, shell=False): @@ -268,11 +260,11 @@ def get_mac_from_interface(ifname): given a device name, like eth0, return its mac_address. return None if the device doesn't exist. """ - + SIOCGIFHWADDR = 0x8927 # magic number - s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) - ifname = string.strip(ifname) + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + ifname = ifname.strip() ifr = ifname + '\0'*(32-len(ifname)) try: @@ -280,7 +272,7 @@ def get_mac_from_interface(ifname): ret = ':'.join(["{:02x}".format(ord(n)) for n in r[18:24]]) except IOError as e: ret = None - + return ret def check_file_hash(filename, hash_filename): -- 2.43.0