steam: include steam-runtime within chroot

This commit is contained in:
Christoph Hrdinka 2015-08-06 20:21:43 +02:00 committed by Nikolay Amiantov
parent 3bd78123f3
commit 2f52c62684

View File

@ -1,4 +1,4 @@
{ lib, buildFHSUserEnv { lib, buildFHSUserEnv, steam-runtime
, withRuntime ? false , withRuntime ? false
, withJava ? false , withJava ? false
, withPrimus ? false , withPrimus ? false
@ -7,116 +7,144 @@
buildFHSUserEnv { buildFHSUserEnv {
name = "steam"; name = "steam";
targetPkgs = pkgs: targetPkgs = pkgs: with pkgs; [
[ pkgs.steam-original steam-original
# Errors in output without those # Errors in output without those
pkgs.pciutils pciutils
pkgs.python2 python2
# Games' dependencies # Games' dependencies
pkgs.xlibs.xrandr xlibs.xrandr
pkgs.which which
# needed by gdialog, including in the steam-runtime
perl
] ]
++ lib.optional withJava pkgs.jdk ++ lib.optional withJava jdk
++ lib.optional withPrimus pkgs.primus ++ lib.optional withPrimus primus
; ;
multiPkgs = pkgs: [ multiPkgs = pkgs: with pkgs; [
# These are required by steam with proper errors # These are required by steam with proper errors
pkgs.xlibs.libXcomposite xlibs.libXcomposite
pkgs.xlibs.libXtst xlibs.libXtst
pkgs.xlibs.libXrandr xlibs.libXrandr
pkgs.xlibs.libXext xlibs.libXext
pkgs.xlibs.libX11 xlibs.libX11
pkgs.xlibs.libXfixes xlibs.libXfixes
pkgs.glib glib
pkgs.gtk2 gtk2
pkgs.bzip2 bzip2
pkgs.zlib zlib
pkgs.libpulseaudio libpulseaudio
pkgs.gdk_pixbuf gdk_pixbuf
# Not formally in runtime but needed by some games # Not formally in runtime but needed by some games
pkgs.gst_all_1.gstreamer gst_all_1.gstreamer
pkgs.gst_all_1.gst-plugins-ugly gst_all_1.gst-plugins-ugly
] ++ lib.optionals withRuntime [ ] ++ lib.optionals withRuntime [
# Without these it silently fails # Without these it silently fails
pkgs.xlibs.libXinerama xlibs.libXinerama
pkgs.xlibs.libXdamage xlibs.libXdamage
pkgs.xlibs.libXcursor xlibs.libXcursor
pkgs.xlibs.libXrender xlibs.libXrender
pkgs.xlibs.libXScrnSaver xlibs.libXScrnSaver
pkgs.xlibs.libXi xlibs.libXi
pkgs.xlibs.libSM xlibs.libSM
pkgs.xlibs.libICE xlibs.libICE
pkgs.gnome2.GConf gnome2.GConf
pkgs.freetype freetype
pkgs.openalSoft openalSoft
pkgs.curl curl
pkgs.nspr nspr
pkgs.nss nss
pkgs.fontconfig fontconfig
pkgs.cairo cairo
pkgs.pango pango
pkgs.alsaLib alsaLib
pkgs.expat expat
pkgs.dbus dbus
pkgs.cups cups
pkgs.libcap libcap
pkgs.SDL2 SDL2
pkgs.libusb1 libusb1
pkgs.dbus_glib dbus_glib
pkgs.libav libav
pkgs.atk atk
# Only libraries are needed from those two # Only libraries are needed from those two
pkgs.udev182 udev182
pkgs.networkmanager098 networkmanager098
# Verified games requirements # Verified games requirements
pkgs.xlibs.libXmu xlibs.libXmu
pkgs.xlibs.libxcb xlibs.libxcb
pkgs.xlibs.libpciaccess xlibs.libpciaccess
pkgs.mesa_glu mesa_glu
pkgs.libuuid libuuid
pkgs.libogg libogg
pkgs.libvorbis libvorbis
pkgs.SDL SDL
pkgs.SDL2_image SDL2_image
pkgs.glew110 glew110
pkgs.openssl openssl
pkgs.libidn libidn
# Other things from runtime # Other things from runtime
pkgs.xlibs.libXinerama xlibs.libXinerama
pkgs.flac flac
pkgs.freeglut freeglut
pkgs.libjpeg libjpeg
pkgs.libpng12 libpng12
pkgs.libsamplerate libsamplerate
pkgs.libmikmod libmikmod
pkgs.libtheora libtheora
pkgs.pixman pixman
pkgs.speex speex
pkgs.SDL_image SDL_image
pkgs.SDL_ttf SDL_ttf
pkgs.SDL_mixer SDL_mixer
pkgs.SDL2_net SDL2_net
pkgs.SDL2_ttf SDL2_ttf
pkgs.SDL2_mixer SDL2_mixer
pkgs.gstreamer gstreamer
pkgs.gst_plugins_base gst_plugins_base
]; ];
extraBuildCommands = '' extraBuildCommands = ''
[ -d lib64 ] && mv lib64/steam lib [ -d lib64 ] && mv lib64/steam lib
# FIXME: maybe we should replace this with proper libcurl-gnutls # FIXME: maybe we should replace this with proper libcurl-gnutls
( cd lib; ln -s libcurl.so.4 libcurl-gnutls.so.4 ) ln -s libcurl.so.4 lib/libcurl-gnutls.so.4
[ -d lib64 ] && ( cd lib64; ln -s libcurl.so.4 libcurl-gnutls.so.4 ) [ -d lib64 ] && ln -s libcurl.so.4 lib64/libcurl-gnutls.so.4
'' + lib.optionals withRuntime ''
mkdir -p steamrt/usr
ln -s lib32 steamrt/lib
if [ -d lib64 ]; then
ln -s ${steam-runtime}/i386/usr/bin steamrt/bin
else
ln -s ${steam-runtime}/amd64/usr/bin steamrt/bin
fi
ln -s ${steam-runtime}/i386/etc steamrt/etc
ln -s ${steam-runtime}/i386/usr/include steamrt/usr/include
cp -rsf --no-preserve mode ${steam-runtime}/i386/usr/lib steamrt/lib32
cp -rsf ${steam-runtime}/i386/lib/* steamrt/lib32
cp -rsf --no-preserve mode ${steam-runtime}/amd64/usr/lib steamrt/lib64
cp -rsf ${steam-runtime}/amd64/lib/* steamrt/lib64
libs=$(ls -dm --quoting-style=escape steamrt/lib{32,64}/{,*/})
echo 'export STEAM_RUNTIME=0' > steamrt/profile
echo 'export PATH=$PATH:/steamrt/bin' >> steamrt/profile
echo -n 'export LD_LIBRARY_PATH=/' >> steamrt/profile
echo -n $libs | sed 's/\/, /:\//g' | sed 's/\/$//g' >> steamrt/profile
echo ':$LD_LIBRARY_PATH' >> steamrt/profile
''; '';
profile = if withRuntime then '' profile = if withRuntime then ''
export STEAM_RUNTIME=0 source /steamrt/profile
'' else '' '' else ''
# Ugly workaround for https://github.com/ValveSoftware/steam-for-linux/issues/3504 # Ugly workaround for https://github.com/ValveSoftware/steam-for-linux/issues/3504
export LD_PRELOAD=/lib32/libpulse.so:/lib64/libpulse.so:/lib32/libasound.so:/lib64/libasound.so:$LD_PRELOAD export LD_PRELOAD=/lib32/libpulse.so:/lib64/libpulse.so:/lib32/libasound.so:/lib64/libasound.so:$LD_PRELOAD