X-Git-Url: http://git.osdn.net/view?p=osdn-codes%2Fimage-creator.git;a=blobdiff_plain;f=create-image;h=c2e6139d241dc17a9b28e7127de2afe932d1a87d;hp=139f124680e697d55f8eee0424c834c5ecdbde99;hb=dc529c373ce1b032966b80bdc8daf38b5891c4e0;hpb=fc93fbd23a3cd86d2a3ba58b7192aeb4ed88badd diff --git a/create-image b/create-image index 139f124..c2e6139 100755 --- a/create-image +++ b/create-image @@ -96,7 +96,7 @@ class ImageCreator begin system("mount", dev, mount_point) or raise "Failed to mount file system #{dev} on #{mount_point}" puts "Copying #{src_host}:#{di.srcpath} to #{dev}..." - system("rsync", "-azHSAX", "--numeric-ids", "--info=progress2", "#{src_host}:#{di.srcpath}/", "#{mount_point}/", *((["--exclude"] * di.exclude.size).zip(di.exclude).flatten)) + system("rsync", "-azHSAX", "--numeric-ids", "--info=progress2", "#{src_host}:#{di.srcpath}/", "#{mount_point}/", *((["--exclude"] * di.exclude.size).zip(di.exclude).flatten)) or raise "rsync fails" ensure system("umount", mount_point) File.directory?(mount_point) and @@ -113,23 +113,45 @@ class ImageCreator coreimg = "#{dir}/core.img" system("grub-mkimage", "-o", coreimg, "-O", "i386-pc", "-p", "(hd0,gpt2)/boot/grub", "biosdisk", "part_gpt", "ext2", "gzio", "xzio", "lzopio") or raise "Failed to create grub core image." with_loopdev do |devices, root| - puts "Override grub..." + puts "Override grub with host version..." system("grub-bios-setup", "-d", dir, root) or raise "Failed to run grub-bios-setup" rootfs_uuid=`blkid -o value -s UUID #{devices[1]}`.chomp("\n") puts "New rootfs UUID=#{rootfs_uuid}" begin system("mount", devices[1], dir) - system("cp -a /usr/lib/grub/i386-pc/*.mod #{dir}/boot/grub/i386-pc/") or raise "Failed to copy grub modules" - grubconf = File.read "#{dir}/boot/grub/grub.cfg" - if old_uuid = grubconf[/root=UUID=(\S+)/, 1] - File.write "#{dir}/boot/grub/grub.cfg", grubconf.gsub(/#{old_uuid}/, rootfs_uuid) - end puts "Rewrite fstab..." fstab = File.read "#{dir}/etc/fstab" fstab.gsub!(%r{^(UUID=|/)\S+(\s+/\s+)}, "UUID=#{rootfs_uuid}\\2") fstab.gsub!(%r{^(\S+\s+\S+\s+\S+\s+sw(?=\b))}, '#\1') File.write "#{dir}/etc/fstab", fstab + + unless File.exists? "#{dir}/vmlinuz" + system("chroot", dir, "apt-get", "-qy", "update") + system("chroot", dir, "apt-get", "-y", "install", "linux-image-amd64") + end + + puts "Update grub.cfg..." + system("mkdir", "-p", "#{dir}/boot/grub/i386-pc") or raise "Failed to create grub dir" + system("cp -a /usr/lib/grub/i386-pc/*.mod #{dir}/boot/grub/i386-pc/") or raise "Failed to copy grub modules" + if File.exists? "#{dir}/boot/grub/grub.cfg" + grubconf = File.read "#{dir}/boot/grub/grub.cfg" + if old_uuid = grubconf[/root=UUID=(\S+)/, 1] + File.write "#{dir}/boot/grub/grub.cfg", grubconf.gsub(/#{old_uuid}/, rootfs_uuid) + end + else + File.write "#{dir}/boot/grub/grub.cfg", <<-EOC + set timeout=5 + insmod part_gpt + insmod ext2 + insmod linux + search --no-floppy --fs-uuid --set=root #{rootfs_uuid} + menuentry 'Linux' { + linux /vmlinuz root=UUID=#{rootfs_uuid} ro + initrd /initrd.img + } + EOC + end ensure system("umount", dir) end