def install_grub(harddisk, bootdisk, bootdnum): strs = "(hd0) %s\n" % harddisk file_name = "/mnt/sysimage/boot/grub/device.map" FileOption(file_name).write_file(strs) syncDataToDisk("/mnt/sysimage/boot") # copy the stage files over into xxx/boot cmd = "/sbin/grub-install --just-copy --root-directory=/mnt/sysimage" (cmdstat, rparams) = support.cmd_pipe.run_and_read_cmd(cmd, 300) if not cmdstat: return (False, "Grub-install cmd failed") syncDataToDisk("/mnt/sysimage/boot") time.sleep(5) cmd = "root (hd0,%s)\ninstall /grub/stage1 d (hd0) /grub/stage2 p (hd0,%s)/grub/grub.conf" % ( bootdnum, bootdnum) p = os.pipe() os.write(p[1], cmd + '\n') os.close(p[1]) cmd = "/sbin/grub --batch --no-floppy --device-map=/mnt/sysimage/boot/grub/device.map" (cmdstat, rparams) = support.cmd_pipe.r_and_r_cmd_include_in(cmd, 600, p[0]) os.close(p[0]) if not cmdstat: return (False, "Grub batch failed") #@@ # e.g change harddiskname in devicemapf for grub strs = "(hd0) %s\n" % check_install_tohd.get_first_HD_name(harddisk) file_name = "/mnt/sysimage/boot/grub/device.map" FileOption(file_name).write_file(strs) return (True, "")
def doPostInstall(instPath, rootdisk, bootdisk): (flag, stat) = _resizedevicefs(rootdisk) if not flag: return (False, stat) # e.g get rootdisk, bootdisk filesystem uuid # e.g tune2fs -l /dev/sda1 (flag, rootuuid) = get_partition_fsuuid(rootdisk) if not flag: return (False, rootuuid) (flag, bootuuid) = get_partition_fsuuid(bootdisk) if not flag: return (False, bootuuid) # remount filesystems (flag, stat) = remountfile(instPath, rootdisk, bootdisk) if not flag: return (False, stat) # now write out the "real" fstab and mtab file_name = "/mnt/sysimage/etc/fstab" strs = _get_fstab(rootuuid, bootuuid) FileOption(file_name).write_file(strs) file_name = "/mnt/sysimage/etc/mtab" strs = _get_mtab(rootdisk, bootdisk) FileOption(file_name).write_file(strs) diskinfo = {"rootuuid": rootuuid, "bootuuid": bootuuid} return (True, diskinfo)
def get_rootdevice(): # e.g /dev/mapper/System-root for vcenter ; /dev/mapper/live-rw for vsrever file_name = "/etc/mtab" lines = FileOption(file_name).read_file() for x in lines: xlist = x.strip().split() if xlist < 2: continue if x[1] == "/": return x[0] return "/dev/mapper/System-root"
def _get_fstab(rootuuid, bootuuid): strs = '''UUID=%s / ext3 defaults 1 1 UUID=%s /boot ext3 defaults 1 2 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 ''' % (rootuuid, bootuuid) file_name = "/proc/swaps" lines = FileOption(file_name).read_file() if len(lines) > 1: swp = lines[1].split()[0] strs += "%s swap swap defaults 0 0\n" % swp return strs
def setup_grub(bootdisk, harddisk, rootuuid): bootdnum = check_install_tohd.get_numof_device(bootdisk) bootdnum = str(int(bootdnum) - 1) file_name = "/mnt/sysimage/boot/grub/grub.conf" strs = _get_grub_conf(bootdnum, rootuuid) FileOption(file_name).write_file(strs) os.chdir("/mnt/sysimage/boot/grub/") cmd = "/bin/ln -s ./grub.conf ./menu.lst" (cmdstat, rparams) = support.cmd_pipe.run_and_read_cmd(cmd, 30) os.chdir("/usr/vmd") if not cmdstat: return (False, "Create ln grub.conf failed") #@@ (flag, stat) = install_grub(harddisk, bootdisk, bootdnum) if not flag: return (False, stat) return (True, "Create Cfg successed")
def installvcenter(event): instPath = "/mnt/sysimage" harddisk = event.param["harddisk"] (flag, params) = check_create_parttion(event) if not flag: return (False, params) bootdisk = params["bootdisk"] rootdisk = params["rootdisk"] bootsize = params["bootsize"] rootsize = params["rootsize"] clear_tmp_dir() (flag, stat) = create_bootdisk_fs(bootdisk) if not flag: return (False, stat) (flag, stat) = makedir(instPath) if not flag: return (False, stat) ppc = 80 - 20 stt = 20 (flag, stat) = doInstall(stt, ppc, rootdisk, event) if not flag: return (False, stat) # e.g diskinfo = {"rootuuid":rootuuid, "bootuuid":bootuuid} (flag, diskinfo) = doPostInstall(instPath, rootdisk, bootdisk) if not flag: return (False, diskinfo) rootuuid = diskinfo["rootuuid"] bootuuid = diskinfo["bootuuid"] updateinfo = {"uuid": event.uuid, "progress": 85} optevent_db_op.update_optevent(updateinfo) updateinfo = {"uuid": event.uuid, "progress": 90} optevent_db_op.update_optevent(updateinfo) os.system("/bin/sync") time.sleep(20) # e.g install for vcenter kernel install os.system("/usr/bin/python /usr/vmd/installvckernel.pyc") os.system("/bin/sync") time.sleep(20) (flag, stat) = setup_grub(bootdisk, harddisk, rootuuid) if not flag: return (False, stat) file_name = "/mnt/sysimage/etc/installtype.txt" FileOption(file_name).write_file("HardDisk") updateinfo = {"uuid": event.uuid, "progress": 95} optevent_db_op.update_optevent(updateinfo) umount_tmp_mount() return (True, "Successed")