Linux und die XBOX360

25 06 2012

Um seine teuren Original-DVDs nicht zu zerkratzen, ist es in meinen Augen immer sinnvoll, sich eine Sicherung zu brennen, mit der man arbeitet (gut, in dem Fall besser: spielt). Damit eine XBOX360 gebrannte DVDs liest ist eine Modifikation der Box notwendig. Hierauf werde ich nicht eingehen, ein gewisses Verständnis für die Sache selbst setze ich voraus. Ich möchte lediglich aufzeigen, dass kein Windows-PC notwendig ist um Sicherungen der Original-Datenträger zu verwenden.

ISOs prüfen und patchen
Das Tool für die Arbeit mit XBOX360 Sicherheitsbackups abgx360 gibt es praktischerweise auch als Linux Version. Hier kann man sich die aktuelle CLI Version (Kommandozeilenversion) herunterladen. Das Archiv entpacken wir und wechseln in das entsperchende Verzeichnis. Vor der Installation muss sichergestellt sein, dass libcurl und zlib installiert sind. Nachinstallieren kann man diese mittels

$ sudo apt-get install libcurl4-openssl-dev zlib1g-dev

Dann erstellt man das Binary mit

$ ./configure
$ make

Sobald dies abgeschlossen ist, können wir die abgx360 aufrufen. Ohne Parameter erhalten wir die Hilfe. Die Prüfung dauert je nach Power des PCs ein paar Minuten und sieht im Idealfall etwa so aus:

$ abgx360 datei.iso

[...]
Stealth files patched successfully!

Checking Game CRC... (press Q to cancel)
 Percent  Elapsed  Estimated   Time     Average     Current     Errors    Total
    Done     Time       Time   Left       Speed       Speed  Recovered  Retries
    100%     4:57       4:57   0:00   23.4 MB/s   27.5 MB/s

     AnyDVD style corruption was not detected
     Game CRC = 2F6129AD

Game partition CRC matches the verified ini!
AutoFix was successful!

Wer es lieber grafisch hat, lädt sich gleich die GUI Version herunter. Hierfür benötigen wir wxWidgets, das wir vor der Kompilierung installieren:

sudo apt-get install libwxgtk2.8-dev xterm

Die eigentliche Kompilierung funktioniert genau so wie bei der CLI Version:

$ configure

Sollte das schief gehen, werfen wir einen Blick in die Log-Datei:

$ cat config.log

Bricht die Installatin mit dem Fehler 77 ab, ist das ein Hinweis darauf, dass wir keinen C++ Compiler installiert haben

configure: exit 77

Wir können das nachholen mit

$ sudo apt-get install g++

Nun das Ganze nochmals von vorne. Hat configure funktioniert, folgt nur noch ein make.

$ make

Jetzt steht im Verzeichnis die abgx360gui Binary bereit. Diese können wir von der Befehlszeile starten oder richten uns händisch einen Menüeintrag ein.

$ abgx360gui

ISO Dateien brennen
Bei älteren Spielen funktioniert das noch wunderbar mit dem Befehlszeilentool growisofs. Den Layer-Break kann man damit manuell angeben, benötigt also keine .dvd Datei mehr.

growisofs -use-the-force-luke=dao -use-the-force-luke=break:1913760 -dvd-compat -Z /dev/dvd=[ISO-DATEI] -speed=2

Bei neueren Spielen ist man vom normalen Layer-Break bei 1913760 abgewichen. Solche Dateien passen auch nicht mehr auf einen normalen Rohling, weshalb wir diesen mittels truncate zunächst verkleinern müssen.

truncate --size=8547991552 datei.iso

Beispiel:

$ ls -l
-rw-rw-r-- 1 aaaaa aaaaa 8738846720 Jun 25 01:33 datei.iso
$ truncate --size=8547991552 datei.iso
$ ls -l
-rw-rw-r-- 1 aaaaa aaaaa 8547991552 Jun 25 01:33 dnl-gow3.iso

