summaryrefslogtreecommitdiffstats
path: root/anaconda
diff options
context:
space:
mode:
authorChris Lumens <clumens@redhat.com>2006-05-01 18:52:55 +0000
committerChris Lumens <clumens@redhat.com>2006-05-01 18:52:55 +0000
commita72ec63a30b5d4f6804b3071afe3486837875916 (patch)
treeb5ebf7d05e7bc9710321d9403d48e223b3f69353 /anaconda
parentf0949823bf410522dd97fad00d876f28541a12b6 (diff)
downloadanaconda-a72ec63a30b5d4f6804b3071afe3486837875916.tar.gz
anaconda-a72ec63a30b5d4f6804b3071afe3486837875916.tar.xz
anaconda-a72ec63a30b5d4f6804b3071afe3486837875916.zip
Move startVNCServer to vnc.py.
Diffstat (limited to 'anaconda')
-rwxr-xr-xanaconda170
1 files changed, 4 insertions, 166 deletions
diff --git a/anaconda b/anaconda
index 709f14a19..e57390707 100755
--- a/anaconda
+++ b/anaconda
@@ -61,169 +61,6 @@ def startMiniWM(root='/'):
return childpid
-# startup vnc X server
-def startVNCServer(vncpassword="", root='/', vncconnecthost="",
- vncconnectport=""):
-
- 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)
-
- # wait for status
- try:
- (pid, status) = os.waitpid(pid, 0)
- except OSError, (errno, msg):
- print __name__, "waitpid:", msg
-
- return status
-
- stdoutLog.info(_("Starting VNC..."))
-
- # figure out host info
- connxinfo = None
- srvname = None
- try:
- import network
-
- # try to load /tmp/netinfo and see if we can sniff out network info
- netinfo = network.Network()
- srvname = None
- if netinfo.hostname != "localhost.localdomain":
- srvname = "%s" % (netinfo.hostname,)
- else:
- for dev in netinfo.netdevices.keys():
- try:
- ip = isys.getIPAddress(dev)
- log.info("ip of %s is %s" %(dev, ip))
- except Exception, e:
- log.error("Got an exception trying to get the ip addr "
- "of %s: %s" %(dev, e))
- continue
- if ip == '127.0.0.1' or ip is None:
- continue
- srvname = ip
- break
-
- if srvname is not None:
- connxinfo = "%s:1" % (srvname,)
-
- except:
- log.error("Unable to determine VNC server network info")
-
- # figure out product info
- if srvname is not None:
- desktopname = _("%s %s installation on host %s") % (product.productName, product.productVersion, srvname)
- else:
- desktopname = _("%s %s installation") % (product.productName, product.productVersion)
-
- vncpid = os.fork()
-
- if not vncpid:
- args = [ root + "/usr/bin/Xvnc", ":1", "-nevershared",
- "-depth", "16", "-geometry", "800x600",
- "IdleTimeout=0", "-auth", "/dev/null", "-once",
- "DisconnectClients=false", "desktop=%s" % (desktopname,)]
-
- # set passwd if necessary
- if vncpassword != "":
- try:
- rc = set_vnc_password(root, vncpassword, "/tmp/vncpasswd_file")
- except Exception, e:
- stdoutLog.error("Unknown exception setting vnc password.")
- log.error("Exception was: %s" %(e,))
- rc = 1
-
- if rc:
- stdoutLog.warning(_("Unable to set vnc password - using no password!"))
- stdoutLog.warning(_("Make sure your password is at least 6 characters in length."))
- else:
- args = args + ["-rfbauth", "/tmp/vncpasswd_file"]
- else:
- # needed if no password specified
- args = args + ["SecurityTypes=None",]
-
- 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 vncpassword == "":
- stdoutLog.warning(_("\n\nWARNING!!! VNC server running with NO PASSWORD!\n"
- "You can use the vncpassword=<password> boot option\n"
- "if you would like to secure the server.\n\n"))
-
- stdoutLog.info(_("The VNC server is now running."))
-
- if vncconnecthost != "":
- stdoutLog.info(_("Attempting to connect to vnc client on host %s...") % (vncconnecthost,))
-
- hostarg = vncconnecthost
- if vncconnectport != "":
- hostarg = hostarg + ":" + vncconnectport
-
- argv = ["/usr/bin/vncconfig", "-display", ":1", "-connect", hostarg]
- ntries = 0
- while 1:
- output = iutil.execWithCapture(argv[0], argv, catchfd=2)
-
- if output == "":
- stdoutLog.info(_("Connected!"))
- break
- elif output.startswith("connecting") and output.endswith("failed"):
- ntries += 1
- if ntries > 50:
- stdoutLog.error(_("Giving up attempting to connect after 50 tries!\n"))
- if connxinfo is not None:
- stdoutLog.info(_("Please manually connect your vnc client to %s to begin the install.") % (connxinfo,))
- else:
- stdoutLog.info(_("Please manually connect your vnc client to begin the install."))
- break
-
- stdoutLog.info(output)
- stdoutLog.info(_("Will try to connect again in 15 seconds..."))
- time.sleep(15)
- continue
- else:
- stdoutLog.critical(output)
- sys.exit(1)
- else:
- if connxinfo is not None:
- stdoutLog.info(_("Please connect to %s to begin the install...") % (connxinfo,))
- else:
- stdoutLog.info(_("Please connect to begin the install..."))
-
- os.environ["DISPLAY"]=":1"
- doStartupX11Actions()
-
# function to handle X startup special issues for anaconda
def doStartupX11Actions():
global miniwm_pid
@@ -870,9 +707,10 @@ if opts.display_mode == 'g' and flags.usevnc:
if flags.test:
vncpassword = ""
- startVNCServer(vncpassword=vncpassword,
- vncconnecthost=vncconnecthost,
- vncconnectport=vncconnectport)
+ vnc.startVNCServer(vncpassword=vncpassword,
+ vncconnecthost=vncconnecthost,
+ vncconnectport=vncconnectport,
+ vncStartedCB=doStartupX11Actions)
child = os.fork()
if child == 0: