From 56025bc5574d5704cf9db210df05a3528e5a1e2a Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Thu, 17 Jun 2021 00:10:27 +0800 Subject: [PATCH] fix: support windows 2003 --- cmd/climc/shell/compute/servers.go | 13 +++++++++++++ pkg/hostman/diskutils/fsutils/fsutils.go | 2 ++ pkg/hostman/guestfs/fsdriver/windows.go | 14 ++++++++++++++ pkg/hostman/guestman/qemu-kvmhelper.go | 22 ++++++++++++++++++++-- 4 files changed, 49 insertions(+), 2 deletions(-) diff --git a/cmd/climc/shell/compute/servers.go b/cmd/climc/shell/compute/servers.go index 1ed8fe38d7..b9a4523288 100644 --- a/cmd/climc/shell/compute/servers.go +++ b/cmd/climc/shell/compute/servers.go @@ -181,6 +181,19 @@ func init() { return nil }) + R(&options.ResourceMetadataOptions{}, "server-set-metadata", "Set raw metadata of a server", func(s *mcclient.ClientSession, opts *options.ResourceMetadataOptions) error { + params, err := opts.Params() + if err != nil { + return err + } + result, err := modules.Servers.PerformAction(s, opts.ID, "metadata", params) + if err != nil { + return err + } + printObject(result) + return nil + }) + R(&options.ServerCreateFromInstanceSnapshot{}, "server-create-from-instance-snapshot", "server create from instance snapshot", func(s *mcclient.ClientSession, opts *options.ServerCreateFromInstanceSnapshot) error { params := &compute.ServerCreateInput{} diff --git a/pkg/hostman/diskutils/fsutils/fsutils.go b/pkg/hostman/diskutils/fsutils/fsutils.go index bc077bdaca..d548f21a3f 100644 --- a/pkg/hostman/diskutils/fsutils/fsutils.go +++ b/pkg/hostman/diskutils/fsutils/fsutils.go @@ -263,6 +263,8 @@ func ResizePartitionFs(fpath, fs string, raiseError bool) (error, bool) { {"umount", tmpPoint}, {"sleep", "2"}, {"rm", "-fr", tmpPoint}} + } else if fs == "ntfs" { + cmds = [][]string{{"ntfsresize", "-c", fpath}, {"ntfsresize", "-P", "-f", fpath}} } if len(cmds) > 0 { diff --git a/pkg/hostman/guestfs/fsdriver/windows.go b/pkg/hostman/guestfs/fsdriver/windows.go index b8c1ffb7ab..ce745ba0f8 100644 --- a/pkg/hostman/guestfs/fsdriver/windows.go +++ b/pkg/hostman/guestfs/fsdriver/windows.go @@ -149,6 +149,14 @@ func (w *SWindowsRootFs) IsWindows10() bool { return false } +func (w *SWindowsRootFs) IsOldWindows() bool { + info := w.GetReleaseInfo(nil) + if info != nil && strings.HasPrefix(info.Version, "5.") { + return true + } + return false +} + func (w *SWindowsRootFs) GetOs() string { return "Windows" } @@ -332,6 +340,12 @@ func (w *SWindowsRootFs) CommitChanges(part IDiskPartition) error { tool := winutils.NewWinRegTool(confPath) tool.CheckPath() tool.EnableRdp() + + if w.IsOldWindows() { + // windows prior to windows 2003 should not try to commit changes + return nil + } + tool.InstallGpeditStartScript(WIN_BOOT_SCRIPT_PATH) bootDir := path.Dir(BOOT_SCRIPT_PATH) diff --git a/pkg/hostman/guestman/qemu-kvmhelper.go b/pkg/hostman/guestman/qemu-kvmhelper.go index 47c1e8060a..15c3a7f66b 100644 --- a/pkg/hostman/guestman/qemu-kvmhelper.go +++ b/pkg/hostman/guestman/qemu-kvmhelper.go @@ -89,6 +89,22 @@ func (s *SKVMGuestInstance) getOsDistribution() string { return osDis } +func (s *SKVMGuestInstance) getOsVersion() string { + osVer, _ := s.Desc.GetString("metadata", "os_version") + return osVer +} + +// is windows prioer to windows server 2003 +func (s *SKVMGuestInstance) isOldWindows() bool { + if s.getOsname() == OS_NAME_WINDOWS { + ver := s.getOsVersion() + if len(ver) > 1 && ver[0:2] == "5." { + return true + } + } + return false +} + func (s *SKVMGuestInstance) getMachine() string { machine, err := s.Desc.GetString("machine") if err != nil { @@ -527,13 +543,15 @@ function nic_mtu() { cmd += " -device virtio-serial" cmd += " -usb" - if !utils.IsInStringArray(s.getOsDistribution(), []string{OS_NAME_OPENWRT, OS_NAME_CIRROS}) && !s.disableUsbKbd() { + if !utils.IsInStringArray(s.getOsDistribution(), []string{OS_NAME_OPENWRT, OS_NAME_CIRROS}) && !s.isOldWindows() && !s.disableUsbKbd() { cmd += " -device usb-kbd" } // # if osname == self.OS_NAME_ANDROID: // # cmd += " -device usb-mouse" // # else: - cmd += " -device usb-tablet" + if !s.isOldWindows() { + cmd += " -device usb-tablet" + } if s.IsVdiSpice() { cmd += " -device qxl-vga,id=video0,ram_size=141557760,vram_size=141557760"