Da wir die Dateigröße modifiziert haben, passt nun auch der in solchen .dvd Dateien angegebene Layer-Break von 2133520 nicht mehr. Hier müssen wir den Break bei 2086912 setzen.

growisofs -use-the-force-luke=dao -use-the-force-luke=break:2086912 -dvd-compat -Z /dev/dvd=[ISO-DATEI] -speed=2

Das Ganze habe ich in ein kleines Shell Skript gepackt, das anhand der Dateigröße des Images erkennt, ob ein Truncate notwendig ist und den Brennvorgang dann entsprechend startet. Zur Sicherheit wird für die verkleinerte Datei ein temporäres Backup angelegt und nicht das Original verändert.

#!/bin/bash

# Wird kein Parameter angegeben, zeige die Hilfe an
if [ -z $1 ]; then
        echo "Aufruf: $0 [Imagedatei] "
        echo "Imagedatei: Die .iso Image Datei. Pflichtangabe."
        echo "DVD-Brenner: Das Device des DVD-Brenners. Wahlfrei. Standard: /dev/dvd"
        exit 1
else IMAGE=$1
fi

# Wurde ein Brenner uebergeben? Dann nimm diesen, sonst setze den Standard
if [ -z $2 ]; then BRENNER="/dev/dvd"
else BRENNER=$2
fi

# Ermitteln der ISO Groesse
DATEIGROESSE=`stat -c %s ${IMAGE}`
# Es handelt sich um eine uebergrosse Datei
if [ ${DATEIGROESSE} -eq "8738846720" ]; then
        IMAGE_KOPIE="trunc_"${IMAGE}
        head -c8547991552 <${IMAGE} >${IMAGE_KOPIE}     # Wir erstellen sicherheitshalber eine Kopie
        growisofs -use-the-force-luke=dao -use-the-force-luke=break:2086912 -dvd-compat -Z ${BRENNER}=${IMAGE_KOPIE} -speed=2   # Brennen
        if [ "$?" -eq "0" ]; then      # Wenn das Brennen funktioniert hat, kann die temporaere Datei wieder weg
                rm ${IMAGE_KOPIE}
        fi
else
        growisofs -use-the-force-luke=dao -use-the-force-luke=break:1913760 -dvd-compat -Z ${BRENNER}=${IMAGE} -speed=2 # Normales Brennen ohne Modifikaton des ISOs
fi

Diese Methode sollte bei einigen, aber nicht bei allen XGD3 ISOs funktionieren. Bei denen, die sich anschließend nicht starten lassen muss ein Brenner mit geänderter Firmware her, der DVDs überbrennen kann. Damit lassen sich dann auch solche Images brennen:

growisofs -use-the-force-luke=break:2133520 -Z /dev/dvd=[ISO-DATEI] -speed=2

ISO Dateien entpacken

Einfacher und vor allem schneller als sich die ISOs auf einen Rohling zu brennen ist es, diesen auf einer externen (bzw. auch internen) Festplatte abzuspielen. Der große Vorteil ist hier auch, dass man nicht mit Truncate oder Überbrennen hantieren muss. Die XBOX ist leider nicht in der Lage, die ISO Datei selbst zu lesen, von daher muss diese zunächst entpackt werden. Eine externe Platte, die man mittels USB an die Box anschließt muss unbedingt als FAT32 formatiert sein. Hierzu eignet sich der Gnome Partition Editor GParted.

exiso ist ein kleines Befehlszeilenprogramm für Windows. Eine vergleichbare native Lösung für Linux wäre mir nicht bekannt. Ist aber auch nicht zwingend notwendig, denn dieses läuft auch prächtig unter Wine. Mit dem Parameter -x entpacken wir die ISO Datei.

$ wine ./exiso.exe -x /Pfad/zur/datei.iso

Um Platz zu sparen sollte man im Anschluß das Verzeichnis $Systemupdate direkt wieder löschen.

Advertisements

Aktionen

Information

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s




%d Bloggern gefällt das: