Spotify on Debian Wheezy (testing)

As I have a premium account for Spotify I was disappointed when I discovered that the client does not install on a recent Debian testing installation.
It depends on libssl-0.9.8 but this is not available in Wheezy anymore. The problem is solved by adding a source for Debian stable additionally to the Spotify source to the file /etc/apt/sources.list:
    deb http://repository.spotify.com stable non-free
    deb http://ftp.debian.org/debian/ stable non-free

After fetching the new sources with

    apt-get update

run

    apt-get install spotify-client

to install Spotify 🙂

Ubuntu One on Debian Wheezy


PLEASE DO NOT USE THIS AT THE MOMENT. I’M WORKING ON A BETTER AND UPDATED VERSION.

I tried to update the electron repulsion integral handler libint in our
quantum chemical code AICCM. But the linking against gmp failed on my
Ubuntu 12.04 LTS. After discovering that it would build on a Debian Wheezy I
decided to install Debian on my computer. Since I am using the Ubuntu One cloud
service to sync all my data across various machines, including
smartphone and tablet, I was disappointed to find out that there are no
packages available for Debian. I did not want to abandon the service since I am a paid subscriber. It is only 29.99$ per year for 25GB.

After searching through forums and trying
several failed approaches to use the binary packages from Ubuntu 12.04 I
decided to build it from the sources.

In this blog entry I would like to give a detailed description how to build and install Ubuntu One on a Debian system. If you have any questions or comments please do not hesitate to contact me.

Create a subdirectory in your $HOME where you want to install Ubuntu One:

mkdir $HOME/UbuntuOne
cd $HOME/UbuntuOne

and install the dependencies:

 
apt-get install python-twisted pyqt4-dev-tools bzr python-lazr.restfulclient python-oauth python-pyinotify python-protobuf gnome-common gobject-introspection xutils-dev libnautilus-extension-dev libgconf2-dev libebook1.2-dev gnome-settings-daemon-dev python-twisted-names python-libproxy python-distutils-extra python-setuptools

There are two ways to obtain the source code (1b is recommended):

1a. From bazaar repository (latest development version)

bzr branch lp:configlue

bzr branch lp:dirspec
bzr branch lp:ubuntuone-client
bzr branch lp:ubuntuone-storage-protocol
bzr branch lp:ubuntu-sso-client

If you are using this option you need to neglect the version numbers in the following.

1b. Download the tarball from launchpad (latest stable version)

wget https://launchpad.net/dirspec/stable-3-0/3.0.0/+download/dirspec-3.0.0.tar.gz
wget https://launchpad.net/ubuntu-sso-client/trunk/1.3.3/+download/ubuntu-sso-client-1.3.3.tar.gz
wget https://launchpad.net/configglue/trunk/1.0.3/+download/configglue-1.0.3.tar.gz
wget https://launchpad.net/ubuntuone-storage-protocol/stable-3-0/3.0.0/+download/ubuntuone-storage-protocol-3.0.0.tar.gz
wget https://launchpad.net/ubuntuone-client/trunk/2.0.0/+download/ubuntuone-client-2.0.0.tar.gz

If you have downloaded the latest stable version you have to extract all downloaded archives

tar -zxvf configglue-1.0.3.tar.gz
tar -zxvf dirspec-3.0.0.tar.gz
tar -zxvf ubuntuone-client-3.0.1.tar.gz
tar -zxvf ubuntuone-storage-protocol-3.0.0.tar.gz
tar -zxvf ubuntu-sso-client-1.3.3.tar.gz

2. Set the $PYTHONPATH

As most parts of the Ubuntu One client are written in Python you need to add the folders to your  $PYTHONPATH either in the .zshrc if you are using the zshell or .bashrc if you are using bash shell. The files are in your $HOME directory. If you do not know what I am talking about you are using the bash shell. Then you need to replace .zshrc by .bashrc in the following.

So open the file in your favorite editor (I use vim):

vim ~/.zshrc

And add the following lines:
# Ubuntu One PYTHONPATH
export PYTHONPATH=”$HOME/UbuntuOne/configglue-1.0.3:$PYTHONPATH”
export PYTHONPATH=”$HOME/UbuntuOne/dirspec-3.0.0:$PYTHONPATH”
export PYTHONPATH=”$HOME/UbuntuOne/ubuntuone-client-3.0.1:$PYTHONPATH”
export PYTHONPATH=”$HOME/UbuntuOne/ubuntuone-storage-protocol-3.0.0:$PYTHONPATH”
export PYTHONPATH=”$HOME/UbuntuOne/ubuntu-sso-client-1.3.3:$PYTHONPATH”

The $PATH and $LD_LIBRARY_PATH variable needs modification, too. So also add this:

# Ubuntu One PATH

export PATH=”$HOME/UbuntuOne/ubuntu-sso-client-1.3.3/bin:$PATH”
export PATH=”$HOME/UbuntuOne/ubuntuone-client-3.0.1/bin:$PATH”
export LD_LIBRARY_PATH=”$HOME/UbuntuOne/ubuntuone-client-3.0.1/libsyncdaemon:$LD_LIBRARY_PATH”

Then reload the settings:

source ~/.zshrc

3. Build the client:

The next step is to build the client. Note that you do not need to run make install and pollute your $HOME 🙂

cd $HOME/UbuntuOne/configglue-1.0.3
python setup.py config build
cd $HOME/UbuntuOne/dirspec-3.0.0
python setup.py config build
cd $HOME/UbuntuOne/ubuntuone-storage-protocol-3.0.0
python setup.py config build
cd $HOME/UbuntuOne/ubuntu-sso-client-1.3.3
python setup.py config build

cd $HOME/UbuntuOne/ubuntuone-client-3.0.1
./configure && make
rehash

3. Get an auth token

Download this script from an Ubuntu One developer (Roman Yepishev) and run it to generate an auth key:

wget http://people.canonical.com/~roman.yepishev/us/ubuntuone-sso-login.py 
python ubuntuone-sso-login.py 
Ubuntu SSO Login: **your Ubuntu SSO Login**
Password: **your Ubuntu SSO Password**
oauth=hPQWPsH:rhOokmNiRuuoiHe... 

4. Copy the configuration file and add an auth token 

Create the directory and copy the config file of the server:

mkdir ~/.config/ubuntuone
cp $HOME/UbuntuOne/ubuntuone-client-2.0.0/data/syncdaemon.conf $HOME/.config/ubuntuone/syncdaemon.conf
Open the file and add the auth token:
[__main__]
oauth=hPQWPsH:rhOokmNiRuuoiHe... 

This part (3. & 4.) is best described here.

5. Wrapper files

To be able to run the client on a headless server or via ssh you need to create 3 files and put them to $HOME/bin and add it to your $PATH variable.

The files look like this:

u1sdtool-wrapper
#!/bin/bash
# u1sdtool wrapper for headless Ubuntu One
if [ -z “$DBUS_SESSION_BUS_ADDRESS” ]; then
    ENVVAR=”DBUS_SESSION_BUS_ADDRESS”
    eval $(ps xe | grep “[u]buntuone-syncdaemon.*$ENVVAR” |
           sed -E “s/.*($ENVVAR=[^ ]+).*/1/g” )
    if [ -z “$DBUS_SESSION_BUS_ADDRESS” ]; then
        # Ubuntu One is not running and we don’t have a dbus daemon
        eval `dbus-launch –sh-syntax`
    fi
    export DBUS_SESSION_BUS_ADDRESS
fi
exec u1sdtool “$@”
ubuntuone-syncdaemon-wrapper
#!/bin/bash
# wrapper for headless Ubuntu One
if [ -z “$DBUS_SESSION_BUS_ADDRESS” ]; then
    ENVVAR=”DBUS_SESSION_BUS_ADDRESS”
    eval $(ps xe | grep “[u]buntuone-syncdaemon.*$ENVVAR” |
           sed -E “s/.*($ENVVAR=[^ ]+).*/1/g” )
    if [ -z “$DBUS_SESSION_BUS_ADDRESS” ]; then
        # Ubuntu One is not running and we don’t have a dbus daemon
        eval `dbus-launch –sh-syntax`
    fi
    export DBUS_SESSION_BUS_ADDRESS
fi
exec ubuntuone-syncdaemon $HOME/.config/ubuntuone/syncdaemon.conf &
ubuntu-sso-login-wrapper
#!/bin/bash
# ubuntu-sso-login wrapper for headless Ubuntu One
if [ -z “$DBUS_SESSION_BUS_ADDRESS” ]; then
    ENVVAR=”DBUS_SESSION_BUS_ADDRESS”
    eval $(ps xe | grep “[u]buntuone-syncdaemon.*$ENVVAR” |
           sed -E “s/.*($ENVVAR=[^ ]+).*/1/g” )
    if [ -z “$DBUS_SESSION_BUS_ADDRESS” ]; then
        # Ubuntu One is not running and we don’t have a dbus daemon
        eval `dbus-launch –sh-syntax`
    fi
    export DBUS_SESSION_BUS_ADDRESS
fi
exec ubuntu-sso-login “$@”

6. Start the syncdeamon

ubuntuone-syncdaemon-wrapper

7. Use the u1sdtool-wrapper

This shows you the available commands:

u1sdtool-wrapper –help

These might be tho ones you need the most:

u1sdtool-wrapper –status
u1sdtool-wrapper –current-transfers

u1sdtool-wrapper –list-folders

Examples:

1. Add a folder to be synched (that is already in the cloud)

Type:

u1sdtool-wrapper –list-folders

Get:
Folder list:
  id=2ce31368-0a79-411e-XXX subscribed=False path=/home/mpei/Xoom
Type:
u1sdtool-wrapper –subscribe-folder=2ce31368-0a79-411e-XXX

Known issues:

1. network-manager / connection: With User Not Network

I have configured my network manually via config files. I got the connection status from u1sdtool-wrapper –status that I was not connected with the network. This was due to the fact that the network manager was telling everybody via dbus that the computer does not have an internet connection.
Uninstalling network-manager via 
apt-get purge network-manager

fixed the problem for me 🙂