云主机装黑果实践(2):在deepin kvm下测试mbr方式安装的黑果10.15最新版

简介: 本文关键字:QEMU 免kernel firmware运行黑osx,把enoch做进iso normal boot,建立10.15 enoch懒人安装包

本文关键字:QEMU 免kernel firmware运行黑osx,把enoch做进iso normal boot,建立10.15 enoch懒人安装包

在前面云主机装黑果系列文章中,我们知道了变色龙Chameleon,四叶草clover作为黑果技术的本质,其原理就是重写了白苹果的引导。但它们不是一般的1)boot to os loader,而且也是2)firmware to os(fake devices, inject kexts,patch to kernels,配置tricks) ,即firmware as loader,黑果的技术基础就是依靠它们将kexts和配置写入安装包或系统运行时的内存代替官方,操作起来复杂度不低,因为它们都是为不同硬件写的,所以大量第三方kexts的注入选择,硬件平台适配和osx版本对应是一个考究,集成大量kexts可能使一台PC上的黑果”负重“(采用了过多的固件驱动),所以这类固件也不要在白果上用,可能损坏硬件,最有可能损坏的就是视网膜屏,绝非危言耸听。

它们都同时支持bios(mbr,mbr+gpt)和uefi(gpt),可以启动windows,linux但又都对osx专门做了工作,都有相关工具,如gui wizard tools。但一般来说,clover更灵活更强大,支持更新。《实践(1)》文前面我们是实现了装在本地kvmguest上,使用了Chameleon。好了,我们继续讨论用它让黑果装在云上,阿里云云主机一般是qemu standard i440fx pii(x3)老intel机型,Xeon E5-2682 v4 以上cpu,bios机(如seabios8c24b4c)没有uefi,只能从mbr上启动,而且驱动部分是virtio。所幸硬件上这完全可以运行黑果最新版,经过一些破解,软件上也完全可以,我们要做的工作就是,将前文章第二部分启动脚本里的enoch做的固件和引导(包括支持某osx版本安装运行所有做的全部破解工作)的工作集成到osx内部/guest vm内部:

首先是那个显而易见的大问题:bios云主机是不能以外部喂给kernel的方式提供firmware的,那么enoch能不能像普通boot如grub那样,集成firmware到os镜像内呢,这是可以的,因为变色龙是一种firmware as bootloader,我们在grub2的命仅行下也能浏览文件,这里的loader本该是os的功能但居然可以共存,loader就是第一层os,linux是第二层os,可以前后启动,变色化也可以是一种grub2 loader,被安装在硬盘上且充当osx的传手,一前一后启动,—— 这就是说,mbr和bios机,也支持将一部分firmware放在硬盘上与os一起(就如同efi文件夹与os一样)。

不管如何,让我们实践吧,这次我们直接测试10.15。因为这次我发现PD居然有嵌套虚拟化,这次我们在OSX+PD虚拟机DEEPIN测试黑果,不用跟上文一样重启来重启去了。

1)让qemu免kernel在kvm guest主机上运行黑果

工作依然是建立新的可启动iso开始。(最终我们要得到一份能InstallNET.sh用在云主机的安装后的磁盘image dd),但是我们需要在kvm/qemu上测试一下,所以还是按常规流程做成iso。因为10.15比前文osx-kvm脚本中的createinstalliso.sh提到的10,11,12,13更高,较10.11,12,事情有了不同:10.14开始,osx强制运行在uefi和apfs上,做了这方面的硬性选择,我们需要破解其为mbr和安装在普通hfs+上。能找到的开始支持10.15的引导是enoch2921 https://www.insanelymac.com/forum/files/file/71-enoch/。—— Crazybirdy有一个仓库和脚本专门https://www.insanelymac.com/forum/files/file/985-catalina-mbr-hfs-firmware-check-patch/解决这二大问题,搜索Catalina MBR HFS Firmware Check Patch 10.15.x可到。下载,里面有一个MBR-Manual-Method15-20191209.dmg,解包打包成MBR-Manual-Method15-20191209.zip本地存储。还有一个enoch2922有几个配置文件,也下载。

