Content:
This backend is not yet in the official distribution packages, pls use a svn checkout for now
Ampache
is a Web-based Audio file manager. It is implemented with MySQL, and PHP. It allows you to view, edit, and play your audio files via the web. (more...)
Together with Coherence it forms a powerful DLNA/UPnP MediaServer, distributing the cultivated media database there to other UPnP clients on the local network.
An Ampache release newer or equal to 3.4.0 is required.
Detailed setup for new users
1.Setup Ampache and have it running, there is an excellent guide for Ububtu/Debian systems (http://ubuntuforums.org/showthread.php?t=546007)
2. First thing that needs to be done is to turn on access control in Ampache. In order to turn it on you must edit (as root) the /config/ampache.cfg.php and set access_control to true.
(change the section - ;access_control = "false" to access_control = "true" - Don't forget to uncomment the line!)
While you are in that file enable xml_rpc = "true", as without that Coherence won't be able to speak to Ampache.
3.Login to Ampache to define ACL (Access Control Lists-http://ampache.org/wiki/config:acl) by going to Menu>Admin>Add ACL
and add the following three ACL's (see below,defining a start/end IP for clients who can access Ampache according to your system
in the example below the server is 10.0.0.100 and the clients are between 10.0.0.200 and 10.0.0.254
Notice: you only need to supply a password for the 3rd (rpc) ACL.
a.**Interface Access for Clients**
| User | Type | Start | End | Key | Level |
| All | Interface | 10.0.0.200 | 10.0.0.254 | All |
**Streaming Access for Clients**
| User | Type | Start | End | Key | Level |
| All | Streaming | 10.0.0.200 | 10.0.0.254 | All |
**All Users RPC ACL**
| User | Type | Start | End | Key | Level |
| All | RPC | 10.0.0.200 | 10.0.0.254 | mypassword | All |
4.after defining ACL's log out and back in to see that everything works...(if not disable access_control (switch back to "false") and login to see what's wrong)
5.Issue the following command to see if Coherence can connect to ampache:
User@htpx:~$ coherence --plugin=backend:AmpacheStore,url:http://ampache-host/ampache/server/xml.server.php,key:YOURPASS_FROM_RPC_ACL WARN coherence Oct 22 09:31:44 Coherence UPnP framework version 0.5.8 starting... (coherence/base.py:251) WARN webserver Oct 22 09:31:44 WebServer on port 59615 ready (coherence/base.py:106) WARN mediaserver Oct 22 09:31:45 Ampache MediaServer (Ampache storage) activated (coherence/upnp/devices/media_server.py:521)
and you should get a message showing you that the ampache server is connected!
Don't use localhost there in the url, as with that any other client not on the same host won't be able to connect.
QuickStart:
Assuming you have a working Ampache setup and Coherence already installed on your system too,
the only thing you need is fire up a Coherence instance, tell it to connect to your Ampache
via its XML API and supply the defined password for authentication.
coherence --plugin=backend:AmpacheStore,url:http://ampache-host/ampache/server/xml.server.php,key:yourpassword
You should see now on your UPnP client a new MediaServer named Ampache, making available the media there in the folders
- Ampache
- all tracks - depending on your media db this might put a bit of pressure upon your client ;-)
- albums
- artists
- playlists - work in progress
- genres - work in progress
If you want to change the name from Ampache to something more meaningful to you, just add name:YourName to that comma separated argument list above.
Like in that example:
coherence --plugin=backend:AmpacheStore,name:YourName,url:http://ampache-host/ampache/server/xml.server.php,key:yourpassword
Same thing if you have defined a user in your Ampache access control. Add it like user:youruser to the plugin arguments.
Configuration
The Ampache backend accepts these options:
- name:
- the name this backend should show up on your UPnP clients, defaults to Ampache
- url:
- the url to access your Ampache's XML-API
- key
- the password to acccess the XML-API
- user
- an optional user that is defined for the XML-API (???)
- version
- optional, to define a different UPnP device version for that backend
Examples
Old config file:
[[AmpacheStore]]
name = MyAmpache
url = http://ampache-host/ampache/server/xml.server.php
key = yourpassword
New config file:
<plugin active="yes"> <backend>AmpacheStore</backend> <name>MyAmpache</name> <url>http://ampache-host/ampache/server/xml.server.php</url> <key>yourpassword</key> </plugin>
Python code:
coherence.add_plugin('AmpacheStore', name='MyAmpache', url='http://ampache-host/ampache/server/xml.server.php', key='yourpassword')
DBus:
coherence_service = dbus.SessionBus().get_object('org.Coherence','/org/Coherence') coherence_service.add_plugin('AmpacheStore', {'name':'MyAmpache, 'url'='http://ampache-host/ampache/server/xml.server.php', 'key'='yourpassword'}, dbus_interface='org.Coherence', reply_handler=add_plugin_callback, error_handler=error_callback)
Commandline:
coherence --plugin=backend:AmpacheStore,url:http://ampache-host/ampache/server/xml.server.php,key:yourpassword
Multicast routing
You must setup a multicast route for UPnP messages, in this example with eth0 as the interface you want them to travel over.
route add -net 239.0.0.0 netmask 255.0.0.0 eth0
Ender's Notes
First off, the Ubuntu repositories have version 3.3.3.5 of Ampache, as of today (June 13, 2008). Also, as mentioned above, you'll need an SVN version of coherence. Together that means you'll need to be prepared to manually install them both, or upgrade.
You can find instructions on upgrading Ampache at http://ampache.org/bugs/wiki/Upgrading. Instructions on how to download and install coherence SVN can be found at the DocumentationDepartment. I would recommend, if you use Ubuntu, to download the package
first and then to upgrade coherence. That's how I did it. Downloading the package ensures that your package manager handles the dependencies, and installing the SVN on top of the Ubuntu packages is really quite easy. If I remember correctly,
it involved running python setup.py build then sudo python setup.py install and that was it.
The first thing to do is to create an ACL for Ampache. I would highly recommend creating the ACLs first before you enable access control lists. The reason for this is that as soon as you enable access control, your access control lists will be enforced.
Access control lists manage all access, including the web interface. So, if you haven't created a list that allows you to access the web interface and you enable access control lists, you won't be able to change your settings anymore outside of a text editor.
You can create access control lists via the web interface by going to Admin->Access Control. Different versions of Ampache do the administration interface differently, so be aware of that. You can find information on that at
http://ampache.org/bugs/wiki/ConfigAcl. I would recommend that you create at least an access control for the web interface, then one for XML-RPC. Do not tie the XML-RPC to a specific user - that makes life easier later.
Once you have that done, you'll need to make sure that Ampache is properly set up for XML-RPC. It is disable several different ways be default, so you'll need to be careful to handle them all. The first thing to do is enable XML-RPC in the configuration
file and access_control lists. This can be done by changing the following lines in your ampache.cfg.php file (On Ubuntu's version, 3.3.3.5, that's found in /usr/share/ampache/www/config. In the vanilla install of Ampache 3.4 it's /usr/share/ampache/config).
... access_control = "true" ... xml_rpc = "true" ...
It can also be handy to enable debugging for Ampache. To do so, find the pertinent lines in the config file: one for enabling debugging, one for the debugging level, another for the log location.
Now that you have that done, you're ready to try to connect coherence to Ampache. I would recommend that you do the following command your first time
COHERENCE_DEBUG=ampache_store:4 coherence --plugin=backend:AmpacheStore,url:http://ampache-host/ampache/server/xml.server.php,key:yourpassword
What this does is start coherence with a high debug level so that it prints out debugging information. As a side note, the first time I ran this I got an error about --plugin being an invalid parameter. That's because I had the wrong version of coherence :).
You MUST have an SVN version. Remember that.
Now, the first time I ran coherence I didn't have the debugging information. My output looked like this:
coherence --plugin=backend:AmpacheStore,url:http://192.168.15.99/ampache/server/xml.server.php,key:xml-rpc-key
WARN coherence Jun 12 12:06:28 Coherence UPnP framework version 0.5.7 starting... (coherence/base.py:250)
WARN webserver Jun 12 12:06:28 WebServer on port 40673 ready (coherence/base.py:106)
WARN ampache_store Jun 12 12:06:31 error parsing ampache answer SyntaxError('no element found: line 1, column 0',) (coherence/backends/ampache_storage.py:498)
WARN ampache_store Jun 12 12:06:31 error calling ampache <twisted.python.failure.Failure <type 'exceptions.SyntaxError'>> (coherence/backends/ampache_storage.py:546)
WARN mediaserver Jun 12 12:06:31 backend not installed, MediaServer activation aborted - error parsing ampache answer SyntaxError('no element found: line 1, column 0',) (coherence/upnp/devices/media_server.py:433)
WARN service_client Jun 12 12:06:32 error requesting'http://192.168.15.1:80/http://192.168.15.1/upnp/WANCmmonIFConfig.xml' (coherence/upnp/core/service.py:291)
WARN service_client Jun 12 12:06:32 error requesting'http://192.168.15.1:80/http://192.168.15.1/upnp/Layer3Forwarding.xml' (coherence/upnp/core/service.py:291)
WARN service_client Jun 12 12:06:32 error requesting'http://192.168.15.1:80/http://192.168.15.1/upnp/WANEthernetLinkConfig.xml' (coherence/upnp/core/service.py:291)
WARN service_client Jun 12 12:06:32 error requesting'http://192.168.15.1:80/http://192.168.15.1/upnp/WANIPConnection.xml' (coherence/upnp/core/service.py:291)
This was confusing for several reasons. First, I naturally read the errors in reverse order, since that's what programmers usually do unless they're compiling :). At the bottom you'll notice that coherence tried to connect to
'http://192.182.15.1:80/http://192.168.15.1/upnp/WANIPConnection.xml' I thought this meant that I had specified the URL incorrectly, since it was appending the address to my gateway's address. Very odd. Well, I tried several different
variations on the command I gave you above to see if any of them would fix the warning output so that it was connecting to the proper IP address. Waste of time. You'll notice that the address isn't even the address I specified at the
command line. I don't know why, but for some reason coherence wants to connect to a couple of different places on your network, including your gateway. This became apparent when I un-commented out a line in one of the python files that shows
all of the addresses coherence tries to grab. Here's the same output with that enabled:
coherence --plugin=backend:AmpacheStore,url:http://192.168.15.99/ampache/server/xml.server.php,key:xml-rpc-key
WARN coherence Jun 12 12:06:28 Coherence UPnP framework version 0.5.7 starting... (coherence/base.py:250)
WARN webserver Jun 12 12:06:28 WebServer on port 40673 ready (coherence/base.py:106)
getPage http://192.168.15.200:8089/PrintBasic1/scpd.xml
getPage http://192.168.15.200:8089/PrintEnhanced1/scpd.xml
getPage http://192.168.15.103:80/RenderCtl.xml
getPage http://192.168.15.103:80/ConnMgr.xml
getPage http://192.168.15.103:80/AvTransport.xml
WARN ampache_store Jun 12 12:06:31 error parsing ampache answer SyntaxError('no element found: line 1, column 0',) (coherence/backends/ampache_storage.py:498)
WARN ampache_store Jun 12 12:06:31 error calling ampache <twisted.python.failure.Failure <type 'exceptions.SyntaxError'>> (coherence/backends/ampache_storage.py:546)
WARN mediaserver Jun 12 12:06:31 backend not installed, MediaServer activation aborted - error parsing ampache answer SyntaxError('no element found: line 1, column 0',) (coherence/upnp/devices/media_server.py:433)
getPage http://192.168.15.1:80/http://192.168.15.1/upnp/Layer3Forwarding.xml
getPage http://192.168.15.1:80/http://192.168.15.1/upnp/WANCmmonIFConfig.xml
getPage http://192.168.15.1:80/http://192.168.15.1/upnp/WANEthernetLinkConfig.xml
getPage http://192.168.15.1:80/http://192.168.15.1/upnp/WANIPConnection.xml
WARN service_client Jun 12 12:06:32 error requesting'http://192.168.15.1:80/http://192.168.15.1/upnp/WANCmmonIFConfig.xml' (coherence/upnp/core/service.py:291)
WARN service_client Jun 12 12:06:32 error requesting'http://192.168.15.1:80/http://192.168.15.1/upnp/Layer3Forwarding.xml' (coherence/upnp/core/service.py:291)
WARN service_client Jun 12 12:06:32 error requesting'http://192.168.15.1:80/http://192.168.15.1/upnp/WANEthernetLinkConfig.xml' (coherence/upnp/core/service.py:291)
WARN service_client Jun 12 12:06:32 error requesting'http://192.168.15.1:80/http://192.168.15.1/upnp/WANIPConnection.xml' (coherence/upnp/core/service.py:291)
You'll notice here that coherence tries to connect to several strange addresses, including my router and two different computers on the network, none of which I specified. I don't know why coherence is doing that, but it doesn't matter,
it didn't help my troubleshooting. The only line that really mattered was:
WARN ampache_store Jun 12 12:06:31 error parsing ampache answer SyntaxError('no element found: line 1, column 0',) (coherence/backends/ampache_storage.py:498)
That told me that Ampache wasn't responding with any XML. It was returning an empty page. A quick chat in the #Ampache channel in IRC found me a dev that explained the whole version thing, which wasn't obvious when I started this.
Now you know though, and now you have the correct Ampache version. When I got the right Ampache version and ran the same command I got
COHERENCE_DEBUG=ampache_store:4 coherence --plugin=backend:AmpacheStore,url:http://192.168.15.99/server/xml.server.php,key:xml-rpc-key
getPage http://192.168.15.200:8089/PrintBasic1/scpd.xml
getPage http://192.168.15.200:8089/PrintEnhanced1/scpd.xml
getPage http://192.168.15.1:80/http://192.168.15.1/upnp/Layer3Forwarding.xml
getPage http://192.168.15.1:80/http://192.168.15.1/upnp/WANCmmonIFConfig.xml
getPage http://192.168.15.1:80/http://192.168.15.1/upnp/WANEthernetLinkConfig.xml
getPage http://192.168.15.1:80/http://192.168.15.1/upnp/WANIPConnection.xml
getPage http://192.168.15.103:80/RenderCtl.xml
getPage http://192.168.15.103:80/ConnMgr.xml
getPage http://192.168.15.103:80/AvTransport.xml
INFO ampache_store Jun 13 07:09:31 auth_request 'http://192.168.15.99/server/xml.server.php?action=handshake&auth=12507ca9b4c1df7366ebc77d69f13073×tamp=1213362571&version=350001' (coherence/backends/ampache_storage.py:558)
INFO ampache_store Jun 13 07:09:32 got_auth_response ('<?xml version="1.0" encoding="utf-8" ?>\n<root>\n\t<auth><![CDATA[ca2cac064200f1401f6e9437b6f4cc92]]></auth>\n\t<api><![CDATA[340001]]></api>\n\t<update><![CDATA[Wed, 11 Jun 2008 08:31:40 -0600]]></update>\n\t<add><![CDATA[Wed, 11 Jun 2008 08:39:40 -0600]]></add>\n\t<songs><![CDATA[2102]]></songs>\n\t<albums><![CDATA[145]]></albums>\n\t<artists><![CDATA[838]]></artists>\n\t<genres><![CDATA[46]]></genres>\n\t<playlists><![CDATA[0]]></playlists>\n\n</root>\n', {'content-length': ['438'], 'content-disposition': ['attachment; filename=information.xml'], 'x-powered-by': ['PHP/5.2.4-2ubuntu5.1'], 'server': ['Apache/2.2.8 (Ubuntu) DAV/2 SVN/1.4.6 PHP/5.2.4-2ubuntu5.1 with Suhosin-Patch mod_ssl/2.2.8 OpenSSL/0.9.8g'], 'connection': ['close'], 'date': ['Fri, 13 Jun 2008 13:09:31 GMT'], 'content-type': ['text/xml; charset=UTF-8']}) (coherence/backends/ampache_storage.py:494)
INFO ampache_store Jun 13 07:09:32 ampache returned auth token 'ca2cac064200f1401f6e9437b6f4cc92' (coherence/backends/ampache_storage.py:527)
INFO ampache_store Jun 13 07:09:32 Songs: 2102, Artists: 838, Albums: 145, Playlists 0, Genres 46, Tags 0 (coherence/backends/ampache_storage.py:528)
Unhandled error in Deferred:
Traceback (most recent call last):
File "/usr/lib/python2.5/site-packages/twisted/internet/posixbase.py", line 228, in mainLoop
self.runUntilCurrent()
File "/usr/lib/python2.5/site-packages/twisted/internet/base.py", line 561, in runUntilCurrent
call.func(*call.args, **call.kw)
File "/usr/lib/python2.5/site-packages/twisted/internet/defer.py", line 239, in callback
self._startRunCallbacks(result)
File "/usr/lib/python2.5/site-packages/twisted/internet/defer.py", line 304, in _startRunCallbacks
self._runCallbacks()
--- <exception caught here> ---
File "/usr/lib/python2.5/site-packages/twisted/internet/defer.py", line 317, in _runCallbacks
self.result = callback(self.result, *args, **kw)
File "/usr/lib/python2.5/site-packages/louie/plugin.py", line 103, in called
return receiver(*args, **kw)
File "/usr/lib/python2.5/site-packages/Coherence-0.5.7-py2.5.egg/coherence/upnp/devices/media_server.py", line 444, in init_complete
self.connection_manager_server = ConnectionManagerServer(self)
File "/usr/lib/python2.5/site-packages/Coherence-0.5.7-py2.5.egg/coherence/upnp/services/servers/connection_manager_server.py", line 37, in __init__
service.ServiceServer.__init__(self, 'ConnectionManager', self.device.version, backend)
File "/usr/lib/python2.5/site-packages/Coherence-0.5.7-py2.5.egg/coherence/upnp/core/service.py", line 347, in __init__
self.init_var_and_actions()
File "/usr/lib/python2.5/site-packages/Coherence-0.5.7-py2.5.egg/coherence/upnp/core/service.py", line 585, in init_var_and_actions
tree = ET.parse(desc_file)
File "<string>", line 45, in parse
File "<string>", line 22, in parse
exceptions.IOError: [Errno 2] No such file or directory: '/usr/lib/python2.5/site-packages/Coherence-0.5.7-py2.5.egg/coherence/upnp/core/xml-service-descriptions/ConnectionManager350001.xml'
Traceback (most recent call last):
File "/usr/lib/python2.5/site-packages/twisted/internet/posixbase.py", line 220, in run
self.mainLoop()
File "/usr/lib/python2.5/site-packages/twisted/internet/posixbase.py", line 228, in mainLoop
self.runUntilCurrent()
File "/usr/lib/python2.5/site-packages/twisted/internet/base.py", line 533, in runUntilCurrent
f(*a, **kw)
File "/usr/lib/python2.5/site-packages/twisted/internet/base.py", line 343, in stop
self.fireSystemEvent("shutdown")
--- <exception caught here> ---
File "/usr/lib/python2.5/site-packages/twisted/internet/base.py", line 393, in fireSystemEvent
d = callable(*args, **kw)
File "/usr/lib/python2.5/site-packages/Coherence-0.5.7-py2.5.egg/coherence/base.py", line 389, in shutdown
backend.unregister()
File "/usr/lib/python2.5/site-packages/Coherence-0.5.7-py2.5.egg/coherence/upnp/devices/basics.py", line 223, in unregister
self.coherence.remove_web_resource(uuid[5:])
File "/usr/lib/python2.5/site-packages/Coherence-0.5.7-py2.5.egg/coherence/base.py", line 510, in remove_web_resource
del self.children[name]
exceptions.KeyError: '2754bc10-ec1f-4942-9f9c-bfe3f7a694d8'
The first important section is this:
INFO ampache_store Jun 13 07:09:31 auth_request 'http://192.168.15.99/server/xml.server.php?action=handshake&auth=12507ca9b4c1df7366ebc77d69f13073×tamp=1213362571&version=350001' (coherence/backends/ampache_storage.py:558)
INFO ampache_store Jun 13 07:09:32 got_auth_response ('<?xml version="1.0" encoding="utf-8" ?>\n<root>\n\t<auth><![CDATA[ca2cac064200f1401f6e9437b6f4cc92]]></auth>\n\t<api><![CDATA[340001]]></api>\n\t<update><![CDATA[Wed, 11 Jun 2008 08:31:40 -0600]]></update>\n\t<add><![CDATA[Wed, 11 Jun 2008 08:39:40 -0600]]></add>\n\t<songs><![CDATA[2102]]></songs>\n\t<albums><![CDATA[145]]></albums>\n\t<artists><![CDATA[838]]></artists>\n\t<genres><![CDATA[46]]></genres>\n\t<playlists><![CDATA[0]]></playlists>\n\n</root>\n', {'content-length': ['438'], 'content-disposition': ['attachment; filename=information.xml'], 'x-powered-by': ['PHP/5.2.4-2ubuntu5.1'], 'server': ['Apache/2.2.8 (Ubuntu) DAV/2 SVN/1.4.6 PHP/5.2.4-2ubuntu5.1 with Suhosin-Patch mod_ssl/2.2.8 OpenSSL/0.9.8g'], 'connection': ['close'], 'date': ['Fri, 13 Jun 2008 13:09:31 GMT'], 'content-type': ['text/xml; charset=UTF-8']}) (coherence/backends/ampache_storage.py:494)
INFO ampache_store Jun 13 07:09:32 ampache returned auth token 'ca2cac064200f1401f6e9437b6f4cc92' (coherence/backends/ampache_storage.py:527)
INFO ampache_store Jun 13 07:09:32 Songs: 2102, Artists: 838, Albums: 145, Playlists 0, Genres 46, Tags 0 (coherence/backends/ampache_storage.py:528)
This tells me that Ampache got my authentication response and responded with valid information, an authentication token. The bottom line shows information from my Ampache database, which is exciting because that means that they are talking. The other important line is this:
exceptions.IOError: [Errno 2] No such file or directory: '/usr/lib/python2.5/site-packages/Coherence-0.5.7-py2.5.egg/coherence/upnp/core/xml-service-descriptions/ConnectionManager350001.xml'
A quick chat with 'dev' in the #coherence channel on IRC told me that this was happening because I had specified an Ampache version in my configuration file, and that version was causing coherence to look for a specific connection manager
XML file which didn't exist. Why did I specify a version in my config file? Because of a thread at the Ampache forums, http://ampache.org/forums/t2067-Rhythmbox-Ampache-Plugin.html, which told me to. In the end, I took that line out of my
coherence config and it worked fine. In fact, for the sake of verbosity, here is my coherence config file (~/.coherence):
1 <plugin active="yes">
2 <backend>AmpacheStore</backend>
3 <name>EnderFM</name>
4 <url>ampache/server/xml.server.php</url>
5 <key>xml-rpc-key</key>
6 <user>MyUser</user>
7 <password>MyPassword</password>
8 </plugin>
As I said before, it's more work than it is worth for me to talk about how to get the user and password to work with an ACL on Ampache. It's pretty easy, just put those lines in your coherence config, and make sure it matches the ACL for
XML-RPC in your Ampache admin. Also, make sure the user gets Read/Write access to the XML-RPC ACL. With all of that, the coherence command I gave you above will work. The only thing that's important to know is that even with debug level 4
enabled, coherence will not tell you when it is successfully set up. I don't know why that is, but there you go. When you run coherence successfully you should get an output something like this:
COHERENCE_DEBUG=ampache_store:4 coherence --plugin=backend:AmpacheStore,url:http://192.168.15.99/server/xml.server.php,key:xml-rpc-key
INFO ampache_store Jun 13 08:29:03 auth_request 'http://192.168.15.99/server/xml.server.php?action=handshake&auth=b32bf13185b6ede26ecb7044cd3d6af2×tamp=1213367343&version=350001' (coherence/backends/ampache_storage.py:558)
INFO ampache_store Jun 13 08:29:03 got_auth_response ('<?xml version="1.0" encoding="utf-8" ?>\n<root>\n\t<auth><![CDATA[040e482c659425283a8668f8b2513e4d]]></auth>\n\t<api><![CDATA[340001]]></api>\n\t<update><![CDATA[Wed, 11 Jun 2008 08:31:40 -0600]]></update>\n\t<add><![CDATA[Wed, 11 Jun 2008 08:39:40 -0600]]></add>\n\t<songs><![CDATA[2102]]></songs>\n\t<albums><![CDATA[145]]></albums>\n\t<artists><![CDATA[838]]></artists>\n\t<genres><![CDATA[46]]></genres>\n\t<playlists><![CDATA[0]]></playlists>\n\n</root>\n', {'content-length': ['438'], 'content-disposition': ['attachment; filename=information.xml'], 'x-powered-by': ['PHP/5.2.4-2ubuntu5.1'], 'server': ['Apache/2.2.8 (Ubuntu) DAV/2 SVN/1.4.6 PHP/5.2.4-2ubuntu5.1 with Suhosin-Patch mod_ssl/2.2.8 OpenSSL/0.9.8g'], 'connection': ['close'], 'date': ['Fri, 13 Jun 2008 14:29:03 GMT'], 'content-type': ['text/xml; charset=UTF-8']}) (coherence/backends/ampache_storage.py:494)
INFO ampache_store Jun 13 08:29:03 ampache returned auth token '040e482c659425283a8668f8b2513e4d' (coherence/backends/ampache_storage.py:527)
INFO ampache_store Jun 13 08:29:03 Songs: 2102, Artists: 838, Albums: 145, Playlists 0, Genres 46, Tags 0 (coherence/backends/ampache_storage.py:528)
At this point, it should be running enough for devices to discover it. I got my Roku Soundbridge M2000 connected to it (after restarting the soundbridge so it searched for servers again) just fine.
I hope this guide helps someone. Thanks 'dev' for the help, and the whole coherence and Ampache teams for making some great products. Keep up the work guys!
