def try_format(devn, id_): # Wait for device block appear. fblk = False time.sleep(1) # We attemp to detect device file whether exists for trycnt in range(10): # os.path.exists cannot detect file exists real time #if os.path.exists(devn): if os.system('ls %s' % devn) == 0: fblk = True break else: time.sleep(1) if not fblk: msg = _('Not exists device block on %s: \ntry time: %d\n') % (devpath, trycnt) logger.w(msg) return msg else: logger.d('try_format %s ls device %s time' % (id_, trycnt)) # Run command to format partition cmd_format = CF.D.FSTYPE_MAP[fstype][1] cmd_f_list = cmd_format.split() cmd = cmd_f_list[0] argv = cmd_f_list[1:] argv.append(devn) cmdres = run_bash(cmd, argv) logger.d('%s %s' % (cmd, ' '.join(argv))) logger.d(' '.join(cmdres['out'])) if cmdres['ret'] != 0: errmsg = _('Run "%s %s" failed: %s\ntry time: %d\n') return errmsg % ( cmd, ' '.join(argv), str(cmdres['err']), trycnt ) else: return 0
def run_post_script(script_rel, _argv=[], f_chroot=True): logger.i('Run post_script %s %s' % (script_rel, str(_argv))) post_scripts_dir = CF.D.POST_SCRIPTS_DIR script = os.path.join(post_scripts_dir, script_rel) if not os.path.exists(script): msg = _('Can not find the script %s' % script) logger.e(msg) return -1, msg root = CF.D.TGTSYS_ROOT if f_chroot: if not os.path.exists('%s/tmp' % root): os.makedirs('%s/tmp' % root) cmd0 = 'cp -pr %s %s/tmp/' % (post_scripts_dir, root) logger.d(cmd0) os.system(cmd0) cmd = '/tmp/%s/%s' % (os.path.basename(post_scripts_dir), script_rel) cmd0 = 'chmod 777 %s%s' % (root, cmd) logger.d(cmd0) os.system(cmd0) argv = _argv _environ = dict(os.environ) _environ['LANG'] = 'en_US.UTF-8' try: res = run_bash(cmd, argv, root, env=_environ, cwd='/tmp/%s' % os.path.basename(post_scripts_dir)) except OSError, e: res = {} res['ret'] = -1 res['err'] = ['Can not run %s, can not chroot to target system or can not run this script.' % script_rel] res['out'] = [''] logger.e(res['err'], exc_info = sys.exc_info()) cmd0 = 'rm -rf %s/tmp/%s' % (root, os.path.basename(post_scripts_dir)) logger.d(cmd0) os.system(cmd0)
def _install(self, pkgpath, noscripts, not_pre_post_script, progress_cb): pkgname = get_pkg_name(pkgpath) try: cmd = 'rpm' argv = ['-i', '--noorder', # '--nosuggest', # on ubuntu platform rpm do not have --nosuggest parameter '--force','--nodeps', '--ignorearch', '--root', CF.D.TGTSYS_ROOT, pkgpath, ] if self.use_noscripts or noscripts: argv.append('--noscripts') self.noscripts_pkg_list.append(pkgpath) #cmd_res = {'err':[], 'std': [], 'ret':0} # DEBUG cmd_res = run_bash(cmd, argv) # Sign the installing pkg name in stderr if cmd_res['err']: # Ok the stderr will dup2 a log file, so we just out it on err screen print >>sys.stderr, '***INSTALLING %s:\n**STDERR:\n%s\n' \ %(pkgname, ''.join(cmd_res['err'])) problems = cmd_res['ret'] if problems: errormsg = ''.join(cmd_res['err']) message = 'PROBLEMS on %s: \n return code is %s error message is\n[%s]' \ % (pkgname, str(problems), errormsg) logger.i(message) return message except Exception, errmsg: logger.i('FAILED on %s: %s\n' % (pkgname, str(errmsg))) return str(errmsg)
def logger_copy_logfiles(mia, operid, param): def start_operate(title): time.sleep(0.2) print title usb_dev_path, usb_fs_type, logfiles = param usb_mount_dir = "" steps = 4 step = 0 mia.set_step(operid, step, steps) # mount the usb device. step = step + 1 mia.set_step(operid, step, steps) start_operate('Mount...') ret, msg = mount_dev(usb_fs_type, usb_dev_path) if not ret: return str(msg) else: usb_mount_dir = msg # Copy logfiles to usb. step = step + 1 mia.set_step(operid, step, steps) start_operate('Copy logfiles...') ret, msg = copy_logfiles(logfiles, os.path.join(usb_mount_dir, "magiclogger")) if ret: return str(msg) step = step + 1 mia.set_step(operid, step, steps) start_operate('Sync files...') run_bash('/bin/sync') # umount the usb device. step = step + 1 mia.set_step(operid, step, steps) start_operate('Umount...') ret, msg = umount_dev(usb_mount_dir) if not ret: return str(msg) return 0
def copy_logfiles(logfiles, destdir): ret = [] errormsg = [] for logfile in logfiles: if not os.path.exists(logfile): continue if not os.path.exists(destdir): os.makedirs(destdir) cmd_res = run_bash("cp",[ "-r", logfile, destdir]) if cmd_res['ret']: ret.append(cmd_res['ret']) errormsg.append(cmd_res['err']) return ret, errormsg
def umount_tgt_device(self): self.mounted_devs.reverse() for dev in self.mounted_devs: if type(dev) is MiDevice: if not dev.do_umount(): logger.w('Umount device %s Failed, but we continue') else: umount_dev(dev) res = run_bash('mount') logger.d(''''UMount target system partition finished, check the mount output please:) %s %s ''' % ('\n'.join(res['out']), '\n'.join(res['err'])))
def copy_logfiles(logfiles, destdir): ret = [] errormsg = [] for logfile in logfiles: if not os.path.exists(logfile): continue if not os.path.exists(destdir): os.makedirs(destdir) cmd_res = run_bash("cp", ["-r", logfile, destdir]) if cmd_res['ret']: ret.append(cmd_res['ret']) errormsg.append(cmd_res['err']) return ret, errormsg
def do_bash_rpm_install(): global noscripts_pkg_list global use_noscripts mia.set_step(operid, 1, 1) try: cmd = "rpm" argv = [ "-i", "--noorder", # '--nosuggest', # on ubuntu platform rpm do not have --nosuggest parameter "--force", "--nodeps", "--ignorearch", "--root", CF.D.TGTSYS_ROOT, pkgpath, ] if use_noscripts or noscripts: argv.append("--noscripts") noscripts_pkg_list.append(pkgpath) # cmd_res = {'err':[], 'std': [], 'ret':0} # DEBUG cmd_res = run_bash(cmd, argv) # Sign the installing pkg name in stderr if cmd_res["err"]: # Ok the stderr will dup2 a log file, so we just out it on err screen print >>sys.stderr, "***INSTALLING %s:\n**STDERR:\n%s\n" % (pkgname, "".join(cmd_res["err"])) problems = cmd_res["ret"] if problems: errormsg = "".join(cmd_res["err"]) message = "PROBLEMS on %s: \n return code is %s error message is\n[%s]" % ( pkgname, str(problems), errormsg, ) dolog(message) return message except Exception, errmsg: dolog("FAILED on %s: %s\n" % (pkgname, str(errmsg))) return str(errmsg)
def try_format(devn, id_): # Wait for device block appear. fblk = False time.sleep(1) # We attemp to detect device file whether exists for trycnt in range(10): # os.path.exists cannot detect file exists real time #if os.path.exists(devn): if os.system('ls %s' % devn) == 0: fblk = True break else: time.sleep(1) if not fblk: msg = _('Not exists device block on %s: \ntry time: %d\n' ) % (devpath, trycnt) logger.w(msg) return msg else: logger.d('try_format %s ls device %s time' % (id_, trycnt)) # Run command to format partition cmd_format = CF.D.FSTYPE_MAP[fstype][1] cmd_f_list = cmd_format.split() cmd = cmd_f_list[0] argv = cmd_f_list[1:] argv.append(devn) cmdres = run_bash(cmd, argv) logger.d('%s %s' % (cmd, ' '.join(argv))) logger.d(' '.join(cmdres['out'])) if cmdres['ret'] != 0: errmsg = _('Run "%s %s" failed: %s\ntry time: %d\n') return errmsg % (cmd, ' '.join(argv), str( cmdres['err']), trycnt) else: return 0
_environ['LANG'] = 'en_US.UTF-8' try: res = run_bash(cmd, argv, root, env=_environ, cwd='/tmp/%s' % os.path.basename(post_scripts_dir)) except OSError, e: res = {} res['ret'] = -1 res['err'] = ['Can not run %s, can not chroot to target system or can not run this script.' % script_rel] res['out'] = [''] logger.e(res['err'], exc_info = sys.exc_info()) cmd0 = 'rm -rf %s/tmp/%s' % (root, os.path.basename(post_scripts_dir)) logger.d(cmd0) os.system(cmd0) else: cmd = os.path.join(post_scripts_dir, script_rel) argv = _argv res = run_bash(cmd, argv, cwd=os.path.dirname(cmd)) if res['ret'] != 0: return res['ret'], ' '.join(res['err']) return res['ret'], ' '.join(res['out']) @register.server_handler('long') def setup_accounts(mia, operid, rootpasswd, acclist): mia.set_step(operid, 0, -1) argv = [rootpasswd, ] for (username, password, shell, homedir, realuid) in acclist: argv.extend([username, password, shell, homedir, realuid]) ret, msg = run_post_script('setup-accounts', argv) if ret == 0: return 0, ''
def mount_tgt_device(self): tgt_root_dev, tgt_root_type = self.get_devinfo_by_mpoint('/') tgt_swap_dev, tgt_swap_type = self.get_devinfo_by_mpoint('USE') if tgt_swap_dev and os.path.exists(tgt_swap_dev): os.system('swapon %s' % tgt_swap_dev) #### mount root device mnt_point = CF.D.TGTSYS_ROOT dev_tgt_root = MiDevice(tgt_root_dev, tgt_root_type, mnt_point) if not dev_tgt_root.do_mount(): #### NOTE: carefully handle this device's mount. logger.e('Mount device %s Failed, install operate can not continue' % dev_tgt_root.get_dev()) return False else: self.mounted_devs.append(dev_tgt_root) def mount_each(tgt_root_dev, tgt_other_dev, tgt_other_type, tgt_other_mpoint): if tgt_other_dev and tgt_root_dev != tgt_other_dev: mnt_point = os.path.join(CF.D.TGTSYS_ROOT, tgt_other_mpoint.lstrip('/')) dev_tgt_other = MiDevice(tgt_other_dev, tgt_other_type, mnt_point) if not dev_tgt_other.do_mount(): #### NOTE: carefully handle this device's mount. logger.e('Mount device %s Failed, install operate can not continue' % dev_tgt_other.get_dev()) self.umount_tgt_device() return False else: self.mounted_devs.append(dev_tgt_other) return True else: logger.e('Can not run to here!! The root file system had been mounted before!!') return False for mpoint, dev_, type_ in self.tgtsys_devinfo: if mpoint not in ('/', 'USE'): if not mount_each(tgt_root_dev, dev_, type_, mpoint): return False # mount -t proc proc myroot/proc/ mnt_point = os.path.join(CF.D.TGTSYS_ROOT, 'proc') ret, msg = mount_dev('proc', 'proc', mntdir=mnt_point,flags=None) if not ret: logger.e("Error: mount proc on target failed '%s'" % msg) return False self.mounted_devs.append(mnt_point) # mount -t sysfs sys myroot/sys/ mnt_point = os.path.join(CF.D.TGTSYS_ROOT, 'sys') ret, msg = mount_dev('sysfs', 'sys', mntdir=mnt_point,flags=None) if not ret: logger.e("Error: mount sys on target failed '%s'" % msg) return False self.mounted_devs.append(mnt_point) # mount -o bind /dev myroot/dev/ mnt_point = os.path.join(CF.D.TGTSYS_ROOT, 'dev') ret, msg = mount_dev(None, '/dev', mntdir=mnt_point,flags='bind') if not ret: logger.e("Error: mount /dev on target failed '%s'" % msg) return False self.mounted_devs.append(mnt_point) res = run_bash('mount') logger.d(''''Mount target system partition finished, check the mount output please:) %s %s ''' % ('\n'.join(res['out']), '\n'.join(res['err']))) return True
return _('Not exists device block on %s: \ntry time: %d\n') % (devpath, trycnt) #cmd = '%s %s%d' % (CF.D.FSTYPE_MAP[fstype][1], devpath, part.number) #ret = os.system(cmd) #if ret != 0: # errmsg = _('Run "%s" failed: %s\n') # return errmsg % (cmd, str(ret)) #else: # return 0 # Run command to format partition cmd_format = CF.D.FSTYPE_MAP[fstype][1] cmd_f_list = cmd_format.split() cmd = cmd_f_list[0] argv = cmd_f_list[1:] argv.append('%s%d' % (devpath, part.number)) cmdres = run_bash(cmd, argv) dolog('%s %s\n' % (cmd, ' '.join(argv))) dolog(' '.join(cmdres['out'])+'\n') if cmdres['ret'] != 0: errmsg = _('Run "%s %s" failed: %s\ntry time: %d\n') return errmsg % ( cmd, ' '.join(argv), str(cmdres['err']), trycnt ) else: return 0 return _('Not any partition found on position: ') + str(part_start) def _gen_fstab(mount_all_list): # Generate fstab. mountmap = {} for (mntdir, devfn, fstype) in mount_all_list: if fstype == 'linux-swap': continue if fstype in ('fat32', 'fat16'):