Home > Docs > Gentoo > Steam
How to make steam work seamlessly on gentoo with a chroot
Tags: gentoo linux

Introduction

I am not using a multilib profile on gentoo (I use amd64 only everywhere), so when the time came to install steam I had to get a little creative. Overall I believe this is the perfect way to install and use steam as it self contains it cleanly while not limiting the functionalities. In particular sound works, as does the hardware acceleration in games. I tried to achieve that with containers but didn’t quite made it work as well as this chroot setup.

Installation notes

Note that there is no way to provide a “most recent stage 3” installation link. You will have to browse http://distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64/ and adjust the download url manually bellow :

mkdir /usr/local/steam
cd /usr/local/steam
wget http://distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20190122T214501Z.tar.xz
tar -xvpf stage3*
rm stage3*
cp -L /etc/resolv.conf etc/
cp -L /etc/locale.gen etc/
mkdir usr/portage
mkdir -p srv/gentoo-distfiles
mount -R /dev dev
mount -R /sys sys
mount -t proc proc proc
mount -R /usr/portage usr/portage
mount -R /usr/src usr/src
mount -R /srv/gentoo-distfiles/ srv/gentoo-distfiles/
mount -R /run run
cp /etc/portage/make.conf etc/portage/
sed -e '/LLVM_TARGETS/d' -e '/getbinpkg/d' -i etc/portage/make.conf
chroot .
locale-gen
env-update && source /etc/profile
eselect profile set default/linux/amd64/17.1
mkdir /etc/portage/package.accept_keywords
echo "games-util/steam-launcher  ~amd64
games-util/game-device-udev-rules  ~amd64" > /etc/portage/package.accept_keywords/steam
mkdir /etc/portage/package.use
echo "x11-libs/libX11 abi_x86_32
x11-libs/libXau abi_x86_32
x11-libs/libxcb abi_x86_32
x11-libs/libXdmcp abi_x86_32
x11-base/xcb-proto abi_x86_32
virtual/opengl abi_x86_32
x11-libs/cairo X
media-libs/libglvnd X
media-libs/mesa  abi_x86_32
dev-libs/expat abi_x86_32
media-libs/libglvnd abi_x86_32
sys-libs/zlib abi_x86_32
x11-libs/libdrm abi_x86_32
x11-libs/libxshmfence abi_x86_32
x11-libs/libXext abi_x86_32
x11-libs/libXxf86vm abi_x86_32
x11-libs/libXfixes abi_x86_32
app-arch/zstd abi_x86_32
sys-devel/llvm abi_x86_32
x11-libs/libXrandr abi_x86_32
x11-libs/libXrender abi_x86_32
dev-libs/libffi abi_x86_32
sys-libs/ncurses abi_x86_32
x11-libs/libpciaccess abi_x86_32" > /etc/portage/package.use/steam
emerge world -uDNq
emerge dev-vcs/git media-sound/pavucontrol media-libs/openal x11-base/xorg-drivers x11-terms/xterm -q
wget -P /etc/portage/repos.conf/ https://raw.githubusercontent.com/anyc/steam-overlay/master/steam-overlay.conf
emaint sync --repo steam-overlay
emerge games-util/steam-launcher -q
useradd -m -G audio,video steam

Launch script

Note that we use su and not su - since we need to preserve the environment. If you don’t you won’t get any sound in game. The pulseaudio socket is shared through the mount of /run inside the chroot :

su
cd /usr/local/steam
mount -R /dev dev
mount -R /sys sys
mount -t proc proc proc
mount -R /usr/portage usr/portage
mount -R /usr/src usr/src
mount -R /run run
chroot .
env-update && source /etc/profile
su steam
steam