Annotation of loncom/anaconda/RedHat/instimage/usr/bin/loncapaconfig, revision 1.1
1.1 ! harris41 1: #!/usr/bin/python
! 2:
! 3: import sys, os, signal
! 4: signal.signal(signal.SIGINT, signal.SIG_DFL)
! 5:
! 6: #
! 7: # For anaconda in reconfig mode
! 8: #
! 9: sys.path.append('/usr/lib/anaconda')
! 10:
! 11: # For anaconda in test mode
! 12: if (os.path.exists('rpmmodule')):
! 13: sys.path.append('rpmmodule')
! 14: sys.path.append('libfdisk')
! 15: sys.path.append('balkan')
! 16: sys.path.append('kudzu')
! 17: sys.path.append('gnome-map')
! 18: sys.path.append('isys')
! 19:
! 20: os.environ['HOME'] = '/tmp'
! 21:
! 22: # Python passed my path as argv[0]!
! 23: # if sys.argv[0][-7:] == "syslogd":
! 24: if len(sys.argv) > 1:
! 25: if sys.argv[1] == "--syslogd":
! 26: from syslogd import Syslogd
! 27: root = sys.argv[2]
! 28: output = sys.argv[3]
! 29: syslog = Syslogd (root, open (output, "w+"))
! 30:
! 31: import gettext_rh
! 32: import traceback
! 33: import string
! 34:
! 35: import isys
! 36: import iutil
! 37:
! 38: setverPath = None
! 39:
! 40: gettext_rh.bindtextdomain("anaconda", "/usr/share/locale")
! 41: gettext_rh.textdomain("anaconda")
! 42: _ = gettext_rh.gettext
! 43:
! 44: (args, extra) = isys.getopt(sys.argv[1:], 'GTRtdr:fm:',
! 45: [ 'gui', 'text', 'reconfig', 'test', 'debug',
! 46: 'method=', 'rootpath=',
! 47: 'testpath=', 'mountfs', 'traceonly', 'kickstart=',
! 48: 'lang=', 'keymap=', 'kbdtype=', 'module=',
! 49: 'expert', 'serial' ])
! 50:
! 51: # save because we're about to munge argv
! 52: [execname] = string.split(sys.argv[0], '/')[-1:]
! 53:
! 54: # remove the arguments - gnome_init doesn't understand them
! 55: for arg in sys.argv[1:]:
! 56: sys.argv.remove (arg)
! 57: sys.argc = 1
! 58:
! 59: #
! 60: # default root to install into if doing a normal install
! 61: #
! 62: rootPath = '/mnt/sysimage'
! 63:
! 64: extraModules = []
! 65:
! 66: # display mode is either 'g' for graphical or 't' for text
! 67: display_mode = 'g'
! 68: forced_display_mode = None
! 69:
! 70: # booleans - value is 0 for false or non-zero for true
! 71: # test - in test mode?
! 72: # debug - in debug mode?
! 73: # serial - install via serial port (?)
! 74: # expert - in expert mode?
! 75: # traceOnly - print out loaded modules
! 76: # forceMount - ? used ?
! 77: # localInstall - install to chroot
! 78: # reconfigOnly - allow user to reconfig installed box w/o reinstall
! 79: test = 0
! 80: debug = 0
! 81: serial = 0
! 82: expert = 0
! 83: traceOnly = 0
! 84: forceMount = 0
! 85: localInstall = 0
! 86: reconfigOnly = 0
! 87:
! 88: #
! 89: # x - xserver info (?)
! 90: # lang - language to use for install/machine default
! 91: # method - install method (not used if reconfigOnly is true)
! 92: # keymap - kbd map
! 93: # kbdtype - type of keyboard (84 key, 101 key, etc)
! 94: # kickstart - ?
! 95: # mouseInfo - type of mouse
! 96: # progmode - either 'reconfig' or 'install'
! 97: #
! 98: x = None
! 99: lang = None
! 100: method = None
! 101: keymap = None
! 102: kbdtpye = None
! 103: kickstart = None
! 104: mouseInfo = None
! 105: progmode = None
! 106:
! 107: #
! 108: # parse off command line arguments
! 109: #
! 110: for n in args:
! 111: (str, arg) = n
! 112:
! 113: if (str == '-G' or str == '--gui'):
! 114: forced_display_mode = 'g'
! 115: elif (str == '-T' or str == '--text'):
! 116: forced_display_mode = 't'
! 117: elif (str == '-R' or str == '--reconfig'):
! 118: reconfigOnly = 1
! 119: progmode = 'reconfig'
! 120: elif (str == '-t' or str == '--test'):
! 121: test = 1
! 122: elif (str == '--module'):
! 123: (path, subdir, name) = string.split(arg, ":")
! 124: extraModules.append((path, subdir, name))
! 125: elif (str == '-m' or str == '--method'):
! 126: method = arg
! 127: reconfigOnly = 0
! 128: progmode = 'install'
! 129: elif (str == '-d' or str == '--debug'):
! 130: debug = 1
! 131: elif (str == '--kickstart'):
! 132: kickstart = arg
! 133: forced_display_mode = 't'
! 134: elif (str == '-r' or str == '--rootpath'):
! 135: rootPath = arg
! 136: localInstall = 1
! 137: elif (str == '--mountfs'):
! 138: forceMount = 1
! 139: elif (str == '--traceonly'):
! 140: traceOnly = 1
! 141: elif (str == '--expert'):
! 142: expert = 1
! 143: elif (str == '--serial'):
! 144: serial = 1
! 145: elif (str == '--lang'):
! 146: lang = arg
! 147: elif (str == '--keymap'):
! 148: keymap = arg
! 149: elif (str == '--kbdtype'):
! 150: kbdtype = arg
! 151:
! 152: # Make sure that display mode is only text for now
! 153: # since graphical interface code is not yet updated.
! 154: display_mode = 't'
! 155: forced_display_mode = 't'
! 156:
! 157: #
! 158: # must specify install or reconfig mode
! 159: #
! 160: if (progmode == None):
! 161: print "Must specify either --reconfig or --method for program mode"
! 162: sys.exit(1)
! 163:
! 164: #
! 165: # if not just reconfiguring box, must have install method
! 166: #
! 167: if (not reconfigOnly and not method):
! 168: print "no install method specified"
! 169: sys.exit(1)
! 170:
! 171: if (debug):
! 172: import pdb
! 173: pdb.set_trace()
! 174: #
! 175: # don't let a developer reinstall their box unknowingly
! 176: #
! 177: if (not reconfigOnly and not test and not localInstall and os.getpid() > 50):
! 178: print "you're running me on a live system! that's incredibly stupid."
! 179: sys.exit(1)
! 180:
! 181: import rpm
! 182: import lilo
! 183: from todo import ToDo
! 184: import isys
! 185: from installclass import DefaultInstall
! 186: from installclass import ReconfigStation
! 187: from kickstart import Kickstart
! 188:
! 189: #
! 190: # override display mode if machine cannot nicely run X
! 191: #
! 192: if (not test):
! 193: if (iutil.memInstalled() < 30000):
! 194: forced_display_mode = 't'
! 195:
! 196: #
! 197: # if in reconfig mode set display mode based on inittab default runlevel
! 198: #
! 199: # but always let command line specified mode override defaults
! 200: #
! 201: if (forced_display_mode == None):
! 202: if (reconfigOnly != 0):
! 203: if (iutil.getDefaultRunlevel() == '5' and
! 204: os.access("/etc/X11/XF86Config", os.R_OK)):
! 205: display_mode = 'g'
! 206: else:
! 207: display_mode = 't'
! 208: else:
! 209: display_mode = 'g'
! 210: else:
! 211: display_mode = forced_display_mode
! 212:
! 213: #
! 214: # startup X server is we're not already running under an X session
! 215: #
! 216: if (display_mode == 'g' and not os.environ.has_key('DISPLAY')):
! 217: import xserver
! 218: try:
! 219: if (reconfigOnly == 0):
! 220: result = xserver.startX ()
! 221: else:
! 222: result = xserver.start_existing_X ()
! 223:
! 224: except RuntimeError:
! 225: print "X startup failed, falling back to text mode"
! 226: display_mode = 't'
! 227: else:
! 228: (mouseInfo, x) = (result)
! 229:
! 230: #
! 231: # setup links required by graphical mode if installing and verify display mode
! 232: #
! 233: if (display_mode == 'g'):
! 234: if not test and not localInstall and not reconfigOnly:
! 235: for i in ( "imrc", "im_palette.pal", "gtk" ):
! 236: try:
! 237: os.symlink ("../mnt/source/RedHat/instimage/etc/" + i, "/etc/" + i)
! 238: except:
! 239: pass
! 240: from gui import InstallInterface
! 241: elif (display_mode == 't'):
! 242: from text import InstallInterface
! 243: else:
! 244: sys.exit(1)
! 245:
! 246: if traceOnly:
! 247: # prints a list of all the modules imported
! 248: import pdb
! 249: import image
! 250: import harddrive
! 251: import urlinstall
! 252: import mimetools
! 253: import mimetypes
! 254: import syslogd
! 255: if display_mode == 't':
! 256: from newtpyfsedit import fsedit
! 257: for module in sys.__dict__['modules'].keys ():
! 258: if module not in [ "__builtin__", "__main__" ]:
! 259: foo = repr (sys.__dict__['modules'][module])
! 260: bar = string.split (foo, "'")
! 261: if len (bar) > 3:
! 262: print bar[3]
! 263:
! 264: sys.exit(0)
! 265:
! 266: # imports after setting up the path
! 267: if not reconfigOnly:
! 268: if (method[0:5] == "dir:/"):
! 269: from image import InstallMethod
! 270: method = InstallMethod(method[5:])
! 271: elif (method[0:6] == "ftp://" or method[0:7] == "http://"):
! 272: from urlinstall import InstallMethod
! 273: method = InstallMethod(method)
! 274: elif (method[0:5] == "hd://"):
! 275: method = method[5:]
! 276: i = string.index(method, '/')
! 277: dir = method[i:]
! 278: driveAndType = method[0:i]
! 279:
! 280: i = string.index(driveAndType, ":")
! 281: drive = driveAndType[0:i]
! 282: type = driveAndType[i + 1:]
! 283:
! 284: from harddrive import InstallMethod
! 285: method = InstallMethod(drive, type, dir)
! 286: else:
! 287: print "unknown install method:", method
! 288: sys.exit(1)
! 289:
! 290: #
! 291: # do some final sanity checking before going off into the great wide wonder
! 292: #
! 293: if reconfigOnly and method != None:
! 294: print "Conflicting options: cannot reconfig and install simultaneously!\n"
! 295: sys.exit(1)
! 296: intf = InstallInterface()
! 297:
! 298: # set the default actions
! 299: installPackages = 1
! 300: setupFilesystems = 1
! 301:
! 302: if localInstall:
! 303: installPackages = 1
! 304: setupFilesystems = 0
! 305: if test:
! 306: installPackages = 0
! 307: setupFilesystems = 0
! 308: if forceMount:
! 309: setupFilesystems = 1
! 310:
! 311: if kickstart:
! 312: instClass = Kickstart(kickstart)
! 313: os.unlink(kickstart)
! 314: elif reconfigOnly:
! 315: instClass = ReconfigStation(expert)
! 316: else:
! 317: instClass = DefaultInstall(expert)
! 318:
! 319: if lang:
! 320: instClass.addToSkipList("language")
! 321: instClass.setLanguage(lang)
! 322:
! 323: if keymap:
! 324: instClass.addToSkipList("keyboard")
! 325: instClass.setKeyboard(keymap)
! 326:
! 327: if iutil.getArch() == "sparc":
! 328: import kudzu
! 329: mice = kudzu.probe (kudzu.CLASS_MOUSE, kudzu.BUS_UNSPEC, kudzu.PROBE_ONE);
! 330: if mice:
! 331: (mouseDev, driver, descr) = mice[0]
! 332: if mouseDev == 'sunmouse':
! 333: instClass.addToSkipList("mouse")
! 334: instClass.setMouseType("Sun - Mouse", "sunmouse")
! 335:
! 336: if reconfigOnly:
! 337: installPackages = 0
! 338: setupFilesystems = 0
! 339: rootPath = '/'
! 340:
! 341: try:
! 342: todo = ToDo(intf, method, rootPath, installSystem = installPackages,
! 343: setupFilesystems = setupFilesystems, mouse = mouseInfo,
! 344: instClass = instClass, x = x, expert = expert,
! 345: serial = serial, reconfigOnly = reconfigOnly, test = test,
! 346: extraModules = extraModules)
! 347: intf.run(todo, test = test)
! 348: except:
! 349: (type, value, tb) = sys.exc_info()
! 350: from string import joinfields
! 351: list = traceback.format_exception (type, value, tb)
! 352: text = joinfields (list, "")
! 353: rc = intf.exceptionWindow (_("Exception Occurred"), text)
! 354: intf.__del__ ()
! 355: if rc:
! 356: import pdb
! 357: pdb.post_mortem (tb)
! 358: os._exit (1)
! 359:
! 360: if not todo.reconfigOnly:
! 361: todo.fstab.umountFilesystems(rootPath, ignoreErrors = 1)
! 362:
! 363: del intf
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>