Skip to content

Instantly share code, notes, and snippets.

@anfernee
Last active July 3, 2023 03:37
Show Gist options
  • Save anfernee/579bed630d6e5b5e0c81d7529e97b0c5 to your computer and use it in GitHub Desktop.
Save anfernee/579bed630d6e5b5e0c81d7529e97b0c5 to your computer and use it in GitHub Desktop.

Prerequisite

Create VM in google cloud:

gcloud compute instances create $INSTANCE --image-project=ubuntu-os-cloud --image-family ubuntu-2004-lts --min-cpu-platform="Intel Skylake" --machine-type="n1-standard-32" --zone=us-central1-c --network-interface='' --network-interface network=custom-network1,subnet=subnet1 

Install libvirt:

sudo apt update && sudo apt install libvirt-daemon-system libvirt-clients virtinst

After installing libvirt. New interfaces virtbr0 and virtbr0-nic will be created:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc mq state UP group default qlen 1000
    link/ether 42:01:0a:80:00:4a brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    inet 10.128.0.74/32 scope global dynamic ens4
       valid_lft 3482sec preferred_lft 3482sec
    inet6 2600:2d00:4004:3943:a80:4a::/128 scope global dynamic noprefixroute 
       valid_lft 3485sec preferred_lft 3485sec
    inet6 fe80::4001:aff:fe80:4a/64 scope link 
       valid_lft forever preferred_lft forever
3: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc mq state UP group default qlen 1000
    link/ether 42:01:0a:0a:00:38 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    inet 10.10.0.56/32 brd 10.10.0.56 scope global dynamic ens5
       valid_lft 3498sec preferred_lft 3498sec
    inet6 fe80::4001:aff:fe0a:38/64 scope link 
       valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:81:2d:68 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:81:2d:68 brd ff:ff:ff:ff:ff:ff

Steps

Define a macvtap network

# Define ETH1 to be the interface to bridge for macvtap.
ETH1=eth1
cat > macvtap-net.xml <<EOF
<network>
  <name>macvtap-net</name>
  <forward mode="bridge">
    <interface dev="$ETH1"/>
  </forward>
</network>
EOF

virsh net-define ./macvtap-net.xml
virsh net-autostart macvtap-net
virsh net-start macvtap-net

# list should show the new net
virsh net-list 
 Name          State    Autostart   Persistent
------------------------------------------------
 default       active   yes         yes
 macvtap-net   active   yes         yes

Install image

The following command will take quite a while to run and install the OS:

 virt-install --name=cirros --ram=256 --vcpus=1 --disk path=./cirros-0.3.2-x86_64-disk.img,format=qcow2,size=2 --import --network network:macvtap-net,model=virtio --vnc

interface and image

Then there will be a new interface:

6: macvtap0@ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc fq_codel state UP mode DEFAULT group default qlen 500
    link/ether 52:54:00:fd:d9:f1 brd ff:ff:ff:ff:ff:ff

The device file is /dev/tap6. lsof result shows that qemu opens the file.

lsof /dev/tap6
COMMAND    PID         USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
qemu-syst 8441 libvirt-qemu   33u   CHR  238,1      0t0  403 /dev/tap6
# systemd-cgls  # shows that it's managed under machine.slice. 
└─machine.slice 
  └─machine-qemu\x2d2\x2dcirros.scope …
    └─8441 /usr/bin/qemu-system-x86_64 -name guest=cirros,debug-threads=on -S -object secret,id=masterKey0,format=raw,file=/var/lib/libvirt/qemu/domain-2-cirros/master-key.aes -machine pc-i440fx-focal,accel=tcg,usb=off,dump-guest-core=off ->

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment