KVM Kernel Virtualization Machine on Rocky Linux 9: Difference between revisions

mNo edit summary
mNo edit summary
Line 47: Line 47:
KEEP THIS IN MIND: In the QEMU / KVM world, here's how the networking thing functions:
KEEP THIS IN MIND: In the QEMU / KVM world, here's how the networking thing functions:


* After installing QEMU / KVM, it creates a Virtual Bridge Adapter intended to be used with NAT.  Leave this one as is if you want to use it.  But if you just want a simple bridge to connect to the rest of your network, keep reading.  This Virtual Bridge
*After installing QEMU / KVM, it creates a Virtual Bridge Adapter intended to be used with NAT.  Leave this one as is if you want to use it.  But if you just want a simple bridge to connect to the rest of your network, keep reading.  This Virtual Bridge


Here's the assumption (unlike all the other tutorials there);
Here's the assumption (unlike all the other tutorials there);


* There is an existing Ethernet Adapter on the Host Machine for QEMU / KVM that has been configured with an IP Address, Subnet Mask, IE, everything needed to communicate via a Network.
*There is an existing Ethernet Adapter on the Host Machine for QEMU / KVM that has been configured with an IP Address, Subnet Mask, IE, everything needed to communicate via a Network.
* During the installation for QEMU / KVM, a Virtual Bridge Adapter was automatically configured
*During the installation for QEMU / KVM, a Virtual Bridge Adapter was automatically configured


OK, here's what to do for creating your own Virtual Bridge Adapter to be used for 'bridging' between your existing network and the Virtual Machine;
OK, here's what to do for creating your own Virtual Bridge Adapter to be used for 'bridging' between your existing network and the Virtual Machine;


* Identify Ethernet Adapter and Virtual Bridge to be used, IE, get their names (eth0, enp1s0of0, virbr0, etc.) using these commands: brctl show AND / OR ip link show
*Identify Ethernet Adapter and Virtual Bridge to be used, IE, get their names (eth0, enp1s0of0, virbr0, etc.) using these commands: brctl show AND / OR ip link show
* Disable the ''existing'' Ethernet Adapter (through GUI or command line).  Don't delete it as most tutorials would have you do (if needed you can always enable it later instead of re-creating it from scratch)
*Disable the ''existing'' Ethernet Adapter (through GUI or command line).  Don't delete it as most tutorials would have you do (if needed you can always enable it later instead of re-creating it from scratch)
** nmcli connection modify WhatEverConnectionName connection.autoconnect "no"
**nmcli connection modify WhatEverConnectionName connection.autoconnect "no"
** ifconfig WhatEverConnectionName down OR ip link set dev WhatEverConnectionName down
**ifconfig WhatEverConnectionName down OR ip link set dev WhatEverConnectionName down
* nmcli connection add type bridge autoconnect yes con-name virbr1 ifname virbr1
*nmcli connection add type bridge autoconnect yes con-name virbr1 ifname virbr1
* Other example NMCLI commands;
*Other example NMCLI commands;
** nmcli connection show
**nmcli connection show
** Modify the /etc/NetworkManager/system-connections File?  Nope!
**Modify the /etc/NetworkManager/system-connections File?  Nope!
*** nmcli connection modify WhatEverConnectionName ipv4.address "WhatEverIPAddress/SubnetMaskNumber" (192.168.1.1/24)
***nmcli connection modify WhatEverConnectionName ipv4.address "WhatEverIPAddress/SubnetMaskNumber" (192.168.1.1/24)
*** nmcli connection up WhatEverConnectionName (essentially restarts the adapter and adopts new configuration information)
***nmcli connection up WhatEverConnectionName (essentially restarts the adapter and adopts new configuration information)
*** Does NOT work as one might think to 'reload' or restart a Network Adapter after configuration changes are made: nmcli connection reload
***Does NOT work as one might think to 'reload' or restart a Network Adapter after configuration changes are made: nmcli connection reload
*** nmcli connection show WhatEverConnectionName (ipv4.address = configured value AND IPV4.ADDRESS = "live / actual value")
***nmcli connection show WhatEverConnectionName (ipv4.address = configured value AND IPV4.ADDRESS = "live / actual value")
** systemctl restart NetworkManager
**systemctl restart NetworkManager
*  
*


'''Tricks, Tips, and Other Useful Information (all of which applies to Rocky Linux 9, and others based on Red Hat)'''
'''Tricks, Tips, and Other Useful Information (all of which applies to Rocky Linux 9, and others based on Red Hat)'''


