Add qemu image build scripts

This commit is contained in:
Yuya Kusakabe 2016-03-04 14:33:32 +09:00
parent a05a3660ea
commit 3e56d7456e
6 changed files with 178 additions and 0 deletions

2
.gitignore vendored
View File

@ -1,2 +1,4 @@
build/*
*.pyc
packer_build/*
packer_cache/*

View File

@ -37,6 +37,13 @@ prepare-package-env:
@scripts/pbuilder-config
@scripts/pbuilder-setup
.PHONY: qemu
.ONESHELL:
qemu:
@set -e
@scripts/check-vm-build-env
@scripts/build-qemu-image
.PHONY: clean
.ONESHELL:
clean:

30
scripts/build-qemu-image Executable file
View File

@ -0,0 +1,30 @@
#!/bin/sh
#
# Copyright (C) 2016 VyOS maintainers and contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or later as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# File: build-qemu-image
# Purpose:
# Build VyOS raw image for qemu.
export ISO_IMAGE=./build/live-image-amd64.hybrid.iso
export ISO_MD5_SUM=$(md5sum ${ISO_IMAGE} | awk '{print $1}')
export PACKER_BUILD_DIR=packer_build
export PACKER_LOG_PATH=${PACKER_BUILD_DIR}/build.log
export PACKER_LOG=1
mkdir -p ${PACKER_BUILD_DIR}
packer build -only=qemu scripts/packer.json

61
scripts/check-vm-build-env Executable file
View File

@ -0,0 +1,61 @@
#!/usr/bin/env python
#
# Copyright (C) 2016 VyOS maintainers and contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or later as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# File: check-vm-build-env
# Purpose:
# Checks if packages required for VM image build are installed.
import os
import sys
from distutils.spawn import find_executable
required_packages = [
'make',
'qemu-system-x86',
'qemu-utils'
]
def is_installed(name):
result = os.system("dpkg-query -W --showformat='${{Status}}\n' {name} 2>&1 | grep 'install ok installed' >/dev/null".format(name=name))
return True if result == 0 else False
missing_packages = []
print("Checking if packages required for VyOS VM image build are installed")
for p in required_packages:
if not is_installed(p):
missing_packages.append(p)
if missing_packages:
print("Your system does not have some of the required packages installed.")
print("Please install the following packages:")
print(" ".join(missing_packages))
sys.exit(1)
else:
print("All required packages are installed")
if find_executable("packer"):
print("Your system has Packer.")
else:
print("Your system does not have Packer.")
print("Please install Packer from https://www.packer.io/downloads.html.")
sys.exit(1)
sys.exit(0)

62
scripts/packer.json Normal file
View File

@ -0,0 +1,62 @@
{
"variables": {
"iso_url": "{{env `ISO_IMAGE`}}",
"iso_checksum": "{{env `ISO_MD5_SUM`}}",
"output_directory": "{{env `PACKER_BUILD_DIR`}}"
},
"builders":
[
{
"type": "qemu",
"iso_url": "{{user `iso_url`}}",
"iso_checksum": "{{user `iso_checksum`}}",
"iso_checksum_type": "md5",
"output_directory": "{{user `output_directory`}}/qemu",
"shutdown_command": "sudo halt -p",
"disk_size": 4096,
"format": "raw",
"headless": true,
"accelerator": "kvm",
"ssh_host_port_min": 2222,
"ssh_host_port_max": 2229,
"ssh_username": "vyos",
"ssh_password": "vyos",
"ssh_port": 22,
"ssh_wait_timeout": "30s",
"vm_name": "vyos_qemu_image.img",
"net_device": "virtio-net",
"disk_interface": "virtio",
"boot_wait": "5s",
"boot_command":
[
"<enter><wait10><wait10>",
"vyos<enter><wait>",
"vyos<enter><wait>",
"install image<enter><wait>",
"<enter><wait>",
"<enter><wait>",
"<enter><wait>",
"Yes<enter><wait>",
"<enter><wait10>",
"<enter><wait>",
"<enter><wait>",
"vyos<enter><wait>",
"vyos<enter><wait>",
"<enter><wait10>",
"reboot<enter><wait>",
"Yes<enter><wait10><wait10><wait10>",
"vyos<enter><wait>",
"vyos<enter><wait>",
"configure<enter><wait>",
"delete system console<enter><wait>",
"set interface ethernet eth0 address dhcp<enter><wait>",
"set service ssh<enter><wait>",
"commit<enter><wait>",
"save<enter><wait>",
"exit<enter><wait>",
"reboot<enter><wait>",
"Yes<enter><wait10><wait10><wait10><wait10><wait10>"
]
}
]
}

16
tools/run-qemu-image.sh Executable file
View File

@ -0,0 +1,16 @@
#!/bin/sh
VM_NAME='vyos_qemu'
VM_IMAGE='./packer_build/qemu/vyos_qemu_image.img'
MEMORY_SIZE='1024'
NCPUS=1
SSH_PORT=2222
qemu-system-x86_64 \
-name "${VM_NAME}" \
-m ${MEMORY_SIZE} \
-net nic,vlan=0,model=virtio \
-net user,vlan=0,hostfwd=tcp::"${SSH_PORT}"-:22,hostname="${VM_NAME}" \
-drive if=virtio,file=${VM_IMAGE} \
-machine accel=kvm \
-cpu host -smp ${NCPUS}