Logo

gnuPod project Dokumentation - Version 0.2

(C) Adrian Ulrich
http://www.blinkenlights.ch/cgi-bin/fm.pl?get=ipod




Inhalt

  1. Copyright Information
  2. Was ist gnuPod?
  3. Andere iPod-für-Linux Projekte
  4. Installation
  5. iTunes und gnuPod
  6. Probleme und Lösungen
  7. Fehler und Einschränkungen



Copyright Information

iPod, iTunes, Mac, Macintosh, iBook are trademarks of Apple Computer, Inc., registered in the U.S. and other countries.
Windows is a trademark of Microsoft, registered in the U.S. and other countries.


Was ist gnuPod?

gnuPod war die erste freie Möglichkeit den Apple iPod unter einem anderen System als MacOS zu verwenden.

Das gnuPod Projekt wurde um April 2002 (mit längeren Unterbrüchen) gestartet. Wir (bzw Adrian ;) ) 'hackten' die iTunesDB (die wichtigste Datei auf deinem iPod!) und sind nun in der Lage jene Datei zu schreiben :).
Es wurden zwar noch nicht 100% der iTunesDB entschlüsselt, aber wir wissen genug um unsere eigene, brauchbare Datei zu schreiben und somit den iPod unter Linux (und co.) zu betreiben :).
Vor der Verwendung von gnuPod rate ich zum Lesen des Kapitels Fehler und Einschränkungen


Andere iPod-für-Linux Projekte

(Status: 28. Sept. 2002)

SyncPod
Erschien komischer weise genau einen Tag nach GnuPod 0.1..
Das Ding ist auch in Perl geschrieben und kann einen Ordner mit dem iPod synchen.
Playlistsupport solls auch haben.
Da SyncPod aber die vorhandene iTunesDB nicht beachtet, arbeitet es wohl sehr schlecht mit anderen Programmen wie iTunes zusammen.



Ipod-on-linux
Ein anderes GPL'ed Projekt um den iPod unter Linux benutzbar zu machen.
Programmiert ist das ganze in C (..und wird eine lib sein?)
Derzeit findet sich ein iPod Backuptool (?) und eine Firmware upgrader auf der Seite des Projektes.
Im CVS stehen desweiteren Tools zum download um die iTunesDB zu schreiben (welche ich aber nicht kompilieren konnte..)
Das Projekt hat auch interessante Dokumentation zum iTunesDB format.
Leider hatten wir schon um die 90% entschlüsselt als wir auf diese Seite stiessen, dennoch half die Dokumentation einige Unsicherheiten aus der Welt zu schaffen.





Tex9 ipod-clu
Closed source und nur für x86 (PPC-Linux Benutzer haben also keine iPods?)
Auch als Plugin für eine 'iTunes-like' Applikation zu haben. Kostet 10$.


Installation

Anforderungen

Um gnuPod zu verwenden werden folgende Dinge benötigt:


Installation der gnuPod Tools

Zuerst sollte man sich vergewissern, dass die benötigten Perlmodule (MP3::Info, File::Copy, Unicode::String und XML::Parser) auf dem System installiert und lauffähig sind.
Unter Debian sollte ein
apt-get install libfile-ncopy-perl
apt-get install libmp3-info-perl
apt-get install libxml-parser-perl
apt-get install libunicode-string-perl
genügen. Ansonsten hilft das Cpan.
Danach wäre man eigentlich soweit, die gnuPod-tools nach /usr/local/bin zu kopieren:
$ su
Password:
# cd gnupod-tools/
# cp *.pl /usr/local/bin/
..fertig!
Achtung für die, welche von gnuPod 0.1 auf 0.2 upgraden! Bitte das 'README' im tar lesen!


Firewire testen

Der Kernel muss natürlich FireWire unterstützen.
Entwickelt wurde gnuPod auf einem iBook2 mit Kernel 2.4.20-pre5 und dort läuft FireWire prima, sollte aber auch auf z.B. 2.4.18 funktionieren... also:
1. Kernel Source holen und konfigurieren
Benötigt bei der konfiguration:
..danach wird der Kernel wie gewohnt kompiliert und installiert.
Nach der installation kann man mit folgenden Kommandos FireWire testen, bzw. den iPod ansprechen:
iPod noch nicht anschliessen!
# modprobe ohci1394
# insmod sbp2
iPod nun anschliessen
Danach sollte der iPod ansprechbar sein und zwar als /dev/sda (..wenn man sonst keine SCSI Geräte besitzt). Testen ob das ganze geht kann man z.B. mit cat /dev/sda2 > /dev/null
Wenn der iPod rumrödelt geht alles, sollte Linux sich beklagen über das Device sollte ein rmmod sbp2 && insmod sbp2 helfen.. FireWire ist halt noch 'Experimental'. (..wenn der iPod aber mal angesprochen werden kann geht alles prima, ohne kernelpanics und co.)


