summaryrefslogtreecommitdiff
path: root/kernels/xen/PKGBUILD
blob: af74ce9993a8fb8c61ec29188c10727ba89165d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
# Maintainer (Arch): David Sutton <kantras - gmail.com>
# Contributor (Arch): Shanmu Thiagaraja <sthiagaraja+AUR@prshanmu.com>
# Contributor (Arch): Limao Luo
# Contributor (Arch): Luceo
# Contributor (Arch): Revellion
# Contributor (Arch): John Thomson
# Maintainer: André Silva <emulatorman@parabola.nu>
# Contributor: Márcio Silva <coadde@parabola.nu>


_build_stubdom=${build_stubdom:-false}
## use _build_stubdom=true to build xen with stubdom
#_build_stubdom=true

pkgname=xen
pkgver=4.7.0
pkgrel=1.parabola1
pkgdesc="Virtual Machine Hypervisor & Tools (Parabola rebranded)"
arch=(x86_64)
url="http://www.xenproject.org/"
license=(GPL2)
depends=(bridge-utils curl gnutls iproute2 libaio libcap-ng libiscsi libnl libpng lzo2 pciutils python python2 sdl spice usbredir yajl
        # seabios ovmf qemu
        )
[[ "$CARCH" == "x86_64" ]] && depends+=(lib32-glibc)
makedepends=(bin86 cmake dev86 figlet git iasl markdown nasm ocaml-findlib spice-protocol wget)

## For building Xen EFI boot file.
## mingw-w64-binutils only needed if 
## binutils not built with --enable-targets=x86_64-pep 
_binutils_emulations=$(ld -V)
_binutils_efi=false
if [[ $_binutils_emulations == *'i386pep'* ]]
then
    _binutils_efi=true
    echo 'ld has efi support'
else
    makedepends+=(mingw-w64-binutils)
    echo 'ld does not have efi support, using mingw'
fi

optdepends=('xen-docs: Official Xen Documentation' 'openvswitch: Optional Networking support')
conflicts=(xen-4.2{,-testing-hg} xen-{gdbsx,hg-unstable,rc,git,igvtg} xen-4.3{,-testing-hg} xen-4.4 xen-4.5 xen-4.6)
backup=(
        etc/modules-load.d/$pkgname.conf
        etc/$pkgname/xl.conf
        etc/conf.d/xen{stored,consoled,domains,commons}
        etc/$pkgname/grub.conf
        )
options=(!buildflags !strip)
install=$pkgname.install
changelog=ChangeLog
source=(
    http://bits.xensource.com/oss-xen/release/$pkgver/$pkgname-$pkgver.tar.gz
    http://xenbits.xen.org/xen-extfiles/ipxe-git-9a93db3f0947484e30e753bbd61a10b17336e20e.tar.gz

    ##SeaBIOS & OVMF tags are in src/xen-*/tools/Config.mk
    ##Can be found through: grep -R 'UPSTREAM_REVISION' src/xen-*/Config.mk
    #'seabios'::'git://xenbits.xen.org/seabios.git#tag=rel-1.9.2'
    #'ovmf'::'git://xenbits.xen.org/ovmf.git#tag=52a99493cce88a9d4ec8a02d7f1bd1a1001ce60d'
    ##HTTP access
    'seabios'::'git+http://xenbits.xen.org/git-http/seabios.git#tag=rel-1.9.2'
    'ovmf'::'git+http://xenbits.xen.org/git-http/ovmf.git#tag=52a99493cce88a9d4ec8a02d7f1bd1a1001ce60d'

    ## Compile patches
    ati-passthrough.patch
    ovmf.patch
    #patch-build-efi-with-mingw.patch::https://github.com/jakogut/xen-igvtg-aur/raw/28c81072e419d72a100ada9c393e37fae35ad263/xen_efi_build.patch
    patch-gcc6-ovmf-build.sh.patch
    #ipxe
    patch-gcc6-etherboot-nonnull-compare.patch::https://git.ipxe.org/ipxe.git/patch/e2f14c2f8c10674dbbd4f1228d79dc4c9be213b5
    patch-gcc6-etherboot-rm-unused-string-functions.patch
    patch-gcc6-etherboot-nic.c.patch::https://git.ipxe.org/ipxe.git/patch/a5885fbc19c4b60dc1a21624d1a9d1b77a93504e
    patch-gcc6-etherboot-ath.patch::https://git.ipxe.org/ipxe.git/patch/63037bdce4a325e5e1da85ffcdf27b77ac670c01
    patch-gcc6-etherboot-sis190.patch::https://git.ipxe.org/ipxe.git/patch/65b32a0b7000f70a5bb1d33190d40f9b04c93172
    patch-gcc6-etherboot-skge.patch::https://git.ipxe.org/ipxe.git/patch/76ec2a0540b25dbd183b9ce185583a4b24278cf1
    patch-gcc6-etherboot-via-velocity.c.patch
    patch-gcc6-etherboot-via-rhine.c.patch
    patch-gcc6-etherboot-e1000_phy.c.patch
    patch-gcc6-etherboot-igb_phy.c.patch
    patch-gcc6-etherboot-eth_broadcast.patch::https://git.ipxe.org/ipxe.git/patch/1cbb1581f16e235fafc963c906ad02b38d5457bd
    patch-gcc6-etherboot-link-header.patch::https://git.ipxe.org/ipxe.git/patch/6324bd9389521c7e86384591f41eb78a81e9af47
    patch-gcc6-etherboot-ath9k-9287-array.patch

    ## Files
    xen.install
    09_xen
    efi-xen.cfg
    grub.conf
    $pkgname.conf
    tmpfiles.d-$pkgname.conf

    ## XSA patches
    )

if [ "$_build_stubdom" = true ] ; then
    echo "building with stubdom"
    source+=(
        http://xenbits.xen.org/xen-extfiles/lwip-1.3.0.tar.gz
        http://xenbits.xen.org/xen-extfiles/zlib-1.2.3.tar.gz
        http://xenbits.xen.org/xen-extfiles/newlib-1.16.0.tar.gz
        http://xenbits.xen.org/xen-extfiles/pciutils-2.2.9.tar.bz2
        http://xenbits.xen.org/xen-extfiles/polarssl-1.1.4-gpl.tgz
        http://xenbits.xen.org/xen-extfiles/grub-0.97.tar.gz
        http://xenbits.xen.org/xen-extfiles/tpm_emulator-0.7.4.tar.gz
        http://xenbits.xen.org/xen-extfiles/gmp-4.3.2.tar.bz2
        #http://caml.inria.fr/pub/distrib/ocaml-3.11/ocaml-3.11.0.tar.gz
    )
fi


noextract=(
    ipxe-git-9a93db3f0947484e30e753bbd61a10b17336e20e.tar.gz
    )

if [ "$_build_stubdom" = true ] ; then
    noextract+=(
        lwip-1.3.0.tar.gz
        zlib-1.2.3.tar.gz
        newlib-1.16.0.tar.gz
        pciutils-2.2.9.tar.bz2
        polarssl-1.1.4-gpl.tgz
        grub-0.97.tar.gz
        tpm_emulator-0.7.4.tar.gz
        gmp-4.3.2.tar.bz2
        #ocaml-3.11.0.tar.gz
    )
fi

