containers / containers/toolbox
VM with bridged networking cannot be ran properly when using qemu:///session from toolbox.
- Dominant language
- Go
- Stars
- 3.5k
- Forks
- 262
- Avg merge
- 3d 1h
- Merged PRs (30d)
- 1
Description
**Describe the bug**
A Fedora Silverblue user reported the following bug for vagrant-libvirt: https://bugzilla.redhat.com/show_bug.cgi?id=2248156
After investigating it becomes clearer that the problem is in using qemu:///session to create a VM that uses bridged networking inside toolbox (but less clear what/where should be adjusted to make it work). Using bridged networking by default, qemu-bridge-helper is invoked like this (command picked from error message):
```
$ /usr/libexec/qemu-bridge-helper --use-vnet --br=virbr0 --fd=27
```
Which could in theory work IMO.
But the fd is not mapped onto host in any way and remains in container only. Therefore something like the following to try to workaround it does not work:
```
$ flatpak-spawn --host /usr/libexec/qemu-bridge-helper --use-vnet --br=virbr0 --fd=27
failed to write fd to unix socket: Bad file descriptor
```
**Steps how to reproduce the behaviour**
1. Have Fedora Silverblue (Reproduced on F38 and F39)
On host:
2. `rpm-ostree install libvirt`
3. `systemctl enable libvirtd virtnetworkd` # more services might be needed but I think these should be enough
4. `systemctl reboot` # reboot is recommended by libvirt upstream in this case IIRC.
5 `toolbox create --release 39`
5. `toolbox enter`
Toolbox:
6. `sudo dnf install vagrant-libvirt`
7. vagrant init fedora/39-cloud-base
8. vagrant up
Note: it is not vagrant-libvirt specific. Same failure can be achieved by `sudo dnf install virt-manager` and using qemu:///session connection with VM's networking set to bridged networking configured to virbr0.
**Expected behaviour**
`vagrant up` succeeds
```
==> default: Machine booted and ready!
```
**Actual behaviour**
`vagrant up` fails with libvirt error
```
Call to virDomainCreateWithFlags failed: /usr/libexec/qemu-bridge-helper --use-vnet --br=virbr0 --fd=29: failed to communicate with bridge helper: stderr=failed to create tun device: Operation not permitted (Libvirt::Error): Transport endpoint is not connected
```
Messages were shortened to save from ruby/vagrant specific output.
**Screenshots**
N/A (can provide settings from virt-manager, if desired)
**Output of `toolbox --version` (v0.0.90+)**
`toolbox version 0.0.99.4`
**Toolbox package info (`rpm -q toolbox`)**
`toolbox-0.0.99.4-5.fc39.x86_64`
**Output of `podman version`**
```
podman version
Client: Podman Engine
Version: 4.7.2
API Version: 4.7.2
Go Version: go1.21.1
Built: Tue Oct 31 15:32:01 2023
OS/Arch: linux/amd64
```
**Podman package info (`rpm -q podman`)**
```
$ rpm -q podman
podman-4.7.2-1.fc39.x86_64
```
**Info about your OS**
Fedora Silverblue 39,
from `/etc/os-release`:
```
NAME="Fedora Linux"
VERSION="39.20231110.0 (Silverblue)"
```
**Additional context**
Freshly installed OS, updated before doing anything.
Using qemu:///session socket is problematic with bridged networking,
Userspace networking instead of bridged networking works.
qemu:///system works.
Contributor guide
Assessment
This issue has not been assessed yet.