XBMC: One database to rule them all

Door Mar2zz op woensdag 9 februari 2011 16:33 - Reacties (11)
CategorieŽn: Addons, XBMC, Views: 15.219

Weer een post over XBMC, het mooiste opensource project wat ik ken, ik heb de geboorte gemist, maar het zien opgroeien op de xbox en volwassen zien worden op alle besturingssystemen. Ik ben een aantal keer gevraagd om een blog te schrijven over hoe je een centrale xbmc-database opzet. Bij deze dus..

Waarom...
Het voordeel van een centrale database is dat alle xbmc-systemen in je netwerk over dezelfde informatie beschikken. Je kunt de video en muziekdatabase exporteren. Dit heeft natuurlijk alleen zin als alle xbmc's bestanden van dezelfde locatie of server halen, of als alle bestanden op de diverse machines exact gelijk zijn. Het voordeel is dat de eerste gestarte client de database update met alle nieuwe info van nieuwe films, en dat andere clients dat dan automatisch ook hebben en dus niet hoeven te updaten. Ook zal alle movie-info overal gelijk zijn.

Het grootste voordeel is in mijn ogen de "Bekeken"-status. Je ziet overal waar je gebleven was en als je een film half kijkt vanaf de luie stoel, en dan in bed op een andere machine verder wilt kijken, dan weet die machine waar je gebleven was tot op de seconde precies! Geniaal toch? mySQL come here my friend!

Installatie
Log in op je server met ssh "ssh -l gebruikersnaam servernaam".
Typ het volgende commando:
sudo apt-get install mysql-server
Tijdens deze installatie wordt je gevraagd om een wachtwoord in te voeren voor de mysql beheerder (root). Typ je gekozen wachtwoord 2 maal en de installatie gaat verder. MySQL zal automatisch gestart worden (ook na reboot) en standaard draaien op poort 3306.

Je moet alle ip's in je netwerk kunnen laten connecten. Standaard kan de database alleen vanaf de pc gebruikt worden waar de database opstaat. Je moet daarom een textfile editen. Typ
sudo nano /etc/mysql/my.cnf

Zoek naar bind-adress=127.0.0.1 en verander dit in 0.0.0.0. Typ daarna
sudo /etc/init.d/mysql restart
en mySQL-server is toegankelijk vanaf andere pc's in het netwerk @ computernaam:poort.

Ga naar je userdatafolder van xbmc en edit (of maak als het er niet is) het bestand advancedsettings.xml.
nano ~/.xbmc/userdata/advancedsettings.xml
Het volgende plak je erin (en pas je aan naar eigen behoefte, music kan je weglaten als je dat niet centraal wilt doen of video natuurlijk...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<advancedsettings>
    <videodatabase>
        <type>mysql</type>
        <host>naamserver of ipadres</host>
        <port>3306</port>
        <user>xbmc</user>
        <pass>xbmc</pass>
        <name>xbmc_video</name>
    </videodatabase> 
    <musicdatabase>
        <type>mysql</type>
        <host>naamserver of ipadres</host>
        <port>3306</port>
        <user>xbmc</user>
        <pass>xbmc</pass>
        <name>xbmc_music</name>
    </musicdatabase>
</advancedsettings>


Maak gelijk even een backup van je userdatamap, dan heb je de oude situatie zo weer teruggezet als dit niets voor je is (cp .xbmc/userdata .xbmc/userdata_backup)

mySQL Databases maken
Volgens een reactie op deze blog (thx for that) is het zelf maken van een database niet nodig. XBMC zal hem zelf aanmaken als je die opstart met de nieuwe advancedsettings.xml. Ik heb dit zelf niet getest, maar ik ga ervan uit dat het werkt, ik kwam dit ook tegen op het xbmc-forum zelf. Verder stond daar niets bij, dus ik ga ervan uit dat de toegang en rechten dan ook direct goed zit. Mocht dat niet zo zijn dan moet deze nog uitgevoerd worden, maar waarschijnlijk dus niet nodig:
GRANT ALL ON *.* TO 'xbmc';
Dit stuk hieronder is dus overbodig, maar voor de volledigheid laat ik het staan (ik heb het niet voor niets getypt hou ik mezelf maar ff voor). Je kunt dus skippen naar het stuk "Database in gebruik nemen".

Log in op mySQL, typ het volgende in de terminal
mysql -u root -p
typ hierna je wachtwoord dat je net hebt ingesteld en je ziet na een mysql message een nieuw soort commandline:
mysql>


Hierachter kun je mysql instellen. Nu spam ik wat codes die kun je gewoon overnemen. Er wordt geen rekening gehouden met beveiliging bij deze setup. Zolang je de poort dichtlaat in je router hoef je niet veel te vrezen, maar ik noem het toch maar even, bij wijze van disclaimer/ontslag van verantwoordelijkheid etc.
Let goed op de code die hier staat, alles overnemen, inclusief tekentjes zoals ' ' en ; enzo, ENTER doen na het commando.
CREATE user 'xbmc' IDENTIFIED BY 'xbmc';
Dit is username en daarna wachtwoord van de user xbmc, deze kunnen ook anders zijn, maar moeten overeenkomen met de user en pass in advancedsettings.xml.
CREATE database xbmc_video;

CREATE database xbmc_music;
De databases zijn nu aangemaakt.
GRANT ALL ON *.* TO 'xbmc';
De database compleet openstellen. weet iemand hoe je het alleen lokaal doet? bv GRANT ALL ON 192.168.1.* ofzo?

Test e.e.a met de volgende commando's:
SELECT host,user from mysql.user;
SHOW DATABASES;
Dit zou de output moeten zijn:
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| xbmc_music         |
| xbmc_video         |
+--------------------+
4 rows in set (0.00 sec)

mysql> SELECT host,user from mysql.user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | xbmc             |
| 127.0.0.1 | root             |
| localhost | debian-sys-maint |
| localhost | root             |
| ubuntu    | root             |
+-----------+------------------+
5 rows in set (0.00 sec)

Als je iets soortgelijks ziet dan is het gelukt en zijn je databases klaar en alle rechten aanwezig.

Database in gebruik nemen
Het is verstandig om eerst een backup van al je lokale databases te maken. Dit kan onder instellingen Video en/of Muziek Export library to file. Gooi dan bovenstaande Advancedsettings.xml op alle xbmc-machines die je wilt syncen. Herstart dan 1 machine, deze moet de database gaan vullen (dus echt maar 1 starten en niet meer, zet voor de zekerheid de rest even uit). Doe een volledige scan van je films, tvshows en muziek. Pas als die klaar is kun je de andere systemen ook herstarten of weer aanzetten. Ze gebruiken nu allemaal dezelfde database!

Updates van films en dergelijke
Sickbeard, Couchpotato of zelfgeschreven postprocessingscripts voor Sabnzbd kunnen de database van XBMC een update geven. Maar als je de database op een headless server host dan verstaat die dat commando niet, de database wordt geupdate door al zijn clients, en niet andersom. Er wordt al gewerkt aan een xbmc-server, die dit soort dingen wel gaat verstaan. Je kunt, al vind ik dat persoonlijk overkill, xbmc op je server installeren. Ik ben dan benieuwd hoe minimal je die install kunt krijgen zonder xbmc stuk te maken. Skins e.d. zijn niet nodig immers.

Thumbnails en .nfo's van films worden altijd nog lokaal gescraped, tenzij je ervoor zorgt dat die zaken voorhanden zijn in de servermappen waar je je films, muziek en series e.d. hebt. Met Sickbeard en Couchpotato gaat dit automatisch in die mappen terecht komen. Ander heb je een mediamanager ervoor nodig. Dit heeft ook als voordeel dat het scrapen veel minder tijd in beslag neemt.

Userdata
Userdata kan helaas nog niet opgeslagen worden in een te delen database. Al valt er natuurlijk een truuk uit te halen met slim mounten van serverdirectorys op lokale clients. Voor je programma's kun je ook een database aanmaken. Op dezelfde manier als hierboven, maar dan noem je 'm bijvoorbeeld apps_database. Sommige programma's cachen ook thumbs en dergelijke (de Youtube-plugin bijvoorbeeld.

Afsluiting
XBMC zou XBMC niet zijn als dit niet binnen een aantal releases een stuk makkelijker gemaakt wordt. Tot dan is deze manier een uitkomst. Er zijn maar weinig programma's waar er zo goed geluisterd wordt naar de wensen van de community er omheen. Een centrale database is zo iets. Mensen die zelfs XBMC in het toilet hebben die willen zoiets. Iemand verzint dan wel een oplossing en het wordt later vanzelf geÔmplementeerd in XBMC zelf.

Nog een laatste tip, ook uit de reacties hieronder, de databases kunnen crossplatform benaderd worden. Daar zijn wel wat trucs voor nodig (en een DutchNutcase ;) ). In deze post op het forum staat er meer over uitgelegd. Verder dan dit als opensource evangelist wil ik niet gaan, daarom nog een allerlaatste tip... Linux is graties!

