diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8801293d..538ec34f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -96,3 +96,10 @@ jobs: uses: action-pack/bump@v2 with: token: ${{ secrets.REPO_ACCESS_TOKEN }} + - + name: Push to Gitlab mirror + uses: action-pack/gitlab-sync@v3 + with: + url: ${{ secrets.GITLAB_URL }} + token: ${{ secrets.GITLAB_TOKEN }} + username: ${{ secrets.GITLAB_USERNAME }} diff --git a/Dockerfile b/Dockerfile index 04e8f783..7a786c27 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,7 +20,7 @@ RUN apt-get update \ qemu-utils \ ca-certificates \ netcat-openbsd \ - qemu-system-arm \ + qemu-system-x86 \ && apt-get clean \ && novnc="1.4.0" \ && mkdir -p /usr/share/novnc \ diff --git a/docker-compose.yml b/docker-compose.yml index e04c1948..63b57ee6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,7 +7,7 @@ services: RAM_SIZE: "1G" CPU_CORES: "1" DISK_SIZE: "16G" - BOOT: "https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/aarch64/alpine-virt-3.19.1-aarch64.iso" + BOOT: "https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/x86_64/alpine-virt-3.19.1-x86_64.iso" devices: - /dev/kvm device_cgroup_rules: diff --git a/readme.md b/readme.md index 1ba5bec3..d6fab59f 100644 --- a/readme.md +++ b/readme.md @@ -1,6 +1,6 @@

QEMU
- +
@@ -11,7 +11,7 @@

