3f05e11467
Work around for issue #1715 Link qemu static binaries to jemalloc. This malloc implementation does not appear to be susceptible to the deadlock after fork issue.
405 lines
10 KiB
Text
405 lines
10 KiB
Text
# Forked from Alpine, so we can build our qemu fork against jemalloc to
|
|
# work around a deadlock while compiling mesa (pmbootstrap#1715)
|
|
pkgname=qemu
|
|
pkgver=3.1.0
|
|
pkgrel=3
|
|
pkgdesc="QEMU is a generic machine emulator and virtualizer"
|
|
url="http://qemu.org/"
|
|
arch="x86 x86_64"
|
|
license="GPL-2.0 LGPL-2"
|
|
makedepends="
|
|
alsa-lib-dev
|
|
bison
|
|
curl-dev
|
|
flex
|
|
glib-dev
|
|
glib-static
|
|
gnutls-dev
|
|
gtk+3.0-dev
|
|
jemalloc-dev
|
|
libaio-dev
|
|
libcap-dev
|
|
libcap-ng-dev
|
|
libjpeg-turbo-dev
|
|
libnfs-dev
|
|
libpng-dev
|
|
libseccomp-dev
|
|
libssh2-dev
|
|
libusb-dev
|
|
libxml2-dev
|
|
linux-headers
|
|
lzo-dev
|
|
ncurses-dev
|
|
paxmark
|
|
python3
|
|
sdl2-dev
|
|
snappy-dev
|
|
spice-dev
|
|
texinfo
|
|
usbredir-dev
|
|
util-linux-dev
|
|
vde2-dev
|
|
virglrenderer-dev
|
|
vte3-dev
|
|
xfsprogs-dev
|
|
zlib-dev
|
|
"
|
|
pkggroups="qemu"
|
|
install="$pkgname.pre-install $pkgname.post-install"
|
|
# suid needed for qemu-bridge-helper
|
|
# strip fails on .img files
|
|
# some tests does not run on our builders
|
|
options="suid !strip !check"
|
|
subpackages="$pkgname-doc $pkgname-lang $pkgname-guest-agent:guest
|
|
ivshmem-tools:_ivshmem"
|
|
|
|
_subsystems="
|
|
aarch64
|
|
aarch64_be
|
|
alpha
|
|
arm
|
|
armeb
|
|
cris
|
|
hppa
|
|
i386
|
|
m68k
|
|
microblaze
|
|
microblazeel
|
|
mips
|
|
mips64
|
|
mips64el
|
|
mipsel
|
|
mipsn32
|
|
mipsn32el
|
|
nios2
|
|
or1k
|
|
ppc
|
|
ppc64
|
|
ppc64abi32
|
|
ppc64le
|
|
riscv32
|
|
riscv64
|
|
s390x
|
|
sh4
|
|
sh4eb
|
|
sparc
|
|
sparc32plus
|
|
sparc64
|
|
system-aarch64
|
|
system-alpha
|
|
system-arm
|
|
system-cris
|
|
system-hppa
|
|
system-i386
|
|
system-lm32
|
|
system-m68k
|
|
system-microblaze
|
|
system-microblazeel
|
|
system-mips
|
|
system-mips64
|
|
system-mips64el
|
|
system-mipsel
|
|
system-moxie
|
|
system-nios2
|
|
system-or1k
|
|
system-ppc
|
|
system-ppc64
|
|
system-riscv32
|
|
system-riscv64
|
|
system-s390x
|
|
system-sh4
|
|
system-sh4eb
|
|
system-sparc
|
|
system-sparc64
|
|
system-tricore
|
|
system-unicore32
|
|
system-x86_64
|
|
system-xtensa
|
|
system-xtensaeb
|
|
tilegx
|
|
x86_64
|
|
xtensa
|
|
xtensaeb
|
|
"
|
|
for _sub in $_subsystems; do
|
|
subpackages="$subpackages $pkgname-$_sub:_subsys"
|
|
done
|
|
|
|
_modules="
|
|
audio-alsa
|
|
audio-oss
|
|
audio-sdl
|
|
block-curl
|
|
block-dmg-bz2
|
|
block-nfs
|
|
block-ssh
|
|
ui-curses
|
|
ui-gtk
|
|
ui-sdl
|
|
"
|
|
for _mod in $_modules; do
|
|
subpackages="$subpackages $pkgname-$_mod:_module"
|
|
done
|
|
subpackages="$subpackages qemu-modules:_all_modules"
|
|
|
|
subpackages="$subpackages $pkgname-img" # -img must be declared the last
|
|
|
|
source="http://wiki.qemu-project.org/download/$pkgname-$pkgver.tar.xz
|
|
0001-elfload-load-PIE-executables-to-right-address.patch
|
|
0006-linux-user-signal.c-define-__SIGRTMIN-MAX-for-non-GN.patch
|
|
0001-linux-user-fix-build-with-musl-on-aarch64.patch
|
|
musl-F_SHLCK-and-F_EXLCK.patch
|
|
fix-sigevent-and-sigval_t.patch
|
|
xattr_size_max.patch
|
|
ncurses.patch
|
|
ignore-signals-33-and-64-to-allow-golang-emulation.patch
|
|
0001-linux-user-fix-build-with-musl-on-ppc64le.patch
|
|
fix-sockios-header.patch
|
|
test-crypto-ivgen-skip-essiv.patch
|
|
guest-agent-shutdown.patch
|
|
atomic-bswap.patch
|
|
|
|
$pkgname-guest-agent.confd
|
|
$pkgname-guest-agent.initd
|
|
80-kvm.rules
|
|
bridge.conf
|
|
"
|
|
builddir="$srcdir/$pkgname-$pkgver"
|
|
|
|
# secfixes:
|
|
# 2.8.1-r1:
|
|
# - CVE-2016-7994
|
|
# - CVE-2016-7995
|
|
# - CVE-2016-8576
|
|
# - CVE-2016-8577
|
|
# - CVE-2016-8578
|
|
# - CVE-2016-8668
|
|
# - CVE-2016-8909
|
|
# - CVE-2016-8910
|
|
# - CVE-2016-9101
|
|
# - CVE-2016-9102
|
|
# - CVE-2016-9103
|
|
# - CVE-2016-9104
|
|
# - CVE-2016-9105
|
|
# - CVE-2016-9106
|
|
# - CVE-2017-2615
|
|
# - CVE-2017-2620
|
|
# - CVE-2017-5525
|
|
# - CVE-2017-5552
|
|
# - CVE-2017-5578
|
|
# - CVE-2017-5579
|
|
# - CVE-2017-5667
|
|
# - CVE-2017-5856
|
|
# - CVE-2017-5857
|
|
# - CVE-2017-5898
|
|
# - CVE-2017-5931
|
|
|
|
prepare() {
|
|
default_prepare # apply patches
|
|
|
|
sed -i 's/^VL_LDFLAGS=$/VL_LDFLAGS=-Wl,-z,execheap/' \
|
|
Makefile.target
|
|
}
|
|
|
|
_compile_common() {
|
|
CFLAGS="${CFLAGS/-Os/-O2}" "$builddir"/configure \
|
|
--prefix=/usr \
|
|
--localstatedir=/var \
|
|
--sysconfdir=/etc \
|
|
--libexecdir=/usr/lib/qemu \
|
|
--python=/usr/bin/python3 \
|
|
--disable-glusterfs \
|
|
--disable-debug-info \
|
|
--disable-bsd-user \
|
|
--disable-werror \
|
|
--disable-xen \
|
|
--enable-kvm \
|
|
--enable-seccomp \
|
|
--cc="${CC:-gcc}" \
|
|
"$@"
|
|
make ARFLAGS="rc"
|
|
}
|
|
|
|
build() {
|
|
mkdir -p "$builddir"/build \
|
|
"$builddir"/build-static
|
|
|
|
cd "$builddir"/build-static
|
|
_compile_common \
|
|
--enable-linux-user \
|
|
--disable-system \
|
|
--static \
|
|
--disable-sdl \
|
|
--disable-gtk \
|
|
--disable-spice \
|
|
--disable-tools \
|
|
--disable-guest-agent \
|
|
--disable-guest-agent-msi \
|
|
--disable-curses \
|
|
--disable-curl \
|
|
--disable-gnutls \
|
|
--disable-gcrypt \
|
|
--disable-nettle \
|
|
--disable-cap-ng \
|
|
--disable-brlapi \
|
|
--disable-mpath \
|
|
--disable-libnfs \
|
|
--disable-capstone \
|
|
--enable-jemalloc
|
|
|
|
cd "$builddir"/build
|
|
_compile_common \
|
|
--disable-linux-user \
|
|
--audio-drv-list=oss,alsa,sdl \
|
|
--enable-cap-ng \
|
|
--enable-curl \
|
|
--enable-curses \
|
|
--enable-docs \
|
|
--enable-gtk \
|
|
--enable-guest-agent \
|
|
--enable-libnfs \
|
|
--enable-libssh2 \
|
|
--enable-linux-aio \
|
|
--enable-lzo \
|
|
--enable-modules \
|
|
--enable-pie \
|
|
--enable-sdl \
|
|
--enable-snappy \
|
|
--enable-spice \
|
|
--enable-tpm \
|
|
--enable-usb-redir \
|
|
--enable-vde \
|
|
--enable-vhost-net \
|
|
--enable-virglrenderer \
|
|
--enable-virtfs \
|
|
--enable-vnc \
|
|
--enable-vnc-jpeg \
|
|
--enable-vnc-png \
|
|
--with-sdlabi=2.0 \
|
|
--tls-priority=@QEMU,SYSTEM
|
|
}
|
|
|
|
check() {
|
|
cd "$builddir"/build
|
|
|
|
# XXX: ESSIV crypto tests are disabled, see test-crypto-ivgen-skip-essiv.patch.
|
|
make check V=1
|
|
}
|
|
|
|
package() {
|
|
cd "$builddir"/build-static
|
|
make DESTDIR="$pkgdir" install
|
|
|
|
cd "$builddir"/build
|
|
make DESTDIR="$pkgdir" install
|
|
paxmark -m "$pkgdir"/usr/bin/qemu-system-*
|
|
|
|
install -Dm640 -g qemu "$srcdir"/bridge.conf \
|
|
"$pkgdir"/etc/qemu/bridge.conf
|
|
|
|
install -Dm644 "$srcdir"/80-kvm.rules \
|
|
"$pkgdir"/lib/udev/rules.d/80-kvm.rules
|
|
|
|
# qemu-bridge-helper needs suid to create tunX devices;
|
|
# allow only users in the qemu group to run it.
|
|
chmod 04710 "$pkgdir"/usr/lib/qemu/qemu-bridge-helper
|
|
chgrp qemu "$pkgdir"/usr/lib/qemu/qemu-bridge-helper
|
|
|
|
# Do not install HTML docs.
|
|
rm "$pkgdir"/usr/share/doc/qemu/*.html
|
|
}
|
|
|
|
_subsys() {
|
|
local name=${1:-"${subpkgname#$pkgname-}"}
|
|
pkgdesc="Qemu ${name/-/ } emulator"
|
|
options=""
|
|
depends=""
|
|
case "$name" in
|
|
system*) depends="qemu";;
|
|
esac
|
|
|
|
mkdir -p "$subpkgdir"/usr/bin
|
|
mv "$pkgdir"/usr/bin/qemu-$name "$subpkgdir"/usr/bin/
|
|
}
|
|
|
|
_ivshmem() {
|
|
pkgdesc="Client and server for QEMU ivshmem device"
|
|
mkdir -p "$subpkgdir"/usr/bin
|
|
mv "$pkgdir"/usr/bin/ivshmem-* "$subpkgdir"/usr/bin/
|
|
}
|
|
|
|
img() {
|
|
pkgdesc="QEMU command line tool for manipulating disk images"
|
|
depends=""
|
|
options=""
|
|
|
|
mkdir -p "$subpkgdir"/usr/bin
|
|
mv "$pkgdir"/usr/bin/qemu-img \
|
|
"$pkgdir"/usr/bin/qemu-io \
|
|
"$pkgdir"/usr/bin/qemu-nbd \
|
|
"$subpkgdir"/usr/bin/
|
|
|
|
# We exploit the fact that -img subpackage are created last
|
|
# and check that we done have new systems that belongs in
|
|
# subpackage.
|
|
local path= retval=0
|
|
for path in "$pkgdir"/usr/bin/qemu-system-* "$pkgdir"/usr/lib/qemu/*.so; do
|
|
if [ -r "$path" ]; then
|
|
error "Please create a subpackage for ${path##*/}"
|
|
retval=1
|
|
fi
|
|
done
|
|
return $retval
|
|
}
|
|
|
|
guest() {
|
|
pkgdesc="QEMU guest agent"
|
|
depends=""
|
|
options=""
|
|
|
|
mkdir -p "$subpkgdir"/usr/bin
|
|
mv "$pkgdir"/usr/bin/qemu-ga "$subpkgdir"/usr/bin/
|
|
|
|
install -Dm755 "$srcdir"/$pkgname-guest-agent.initd \
|
|
"$subpkgdir"/etc/init.d/$pkgname-guest-agent
|
|
install -Dm644 "$srcdir"/$pkgname-guest-agent.confd \
|
|
"$subpkgdir"/etc/conf.d/$pkgname-guest-agent
|
|
}
|
|
|
|
_module() {
|
|
local _mod=${subpkgname#qemu-}
|
|
local _class=${_mod%%-*}
|
|
local _m=${_mod#*-}
|
|
pkgdesc="Qemu $_m $_class module"
|
|
mkdir -p "$subpkgdir"/usr/lib/qemu
|
|
mv "$pkgdir"/usr/lib/qemu/$_mod.so \
|
|
"$subpkgdir"/usr/lib/qemu/
|
|
}
|
|
|
|
_all_modules() {
|
|
pkgdesc="Meta package for all qemu modules"
|
|
local _i
|
|
for _i in $_modules; do
|
|
depends="$depends qemu-$_i"
|
|
done
|
|
mkdir -p "$subpkgdir"
|
|
}
|
|
|
|
sha512sums="7e8dae823937cfac2f0c60406bd3bdcb89df40313dab2a4bed327d5198f7fcc68ac8b31e44692caa09299cc71256ee0b8c17e4f49f78ada8043d424f5daf82fe qemu-3.1.0.tar.xz
|
|
405008589cad1c8b609eca004d520bf944366e8525f85a19fc6e283c95b84b6c2429822ba064675823ab69f1406a57377266a65021623d1cd581e7db000134fd 0001-elfload-load-PIE-executables-to-right-address.patch
|
|
f52d9b3ccaa0e7613496ef3a6b820f4870d67fb89ad22c7aa3ffd6cb7c79c07f6206f060fe4e9b5b9b356b3dfee1fe2e19288497e7b8865411021eda31ca9f25 0006-linux-user-signal.c-define-__SIGRTMIN-MAX-for-non-GN.patch
|
|
1ac043312864309e19f839a699ab2485bca51bbf3d5fdb39f1a87b87e3cbdd8cbda1a56e6b5c9ffccd65a8ac2f600da9ceb8713f4dbba26f245bc52bcd8a1c56 0001-linux-user-fix-build-with-musl-on-aarch64.patch
|
|
224f5b44da749921e8a821359478c5238d8b6e24a9c0b4c5738c34e82f3062ec4639d495b8b5883d304af4a0d567e38aa6623aac1aa3a7164a5757c036528ac0 musl-F_SHLCK-and-F_EXLCK.patch
|
|
5da8114b9bd2e62f0f1f0f73f393fdbd738c5dea827ea60cedffd6f6edd0f5a97489c7148d37a8ec5a148d4e65d75cbefe9353714ee6b6f51a600200133fc914 fix-sigevent-and-sigval_t.patch
|
|
4b1e26ba4d53f9f762cbd5cea8ef6f8062d827ae3ae07bc36c5b0c0be4e94fc1856ad2477e8e791b074b8a25d51ed6d0ddd75e605e54600e5dd0799143793ce4 xattr_size_max.patch
|
|
b6ed02aaf95a9bb30a5f107d35371207967edca058f3ca11348b0b629ea7a9c4baa618db68a3df72199eea6d86d14ced74a5a229d17604cc3f0adedcfeae7a73 ncurses.patch
|
|
fd178f2913639a0c33199b3880cb17536961f2b3ff171c12b27f4be6bca032d6b88fd16302d09c692bb34883346babef5c44407a6804b20a39a465bb2bc85136 ignore-signals-33-and-64-to-allow-golang-emulation.patch
|
|
d8933df9484158c2b4888254e62117d78f8ed7c18527b249419f39c2b2ab1afa148010884b40661f8965f1ef3105580fceffdfddbb2c9221dc1c62066722ba65 0001-linux-user-fix-build-with-musl-on-ppc64le.patch
|
|
39590476a4ebd7c1e79a4f0451b24c75b1817a2a83abaa1f71bb60b225d772152f0af8f3e51ff65645e378c536ffa6ff551dade52884d03a14b7c6a19c5c97d4 fix-sockios-header.patch
|
|
8b8db136f78bd26b5da171effa9e11016ec2bc3e2fc8107228b5543b47aa370978ed883794aa4f917f334e284a5b49e82070e1da2d31d49301195b6713a48eff test-crypto-ivgen-skip-essiv.patch
|
|
b8e58bcc409f25cc6ff59967ed68f4de0a8656ec4db71ab663cc77761f8210b3f85c475fceb32dec934dc02a5c4f679a8313edbcf84e149692a81764c8904f67 guest-agent-shutdown.patch
|
|
9b7a3fd7878bf339cf54f824e3eb6bb5bd19d8108c3647d2022edb3c013db3fca7846437bee51326cd12fc054535d9b6ea425b5c7c4ca7ec310b6564f22f2c4d atomic-bswap.patch
|
|
d90c034cae3f9097466854ed1a9f32ab4b02089fcdf7320e8f4da13b2b1ff65067233f48809911485e4431d7ec1a22448b934121bc9522a2dc489009e87e2b1f qemu-guest-agent.confd
|
|
1cd24c2444c5935a763c501af2b0da31635aad9cf62e55416d6477fcec153cddbe7de205d99616def11b085e0dd366ba22463d2270f831d884edbc307c7864a6 qemu-guest-agent.initd
|
|
9b7a89b20fcf737832cb7b4d5dc7d8301dd88169cbe5339eda69fbb51c2e537d8cb9ec7cf37600899e734209e63410d50d0821bce97e401421db39c294d97be2 80-kvm.rules
|
|
749efa2e764006555b4fd3a8e2f6d1118ad2ea4d45acf99104a41a93cfe66dc9685f72027c17d8211e5716246c2a52322c962cf4b73b27541b69393cd57f53bb bridge.conf"
|