Skip to content

SimCity 3000 und chroot

Seit einiger Zeit konnte ich kein Sim City mehr spielen, weil die Unterstützung für linuxthreads aus der glibc raus geflogen ist und durch nptl ersetzt wurde. Da dieses mittlerweile uralte Spiel diese allerdings braucht und auch nicht davon auszugehen ist, daß jemand das mal neu kompilieren wird, da die Firma Loki schon vor mittlerweile 5 Jahren eingegangen ist, muß man sich irgendwie anders behelfen. Deswegen folgt eine kleine Erklärung, wie man sich ein chroot mit Gentoo baut, in das man dann einfach hinein wechseln kann, um dort zu spielen:
Folgerndermaßen bin ich vorgegangen:

Mit dd erzeuge ich mir ein leeres File, etwa 3 GB groß. Dieses wird mein chroot-Image, das ich auf ein loop-device mounten kann. Man könnte natürlich auch einfach in ein Verzeichnis installieren, aber so habe ich das Image und kann es einfach "transportieren", indem ich es z.B. auf meine externe Platte lege, und es läßt sich auch sehr viel besser backupen, meiner Meinung nach. Aber das kann jeder machen, wie er/sie Kleingeld hat. ;-)

Also: su, mkdir chroot, cd chroot, dd if=/dev/zero of=chroot.img bs=1M count=3G, mkfs.ext3 chroot.img, mkdir mnt, mount -o loop chroot.img mnt

Jetzt habe ich von einem der Gentoo-Mirrors das 2006.1-Stage3-Archiv für ein no-nptl-System heruntergeladen. Gibt es nur für 586er vorkomiliert, aber das stört ja nicht weiter. Dieses entpacken wir und mounten dann - mit meinem kleinen Script, das wir später sowieso noch brauchen werden - erst mal alle wichtigen Verzeichnisse, bevor wir chroot-en.

Script "gotochroot":
#!/bin/bash

xhost +
cd /root/chroot
mount -o loop chroot.img mnt
cd mnt
mount -t proc none proc
mount -o bind /dev dev
mount -o bind /tmp tmp
mount -o bind /usr/portage usr/portage
chroot . /bin/bash

umount usr/portage
umount tmp
umount dev
umount proc
cd ..
umount mnt
xhost -

Also: cd mnt, mv /von/wo/auch/immer/stage3-i586-2006.1-no-nptl.tar.bz2 ., tar -xpjvf stage3-i586-2006.1-no-nptl.tar.bz2, mkdir usr/portage, cd .., chmod u+x gotochroot, ./gotochroot, env-update, source etc/profile

Jetzt sind wir im chroot. Wir passen die make.conf an:

CFLAGS="-O2 -pipe -fomit-frame-pointer"
CHOST="i586-pc-linux-gnu"
CXXFLAGS="${CFLAGS}"
MAKEOPTS="-j2"
#FEATURES="ccache parallel-fetch"
CCACHE_SIZE="1G"
LINGUAS="de en us"
LANGUAGE="de_DE@euro"
USE="-kde -gnome"
VIDEO_CARDS="vesa"

...und überprüfen, daß die make.profile tatsächlich auf ../usr/portage/profiles/default-linux/x86/no-nptl zeigt. Dann emergen wir ein paar Libs, die wir so brauchen, hauptsächlich Kram, der mit X11 zu tun hat. Wir benötigen kein komplettes X, es reichen die Libs. Weil ich faul war und mir die nicht selber zusammen suchen und einzeln emergen wollte, habe ich einfach einmal ein emerge -av lib-compat-loki laufen lassen. Das installiert auf jeden Fall alles, was man braucht (wahrscheinlich eher zu viel), und hat den Vorteil, daß man auch gleich die Loki-Libs hat, mit denen mal evtl. die dynamisch gelinkte Version von sc3u ans Laufen bringen kann.

Also: nano etc/make.conf, Kram von oben kopieren, l etc/make.profile, evtl. anpassen, emerge -av lib-compat-loki

Nachdem wir ungefähr 110 Pakete installiert haben (ich sag doch, sicher viel zu viel), installieren wir jetzt noch das Spiel (oder kopieren, wie in meinem Fall, einfach die alte Installation - oder mountet diese mit -o bind wie all die anderen Verzeichnisse, was sich auch leicht in das gotochroot-Script einfügen ließe). Dann legen wir noch ein Shell-Script namens "startgame" an:

#!/bin/bash
su player -c "/usr/local/games/SC3U/sc3u -w -intro:off"

...und machen es startbar. (Das Intro-Video funktioniert bei mir nicht. Weiß nicht, warum. Deshalb habe ich es abgeschaltet.) Dann legen wir noch einen "normalen" Benutzter an:

Also: chmod u+x startgame, useradd -d /home/player -g users -G sound -m -s /bin/bash player

Jetzt können wir mit ./startgame spielen. Oder wir verlassen das chroot und legen eine Kopie von gotochroot an, z.B. play, in der wir die Zeile mit dem chroot ändern in chroot . ./startgame. Dann können wir einfach spielen, indem wir die ./play als root aufrufen.

So, und wer jetzt noch behauptet, das wäre viel zu viel Aufwand für ein einziges, blödes Spiel, der hat definitiv recht! ;-) Aber eigentlich hat es jetzt länger gedauert, diese Anleitung zu schreiben, als die Befehle tatsächlich auszuführen (wenn man mal von der Zeit absieht, die das Kompilieren braucht - wer die auch noch sparen möchte, installiert sich einfach irgendeine alte Suse oder Fedora oder irgendwas, damit geht es ja (wahrscheinlich) auch, hat aber den Nachteil, daß man noch mehr Kram installiert, den man gar nicht braucht.).

Zum Abschluß kann man noch, wenn man möchte, mit einem df -h überprüfen, wie viel Platz die Installation wirklich braucht (wahrscheinlich nicht mehr als 2 GB inkl. des Spiels selber) und mit resize2fs das Image entsprechend verkleinern. Fertig.

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Noch keine Kommentare

Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA

Formular-Optionen

Kommentare werden erst nach redaktioneller Prüfung freigeschaltet!