Category Archives: TV

Install TVHeadend in a Proxmox LXC Container running Ubuntu 16.04

TVHeadend is my favourite TV Server.

There weren’t too many battles setting up the install but there were some.

Step 1 of course is to create your “CT’. It doesn’t need much so I just gave it the following:

root@pve01:/etc/pve/lxc# cat 102.conf 
#TVHeadend
#Plex
#SABnzbd
#CouchPotato
#Sonarr
arch: amd64
cpulimit: 4
cpuunits: 4096
hostname: media
memory: 4096
net0: name=eth0,bridge=vmbr1,gw=10.69.10.1,hwaddr=00:0A:DE:01:02:10,ip=10.69.10.43/24,ip6=auto,tag=10,type=veth
onboot: 1
ostype: ubuntu
rootfs: ssdmirror:subvol-102-disk-1,size=32G
startup: order=4,up=5,down=5
swap: 4096
root@pve01:/etc/pve/lxc#

4 cores, 4 gigs of RAM/swap and a 32G disk. This is because I’ll also have Plex, SABnzbd, CouchPotato and Sonar in the same CT.

A few things tripped me up. The debian sources aren’t optimal for me, the local timezone wasn’t set, and TVH wouldn’t auto start.

After creating CT, some housekeeping:

root@media:/home/hts/.hts# cat /etc/apt/sources.list
deb http://au.archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse
deb http://au.archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://au.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://archive.canonical.com/ubuntu xenial partner
deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse

### TVH source
deb https://dl.bintray.com/tvheadend/ubuntu stable main

Those “au” ones are much better for Australia.  You can possibly find even faster ones with this guide, although I don’t know if that works with Ubuntu. It certainly works in Debian.

The “tvheadend” source for Ubuntu is as per here:  I just go the sable branch, as I’m not after any new features and like things to not break. The stable branch is regularly updated so I don’t feel like I’m missing out.

The timezone wasn’t set so I fixed that with:

dpkg-reconfigure tzdata

Then I went to work with apt:

apt-get update
apt-get dist-upgrade
apt-get autoremove
apt-get install tvheadend