*Rocky Linux 9 Network Configuration Files Directory: /etc/Network/Manager/system-connections (NOT /etc/sysconfig/network-scripts)
*Rocky Linux 9 Network Configuration Files Directory: /etc/Network/Manager/system-connections (NOT /etc/sysconfig/network-scripts)
*Network Configuration: nm-connection-editor
*Network Configuration for Rocky Linux: nm-connection-editor
*If a Bridged Network Adapter is configured for a Virtual Machine, it will show up in the Host Machine as: vnet1, etc.
*If a Bridged Network Adapter is configured for a Virtual Machine, it will show up in the Host Machine as: vnet1, etc.
*QEMU / KVM Bridges can be configure "within" QEMU / KVM and "externally" using commands like brctl, etc.
*QEMU / KVM Configuration Files: /etc/libvirt/qemu/
*QEMU / KVM Configuration Files: /etc/libvirt/qemu/
**Heed the warning notes on some of these files as they should not be edited directly.  Although a workaround is to edit the files directly, then restart the libvirtd.service (systemctl restart libvirtd.service)
**Heed the warning notes on some of these files as they should not be edited directly.  Although a workaround is to edit the files directly, then restart the libvirtd.service (systemctl restart libvirtd.service)
Line 103: Line 104:
Why is the UUID for the virbr0 Virtual Bridge Adapter displayed in the QEMU / KVM Host using the IP LINK SHOW command different than the UUID setting configured in the /etc/libvirt/qemu/networks/default.xml File, even though the MAC Address is the same in the Host (using IP LINK SHOW) and the default.xml File?
Why is the UUID for the virbr0 Virtual Bridge Adapter displayed in the QEMU / KVM Host using the IP LINK SHOW command different than the UUID setting configured in the /etc/libvirt/qemu/networks/default.xml File, even though the MAC Address is the same in the Host (using IP LINK SHOW) and the default.xml File?


ChatGPT's explanation is below;<syntaxhighlight lang="text">
ChatGPT's explanation is below (which is very good considering that Googling an equivalent answer produces nothing but hundreds of stupid forum results that ramble about how something isn't working).  There is also some additional information from https://wiki.libvirt.org/Networking.html.<syntaxhighlight lang="text">
The discrepancy between the UUID in the default.xml file and the one displayed by the ip link show command might be due to the fact that the UUID in the XML configuration file refers to the libvirt network object's UUID, not the actual bridge interface's UUID.
The discrepancy between the UUID in the default.xml file and the one displayed by the ip link show command might be due to the fact that the UUID in the XML configuration file refers to the libvirt network object's UUID, not the actual bridge interface's UUID.


Line 133: Line 134:
</syntaxhighlight>
</syntaxhighlight>


The above can be confirmed using the following commands


* virsh net-destroy default (maybe there should be an 'in-between' option like net-stop, but oh well) : "Stops and Destroys" the virbr0 (defined by default.xml, which is not deleted)
* virsh net-start default : Starts the virb0 (defined by the default.xml file)
*
'''Rough Notes'''
<network>
  <name>my-bridge-network</name>
  <forward mode='bridge'/>
  <bridge name='virbr_bridge'/>
</network>
sudo virsh net-define bridge-network.xml
sudo virsh net-start my-bridge-network
sudo virsh net-autostart my-bridge-network
<syntaxhighlight lang="text">
virsh [options]... [<command_string>]
virsh [options]... <command> [args...]
  options:
    -c | --connect=URI      hypervisor connection URI
    -d | --debug=NUM        debug level [0-4]
    -e | --escape <char>    set escape sequence for console
    -h | --help            this help
    -k | --keepalive-interval=NUM
                            keepalive interval in seconds, 0 for disable
    -K | --keepalive-count=NUM
                            number of possible missed keepalive messages
    -l | --log=FILE        output logging to file
    -q | --quiet            quiet mode
    -r | --readonly        connect readonly
    -t | --timing          print timing information
    -v                      short version
    -V                      long version
        --version[=TYPE]  version, TYPE is short or long (default short)
  commands (non interactive mode):
