Update 02. Juni 2013: Seit spätestens Ende Mai 2013 ist Steam in den offiziellen Debian-Repositories (aktuell nur experimental) verfügbar. Der Umweg mit dem Ubuntu-Chroot ist aber ohnehin nicht mehr nötig, weil Testing mittlerweile aktuell genug ist.
Seit Ende November ist Steam für Linux erhältlich, sogar mit Counter-Strike: Source (seit vorgestern). Doch offiziell unterstützt wird leider nur Ubuntu in der Version 12.04. Für die meisten Linuxnutzer ist das kein Problem, weil es meistens trotzdem läuft. Mit Debian ist das leider nicht der Fall. Ein bekanntes Workaround ist das Setzen von Umgebungsvariablen, was aber leider den Paketmanager umgeht. Eine in meinen Augen elegantere Möglichkeit ist die Benutzung von chroot.
Die Installation der Chroot-Umgebung mit Ubuntu ist denkbar einfach. (Zu den angegebenen Befehlen: #: als Root ausführen, $: als User ausführen; in eckigen Klammern meint in der Chroot-Umgebung.) Es empfiehlt sich, direkt nach der Installation die Repositories zu bearbeiten und dem Nutzer (in meinem Fall patrik) die Nutzung des chroots zu erlauben:
#: debootstrap --arch i386 precise /srv/chroot/ubuntu/ http://archive.ubuntu.com/ubuntu
#: echo -e "deb http://archive.ubuntu.com/ubuntu precise main\n
deb http://archive.ubuntu.com/ubuntu precise-updates main\n
deb http://archive.ubuntu.com/ubuntu precise-security main\n"
> /srv/chroot/ubuntu/etc/apt/sources.list
#: echo -e "[Ubuntu 12.04]\n
description=Ubuntu Precise\n
directory=/srv/chroot/ubuntu\n
aliases=precise,default\n
users=patrik\n"
>> /etc/schroot/schroot.conf
Zur Vorbereitung der neuen Umgebung sollte man zudem die Benutzereinstellungen in die neue Umgebung einfügen. Ich habe das teilweise per mounts gemacht, teilweise einfach kopiert:
#: echo -e "# Ubuntu chroot\n
/home /srv/chroot/ubuntu/home none bind 0 0\n
/tmp /srv/chroot/ubuntu/tmp none bind 0 0\n
/dev /srv/chroot/ubuntu/dev none bind 0 0\n
/proc /srv/chroot/ubuntu/proc proc defaults 0 0\n
/run/shm /srv/chroot/ubuntu/run/shm none bind 0 0\n"
>> /etc/fstab
#: cp /etc/group /srv/chroot/ubuntu/etc/group
#: cp /etc/passwd /srv/chroot/ubuntu/etc/passwd
#: cp /etc/shadow /srv/chroot/ubuntu/etc/shadow
#: cp /etc/hosts /srv/chroot/ubuntu/etc/hosts
#: mount -a
Um in der Chroot-Umgebung auch auf den XServer zugreifen zu können, kann man (als Nutzer!) xhost erlauben, alle lokal laufenden Prozesse anzuzeigen:
xhost + local:
Damit läuft das Chroot-System auch schon. (Ja, ich hätte auch einfach ein Script bauen können, dann hätte niemand Befehle abtippen oder kopieren und einfügen müssen. Aber man soll ja auch was lernen.) Allerdings hatte zumindest ich Probleme mit der (nicht installierten) Lokalisierung. Also geht es erst einmal ab in die neue Umgebung:
#: dchroot -d
Dort angekommen, habe ich zuerst die Locale auf C gesetzt, um dann ohne Fehlermeldung in der Chroot die Locales installieren zu können. Direkt darauf folgen xterm (das installiert schon mal automatisch Xserver, etc mit) und wget. Beides ist nützlich für die spätere Installation von Steam. Außerdem installiere ich jockey-common und python-apt, weil Steam sonst später sudo startet, was ich nicht benutze(n möchte).
[#:] export LANG=C.UTF-8
[#:] export LANGUAGE=C
[#:] apt-get update
[#:] apt-get upgrade
[#:] apt-get install language-pack-de
[#:] export LANG=de_DE.UTF-8
[#:] export LANGUAGE=de_DE
[#:] apt-get install xterm wget
[#:] apt-get install jockey-common python-apt
Jetzt kann Steam auch schon installiert werden. Direkt danach werden die Abhängigkeiten nachinstalliert.
[#:] wget http://media.steampowered.com/client/installer/steam.deb
[#:] dpkg -i steam.deb
[#:] apt-get -f install
Damit ist Steam installiert. Um es nutzen zu können, muss die Chroot-Umgebung aber noch wissen, wo der Xserver zu finden ist. Um sicher zu gehen, dass es klappt, habe ich vor dem Start von Steam noch eben die DISPLAY-Variable gesetzt.
$: dchroot -d
[$:] export DISPLAY=:0
[$:] steam
Gratulation! Jetzt sollte Steam in der Chroot-Umgebung laufen. Allerdings ist das noch alles andere als komfortabel. Um nicht jedes Mal ins Terminal gehen zu müssen, legen wir ein kleines Skript an. Es liegt /usr/local/bin/do_dchroot und hat folgenden Inhalt:
#! /bin/bash
/usr/bin/dchroot -d "`echo $0 | sed 's|^.*/||'` $*
Dieses Skript ruft automatisch Befehle in der Chroot-Umgebung auf, die den Namen des Skripts haben. Ein direktes Aufrufen würde also „do_dchroot“ innerhalb der Chroot-Umgenung aufrufen. Das ist natürlich nicht nützlich, aber mit einem kleinen Kniff wird es sehr praktisch:
#: ln -s /usr/local/bin/do_dchroot /usr/local/bin/steam
Man kann Symlinks mit beliebigen Namen auf das Skript[1] verweisen lassen, die dann automatisch den Namen des Links im Chroot ausführen.
Wenn ich nichts vergessen haben sollte, müsste Steam jetzt genau so laufen, als wäre es normal unter Ubuntu installiert.
Update 11. Februar 2013: Einige Flüchtigkeitsfehler behoben.
- [1]Gefunden habe ich diese Idee bei Ubuntuforums↩
Au das ist fein, danke. Bin mir aber nicht sicher ob ich das als DebianDAU auch hinbekomme.
Wenn du Fragen hast, frag bitte. Vorab schon mal eine Anmerkung: Statt „echo -e“ und Schiebeoperatoren („>“) kann man natürlich auch nen Texteditor (z.B. nano, gedit oder kwrite) verwenden. Ich hab das hier einfach auf Copy&Paste optimiert, bzw. wollte das direkt kopieren können, um später vielleicht doch ein Script zu basteln.
Da man im chroot mit udev und ähnlichem beim Update Ärger kriegen kann:
# dpkg-divert –local –rename –add /sbin/initctl
# ln -s /bin/true /sbin/initctl
damit ist Ruhe (Quelle: http://debianforum.de/forum/viewtopic.php?f=37&t=141170)