Skip to content

Instantly share code, notes, and snippets.

@r1w1s1
Last active April 13, 2016 18:29
Show Gist options
  • Save r1w1s1/96972085063b8ed9ffb2 to your computer and use it in GitHub Desktop.
Save r1w1s1/96972085063b8ed9ffb2 to your computer and use it in GitHub Desktop.
Vagrant's Guest Slackware support for "hostname" and "network"

I'm using Vagrant 1.7.4 on Mac OS X(host)

/opt/vagrant/embedded/gems/gems/vagrant-1.7.4/plugins/guests/linux/cap/change_host_name_.rb

module VagrantPlugins
  module GuestLinux
    module Cap
      class ChangeHostName
        def self.change_host_name(machine, name)
          if !machine.communicate.test("hostname | grep '^#{name}$'")
            machine.communicate.sudo("sh -c \"echo '#{name}' > /etc/HOSTNAME\"")
            machine.communicate.sudo("hostname #{name}")
            machine.communicate.sudo("echo 127.0.0.1 '#{name}' >> /etc/hosts")
          end
        end
      end
    end
  end
end

/opt/vagrant/embedded/gems/gems/vagrant-1.7.4/plugins/guests/linux/cap/configure_networks.rb

require "tempfile"

require "vagrant/util/template_renderer"

module VagrantPlugins
  module GuestLinux
    module Cap
      class ConfigureNetworks
        include Vagrant::Util

        def self.configure_networks(machine, networks)
          machine.communicate.tap do |comm|
             # Configure each network interface
            networks.each do |network|
              comm.sudo("ifconfig eth#{network[:interface]} #{network[:ip]} netmask #{network[:netmask]} up")
            end
          end
        end
      end
    end
  end
end

/opt/vagrant/embedded/gems/gems/vagrant-1.7.4/plugins/guests/linux/plugin.rb

require "vagrant"

module VagrantPlugins
  module GuestLinux
    class Plugin < Vagrant.plugin("2")
      name "Linux guest."
      description "Linux guest support."

      guest("linux")  do
        require File.expand_path("../guest", __FILE__)
        Guest
      end

      guest_capability("linux", "change_host_name") do
        require_relative "cap/change_host_name"
        Cap::ChangeHostName
      end

      guest_capability("linux", "configure_networks") do
        require_relative "cap/configure_networks"
        Cap::ConfigureNetworks
      end

      guest_capability("linux", "choose_addressable_ip_addr") do
        require_relative "cap/choose_addressable_ip_addr"
        Cap::ChooseAddressableIPAddr
      end

      guest_capability("linux", "halt") do
        require_relative "cap/halt"
        Cap::Halt
      end

      guest_capability("linux", "insert_public_key") do
        require_relative "cap/insert_public_key"
        Cap::InsertPublicKey
      end

      guest_capability("linux", "shell_expand_guest_path") do
        require_relative "cap/shell_expand_guest_path"
        Cap::ShellExpandGuestPath
      end

      guest_capability("linux", "mount_nfs_folder") do
        require_relative "cap/mount_nfs"
        Cap::MountNFS
      end

      guest_capability("linux", "mount_smb_shared_folder") do
        require_relative "cap/mount_smb_shared_folder"
        Cap::MountSMBSharedFolder
      end

      guest_capability("linux", "mount_virtualbox_shared_folder") do
        require_relative "cap/mount_virtualbox_shared_folder"
        Cap::MountVirtualBoxSharedFolder
      end

      guest_capability("linux", "nfs_client_installed") do
        require_relative "cap/nfs_client"
        Cap::NFSClient
      end

      # For the Docker provider
      guest_capability("linux", "port_open_check") do
        require_relative "cap/port"
        Cap::Port
      end

      guest_capability("linux", "read_ip_address") do
        require_relative "cap/read_ip_address"
        Cap::ReadIPAddress
      end

      guest_capability("linux", "remove_public_key") do
        require_relative "cap/remove_public_key"
        Cap::RemovePublicKey
      end

      guest_capability("linux", "rsync_installed") do
        require_relative "cap/rsync"
        Cap::RSync
      end

      guest_capability("linux", "rsync_command") do
        require_relative "cap/rsync"
        Cap::RSync
      end

      guest_capability("linux", "rsync_post") do
        require_relative "cap/rsync"
        Cap::RSync
      end

      guest_capability("linux", "rsync_pre") do
        require_relative "cap/rsync"
        Cap::RSync
      end

      guest_capability("linux", "unmount_virtualbox_shared_folder") do
        require_relative "cap/mount_virtualbox_shared_folder"
        Cap::MountVirtualBoxSharedFolder
      end
    end
  end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment