Loading docker-compose.yml +1 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ services: BOOT: "http://www.example.com/image.iso" devices: - /dev/kvm - /dev/vhost-net cap_add: - NET_ADMIN ports: Loading readme.md +2 −1 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ <div align="center"> [![Build]][build_url] [![Version]][build_url] [![Version]][ghcr_url] [![Size]][ghcr_url] [build_url]: https://github.com/qemu-tools/qemu-docker/ Loading Loading @@ -38,6 +38,7 @@ services: BOOT: "http://www.example.com/image.iso" devices: - /dev/kvm - /dev/vhost-net cap_add: - NET_ADMIN ports: Loading run/disk.sh +4 −4 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ if [ -f "${DATA}" ]; then echo "INFO: Resizing data disk from $OLD_SIZE to $DATA_SIZE bytes.." if [ "$ALLOCATE" = "N" ]; then if [[ "${ALLOCATE}" == [Nn]* ]]; then # Resize file by changing its length truncate -s "${DATA_SIZE}" "${DATA}"; Loading @@ -45,7 +45,7 @@ if [ -f "${DATA}" ]; then echo "ERROR: Could not allocate a file for the data disk." && exit 85 fi if [ "$ALLOCATE" = "Z" ]; then if [[ "${ALLOCATE}" == [Zz]* ]]; then GB=$(( (REQ + 1073741823)/1073741824 )) Loading @@ -68,7 +68,7 @@ fi if [ ! -f "${DATA}" ]; then if [ "$ALLOCATE" = "N" ]; then if [[ "${ALLOCATE}" == [Nn]* ]]; then # Create an empty file truncate -s "${DATA_SIZE}" "${DATA}" Loading @@ -89,7 +89,7 @@ if [ ! -f "${DATA}" ]; then echo "ERROR: Could not allocate a file for the data disk." && exit 87 fi if [ "$ALLOCATE" = "Z" ]; then if [[ "${ALLOCATE}" == [Zz]* ]]; then echo "INFO: Preallocating ${DISK_SIZE} of diskspace, please wait..." dd if=/dev/urandom of="${DATA}" count="${DATA_SIZE}" bs=1M iflag=count_bytes status=none Loading run/install.sh +2 −2 Original line number Diff line number Diff line Loading @@ -13,7 +13,7 @@ else PROGRESS="--progress=dot:giga" fi [ "$DEBUG" = "Y" ] && set -x [[ "${DEBUG}" == [Yy1]* ]] && set -x { wget "$BOOT" -O "$TMP" -q --no-check-certificate --show-progress "$PROGRESS"; rc=$?; } || : (( rc != 0 )) && echo "ERROR: Failed to download ${BOOT}, reason: $rc" && exit 60 Loading @@ -31,6 +31,6 @@ FILE="$STORAGE/boot.img" mv -f "$TMP" "$FILE" { set +x; } 2>/dev/null [ "$DEBUG" = "Y" ] && echo [[ "${DEBUG}" == [Yy1]* ]] && echo return 0 run/network.sh +22 −19 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ configureDHCP() { NETWORK=$(ip -o route | grep "${VM_NET_DEV}" | grep -v default | awk '{print $1}') IP=$(ip address show dev "${VM_NET_DEV}" | grep inet | awk '/inet / { print $2 }' | cut -f1 -d/) [ "$DEBUG" = "Y" ] && set -x [[ "${DEBUG}" == [Yy1]* ]] && set -x { ip link add link "${VM_NET_DEV}" "${VM_NET_VLAN}" type macvlan mode bridge 2> /dev/null ; rc=$?; } || : if (( rc != 0 )); then Loading Loading @@ -80,12 +80,6 @@ configureDHCP() { echo "container: --device-cgroup-rule='c ${MAJOR}:* rwm' --device=/dev/vhost-net" && exit 21 fi # Create /dev/vhost-net if [ ! -c /dev/vhost-net ]; then mknod /dev/vhost-net c 10 238 chmod 660 /dev/vhost-net fi { exec 40>>/dev/vhost-net; rc=$?; } || : if (( rc != 0 )); then Loading @@ -99,7 +93,7 @@ configureDHCP() { configureNAT () { VM_NET_IP='20.20.20.21' [ "$DEBUG" = "Y" ] && set -x [[ "${DEBUG}" == [Yy1]* ]] && set -x #Create bridge with static IP for the VM guest Loading Loading @@ -129,7 +123,7 @@ configureNAT () { fi { set +x; } 2>/dev/null [ "$DEBUG" = "Y" ] && echo [[ "${DEBUG}" == [Yy1]* ]] && echo #Check port forwarding flag if [[ $(< /proc/sys/net/ipv4/ip_forward) -eq 0 ]]; then Loading @@ -149,9 +143,12 @@ configureNAT () { NET_OPTS="-netdev tap,ifname=${VM_NET_TAP},script=no,downscript=no,id=hostnet0" { exec 40>>/dev/vhost-net; rc=$?; } || : (( rc == 0 )) && NET_OPTS="$NET_OPTS,vhost=on,vhostfd=40" # Build DNS options from container /etc/resolv.conf if [ "$DEBUG" = "Y" ]; then if [[ "${DEBUG}" == [Yy1]* ]]; then echo "/etc/resolv.conf:" && echo && cat /etc/resolv.conf && echo fi Loading @@ -178,7 +175,7 @@ configureNAT () { DNSMASQ_OPTS=$(echo "$DNSMASQ_OPTS" | sed 's/\t/ /g' | tr -s ' ' | sed 's/^ *//') [ "$DEBUG" = "Y" ] && set -x [[ "${DEBUG}" == [Yy1]* ]] && set -x $DNSMASQ ${DNSMASQ_OPTS:+ $DNSMASQ_OPTS} Loading @@ -198,13 +195,19 @@ fi [ ! -c /dev/net/tun ] && echo "ERROR: TUN network interface not available..." && exit 85 # Create the necessary file structure for /dev/vhost-net if [ ! -c /dev/vhost-net ]; then mknod /dev/vhost-net c 10 238 chmod 660 /dev/vhost-net fi update-alternatives --set iptables /usr/sbin/iptables-legacy > /dev/null update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy > /dev/null VM_NET_MAC="${VM_NET_MAC//-/:}" GATEWAY=$(ip r | grep default | awk '{print $3}') if [ "$DEBUG" = "Y" ]; then if [[ "${DEBUG}" == [Yy1]* ]]; then IP=$(ip address show dev "${VM_NET_DEV}" | grep inet | awk '/inet / { print $2 }' | cut -f1 -d/) echo "INFO: Container IP is ${IP} with gateway ${GATEWAY}" && echo Loading @@ -213,12 +216,7 @@ if [ "$DEBUG" = "Y" ]; then fi if [ "$DHCP" != "Y" ]; then # Configuration for static IP configureNAT else if [[ "${DHCP}" == [Yy1]* ]]; then if [[ "$GATEWAY" == "172."* ]]; then echo -n "ERROR: You cannot enable DHCP while the container is " Loading @@ -228,10 +226,15 @@ else # Configuration for DHCP IP configureDHCP else # Configuration for static IP configureNAT fi NET_OPTS="${NET_OPTS} -device virtio-net-pci,romfile=,netdev=hostnet0,mac=${VM_NET_MAC},id=net0" [ "$DEBUG" = "Y" ] && echo && echo "Finished network setup.." && echo [[ "${DEBUG}" == [Yy1]* ]] && echo && echo "Finished network setup.." && echo return 0 Loading
docker-compose.yml +1 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ services: BOOT: "http://www.example.com/image.iso" devices: - /dev/kvm - /dev/vhost-net cap_add: - NET_ADMIN ports: Loading
readme.md +2 −1 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ <div align="center"> [![Build]][build_url] [![Version]][build_url] [![Version]][ghcr_url] [![Size]][ghcr_url] [build_url]: https://github.com/qemu-tools/qemu-docker/ Loading Loading @@ -38,6 +38,7 @@ services: BOOT: "http://www.example.com/image.iso" devices: - /dev/kvm - /dev/vhost-net cap_add: - NET_ADMIN ports: Loading
run/disk.sh +4 −4 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ if [ -f "${DATA}" ]; then echo "INFO: Resizing data disk from $OLD_SIZE to $DATA_SIZE bytes.." if [ "$ALLOCATE" = "N" ]; then if [[ "${ALLOCATE}" == [Nn]* ]]; then # Resize file by changing its length truncate -s "${DATA_SIZE}" "${DATA}"; Loading @@ -45,7 +45,7 @@ if [ -f "${DATA}" ]; then echo "ERROR: Could not allocate a file for the data disk." && exit 85 fi if [ "$ALLOCATE" = "Z" ]; then if [[ "${ALLOCATE}" == [Zz]* ]]; then GB=$(( (REQ + 1073741823)/1073741824 )) Loading @@ -68,7 +68,7 @@ fi if [ ! -f "${DATA}" ]; then if [ "$ALLOCATE" = "N" ]; then if [[ "${ALLOCATE}" == [Nn]* ]]; then # Create an empty file truncate -s "${DATA_SIZE}" "${DATA}" Loading @@ -89,7 +89,7 @@ if [ ! -f "${DATA}" ]; then echo "ERROR: Could not allocate a file for the data disk." && exit 87 fi if [ "$ALLOCATE" = "Z" ]; then if [[ "${ALLOCATE}" == [Zz]* ]]; then echo "INFO: Preallocating ${DISK_SIZE} of diskspace, please wait..." dd if=/dev/urandom of="${DATA}" count="${DATA_SIZE}" bs=1M iflag=count_bytes status=none Loading
run/install.sh +2 −2 Original line number Diff line number Diff line Loading @@ -13,7 +13,7 @@ else PROGRESS="--progress=dot:giga" fi [ "$DEBUG" = "Y" ] && set -x [[ "${DEBUG}" == [Yy1]* ]] && set -x { wget "$BOOT" -O "$TMP" -q --no-check-certificate --show-progress "$PROGRESS"; rc=$?; } || : (( rc != 0 )) && echo "ERROR: Failed to download ${BOOT}, reason: $rc" && exit 60 Loading @@ -31,6 +31,6 @@ FILE="$STORAGE/boot.img" mv -f "$TMP" "$FILE" { set +x; } 2>/dev/null [ "$DEBUG" = "Y" ] && echo [[ "${DEBUG}" == [Yy1]* ]] && echo return 0
run/network.sh +22 −19 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ configureDHCP() { NETWORK=$(ip -o route | grep "${VM_NET_DEV}" | grep -v default | awk '{print $1}') IP=$(ip address show dev "${VM_NET_DEV}" | grep inet | awk '/inet / { print $2 }' | cut -f1 -d/) [ "$DEBUG" = "Y" ] && set -x [[ "${DEBUG}" == [Yy1]* ]] && set -x { ip link add link "${VM_NET_DEV}" "${VM_NET_VLAN}" type macvlan mode bridge 2> /dev/null ; rc=$?; } || : if (( rc != 0 )); then Loading Loading @@ -80,12 +80,6 @@ configureDHCP() { echo "container: --device-cgroup-rule='c ${MAJOR}:* rwm' --device=/dev/vhost-net" && exit 21 fi # Create /dev/vhost-net if [ ! -c /dev/vhost-net ]; then mknod /dev/vhost-net c 10 238 chmod 660 /dev/vhost-net fi { exec 40>>/dev/vhost-net; rc=$?; } || : if (( rc != 0 )); then Loading @@ -99,7 +93,7 @@ configureDHCP() { configureNAT () { VM_NET_IP='20.20.20.21' [ "$DEBUG" = "Y" ] && set -x [[ "${DEBUG}" == [Yy1]* ]] && set -x #Create bridge with static IP for the VM guest Loading Loading @@ -129,7 +123,7 @@ configureNAT () { fi { set +x; } 2>/dev/null [ "$DEBUG" = "Y" ] && echo [[ "${DEBUG}" == [Yy1]* ]] && echo #Check port forwarding flag if [[ $(< /proc/sys/net/ipv4/ip_forward) -eq 0 ]]; then Loading @@ -149,9 +143,12 @@ configureNAT () { NET_OPTS="-netdev tap,ifname=${VM_NET_TAP},script=no,downscript=no,id=hostnet0" { exec 40>>/dev/vhost-net; rc=$?; } || : (( rc == 0 )) && NET_OPTS="$NET_OPTS,vhost=on,vhostfd=40" # Build DNS options from container /etc/resolv.conf if [ "$DEBUG" = "Y" ]; then if [[ "${DEBUG}" == [Yy1]* ]]; then echo "/etc/resolv.conf:" && echo && cat /etc/resolv.conf && echo fi Loading @@ -178,7 +175,7 @@ configureNAT () { DNSMASQ_OPTS=$(echo "$DNSMASQ_OPTS" | sed 's/\t/ /g' | tr -s ' ' | sed 's/^ *//') [ "$DEBUG" = "Y" ] && set -x [[ "${DEBUG}" == [Yy1]* ]] && set -x $DNSMASQ ${DNSMASQ_OPTS:+ $DNSMASQ_OPTS} Loading @@ -198,13 +195,19 @@ fi [ ! -c /dev/net/tun ] && echo "ERROR: TUN network interface not available..." && exit 85 # Create the necessary file structure for /dev/vhost-net if [ ! -c /dev/vhost-net ]; then mknod /dev/vhost-net c 10 238 chmod 660 /dev/vhost-net fi update-alternatives --set iptables /usr/sbin/iptables-legacy > /dev/null update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy > /dev/null VM_NET_MAC="${VM_NET_MAC//-/:}" GATEWAY=$(ip r | grep default | awk '{print $3}') if [ "$DEBUG" = "Y" ]; then if [[ "${DEBUG}" == [Yy1]* ]]; then IP=$(ip address show dev "${VM_NET_DEV}" | grep inet | awk '/inet / { print $2 }' | cut -f1 -d/) echo "INFO: Container IP is ${IP} with gateway ${GATEWAY}" && echo Loading @@ -213,12 +216,7 @@ if [ "$DEBUG" = "Y" ]; then fi if [ "$DHCP" != "Y" ]; then # Configuration for static IP configureNAT else if [[ "${DHCP}" == [Yy1]* ]]; then if [[ "$GATEWAY" == "172."* ]]; then echo -n "ERROR: You cannot enable DHCP while the container is " Loading @@ -228,10 +226,15 @@ else # Configuration for DHCP IP configureDHCP else # Configuration for static IP configureNAT fi NET_OPTS="${NET_OPTS} -device virtio-net-pci,romfile=,netdev=hostnet0,mac=${VM_NET_MAC},id=net0" [ "$DEBUG" = "Y" ] && echo && echo "Finished network setup.." && echo [[ "${DEBUG}" == [Yy1]* ]] && echo && echo "Finished network setup.." && echo return 0