Volgende: Mediafrontpage 02-'11 Mediafrontpage
Volgende: Installscripts SickBeard & CouchPotato 01-'11 Installscripts SickBeard & CouchPotato

Reacties


Door Tweakers user Demo, woensdag 9 februari 2011 21:07

Weet je of er een manier is om de huidige (SQLite) database te converteren naar de MySQL-database? Ik heb toch al MySQL draaien op m'n server, maar ik voel er eigenlijk weinig voor om opnieuw aan te geven welke films/series ik al gekeken heb..

Door Tweakers user Mar2zz, woensdag 9 februari 2011 21:35

Hey, ik heb even gezocht want dat is inderdaad handig een conversie, maar het lijkt allemaal nogal experimenteel te gaan met bash/perl scripts die de conversie doen. Ik heb heel weinig verstand van databases interne werkingen dus ik kan niet beoordelen of het link is om te doen ofzo...

Hier wat linkjes:
http://www.maxkpage.com/b...sql-converter-super-easy/
http://stackoverflow.com/...-migrate-sqlite3-to-mysql
http://forum.xbmc.org/sho...hp?p=516600&postcount=110
http://wiki.xbmc.org/inde....3E.2F.3Cvideodatabase.3E

Als je het gaat proberen ben ik benieuwd naar je ervaring!

Ik kwam wel wat anders leuks tegen, een advancedsetting voor snellere fanartloading enzo:
<useddsfanart>

This settings allows XBMC to use your GPU rendering fanart and some other images. This will make loading images considerably faster, especially on systems with slower processors (e.g. atom based systems).

To enable dds fanart in xbmc, add the following to your advancedsettings.xml:

<advancedsettings>
<useddsfanart>true</useddsfanart>
</advancedsettings>

[Reactie gewijzigd op woensdag 9 februari 2011 21:36]


Door Tweakers user j1nx, woensdag 9 februari 2011 22:10

Leuk stuk, snel even doorgelezen. Alvast een paar opmerkingen van mijn kant

1) Je maakt 2 databases aan voor xbmc (music en video) en ook een speciale user xbmc. Dan is het niet echt slim om dan de xbmc user als nog GRANT ALL te geven op ALLE databases

2) Ik zou toch de symlinks van de userdata en thumbs verwerken in het artikel. Als nu de eerste client de database update zal die ook de thumbs en covers en dergelijke downloaden en/of aanmaken. Client twee, heeft nu al een geupdaten database en zal dus nooit meer die covers en thumbs aanmaken.


Over de conversie. Volgens mij (zeker weten doe ik het niet) kan je op de oude manier terwijl je nog onder sqlite draait via de settings een export maken van zowel de music en video database.

Dan als je de boel onder mysql hebt draaien dan kan je geloof ik die exports gewoon weer importeren.

Door Tweakers user croontje, woensdag 9 februari 2011 22:26

Mar2zz schreef op woensdag 09 februari 2011 @ 21:35:
Ik kwam wel wat anders leuks tegen, een advancedsetting voor snellere fanartloading enzo:

[...]
Ik heb gisteren die dds fanart ingeschakeld. Er is ook een tooltje om je huidige fanart ineens te converteren, als je dit niet doet dan moet je je hele library even doorscrollen zodat xbmc ze zelf omzet.
Ik vind het verschil zeer duidelijk merkbaar!

http://htpcguide.info/ind...38:xbmc-how-tos&Itemid=62

Door Tweakers user Mar2zz, woensdag 9 februari 2011 22:44

j1nx schreef op woensdag 09 februari 2011 @ 22:10:
Leuk stuk, snel even doorgelezen. Alvast een paar opmerkingen van mijn kant

1) Je maakt 2 databases aan voor xbmc (music en video) en ook een speciale user xbmc. Dan is het niet echt slim om dan de xbmc user als nog GRANT ALL te geven op ALLE databases

