Hlavní navigace

MythTV: od zdrojového kódu až po instalaci

2. 2. 2010
Doba čtení: 13 minut

Sdílet

Mnoho běžných uživatelů se MythTV bojí, protože to je na první pohled poměrně složitá věc. Jedná se vlastně o celou soustavu programů, která vyžaduje k chodu dobře nastavenou MySQL databázi, případně i web server, LIRC/LCDProc a další, pro desktopové uživatele méně obvyklé, aplikace. Spolu to ale zvládneme.

Pokud si nechcete život zpestřovat kompilováním a ruční instalací, spolehněte se buďto na hotové balíčky (dostupné pro Debian díky debian-multimedia, Ubuntu díky Mythbuntu projektu a jistě i pro další systémy), anebo použijte rovnou specializovanou distribuci, jakou je například Mythbuntu, Mythdora nebo Knoppmyth, která se pokusí celý Myth moloch nainstalovat co možná nejméně komplikovaným způsobem pro vás. Následující odstavec o kompilaci pak můžete jen tak lehce proletět, ale podívat se na ten další, o instalaci, by mohlo být užitečné i pokud jste instalovali z balíčků, ať tak nějak tušíte, jak to celé dohromady funguje a co je kde navíc ukryto za bonusy.

My ostatní si nasadíme pracovní rukavice a ochranné brýle (možno i svářečské) a jdeme na to.

MythTV – Kompilace

Poznámka na úvod: kompilaci jsem prováděl na čerstvě nainstalovaném Debianu Lenny. Pokud používáte jiný operační systém, přizpůsobte si jednoduše názvy příkazů (např. apt → yum) a balíčků (např. -dev → -devel atp.), ono je to všechno jeden GNU/Linux.

Kde vzít zdrojový kód MythTV už víme z minulého článku, takže ho stáhneme ze zdrojového repozitáře a přeložíme. Předtím si seženeme vše potřebné, tedy knihovny, které MythTV používá, a případné nástroje na překlad. Oficiálně MythTV vyžaduje (kromě samozřejmých klasických nástrojů jako jsou GCC, autotools a make) jen libttf (freetype 2), libmp3lame a QT (verze 4.3 nebo novější). Ve skutečnosti je těch potřebných věcí trošku víc, jak nám ukáže systém závislostí v Debianu Lenny (po přidání debian-multimedia.org do zdrojů pro APT):