-QEMU in a docker container for running ARM-based virtual machines. +QEMU in a docker container for running x86 and x64 virtual machines. It uses high-performance QEMU options (like KVM acceleration, kernel-mode networking, IO threading, etc.) to achieve near-native speed. @@ -30,9 +30,9 @@ version: "3" services: qemu: container_name: qemu - image: qemux/qemu-arm + image: qemux/qemu-docker environment: - BOOT: "https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/aarch64/alpine-virt-3.19.1-aarch64.iso" + BOOT: "https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/x86_64/alpine-minirootfs-3.19.1-x86_64.tar.gz" devices: - /dev/kvm cap_add: @@ -218,11 +218,11 @@ docker run -it --rm -e "BOOT=http://example.com/image.iso" -p 8006:8006 --device ARGUMENTS: "-device usb-tablet" ``` -[build_url]: https://github.com/qemus/qemu-arm/ -[hub_url]: https://hub.docker.com/r/qemux/qemu-arm/ -[tag_url]: https://hub.docker.com/r/qemux/qemu-arm/tags +[build_url]: https://github.com/qemus/qemu-docker/ +[hub_url]: https://hub.docker.com/r/qemux/qemu-docker/ +[tag_url]: https://hub.docker.com/r/qemux/qemu-docker/tags -[Build]: https://github.com/qemus/qemu-arm/actions/workflows/build.yml/badge.svg -[Size]: https://img.shields.io/docker/image-size/qemux/qemu-arm/latest?color=066da5&label=size -[Pulls]: https://img.shields.io/docker/pulls/qemux/qemu-arm.svg?style=flat&label=pulls&logo=docker -[Version]: https://img.shields.io/docker/v/qemux/qemu-arm/latest?arch=arm64&sort=semver&color=066da5 +[Build]: https://github.com/qemus/qemu-docker/actions/workflows/build.yml/badge.svg +[Size]: https://img.shields.io/docker/image-size/qemux/qemu-docker/latest?color=066da5&label=size +[Pulls]: https://img.shields.io/docker/pulls/qemux/qemu-docker.svg?style=flat&label=pulls&logo=docker +[Version]: https://img.shields.io/docker/v/qemux/qemu-docker/latest?arch=amd64&sort=semver&color=066da5 diff --git a/src/display.sh b/src/display.sh index a21fc8e8..62721031 100644 --- a/src/display.sh +++ b/src/display.sh @@ -22,4 +22,32 @@ case "${DISPLAY,,}" in ;; esac +if [[ "$GPU" != [Yy1]* ]] || [[ "$ARCH" != "amd64" ]]; then + return 0 +fi + +[[ "${VGA,,}" == "virtio" ]] && VGA="virtio-gl" +DISPLAY_OPTS="-display egl-headless,rendernode=/dev/dri/renderD128" +DISPLAY_OPTS="$DISPLAY_OPTS -vga $VGA" + +[[ "${DISPLAY,,}" == "vnc" ]] && DISPLAY_OPTS="$DISPLAY_OPTS -vnc :0" +[[ "${DISPLAY,,}" == "web" ]] && DISPLAY_OPTS="$DISPLAY_OPTS -vnc :0,websocket=5700" + +[ ! -d /dev/dri ] && mkdir -m 755 /dev/dri + +if [ ! -c /dev/dri/card0 ]; then + if mknod /dev/dri/card0 c 226 0; then + chmod 666 /dev/dri/card0 + fi +fi + +if [ ! -c /dev/dri/renderD128 ]; then + if mknod /dev/dri/renderD128 c 226 128; then + chmod 666 /dev/dri/renderD128 + fi +fi + +addPackage "xserver-xorg-video-intel" "Intel GPU drivers" +addPackage "qemu-system-modules-opengl" "OpenGL module" + return 0 diff --git a/src/entry.sh b/src/entry.sh index e438fdd6..eb3be8b2 100755 --- a/src/entry.sh +++ b/src/entry.sh @@ -2,7 +2,7 @@ set -Eeuo pipefail APP="QEMU" -SUPPORT="https://github.com/qemus/qemu-arm" +SUPPORT="https://github.com/qemus/qemu-docker" cd /run @@ -20,4 +20,4 @@ trap - ERR info "Booting image using $VERS..." [[ "$DEBUG" == [Yy1]* ]] && set -x -exec qemu-system-aarch64 ${ARGS:+ $ARGS} +exec qemu-system-x86_64 ${ARGS:+ $ARGS} diff --git a/src/proc.sh b/src/proc.sh index 93b2907d..648224d5 100644 --- a/src/proc.sh +++ b/src/proc.sh @@ -7,7 +7,7 @@ set -Eeuo pipefail : "${CPU_FLAGS:=""}" : "${CPU_MODEL:="host"}" -[[ "$ARCH" != "arm"* ]] && KVM="N" +[ "$ARCH" != "amd64" ] && KVM="N" if [[ "$KVM" != [Nn]* ]]; then @@ -18,6 +18,10 @@ if [[ "$KVM" != [Nn]* ]]; then else if ! sh -c 'echo -n > /dev/kvm' &> /dev/null; then KVM_ERR="(no write access)" + else + if ! grep -q -e vmx -e svm /proc/cpuinfo; then + KVM_ERR="(vmx/svm disabled)" + fi fi fi @@ -44,14 +48,14 @@ if [[ "$KVM" != [Nn]* ]]; then else KVM_OPTS="" - CPU_FEATURES="" + CPU_FEATURES="+ssse3,+sse4.1,+sse4.2" if [[ "${CPU_MODEL,,}" == "host"* ]]; then - if [[ "$ARCH" == "arm"* ]]; then + if [[ "$ARCH" == "amd64" ]]; then CPU_MODEL="max" else - CPU_MODEL="cortex-a76" + CPU_MODEL="qemu64" fi fi diff --git a/src/reset.sh b/src/reset.sh index 6d7cc459..0690a8f2 100644 --- a/src/reset.sh +++ b/src/reset.sh @@ -18,7 +18,7 @@ echo : "${BOOT:=""}" # URL of the ISO file : "${DEBUG:="N"}" # Disable debugging -: "${MACHINE:="virt"}" # Machine selection +: "${MACHINE:="q35"}" # Machine selection : "${ALLOCATE:=""}" # Preallocate diskspace : "${ARGUMENTS:=""}" # Extra QEMU parameters : "${CPU_CORES:="1"}" # Amount of CPU cores @@ -39,7 +39,7 @@ HOST=$(hostname -s) KERNEL=$(uname -r | cut -b 1) MINOR=$(uname -r | cut -d '.' -f2) ARCH=$(dpkg --print-architecture) -VERS=$(qemu-system-aarch64 --version | head -n 1 | cut -d '(' -f 1) +VERS=$(qemu-system-x86_64 --version | head -n 1 | cut -d '(' -f 1) # Check system