GithubHelp home page GithubHelp logo

ruzickap / docker-packer_qemu_virtualbox_ansible Goto Github PK

View Code? Open in Web Editor NEW
7.0 2.0 1.0 37 KB

Docker image containing Packer, QEMU, ViartualBox and Ansible (with boto3 and winrm)

Shell 10.25% Dockerfile 89.75%
docker-virtualbox docker-image packer qemu ansible dockerfile virtualbox

docker-packer_qemu_virtualbox_ansible's Introduction

Dockerfile with Packer, QEMU, VirtualBox, Ansible (with winrm Python module)

Docker Hub; peru/packer_qemu_virtualbox_ansible Docker pulls Docker Build

This repository provides Dockerfile which can be used to build images for Virtual Machines by Packer.

The docker image is primary created for building Packer Templates located in this repository https://github.com/ruzickap/packer-templates, but it can be used everywhere.

Installation steps

To use this Docker image you need to install VirtualBox and Docker to your OS (Fedora / Ubuntu). This may work on other operating systems too, but I didn't have a chance to test it.

Ubuntu installation steps (Docker + VirtualBox)

sudo apt update
sudo apt install -y --no-install-recommends curl git docker.io virtualbox
sudo gpasswd -a ${USER} docker
# This is mandatory for Ubuntu otherwise docker container will not have access to /dev/kvm - this is default in Fedora (https://bugzilla.redhat.com/show_bug.cgi?id=993491)
sudo bash -c "echo 'KERNEL==\"kvm\", GROUP=\"kvm\", MODE=\"0666\"' > /etc/udev/rules.d/60-qemu-system-common.rules"
sudo reboot

Fedora installation steps (Docker + VirtualBox)

sudo sed -i 's@^SELINUX=enforcing@SELINUX=disabled@' /etc/selinux/config
sudo dnf upgrade -y
# Reboot if necessary (especially if you upgrade the kernel or related packages)

sudo dnf install -y http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
sudo dnf install -y akmod-VirtualBox curl docker git kernel-devel-$(uname -r) libvirt-daemon-kvm
sudo akmods

sudo bash -c 'echo "vboxdrv" > /etc/modules-load.d/vboxdrv.conf'
sudo usermod -a -G libvirt ${USER}
sudo groupadd docker && sudo gpasswd -a ${USER} docker
sudo systemctl enable docker

sudo reboot

Build image from Packer templates

Real example how to use the Docker image to build Packer images for libvirt/qemu. You can replace -only=qemu by -only=virtualbox-iso to build VirtualBox images.

You can see the console of virtual machine by turning on -var headless=false. (It will connect the "X GUI" from the docker to your X server)

Common mandatory part for all

PACKER_TEMPLATES_GIT="https://github.com/ruzickap/packer-templates"
PACKER_TEMPLATES_DIR="$PWD/packer-templates"
PACKER_IMAGES_OUTPUT_DIR="/var/tmp/packer-templates-images"

git clone --recurse-submodules $PACKER_TEMPLATES_GIT
cd packer-templates
TMPDIR="$PWD/packer_cache"

test -d $TMPDIR                   || mkdir -v $TMPDIR
test -d $PACKER_IMAGES_OUTPUT_DIR || mkdir -v $PACKER_IMAGES_OUTPUT_DIR

Build CentOS image

export NAME="my_centos-7-x86_64"
export CENTOS_VERSION="7"
export CENTOS_TYPE="NetInstall"
export CENTOS_TAG="1804"
export PACKER_RUN_TIMEOUT="7200"  # keep build running for max 2 hours

docker run --rm -it -u $(id -u):$(id -g) --privileged --name "packer_${NAME}" \
-v $PACKER_IMAGES_OUTPUT_DIR:/home/docker/packer_images_output_dir \
-v $PWD:/home/docker/packer \
-v $TMPDIR:/home/docker/packer/packer_cache \
-e PACKER_RUN_TIMEOUT \
-e NAME -e CENTOS_VERSION -e CENTOS_TYPE -e CENTOS_TAG \
-e PACKER_IMAGES_OUTPUT_DIR=/home/docker/packer_images_output_dir \
peru/packer_qemu_virtualbox_ansible build -only=qemu -var headless=true my_centos-7.json

Build Ubuntu images

Ubuntu Server

export NAME="ubuntu-18.04-server-amd64"
export UBUNTU_TYPE="server"
export UBUNTU_VERSION="18.04"
export UBUNTU_IMAGES_URL="http://archive.ubuntu.com/ubuntu/dists/bionic-updates/main/installer-amd64/current/images/"

docker run --rm -it -u $(id -u):$(id -g) --privileged --name "packer_${NAME}" \
-v $PACKER_IMAGES_OUTPUT_DIR:/home/docker/packer_images_output_dir \
-v $PWD:/home/docker/packer \
-v $TMPDIR:/home/docker/packer/packer_cache \
-e NAME -e UBUNTU_TYPE -e UBUNTU_VERSION -e UBUNTU_IMAGES_URL \
-e PACKER_IMAGES_OUTPUT_DIR=/home/docker/packer_images_output_dir \
peru/packer_qemu_virtualbox_ansible build -only=qemu -var headless=true ubuntu-server.json
export NAME="ubuntu-16.04-server-amd64"
export UBUNTU_TYPE="server"
export UBUNTU_VERSION="16.04"
export UBUNTU_IMAGES_URL="http://archive.ubuntu.com/ubuntu/dists/xenial-updates/main/installer-amd64/current/images/"

docker run --rm -it -u $(id -u):$(id -g) --privileged --name "packer_${NAME}" \
-v $PACKER_IMAGES_OUTPUT_DIR:/home/docker/packer_images_output_dir \
-v $PWD:/home/docker/packer \
-v $TMPDIR:/home/docker/packer/packer_cache \
-e NAME -e UBUNTU_TYPE -e UBUNTU_VERSION -e UBUNTU_IMAGES_URL \
-e PACKER_IMAGES_OUTPUT_DIR=/home/docker/packer_images_output_dir \
peru/packer_qemu_virtualbox_ansible build -only=qemu -var headless=true ubuntu-server.json

Ubuntu Desktop

export NAME="ubuntu-18.04-desktop-amd64"
export UBUNTU_TYPE="desktop"
export UBUNTU_VERSION="18.04"
export UBUNTU_IMAGES_URL="http://archive.ubuntu.com/ubuntu/dists/bionic-updates/main/installer-amd64/current/images/"

docker run --rm -it -u $(id -u):$(id -g) --privileged --name "packer_${NAME}" \
-v $PACKER_IMAGES_OUTPUT_DIR:/home/docker/packer_images_output_dir \
-v $PWD:/home/docker/packer \
-v $TMPDIR:/home/docker/packer/packer_cache \
-e NAME -e UBUNTU_TYPE -e UBUNTU_VERSION -e UBUNTU_IMAGES_URL \
-e PACKER_IMAGES_OUTPUT_DIR=/home/docker/packer_images_output_dir \
peru/packer_qemu_virtualbox_ansible build -only=qemu -var headless=true ubuntu-desktop.json

Build Windows image

Common mandatory part for all Windows images

Download the VirtIO driver image file:

export VIRTIO_WIN_ISO="packer_cache/virtio-win.iso"
wget -c https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso -O $VIRTIO_WIN_ISO

Windows 10

export NAME="my_windows-10-enterprise-x64-eval"
export WINDOWS_VERSION="10"
export ISO_URL="https://software-download.microsoft.com/download/pr/17763.1.180914-1434.rs5_release_CLIENTENTERPRISEEVAL_OEMRET_x64FRE_en-us.iso"

docker run --rm -it -u $(id -u):$(id -g) --privileged --name "packer_${NAME}" \
-v $PACKER_IMAGES_OUTPUT_DIR:/home/docker/packer_images_output_dir \
-v $PWD:/home/docker/packer \
-v $TMPDIR:/home/docker/packer/packer_cache \
-e NAME -e WINDOWS_VERSION -e ISO_URL -e VIRTIO_WIN_ISO \
-e PACKER_IMAGES_OUTPUT_DIR=/home/docker/packer_images_output_dir \
peru/packer_qemu_virtualbox_ansible build -only=qemu -var headless=true windows.json

Windows Server 2019

export NAME="windows-server-2019-standard-x64-eval"
export WINDOWS_VERSION="2019"
export ISO_URL="https://software-download.microsoft.com/download/pr/17763.1.180914-1434.rs5_release_SERVER_EVAL_x64FRE_en-us.iso"

docker run --rm -it -u $(id -u):$(id -g) --privileged --name "packer_${NAME}" \
-v $PACKER_IMAGES_OUTPUT_DIR:/home/docker/packer_images_output_dir \
-v $PWD:/home/docker/packer \
-v $TMPDIR:/home/docker/packer/packer_cache \
-e NAME -e WINDOWS_VERSION -e ISO_URL -e VIRTIO_WIN_ISO \
-e PACKER_IMAGES_OUTPUT_DIR=/home/docker/packer_images_output_dir \
peru/packer_qemu_virtualbox_ansible build -only=qemu -var headless=true windows.json

Windows Server 2016

export NAME="windows-server-2016-standard-x64-eval"
export WINDOWS_VERSION="2016"
export ISO_URL="https://software-download.microsoft.com/download/pr/Windows_Server_2016_Datacenter_EVAL_en-us_14393_refresh.ISO"

docker run --rm -it -u $(id -u):$(id -g) --privileged --name "packer_${NAME}" \
-v $PACKER_IMAGES_OUTPUT_DIR:/home/docker/packer_images_output_dir \
-v $PWD:/home/docker/packer \
-v $TMPDIR:/home/docker/packer/packer_cache \
-e NAME -e WINDOWS_VERSION -e ISO_URL -e VIRTIO_WIN_ISO \
-e PACKER_IMAGES_OUTPUT_DIR=/home/docker/packer_images_output_dir \
peru/packer_qemu_virtualbox_ansible build -only=qemu -var headless=true windows.json

Windows Server 2012

export NAME="windows-server-2012-r2-standard-x64-eval"
export WINDOWS_VERSION="2012"
export ISO_URL="http://care.dlservice.microsoft.com/dl/download/6/2/A/62A76ABB-9990-4EFC-A4FE-C7D698DAEB96/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_SERVER_EVAL_EN-US-IR3_SSS_X64FREE_EN-US_DV9.ISO"

docker run --rm -it -u $(id -u):$(id -g) --privileged --name "packer_${NAME}" \
-v $PACKER_IMAGES_OUTPUT_DIR:/home/docker/packer_images_output_dir \
-v $PWD:/home/docker/packer \
-v $TMPDIR:/home/docker/packer/packer_cache \
-e NAME -e WINDOWS_VERSION -e ISO_URL -e VIRTIO_WIN_ISO \
-e PACKER_IMAGES_OUTPUT_DIR=/home/docker/packer_images_output_dir \
peru/packer_qemu_virtualbox_ansible build -only=qemu -var headless=true windows.json

docker-packer_qemu_virtualbox_ansible's People

Contributors

ruzickap avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

nelsonjchen

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.