# apt-get build-dep mythtv
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  autotools-dev binutils build-essential bzip2 ccache cpp cpp-4.3 dbus dbus-x11 debhelper defoma diffstat dpkg-dev fontconfig fontconfig-config g++ g++-4.3 gcc gcc-4.3 gettext html2text intltool-debian liba52-0.7.4 liba52-0.7.4-dev libasound2 libasound2-dev libasyncns0 libaudio2 libavahi-client-dev libavahi-client3 libavahi-common-data libavahi-common-dev libavahi-common3 libavc1394-0 libavc1394-dev libc6-dev libcap1 libcompress-raw-zlib-perl libcompress-zlib-perl libdbus-1-3 libdbus-1-dev libdigest-hmac-perl libdigest-sha1-perl libdirectfb-1.0-0 libdirectfb-dev libdirectfb-extra libdrm2 libdts-dev libdvb-dev libdvdnav-dev libdvdnav4 libdvdread-dev libdvdread3 libexpat1 libfaac-dev libfaac0 libfftw3-3 libfftw3-dev libfile-remove-perl libfontconfig1 libfontenc1 libfreebob0 libfreetype6 libfreetype6-dev libfribidi-dev libfribidi0 libgif-dev libgif4 libgl1-mesa-dev libgl1-mesa-dri libgl1-mesa-glx libglib2.0-0 libglib2.0-data libglib2.0-dev libglu1-mesa libglu1-mesa-dev libgmp3c2 libgomp1 libhal1 libice-dev libice6 libid3tag0 libiec61883-0 libiec61883-dev libimlib2 libimlib2-dev libio-compress-base-perl libio-compress-zlib-perl libio-stringy-perl libjack-dev libjack0 libjpeg62 libjpeg62-dev liblcms1 liblircclient-dev liblircclient0 libltdl3 libltdl3-dev libmail-box-perl libmail-sendmail-perl libmailtools-perl libmime-types-perl libmng1 libmp3lame-dev libmp3lame0 libmpeg3-1 libmpeg3-dev libmpfr1ldbl libmysqlclient15-dev libmysqlclient15off libobject-realize-later-perl libogg-dev libogg0 libpixman-1-0 libpng12-0 libpng12-dev libpthread-stubs0 libpthread-stubs0-dev libpulse-browse0 libpulse-dev libpulse-mainloop-glib0 libpulse0 libqt4-assistant libqt4-dbus libqt4-designer libqt4-dev libqt4-help libqt4-network libqt4-opengl libqt4-opengl-dev libqt4-qt3support libqt4-script libqt4-sql libqt4-sql-mysql libqt4-svg libqt4-test libqt4-webkit libqt4-xml libqt4-xmlpatterns libqtcore4 libqtgui4 libraw1394-8 libraw1394-dev libsm-dev libsm6 libssl-dev libstdc++6-4.3-dev libsys-hostname-long-perl libsysfs-dev libsysfs2 libtiff4 libtiff4-dev libtiffxx0c2 libtimedate-perl libtool libts-0.0-0 liburi-perl libuser-identity-perl libvdpau-dev libvdpau1 libvorbis-dev libvorbis0a libvorbisenc2 libvorbisfile3 libx11-dev libxau-dev libxaw7 libxcb-xlib0-dev libxcb1-dev libxdamage1 libxdmcp-dev libxext-dev libxfixes3 libxfont1 libxi6 libxinerama-dev libxinerama1 libxkbfile1 libxmu6 libxpm4 libxrandr-dev libxrandr2 libxrender-dev libxrender1 libxt-dev libxt6 libxv-dev libxv1 libxvidcore4 libxvidcore4-dev libxvmc-dev libxvmc1 libxxf86vm-dev libxxf86vm1 linux-libc-dev make mesa-common-dev mysql-common pkg-config po-debconf python-support qt4-qmake qt4-qtconfig quilt texi2html ttf-dejavu ttf-dejavu-core ttf-dejavu-extra x11-xkb-utils x11proto-core-dev x11proto-input-dev x11proto-kb-dev x11proto-randr-dev x11proto-render-dev x11proto-video-dev x11proto-xext-dev x11proto-xf86vidmode-dev x11proto-xinerama-dev xfonts-base xfonts-encodings xfonts-utils xkb-data xserver-xorg xserver-xorg-core xserver-xorg-input-all xserver-xorg-input-evdev xserver-xorg-input-kbd xserver-xorg-input-mouse xserver-xorg-input-synaptics xserver-xorg-input-wacom xserver-xorg-video-openchrome xtrans-dev yasm zlib1g-dev
0 upgraded, 234 newly installed, 0 to remove and 0 not upgraded.
Need to get 112MB of archives.
After this operation, 329MB of additional disk space will be used.

Ještě nám chybí nástroj na stahování zdrojového kódu, takže:

# aptitude install subversion

Tak a můžeme si stáhnout zdrojový kód – normální uživatelé berou první možnost, hackeři tu druhou:

# svn co http://svn.mythtv.org/svn/branches/release-0-22-fixes/ mythtv-0-22 && cd mythtv-0-22
# svn co http://svn.mythtv.org/svn/trunk/ mythtv-trunk && cd mythtv-trunk

První se pokusíme přeložit samotný MythTV:

# cd mythtv
# ./configure --prefix=/usr

Podle výsledků configure nám chybí ještě S2API, co je v kernelu 2.6.28+, takže pokud máme DVB-S2 kartu a starší kernel, přidáme do sources.list ještě lenny backports a nainstalujeme nový kernel a hlavičkové soubory k němu:

# apt-get -t lenny-backports install linux-image-2.6.30-bpo.2-686 linux-libc-dev
# ./configure --prefix=/usr

Skript configure má mnoho parametrů, kterými můžeme ovlivnit, které „moduly“ budou ve výsledné binárce zakompilované, viz ./configure --help. Já se už před delší dobou (takže to dnes možná není úplně aktuální) dopracoval k následující verzi configure přepínačů, které zhruba vyjadřují, jaký HW doma mám (DVB, IVTV) a jaký nemám (joystick, HDPVR, DBOX2, IPTV atd.):

# ./configure --prefix=/usr --disable-joystick-menu --disable-audio-arts --disable-hdpvr --enable-ivtv --enable-xvmc --enable-opengl-vsync --enable-opengl-video --enable-ffmpeg-pthreads --enable-vdpau --enable-dvb --disable-dbox2 --disable-firewire --disable-hdhomerun --disable-iptv --disable-directfb

A už to můžeme přeložit a nainstalovat:

# make -j2 && make install

Pokračujeme s pluginy (nezkoušejte kompilovat pluginy, dokud nemáte nainstalovaný mythtv, protože pluginy používají hlavičkové soubory a knihovny z nainstalovaného mythtv):

