In a passing comment it was suggested to me that it would be really great if the home fileserver offered some type of web-interface to find things. We’ve been aggregating downloaded files there for a while, and there’s been attempts made at categorization but this all really falls apart when you wonder “what does ‘productivity’ mean? And does this go under ‘Linux’ or some other thing?”
Since lately I’ve been wanting to get desktop search working on my actual desktops, via Gnome’s Tracker project and it’s tie-in to Nautilus and Nemo (possibly the subject of a future blog), it seemed logical to run it on the fileserver as an indexer for our shared directories - and then to tie some kind of web ui to that.
Unfortunately, Tracker is very desktop orientated - there’s no easy daemon mode for running it on a headless system out-of-the-box, but with a little tweaking you can make it work for you quite easily.
On my system I keep Tracker running as it’s own user under a system account. On Ubuntu you need to create this like so (using a root shell -
$ adduser --system --shell=/bin/false --disabled-login --home=/var/lib/tracker tracker $ adduser tracker root
Since tracker uses GSettings for it’s configuration these days, you need to su into the user you just created to actually configure the directories which should be indexed. Since this is a server, you probably just have a list of them so set it somewhat like the example below. Note: you must run the dbus-launch commands in order to have a viable session bus for dconf to work with. This will also be a requirement of Tracker later on.
$ su --shell /bin/bash $ eval `dbus-launch --sh-syntax` $ dconf write org/freedesktop/tracker/miner/files/index-recursive-directories "['/path/to/my/dir/1', '/path/to/my/dir/2', '/etc/etc']" $ kill $DBUS_SESSION_BUS_PID $ exit
Your Tracker user is now ready at this point. To start and stop the service, we use an Upstart script like the one below:
description "gnome tracker system startup script" author "wrouesnel" start on (local-filesystems and net-device-up) stop on shutdown respawn respawn limit 5 60 setuid tracker script chdir /var/lib/tracker eval `dbus-launch --sh-syntax` echo $DBUS_SESSION_BUS_PID > .tracker-sessionbus.pid echo $DBUS_SESSION_BUS_ADDRESS > .tracker-sessionbus /usr/lib/tracker/tracker-store end script post-start script chdir /var/lib/tracker while [ ! -e .tracker-sessionbus ]; do sleep 1; done DBUS_SESSION_BUS_ADDRESS=$(cat .tracker-sessionbus) /usr/lib/tracker/tracker-miner-fs & end script post-stop script # We need to kill off the DBUS session here chdir /var/lib/tracker kill $(cat .tracker-sessionbus.pid) rm .tracker-sessionbus.pid rm .tracker-sessionbus end script
Some things to focus on about the script: we launch and save the DBus session parameters. We’ll need these to reconnect to the session to run tracker related commands. The post-stop stanza is to kill off the DBus session.
You do need to explicitely launch
tracker-miner-fs in order for file indexing to work, but you don’t need to kill it explicitely - it will be automatically shutdown when Upstart kills
Also note that since tracker runs as the user
tracker it can only index files and directories which it is allowed to traverse, so check your permissions.
You can now start Tracker as your user with
start tracker. And stop it with
stop tracker. Simple and clean.
My plan for this setup is to throw together a Node.js app on my server that will forward queries to the tracker command line client - that app will be a future post when it’s done.