DeDRM and KindleUnpack are packages designed to extract the contents from ebooks purchased through Amazon, with multi-platform point-and-click GUI wrappers. (DeDRM includes decrypters for many other platforms as well, but I don’t need any of them)
My Japanese-book-hacking workflow doesn’t play nicely with point-and-click, and now that I’ve gone to the effort of resurrecting and updating it to work with modern versions of Perl and TeXLive, I thought it was time to dig out the core of the extraction tools and repackage them in a format more useful to me.
(updated to collapse into one RUN statement and remove the build
tools, reducing the final image size to 48.7 MB, most of which is in
# docker build -t dekindle:latest . FROM alpine:latest ENV DEDRM https://github.com/apprenticeharper/DeDRM_tools/archive/v6.6.3.tar.gz ENV DDIR DeDRM_tools-6.6.3/dedrm_src ENV KUNPACK https://github.com/kevinhendricks/KindleUnpack/archive/v082.tar.gz ENV KDIR KindleUnpack-082/lib RUN apk update \ && apk upgrade \ && apk add curl build-base python2 python2-dev py2-pip \ && pip --no-cache-dir install pycrypto pylzma \ && curl -sLS $DEDRM | tar xzf - $DDIR \ && mv $DDIR D \ && curl -sLS $KUNPACK | tar xzf - $KDIR \ && mv $KDIR K \ && apk del curl build-base python2-dev py2-pip \ && rm -rf /var/cache/apk/* \ && mkdir /in /out COPY dekindle.ash /root ENTRYPOINT /root/dekindle.ash $@
Since my ebooks were downloaded for eInk Kindles tied to both the US and Japan Amazon stores, I’m passing in their serial numbers for decryption. Different methods are available for Android, Windows, and Mac clients, but they rely on now-obsolete clients, while you can still get decryptable files directly from Amazon’s web sites if you have a physical Kindle (“Download and transfer via USB”).
Output is rather verbose at the moment, for testing.
#!/bin/ash if [ -z "$2" ]; then echo Usage: dekindle serial file1.azw3 ... exit 1 fi INDIR=/in OUTDIR=/out NODRM=_nodrm KINDLE_SERIAL=$1 shift for i in "$@"; do NAME=$(basename "$i" .azw3) python D/k4mobidedrm.py -s $KINDLE_SERIAL "$INDIR/$NAME.azw3" $OUTDIR python K/kindleunpack.py -i "$OUTDIR/$NAME$NODRM.azw3" "$OUTDIR/$NAME" done
…and here’s the wrapper that runs the docker container and tells it to
decrypt and unpack all the files into the
out subdirectory of the
#!/bin/bash if [ -z "$2" ]; then echo Usage: dekindle.sh kindle-serial file1.azw3 ... exit 1 fi mkdir -p out docker run --rm -v $(pwd):/in -v $(pwd)/out:/out \ dekindle:latest -- "$@"
Works great, and as a bonus, I discovered that some of the purchases I made back in 2013 have updated versions available, so I was able to quickly unpack them all.
Markdown formatting and simple HTML accepted.
Sometimes you have to double-click to enter text in the form (interaction between Isso and Bootstrap?). Tab is more reliable.