Skip to content

Instantly share code, notes, and snippets.

@ebisawa
Last active December 10, 2015 05:18
Show Gist options
  • Save ebisawa/4386393 to your computer and use it in GitHub Desktop.
Save ebisawa/4386393 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
require 'optparse'
require 'pathname'
require 'tmpdir'
$options = {}
opt = OptionParser.new
opt.on('--iso ISOFILE', 'base iso image name') {|v| $options[:iso] = v }
opt.on('--out OUTFILE', 'output file name') {|v| $options[:out] = v }
opt.on('--preseed PRESEEDFILE', 'preseed config file') {|v| $options[:seed] = v }
opt.parse!(ARGV)
if $options[:iso] == nil || $options[:out] == nil || $options[:seed] == nil
puts opt
abort
end
def docmd(cmd)
puts cmd
system(cmd)
end
def set_isolinux_cfg(isodir)
open("#{isodir}/isolinux/isolinux.cfg", 'w') do |io|
io.print(<<"EOS")
# D-I config version 2.0
default install
label install
menu label ^Install Ubuntu Server
kernel /install/vmlinuz
append auto=true pkgsel/language-pack-patterns= pkgsel/install-language-support=false vga=normal file=/cdrom/preseed/#{File.basename($options[:seed])} initrd=/install/initrd.gz quiet --
label hd
menu label ^Boot from first hard disk
localboot 0x80
EOS
end
end
def set_preseed_cfg(isodir)
docmd("cp #{$options[:seed]} #{isodir}/preseed")
end
def genisoimage(isodir, outname)
docmd("genisoimage -N -J -R -D -V 'PRESEED' -o #{outname} -b isolinux/isolinux.bin -c isolinux/isolinux.cat -no-emul-boot -boot-load-size 4 -boot-info-table #{isodir}")
end
Dir.mktmpdir(File.basename($0, '.*')) do |tmpdir|
isopath = Pathname.new($options[:iso]).realpath
docmd("cd #{tmpdir}; 7z x #{isopath}")
docmd("rm -rf #{tmpdir}/[BOOT]")
set_isolinux_cfg(tmpdir)
set_preseed_cfg(tmpdir)
genisoimage(tmpdir, $options[:out])
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment