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 \
|
||||
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
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