manual: steam on nouveau also requires newStdCpp

This commit is contained in:
Peter Hoeg 2017-09-10 11:18:00 +08:00
parent 15502421c7
commit a9a3af423f

View file

@ -101,7 +101,7 @@ modulesTree = [kernel]
$ nix-env -i ncurses $ nix-env -i ncurses
$ export NIX_CFLAGS_LINK=-lncurses $ export NIX_CFLAGS_LINK=-lncurses
$ make menuconfig ARCH=<replaceable>arch</replaceable></screen> $ make menuconfig ARCH=<replaceable>arch</replaceable></screen>
</para> </para>
</listitem> </listitem>
@ -111,9 +111,9 @@ $ make menuconfig ARCH=<replaceable>arch</replaceable></screen>
</listitem> </listitem>
</orderedlist> </orderedlist>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
@ -409,24 +409,24 @@ it. Place the resulting <filename>package.nix</filename> file into
<title>Steam in Nix</title> <title>Steam in Nix</title>
<para> <para>
Steam is distributed as a <filename>.deb</filename> file, for now only Steam is distributed as a <filename>.deb</filename> file, for now only
as an i686 package (the amd64 package only has documentation). as an i686 package (the amd64 package only has documentation).
When unpacked, it has a script called <filename>steam</filename> that When unpacked, it has a script called <filename>steam</filename> that
in ubuntu (their target distro) would go to <filename>/usr/bin in ubuntu (their target distro) would go to <filename>/usr/bin
</filename>. When run for the first time, this script copies some </filename>. When run for the first time, this script copies some
files to the user's home, which include another script that is the files to the user's home, which include another script that is the
ultimate responsible for launching the steam binary, which is also ultimate responsible for launching the steam binary, which is also
in $HOME. in $HOME.
</para> </para>
<para> <para>
Nix problems and constraints: Nix problems and constraints:
<itemizedlist> <itemizedlist>
<listitem><para>We don't have <filename>/bin/bash</filename> and many <listitem><para>We don't have <filename>/bin/bash</filename> and many
scripts point there. Similarly for <filename>/usr/bin/python</filename> scripts point there. Similarly for <filename>/usr/bin/python</filename>
.</para></listitem> .</para></listitem>
<listitem><para>We don't have the dynamic loader in <filename>/lib <listitem><para>We don't have the dynamic loader in <filename>/lib
</filename>.</para></listitem> </filename>.</para></listitem>
<listitem><para>The <filename>steam.sh</filename> script in $HOME can <listitem><para>The <filename>steam.sh</filename> script in $HOME can
not be patched, as it is checked and rewritten by steam.</para></listitem> not be patched, as it is checked and rewritten by steam.</para></listitem>
<listitem><para>The steam binary cannot be patched, it's also checked.</para></listitem> <listitem><para>The steam binary cannot be patched, it's also checked.</para></listitem>
</itemizedlist> </itemizedlist>
@ -446,10 +446,10 @@ it. Place the resulting <filename>package.nix</filename> file into
<title>How to play</title> <title>How to play</title>
<para> <para>
For 64-bit systems it's important to have For 64-bit systems it's important to have
<programlisting>hardware.opengl.driSupport32Bit = true;</programlisting> <programlisting>hardware.opengl.driSupport32Bit = true;</programlisting>
in your <filename>/etc/nixos/configuration.nix</filename>. You'll also need in your <filename>/etc/nixos/configuration.nix</filename>. You'll also need
<programlisting>hardware.pulseaudio.support32Bit = true;</programlisting> <programlisting>hardware.pulseaudio.support32Bit = true;</programlisting>
if you are using PulseAudio - this will enable 32bit ALSA apps integration. if you are using PulseAudio - this will enable 32bit ALSA apps integration.
To use the Steam controller, you need to add To use the Steam controller, you need to add
<programlisting>services.udev.extraRules = '' <programlisting>services.udev.extraRules = ''
@ -470,23 +470,31 @@ it. Place the resulting <filename>package.nix</filename> file into
<varlistentry> <varlistentry>
<term>Steam fails to start. What do I do?</term> <term>Steam fails to start. What do I do?</term>
<listitem><para>Try to run <listitem><para>Try to run
<programlisting>strace steam</programlisting> <programlisting>strace steam</programlisting>
to see what is causing steam to fail.</para></listitem> to see what is causing steam to fail.</para></listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
<term>Using the FOSS Radeon drivers</term> <term>Using the FOSS Radeon or nouveau (nvidia) drivers</term>
<listitem><itemizedlist><listitem><para> <listitem><itemizedlist><listitem><para>
The open source radeon drivers need a newer libc++ than is provided Both the open source radeon drivers as well as the nouveau drivers (nvidia)
by the default runtime, which leads to a crash on launch. Use need a newer libc++ than is provided by the default runtime, which leads to a
<programlisting>environment.systemPackages = [(pkgs.steam.override { newStdcpp = true; })];</programlisting> crash on launch. Use <programlisting>environment.systemPackages =
in your config if you get an error like [(pkgs.steam.override { newStdcpp = true; })];</programlisting> in your config
if you get an error like
<programlisting> <programlisting>
libGL error: unable to load driver: radeonsi_dri.so libGL error: unable to load driver: radeonsi_dri.so
libGL error: driver pointer missing libGL error: driver pointer missing
libGL error: failed to load driver: radeonsi libGL error: failed to load driver: radeonsi
libGL error: unable to load driver: swrast_dri.so libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast</programlisting>
or
<programlisting>
libGL error: unable to load driver: nouveau_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: nouveau
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast</programlisting></para></listitem> libGL error: failed to load driver: swrast</programlisting></para></listitem>
<listitem><para> <listitem><para>
Steam ships statically linked with a version of libcrypto that Steam ships statically linked with a version of libcrypto that
@ -504,7 +512,7 @@ libGL error: failed to load driver: swrast</programlisting></para></listitem>
<listitem><para> <listitem><para>
There is no java in steam chrootenv by default. If you get a message like There is no java in steam chrootenv by default. If you get a message like
<programlisting>/home/foo/.local/share/Steam/SteamApps/common/towns/towns.sh: line 1: java: command not found</programlisting> <programlisting>/home/foo/.local/share/Steam/SteamApps/common/towns/towns.sh: line 1: java: command not found</programlisting>
You need to add You need to add
<programlisting> steam.override { withJava = true; };</programlisting> <programlisting> steam.override { withJava = true; };</programlisting>
to your configuration. to your configuration.
</para></listitem> </para></listitem>
@ -519,14 +527,14 @@ libGL error: failed to load driver: swrast</programlisting></para></listitem>
<title>steam-run</title> <title>steam-run</title>
<para> <para>
The FHS-compatible chroot used for steam can also be used to run The FHS-compatible chroot used for steam can also be used to run
other linux games that expect a FHS environment. other linux games that expect a FHS environment.
To do it, add To do it, add
<programlisting>pkgs.(steam.override { <programlisting>pkgs.(steam.override {
nativeOnly = true; nativeOnly = true;
newStdcpp = true; newStdcpp = true;
}).run</programlisting> }).run</programlisting>
to your configuration, rebuild, and run the game with to your configuration, rebuild, and run the game with
<programlisting>steam-run ./foo</programlisting> <programlisting>steam-run ./foo</programlisting>
</para> </para>