研究里面的EasyMBR-Installer1015和说明文件,提到破解了让安装程序不作mbr和convert to apfs方面的检查,重点是脚本中的打包iso逻辑(Work on 10.15.txt What's the difference between createinstallmedia method, MBR-Manual-Method, and MBR-Automatic-Method?),使用上拖入一个大于10G的安装U盘分区和一个install 10.15.app就可以,内部逻辑上,它其实跟前文osx-kvm创造iso的逻辑差不多:都是提取安装包install xxx.app中的basesystem.dmg(这是安装程序,recovery),对kernel进行补丁,kexts注入,Extra写入,将install xxx.app本体写入(因为对kernel有patch和kexts注入,对标准createinstallmedia逻辑流程有侵入,所以并不同于供vmware+unlocker虚拟机用的,用写入到虚拟镜像盘或U盘的方式,然后createinstallmedia形成一个新的懒人cdr的方式。),最终生成一个cdr。

但是,1)这个脚本都设想enchos是外置的,引导本身并没有写进去,因为脚本作者都是设想这类脚本生成的镜像是供在osx下使用和u盘安装使用的,最后,变色龙引导以post install方式被安装,—— 这也就是为什么enchos文件crazybirdy也是分开放的,也是Enoch-rev.2922.pkg这类发行打包方式使然,,只有osx能option识别这类方式制作的“可启动”U盘。只有先运行enoch作为固件或loader才能识别其中写入的安装(本身并不包括enoch)。2)问题2,整个cdr也不是一个标准的可启动的iso(放到windows下或qemu -boot d -cdrom './install.iso.cdr’ -m 512M 是不能启动的),因为本质上,这个cdr是dmg转换过来的,在osx和qemu+ kernel enoch机眼中,是可启动硬盘,而不是可启动iso

好了,我们现在要把EasyMBR-Installer1015里的脚本改造成生成镜像供qemu免kernel参数用上mbr patched了的10.15cdr,而不仅是U盘和实体机,最好是windows下也能用的bootable iso。。未来还要考虑云主机的接受方式。

2)变色龙mbr启动iso制作,在osx上制作变色龙mbr启动iso。将kernel集成到iso内部。

在2.4前变色龙是wowpc.iso发布的。但是r2922发布的是一个在osx上运行的“事后”package(追随clover系列风格),离线安装到本地需要破解的黑果镜像或U盘。wowpc.iso里的boot加kexts加plist,后者gui方式需要手动选择大量项目(其实也不多)注意这并不是Chameleon wizard工具。

先创建一个虚拟U盘,供脚本使用。JHFS+即MacOS扩展(日志式),第一行创建的-fs是临时的,因为马上要在第3行重分区,第二行挂载,第三行分区为mbr盘中的一个hhfs+区要求10G大小保险,整个镜像11G,注意,去磁盘工具中查看dev node,我这里是disk3:

hdiutil create -o “install" -size 11g -layout SPUD -fs HFS+J
hdiutil attach "install.dmg" -noverify -mountpoint /Volumes/install_build
diskutil partitionDisk disk3 MBR JHFS+ Recovery 10G

未来这个recovery区即是脚本执行时要用的虚拟U盘。打开它。