I started tvheadend with “service tvheadend start” and saw it all looked good. The only problem is that it doesn’t start on reboot. I traced this down with a google search to the installer being not quite compatible with systemd, but there is a fix that works fine for me (as per this bug ID: https://tvheadend.org/issues/3027)

root@media:~# systemctl enable tvheadend.service
tvheadend.service is not a native service, redirecting to systemd-sysv-install
Executing /lib/systemd/systemd-sysv-install enable tvheadend
root@media:~#

 Picons

For Australia you can get the TV icons by:

cd /usr/src
git clone https://bitbucket.org/beyonwiz/picons-australia.git

Then prefer picons over channel names in the settings and set the path to:

file:///usr/src/picons-australia/picon

 Migrating from another Server

I found this post to be very handy. In a nutshell:

## the "FROM" box
sudo service tvheadend stop
sudo -s
cd /home/hts/.hts
sudo tar cvfp ../tvheadend.tar tvheadend
cd /home/hts/

## the "TO" box
new box
sudo service tvheadend stop
sudo -s
cd /home/hts/.hts
sudo mv tvheadend tvheadend-backup
tar xvfp ~/tvheadend.tar

I was very glad I didn’t need to manually copy all my old settings across!

 

Getting Tvheadend Picons to Work in Plex

Picons are handy if you are using the Plex Tvheadend channel and you want the TV station icons to show up.

I was able to pull down all the Australian TV icons online from Beyonwiz (this is for my Ubuntu Linux Tvheadend server):

apt-get install git
cd /usr/src
git clone https://bitbucket.org/beyonwiz/picons-australia.git

 

Then you can set the Tvheadend (TVH) server “Configuration -> General” tab to prefer picons over channel name, and set the path to file:///usr/src/picons-australia/picon

The other thing you need to do is under “Configuration -> Access Entries”, add a new entry with the following:

Enabled: tick
Username: *
Password: *
Network prefix:  The IP address of your Plex server or Kodi player, or even local subnet if you want. e.g. "10.1.0.45/32" or "10.1.0.0/24" (or "127.0.0.1/32" if Plex and TVH are on the same box).
Streaming: tick

That should be enough access to get the icons working.

When I get time I’ll see if I can feed Kodi the picons in a similar way, as I prefer this server-side method of delivering TV channel icons, rather than client-side. For now I just point Kodi to a local directory with PNG images named the same as the channel names, which seems to work fine.

The only issue with my current picon set-up for the Plex Tvheadend Channel, and it is a minor one, is that the picons get truncated on my iPhone as they aren’t square format. They do look look fine on the PC though. I’m tossing up whether it’s worth my time to create square icons for the 22 stations I make use of in Melbourne Australia.

Other than that, I’m pretty stoked with being able to get the icons/picons to display!

Installing Tvheadend on Ubuntu

Update April 2016: You don’t have to build your own Ubuntu packages any more, as they are maintained here.

I’ve chosen to install Tvheadend (TVH) on a vanilla Ubuntu Server 14.04.2 installation. Incidentally I have Ubuntu (64-bit version) setup on a ESXi 6.0 host. Here’s how you can do it to:

Install Ubuntu Server 14.04.2

I recommend installing these at install time:

ssh server
samba server

Otherwise don’t install them straight up, but later once in the CLI you can do this:

apt-get install ssh
apt-get install samba

If the timezone is somehow messed up you can:

dpkg-reconfigure tzdata

In Ubuntu, you don’t log on as root or set the root password, but rather sudo -i, which will get you root privs.

Finalise the install:

sudo -i
rm -rf /var/lib/apt/lists/*
apt-get update
apt-get upgrade
reboot

Install Required Libraries

apt-get install build-essential git pkg-config libssl-dev bzip2 wget
apt-get install libavahi-client-dev zlib1g-dev libavcodec-dev
apt-get install libavutil-dev libavformat-dev libswscale-dev
apt-get install libcurl4-gnutls-dev liburiparser-dev
apt-get install debhelper

Install Tvheadend

Go to your building area:

cd /usr/src/

Get a snapshot of the latest TVH:

git clone https://github.com/tvheadend/tvheadend.git

This will install the latest development code branch. At the moment this is 4.1. If you want to install the stable 4.0 branch then try this:

git clone --branch release/4.0 https://github.com/tvheadend/tvheadend.git

Now change into the “tvheadend” directory and list the build optons:

cd tvheadend/
./configure --help

Build it with hdhomerun support, and some other goodies required for transcoding:

AUTOBUILD_CONFIGURE_EXTRA=" --enable-hdhomerun_client --enable-avahi --enable-hdhomerun_static --enable-libffmpeg_static" ./Autobuild.sh -t precise-amd64

This should create a tvheadend deb package a level up, which you can now install using the distro’s install tool “dpkg”:

cd ..
# dpkg -i tvheadend_<your freshly created package>.deb
# e.g.
dpkg -i tvheadend_4.0.7-11~g398e4fe~precise_amd64.deb

Now run it:

service tvheadend start

You should be able to browse to your TVH server on port 9981. eg. http://10.69.10.42:9981/

login is tvhadmin/tvhadmin.   You can update that once you’re in. Enjoy.

Keeping TVH Up to Date

Go into the /usr/src/tvheadend directory and run git pull .  After that, do a build just as you would before, and install the new deb package which will update TVH.  Simples! You should still have the previous deb package if anything mucks up, and you can apt-get remove tvheadend the current version, and then re-install the older version.

You can keep the base system up to date with:

apt-get upgrade
apt-get autoremove

 

Tvheadend vs MythTV for Kodi – TVH the Clear Winner

As you can see from my previous blogs, I’ve been playing around with MythTV of late, as a backend TV server for Kodi.  Even though I was successful in setting this up, I’ve hit some frustrating limitations and have so decided to pull the pin on that experiment, and go back to Tvheadend (TVH for short). My major annoyances are/were:

  • I couldn’t find a way to split DVB-T TV and DVB-T radio stations, the way TVH does in Kodi. With MythTV, they all appear as TV stations.
  • The ability to set channel groups seems to be lacking in MythTV.

I was looking further and further into these issues and there was some talk in some forum somewhere about being able to do these things with SQL commands in MySQL, but I figured I didn’t want to waste any more time – I’d invested far too much already! In TVH it *just works*.  Other gripes with MythTV include:

  • Since Myth’s both a front-end and back-end, there are often parts of config that relate to the front-end that I’ll never touch, so it’s a bit confused when you’re only using the backend. This is especially apparent with some iPhone apps I bought, where some screens of the app are for the backend server, and some for the frontend. The benefit of TVH is that it is a pure server – there is none of this confusion of backend vs frontend!
  • It’s pretty fiddly just to get the MythTV server running. You also have to jump through a lot of hoops to get the mythweb webserver going as well. Say goodbye to a weekend!

A fairer comparison is MythBuntu vs TVH-Ubuntu, rather than MythTV-FreeBSD.  I’ve tried MythBuntu, and set-up is a bit easier than all that work I did on FreeBSD, but it’s still kludgy to my mind, and still suffers from my major gripes with it.

I have found it to be actually quite straightforward to install TVH from a vanilla Ubuntu install, and to keep it up to date with Git pulls. I’ll add a blog post soon to show how this is done. My ideal setup would be for TVH to stabilise and add native HDHomeRun support for FreeBSD (the way MythTV manages to do!), and then have the FreeBSD people update the Ports collection with this stable code. Hopefully TVH will get there in the next year or two. Then I could run TVH on my FreeNAS/FreeBSD box, and shut down my separate Linux server.

Installing Mythweb into Your FreeNAS MythTV Jail

In my last blog I showed how I installed a MythTV backend PVR server into a FreeNAS Jail.

A must-have for usability is the Mythweb HTTP-based configuration tool. There’s a lot of hoops to jump through, but you should hopefully make it through unscathed!

Install Mythweb and Dependencies

pkg install mythplugin-mythweb

For me this says that it will install the following:

New packages to be INSTALLED:
 mythplugin-mythweb: 0.27_1
 php56-session: 5.6.7
 php56: 5.6.7
 apache24: 2.4.12
 php56-posix: 5.6.7
 php56-json: 5.6.7
 php56-mysql: 5.6.7

Since it is installing PHP 5.6, you’ll need the “56” version of mod_php as well:

pkg install mod_php56

There are important messages from the installs (shown here) which we’ll address below:

Message for apache24-2.4.12:
To run apache www server from startup, add apache24_enable="yes"
in your /etc/rc.conf. Extra options can be found in startup script.

Your hostname must be resolvable using at least 1 mechanism in
/etc/nsswitch.conf typically DNS or /etc/hosts or apache might
have issues starting depending on the modules you are using.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- apache24 default build changed from static MPM to modular MPM
- more modules are now enabled per default in the port
- icons and error pages moved from WWWDIR to DATADIR
 If build with modular MPM and no MPM is activated in 
 httpd.conf, then mpm_prefork will be activated as default
 MPM in etc/apache24/modules.d to keep compatibility with 
 existing php/perl/python modules!
Please compare the existing httpd.conf with httpd.conf.sample
and merge missing modules/instructions into httpd.conf!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Message for mythplugin-mythweb-0.27_1:
mythweb has been installed into:
 /usr/local/www/mythweb
You need to configure mythweb now according to the instructions in
 /usr/local/www/mythweb/INSTALL
For lighttpd you should have a look at the MythTV Wiki
 http://www.mythtv.org/wiki/MythWeb_on_Lighttpd

Message for mod_php56-5.6.7:
***************************************************************
Make sure index.php is part of your DirectoryIndex.
You should add the following to your Apache configuration file:
<FilesMatch ".php$">
 SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch ".phps$">
 SetHandler application/x-httpd-php-source
</FilesMatch>
***************************************************************

Server-Wide Config

Update “/etc/rc.conf" with the following:

apache24_enable="YES"

Update “/etc/hosts" to something similar to the below – changing the parts in red to suite your IP, hostname and domain:

127.0.0.1 localhost localhost.localdomain mythserver mythserver.gavowen.local
10.69.10.22 mythserver mythserver.gavowen.local

Mythweb Config

You can choose to put your mythweb into the root of the web server, but I prefer to put it off to the side it its own “mythweb” directory.

Copy the mythweb files to where the web server can use them:

mkdir /usr/local/www/apache24/data/mythweb
cp -R /usr/local/www/mythweb/* /usr/local/www/apache24/data/mythweb

Apache 2.4 runs as user and group “www” on FreeBSD/FreeNAS, so update the permissions accordingly:

chgrp -R www /usr/local/www/apache24/data
chmod -R g+rw /usr/local/www/apache24/data

TV Icons

I copied mine into my jail, then across to MythWeb’s TV icons directory:

cp /mnt/storage/channelicons/* /usr/local/www/apache24/data/mythweb/data/tv_icons

Mythweb Apache Config File

The Mythweb Apache config file (“/usr/local/www/apache24/data/mythweb/mythweb.conf.apache“) is a bit out of date for Apache 2.4 and PHP 5.6, so pull down the latest version directly to the directory you need it in.

cd /usr/local/etc/apache24/extra/
wget --no-check-certificate https://raw.githubusercontent.com/MythTV/mythweb/master/mythweb.conf.apache
cp /usr/local/etc/apache24/extra/mythweb.conf.apache /usr/local/etc/apache24/extra/mythweb.conf

Edit the “mythweb.conf" file and change the following:

<Directory “/var/www/html/data”>
to
<Directory “/usr/local/www/apache24/data/mythweb/data”>

and
<Directory “/var/www/html”>
to
<Directory “/usr/local/www/apache24/data/mythweb”>

My NAS has plenty of RAM, so I increase the PHP “php_value memory_limit” to 256M. Save the file and quit.

Make sure these lines are uncommented:

 setenv db_server "localhost" 
 setenv db_name "mythconverg" 
 setenv db_login "mythtv" 
 setenv db_password "mythtv"

Apache Config

Backup Apache’s original config file before editing “httpd.conf":

cp /usr/local/etc/apache24/httpd.conf /usr/local/etc/apache24/httpd.conf.original

Uncomment all these mods. The first two are usually on by default:

mod_env
mod_headers
mod_rewrite
mod_deflate
mod_auth_digest

Uncomment ServerName and change it to match what you’ve done previously in “/etc/hosts" e.g.:

ServerName mythserver.gavowen.local:80

In the “Supplemental Configuration” of the file, I place the following two lines:

# Mythweb configuration
Include etc/apache24/extra/mythweb.conf

Further down you’ll find the DirectoryIndex, where I add “index.php”

<IfModule dir_module>
 DirectoryIndex index.php index.html
</IfModule>

Directly below that part I add the following:

<FilesMatch ".php$">
 SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch ".phps$">
 SetHandler application/x-httpd-php-source
</FilesMatch>

Restart Apache:

service apache24 start

Now open a browser. Enjoy.

NB: Subsequent restarts of apache can be done with “apachectl graceful"

Troubleshooting

If the page doesn’t load try this:

create user 'mythtv'@'127.0.0.%' identified by 'mythtv'; 
create user 'mythtv'@'127.0.1.%' identified by 'mythtv'; 
set password for 'mythtv'@'127.0.0.%' = password('mythtv'); 
set password for 'mythtv'@'127.0.1.%' = password('mythtv'); 
connect mythconverg; 
grant all privileges on *.* to 'mythtv'@'127.0.0.%' with grant option; 
grant all privileges on *.* to 'mythtv'@'127.0.1.%' with grant option; 
flush privileges; 
exit;

There are other possible issues addressed at this link.

Time Issue

You might get a warning such as:

User Notice at /usr/local/share/mythtv/bindings/php/MythBackend.php, line 132:
 !!NoTrans: Failed to set php timezone to AEST Response from backend was Array ( [0] => AEST [1] => 36000 [2] => 2015-04-25T10:14:06Z ) !!
 Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /usr/local/www/apache24/data/mythweb/includes/errors.php on line 161

If that’s the case I find installing NTP a good solution:

pkg install ntp

Update “/etc/rc.conf" with the following:

ntpd_enable="YES"

Then start it with “service ntpd start". Issue “date" to see that it’s accurate. Then:

cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

search for “date.timezone” and change it to suit. For me it’s date.timezone = "Australia/Melbourne"

 

MythTV Server in a FreeNAS Jail

MythTV is is one of the most well-known open source LiveTV/PVR servers, and worth trying out and comparing to Tvheadend for serving up live TV to Kodi. I have previously given some background info on both of them. Here’s how you can install the MythTV backend in a FreeNAS jail.

Creating your Jail

First make sure your jail environment is set-up correctly:

Jail setup

I’ve carved out a range of IPs from my local LAN /24 subnet of 10.69.10.0/24

Next, go to the Jails tab and “Add Jail”. Click on “Advanced Mode” if not already.

I like to call my MythTV Jail “mythserver” – I feel this is preferable to calling it say “mythtv” because if the name is too close to the program name, it can get confusing later on in system log files.

I let it auto-select the next available free IP address, and then manually add the “IPv4 default gateway” – the router’s LAN IP which for me is 10.69.10.1.

I leave “autostart” and “VIMAGE” selected.

Once you hit “Ok” you can edit the jail you just created, and you should see that it’s added a MAC address, and for FreeNAS 9.3 it’s also added “allow.raw_sockets=true” in the “Sysctls” section.  If this is your first jail, it’ll take a while as it downloads the jail template from FreeNAS, before it finalises setting up the jail.

Jail Storage

You’ll want to map some extra storage into your jail for recordings. I give it full permissions:

mythstorage

I limit it to 40 Gigs in the Options:

mythoptions

Then I mount it into the jail:

mythmountstorage

Jail Login

SSH to your FreeNAS and list your jails:

jls

e.g.:

root@sarlacc# jls
 JID IP Address Hostname Path
 1 - dhcp_dns /mnt/volume1/jails/dhcp_dns
 2 - mythserver /mnt/volume1/jails/mythserver

My MythTV jail called “mythserver” is jail ID #2 at the moment. Log into the jail:

jexec 2 /bin/csh

Jail Update

pkg update
pkg upgrade

The “pkg update” is redundant as the upgrade does an update first, but I still like to do it regardless. Just say yes to all the upgrade prompts. You can run the same commands again after the upgrade, just to confirm the software is now current.

Bash Shell

If you prefer Bash like I do, install it tweak it.

pkg install bash
vi ~/.bashrc

and add some aliases…

# some useful aliases
alias h='fc -l'
alias j=jobs
alias m=$PAGER
alias ll='ls -laFo'
alias l='ls -l'
alias g='egrep -i'

Log out and back in with bash:

exit
jexec 2 /usr/local/bin/bash

That’s if jail ‘2’ is your myth jail. You may only need to type jexec 2. Try it and see.

Helper Software

Install “GNU Make” for compiling LAME:

pkg install gmake

Install the FreeBSD Ports tree and compile the LAME encoder:

cd /usr/ports
portsnap fetch extract
cd /usr/ports/audio/lame
make install clean
cd /

NB: Even though the directories are there, if you don’t do a fresh “extract” then the system will complain, so you have to run this the first time after creating the jail. If you are doing further installs some time in the future (say next week), all you need to run before compilation is portsnap fetch update

Install the graphical packages. You’ll need these for configuring MythTV by the setup GUI which runs on the X-Windows system. Note the upper case X in libXv:

pkg install libXv
pkg install qt4-webkit
pkg install xauth
pkg install xorg-fonts

Install MythTV

pkg install mythtv

You have time to go grab a coffee now, as it’ll take a while. You’ll see a message at the end like:

**********
MythTV has now been installed, but it still needs to be configured.
1. To create the database, use the following command:
mysql -uroot -p < /usr/local/share/mythtv/database/mc.sql
2. Next, run mythtv-setup.
See http://www.mythtv.org/docs/ for more information.
**********

You’ll get to do (1.) and (2.) later. For now, update /etc/rc.conf with the following:

sshd_enable="YES" #change the existing "NO" entry to "YES"
mysql_enable="YES"
mythbackend_enable="YES"

I found that the hostname was in that file twice, so I deleted the duplicate.

Tip: You can quickly update system variables with the following:

sysrc sshd_enable=YES
sysrc mysql_enable="YES"
sysrc mythbackend_enable="YES"

Install MyQSL

Of course we don’t have MySQL installed yet, so we need to grab that too, and start it up:

pkg install mysql56-server
service mysql-server start

Populate mysql with the MythTV database:

mysql -uroot -p < /usr/local/share/mythtv/database/mc.sql

Just hit the “enter” key at the password prompt, as a password isn’t yet set. Out of interest, this does the following:

==========
CREATE DATABASE IF NOT EXISTS mythconverg;
GRANT ALL ON mythconverg.* TO mythtv@localhost IDENTIFIED BY "mythtv";
FLUSH PRIVILEGES;
GRANT CREATE TEMPORARY TABLES ON mythconverg.* TO mythtv@localhost IDENTIFIED BY "mythtv";
FLUSH PRIVILEGES;
ALTER DATABASE mythconverg DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
==========

Login into mysql (hit enter at the password prompt) and check that “mythconverg” is in there.

mysql -p
show databases;
exit

MySQL Timezone Update

Update timezone info with:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

I found I got the “Data too long for column ‘Abbreviation’ Error” so I did the following:

mysql_tzinfo_to_sql /usr/share/zoneinfo > /tmp/timezonefix
vi /tmp/timezonefix

I searched through the file and found the stanza (parts between two semicolons) that contain “use tzsetup” and edited out the following lines:

;
INSERT INTO time_zone (Use_leap_seconds) VALUES ('N');
SET @time_zone_id= LAST_INSERT_ID();
INSERT INTO time_zone_name (Name, Time_zone_id) VALUES ('Factory', @time_zone_id);
INSERT INTO time_zone_transition_type (Time_zone_id, Transition_type_id, Offset, Is_DST, Abbreviation) VALUES
 (@time_zone_id, 0, 0, 0, 'Local time zone must be set--use tzsetup')
;

I then ran:

cat /tmp/timezonefix | mysql -u root -p mysql

This now completed without error.

Set MySQL Password

mysqladmin -u root password <yourpassword>
e.g
mysqladmin -u root password letmein

Test with:

mysql -p

You should have to put in that password now. Type “exit” to quit out.

Setup X11 Forwarding

Edit /etc/ssh/sshd_config with the following updates, replacing the IP address below with your IP:

ListenAddress 10.69.10.22
PermitRootLogin yes
PasswordAuthentication yes
X11Forwarding yes
X11UseLocalhost no

Now start sshd:

service sshd start

This generates keys and starts the SSH server. I like to test the server with a  service sshd restart , to make sure it starts cleanly now that the keys are present.

Set a root password, and test the password along with external connectivity to the mythtv-setup script. If all’s successful, it’ll time out and say that it cannot connect to the X server. That’s the desired outcome, as you want to connect to an X server on another machine. Remember to update the IP address below to that of your jail.

[root@mythserver /]# passwd 
Changing local password for root
New Password:
Retype New Password:
[root@mythserver /]# exit
[root@mythserver /]# ssh -Y root@10.69.10.22 /usr/local/bin/mythtv-setup
Password:
mythtv-setup: cannot connect to X server

Setup Remote X Server

Download Xming from here:
Download PuTTY from here:

1) Install Xming server and start it
2) Install PuTTY on your local machine
3) Configure the default profile in PuTTY with the IP and SSH port of your MythTV Server
4) Go to the Connection panel then select ssh and enable compression, then the x11 tab and check “Enable x11 Forwarding” box, then enter localhost:0 in the “X Display Location” and check “MIT-Magic-Cookie-”
5) Go to “Session”, type “MythTV Server” in the Saved Sessions, and hit the Save button.

Configuring MythTV

With the Xming server started, open the PuTTY session you saved and login (with the user you created earlier) to the myth server, then type….

mythtv-setup

This will open an Xwindow on your local screen and load the myth setup screen. You might have to run this a second or third time, as it might quit after a country and language update, and also after a database schema update. You’ll get there eventually.

I recommend you follow the MythBuntu setup guide here, skipping right down to the “MythTV Backend Setup” section, and taking it from there.

Start the Backend

The backend service now needs to be started if not already:

service mythbackend start

Also make sure it’s filled with your config settings:

mythfilldatabase

Congratulations – you’ve now configured MythTV backend on FreeNAS in a jail.

Troubleshooting

If you have any issues, check where the logserver stores its files and check the logs.

[root@mythserver /var/log/mythtv]# ll
total 12988
drwxr-xr-x 2 root wheel - 5 Apr 21 03:00 ./
drwxr-xr-x 3 root wheel - 22 Apr 21 03:01 ../
-rw-r--r-- 1 root wheel - 219163 Apr 21 03:00 mythbackend.20150420163447.83755.log
-rw-r--r-- 1 root wheel - 12917053 Apr 21 19:40 mythbackend.20150420170022.85871.log
-rw-r--r-- 1 root wheel - 4998 Apr 21 03:00 mythlogserver.20150420163448.83757.log
[root@mythserver /var/log/mythtv]#

tail the latest backend log file:

[root@mythserver /var/log/mythtv]# tail -5 mythbackend.20150420170022.85871.log
2015-04-21 19:41:31.854481 E [85871/101782] HttpServer107 servicehost.cpp:426 (ProcessRequest) - No Security Pin assigned. Run mythtv-setup to set one.
2015-04-21 19:41:31.862285 I [85871/101739] ProcessRequest mainserver.cpp:1420 (HandleAnnounce) - MainServer::ANN Monitor
2015-04-21 19:41:31.862295 I [85871/101739] ProcessRequest mainserver.cpp:1422 (HandleAnnounce) - adding: kodi as a client (events: 0)
2015-04-21 19:41:31.875402 E [85871/101782] HttpServer114 servicehost.cpp:143 (Invoke) - MethodInfo::Invoke - An Exception Occurred: No Security Pin assigned. Run mythtv-setup to set one.
2015-04-21 19:41:31.875436 E [85871/101782] HttpServer114 servicehost.cpp:426 (ProcessRequest) - No Security Pin assigned. Run mythtv-setup to set one.
[root@mythserver /var/log/mythtv]#

ooops – didn’t add a security pin – have to set that up!

Other tips:

  • Go to another box and “telnet <your myth IP> 3306” to make sure your MySQL database is working and allowing connections.
  • Got to http:<your MythTV IP>:6544  to make sure you have web connectivity
  • All else fails – RTFM: MythTV Wiki, and the User Manual.

Other Tasks

It’s advisable you setup MythWeb for managing your TV recordings.

A Breakdown of Kodi LiveTV PVR Backends for FreeNAS

I use the awesome open source Kodi media centre for all my movies and TV shows, so it’s only natural that I use it as a live TV frontend. Since I already have an equally awesome FreeNAS NAS, then it makes sense to see if I can utilise its “Jails” functionality to run the live TV / PVR backend, instead of utilising a separate box. It makes sense – the NAS has a grunty CPU; teamed 1Gig Ethernet links; 16Gig of RAM; loads of storage space for recording TV, and is always on – so it’s the perfect candidate, so long as I can get the backend software to run!

This page currently lists four backends for Linux:  TVheadendMythTVVDR and DVBLink.  Out of those four, only the first three are possible under FreeBSD, as DVBLink is commercial software with only binary code downloads for Linux (among others), but not FreeBSD. The others have downloadable source code which can be compiled on FreeBSD. Discussing them further:

Tvheadend

Tvheadend (aka “TVH”) is basically the unofficial TV backend for Kodi. One distribution – OpenELEC – even includes the server in it’s distribution (although SoC systems like RaspberryPi miss out). I was actually using the inbuilt TVH server in OpenELEC before going to a RaspberryPi2 front end, which cut down noise in my lounge room by not having to run a PC with fan near my TV.

On their currently out-of-date website they say “With the integration of PVR functionality into XBMC [kodi], this has now become possibly the most popular TVH client. Indeed much of the recent development of HTSP has been focused on improving integration with XBMC [kodi].

Although the TVH devs don’t much update the website, the actual code is coming along in leaps and bounds with a lot of active development over at GitHub. From what I can gather here, this code was at version 3.4 when one developer by the name of Adam Sutton did a lot of work up till that point, but with a young family he found it hard to continue to commit to the project. That branch is currently known as the “stable” branch. Thankfully another team of devs lead by Andreas Öman came to the fore, and the project was fully opened up as an open source project, and the current code being updated to 3.9.x and is deemed the “unstable” branch. Still this is the branch that you want to be using as it has the transcoding, timeshifting (pause/rewind live TV) and other goodies, and it’s what you’ll get from Github.

Hopefully the 3.9 branch stabilises into 4.0 soon, and FreeBSD ports update their code, and the iPhone TvhClient gets updated as well so it supports all the 3.9 features like transcoding. This does seem to be the backend for Kodi users to watch in the future.

The problem main problem with Tvheadend on FreeBSD is seemingly no support for the SiliconDust HDHomeRun. According to this page, the way TVH supports HDHomeRun is with a Linux “dvbhdhomerun” driver, which only works on Linux as far as I’m aware. This really is a deal-breaker for me, as the HDHomeRun is what I use, and FreeBSD/FreeNAS is my preferred server platform. I really hope they can find some other way to support HDHomeRun on the *BSD’s.

MythTV

This one has been around for years, and has the most tedious set-up process, although is arguably the most flexible. On a generic server or ESXi, you can install the MythBuntu distribution, which makes install a lot easier, but on FreeBSD in a headless server, there’s a lot more heavy lifting.

I recommend setting up a MythTV jail, even if you have Tvheadend installed, and see which one works best for you.  The good thing about the FreeBSD jails in FreeNAS is that you can set them up without stepping on each other’s toes, and it’s a fun tech exercise. The only thing with MythTV is that it engages all the HDHomeRun tuners at all times even when not watching TV, so you’ll need to shut that jail if you’ve got a Tvheadend jail running and are trying that out. Tvheadend is a lot friendlier in this regard – it only uses a HDHomeRun tuner when it needs one, so most of the time it’s either using none or one tuner, and only using more than one tuner if you’re watching live TV on one mux, and recording on another mux (or recording two shows simultaneously on two different muxes).

VDR

Well I can’t say I’ve actually used this for Kodi. I’ve stayed away mostly because of what I perceive as limited support for the HDHhomeRun network TV tuner. A web search for “VDR HDHomeRun” shows up http://www.fepg.org/hdhomerun/. This isn’t very confidence-inspiring because if you look at the history, it shows it’s at version 0.0.1 last updated five years ago in 2010! Yes I think I’ll give this one a miss for now.

Summary

If it wasn’t for wanting to use the HDHomeRun I’d probably use Tvheadend for its ease of use, but since I do, my only choice is to use MythTV as a TV/PVR backend for Kodi. I’ll put together an install guide on my blog for MythTV, and also add some info into my wiki.