diff --git a/plugins/guests/haiku/cap/change_host_name.rb b/plugins/guests/haiku/cap/change_host_name.rb new file mode 100644 index 000000000..84fe5a233 --- /dev/null +++ b/plugins/guests/haiku/cap/change_host_name.rb @@ -0,0 +1,33 @@ +module VagrantPlugins + module GuestHaiku + module Cap + class ChangeHostName + def self.change_host_name(machine, name) + comm = machine.communicate + + if !comm.test("hostname | grep '^#{name}$'", sudo: false) + basename = name.split(".", 2)[0] + comm.execute <<-EOH.gsub(/^ {14}/, '') + # Ensure exit on command error + set -e + + SYS_CONFIG_DIR=$(finddir B_SYSTEM_SETTINGS_DIRECTORY) + + # Set the hostname + echo '#{basename}' > $SYS_CONFIG_DIR/network/hostname + hostname '#{basename}' + + # Remove comments and blank lines from /etc/hosts + sed -i'' -e 's/#.*$//' -e '/^$/d' $SYS_CONFIG_DIR/network/hosts + + # Prepend ourselves to /etc/hosts + grep -w '#{name}' /etc/hosts || { + sed -i'' '1i 127.0.0.1\\t#{name}\\t#{basename}' $SYS_CONFIG_DIR/network/hosts + } + EOH + end + end + end + end + end +end diff --git a/plugins/guests/haiku/guest.rb b/plugins/guests/haiku/guest.rb new file mode 100644 index 000000000..bd5c687a3 --- /dev/null +++ b/plugins/guests/haiku/guest.rb @@ -0,0 +1,11 @@ +require "vagrant" + +module VagrantPlugins + module GuestHaiku + class Guest < Vagrant.plugin("2", :guest) + def detect?(machine) + machine.communicate.test("uname -o | grep 'Haiku'") + end + end + end +end diff --git a/plugins/guests/haiku/plugin.rb b/plugins/guests/haiku/plugin.rb new file mode 100644 index 000000000..63e7ce849 --- /dev/null +++ b/plugins/guests/haiku/plugin.rb @@ -0,0 +1,20 @@ +require "vagrant" + +module VagrantPlugins + module GuestHaiku + class Plugin < Vagrant.plugin("2") + name "Haiku guest" + description "Haiku guest support." + + guest(:haiku) do + require_relative "guest" + Guest + end + + guest_capability(:haiku, :change_host_name) do + require_relative "cap/change_host_name" + Cap::ChangeHostName + end + end + end +end