sha256sums=(
            'be5876144d49729572ae06142e0bb93f1c1f2695578141eff2931995add24623'
            '632ce8c193ccacc3012bd354bdb733a4be126f7c098e111930aa41dad537405c'

            'SKIP'
            'SKIP'

            'd93c2d5bcdf0c3e4c6e8efb357cb4b9d618209025361f5ccd9d03651a8acd7a3'
            '9cf9232c6e9a2b972cd4e1c7aacac9152bb8676db2b794381e1964c9f452e7de'
            #'a8ce42777e22af49080131e174b6b89c6e7597539838fb8b17a12280fd10b10b'
            '6403a0478e3cfed91dcad53b5f02e71745c98d18ab53930f87aeff1da8d71d55'
            #ipxe
            '17bb27d95c86af8cc5e499b1b0db9b95bba3f45910d55b420f9f1f5452355fab'
            '5d5fe7bf52cbae9da20cfd1fc798699b2355a1af907ebf7f764e227891a759bb'
            '9f34f8ecb9a44c688275b838c83efd233bb817f5e222629eac98e116168d704c'
            'cdf7c4a089fe1fe493aafaf669decc3c9e071a0950da77dce526c09088d1c931'
            '32595581467772b9fa0fbb5384c99caefeb2cee3306b94b9bd2722084454f5a2'
            'c73d1653b9b1d97ddce717817dc74429cd94c7b22989a08604eaa60df63f75f8'
            '448caed900ada2c030738218f5b82f5e29d9dc2e1beef9ebd49cbeb23734df0d'
            '61b1518c8d41792ec3b36e0fbfc265adb6c9304945a6fa18d6cc5a197e34b94f'
            '577f06e38a9ecbd3576907f2ba1c5040f4f1573fe92912635230702ad157b2e7'
            '80a24e9504d3893e83dc60550ffe364a873aaf3dafb52dcdade13f61f2ec0ee5'
            'be05ccd8975af402dcba3a3dc78c173319b2edd636bac11ac11163091453b704'
            'cace870b6629003b55d9df9ef24f3445067239b913c006b6e23da511c1a21d78'
            'a15d73e0fb51fe3c1cf8b80a5ff17d532444016d14495d90d9e642ec60f320a6'
            #pkgbuild files
            '7da2db54d35914284d60bb4474aff3538897dd3cf5065347b393d6e18a029292'
            '92b8fc6679cc75bd993c8ead946eb1f212da03a52566b1c329d248fa1cdfe879'
            '95f09bccc104d98c14559000823cb50f0d076f6a65b9f3b4e7725762b84ab5c7'
            '3f0af16958c3e057b9baa5afc47050d9adf7dd553274dd97ae4f35938fefb568'
            '50a9b7fd19e8beb1dea09755f07318f36be0b7ec53d3c9e74f3266a63e682c0c'
            '40e0760810a49f925f2ae9f986940b40eba477dc6d3e83a78baaae096513b3cf'

            ## XSA patches
                )
if [ "$_build_stubdom" = true ] ; then
    sha256sums+=(
            #stubdom bits
            '772e4d550e07826665ed0528c071dd5404ef7dbe1825a38c8adbc2a00bca948f'
            '1795c7d067a43174113fdf03447532f373e1c6c57c08d61d9e4e9be5e244b05e'
            'db426394965c48c1d29023e1cc6d965ea6b9a9035d8a849be2750ca4659a3d07'
            'f60ae61cfbd5da1d849d0beaa21f593c38dac9359f0b3ddc612f447408265b24'
            '2d29fd04a0d0ba29dae6bd29fb418944c08d3916665dcca74afb297ef37584b6'
            '4e1d15d12dbd3e9208111d6b806ad5a9857ca8850c47877d36575b904559260b'
            '4e48ea0d83dd9441cc1af04ab18cd6c961b9fa54d5cbf2c2feee038988dea459'
            '936162c0312886c21581002b79932829aa048cfaf9937c6265aeaa14f1cd1775'
            #'ecdd4f8473ab0dee5d3acb5c0a31a4c1dd6aa12179895cf1903dd0f455c43a4f'

            #stubdom patches
            )
fi