Mac-iPod in einen Win-iPod verwandeln

Sollten sie einen Windows-iPod besitzen, ODER ihr Betriebssystem kann HFS+ schreiben (Darwin kann es, LINUX NICHT!) können sie dieses Kapitel überspringen.


Weiter zum Thema:
Um einen Mac (HFS+)iPod unter Linux zu betreiben muss er mit FAT32 neu formatiert werden. Viel kann dabei nicht passieren, ich habe meine iPod Festplatte mehrere male vollkommen gelöscht und konnte den iPod immer wieder mit dem OSX iPod-Software upgrader zu neuem Leben erwecken.

Was wir brauchen Diese Aktion wird alles auf ihrem iPod löschen, backup ist also angebracht. Ok, backup gemacht? Auf gehts!
Fast vergessen: Sollte ihr iPod dadurch zum dekorativen klotz werden: Pech.. ich fühle mich dafür nicht verantwortlich. JA, es könnte etwas schiefgehen und daran bin ich NICHT schuld, basta!
..wobei eigentlich nichts passieren sollte.. (siehe oben, was ich meinem iPod antat)


Ein Traum von fdisk..
Für unsere Aktion benötigen wir ein FDISK für DOS Partitionen.
Sollten sie dieses Vorhaben unter PPC-Linux durchführen, so ist ihr 'fdisk' ziemlich sicher ein mac-fdisk und kann daher keine DOS Partitionen erstellen, ist also somit unbrauchbar.
Sollten sie unter x86-Linux arbeiten ist ihr FDISK okay und sie können bei '..nun wirds kritisch' weiterfahren (Sie haben doch MAC-Partition support im kernel?)
PPC Linux-user besorgen sich das 'DOS' fdisk, es befindet sich im 'util-linux' Source, welchen wir von ftp://ftp.kernel.org/pub/linux/utils/util-linux/ beziehen können (oder apt-get source util-linux unter Debian).

Nach dem Download kompilieren wir es schnell auf die 'quick-n-dirty' art:
tar -xjvf util-linux-X.XXx.tar.bz2
cd util-linux-X.XXx
./configure
cd fdisk
make
cp fdisk /usr/sbin/pc-fdisk
Auf keinen Fall machen wir ein 'make install', wir wollen nur das fdisk für PCs, der Rest ist uns egal!

..nun wirds kritisch
..nun legen wir aber wirklich los, zuerst Updaten wir auf Version 1.2 der Firmware, dies geschiet unter MacOS. (sorry)
Nachdem der iPod mit 1.2 wieder läuft stöpseln wir ihn wieder unter Linux ein und laden den FireWire kram, danach kommt der gefährliche Teil ;)

Firmware backup erstellen
# dd if=/dev/sda2 of=/root/firmware
# md5sum /root/firmware
09f2a78b00a17dbedc74397a6da47db0 firmware
Sollte die md5sum mit der obigen übereinstimmen ist soweit alles gut gegangen (..ansonsten: oho?)

iPod neu partitionieren
Hier kommt der kritischste Teil, also Augen auf beim lesen!
dd if=/dev/zero of=/dev/sda MAC partitionen killen, dd kann nach gut 5 Sekunden mit CTRL+C abgebrochen werden
rmmod sbp2 && insmod sbp2 sbp2 neu laden - sonst meint Linux ev. dass der iPod noch die Mac Partition hat
pc-fdisk /dev/sda fdisk starten


Command (m for help): n neue Partition anlegen
Command action
   e extended
   p primary partition (1-4)
p wir wollen eine primary
Partition number (1-4): 1 nummer
First cylinder (1-608, default 1): einfach ENTER drücken
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-608, default 608): 5S achtung: 5S .. S wie Super

Command (m for help): n
Command action
   e extended
   p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (6-608, default 6): 6 ist okay, bzw. notwendig.. einfach ENTER drücken
Using default value 6
Last cylinder or +size or +sizeM or +sizeK (6-608, default 608): ENTER drücken
Using default value 608

