Amazon was less than understanding about my request for source code for their MP3 downloader. They were prompt and courteous in their response; that alone is rare. They don’t release source, and gosh, why don’t I use a Fedora release on which the downloader has been tested? Well, first, because it’s Fedora 9, two releases ago.
I was tempted to engage in an e-mail exchange with them, in which I’d point out that:
- Nobody cares about the Amazon MP3 Downloader for its own sake.
- The MP3 downloader is a gateway to making purchases from Amazon.
- Given the above, it is to Amazon’s distinct advantage to make the downloader available to as many platforms as possible.
- People who run Linux routinely upgrade to the latest, greatest, at the earliest opportunity.
- A legion of package maintainers would be happy to recompile and package the downloader for newer Linux releases.
I still think Amazon should open source the downloader. But, to do business with them on Fedora 11, do the following; these instructions are for 32 bit systems; they should be easily modifiable to work on 64 bit installations:
- Download amazonmp3.rpm from Amazon’s MP3 download site. Choose the Fedora 9 version.
- Snag boost-1.34.1-17.fc10.i386.rpm and openssl-0.9.8b-8.i686.rpm from the Fedora archives.
- Become root.
- Create a work directory; we’ll call it ~/work.
- Copy the boost, openssl, and amazonmp3 RPMS to the work directory.
- Change directories to the work directory.
- rpm2cpio boost-1.34.1-17.fc10.i386.rpm > boost.cpio
- rpm2cpio openssl-0.9.8b-8.i686.rpm >ssl.cpio
- cpio -ivd < boost.cpio
- cpio -ivd < ssl.cpio
- cd lib
- cp libcrypto.so.0.9.8b /lib/libcrypto.so.6
- cp libssl.so.0.9.8b /lib/libssl.so.6
- cd ../usr/lib
- cp libboost_date_time.so.1.34.1 /usr/lib/libboost_date_time.so.3
- cp libboost_signals.so.1.34.1 /usr/lib/libboost_signals.so.3
- cp libboost_iostreams.so.1.34.1 /usr/lib/libboost_iostreams.so.3
- cp libboost_thread-mt.so.1.34.1 /usr/lib/libboost_thread-mt.so.3
- cd ../../
- rpm -ivh –nodeps amazonmp3.rpm
- Put thumb on nose.
- Wave remaining fingers toward Amazon.
I’ve downloaded one MP3 from Amazon since doing this, as a test run1. The MP3 was placed in ~/Music/artist/album_name/track_name. So, in my test case, the MP3 wound up in:
/home/knelson/Music/Amazon MP3/Country Joe And The Fish/Together/10 – Cetacean.mp3
And, it plays. I use Songbird, which gladly imports tracks from the aforementioned directory.
It would be trivial to hack up Amazon’s RPM, and include the libraries; or alternatively, to gin up another RPM which contains these libs. I’ll leave that for another day.
-k-
1

