Coder Social home page Coder Social logo

packer-freebsd's Introduction

packer-FreeBSD

This repository contains the necessary tools to build a Vagrant-ready FreeBSD virtual machine using Packer.

There are official FreeBSD VMs available from the Vagrant Cloud.

Prerequisites

Instructions

To create a box:

  1. Clone this repository:

    $ git clone https://github.com/jlduran/packer-FreeBSD.git
    $ cd packer-FreeBSD
    
  2. Build the box:

    $ packer build .
    
  3. Add it to the list of Vagrant boxes. See Handling .iso and .box files for more information.

    $ vagrant box add builds/FreeBSD-13.0-RELEASE-amd64.box --name FreeBSD-13.0-RELEASE-amd64
    

Sample Vagrantbox file

servers = [
  { name: 'www.local', cpus: 2, memory: 1024 },
  { name: 'db.local', cpus: 1, memory: 2048 }
]

script = <<-SCRIPT
  sed -i '' "s/Vagrant/$(hostname -s)/g" /usr/local/etc/mDNSResponderServices.conf
  service mdnsresponderposix restart
SCRIPT

ansible_raw_arguments = []

Vagrant.configure(2) do |config|
  servers.each do |server|
    config.vm.define server[:name] do |box|
      box.vm.box      = 'FreeBSD-13.0-RELEASE-amd64'
      box.vm.hostname = server[:name]
      box.vm.provider 'virtualbox' do |v|
        v.default_nic_type       = 'virtio'
        v.linked_clone           = true
        v.name, v.cpus, v.memory = server.values_at(:name, :cpus, :memory)
      end

      if server == servers.last
        box.vm.provision 'ansible' do |ansible|
          ansible.compatibility_mode = '2.0'
          ansible.limit              = 'all'
          ansible.playbook           = 'site.yml'
          ansible.inventory_path     = 'local'
          ansible.raw_arguments      = ansible_raw_arguments
        end
      else
        ansible_raw_arguments << private_key_path(server[:name])
      end
    end
  end

  config.vm.provision 'shell', inline: script
end

def private_key_path(server_name)
  provider = ENV['VAGRANT_DEFAULT_PROVIDER'] || 'virtualbox'
  vagrant_dotfile_path = ENV['VAGRANT_DOTFILE_PATH'] || '.vagrant'

  "--private-key=#{vagrant_dotfile_path}/machines/#{server_name}/" \
    "#{provider}/private_key"
end

Build Options

Below is a sample variables.pkrvars.hcl file:

arch          = "amd64"
branch        = "-RELEASE"
build_date    = ""
cpus          = 1
directory     = "releases"
disk_size     = 10240
filesystem    = "zfs"
git_commit    = ""
guest_os_type = "FreeBSD_64"
memory        = 1024
mirror        = "https://download.freebsd.org/ftp"
rc_conf_file  = ""
revision      = "13.0"

The following variables can be set:

  • cpus is the number of CPUs assigned. Default: 1

  • disk_size is the HDD size in megabytes. Default: 10240

  • memory is the amount of RAM in megabytes assigned. Default: 1024

  • revision is the FreeBSD revision number. Default: 13.0

  • branch used in conjunction with build_date, git_commit and directory. Default: -RELEASE

    See FreeBSD's Release Branches for more information. Possible values are:

    Branch Directory
    -CURRENT snapshots
    -STABLE snapshots
    -ALPHA1, -ALPHA2, … snapshots
    -PRERELEASE snapshots
    -BETA1, -BETA2, … releases
    -RC1, -RC2, … releases
    -RELEASE releases
  • arch is the target architecture (i386 or amd64). Default: amd64

  • guest_os_type (VirtualBox) used in conjunction with arch (FreeBSD or FreeBSD_64). See packer's documentation. Default: FreeBSD_64

  • filesystem is the file system type (ufs or zfs). Default: zfs

  • mirror is the preferred FreeBSD mirror. Default: https://download.freebsd.org/ftp

  • rc_conf_file is the file where rc.conf parameters are stored. Default: empty . Possible values are:

    Value File
    /etc/rc.conf
    local /etc/rc.conf.local (Its use is discouraged)
    vendor /etc/defaults/vendor.conf
    name (/usr/local)/etc/rc.conf.d/<name>

Create a variables.pkrvars.hcl file overriding the default values, and invoke:

$ packer build -var-file="variables.pkrvars.hcl" .

You can also select which components you wish to install. By default, it runs the following provisioning scripts:

Name Description
update Updates to the latest patch level (if applicable) and the latest packages
vagrant Vagrant-related configuration
zeroconf Enables zero-configuration networking
ansible Installs python and CA Root certificates
vmtools Virtual Machine-specific utilities
cleanup Cleanup script (must be called last)

The following scripts are also available:

Name Description
hardening Provides basic hardening options
ports Installs the FreeBSD ports tree

Handling .iso and .box files

Packer will automatically download the .iso image if it does not find the right one under the iso directory. Optionally, you can download the .iso image and save it to the iso directory.

.box files will be created under the builds directory.

packer-freebsd's People

Contributors

jlduran avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.