These are my notes on hacking the Kobo Aura HD to get it to read my books from Camlistore. You can run your own code on the Kobo Aura HD by using its software update mechanism. The Kobo guys have been kind enough to not bother with checking for signatures on the update packages! Anything in the archive .kobo/KoboRoot.tgz on the onboard flash will be extracted over /. You can craft your own updates by getting one of the [official](http://www.mobileread.com/forums/showthread.php?t=185660) ones and playing with it. (Mot importantly, you want to get the original /etc/init.d/rcS and modify it to launch camlistore, sshd, etc.) More information on hacking the Kobo on the [MobileRead Wiki](http://wiki.mobileread.com/wiki/Kobo_Touch_Hacking#Getting_the_Upgrade_File). Here we'll use $KOBOROOT to be the root of the update we're crafting. These instructions are as of version 3.1.1 of the Kobo firmware (Jan 2014). You'll need and arm toolchain for this. gcc-arm-linux-gnueabihf on Ubuntu works fine. ## build fuse get the kobo [kernel](https://github.com/kobolabs/Kobo-Reader), add CONFIG_FUSE_FS=m to .config, build with cd hw/imx507-aurahd/ tar xf linux-2.6.35.3.tar.gz cd linux-2.6.35.3 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules cp fs/fuse/fuse.ko $KOBOROOT/lib/modules/2.6.35.3-850-gbc67621+/extra built fusermount from the [fuse project](http://sourceforge.net/projects/fuse/files/fuse-2.X/) ./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc STATIC=1 CC=arm-linux-gnueabihf-gcc make cp util/fusermount $KOBOROOT/usr/local/bin ## build camlistore build camlistore for arm (GOARCH=arm) drop camlistored, cammount, camtool in $KOBOROOT/usr/local/bin ## configure camlistore The defualt configuration location is /.config/camlistore. my config looks like: server-config.json: { "listen": ":3179", "https": false, "auth": "localhost", "identity": "B24C86EE", "identitySecretRing": "/root/.config/camlistore/identity-secring.gpg", "kvIndexFile": "/mnt/onboard/.camli/camli-index.kvdb", "blobPath": "/mnt/onboard/.camli/blobs", "shareHandler": "true", "sourceRoot": "/root/src/camlistore.org/", "mysql": "", "mongo": "", "postgres": "", "sqlite": "", "s3": "", "replicateTo": [] } client-config.json: { "servers": { "camlihouse": { "auth": "localhost", "default": true, "server": "http://localhost:3179/" } }, "ignoredFiles": [ ".DS_Store" ], "identity": "B24C86EE" } Before the nickel command in /etc/init.d/rcS add: PATH=$PATH:/usr/local/bin ifconfig lo up modprobe fuse HOME=/root camlistored & HOME=/root cammount /mnt/camli/ & mount --bind /mnt/camli/roots/books /mnt/sd/camli I store all my books in a mutable directory in camlistore called 'books'. (Change the bind command if you call yours something different.) To get the Kobo to see them we bind mount /mnt/camli/roots/books to somewhere on the device looks for files. (/mnt/sd or /mnt/onboard) It seems the Kobo only indexes the files when a usb cable is connected or an sd card is inserted. As a workaround, we bind mount our books root on the sd card whenever it's inserted. This mean adding mount --bind /mnt/camli/roots/books /mnt/sd/camli to the end on the 'add' segment in /usr/local/Kobo/udev/sd [full file](sd) Now package tar czf KoboRoot.tgz $KOBOROOT You can now add your books to camlistore using your prefered method (mount it on your desktop, webinterface, sync, etc.) pop out the sd card and pop it back in. The Kobo should start indexing your ebooks. # extra: ssh get [dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) add /usr/local/bin to PATH in options.h build dropbear with: ./configure --host=arm-linux-gnueabihf \ --disable-zlib --disable-largefile --disable-loginfunc --disable-shadow \ --disable-utmp --disable-utmpx --disable-wtmp --disable-wtmpx \ --disable-pututline --disable-pututxline --disable-lastlog \ CC=arm-linux-gnueabihf-gcc STATIC=1 CC=arm-linux-gnueabihf-gcc SCPPROGRESS=0 PROGRAMS="dropbear dropbearkey scp dbclient" make cp dropbear dropbearkey scp dbclient $KOBOROOT/usr/local/bin add somewhere towards the end of /etc/init.d/rcS: /usr/local/bin/dropbear -E Add you keys to $KOBOROOT/root/.ssh/authorized_keys making sure both root/ and .ssh/ are only user writable. To get keys to work you'll need to change to root user's home directory to /root (by default it's /) You can do this by first telneting and then setting up ssh or just add this to /etc/init.d/rcS and remove it after you reboot once: ed /etc/passwd << EOF s_root::0:0:root:/:/bin/sh_root::0:0:root:/root:/bin/sh w q EOF Happy hacking.