[Pkg-uml-devel] Patch: enables to run rootstrap in the background

shaulka at 012.net.il shaulka at 012.net.il
Sat Nov 18 16:51:06 CET 2006


  Some words of explanation follow.

--- rootstrap.orig   2006-11-18 03:53:54.000000000 +0200
+++ rootstrap        2006-11-18 15:10:00.000000000 +0200
@@ -92,11 +92,22 @@

 umlargs.extend(umlargs_extra)

+if sys.stdin.isatty()  \
+       and  \
+   os.tcgetpgrp(sys.stdin.fileno()) != os.getpgrp():
+   (block_on_read,not_to_be_written_to) = os.pipe()
+   os.dup2(block_on_read, sys.stdin.fileno())
+if sys.stdout.isatty()  \
+       and  \
+   os.tcgetpgrp(sys.stdout.fileno()) != os.getpgrp():
+   sink = open('/dev/null','w')
+   os.dup2(sink.fileno(), sys.stdout.fileno())
+
 umlargs.extend(['con0=fd:0,fd:1',
                 'con=pts',
-               'root=/dev/root',
-               'rootflags=/',
-               'rootfstype=hostfs',
+                'root=/dev/root',
+                'rootflags=/',
+                'rootfstype=hostfs',
                 'ubd1=' + imagefile,
                 'init=/usr/lib/rootstrap/builder',
                 'devfs=nomount',

  Explanation:
   =========

  Note that rootstrap already duplicats the log file to stdout
when the -o command line switch is invoked.

    if sys.std{in,out}.isatty()

insures us that std{in,out} uses the terminal, which is the opposite of
being redirected (to a file or a pipe).

       os.tcgetpgrp(sys.std{in,out}.fileno()) != os.getpgrp()

tell us that rootstrap is running in the background.

  Those two idioms are my python equivalent of the C lines
shown at http://www.ugcs.caltech.edu/manuals/libs/glibc-2.3.2/libc_581.html

     (block_on_read,not_to_be_written_to) = os.pipe()

will make the file descriptor block_on_read blocks on read
while the descriptor not_to_be_written_to will not be closed and
not be written to.
  block_on_read + sink from the stdout duplication are assumed to
be compatible with

    # Nothing - device=null

        This allows the device to be opened, in contrast to 'none', but reads
        will block, and writes will succeed and the data will be thrown out.

from http://user-mode-linux.sourceforge.net/input.html.






More information about the Pkg-uml-devel mailing list