Command (m for help): t typ ändern
Partition number (1-4): 1
Hex code (type L to list codes): 0 die untenstehende Warnung ist uns egal
Type 0 means free space to many systems
(but not to Linux). Having partitions of
type 0 is probably unwise. You can delete
a partition using the `d' command.
Changed system type of partition 1 to 0 (Empty)

Command (m for help): t
Partition number (1-4): 2 hier kommen dann die Daten hin
Hex code (type L to list codes): b b=FAT32
Changed system type of partition 2 to b (Win95 FAT32)


Command (m for help): w Schreiben der neuen partition, kann etwas dauern..
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

#dd if=/root/firmware of=/dev/sda1 hier wird die vorhin gesicherte firmware auf sda1 geschrieben
65536+0 Records ein
65536+0 Records aus

#mkfs.vfat -F 32 -n "LUNIX" /dev/sda2 formatieren der Datenpartition, LUNIX ist dabei der iPod Name
#rmmod sbp2 modul entladen
..danach wird der iPod ausgesteckt und gebetet ;)
Der iPod sollte normal booten, keine Songs mehr draufhaben und unter 'Über' Format: Windows anzeigen.(scrollen)
Herzlichen Glückwunsch zum FAT32 iPod! :)

iTunes kann ohne Probleme auch mit einem FAT32 iPod umgehen, und wie gesagt: der iPod software updater kann aus dem FAT32 iPod wieder einen HFS+ iPod machen..


Wechseln zu gnuPod

Ihr iPod ist (oder war) nun unter ihrem Lieblingsbetriebssystem beschreibbar (was für Linux heisst, dass ihr iPod FAT32 formatiert ist)
Nun bereiten wir unseren iPod auf gnuPod vor.
Zuerst Mounten wir den iPod nach z.B. /mnt/ipod
Zuerst firewire kram laden, siehe 'Firewire testen'
mkdir /mnt/ipod
mount /dev/sda2 /mnt/ipod
/dev/sda2 gilt natürlich nur, wenn sonst keine SCSI-Festplatten im Computer sind, 'dmesg' hilft beim suchen des iPod devices.
Sollte sich mount über ein 'ungültiges Device' beschwehren: wie gesagt: rmmod sbp2 && insmod sbp2.


Mein iPod ist leer, bzw. frisch formatiert
Sollten sie ihren Mac-iPod zu einem Win-iPod umgewandelt haben (..oder ihr iPod ist einfach ein Fabrikneuer Win-iPod) müssen sie folgendes Kommando ausführen: (Wir gehen in diesem Dokument immer davon aus, dass der iPod unter /mount/ipod gemounted ist!)
gnupod_INIT.pl /mnt/ipod
Es erscheint ein warnhinweis. Mit CTRL+C können sie das Programm abbrechen, mit ENTER (empfohlen) machen sie weiter.
Dieser Befehl erstellt die vom iPod und gnuPod benötigte Verzeichnisstruktur auf der Festplatte des iPod.

Mein iPod hat noch MP3s drauf die ich gerne behalten würde
Kein problem!
mkdir /mnt/ipod/iPod_Control/.gnupod
tunes2pod.pl /mnt/ipod/iPod_Control/iTunes/iTunesDB > /mnt/ipod/iPod_Control/.gnupod/GNUtunesDB
Dieses Kommando konvertiert ihre aktuelle iTunesDB in ein gnuPod-file.
Sollten sie ihren iPod nicht ausschliesslich mit gnuPod betreiben, werden sie desöfteren dieses Kommando gebrauchen (mkdir natürlich nur das erste Mal). Die gnuPod-tools werden ihnen sagen, wenn es nötig ist.


gnuPod im Alltagsgebrauch

Ihr iPod ist nun bereit für gnuPod, also benutzen wir es!
Wir werden im nachfolgenden Beispiel 2 Ordner mit MP3s auf den iPod laden und einige Dateien löschen, auf gehts!

1. iPod mounten
Als Erstes muss der iPod immer gemountet werden
Firewire kram laden
mount /dev/sda2 /mnt/ipod


2. 2 Ordner mit MP3s auf den iPod laden
gnupod_addsong.pl /mnt/ipod seiken_densetsu_2/* ico_melody_in_the_mist/*
Dieser Befehl lädt alle MP3s die sich in den Ordnern 'seiken_densetsu_2' und 'ico_melody_in_the_mist' befinden auf den iPod, welcher unter '/mnt/ipod' gemountet sein muss.
gnupod_addsong.pl wechselt nicht in weitere Unterordner, sollte sich also in ico_melody_in_the_mist/ noch ein weiterer Ordner befinden, so wird der Inhalt des Unterordners ignoriert. (Man kann aber beliebige mit '*' und '?' hantieren)
Sollten sich in den Ordnern Dateien befinden welche schon auf dem iPod vorhanden sind, so werden jene einfach ignoriert (gnupod_addsong.pl wird eine entsprechende Meldung ausgeben).

3. Nach Dateien auf dem iPod suchen
In gnuPod 0.2 existiert kein Suchprogramm.
Die Datei /ipod/mountpoint/iPod_Control/.gnupod/GNUtunesDB hält im Normalfall alle MP3s und Playlists auf dem iPod. Es handelt sich seit gnuPod 0.2 um eine XML Datei.

4. Songs Entfernen
gnuPod verwaltet alle Songs anhand einer eindeutigen ID.
Öffnen sie die 'GNUtunesDB' in einem Texteditor, suchen sie die Einträge die sie entfernen möchten (id="XX") und schliessen sie die Datei (ohne sie zu verändern!)
Um Beispielsweise die Songs mit der ID 688 und 693 zu entfernen, muss folgender Befehl ausgeführt werden
gnupod_delete.pl /mnt/ipod 688 693

Dieser Befehl wird die Songs mit der ID 688 und 693 vom iPod welcher unter /mnt/ipod gemountet ist entfernen.
Sollten die Songs in einer Playlist eingetragen gewesen sein, so entfernt gnuPod diese Einträge automatisch.

5. Playlist erstellen
Die Datei doc/gnutunesdb.example ist eine Beispieldatei mit 3 Playlists.
Der Syntax ist selbsterklärend.
Um eine Playlist für ihren iPod zu erstellen müssen sie die Datei /ipod/mountpoint/iPod_Control/.gnupod/GNUtunesDB entsprechend bearbeiten und nach dem sichern wieder mktunes.pl aufrufen.

6. iPod umounten
Sie sind nun fertig mit dem hochladen/entfernen von Dateien, bereiten wir unseren iPod aufs abstöpseln vor:
mktunes.pl /mnt/ipod
umount /mnt/ipod
rmmod sbp2
Der Befehl 'mktunes.pl' ist sehr wichtig. gnuPod griff bei den anderen Aktionen nicht direkt auf die iTunesDB zu, sondern immer auf das gnuPod-file. Der iPod versteht aber nur die iTunesDB und diese muss vor jedem unmounten geupdatet werden!
Vergessen sie den 'mktunes.pl' befehl, so sind die MP3s zwar auf ihrem iPod, aber der iPod selber weiss nichts von deren Existenz.

umount und rmmod erklären sich hingegen von selbst.


iTunes und gnuPod

gnuPod kann mit iTunes koexistieren. (Ob es auch mit XPlay und co. geht? Keine Ahnung, sollte aber..)
Was beachtet werden muss:
Nachdem sie ihren iPod mit beispielsweise iTunes beschrieben haben, müssen die das gnuPod-file aktualisieren. (Machen sie dies nicht, so verweigern die gnuPod-tools ihren Dienst!).
Das Ganze spielt sich so ab:
iPod mounten
tunes2pod.pl /mnt/ipod/iPod_Control/iTunes/iTunesDB > /mnt/ipod/iPod_Control/.gnupod/GNUtunesDB
Danach ist ihr iPod wieder für gnuPod bereit!


Probleme und Lösungen

Ich kann meinen iPod nicht mounten! Fehlermeldung: mount: /dev/sda2 is not a valid block device
Wir gehen davon aus, dass der (angeschlossene!!) iPod wirklich unter /dev/sda ansprechbar ist, und der FireWire Port an ihrem Computer auch unterstützt wird.
Wie schon im Dokument erwähnt: Firewire ist noch ein bisschen buggy. In dieser Situation hilft aber normalerweise ein erneutes laden des sbp2 Moduls:
rmmod sbp2 && insmod sbp2


Die gnuPod-tools sagen:
Error: Cant write to your gnuPod-file
did you run 'gnupod_INITpod.pl' ?


Ich bekomme die Meldung:
Error: your gnuPod-file is older than your iTunesDB! (Last update not done with gnuPod?)...

Ihre iTunesDB ist neuer als das gnuPod File. Der iPod wurde mit einem anderen Programm als gnuPod aktualisiert, stimmts? ;)
Sie müssen ihr gnuPod-file mit der iTunesDB synchen:
tunes2pod.pl /mnt/ipod/iPod_Control/iTunes/iTunesDB > /mnt/ipod/iPod_Control/.gnupod/GNUtunesDB
(mountpoint kann abweichen!)

Ich bekomme einen XML Parser fehler!
Oho, da hat wohl gnupod_addsong.pl scheisse gebaut..
Mailen sie mir bitte ihre GNUtunesDB

Ich habe Songs hochgeladen, der iPod zeigt sie aber nicht an!
Wurde mktunes.pl erfolgreich ausgeführt?
Ansonsten, bitte mailen sie mir ihre GNUtunesDB



Meine Frage wurde nicht beantwortet
RTFM und dann Mailen


Fehler und Einschränkungen

gnuPod ist noch in Entwicklung, allerdings durchaus für den Alltagsgebrauch verwendbar.

gnuPod hat allerdings einige Einschränkungen:


Viel spass und Rechtschreibfehler ignorieren wir einfach.. ich bin fertig :)
Achja, wenn jemand lust hat an gnuPod mit zu arbeiten, dieses Dokument zu bereinigen oder übersetzen (Englisch!), einfach mailen an pab at blinkenlights.ch