# cd ../mythplugins
# ./configure --prefix=/usr

Výsledky configure ukáží, že MythMusic potřebuje ještě knihovny FLAC,  libcdaudio, CDDA Paranoia a taglib, takže doinstalujeme:

# aptitude install libflac-dev libcdaudio-dev libcdparanoia-dev libtag1-dev
# ./configure --prefix=/usr

Teď už configure dopadne dobře, ale ještě nám řekne, že kdybychom měli EXIF, libvisual a SDL, že by MythGallery a MythMusic byly ještě lepší:

# aptitude install libexif-dev libvisual-0.4-dev libsdl-dev
# ./configure --prefix=/usr

Mimochodem, nemusíme kompilovat všechny pluginy – ./configure --help napoví, jak kterýkoliv plugin vynechat:

# ./configure --prefix=/usr --disable-mythflix --disable-mythzoneminder --disable-mythmovies

Tak už je to vše, takže přeložíme a nainstalujeme pluginy:

# make -j2 && make install

Teď ještě přídavná témata (Graphite, Metallurgy a Mythbuntu) a pár pěkných OSD:

# cd ../mythemes
# ./configure --prefix=/usr
# make install

A je to, všechno je přeloženo (zkompilováno) a nainstalováno – téměř připraveno k prvnímu spuštění.

Praktická poznámka: v Debianu i jiných operačních systémech používajících balíčkovací systém je výhodné nahradit všechny výše zmíněné make install za checkinstall ze stejnojmenného balíčku. Díky němu vznikne při instalaci poměrně úhledný mythtv/mythplu­gins/myththemes balíček, který bude jednak možné nainstalovat i jinde (například kompiluji na kombinovaném BE/FE a potom instaluji i na dalších FE, pokud mají dostatečně podobný HW), a za druhé bude možné kdykoliv v systému uklidit pouhým odinstalováním toho balíčku.

Výhody vlastní kompilace

Výše zmíněné hrátky se zdrojovým kódem a kompilerem jsme neabsolvovali jen tak z dlouhé chvíle – kompilovat si vlastní spustitelné soubory je vhodné a výhodné dokonce ze tří důvodů:

1) používáme vždy nejčerstvější možné zboží, což se u MythTV, které je opravováno a vylepšováno prakticky denně, celkem hodí. Stačí v kořenovém adresáři kopie mythtv repozitáře zavolat příkaz svn update, který synchronizuje naši kopii zdrojových kódů s těmi, co jsou na SVN serveru, a přijedou-li nové změny, můžeme znovu překládat…

2) když v Tracu najdeme chybu, která nás trápí, tak u ní kolikrát je už i patch (oprava) na otestování, který ještě není zařazen v SVN. Můžeme si ho z Tracu vzít a udělat si vlastní opravenou verzi týdny i měsíce před tím, než se k tomu dostanou vývojáři. Většinou pro to stačí v kořenu zdrojového stromu zavolat patch -p0 </cesta/k/oprava.diff a pak make && make install a je to. Pokud jsme v trunku, je důležité sledovat hlášení vývojářů v Tracu a po změně verze ABI je pak nezbytné přeložit kromě mythtv i pluginy. A občas při velkých změnách je vhodné nebo dokonce nutné zavolat i make distclean  a pak opět  ./configure.

3) no a pokud jsme schopni si nějaké chyby i sami opravit (třeba i jen chyby překladu či témat), tak příkaz svn diff >uprava.diff v kořenu zdrojového stromu vyrobí patch, který můžeme poslat vývojářům či komukoliv jinému (překladatelskému týmu např.), nebo přidat do Tracu k hlášení o úpravě, kterou jsme provedli.

MythTV – Instalace

Co vlastně máme k dispozici za spustitelné soubory?

  • mythbackend  – backend server, který nahrává pořady. Na frontendu běžet nemusí, i když si ho prý frontend občas spustí sám, když potřebuje.
  • mythfrontend  – frontend, tedy hlavní aplikace pro sledování pořadů a spouštění MythTV pluginů/zásuvných modulů.
  • mythtv-setup  – program, který spouštíme pro konfiguraci backend serveru (nahrávacích karet, TV kanálů, apod.)
  • mythwelcome  – program pro automatické spouštění a vypínání počítače (chová se pak jako videorekordér – zapne se, nahraje, vypne se).
  • mythshutdown  – patří k mythwelcome, pomáhá mu se správným vypnutím tak, aby se příště zase sám zapnul.
  • mythfilldatabase  – automaticky nebo ručně spouštěný program, co doplňuje databázi televizního programu z externího zdroje (XMLTV)
  • mythtvosd  – umí poslat texty na obrazovku MythTV i při přehrávání. Původní autor si s ním nechával vypsat na obrazovku, kdo mu zrovna telefonuje.
  • mtd  – Myth Transcoding Daemon se používá při vytváření záložních kopií DVD na pevný disk.
  • mythlcdserver  – program pro zobrazování informací na LCD/VFD (displejích dražších počítačových skříní). Je to taková spojka mezi MythTV a LCDProc serverem.
  • mythavtest  – to je vlastně maximálně zjednodušený frontend, který umí jen přehrávat soubory z příkazové řádky nebo živou TV. Může se hodit na testy.

