• kvm 转载


     
    macOS Sierra

    之前介绍过如何在 Ubuntu 系统和 KVM 中安装 Windows 系统,当时就说了,希望有机会能把 macOS 也给虚拟化了,这样就完美了。今天这篇文章就是解决这个问题的。

    准备工作

    开始之前,你需要做好以下的准备工作:

    • 一台可以正常工作的 Mac 电脑
    • 一台装好了 KVM 的 Linux 主机
    • 下载好了的 macOS 安装包
    • 一颗不怕折腾的心

    首先参考 Dhiru Kholia 的方式,获取一份代码先:

    $ git clone git@github.com:kholia/OSX-KVM.git
    Cloning into 'OSX-KVM'...
    remote: Counting objects: 28, done.
    remote: Total 28 (delta 0), reused 0 (delta 0), pack-reused 28
    Receiving objects: 100% (28/28), 2.62 MiB | 98.00 KiB/s, done.
    Resolving deltas: 100% (1/1), done.
    

    当然,如果你没有 Git 也可以直接下载 ZIP 压缩包

    创建 ISO 镜像

    虚拟机是无法识别 Apple 的 DMG 文件的,所以我们需要在 Mac App Store 获取的 macOS Installer 的基础上,生成一个可以在虚拟机中启动的 ISO 镜像。

    如果 macOS Sierra 已经下载好了的话,我们直接执行下面的命令就可以生成一个安装光盘镜像了。

    $ sudo ./create_install_iso.sh
    
     
    Create ISO
     
    Create ISO Done

    运行截图如上,程序结束后,会在当前目录生成了一个名为 Install_macOS_Sierra_(OS_X_10.12.2).iso 的光盘镜像文件。

    把这个文件复制到 KVM 服务器,这一步就算是完成了。

    rsync -avP Install_macOS_Sierra_(OS_X_10.12.2).iso server:/path/to/iso/
    

    启动虚拟机

    这里就是大坑了,之前折腾了 2 天都是卡在这里,用网上的各种方法一启动,就显示一个 boot: 就没有然后了。

    我们先创建好需要的磁盘镜像 sierra.qcow2

    $ cd /path/to/kvm
    $ qemu-img create -f qcow2 sierra.qcow2 64G
    Formatting 'sierra.qcow2', fmt=qcow2 size=68719476736 encryption=off cluster_size=65536 lazy_refcounts=off refcount_bits=16
    

    参考仓库里面的 boot.shboot-macOS.sh,整理了如下的命令用于首次启动虚拟机:

    kvm-spice -enable-kvm -m 4096 -cpu core2duo,kvm=off 
        -machine pc-q35-2.4 
        -smp 4,cores=2 
        -usb -device usb-kbd -device usb-mouse 
        -device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" 
        -kernel ./enoch_rev2839_boot 
        -smbios type=2 
        -device ide-drive,bus=ide.2,drive=MacHDD 
        -drive id=MacHDD,if=none,file=./sierra.qcow2 
        -vnc 0.0.0.0:0 -k en-us 
        -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -device e1000-82545em,netdev=net0,id=net0,mac=52:54:00:c9:18:27 
        -device ide-drive,bus=ide.0,drive=MacDVD 
        -drive id=MacDVD,if=none,snapshot=on,file='/path/to/iso/Install_OS_X_10.11.6_El_Capitan.iso'
    

    注意:这里我使用了 OS X El Capitan 的安装镜像,因为直接使用 macOS Sierra 无法调出「磁盘工具」,就算在「语言选择」界面等了多久都无法正常操作。所以最终选择了一个折中的办法,用老版本的镜像启动来初始化硬盘,然后再用新版本的镜像来安装系统。

    OS X El Capitan 安装光盘的制作方法与 macOS Sierra 类似,请参考「创建 ISO 镜像」部分。

    初始化磁盘

    执行过上述命令后,命令行会一直处于等待状态,这个时候我们需要使用 VNC 远程桌面来完成剩下的操作。

    注意:系统自带的 VNC 客户端还有 RealVNC Viewer 都无法正常访问没有密码保护的远程桌面。只有 TigerVNC 才能正常访问,这里也浪费了不少的时间。

    正常连接后,可以看到 El Capitan 的欢迎界面:

     
    El Capitan

    接着像正常安装一样,开启「磁盘工具」,初始化磁盘:

     
    Disk Utility
     
    Disk Utility
     
    Disk Utility

    这样,初始化磁盘的工作就完成了。

    准备启动文件

    其实,虽然是虚拟化 macOS,其实本质上还是运行一个 Hackintosh (黑苹果)。所以,必要的启动文件配置还是需要的。

    好在在制作光盘镜像的时候,一些需要的文件就已经被打包在 ISO 光盘镜像里面了。

    我们只需要打开 Terminal 把需要的文件复制到刚才初始化过的磁盘里面就可以了。

    # cp -avP /Extra /Volumes/Macintosh/
    
     
    Terminal
     
    Terminal

    然后我们就可以把虚拟机关闭了。

    安装 macOS Sierra

    虚拟机关闭以后,我们换一个命令来执行刚才的启动步骤:

    kvm-spice -enable-kvm -m 4092 -cpu Penryn,kvm=off,vendor=GenuineIntel 
        -machine pc-q35-2.4 
        -smp 4,cores=2 
        -usb -device usb-kbd -device usb-mouse 
        -device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" 
        -kernel ./enoch_rev2839_boot 
        -smbios type=2 
        -vnc 0.0.0.0:0 -k en-us 
        -device ide-drive,bus=ide.2,drive=MacHDD 
        -drive id=MacHDD,if=none,file=./sierra.qcow2 
        -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -device e1000-82545em,netdev=net0,id=net0,mac=52:54:00:c9:18:27 
        -device ide-drive,bus=ide.0,drive=MacDVD 
        -drive id=MacDVD,if=none,snapshot=on,file='/path/to/iso/Install_macOS_Sierra_(OS_X_10.12.2).iso'
    

    其实跟第一次启动虚拟机没有太多的不同,主要的变化是 CPU 的配置还有安装镜像不一样而已。

     
    Sierra Install

    安装完成以后提示 Restart 到这里基本的安装就算完成了,我们需要关闭虚拟主机,然后再进行下一步。

     
    Sierra Install

    用 Virsh 配置虚拟主机

    参考 libvirt-macOS.xml 生成了如下的 XML 配置文件:

    <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
      <name>sierra</name>
      <description># echo 1 &gt; /sys/module/kvm/parameters/ignore_msrs</description>
      <memory unit='KiB'>4194304</memory>
      <currentMemory unit='KiB'>4194304</currentMemory>
      <vcpu placement='static'>2</vcpu>
      <os>
        <type arch='x86_64' machine='pc-q35-2.4'>hvm</type>
        <kernel>/path/to/kvm/enoch_rev2839_boot</kernel>
      </os>
      <features>
        <acpi/>
        <kvm>
          <hidden state='on'/>
        </kvm>
      </features>
      <cpu mode='custom' match='exact'>
        <model fallback='allow'>Penryn</model>
      </cpu>
      <devices>
        <emulator>/usr/bin/kvm-spice</emulator>
        <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2'/>
          <source file='/path/to/kvm/sierra.qcow2'/>
          <target dev='sda' bus='sata'/>
          <boot order='1'/>
          <address type='drive' controller='0' bus='0' target='0' unit='0'/>
        </disk>
        <interface type='bridge'>
          <source bridge='br0'/>
          <model type='e1000-82545em'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>
        <input type='mouse' bus='usb'/>
        <input type='keyboard' bus='usb'/>
        <graphics type='vnc' port='5911' autoport='no'/>
        <video>
          <model type='vmvga' vram='16384' heads='1'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
        </video>
        <memballoon model='none'/>
      </devices>
      <qemu:commandline>
        <qemu:arg value='-device'/>
        <qemu:arg value='isa-applesmc,osk=ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc'/>
        <qemu:arg value='-smbios'/>
        <qemu:arg value='type=2'/>
        <qemu:arg value='-k'/>
        <qemu:arg value='en-us'/>
        <qemu:arg value='-cpu'/>
        <qemu:arg value='Penryn,vendor=GenuineIntel'/>
      </qemu:commandline>
    </domain>
    

    上面这个是配置文件,比如保存为 sierra.xml,然后用 virsh 注册一个新的虚拟机:

    $ virsh define sierra.xml
    Domain sierra defined from sierra.xml
    
    $ virsh start sierra
    Domain sierra started
    
    $ virsh list
     Id    Name                           State
    ----------------------------------------------------
      1    sierra                         running
    

    接下来,用老方法映射一个本地端口来 VNC:

    ssh -L 5911:127.0.0.1:5911 server
    

    重新启动以后的效果如下图:

     
    Sierra Desktop

    最后,我们再把虚拟机设置为开启自动启动:

    $ virsh autostart sierra
    Domain sierra marked as autostarted
    

    设置好远程桌面和远程登录以后,就再也不用使用 VNC 了,完美!收工!



    作者:TommyLau
    链接:https://www.jianshu.com/p/e95c458d78bd
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    javascript学习7
    javascript学习6
    javascript学习5
    javascript学习4
    javascript学习3
    javascript学习2
    兼容性
    工作中总结的经验之git篇
    git解决内容冲突
    Gulp压缩JavaScript代码
  • 原文地址:https://www.cnblogs.com/kesz/p/10819655.html
Copyright © 2020-2023  润新知