然后安装r2922引导,用Pacifist打开Enoch-rev.2922.pkg提取其中的Core.pkg中的所有enoch引导文件到一个临时文件夹,cd到这个文件夹的/usr/standalone/i386下,1)首先Install boot0 to the MBR(我们这里是为硬盘生成引导,如果是要作成windows下的iso:用hdiutil makehybrid -o mywowpc.iso 从wowpc中或Enoch-rev.2922.pkg/Core.pkg解压出来的所有文件加你的Extra配置组成的所在文件夹/ -iso -hfs -joliet -eltorito-boot 从wowpc中或Enoch-rev.2922.pkg/Core.pkg解压出来的所有文件加你的Extra配置组成的所在文件夹/usr/standalone/i386/cdboot -no-emul-boot -hfs-volume-name "Chameleon" -joliet-volume-name "Chameleo" -iso-volume-name "Chameleo”),2)然后Install boot1h to the partition’s bootsector到disk3s1(boot1h为for hfs+,boot1f32为for fat32,boot1fx为for exfat,如果用这个虚拟U盘生成的cdr启动时提示Boot0 done,boot1 error,那就是boot1文件选错了),3)最后Install boot to the partition’s root directory:

sudo fdisk -f boot0 -u -y /dev/rdisk3
sudo dd if=boot1h of=/dev/rdisk3s1
sudo cp boot /Volumes/Recovery

你还要把crazybirdy里面推荐的Extra配置文件复制到打开的虚拟U盘(这个U盘是可写挂载的)。

最后,打开EasyMBR-Installer1015编辑(这个盘跟脚本里的U盘实体属性有一点是不等的,比如它不能动态erase,故):

diskutil eraseVolume JHFS+ Disk1mbrJHFS ${devDisk1mbrInstaller} 从这里开始改

diskutil rename "${devDisk1mbrInstaller}" "Disk1mbrJHFS"
echo "rename virtual disk to disk1mbrJHFS done"

运行脚本后,选择我们准备的install 10.15.app和虚拟U盘拖入,运行到成功结束(中间会有lzvn需要放行。但脚本也不会等待,直接复制失败,所以放行后再次运行脚本从头建立虚拟U盘生成即可。),它进行了mbr10.15黑果上前述脚本处理引导破解和firmware注入的工作(A1-A4),如果需要,你需要在镜像制作完成后额外手动完成以下动作还要二步:

A5. (Needn't with Clover, Need only if you use Chameleon with -f to boot Disk1mbrInstaller, use Pacifist v3.2.14+ to access Core.pkg.)

Make directory of /Volumes/Disk1mbrInstaller/System/Library/Kernels first.
Copy InstallESD.dmg/Packages/Core.pkg/System/Library/Kernels/kernel to /Volumes/Disk1mbrInstaller/System/Library/Kernels/kernel

A6. (Needn't with Clover, Need only if you use Chameleon with -f to boot Disk1mbrInstaller, use Pacifist v3.2.14+ to access Core.pkg.)

Replace InstallESD.dmg/Packages/Core.pkg/System/Library/Extensions to /Volumes/Disk1mbrInstaller/System/Library/Extensions

这样,这个虚拟U盘就成为mbr patched,(注意它并不是脚本运行后要安装到的“系统目标盘”),等脚本完成,将其转成iso,${mbrdiskname}是脚本中的名字,实际名字会是Volumes/10153EasyMBR19D76之类:

hdiutil detach "/Volumes/${mbrdiskname}"
hdiutil convert “install.dmg" -format UDTO -o “install“

现在可以执行上文中的Boot-macOS.sh了,进入PD中的qemu-kvm,,这次,可以免kernel参数了,修改脚本删掉,内含enoch启动,它会自动找到分区中的installmedia:

以后,你完全可以re Detach re convert来重新修改dmg和生成新iso来解决启动中出现的问题或深度定制你的黑果。

———

其实黑果上登icloud也不会被封,如果你实在不放心,买个100元不到的iphone4,硬件上也登着。恩恩


(此处不设回复,扫码到微信参与留言,或直接点击到原文)

qrcode.png

相关文章
|
22天前
|
Java 测试技术 开发者
初学者入门:掌握单元测试的基础与实践
【10月更文挑战第14天】单元测试是一种软件测试方法,它验证软件中的最小可测试单元——通常是单独的函数或类——是否按预期工作。单元测试的目标是确保每个模块在其自身范围内正确无误地运行。这些测试应该独立于其他模块,并且应该能够反复执行而不受外部环境的影响。
45 2
|
27天前
|
测试技术 UED
软件测试的艺术与实践
【10月更文挑战第9天】 在数字时代的浪潮中,软件成为了我们生活和工作不可或缺的一部分。然而,高质量的软件背后,是无数测试工程师的默默付出。本文将通过深入浅出的方式,探讨如何进行高效的软件测试,确保软件产品的质量与稳定性。我们将一起揭开软件测试的神秘面纱,从基础理论到实际操作,一步步走进这个充满挑战与创造的世界。
|
2天前
|
测试技术 API Android开发
探索软件测试中的自动化框架选择与实践####
本文深入探讨了软件测试领域内,面对众多自动化测试框架时,如何依据项目特性和团队需求做出明智选择,并分享了实践中的有效策略与技巧。不同于传统摘要的概述方式,本文将直接以一段实践指南的形式,简述在选择自动化测试框架时应考虑的核心要素及推荐路径,旨在为读者提供即时可用的参考。 ####
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
探索软件测试的边界:从基础到高级的实践之旅
【10月更文挑战第21天】 在当今数字化时代,软件已成为我们生活和工作中不可或缺的一部分。随着技术的快速发展,对软件质量的要求也日益提高。本文旨在通过深入浅出的方式,带领读者踏上一场从基础到高级的软件测试实践之旅。我们将探讨软件测试的基本概念、重要性以及如何有效地进行测试规划和执行。通过具体案例分析,揭示常见错误及其解决方案,同时展望未来软件测试领域的发展趋势。无论你是软件开发新手还是经验丰富的测试工程师,这篇文章都将为你提供宝贵的见解和启发。
33 8
|
28天前
|
自然语言处理 机器人 Python
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
ChatPaper是一个基于文本生成技术的智能研究论文工具,能够根据用户输入进行智能回复和互动。它支持快速下载、阅读论文,并通过分析论文的关键信息帮助用户判断是否需要深入了解。用户可以通过命令行或网页界面操作,进行论文搜索、下载、总结等。
42 1
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
|
12天前
|
监控 安全 jenkins
探索软件测试的奥秘:自动化测试框架的搭建与实践
【10月更文挑战第24天】在软件开发的海洋里,测试是确保航行安全的灯塔。本文将带领读者揭开软件测试的神秘面纱,深入探讨如何从零开始搭建一个自动化测试框架,并配以代码示例。我们将一起航行在自动化测试的浪潮之上,体验从理论到实践的转变,最终达到提高测试效率和质量的彼岸。
|
15天前
|
测试技术 C# 数据库
C# 一分钟浅谈:测试驱动开发 (TDD) 实践
【10月更文挑战第18天】测试驱动开发(TDD)是一种软件开发方法论,强调先编写测试代码再编写功能代码,以确保代码质量和可维护性。本文从 TDD 的基本概念入手,详细介绍了其核心步骤——编写测试、运行测试并失败、编写代码使测试通过,以及“红绿重构”循环。文章还探讨了 TDD 的优势,包括提高代码质量、促进设计思考、减少调试时间和文档化。此外,文中分析了常见问题及解决方案,如测试覆盖率不足、测试代码过于复杂、忽视重构和测试依赖过多,并通过一个简单的计算器类的代码案例,展示了 TDD 的实际应用过程。
32 1
|
22天前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI在软件测试中的创新应用与实践###
本文旨在探讨人工智能(AI)技术如何革新软件测试领域,提升测试效率、质量与覆盖范围。通过深入分析AI驱动的自动化测试工具、智能化缺陷预测模型及持续集成/持续部署(CI/CD)流程优化等关键方面,本研究揭示了AI技术在解决传统软件测试痛点中的潜力与价值。文章首先概述了软件测试的重要性和当前面临的挑战,随后详细介绍了AI技术在测试用例生成、执行、结果分析及维护中的应用实例,并展望了未来AI与软件测试深度融合的趋势,强调了技术伦理与质量控制的重要性。本文为软件开发与测试团队提供了关于如何有效利用AI技术提升测试效能的实践指南。 ###
|
7天前
|
NoSQL 测试技术 Go
自动化测试在 Go 开源库中的应用与实践
本文介绍了 Go 语言的自动化测试及其在 `go mongox` 库中的实践。Go 语言通过 `testing` 库和 `go test` 命令提供了简洁高效的测试框架,支持单元测试、集成测试和基准测试。`go mongox` 库通过单元测试和集成测试确保与 MongoDB 交互的正确性和稳定性,使用 Docker Compose 快速搭建测试环境。文章还探讨了表驱动测试、覆盖率检查和 Mock 工具的使用,强调了自动化测试在开源库中的重要性。
|
12天前
|
测试技术 Python
软件测试的艺术:从理论到实践的探索
【10月更文挑战第23天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将深入探讨软件测试的核心理念、方法和实践,揭示如何通过精心设计和执行测试来提高软件质量。我们将一起探索测试的不同阶段,包括单元测试、集成测试、系统测试和验收测试,以及它们如何相互补充,共同构建起一个坚实的质量保证体系。文章旨在启发读者思考如何在自己的项目中实施有效的测试策略,从而提升软件的可靠性和性能。
下一篇
无影云桌面