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:
parent
103efc2fc8
commit
dc722c52a3
69
Dockerfile
69
Dockerfile
|
@ -2,10 +2,75 @@ FROM debian:stretch-slim
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
ovmf \
|
ovmf \
|
||||||
qemu-system \
|
# qemu-system \
|
||||||
qemu-utils \
|
# qemu-utils \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& 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 22
|
||||||
EXPOSE 5900
|
EXPOSE 5900
|
||||||
|
|
||||||
|
|
20
qemu-signals.patch
Normal file
20
qemu-signals.patch
Normal 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();
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user