unix:virtualization:kvm:server
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| unix:virtualization:kvm:server [2020/10/17 00:27] – rodolico | unix:virtualization:kvm:server [2026/04/14 16:15] (current) – rodolico | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== | + | ====== libvirt |
| **This is a work in progress, 20201015** | **This is a work in progress, 20201015** | ||
| Line 17: | Line 17: | ||
| You should see either vmx or svm in the output. | You should see either vmx or svm in the output. | ||
| - | Now, install the basic packages needed, a couple of utilities, but not all the extra crud. | + | Now, install the basic packages needed, a couple of utilities, but not all the extra crud. // |
| <code bash> | <code bash> | ||
| - | apt install -y --no-install-recommends qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils libguestfs-tools genisoimage virtinst libosinfo-bin virt-top | + | apt install -y --no-install-recommends qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils libguestfs-tools genisoimage virtinst libosinfo-bin virt-top |
| reboot # brings libraries online | reboot # brings libraries online | ||
| </ | </ | ||
| Line 174: | Line 174: | ||
| I'm lazy, so I just created all three, then imported them all at one time. | I'm lazy, so I just created all three, then imported them all at one time. | ||
| - | < | + | < |
| - | < | + | #! /usr/bin/env bash |
| - | < | + | |
| - | <forward mode=" | + | |
| - | <bridge name=" | + | |
| - | </ | + | |
| - | </ | + | |
| - | < | + | # create the xml definitions. The br is prepended. |
| - | < | + | # Add/remove interfaces if needed |
| - | < | + | for interface in wan lan dmz |
| - | <forward mode=" | + | do |
| - | <bridge name="br_dmz"/> | + | cat << EOF > br_$interface.xml |
| - | </ | + | |
| - | </ | + | |
| + | | ||
| + | | ||
| + | | ||
| + | EOF | ||
| + | done | ||
| + | # uncomment this if you want to view your xml files but | ||
| + | # not process them | ||
| + | # exit | ||
| - | <code xml br_lan.xml> | ||
| - | < | ||
| - | < | ||
| - | <forward mode=" | ||
| - | <bridge name=" | ||
| - | </ | ||
| - | </ | ||
| - | And imported them all at once. | + | # find all xml files and do the net-define |
| + | for interface in `ls *.xml` | ||
| + | do | ||
| + | virsh net-define --file $interface | ||
| + | done | ||
| - | <code bash> | + | # since the bridge name is followed by xml, simply remove that |
| - | for interface in `ls *.xml` ; do virsh net-define --file $interface ; done | + | # and set to autostart and start it |
| - | for interface in `ls *.xml | cut -d' | + | for interface in `ls *.xml | cut -d' |
| + | do | ||
| + | virsh net-autostart $interface | ||
| + | virsh net-start $interface | ||
| + | done | ||
| + | # show me the list of network names | ||
| virsh net-list | virsh net-list | ||
| </ | </ | ||
| - | After the last command, you should see your three interfaces defined. That means you can now use them. | + | This script assumes your network names are of the form br_// |
| + | |||
| + | The last loop assumes there are no periods in the network name. Be warned. | ||
| ===== Using Storage ===== | ===== Using Storage ===== | ||
| Line 236: | Line 243: | ||
| <code bash> | <code bash> | ||
| - | virt-install | + | virt-install \ |
| - | | + | --hvm \ |
| | | ||
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| | | ||
| - | | + | |
| | | ||
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| </ | </ | ||
| + | |||
| + | Other useful options are | ||
| + | * --dry-run # don't really do it | ||
| + | * --print-xml # this will dump the XML file instead of running the command. This is very useful when installing virtuals that will need more than one CDROM drive as you can then edit the XML file to add it. **Note**: the resulting XML is doubled, ie has two copies of the XML in it and must be edited before use. | ||
| + | * --controller virtio-scsi # this is specific to KVM, but faster there | ||
| + | * osinfo-query os # this shows the OS's available for the --os-variant flag | ||
| + | |||
| + | |||
| + | most of the parameters are self evident, but I'll quickly talk about why I did some of them. | ||
| + | |||
| + | * --graphics vnc, | ||
| + | * --noautoconsole - When starting the virtual, virt-lib tries to bring up a GUI for virtviewer to take over, or run virsh console to bring up a serial console. Since I don't want either, I disable it here | ||
| + | * --os-variant freebsd11.1 - By defining this, virt-install can set up some defaults that work well with the known OS. | ||
| + | * --metadata uuid=d9510e01-e461-461f-9aa8-3cee223cb4a0, | ||
| + | * title, name and description will show up in some reports. | ||
| + | * uuid is good so the virtual does not get a new, randomly generated UUID every time it runs. Use the uuidgen command to get a randomly generated one for each new machine | ||
| + | |||
| + | ===== Performing Installation ===== | ||
| + | |||
| + | For most systems, I use VNC to do the install. Since I'm remote, I use the following ssh command: | ||
| + | <code bash>ssh -L localhost: | ||
| + | where | ||
| + | * 5910 is the local VNC port I'll attach to (ie, localhost: | ||
| + | * 5901 is the VNC port I told virt-install to use | ||
| + | * server is the name of the hypervisor | ||
| + | |||
| + | Then, when I run the virt-install command, I simply make a VNC connection to localhost: | ||
| + | |||
| + | ===== Setting other parameters ===== | ||
| + | |||
| + | If you want the domain to come up automatically when the hypervisor is turned on, the autostart flag needs to be set. Do this with <code bash> | ||
| + | |||
| + | ===== Links ===== | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
unix/virtualization/kvm/server.1602912471.txt.gz · Last modified: by rodolico
