Starting with the 2007 generation of iPods, libgpod needs an additional configuration step to correctly modify the iPod content. libgpod needs to know the so-called iPod "firewire id", otherwise the iPod won't recognize what libgpod wrote to it and will behave as if it's empty.
touch_ip -- denotes the IP address that is assigned to your iPod Touch (e.g. 192.168.0.27).
touch_media -- denotes the mount point to your iPod Touch (i.e. the directory the iPod is mounted on).
To make effective use of the following you have to jailbreak your iPod Touch first (in order to access it via SSH). This document won't go into detail on this topic. One possibility to do this using a computer that runs Microsoft Windows (XP) can be found at:
http://iphone.cricblogs.com/one-click-ipod-touch-jailbreak-for-windows-by-msbasher/
Install and compile libgpod and gtkpod from subversion. See Compiling and Installing|here for details.
Configure libgpod. The '--prefix' option will make sure that is not installed globally but locally within your home directory (note: replace '~' by the absolute path to your home directory):
~/libgpod$ ./autogen.sh --prefix=~/local
Otherwise make sure all dependencies are met ('gtk-doc' is a candidate likely to be missing, proper version of automake is another).
Repeat this process for gtkpod ('PKG_CONFIG_PATH' make sure it builds on the freshly compiled version of libgpod; again, replace '~' by absolute path to your home directory):
~/gtkpod$ PKG_CONFIG_PATH=~/local/lib/pkgconfig ./autogen.sh --prefix=~/local
~/gtkpod$ make && make install
Assuming that everything went well you should be able to start gtkpod:
~$ LD_LIBRARY_PATH=~/local/lib ~/local/bin/gtkpod
You won't be able to fully use it at this point so close it for now.
Connect your iPod Touch via USB (to your Linux machine) and issue the command:
sudo lsusb -v | grep -i iSerial
This should print something similar to this:
iSerial 3 fd98145617c113dc15ab151601001ff12354b139 [ ... ]
The first 16 characters constitute the FirewireGUID, i.e. in this example the FwGUID is:
fd98 1456 17c1 13dc
Mount your iPod Touch via:
sudo sshfs root@touch_ip:Media touch_media/ -o allow_other
Go to the directory 'iTunes_Control' and create (if it does not already exist) a directory named 'Device':
~/touch_media/iTunesControl$ mkdir Device; cd Device ~/touch_media/iTunesControl/Device$ echo "FirewireGuid: 0xfd98145617c113dc" > SysInfo
Test if libgpod is able to retrieve the FWGUID by changing into the 'tests' subdirectory of libgpod's source directory and runnning:
./test-firewire-id touch_media/
With your iPod Touch still mounted start up gtkpod once more:
~$ LD_LIBRARY_PATH=~/local/lib ~/local/bin/gtkpod
You should now be able to sync songs to your iPod Touch. After syncing is complete go into "Music" on your iPod Touch: The songs you have just synced won't show up at this point. To make them appear press and hold the "Home"-Button until the springboard is reloaded. Going to "Music" now will show your music.
Don't forget to unmount it after you're completely done.
Tutorial compiled by staciemonroe (tobias kreisel gmail com)
There are two ways to set up the iPod to make libgpod able to find its firewire id.
The 1st one is mostly automated. First, make sure you have libsgutils installed before running configure/autogen.sh. If you built libgpod without it, install it and run configure/make/make install. You should now have an ipod-read-sysinfo-extended tool available. Run it with the iPod device path (eg /dev/sda) and the iPod mount point (eg /media/ipod) as arguments. This may require root privileges. ipod-read-sysinfo-extended will read an XMLfile from the iPod and write it as /media/ipod/iPod_Control/Device/SysInfoExtended. See http://ipodlinux.org/Device_Information for more details about the method used.
Having that file is enough for libgpod to figure out the iPod firewire id.
The 2nd method requires more manual intervention. First, you need to get your firewire id manually. To do that, run "sudo lsusb -v | grep -i Serial" (without the "") with your iPod plugged in, this should print a 16 character long string like 00A1234567891231. For an iPod Touch, this number will be much longer than 16 characters, the firewire ID is constituted by the first 16 characters. Once you have that number, create/edit /media/ipod/iPod_Control/Device/SysInfo (if your iPod is mounted at /media/ipod). Add to that file the line below:
FirewireGuid: 0xffffffffffffffff
(replace ffffffffffffffff with the string you obtained at the previous step and don't forget the trailing 0x before the string)
Save that file, and you should be all set. Be careful when using apps which lets you manually specify which iPod model you own, they may overwrite that file when you do that. So if after doing that libgpod still seems to write invalid content to the iPod, double-check the content of that SysInfo file to make sure the FirewireGuid line you added isn't gone. If that happens, read it to the end of the file, and make sure libgpod rewrite the iPod content.
Once that is done, if you compiled libgpod from source, you can test that libgpod can find the firewire ID on your iPod by running
libgpod/tests/test-firewire-id /ipod/mount/point