class Macinbox::Actions::CreateBoxFromHDD
Public Class Methods
new(opts)
click to toggle source
# File lib/macinbox/actions/create_box_from_hdd.rb, line 15 def initialize(opts) @input_hdd = opts[:hdd_path] or raise ArgumentError.new(":hdd_path not specified") @output_path = opts[:box_path] or raise ArgumentError.new(":box_path not specified") @box_name = opts[:box_name] or raise ArgumentError.new(":box_name not specified") @cpu_count = opts[:cpu_count] or raise ArgumentError.new(":cpu_count not specified") @memory_size = opts[:memory_size] or raise ArgumentError.new(":memory_size not specified") @gui = opts[:gui] @fullscreen = opts[:fullscreen] @hidpi = opts[:hidpi] @collector = opts[:collector] or raise ArgumentError.new(":collector not specified") raise Macinbox::Error.new("HDD not found") unless File.exist? @input_hdd end
Public Instance Methods
run()
click to toggle source
# File lib/macinbox/actions/create_box_from_hdd.rb, line 32 def run @temp_dir = Task.backtick %W[ /usr/bin/mktemp -d -t create_box_from_hdd ] @collector.add_temp_dir @temp_dir Logger.info "Assembling the box contents..." do @box_dir = "#{@temp_dir}/#{@box_name}.box" FileUtils.mkdir @box_dir File.write "#{@box_dir}/metadata.json", <<~EOF {"provider": "parallels"} EOF File.write "#{@box_dir}/Vagrantfile", <<~EOF Vagrant.configure(2) do |config| config.vm.box_check_update = false config.vm.network :forwarded_port, guest: 22, host: 2222, id: "ssh", disabled: true config.vm.synced_folder ".", "/vagrant", disabled: true config.vm.provider "parallels" do |prl| prl.customize ["set", :id, "--startup-view", "#{@gui ? (@fullscreen ? "fullscreen" : "window") : "headless"}"] end end EOF task_opts = $verbose ? {} : { :out => File::NULL } Task.run %W[ prlctl create macinbox -o macos --no-hdd --dst #{@box_dir} ] + [task_opts] @collector.on_cleanup do Task.run %W[ prlctl unregister macinbox ] + [task_opts] end Macinbox::copyfiles(from: @input_hdd, to: "#{@box_dir}/macinbox.pvm/macinbox.hdd", recursive: true) Task.run %W[ prl_disk_tool convert --merge --hdd #{@box_dir}/macinbox.pvm/macinbox.hdd ] + [task_opts] Task.run %W[ prlctl set macinbox --device-add hdd --image #{@box_dir}/macinbox.pvm/macinbox.hdd ] + [task_opts] Task.run %W[ prlctl set macinbox --high-resolution #{@hidpi ? "on" : "off"} ] + [task_opts] Task.run %W[ prlctl set macinbox --cpus #{@cpu_count} ] + [task_opts] Task.run %W[ prlctl set macinbox --memsize #{@memory_size} ] + [task_opts] end Logger.info "Moving the box to the destination..." do FileUtils.chown ENV["SUDO_USER"], nil, @box_dir FileUtils.mv @box_dir, @output_path end end