![Validate my Atom 1.0 feed [Valid Atom 1.0]](http://www.quietvoice.org/wp-images/valid-atom.png)
5 Comments
Hey, great hack, and you did it just to give money to the man, too. That qualifies as a TWAC moment in my book. And you get to keep your crown, but just this once.
I’ll be writing up about my own TWAC/Linux hack moment soon. I hacked Android onto a Palm TX. I had to take the current Palm TX kernel and hack in by hand the Android kernel patches. Took me DAYS. LOL
Sadly it doesn’t seem to work on 64-bit. The rpm must have been built as 32-bit. The error I’m getting is:
“amazonmp3: error while loading shared libraries: libgtkmm-2.4.so.1: cannot open shared object file: No such file or directory”.
That lib is in /usr/lib64 but it’s not picked up. I’ve tried linking /usr/lib/libgtkmm-2.4.so.1 to the one in lib64 but then I get:
“amazonmp3: error while loading shared libraries: libgtkmm-2.4.so.1: wrong ELF class: ELFCLASS64″
Oh well, I’ve got Fedora 9 on the laptop so I’ll download with that. Shame on Amazon though.
Chris:
Good point. It is a 32-bit RPM, so you’d need the 32-bit version of libgtkmm-2.4.so.1. THe 64-bit version would not function with amazonmp3, and would produce an error. The 32 bit version of libgtkmm should install in /usr/lib, and be just fine. You would need 32 bit versions of all the libraries that amazonmp3 requires.
I’ve not tried this, but it *should* work.
-k-
Fedora 11 x64 Amazon MP3
This worked, but I don’t have any other machines to verify. I hope it can help:
yum install libcurl.i586 gtkmm24.i586 gtk-nodoka-engine.i586 libcanberra-gtk2.i586 PackageKit-gtk-module.i586 bug-buddy.i586
wget mirrors.kernel.org/fedora/releases/9/Fedora/i386/os/Packages/boost-1.34.1-13.fc9.i386.rpm
mv boost-1.34.1-13.fc9.i386.rpm /
cd /
rpm2cpio boost-1.34.1-13.fc9.i386.rpm | cpio -ivd ./usr/lib/libboost_thread-mt.so.1.34.1 ./usr/lib/libboost_iostreams.so.1.34.1 ./usr/lib/libboost_signals.so.1.34.1 ./usr/lib/libboost_date_time.so.1.34.1
ln -s /usr/lib/libboost_thread-mt.so.1.34.1 /usr/lib/libboost_thread-mt.so.3
ln -s /usr/lib/libboost_iostreams.so.1.34.1 /usr/lib/libboost_iostreams.so.3
ln -s /usr/lib/libboost_signals.so.1.34.1 /usr/lib/libboost_signals.so.3
ln -s /usr/lib/libboost_date_time.so.1.34.1 /usr/lib/libboost_date_time.so.3
http://www.amazon.com/gp/dmusic/help/amd.html?&forceos=LINUX
(use browser to accept and download to /software)
rpm -Uvh amazonmp3.rpm –nodeps
ln -s /usr/lib/libcrypto.so.0.9.8k /usr/lib/libcrypto.so.6
ln -s /usr/lib/libssl.so.0.9.8k /usr/lib/libssl.so.6
One Trackback
[...] Commenter Chris points out that my previous instructions assumed a 32-bit version of Fedora. And he is correct; the Amazon MP3 downloader is a 32-bit application. I see no reason it shouldn’t work on a 64-bit OS, provided the 32 bit version of certain libraries are present; these are the libs of interest: libgtkmm-2.4.so.1 => /usr/lib/libgtkmm-2.4.so.1 (0×03321000) libgdkmm-2.4.so.1 => /usr/lib/libgdkmm-2.4.so.1 (0×032d9000) libatkmm-1.6.so.1 => /usr/lib/libatkmm-1.6.so.1 (0×077b2000) libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0 (0×004f5000) libpangomm-1.4.so.1 => /usr/lib/libpangomm-1.4.so.1 (0×03685000) libcairomm-1.0.so.1 => /usr/lib/libcairomm-1.0.so.1 (0×02ff4000) libglibmm-2.4.so.1 => /usr/lib/libglibmm-2.4.so.1 (0×07675000) libsigc-2.0.so.0 => /usr/lib/libsigc-2.0.so.0 (0×070ec000) libgdk-x11-2.0.so.0 => /usr/lib/libgdk-x11-2.0.so.0 (0×02e49000) libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0×00350000) libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0×0036f000) libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0×00900000) libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0×00110000) libcairo.so.2 => /usr/lib/libcairo.so.2 (0×00156000) libgobject-2.0.so.0 => /lib/libgobject-2.0.so.0 (0×00cb7000) libgmodule-2.0.so.0 => /lib/libgmodule-2.0.so.0 (0×00d18000) libdl.so.2 => /lib/libdl.so.2 (0×00b72000) libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0×00bab000) libcurl.so.4 => /usr/lib/libcurl.so.4 (0×001d1000) libssl.so.6 => /lib/libssl.so.6 (0×03c4d000) libboost_date_time.so.3 => /usr/lib/libboost_date_time.so.3 (0×00949000) libboost_signals.so.3 => /usr/lib/libboost_signals.so.3 (0×00969000) libboost_iostreams.so.3 => /usr/lib/libboost_iostreams.so.3 (0×0097d000) libboost_thread-mt.so.3 => /usr/lib/libboost_thread-mt.so.3 (0×0095a000) libpthread.so.0 => /lib/libpthread.so.0 (0×00b79000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0×03ccd000) libm.so.6 => /lib/libm.so.6 (0×00b48000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0×0398a000) libc.so.6 => /lib/libc.so.6 (0×009d4000) libcrypto.so.6 => /lib/libcrypto.so.6 (0×039b7000) libgiomm-2.4.so.1 => /usr/lib/libgiomm-2.4.so.1 (0×07714000) libgio-2.0.so.0 => /lib/libgio-2.0.so.0 (0×00d53000) libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0×03958000) libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0×00233000) libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0×002c8000) libX11.so.6 => /usr/lib/libX11.so.6 (0×0038c000) libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0×0021e000) libpng12.so.0 => /usr/lib/libpng12.so.0 (0×002fe000) libz.so.1 => /lib/libz.so.1 (0×00b96000) libXrender.so.1 => /usr/lib/libXrender.so.1 (0×00223000) libXext.so.6 => /usr/lib/libXext.so.6 (0×00325000) libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0×008f6000) libXi.so.6 => /usr/lib/libXi.so.6 (0×00335000) libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0×0033f000) libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0×004bb000) libXcomposite.so.1 => /usr/lib/libXcomposite.so.1 (0×008fb000) libXdamage.so.1 => /usr/lib/libXdamage.so.1 (0×0090d000) libpixman-1.so.0 => /usr/lib/libpixman-1.so.0 (0×00dcc000) /lib/ld-linux.so.2 (0×009b0000) libidn.so.11 => /lib/libidn.so.11 (0×03b15000) libssh2.so.1 => /usr/lib/libssh2.so.1 (0×03b48000) libldap-2.4.so.2 => /usr/lib/libldap-2.4.so.2 (0×00e12000) librt.so.1 => /lib/librt.so.1 (0×00cac000) libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0×03b76000) libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0×03baf000) libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0×03ca7000) libcom_err.so.2 => /lib/libcom_err.so.2 (0×03b71000) libssl3.so => /lib/libssl3.so (0×041c2000) libsmime3.so => /lib/libsmime3.so (0×04199000) libnss3.so => /lib/libnss3.so (0×04036000) libplds4.so => /lib/libplds4.so (0×03fbe000) libplc4.so => /lib/libplc4.so (0×0400b000) libnspr4.so => /lib/libnspr4.so (0×03fc3000) libresolv.so.2 => /lib/libresolv.so.2 (0×03afa000) libbz2.so.1 => /lib/libbz2.so.1 (0×041f4000) libselinux.so.1 => /lib/libselinux.so.1 (0×00c8c000) libexpat.so.1 => /lib/libexpat.so.1 (0×00d2a000) libxcb.so.1 => /usr/lib/libxcb.so.1 (0×00cfa000) libXau.so.6 => /usr/lib/libXau.so.6 (0×00d1e000) libssl.so.8 => /usr/lib/libssl.so.8 (0×03f36000) libcrypto.so.8 => /usr/lib/libcrypto.so.8 (0×03dbe000) liblber-2.4.so.2 => /usr/lib/liblber-2.4.so.2 (0×04012000) libsasl2.so.2 => /usr/lib/libsasl2.so.2 (0×004c5000) libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0×03ba3000) libkeyutils.so.1 => /lib/libkeyutils.so.1 (0×03ca2000) libnssutil3.so => /lib/libnssutil3.so (0×0417e000) libcrypt.so.1 => /lib/libcrypt.so.1 (0×00910000) libfreebl3.so => /lib/libfreebl3.so (0×00e58000) [...]