Domain Management (help keyword 'domain')
    attach-device                  attach device from an XML file
    attach-disk                    attach disk device
    attach-interface              attach network interface
    autostart                      autostart a domain
    blkdeviotune                  Set or query a block device I/O tuning parameters.
    blkiotune                      Get or set blkio parameters
    blockcommit                    Start a block commit operation.
    blockcopy                      Start a block copy operation.
    blockjob                      Manage active block operations
    blockpull                      Populate a disk from its backing image.
    blockresize                    Resize block device of domain.
    change-media                  Change media of CD or floppy drive
    console                        connect to the guest console
    cpu-stats                      show domain cpu statistics
    create                        create a domain from an XML file
    define                        define (but don't start) a domain from an XML file
    desc                          show or set domain's description or title
    destroy                        destroy (stop) a domain
    detach-device                  detach device from an XML file
    detach-device-alias            detach device from an alias
    detach-disk                    detach disk device
    detach-interface              detach network interface
    domdisplay                    domain display connection URI
    domfsfreeze                    Freeze domain's mounted filesystems.
    domfsthaw                      Thaw domain's mounted filesystems.
    domfsinfo                      Get information of domain's mounted filesystems.
    domfstrim                      Invoke fstrim on domain's mounted filesystems.
    domhostname                    print the domain's hostname
    domid                          convert a domain name or UUID to domain id
    domif-setlink                  set link state of a virtual interface
    domiftune                      get/set parameters of a virtual interface
    domjobabort                    abort active domain job
    domjobinfo                    domain job information
    domlaunchsecinfo              Get domain launch security info
    domsetlaunchsecstate          Set domain launch security state
    domname                        convert a domain id or UUID to domain name
    domrename                      rename a domain
    dompmsuspend                  suspend a domain gracefully using power management functions
    dompmwakeup                    wakeup a domain from pmsuspended state
    domuuid                        convert a domain name or id to domain UUID
    domxml-from-native            Convert native config to domain XML
    domxml-to-native              Convert domain XML to native config
    dump                          dump the core of a domain to a file for analysis
    dumpxml                        domain information in XML
    edit                          edit XML configuration for a domain
    get-user-sshkeys              list authorized SSH keys for given user (via agent)
    inject-nmi                    Inject NMI to the guest
    iothreadinfo                  view domain IOThreads
    iothreadpin                    control domain IOThread affinity
    iothreadadd                    add an IOThread to the guest domain
    iothreadset                    modifies an existing IOThread of the guest domain
    iothreaddel                    delete an IOThread from the guest domain
    send-key                      Send keycodes to the guest
    send-process-signal            Send signals to processes
    lxc-enter-namespace            LXC Guest Enter Namespace
    managedsave                    managed save of a domain state
    managedsave-remove            Remove managed save of a domain
    managedsave-edit              edit XML for a domain's managed save state file
    managedsave-dumpxml            Domain information of managed save state file in XML
    managedsave-define            redefine the XML for a domain's managed save state file
    memtune                        Get or set memory parameters
    perf                          Get or set perf event
    metadata                      show or set domain's custom XML metadata
    migrate                        migrate domain to another host
    migrate-setmaxdowntime        set maximum tolerable downtime
    migrate-getmaxdowntime        get maximum tolerable downtime
    migrate-compcache              get/set compression cache size
    migrate-setspeed              Set the maximum migration bandwidth
    migrate-getspeed              Get the maximum migration bandwidth
    migrate-postcopy              Switch running migration from pre-copy to post-copy
    numatune                      Get or set numa parameters
    qemu-attach                    QEMU Attach
    qemu-monitor-command          QEMU Monitor Command
    qemu-monitor-event            QEMU Monitor Events
    qemu-agent-command            QEMU Guest Agent Command
    guest-agent-timeout            Set the guest agent timeout
    reboot                        reboot a domain
    reset                          reset a domain
    restore                        restore a domain from a saved state in a file
    resume                        resume a domain
    save                          save a domain state to a file
    save-image-define              redefine the XML for a domain's saved state file
    save-image-dumpxml            saved state domain information in XML
    save-image-edit                edit XML for a domain's saved state file
    schedinfo                      show/set scheduler parameters
    screenshot                    take a screenshot of a current domain console and store it into a file
    set-lifecycle-action          change lifecycle actions
    set-user-sshkeys              manipulate authorized SSH keys file for given user (via agent)
    set-user-password              set the user password inside the domain
    setmaxmem                      change maximum memory limit
    setmem                        change memory allocation
    setvcpus                      change number of virtual CPUs
    shutdown                      gracefully shutdown a domain
    start                          start a (previously defined) inactive domain
    suspend                        suspend a domain
    ttyconsole                    tty console
    undefine                      undefine a domain
    update-device                  update device from an XML file
    update-memory-device          update memory device of a domain
    vcpucount                      domain vcpu counts
    vcpuinfo                      detailed domain vcpu information
    vcpupin                        control or query domain vcpu affinity
    emulatorpin                    control or query domain emulator affinity
    vncdisplay                    vnc display
    guestvcpus                    query or modify state of vcpu in the guest (via agent)
    setvcpu                        attach/detach vcpu or groups of threads
    domblkthreshold                set the threshold for block-threshold event for a given block device or it's backing chain element
    guestinfo                      query information about the guest (via agent)
    domdirtyrate-calc              Calculate a vm's memory dirty rate
    dom-fd-associate              associate a FD with a domain
Domain Monitoring (help keyword 'monitor')
    domblkerror                    Show errors on block devices
    domblkinfo                    domain block device size information
    domblklist                    list all domain blocks
    domblkstat                    get device block stats for a domain
    domcontrol                    domain control interface state
    domif-getlink                  get link state of a virtual interface
    domifaddr                      Get network interfaces' addresses for a running domain
    domiflist                      list all domain virtual interfaces
    domifstat                      get network interface stats for a domain
    dominfo                        domain information
    dommemstat                    get memory statistics for a domain
    domstate                      domain state
    domstats                      get statistics about one or multiple domains
    domtime                        domain time
    list                          list domains
Domain Events (help keyword 'events')
    event                          Domain Events
Host and Hypervisor (help keyword 'host')
    allocpages                    Manipulate pages pool size
    capabilities                  capabilities
    cpu-baseline                  compute baseline CPU
    cpu-compare                    compare host CPU with a CPU described by an XML file
    cpu-models                    CPU models
    domcapabilities                domain capabilities
    freecell                      NUMA free memory
    freepages                      NUMA free pages
    hostname                      print the hypervisor hostname
    hypervisor-cpu-baseline        compute baseline CPU usable by a specific hypervisor
    hypervisor-cpu-compare        compare a CPU with the CPU created by a hypervisor on the host
    maxvcpus                      connection vcpu maximum
    node-memory-tune              Get or set node memory parameters
    nodecpumap                    node cpu map
    nodecpustats                  Prints cpu stats of the node.
    nodeinfo                      node information
    nodememstats                  Prints memory stats of the node.
    nodesevinfo                    node SEV information
    nodesuspend                    suspend the host node for a given time duration
    sysinfo                        print the hypervisor sysinfo
    uri                            print the hypervisor canonical URI
    version                        show version
Checkpoint (help keyword 'checkpoint')
    checkpoint-create              Create a checkpoint from XML
    checkpoint-create-as          Create a checkpoint from a set of args
    checkpoint-delete              Delete a domain checkpoint
    checkpoint-dumpxml            Dump XML for a domain checkpoint
    checkpoint-edit                edit XML for a checkpoint
    checkpoint-info                checkpoint information
    checkpoint-list                List checkpoints for a domain
    checkpoint-parent              Get the name of the parent of a checkpoint
Interface (help keyword 'interface')
    iface-begin                    create a snapshot of current interfaces settings, which can be later committed (iface-commit) or restored (iface-rollback)
    iface-bridge                  create a bridge device and attach an existing network device to it
    iface-commit                  commit changes made since iface-begin and free restore point
    iface-define                  define an inactive persistent physical host interface or modify an existing persistent one from an XML file
    iface-destroy                  destroy a physical host interface (disable it / "if-down")
    iface-dumpxml                  interface information in XML
    iface-edit                    edit XML configuration for a physical host interface
    iface-list                    list physical host interfaces
    iface-mac                      convert an interface name to interface MAC address
    iface-name                    convert an interface MAC address to interface name
    iface-rollback                rollback to previous saved configuration created via iface-begin
    iface-start                    start a physical host interface (enable it / "if-up")
    iface-unbridge                undefine a bridge device after detaching its device(s)
    iface-undefine                undefine a physical host interface (remove it from configuration)
Network Filter (help keyword 'filter')
    nwfilter-define                define or update a network filter from an XML file
    nwfilter-dumpxml              network filter information in XML
    nwfilter-edit                  edit XML configuration for a network filter
    nwfilter-list                  list network filters
    nwfilter-undefine              undefine a network filter
    nwfilter-binding-create        create a network filter binding from an XML file
    nwfilter-binding-delete        delete a network filter binding
    nwfilter-binding-dumpxml      network filter information in XML
    nwfilter-binding-list          list network filter bindings
Networking (help keyword 'network')
    net-autostart                  autostart a network
    net-create                    create a network from an XML file
    net-define                    define an inactive persistent virtual network or modify an existing persistent one from an XML file
    net-destroy                    destroy (stop) a network
    net-dhcp-leases                print lease info for a given network
    net-dumpxml                    network information in XML
    net-edit                      edit XML configuration for a network
    net-event                      Network Events
    net-info                      network information
    net-list                      list networks
    net-name                      convert a network UUID to network name
    net-start                      start a (previously defined) inactive network
    net-undefine                  undefine a persistent network
    net-update                    update parts of an existing network's configuration
    net-uuid                      convert a network name to network UUID
    net-port-list                  list network ports
    net-port-create                create a network port from an XML file
    net-port-dumpxml              network port information in XML
    net-port-delete                delete the specified network port
Node Device (help keyword 'nodedev')
    nodedev-create                create a device defined by an XML file on the node
    nodedev-destroy                destroy (stop) a device on the node
    nodedev-detach                detach node device from its device driver
    nodedev-dumpxml                node device details in XML
    nodedev-list                  enumerate devices on this host
    nodedev-reattach              reattach node device to its device driver
    nodedev-reset                  reset node device
    nodedev-event                  Node Device Events
    nodedev-define                Define a device by an xml file on a node
    nodedev-undefine              Undefine an inactive node device
    nodedev-start                  Start an inactive node device
    nodedev-autostart              autostart a defined node device
    nodedev-info                  node device information
Secret (help keyword 'secret')
    secret-define                  define or modify a secret from an XML file
    secret-dumpxml                secret attributes in XML
    secret-event                  Secret Events
    secret-get-value              Output a secret value
    secret-list                    list secrets
    secret-set-value              set a secret value
    secret-undefine                undefine a secret
Snapshot (help keyword 'snapshot')
    snapshot-create                Create a snapshot from XML
    snapshot-create-as            Create a snapshot from a set of args
    snapshot-current              Get or set the current snapshot
    snapshot-delete                Delete a domain snapshot
    snapshot-dumpxml              Dump XML for a domain snapshot
    snapshot-edit                  edit XML for a snapshot
    snapshot-info                  snapshot information
    snapshot-list                  List snapshots for a domain
    snapshot-parent                Get the name of the parent of a snapshot
    snapshot-revert                Revert a domain to a snapshot
Backup (help keyword 'backup')
    backup-begin                  Start a disk backup of a live domain
    backup-dumpxml                Dump XML for an ongoing domain block backup job
Storage Pool (help keyword 'pool')
    find-storage-pool-sources-as  find potential storage pool sources
    find-storage-pool-sources      discover potential storage pool sources
    pool-autostart                autostart a pool
    pool-build                    build a pool
    pool-create-as                create a pool from a set of args
    pool-create                    create a pool from an XML file
    pool-define-as                define a pool from a set of args
    pool-define                    define an inactive persistent storage pool or modify an existing persistent one from an XML file
    pool-delete                    delete a pool
    pool-destroy                  destroy (stop) a pool
    pool-dumpxml                  pool information in XML
    pool-edit                      edit XML configuration for a storage pool
    pool-info                      storage pool information
    pool-list                      list pools
    pool-name                      convert a pool UUID to pool name
    pool-refresh                  refresh a pool
    pool-start                    start a (previously defined) inactive pool
    pool-undefine                  undefine an inactive pool
    pool-uuid                      convert a pool name to pool UUID
    pool-event                    Storage Pool Events
    pool-capabilities              storage pool capabilities
Storage Volume (help keyword 'volume')
    vol-clone                      clone a volume.
    vol-create-as                  create a volume from a set of args
    vol-create                    create a vol from an XML file
    vol-create-from                create a vol, using another volume as input
    vol-delete                    delete a vol
    vol-download                  download volume contents to a file
    vol-dumpxml                    vol information in XML
    vol-info                      storage vol information
    vol-key                        returns the volume key for a given volume name or path
    vol-list                      list vols
    vol-name                      returns the volume name for a given volume key or path
    vol-path                      returns the volume path for a given volume name or key
    vol-pool                      returns the storage pool for a given volume key or path
    vol-resize                    resize a vol
    vol-upload                    upload file contents to a volume
    vol-wipe                      wipe a vol
Virsh itself (help keyword 'virsh')
    cd                            change the current directory
    echo                          echo arguments. Used for internal testing.
    exit                          quit this interactive terminal
    help                          print help
    pwd                            print the current directory
    quit                          quit this interactive terminal
    connect                        (re)connect to hypervisor
  (specify help <group> for details about the commands in the group)
  (specify help <command> for details about the command)
</syntaxhighlight>