create libvirtd container, this container could setup default pool and network
This commit is contained in:
commit
1681c69dbe
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
*.swp
|
||||||
|
*.code-workspace
|
21
Dockerfile
Normal file
21
Dockerfile
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
FROM fedora
|
||||||
|
|
||||||
|
ENV container docker
|
||||||
|
|
||||||
|
ENV LIBVIRTD_DEFAULT_POOL_PATH ""
|
||||||
|
ENV LIBVIRTD_DEFAULT_NETWORK ""
|
||||||
|
|
||||||
|
RUN yum install -y \
|
||||||
|
libvirt-daemon-kvm \
|
||||||
|
libvirt-daemon-qemu \
|
||||||
|
libvirt-client \
|
||||||
|
selinux-policy selinux-policy-targeted \
|
||||||
|
augeas
|
||||||
|
|
||||||
|
COPY augconf /augconf
|
||||||
|
COPY libvirtd.sh /libvirtd.sh
|
||||||
|
|
||||||
|
RUN augtool -f /augconf && \
|
||||||
|
chmod a+x /libvirtd.sh
|
||||||
|
|
||||||
|
CMD ["/libvirtd.sh"]
|
22
Makefile
Normal file
22
Makefile
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
.PHONY: imageLibvirtd test
|
||||||
|
|
||||||
|
REGISTRY_IP=docker.registry
|
||||||
|
|
||||||
|
## build
|
||||||
|
|
||||||
|
shell_build_image = docker build -t $(REGISTRY_IP):5000/$(1) .; \
|
||||||
|
docker push $(REGISTRY_IP):5000/$(1);
|
||||||
|
|
||||||
|
imageLibvirtd:
|
||||||
|
$(call shell_build_image,libvirtd)
|
||||||
|
|
||||||
|
test:
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
clean:
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
## management
|
||||||
|
|
||||||
|
status:
|
||||||
|
@curl -s $(REGISTRY_IP):5000/v2/_catalog | jq
|
22
augconf
Normal file
22
augconf
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# Enable unauthenticated tcp
|
||||||
|
set /files/etc/libvirt/libvirtd.conf/listen_tls 0
|
||||||
|
set /files/etc/libvirt/libvirtd.conf/listen_tcp 1
|
||||||
|
set /files/etc/libvirt/libvirtd.conf/auth_tcp none
|
||||||
|
|
||||||
|
# Listen on all interfaces for now
|
||||||
|
set /files/etc/libvirt/qemu.conf/stdio_handler logd
|
||||||
|
set /files/etc/libvirt/qemu.conf/spice_listen 0.0.0.0
|
||||||
|
set /files/etc/libvirt/qemu.conf/vnc_listen 0.0.0.0
|
||||||
|
set /files/etc/libvirt/qemu.conf/vnc_tls 0
|
||||||
|
set /files/etc/libvirt/qemu.conf/vnc_sasl 0
|
||||||
|
|
||||||
|
# Fixate user and group
|
||||||
|
set /files/etc/libvirt/qemu.conf/user qemu
|
||||||
|
set /files/etc/libvirt/qemu.conf/group qemu
|
||||||
|
set /files/etc/libvirt/qemu.conf/dynamic_ownership 1
|
||||||
|
|
||||||
|
# Have virtlogd log to stderr
|
||||||
|
set /files/etc/libvirt/virtlogd.conf/log_outputs 2:stderr
|
||||||
|
|
||||||
|
# Important to save
|
||||||
|
save
|
22
docker-compose.yml
Normal file
22
docker-compose.yml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
libvirtd:
|
||||||
|
image: docker.registry:5000/libvirtd:latest
|
||||||
|
container_name: "libvirtd"
|
||||||
|
ipc: host
|
||||||
|
network_mode: host
|
||||||
|
pid: host
|
||||||
|
user: root
|
||||||
|
privileged: true
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
environment:
|
||||||
|
LIBVIRTD_DEFAULT_NETWORK: "true"
|
||||||
|
LIBVIRTD_DEFAULT_POOL_PATH: "/var/lib/libvirt/images"
|
||||||
|
volumes:
|
||||||
|
- /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket
|
||||||
|
- libvirt-images:/var/lib/libvirt/images
|
||||||
|
- /:/host:Z
|
||||||
|
volumes:
|
||||||
|
libvirt-images:
|
115
libvirtd.sh
Normal file
115
libvirtd.sh
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
set -xe
|
||||||
|
|
||||||
|
# HACK
|
||||||
|
# Use hosts's /dev to see new devices and allow macvtap
|
||||||
|
mkdir /dev.container && {
|
||||||
|
mount --rbind /dev /dev.container
|
||||||
|
mount --rbind /host/dev /dev
|
||||||
|
|
||||||
|
# Keep some devices from the containerinal /dev
|
||||||
|
keep() { mount --rbind /dev.container/$1 /dev/$1 ; }
|
||||||
|
keep shm
|
||||||
|
keep mqueue
|
||||||
|
# Keep ptmx/pts for pty creation
|
||||||
|
keep pts
|
||||||
|
mount --rbind /dev/pts/ptmx /dev/ptmx
|
||||||
|
# Use the container /dev/kvm if available
|
||||||
|
[[ -e /dev.container/kvm ]] && keep kvm
|
||||||
|
}
|
||||||
|
|
||||||
|
mkdir /sys.net.container && {
|
||||||
|
mount --rbind /sys/class/net /sys.net.container
|
||||||
|
mount --rbind /host/sys/class/net /sys/class/net
|
||||||
|
}
|
||||||
|
|
||||||
|
mkdir /sys.devices.container && {
|
||||||
|
mount --rbind /sys/devices /sys.devices.container
|
||||||
|
mount --rbind /host/sys/devices /sys/devices
|
||||||
|
}
|
||||||
|
|
||||||
|
# load modules
|
||||||
|
modprobe ip6_tables -d /host
|
||||||
|
|
||||||
|
# If no cpuacct,cpu is present, symlink it to cpu,cpuacct
|
||||||
|
# Otherwise libvirt and our emulator get confused
|
||||||
|
if [ ! -d "/host/sys/fs/cgroup/cpuacct,cpu" ]; then
|
||||||
|
echo "Creating cpuacct,cpu cgroup symlink"
|
||||||
|
mount -o remount,rw /host/sys/fs/cgroup
|
||||||
|
cd /host/sys/fs/cgroup
|
||||||
|
ln -s cpu,cpuacct cpuacct,cpu
|
||||||
|
mount -o remount,ro /host/sys/fs/cgroup
|
||||||
|
fi
|
||||||
|
|
||||||
|
mount --rbind /host/sys/fs/cgroup /sys/fs/cgroup
|
||||||
|
|
||||||
|
mkdir -p /var/log/libvirt
|
||||||
|
touch /var/log/libvirt/qemu.log
|
||||||
|
chown qemu:qemu /var/log/libvirt/qemu.log
|
||||||
|
|
||||||
|
# We create the network on a file basis to not
|
||||||
|
# have to wait for libvirtd to come up
|
||||||
|
if [[ -n "$LIBVIRTD_DEFAULT_NETWORK" ]]; then
|
||||||
|
mkdir -p /etc/libvirt/qemu/networks/autostart
|
||||||
|
cat > /etc/libvirt/qemu/networks/default.xml <<EOX
|
||||||
|
<!-- Generated by libvirtd.sh container script -->
|
||||||
|
<network>
|
||||||
|
<name>default</name>
|
||||||
|
<!-- spanning tree on and 0 forward delay-->
|
||||||
|
<bridge name='virbr0' stp='on' delay='0'/>
|
||||||
|
<forward mode='nat'/>
|
||||||
|
<ip address='192.168.122.1' netmask='255.255.255.0'>
|
||||||
|
<dhcp>
|
||||||
|
<range start='192.168.122.2' end='192.168.122.254'/>
|
||||||
|
</dhcp>
|
||||||
|
</ip>
|
||||||
|
</network>
|
||||||
|
EOX
|
||||||
|
ln -s /etc/libvirt/qemu/networks/default.xml /etc/libvirt/qemu/networks/autostart/default.xml
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We create the storage pool on a file basis to not
|
||||||
|
# have to wait for libvirtd to come up
|
||||||
|
if [[ -n "$LIBVIRTD_DEFAULT_POOL_PATH" ]]; then
|
||||||
|
mkdir -p /etc/libvirt/storage/autostart
|
||||||
|
cat > /etc/libvirt/storage/default.xml <<EOX
|
||||||
|
<!-- Generated by libvirtd.sh container script -->
|
||||||
|
<pool type='dir'>
|
||||||
|
<name>default</name>
|
||||||
|
<target>
|
||||||
|
<path>$LIBVIRTD_DEFAULT_POOL_PATH</path>
|
||||||
|
</target>
|
||||||
|
</pool>
|
||||||
|
EOX
|
||||||
|
ln -s /etc/libvirt/storage/default.xml /etc/libvirt/storage/autostart/default.xml
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "cgroup_controllers = []" >> /etc/libvirt/qemu.conf
|
||||||
|
echo "namespaces = []" >> /etc/libvirt/qemu.conf
|
||||||
|
|
||||||
|
/usr/sbin/virtlogd &
|
||||||
|
|
||||||
|
|
||||||
|
#Define cleanup procedure
|
||||||
|
cleanup() {
|
||||||
|
echo "Container stopped, performing cleanup..."
|
||||||
|
|
||||||
|
if [[ -n "$LIBVIRTD_DEFAULT_NETWORK" ]]; then
|
||||||
|
echo "Container stopped, destroy default network ..."
|
||||||
|
virsh net-destroy default
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#Trap SIGTERM
|
||||||
|
trap 'cleanup' SIGTERM
|
||||||
|
|
||||||
|
#Execute command
|
||||||
|
# "${@}" &
|
||||||
|
/usr/sbin/libvirtd -ld
|
||||||
|
|
||||||
|
#Wait
|
||||||
|
wait $!
|
||||||
|
|
||||||
|
#Cleanup
|
||||||
|
cleanup
|
Loading…
Reference in New Issue
Block a user