Viewing file: firstboot (3.77 KB) -rwxr-xr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) | #!/usr/bin/python2
#
# firstboot - Script to run the firstboot system configuration program.
#
# Copyright (C) 2002, 2003, 2005 Red Hat, Inc.
# Copyright (C) 2002, 2003 Brent Fox
# Copyright (C) 2005 Chris Lumens
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
import os
import signal
import string
import sys
import rhpl.arch
sys.path.append("/usr/share/firstboot")
def getRunlevel():
line = os.popen('/sbin/runlevel', 'r').readline()
line = string.strip(line)
# This can happen in kadischi, for instance.
if line.startswith("unknown"):
return 3
else:
tokens = string.split(line)
return int(tokens[-1])
def rhgbIsRunning():
return os.access("/usr/bin/rhgb-client", os.R_OK|os.X_OK) and os.system("/usr/bin/rhgb-client --ping") == 0
# Since X may be starting up immediately after firstboot crashes, we might
# not have any way to see the traceback. This lets it be logged somewhere
# useful.
def defaultExnHandler(type, value, tb):
import traceback
f = open("/tmp/firstboot-crash.log", "w")
traceback.print_exception(type, value, tb, None, f)
f.close()
# Also, print on stderr still just in case we have time to see the
# problem.
traceback.print_tb(tb)
sys.excepthook = defaultExnHandler
if __name__ == "__main__":
# First, check to see whether this is installed on a system with X or not.
# We do this by trying to import something that only exists in the
# graphical firstboot package.
try:
from xfirstboot import XFirstboot
noX = False
fb = XFirstboot()
except ImportError:
from firstboot import Firstboot
noX = True
fb = Firstboot()
for arg in sys.argv:
if arg == '--reconfig':
print "starting reconfig mode"
fb.doReconfig = True
if arg == '--debug':
print "starting with debugging options"
fb.doDebug = True
if arg == '--lowres':
print "starting in lowres mode"
fb.lowRes = True
if arg == '--autoscreenshot':
fb.autoscreenshot = True
if arg == '--forcegui':
fb.forcegui = True
signal.signal (signal.SIGINT, signal.SIG_DFL)
if not fb.mayRun():
print "firstboot cannot run, exiting"
os._exit(0)
# If we have a $DISPLAY set, we are either running in debug mode or in
# reconfig mode from a terminal under an already running X setup.
# Otherwise, run in text mode if in runlevel 3, or take over rhgb's X
# server if running, or start up our own if not.
if os.environ.has_key("DISPLAY") or fb.doDebug:
from firstbootWindow import firstbootWindow
firstbootWindow(fb)
elif (getRunlevel() == 3 and not fb.forcegui) or noX == True:
fb.runTextUI()
elif rhgbIsRunning():
fb.startRhgbUI()
from firstbootWindow import firstbootWindow
firstbootWindow(fb)
elif not os.environ.has_key("DISPLAY"):
fb.startGraphicalUI()
from firstbootWindow import firstbootWindow
firstbootWindow(fb)
else:
raise RuntimeError, "Could not start any firstboot interface"
|