+####################
+# 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
+# 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
+# production code should read False/False
+PROMPT_MODE = False
+# default for when prompt is turned off, or it's on but the timeout triggers
+BREAKPOINT_MODE = False
+
+# verbose mode is just fine
+VERBOSE_MODE = True
+# in seconds : if no input, proceed
+PROMPT_TIMEOUT = 5
+
+def prompt_for_breakpoint_mode ():
+
+ global BREAKPOINT_MODE
+ if PROMPT_MODE:
+ default_answer = BREAKPOINT_MODE
+ answer = ''
+ if BREAKPOINT_MODE:
+ display = "[y]/n"
+ else:
+ display = "y/[n]"
+ sys.stdout.write ("Want to run in breakpoint mode ? {} ".format(display))
+ sys.stdout.flush()
+ r, w, e = select.select ([sys.stdin], [], [], PROMPT_TIMEOUT)
+ if r:
+ answer = string.strip(sys.stdin.readline())
+ else:
+ sys.stdout.write("\nTimed-out ({}s)".format(PROMPT_TIMEOUT))
+ if answer:
+ BREAKPOINT_MODE = (answer == "y" or answer == "Y")
+ else:
+ BREAKPOINT_MODE = default_answer
+ label = "Off"
+ if BREAKPOINT_MODE:
+ label = "On"
+ sys.stdout.write("\nCurrent BREAKPOINT_MODE is {}\n".format(label))
+
+def breakpoint (message, cmd = None):
+
+ if BREAKPOINT_MODE:
+
+ if cmd is None:
+ cmd = "/bin/sh"
+ message = message + " -- Entering bash - type ^D to proceed"
+
+ print(message)
+ os.system(cmd)
+
+
+########################################
+def makedirs(path):