Skip to content
Snippets Groups Projects
Commit 700d8747 authored by Simon McVittie's avatar Simon McVittie
Browse files

build: Redo installation instructions

parent af49a9f7
No related branches found
No related tags found
No related merge requests found
/_build/
/relocatable-install/
/libcapsule_*.dsc
/libcapsule_*.tar.[gx]z
all: install
install: install-amd64 install-i386
chroot = /srv/jessie
in_chroot = \
bwrap \
--ro-bind $(chroot) / \
--dev-bind /dev /dev \
--tmpfs /tmp \
--tmpfs /home \
--bind $(CURDIR) $(CURDIR) \
--chdir $(CURDIR) \
--setenv LC_ALL C.UTF-8 \
$(NULL)
install: install-amd64 install-i386 libcapsule/configure
install pressure-vessel-wrap relocatable-install/bin/
mkdir -p relocatable-install/sources
install -m644 THIRD-PARTY.md relocatable-install/sources/README.txt
install -m644 libcapsule/debian/copyright relocatable-install/sources/capsule-capture-libs.txt
install -m644 /usr/share/doc/zlib1g/copyright relocatable-install/sources/libz.txt
install -m644 /usr/share/doc/libelf1/copyright relocatable-install/sources/libelf.txt
install -m644 libcapsule-*.tar.* relocatable-install/sources/
cd relocatable-install/sources; apt-get --download-only source elfutils zlib
dcmd install -m644 libcapsule*.dsc relocatable-install/sources/
$(in_chroot) $(MAKE) in-chroot/install
in-chroot/install:
cd relocatable-install/sources; \
apt-get --download-only source elfutils zlib
libcapsule/configure:
rm -fr libcapsule
tar -zxvf libcapsule-*.tar.*
first=; \
for t in libcapsule*.dsc; do \
if [ -z "$$first" ]; then \
first="$$t"; \
else \
echo "Exactly one libcapsule*.dsc is required" >&2; \
exit 1; \
fi; \
done
$(in_chroot) $(MAKE) in-chroot/libcapsule/configure
in-chroot/libcapsule/configure:
dpkg-source -x libcapsule*.dsc
mv libcapsule-*/ libcapsule
set -e; cd libcapsule; NOCONFIGURE=1 ./autogen.sh
_build/%/config.status: libcapsule/configure Makefile
mkdir -p _build/$*/libcapsule
$(in_chroot) $(MAKE) in-chroot/configure-$*
in-chroot/configure-%:
set -eu; \
eval "$$(dpkg-architecture -a"$*" --print-set)"; \
case "$${DEB_BUILD_ARCH}/$${DEB_HOST_ARCH}" in \
......@@ -36,11 +68,14 @@ _build/%/config.status: libcapsule/configure Makefile
$(NULL)
build-%: _build/%/config.status Makefile
make -C _build/$*/libcapsule
$(in_chroot) $(MAKE) -C _build/$*/libcapsule
install-%: build-% Makefile
mkdir -p relocatable-install/bin
$(in_chroot) $(MAKE) in-chroot/install-$*
in-chroot/install-%:
set -eu; \
mkdir -p relocatable-install/bin; \
eval "$$(dpkg-architecture -a"$*" --print-set)"; \
mkdir -p "relocatable-install/lib/$${DEB_HOST_MULTIARCH}"; \
install "_build/$*/libcapsule/capsule-capture-libs" "_build/$${DEB_HOST_MULTIARCH}-capsule-capture-libs"; \
......
......@@ -21,25 +21,32 @@ that won't be synchronised, other than /tmp or similar.)
We can get a more predictable library stack than the
`LD_LIBRARY_PATH`-based Steam Runtime by making an alternative runtime
available over `/usr`, `/lib*`, `/bin`, `/sbin`, analogous to Flatpak
runtimes, possibly using [libcapsule][] to share the host's graphics
driver stack. (This mode is not yet implemented.)
runtimes, using some or all of the host system's graphics stack.
A future goal is to use [libcapsule][] to avoid the library dependencies
of the host system's graphics stack influencing the libraries loaded by
games, particularly libstdc++. This is not yet implemented.
[libcapsule]: https://gitlab.collabora.com/vivek/libcapsule/
Building a relocatable install
------------------------------
On a system with autoconf-archive 20160916-1~bpo8+1 or later, check out
libcapsule from git and use `aclocal -I m4 --install` to copy required
macros to the `m4` directory. Put it in the `libcapsule/` subdirectory
of `pressure-vessel`.
Build a Debian source package (`.dsc`, `.debian.tar.*`, `.orig.tar.*`
for libcapsule 0.20180430.0 or later, on a system with autoconf-archive
20160916-1~bpo8+1 or later. Put it in the top-level directory of
`pressure-vessel`, for example:
dcmd cp ../build-area/libcapsule_0.20180430.0-0co1.dsc .
The build system also needs `bubblewrap` and `debootstrap`.
To make the built version compatible with older systems, you will need a
Debian 8 'jessie' chroot with some extra packages (SteamOS 2 'brewmaster'
Debian 8 'jessie' chroot with some extra packages. SteamOS 2 'brewmaster'
is not suitable, because its amd64 and i386 linux-libc-dev packages are
not co-installable).
not co-installable.
To prepare the chroot:
sudo debootstrap jessie /srv/jessie http://deb.debian.org/debian
echo 'deb-src http://deb.debian.org/debian jessie main' | \
......@@ -52,14 +59,10 @@ not co-installable).
gtk-doc-tools libelf-dev libelf-dev:i386 libipc-run-perl \
libjpeg62-turbo libjpeg62-turbo:i386 perl xsltproc zlib1g zlib1g:i386
sudo chroot /srv/jessie apt install -t jessie-backports autoconf-archive
bwrap \
--ro-bind /srv/jessie / \
--dev-bind /dev /dev \
--tmpfs /tmp \
--bind /home /home \
--chdir $(pwd) \
--setenv LC_ALL C.UTF-8 \
make
To build the relocatable install:
make chroot=/srv/jessie
Binaries and source code end up in `relocatable-install/` which can be
copied to wherever you want.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment