我已经接近让 Amazon Linux 在 VirtualBox 中启动了,这要归功于这个答案和这些 网站。我已采取的步骤的简要概述:
- 使用 Amazon Linux 2011.09 64 位 AMI 启动 EC2 实例
dd
将 EBS 卷的内容转移ssh
到本地映像文件。- 将映像文件挂载为环回设备,然后挂载到本地挂载点。
- 创建一个新的空磁盘映像文件,使用引导加载程序的偏移进行分区,并创建一个 ext4 文件系统。
- 挂载新映像的分区并从 EC2 映像复制所有内容。
- 安装 grub(使用 Ubuntu 的
grub-legacy-ec2
软件包,而不是 grub2)。 - 使用将图像文件转换为 vmdk
qemu-img
。 - 使用 vmdk 创建一个新的 VirtualBox VM。
现在 VM 启动了,grub 加载了,并且找到了内核。但是当它尝试挂载根设备时失败了:
dracut Warning: No root device "block:/dev/xvda1" found
dracut Warning: Boot has failed. To debug this issue add "rdshell" to the kernel command line.
dracut Warning: Signal caught!
dracut Warning: Boot has failed. To debug this issue add "rdshell" to the kernel command line.
Kernel panic - not syncing: Attempted to kill init!
Pid: 1, comm: init Not tainted 2.6.35.14-107.1.39.amzn1.x86_64 #1
我尝试过/boot/grub/menu.lst
通过标签和 UUID 来查找根设备,但没有任何效果。我猜 xen 内核与 VirtualBox 不兼容。
所有这些努力背后的原因是要制作一个尽可能接近生产环境的 Vagrant 盒子,以便可以在本地测试部署。我知道在 EC2 上进行测试运行很便宜,但连接性差往往会破坏体验。此外,如果生产环境有虚拟机就太好了,这样同事们就不必为了开始应用程序开发而安装所有东西了。
如果我尝试运行不同的内核,哪个内核可以尽可能接近 Amazon Linux 2011.09?
答案1
我尝试了很多次,甚至一度放弃,但最后我成功了!
我已经设法使用在 vmware 下移植的 Amazon Linux AMI 进行启动!
我几乎是个新手,但经过几个小时的尝试,我做到了,使用 vmlinuz-2.6.32-38-generic 替换原始 amazon 内核取自 ubuntu 64 10.04 发行版。
我收到很多错误,因为 AMI 中的 amazon 配置正在内部地址中查找某些内容,但显然找不到。我认为是 /usr/bin/cloud-init。
但我可以从内部登录,而且看起来一切正常!
感谢您的帮助!!
我写过这博客文章提供了从 AMI 迁移到 Vmware 的分步说明。
希望这可以帮助!
答案2
亚马逊的官方内核是在其 2011.09 发行版中衍生出来的,IE2.6.35.14.
您可能可以通过 获取 Amazon 的源包get_reference_source
,但无论如何我并不指望它能在 Amazon 之外工作。
答案3
Cloudify 的人们分享了他们如何创建一个 VirtualBox 就绪的 Vagrant 盒,无需访问裸机 - 他们使用 AWS。
通往天堂的九个台阶:
- 使用 Packer 创建源图像(AMI)。
- 在 AWS 中启动一个工作实例,并使用快照或源映像作为其磁盘之一。
- 在工作映像上:创建原始映像卷作为文件,并在其上创建 ext4 分区。
- 将数据从源映像磁盘复制到之前创建的 ext4 分区。
- 在 ext4 分区上安装引导加载程序 (extlinux)。
- 将原始图像转换为 VMDK。
- 使用 OVF 描述符和 Vagrant 元数据捆绑 VMDK,并创建具有内容和 .box 扩展名的 tar 文件。
- 上传到 S3 [或任何你喜欢的地方]。
- 清理。
来源:博客文章http://www.developer.com/design/creating-a-reproducible-and-portable-development-environment.html通过以上 9 个步骤
代码:https://github.com/cloudify-cosmo/cloudify-packager/tree/3.2m4/image-builder