Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 11 Jun 2016 10:23:53 GMT
From:      litong@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r305103 - in soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve: . action
Message-ID:  <201606111023.u5BANrin086281@socsvn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: litong
Date: Sat Jun 11 10:23:53 2016
New Revision: 305103
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305103

Log:
  add load_os action and its corresponding driver code

Modified:
  soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/load_os.rb
  soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb
  soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb

Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/load_os.rb
==============================================================================
--- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/load_os.rb	Sat Jun 11 06:42:34 2016	(r305102)
+++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/load_os.rb	Sat Jun 11 10:23:53 2016	(r305103)
@@ -11,14 +11,19 @@
 	end
 
 	def call(env)
-	  @machine 	= env[:machine]
-	  @driver	= @machine.provider.driver
-	  firmware = @machine.box.metadata[:firmware]
-	  loader = @machine.box.metadata[:loader]
-	  @driver.loader(loader) if firmware == 'bios'
+	  machine 	= env[:machine]
+	  load(machine)
 	  @app.call(env)
 	end
 
+	private
+
+	def load(machine)
+	  driver	= machine.provider.driver
+	  firmware	= machine.box.metadata[:firmware]
+	  loader	= machine.box.metadata[:loader]
+	  driver.load(loader, machine) if firmware == 'bios'
+	end
       end
     end
   end

Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb
==============================================================================
--- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb	Sat Jun 11 06:42:34 2016	(r305102)
+++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb	Sat Jun 11 10:23:53 2016	(r305103)
@@ -47,7 +47,44 @@
 	execute(false, @sudo, "ifconfig", bridge_name, "description", switch_name, "up")
       end
 
-      def loader(loader)
+      def load(loader, machine)
+	run_cmd = []
+	case loader
+	when 'bhyveload'
+	  run_cmd.push('bhyveload')
+	  # Set autoboot, and memory and disk
+	  run_cmd.push("-m").push("#{machine.config.memory}")
+	  #########################################################
+	  #		TBD: problem with disk name		  #
+	  #########################################################
+	  run_cmd.push("-d").push("#{machine.box.directory.join('disk.img').to_s}")
+	  run_cmd += %w(-e autoboot_delay=0)
+	when 'grub-bhyve'
+	  command = execute(false, %w(which grub-bhyve))
+	  raise Errors::GrubBhyveNotInstalled if command.length == 0
+	  run_cmd.push(command)
+	  run_cmd.push("-m").push("#{machine.box.directory.join('device.map').to_s}")
+	  run_cmd.push("-M").push("#{machine.config.memory}")
+	  # Maybe there should be some grub config in Vagrantfile, for now
+	  # we just use this hd0,1 as default root and don't use -d -g 
+	  # argument
+	  run_cmd += %w(-r hd0,1)
+	else
+	  raise Errors::UnrecognizedLoader
+	end
+	
+	# Find an available nmdm device and add it as loader's -m argument
+	nmdm_num = 1
+	while true
+	  result = execute(false, %w(ls -l /dev/ | grep).push("nmdm#{nmdm_num}A"))
+	  break if result.length == 0
+	  nmdm_num += 1
+	end
+	run_cmd.push("-c").push("/dev/nmdm#{nmdm_num}A")
+
+	vm_name = machine.box.name.gsub('/', '_')
+	run_cmd.push(vm_name)
+	execute(false, run_cmd)
       end
 
       def bhyve

Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb
==============================================================================
--- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb	Sat Jun 11 06:42:34 2016	(r305102)
+++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb	Sat Jun 11 10:23:53 2016	(r305103)
@@ -22,6 +22,14 @@
       class UnableToCreateBridge < VagrantError
 	error_key(:unable_to_create_brighe)
       end
+
+      class UnrecognizedLoader < VagrantError
+	error_key(:unrecognized_loader)
+      end
+
+      class GrubBhyveNotinstalled < VagrantError
+	error_key(:grub_bhyve_not_installed)
+      end
     end
   end
 end



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201606111023.u5BANrin086281>