2) Ik zou toch de symlinks van de userdata en thumbs verwerken in het artikel. Als nu de eerste client de database update zal die ook de thumbs en covers en dergelijke downloaden en/of aanmaken. Client twee, heeft nu al een geupdaten database en zal dus nooit meer die covers en thumbs aanmaken.
Wat betreft 1, dat liep ik me ook al af te vragen. Ik heb dit uiteraard niet zelf verzonnen maar gebaseerd op posts uit xbmcforum enzo. Wat is wel wijs om te doen? ik ben een dummy wat databases betreft (wegens beperking in xbmc moet music en video wel een aparte database hebben, maar daar wordt aan gewerkt om dat wel samen te kunnen voegen). Dat symlinkverhaal is in mijn ogen gewoon die map userdata aanmaken op de server en dan mounten in een lege map in .xbmc/userdata op alle lokale clients. Dan heb je thumbs voor alle.

Mount commands heb ik al eens eerder besproken (in blog over minimal server). De thumbs worden ook opgeslagen in userdata. Met slechte verbinding of veel overhead kan dit wel de nodige vertraging opleveren in XBMC's scroll en bladersnelheid.

Door Tweakers user j1nx, donderdag 10 februari 2011 05:46

1) Mysql statements (inclusief interne netwerk control)


code:
1
2
GRANT ALL PRIVILEGES on xbmc_video.* to xbmc@'192.168.0.0/255.255.0.0'
GRANT ALL PRIVILEGES on xbmc_music.* to xbmc@'192.168.0.0/255.255.0.0'



Overigens ik dacht dat remote access van mysql standaard dicht stond. (alleen localhost), ik zie je nergens de settings tweaken van mysql?

Door Tweakers user Mar2zz, donderdag 10 februari 2011 06:57

Ik verdiep me nog even in mySQL en zal de blog daarna aanpassen. Ik dacht dat de lui waarvan ik de info had een fully covered verhaal hadden. Bedankt voor het voorzetje, more to come... (bloggen dwingt je wel om te leren ;) )

Door Tweakers user lowfi, donderdag 10 februari 2011 13:43

XBMC genereert zelf de database. Die hoef je dus niet handmatig aan te maken. Ik heb mijn thumbs op een gigabit netwerkshare staan waar ook de mysql database draait. Moet zeggen dat ik onderdanks natuurlijk hogere accesstijd van een netwerkshare ik niks van latency merk. Wel gebruik ik ddsfanart.

Erg handig om overal dezelfde films/series met plot info en thumbs te hebben. Zelf heb ik 3 XBMC setups: woonkamer, slaapkamer en studeer/computerkamer. 2x live 1x osx binary.

Nadeel is dat het op dit moment niet eenvoudig is om van scraper te wisselen. Je moet dan de hele database eigenlijk weg gooien en weer opnieuw alles scrapen met een andere scraper. Je verliest dan weer alles watched info ed.

[Reactie gewijzigd op donderdag 10 februari 2011 13:51]


Door Tweakers user DutchNutcase, donderdag 10 februari 2011 17:51

Mar2zz, je blogs blijven leuk leesvoer.

Je zou ook het cross platform (XBMC op Win/Linux/OSX) aanbieden van media kunnen beschijven, zoals ik hier heb aangegeven.

Door Tweakers user Trebor, donderdag 24 februari 2011 22:12

Klein detail:

code:
1
cp .xbmc/userdata .xbmc/userdata_backup


moet zijn:

code:
1
cp -a .xbmc/userdata .xbmc/userdata_backup zijn


omdat je directory's recursive aan het kopieeren bent.

Leuke guide trouwens.

[Reactie gewijzigd op donderdag 24 februari 2011 22:12]


Door Tweakers user r3v0ss, maandag 26 september 2011 12:18

Ik heb je blog gevolgd om afgelopen weekend mijn library te verplaatsen van de lokale machine naar m'n server. XBMC maakt inderdaad zelf de juiste tabellen aan, indien de verbinding naar de MySQL server slaagt. Echter, in plaats van


code:
1
2
CREATE database xbmc_video;
CREATE database xbmc_music;


heb ik onderstaande code moeten gebruiken, omdat anders de CHARACTER SET en COLLATE op utf8 stonden. Vind XBMC niet leuk.

code:
1
2
CREATE DATABASE xbmc_music CHARACTER SET latin1 COLLATE latin1_general_ci;
CREATE DATABASE xbmc_video CHARACTER SET latin1 COLLATE latin1_general_ci;

[Reactie gewijzigd op maandag 26 september 2011 12:18]


Reageren is niet meer mogelijk