scripts/libvirt: Add UEFI/GRUB VM setup and notes

This commit is contained in:
Dalton Hubble
2016-05-04 00:50:37 -07:00
parent 2860632d2c
commit 1d608fac59
4 changed files with 25 additions and 13 deletions

View File

@@ -1,7 +1,7 @@
# GRUB2 Netboot
GRUB netboot support is experimental.
Use GRUB to network boot UEFI hardware.
## Requirements
@@ -9,9 +9,11 @@ For local development, install the dependencies for libvirt with UEFI.
* [UEFI with QEMU](https://fedoraproject.org/wiki/Using_UEFI_with_QEMU)
Ensure that you've gone through the [bootcfg with rkt](getting-started-rkt.md) and [bootcfg](bootcfg.md) guides and understand the basics.
## Containers
Run `bootcfg` with rkt according to [Getting Started with rkt](../getting-started-with-rkt), but mount the [grub](../../examples/groups/grub) group example.
Run `bootcfg` with rkt, but mount the [grub](../examples/groups/grub) group example.
## Network
@@ -25,16 +27,16 @@ Run the `coreos.com/dnsmasq` ACI with rkt.
## Client VM
Create a VM with an e1000 or virtio network device.
Create UEFI VM nodes which have known hardware attributes.
sudo virt-install --name uefi-test --pxe --boot=uefi,network --disk pool=default,size=4 --network=bridge=metal0,model=e1000 --memory=1024 --vcpus=1 --os-type=linux --noautoconsole
sudo ./scripts/libvirt create-uefi
## Docker
If you use Docker, run `bootcfg` according to [Getting Started with Docker](../getting-started-with-docker), but mount the [grub](../../examples/groups/grub) group example. The start the `coreos/dnsmasq` Docker image, which bundles a `grub.efi`.
If you use Docker, run `bootcfg` according to [bootcfg with Docker](getting-started-docker.md), but mount the [grub](../examples/groups/grub) group example. Then start the `coreos/dnsmasq` Docker image, which bundles a `grub.efi`.
sudo docker run --rm --cap-add=NET_ADMIN quay.io/coreos/dnsmasq -d -q --dhcp-range=172.17.0.43,172.17.0.99 --enable-tftp --tftp-root=/var/lib/tftpboot --dhcp-match=set:efi-bc,option:client-arch,7 --dhcp-boot=tag:efi-bc,grub.efi --dhcp-userclass=set:grub,GRUB2 --dhcp-boot=tag:grub,"(http;bootcfg.foo:8080)/grub","172.17.0.2" --log-queries --log-dhcp --dhcp-option=3,172.17.0.1 --dhcp-userclass=set:ipxe,iPXE --dhcp-boot=tag:pxe,undionly.kpxe --dhcp-boot=tag:ipxe,http://bootcfg.foo:8080/boot.ipxe --address=/bootcfg.foo/172.17.0.2
Create a VM to verify the machine netboots.
Create a VM to verify the machine network boots.
sudo virt-install --name uefi-test --pxe --boot=uefi,network --disk pool=default,size=4 --network=bridge=docker0,model=e1000 --memory=1024 --vcpus=1 --os-type=linux --noautoconsole

View File

@@ -44,6 +44,6 @@ The [examples](examples) show how to network boot and provision higher-order Cor
* Multi-node etcd cluster
* Network boot or Install to Disk
* Multi-stage CoreOS installs
* [GRUB Netboot](Documentation/dev/grub.md) CoreOS
* [GRUB Netboot](Documentation/grub.md) CoreOS
* iPXE Boot CoreOS with a root fs
* iPXE Boot CoreOS

View File

@@ -27,12 +27,13 @@ Create libvirt VM nodes which are configured to boot from the network. The `scri
USAGE: libvirt <command>
Commands:
create-docker create libvirt nodes on the docker0 bridge
create-rkt create libvirt nodes on a rkt CNI metal0 bridge
start start the libvirt nodes
reboot reboot the libvirt nodes
shutdown shutdown the libvirt nodes
poweroff poweroff the libvirt nodes
destroy destroy the libvirt nodes
create-rkt create libvirt nodes on a rkt CNI metal0 bridge
create-uefi create UEFI libvirt nodes on the rkt CNI metal0 bridge
start start the libvirt nodes
reboot reboot the libvirt nodes
shutdown shutdown the libvirt nodes
poweroff poweroff the libvirt nodes
destroy destroy the libvirt nodes
## k8s-certgen

View File

@@ -10,6 +10,7 @@ function main {
case "$1" in
"create-docker") create_docker;;
"create-rkt") create_rkt;;
"create-uefi") create_uefi;;
"start") start;;
"reboot") reboot;;
"shutdown") shutdown;;
@@ -27,6 +28,7 @@ function usage {
echo "Commands:"
echo -e "\tcreate-docker\tcreate libvirt nodes on the docker0 bridge"
echo -e "\tcreate-rkt\tcreate libvirt nodes on a rkt CNI metal0 bridge"
echo -e "\tcreate-uefi\tcreate UEFI libvirt nodes on the rkt CNI metal0 bridge"
echo -e "\tstart\t\tstart the libvirt nodes"
echo -e "\treboot\t\treboot the libvirt nodes"
echo -e "\tshutdown\tshutdown the libvirt nodes"
@@ -48,6 +50,13 @@ function create_rkt {
virt-install --name node4 -u 4ed46e8e-db69-471e-b874-0990dd65649d --pxe --disk pool=default,size=6 --boot=hd,network --network=bridge:metal0 --memory=1024 --vcpus=1 --os-type=linux --noautoconsole
}
function create_uefi {
virt-install --name node1 -u 16e7d8a7-bfa9-428b-9117-363341bb330b --pxe --disk pool=default,size=6 --boot=uefi,network --network=bridge=metal0,model=e1000 --memory=1024 --vcpus=1 --os-type=linux --noautoconsole
virt-install --name node2 -u 264cd073-ca62-44b3-98c0-50aad5b5f819 --pxe --disk pool=default,size=6 --boot=uefi,network --network=bridge=metal0,model=e1000 --memory=1024 --vcpus=1 --os-type=linux --noautoconsole
virt-install --name node3 -u 39d2e747-2648-4d68-ae92-bbc70b245055 --pxe --disk pool=default,size=6 --boot=uefi,network --network=bridge=metal0,model=e1000 --memory=1024 --vcpus=1 --os-type=linux --noautoconsole
virt-install --name node4 -u 4ed46e8e-db69-471e-b874-0990dd65649d --pxe --disk pool=default,size=6 --boot=uefi,network --network=bridge=metal0,model=e1000 --memory=1024 --vcpus=1 --os-type=linux --noautoconsole
}
nodes=(node1 node2 node3 node4)
function start {