Ostatní programy ( mythreplex, mytharchivehelper, mythcommflag, mythjobqueue a mythtranscode) jsou interní programy používané přímo MythTV, i když je můžeme zavolat i sami a o něco požádat (označit reklamy, překódovat video do jiného formátu, vystřihnout označené úseky atp.).

Pozornosti by neměly ujít ještě dva spustitelné soubory v /usr/share/mythtv: mythconverg_backup.pl a mythconverg_restore.pl. První zálohuje ručně nebo automaticky MythTV databázi a ten druhý ji umí obnovit. Jak roste počet nahrávek, stává se databáze velmi cennou a je dobré o ni nepřijít, proto ty zálohy.

V /usr/share/mythtv  máme nainstalované ještě další důležité skripty, k pluginům. Obzvláště ty v podadresáři mythweather/scripts/ (stahuje meteorologická data) a mythvideo/scripts/ (stahuje z internetu informace o filmech ve filmotéce) by stálo za to upravit na české poměry. Pokud už to někdo máte, sdílejte na tvpc.cz, díky.

Několik zajímavých tipů k provozu MythTV včetně příkladu použití výše zmíněného mythtvosd najdete v Myth Wiki na stránce Little Gems.

Pokud se ještě vrátíme do zdrojových textů, najdeme hned pod mythtv podadresář contrib, který obsahuje hromadu dalších velmi zajímavých skriptů. Jen namátkou jmenujme skripty v podadresáři exports pro konverzi videa na iPod či rádia do MP3, podadresář maintenance obsahující skripty pro úklid a opravy databáze, nebo třeba skript mythrename.pl pro přejmenování nahrávek do lidských jmen, což se hodí, pokud například přehráváte bez mythfrontendu jen nasdílené soubory přes NFS/CIFS.

Popisy těchto i jiných skriptů najdete opět v Myth Wiki na stránce Category:Scripts.

Před prvním spuštěním vytvoříme databázi

Správně vytvořit a nastavit databázi je základem pro funkční mythbackend. Předpokladem pro to je mít nainstalovaný MySQL server:

# aptitude install mysql-server

Ve zdrojovém stromu MythTV je skript mc.sql, který vytvoří databázi  mythconverg:

# mysql -u root -p < /cesta/k/mythtv/database/mc.sql

Pokud se budeme chtít připojovat k této databázi i vzdáleným frontendem, bude to vyžadovat pár úprav, jako například povolit MySQL poslouchání nejen na localhostu, a také povolit přístup k mythconverg  databázi nejen z localhostu. A když přístup k databázi zabezpečíme heslem, je nutné pak toto heslo uložit v mysql.txt  souboru, odkud si ho mythbackend, mythtv-setup a zálohovací skripty samy při svém startu vyčtou. Dokud máme přístup bez hesla, obejdeme se i bez mysql.txt, zdá se.

Nakonfigurujeme mythbackend

Když máme databázi, jsme připraveni vrhnout se na konfiguraci. To se provádí spuštěním programu mythtv-setup na master backendu. Pokud tam nemáme grafické prostředí, můžeme spustit program vzdáleně díky tunelování X11 přes ssh, viz příklad terminálového sezení, kdy se hlásím já ze svého desktopu jako uživatel mythtv na vzdálený stroj zvaný backend a spouštím tam setup:

já@desktop:~$ ssh -X -l mythtv backend
mythtv@backend:~$ mythtv-setup -geometry 1024x600

Spustíme programy a jedem