prepare() {
    cd "$pkgname-$pkgver/"

    ### Copy git sourced tools/firmware
    # Copy seabios into place
    mkdir tools/firmware/seabios-dir-remote/
    cp -r ../seabios/* tools/firmware/seabios-dir-remote/
    # Copy ovmf into place
    mkdir tools/firmware/ovmf-dir-remote/
    cp -r ../ovmf/* tools/firmware/ovmf-dir-remote/

    ### Patching 

    # Security Patches - Base

    # Security Patches - qemu-xen-traditional
    cd 'tools/qemu-xen-traditional/'
    cd '../../'

    # Security Patches - qemu-xen (upstream)
    cd 'tools/qemu-xen/'
    cd '../../'

    # Compile Patches

    # Build EFI binary with mingw
    if [ $_binutils_efi != true ]
    then
        #patch -Np1 -i "$srcdir/patch-build-efi-with-mingw.patch"
        sed -i.bak '/ EFI_LD/s/LD/LD_EFI/' xen/arch/x86/Makefile
        sed -i.bak 's/LD/LD_EFI/' xen/arch/x86/efi/Makefile
        sed -i.bak '/EFI_MOUNTPOINT .*/aLD_EFI ?= $(LD)' xen/Makefile
    fi

    # OVMF Compile support (Pulls from GIT repo, so patching to patch after pull request)
    patch -Np1 -i "$srcdir/ovmf.patch"
    cp "$srcdir/patch-gcc6-ovmf-build.sh.patch" tools/firmware/

    # Uncomment line below if you want to enable ATI Passthrough support (some reported successes, untested with 4.4)
    #patch -Np1 -i "$srcdir/ati-passthrough.patch"

    ## GCC-6
    #etherboot
    echo -e "patch-gcc6-etherboot-nonnull-compare.patch\npatch-gcc6-etherboot-rm-unused-string-functions.patch\npatch-gcc6-etherboot-nic.c.patch\npatch-gcc6-etherboot-ath.patch\npatch-gcc6-etherboot-sis190.patch\npatch-gcc6-etherboot-skge.patch\npatch-gcc6-etherboot-via-velocity.c.patch\npatch-gcc6-etherboot-via-rhine.c.patch\npatch-gcc6-etherboot-e1000_phy.c.patch\npatch-gcc6-etherboot-igb_phy.c.patch\npatch-gcc6-etherboot-link-header.patch\npatch-gcc6-etherboot-eth_broadcast.patch\npatch-gcc6-etherboot-ath9k-9287-array.patch" >> tools/firmware/etherboot/patches/series
    cp ${srcdir}/patch-gcc6-etherboot-*.patch tools/firmware/etherboot/patches/

    ## Fix Install Paths
    sed -i 's:\$localstatedir/run/xen:/run/xen:' m4/paths.m4
    sed -i 's:/var/run:/run:' tools/ocaml/xenstored/define.ml
    sed -i 's:/var/run:/run:' tools/ocaml/xenstored/systemd_stubs.c

    if [ "$_build_stubdom" = true ] ; then
        # Copy supporting tarballs into place
        cp "$srcdir/lwip-1.3.0.tar.gz" stubdom/
        cp "$srcdir/zlib-1.2.3.tar.gz" stubdom/
        cp "$srcdir/newlib-1.16.0.tar.gz" stubdom/
        cp "$srcdir/pciutils-2.2.9.tar.bz2" stubdom/
        cp "$srcdir/polarssl-1.1.4-gpl.tgz" stubdom/
        cp "$srcdir/grub-0.97.tar.gz" stubdom/
        cp "$srcdir/tpm_emulator-0.7.4.tar.gz" stubdom/
        cp "$srcdir/gmp-4.3.2.tar.bz2" stubdom/
        #cp "$srcdir/ocaml-3.11.0.tar.gz" stubdom/

        ## Stubdom patches
        cd 'extras/mini-os'
        cd '../../'

    fi

    #etherboot
    cp "$srcdir/ipxe-git-9a93db3f0947484e30e753bbd61a10b17336e20e.tar.gz" tools/firmware/etherboot/ipxe.tar.gz

    #Workaround for cannot compute sizeof (unsigned short) 
    #Makefile:170: recipe for target 'gmp-x86_64' failed
    #Probably not safe!
    #sed -i.bak "/< gmp.patch/a\	sed -i.bak 's/\\\\(\\\\s*\\\\)\\\\(fprintf (f,\\\\)\\\\(.*\\\\)/\\\\1\\\\2\\\\3\\\\n\\\\1clearerr(f);/' \$@/configure" stubdom/Makefile


}

