1

我在尝试创建实例存储服务器包时遇到问题

Ubuntu 12.10

ec2-bundle-vol \
--user $EC2_USER \
--privatekey $EC2_PRIVATE_KEY \
--cert $EC2_CERT \
--arch x86_64 \
--exclude /mnt,/tmp,/var/tmp \
--destination /mnt/bundles/$BUNDLE_NAME/ \
--prefix $BUNDLE_NAME

Excluding: 
     /
     /proc
     /sys
     /sys/fs/fuse/connections
     /sys/kernel/debug
     /sys/kernel/security
     /dev
     /dev/pts
     /dev
     /media
     /mnt
     /proc
     /sys
     /etc/udev/rules.d/70-persistent-net.rules
     /etc/udev/rules.d/z25_persistent-net.rules
     /mnt
     /tmp
     /var/tmp
     /mnt/bundles/130309
     /mnt/img-mnt
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.0024517 s, 428 MB/s
mke2fs 1.42.5 (29-Jul-2012)
loop: can't delete device /dev/loop0: No such device or address
Bundling image file...
ERROR: can't convert Fixnum into String

有什么想法可能是错的吗?

谢谢!

4

3 回答 3

0

您可以应用此补丁并继续使用 ruby​​1.9。请参阅原始文章:ec2_upload_bundle 和 ruby​​ 1.9:无法将 Fixnum 转换为字符串(非常感谢decodeideas!)

从原始文章复制粘贴

以下适用于以下场景

  • ubuntu 业力,ec2 ami
  • ruby 1.9.2 安装为 /usr/bin/ruby
  • 最新的 ec2 工具

当您使用 ec2_upload_bundle 重新捆绑您修改的 AMI 时,您将收到错误

ERROR: can't convert Fixnum into String

调试它的技巧是将 --debug 传递给 ec2 命令。该修复位于 /usr/lib/ec2-ami-tools/lib/ec2/amitools/util.rb 的第 19 行,您需要将 ?A 更改为 ?A.ord 才能获得此行:

(0..19).inject("") {|ident, n| ident+(?A.ord + Kernel.rand(26)).chr}

在进行更改之前,您可以使用

ruby1.9 -r /usr/lib/ec2-ami-tools/lib/ec2/amitools/util -e 'puts gen_ident'

应用补丁后,您应该会得到一个简短的随机字母序列。

于 2014-03-05T16:40:41.730 回答
0

从 1.9 降级到 ruby​​ 1.8 或安装 ruby​​ 1.8 开始。似乎 AMI 工具不兼容 1.9。

apt-get install ruby1.8
于 2013-04-17T19:51:17.047 回答
0

dev 目录是设备目录,因此您不应该复制,而 loop0 是回送连接器,通常是对另一个已安装文件系统的引用。

我注意到您的排除行:

--exclude /mnt,/tmp,/var/tmp \

您不/dev直接排除,但确实排除/mnt了,所以我猜您不希望将外部文件系统滚动到您的映像中。但是该/dev目录在输出中提到了两次,您是否尝试在命令行参数中排除或明确/dev排除/dev/loop0/dev/loop*

于 2013-03-16T08:59:55.703 回答