Amazon EC2 上の CentOS5 で使っていた ruby-1.8.5 を、ソースからビルドした ruby-1.9.1 に入れ替えたら、ec2-bundle-vol が動かなくなった。

元はといえば、gem の ruby-aaws を使いたくてインストールしようとしたら、ruby 1.8.7 以上を要求してきたことに始まる。hpricot-0.8.1 が 1.9 以上を要求していたはずだから、ついでに 1.9 にしてしまおうとしたのが運の尽き、amitools が動かなくなった。



<pre class="prettyprint">Copying / into the image file /mnt/image1-20090621-0223…
Excluding:
/proc
/sys
/dev/pts
/proc/sys/fs/binfmt_misc
/dev
/media
/mnt
/proc
/sys
/vol
/mnt/image1-20090621-0223
/mnt/img-mnt
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.020805 seconds, 50.4 MB/s
mke2fs 1.39 (29-May-2006)
/etc/fstab:
Exception NoMethodError' at /usr/lib/site_ruby/ec2/platform/linux/image.rb:226 - undefined method each’ for #<String:0x8cb4d34>
ERROR: undefined method `each’ for #<String:0x8cb4d34>
</pre>

<p>ruby 1.9 で、String#each が無くなったらしい。該当箇所を探して、書き換える(1行だけ)。これで一応、動いているみたい。</p>

<pre class="prettyprint"># diff -c image.rb.org /usr/lib/site_ruby/ec2/platform/linux/image.rb
* image.rb Sun Jun 21 02:39:17 2009
— /usr/lib/site_ruby/ec2/platform/linux/image.rb Sun Jun 21 02:39:29 2009
****
** 223,229 **
fstab_content = make_fstab
File.open( fstab, ‘w’ ) { |f| f.write( fstab_content ) }
puts “/etc/fstab:”
! fstab_content.each do |s|
puts “\t #{s}”
end
end
— 223,229 —-
fstab_content = make_fstab
File.open( fstab, ‘w’ ) { |f| f.write( fstab_content ) }
puts “/etc/fstab:”
! fstab_content.each_line do |s|
puts “\t #{s}”
end
end
</pre>