build() {
    cd "$pkgname-$pkgver/"
    export LD_EFI="/usr/x86_64-w64-mingw32/bin/ld"
    ./autogen.sh
    if [ "$_build_stubdom" = true ] ; then
        _config_stubdom='--enable-stubdom'
    fi
    ./configure PYTHON=/usr/bin/python2 --prefix=/usr --sbindir=/usr/bin --with-sysconfig-leaf-dir=conf.d --with-initddir=/etc/init.d \
		--enable-systemd --disable-docs --enable-ovmf \
        "${_config_stubdom:---disable-stubdom}" \
		--with-extra-qemuu-configure-args="--disable-bluez --disable-gtk --enable-spice --enable-usb-redir"
        #--with-system-qemu --with-system-seabios --with-system-ovmf 
        #defaults --enable-qemu-traditional --enable-rombios \
    make LANG=C PYTHON=python2 dist-misc
    make LANG=C PYTHON=python2 dist-xen
    make LANG=C PYTHON=python2 dist-tools
    if [ "$_build_stubdom" = true ] ; then
        make LANG=C PYTHON=python2 dist-stubdom
    fi
}

package() {
    cd "$pkgname-$pkgver/"

    make DESTDIR="$pkgdir" LANG=C PYTHON=python2 install

    cd "$pkgdir"

    # Install files from Parabola package
    install -Dm644 "$srcdir/tmpfiles.d-$pkgname.conf" usr/lib/tmpfiles.d/$pkgname.conf
    install -Dm644 "$srcdir/grub.conf" etc/xen/grub.conf
    install -Dm755 "$srcdir/09_xen" etc/grub.d/09_xen
    install -Dm644 "$srcdir/efi-xen.cfg" etc/xen/efi-xen.cfg

    # Fix paths in scripts, move to right locations and create missing directories
    sed -i 's:/var/run:/run:' etc/init.d/xencommons
    sed -i 's:/var/lock:/run/lock:' etc/xen/scripts/hotplugpath.sh
    sed -i 's:/var/run:/run:' etc/xen/scripts/locking.sh
    sed -i 's:/var/run:/run:' usr/lib/systemd/system/xenstored.service
    sed -i 's:/var/run:/run:' usr/lib/systemd/system/xenstored.socket
    sed -i 's:/var/run:/run:' usr/lib/systemd/system/xenstored_ro.socket

    mkdir var/log/xen/console

    # Sanitize library path (if lib64 exists)
    if [[ -d usr/lib64 ]]; then
        cd usr/
        cp -r lib64/* lib/
        rm -rf lib64
	cd ../
    fi

    # If EFI binaries build, move to /boot
    if [[ -f usr/lib/efi/xen.efi ]]; then
        mv usr/lib/efi/xen-$pkgver.efi boot/xen-$pkgver.efi
        rm -rf usr/lib/efi
    fi

    # Compress syms file and move to a share location
    #gzip boot/$pkgname-syms-*
    #mv boot/$pkgname-syms-*.gz usr/share/xen

    ##### Kill unwanted stuff #####
    # hypervisor symlinks
    rm -f boot/xen{,-4,-4.7,-4.7-rc}.gz

    # Documentation cleanup ( see xen-docs package )
    rm -rf usr/share/doc
    rm -rf usr/share/man

    # Unnecessary qemu support files
#    rm -rf usr/bin/qemu-*-xen
    rm usr/share/qemu-xen/qemu/{palcode,openbios}-*
    rm usr/share/xen/qemu/openbios-*

    # adhere to Static Library Packaging Guidelines
    rm -rf usr/lib/*.a

}