Last active
December 10, 2015 05:18
-
-
Save ebisawa/4386393 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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