Máme-li nakonfigurovaný backend, zajímá nás, jak a co vlastně spouštět. Mythbackend musí běžet pořád, takže ten necháme spouštět init skriptem podobně jako ostatní programy v našem systému (Debian: /etc/init.d/). Pokud už máme závislostní start (Debian Lenny ještě ne, ostatní moderní distra už ano), tak mythbackend logicky spouštíme až po mysql serveru a pokud nahráváme na síťové disky, tak až po nastartování NFS/CIFS. Aby běžel sám jako démon, přidáme mu parametr -d (nebo --daemon). A taky mu můžeme přidat logování, viz níže.

Mythfrontend naopak spouštíme jen když se chceme na něco dívat. Např. na desktopu/notebooku si ho dáme na ikonu na plochu/panel a hotovo (při tom se opět může hodit parametr -geometry použitý už výše u  mythtv-setup).

Pokud máme dedikovaný/vyh­razený stroj na kombinovaný BE/FE, tak tam chceme, aby se po automatickém zapnutí stroje pro nahrávání frontend ani nepouštěl, ale pokud si ho zapneme sami, tak aby nám frontend spustil. Toto kouzlo ovládá program mythwelcome. Pořadí spouštění je potom takové:

1) spustí se X Window System, ten spustí login manažer (xdm/gdm/kdm) a v něm máme nastaveno, aby se automaticky zalogoval uživatel zvaný třeba „mythtv“

2) ve startovacím skriptu toho uživatele (např. při použití RatPoison okenního manažeru v .ratpoisonrc) spustíme skript podobný následujícímu:

# vypni zhasinani obrazovky pri necinnosti detekovane Xserverem
exec xset -dpms s off &

# pust Myth Transcoding Daemon (pokud nebezel), pro DVD ripping
ps -C mtd || mtd -d

# pust irexec (pokud nebezel), aby sel vypinat pocitac dalkovym ovladacem
ps -C irexec || irexec --daemon

# spust MythFrontend pres MythWelcome
date >>/var/log/mythtv/frontend.err
# vypnout ceskou desetinnou carku pro opravu prepinani 50/60 Hz - viz Trac #7874
export LC_NUMERIC=C
mythwelcome >>/var/log/mythtv/frontend.log 2>>/var/log/mythtv/frontend.err

Co dělat, když něco nefunguje, jak má

Logy, logy, logy. Snad všechny hlavní programy z MythTV balíku mají velmi mocný logovací systém, který při správném nastavení podává cenné informace o tom, jak se aplikaci daří. Tyto programy mají parametr -l (případně --logfile), za kterým čekají cestu k logovacímu souboru, tedy například program -l /var/log/mythtv/program.log (za program si dosaďte mythbackend, mythfrontend, mythtv-setup a další). Nezapomeňte prosím na to, že daný adresář (např. výše zmíněný /var/log/mythtv) musí být zapisovatelný pro uživatele, pod kterým(i) běží jednotlivé aplikace. Frontend bývá obvykle spuštěn pod obyčejným uživatelem, který nemívá právo zápisu do /var/log, tak se nenechejte na takové trivialitě nachytat. Mimochodem, pokud MythTV naučíme logovat, je dobré nezapomenout nastavit i logrotate, aby nám ty logy po čase promazával.

No a když máme cestu k log souboru správně nastavenou, zbývá si vybrat, jak moc informací chceme zaznamenávat. To se dá zvolit jednak při startu parametrem -v ( --verbose) a druhak dokonce i za běhu parametrem --setverbose, což se skvěle hodí třeba u backendu, který právě začal zlobit a nechceme ho kvůli tomu restartovat a pokazit si tak probíhající nahrávky. Jak --verbose tak i --setverbose  čekají ještě jeden parametr, a sice seznam všeho, co se má logovat. Kompletní seznam povolených hodnot získáme pomocí --verbose help, hodnoty při pozdějším zadávání jednoduše oddělíme čárkami (např.  mythbackend --verbose record,siparser,channel).

CS24_early

S popisem problému a dobrým logem v ruce se potom už můžeme obrátit na znalejší uživatele, kteří nezřídka poradí, co je špatně a jak to spravit.

Příště

Tak trochu nás tlačí čas, tedy Olympiáda, která začíná a bude celá v HD a každý si ji chce nahrávat, takže příště buďto rychle prosvištíme konfiguraci, anebo spíš (protože konfigurace je všude už mnohokrát popsaná, tak ať se neopakujeme) přeskočíme až k dekódování kanálů, které nás u českých TV programů ze satelitu bohužel (a zřejmě navzdory EU směrnici Televize bez hranic) nemine.

Byl pro vás článek přínosný?

Autor článku

Petr Stehlík vystudoval aplikovanou informatiku a pracuje jako vývojář webových aplikací a administrátor linuxových serverů. Provozuje vlastní server tvpc.cz.