diff options
-rwxr-xr-x | anaconda | 85 | ||||
-rw-r--r-- | flags.py | 1 | ||||
-rw-r--r-- | loader2/loader.c | 4 | ||||
-rwxr-xr-x | scripts/upd-instroot | 8 |
4 files changed, 94 insertions, 4 deletions
@@ -47,6 +47,74 @@ def startMiniWM(root='/'): sys.exit (1) return childpid + +# startup vnc X server +def startVNCServer(vncpasswd=None, root='/'): + + def set_vnc_password(root, passwd, passwd_file): + (pid, fd) = os.forkpty() + + if not pid: + os.execv(root + "/usr/bin/vncpasswd", [root + "/usr/bin/vncpasswd", passwd_file]) + sys.exit(1) + + # read password prompt + os.read(fd, 1000) + + # write password + os.write(fd, passwd + "\n") + + # read challenge again, and newline + os.read(fd, 1000) + os.read(fd, 1000) + + # write password again + os.write(fd, passwd + "\n") + + # read remaining output + os.read(fd, 1000) + + dup_log(_("Starting VNC")) + + vncpid = os.fork() + + if not vncpid: + args = [ root + "/usr/bin/Xvnc", ":1", "-nevershared", + "-depth", "16", "-geometry", "800x600" "-dontdisconnect"] + + # set passwd if necessary + if vncpasswd is not None: + set_vnc_password(vncpasswd, "/tmp/vncpasswd_file") + args = args + ["-rfbauth", "/tmp/vncpasswd_file"] + + tmplogFile = "/tmp/vncserver.log" + try: + err = os.open(tmplogFile, os.O_RDWR | os.O_CREAT) + if err < 0: + sys.stderr.write("error opening %s\n", tmplogFile) + else: + os.dup2(err, 2) + os.close(err) + except: + # oh well + pass + + os.execv(args[0], args) + sys.exit (1) + + if vncpasswd is None: + dup_log(_("\n\nWARNING!!! VNC server running with NO PASSWORD!")) + dup_log(_("You can use the vncpasswd=<password> boot option")) + dup_log(_("if you would like to secure the server.\n\n")) + + dup_log(_("VNC server now running - please connect to install...")) + + +dup_ + + os.environ["DISPLAY"]=":1" + doStartupX11Actions() + # function to handle X startup special issues for anaconda def doStartupX11Actions(): @@ -178,7 +246,7 @@ try: 'testpath=', 'mountfs', 'traceonly', 'kickstart=', 'lang=', 'keymap=', 'kbdtype=', 'module=', 'class=', 'expert', 'serial', 'lowres', 'nofb', 'rescue', 'nomount', - 'autostep', 'resolution=', 'skipddc']) + 'autostep', 'resolution=', 'skipddc', 'vnc', 'vncpasswd=']) except TypeError, msg: sys.stderr.write("Error %s\n:" % msg) sys.exit(-1) @@ -242,6 +310,7 @@ progmode = None customClass = None kbd = None ksfile = None +vncpasswd = None # # parse off command line arguments @@ -309,7 +378,11 @@ for n in args: display_mode = 't' elif (str == '--kbdtype'): kbdtype = arg - + elif (str == '--vnc'): + flags.usevnc = 1 + elif (str == '--vncpasswd='): + vncpasswd = arg + # s390s don't have ttys if iutil.getArch() == "s390": logFile = "/tmp/anaconda-s390.log" @@ -558,6 +631,14 @@ else: # s390 checks display_mode = 't' time.sleep(2) +# if they want us to use VNC do that now +if display_mode == 'g' and flags.usevnc: + # dont run vncpasswd if in test mode + if flags.test: + vncpasswd = None + + startVNCServer(vncpasswd=vncpasswd) + if display_mode == 'g' and not os.environ.has_key('DISPLAY'): import rhpl.monitor as monitor @@ -33,6 +33,7 @@ class Flags: self.__dict__['flags']['serial'] = 0 self.__dict__['flags']['setupFilesystems'] = 1 self.__dict__['flags']['autostep'] = 0 + self.__dict__['flags']['usevnc'] = 0 global flags flags = Flags() diff --git a/loader2/loader.c b/loader2/loader.c index 1d56ccc2c..2ed9aa15c 100644 --- a/loader2/loader.c +++ b/loader2/loader.c @@ -467,7 +467,9 @@ static int parseCmdLineFlags(int flags, struct loaderData_s * loaderData, if (!strncasecmp(argv[i], "resolution=", 11) || !strncasecmp(argv[i], "lowres", 6) || !strncasecmp(argv[i], "skipddc", 7) || - !strncasecmp(argv[i], "nomount", 7)) { + !strncasecmp(argv[i], "nomount", 7) || + !strncasecmp(argv[i], "vnc", 3) || + !strncasecmp(argv[i], "vncpasswd=", 10)) { int arglen; arglen = strlen(argv[i])+3; diff --git a/scripts/upd-instroot b/scripts/upd-instroot index 064dcdc33..d9fdc9a50 100755 --- a/scripts/upd-instroot +++ b/scripts/upd-instroot @@ -145,7 +145,8 @@ PACKAGESGR="anaconda XFree86-libs libpng XFree86-75dpi-fonts ttfonts-ko taipeifonts XFree86-ISO8859-15-75dpi-fonts rhpl redhat-config-keyboard Xft fontconfig redhat-artwork ttfonts-ja ttfonts-zh_TW bitmap-fonts-cjk urw-fonts - comps-extras XFree86-libs-data convertdb1" + comps-extras XFree86-libs-data convertdb1 + vnc-server libjpeg tcp_wrappers" # # stuff ONLY included for rescue mode @@ -477,6 +478,7 @@ etc/man.config etc/pango/* etc/fonts/* $LIBDIR/libnss_dns* +$LIBDIR/libnss_nis* $LIBDIR/libpam* $LIBDIR/libproc* sbin/debugfs @@ -532,6 +534,8 @@ usr/bin/tac usr/bin/tail usr/bin/tilo usr/bin/uniq +usr/bin/Xvnc +usr/bin/vncpasswd usr/lib/anaconda/iw usr/$LIBDIR/gconv/* usr/$LIBDIR/gdk-pixbuf/loaders/*png* @@ -553,11 +557,13 @@ usr/$LIBDIR/libgdk* usr/$LIBDIR/libgnomecanvas* usr/$LIBDIR/libgnomeui* usr/$LIBDIR/libgtk* +usr/$LIBDIR/libjpeg* usr/$LIBDIR/libncurses* usr/$LIBDIR/libpango* usr/$LIBDIR/libpng.so.3* usr/$LIBDIR/libpng12.so* usr/$LIBDIR/libreadline* +usr/$LIBDIR/libwrap* usr/lib/locale/* usr/$LIBDIR/pango/* usr/$LIBDIR/python2.2/site-packages/gtk*/gtk/* |