Build QEMU from source so that SIGHUP-for-ACPI-shutdown patch can be applied (and we can control our QEMU version closer)

This commit is contained in:
Tianon Gravi 2017-12-18 13:21:01 -08:00
parent 103efc2fc8
commit dc722c52a3
2 changed files with 87 additions and 2 deletions

View File

@ -2,10 +2,75 @@ FROM debian:stretch-slim
RUN apt-get update && apt-get install -y --no-install-recommends \
ovmf \
qemu-system \
qemu-utils \
# qemu-system \
# qemu-utils \
&& rm -rf /var/lib/apt/lists/*
COPY *.patch /qemu-patches/
# https://www.qemu.org/download/#source
ENV QEMU_VERSION 2.11.0
RUN set -eux; \
\
savedAptMark="$(apt-mark showmanual)"; \
\
apt-get update; \
apt-get install -y --no-install-recommends \
ca-certificates \
wget \
xz-utils \
\
patch \
\
gcc \
libc-dev \
libglib2.0-dev \
libpixman-1-dev \
make \
pkg-config \
python \
zlib1g-dev \
; \
rm -rf /var/lib/apt/lists/*; \
\
wget -O qemu.tar.xz "https://download.qemu.org/qemu-2.11.0.tar.xz"; \
# TODO verify signature
mkdir /usr/src/qemu; \
tar -xvf qemu.tar.xz -C /usr/src/qemu --strip-components=1; \
rm qemu.tar.xz; \
\
cd /usr/src/qemu; \
\
for p in /qemu-patches/*.patch; do \
patch --strip 1 --input "$p"; \
done; \
rm -rf /qemu-patches; \
\
./configure --help; \
./configure; \
make -j "$(nproc)"; \
make install; \
\
cd /; \
rm -rf /usr/src/qemu; \
\
libs="$( \
find /usr/local -type f -executable -exec ldd '{}' ';' \
| awk '/=>/ { print $(NF-1) }' \
| sort -u \
| xargs dpkg-query --search \
| cut -d: -f1 \
| sort -u \
)"; \
savedAptMark="$savedAptMark $libs"; \
\
apt-mark auto '.*' > /dev/null; \
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \
apt-get purge -y --auto-remove
STOPSIGNAL SIGHUP
EXPOSE 22
EXPOSE 5900

20
qemu-signals.patch Normal file
View File

@ -0,0 +1,20 @@
Origin: https://bugs.launchpad.net/qemu/+bug/1217339/comments/2
Origin: https://lists.nongnu.org/archive/html/qemu-devel/2017-03/msg03039.html
diff --git a/vl.c b/vl.c
index 1ad1c04637..9e07fe1dbb 100644
--- a/vl.c
+++ b/vl.c
@@ -1898,7 +1898,11 @@ void qemu_system_killed(int signal, pid_t pid)
/* Cannot call qemu_system_shutdown_request directly because
* we are in a signal handler.
*/
- shutdown_requested = SHUTDOWN_CAUSE_HOST_SIGNAL;
+ if (signal == SIGHUP) {
+ powerdown_requested = 1;
+ } else {
+ shutdown_requested = SHUTDOWN_CAUSE_HOST_SIGNAL;
+ }
qemu_notify_event();
}