Difference between revisions of "Build from Source"

From MythTV Official Wiki
Jump to: navigation, search
(Prerequisites)
(Add run time dependencies for 0.28)
 
(20 intermediate revisions by 8 users not shown)
Line 1: Line 1:
 
{{User_Manual_TOC}}
 
{{User_Manual_TOC}}
 
+
{{UpToDate 0.27}}
This page is up-to-date to MythTV version 0.21, the current release is {{CurrentRelease}}
+
  
 
==Introduction==
 
==Introduction==
 +
For most people, it will be far easier to install a pre-built package for MythTV rather than building from source. Reasons for building from source include:
 +
*There is no pre-built package for your Linux distribution.
 +
*The pre-built package for your distribution is out of date.
 +
*You want to run a pre-release version of the software.
 +
*Users choose to test/write patches.
  
There are different ways to get Mythtv installed on your system: 
+
If you have already installed a pre-built package and you have a need to try out a source code change, it would be preferable to use your distribution's build process to build a version that is compatible with the already installed version. There are differences in the placement of files between the downloaded packages and the code you build yourself.
  
# From source;
+
This guide shows how to build from source code downloaded from github.
# Using apt-get;
+
# Using a MythTV Linux distribution (e.g. MythBuntu, MythDora, etc.) [[MythTV distros |more info]].
+
  
In this guide we will discuss how to install from source.  
+
== Dependencies ==
 +
One of the most difficult parts of building the code is getting the correct dependencies installed first. The syntax for installing these will vary from one distribution to another, and package names may also vary between distributions.
  
This guide is will allow you to build the latest version of MythTV on Ubuntu and Fedora.
+
{| class="mw-collapsible mw-collapsed wikitable"
 +
! Build Dependencies for version 0.27
 +
|-
 +
|<code><nowiki>
 +
ccache yasm libqt4-dev libqtwebkit-dev libqt4-opengl-dev libdvdnav-dev libfreetype6-dev libavc1394-dev libiec61883-dev liblircclient-dev libxinerama-dev libxxf86vm-dev libcrystalhd-dev libxvmc-dev libxext-dev libimlib2-dev libasound2-dev libmp3lame-dev libvorbis-dev libdts-dev lsb-release libpulse-dev
 +
libxrandr-dev libfftw3-dev libva-dev libvdpau-dev libudev-dev libclass-dbi-perl libnet-upnp-perl libio-socket-inet6-perl libdbd-mysql-perl libjson-perl libwww-perl python-oauth python-lxml python-mysqldb python-pycurl python-urlgrabber libgl1-mesa-dev libdvdread-dev fftw-dev libvorbis-dev libflac-dev
 +
libmad0-dev libcdaudio-dev libcdio-dev libcdparanoia-dev libsdl1.2-dev libfaad-dev libexif-dev libtiff4-dev libxv-dev libtag1-dev libvisual-0.4-dev libmysqlclient-dev libdate-manip-perl libxml-simple-perl libimage-size-perl libdatetime-format-iso8601-perl libsoap-lite-perl libx264-dev
 +
libvpx-dev libavahi-compat-libdnssd-dev libssl-dev libcdio-cdda-dev libcdio-paranoia-dev libxml2-dev libass-dev libcec-dev uuid-dev libxml-xpath-perl autoconf gdb
 +
</nowiki></code>
 +
|}
  
== Prerequisites ==
+
{| class="mw-collapsible mw-collapsed wikitable"
 +
! Build Dependencies for version 0.28
 +
|-
 +
|<code><nowiki>
 +
ccache yasm help2man qtdeclarative5-dev libqt5webkit5-dev libqt5opengl5-dev qtscript5-dev qt5-qmake libdvb-dev po-debconf linux-kernel-headers libdvdnav-dev libfreetype6-dev libavc1394-dev libiec61883-dev liblircclient-dev libxinerama-dev libxxf86vm-dev libcrystalhd-dev libxvmc-dev libxext-dev libimlib2-dev
 +
libasound2-dev libmp3lame-dev libvorbis-dev libdts-dev lsb-release libpulse-dev libxrandr-dev libfftw3-dev libva-dev libvdpau-dev libudev-dev libclass-dbi-perl libnet-upnp-perl libio-socket-inet6-perl libdbd-mysql-perl libjson-perl libwww-perl dh-python python python-oauth python-lxml python-mysqldb
 +
python-pycurl python-urlgrabber libgl1-mesa-dev libdvdread-dev fftw-dev libvorbis-dev libflac-dev libmad0-dev libcdaudio-dev libcdio-dev libcdparanoia-dev libsdl1.2-dev libfaad-dev libexif-dev libtiff5-dev libxv-dev libtag1-dev libvisual-0.4-dev libmysqlclient-dev libdate-manip-perl
 +
libxml-simple-perl libimage-size-perl libdatetime-format-iso8601-perl libsoap-lite-perl libx264-dev libvpx-dev libavahi-compat-libdnssd-dev libssl-dev libcdio-cdda-dev libcdio-paranoia-dev libxml2-dev libass-dev libcec-dev libexiv2-dev uuid-dev libxml-xpath-perl autoconf gdb
 +
</nowiki></code>
 +
|}
  
First install required packages:
+
{| class="mw-collapsible mw-collapsed wikitable"
 +
! Run Time Dependencies for version 0.27
 +
|-
 +
|<code><nowiki>
 +
mysql-server ntp libicu48 libqt4-sql-mysql
 +
</nowiki></code>
 +
|}
  
<code><pre>
+
{| class="mw-collapsible mw-collapsed wikitable"
sudo apt-get install build-essential liblircclient-dev libasound2-dev libdts-dev libdvdnav-dev \
+
! Run Time Dependencies for version 0.28
libxv-dev libxxf86vm-dev transcode libmp3lame-dev subversion qt4-dev-tools libqt4-dev libsamplerate0 \
+
|-
libxvidcore4 liba52-0.7.4-dev libfame-dev libcdio-dev msttcorefonts libasound2-doc libmad0-dev \
+
|<code><nowiki>
libid3tag0-dev libvorbis-dev libflac-dev libcdaudio-dev libcdparanoia0-dev fftw3-dev libfaad-dev \
+
mysql-server-5.6 ntp libicu55 libqt5sql5-mysql mysql-client-5.6
libsmpeg-dev libmp4v2-dev libtag1-dev mysql-server libvisual-0.4-dev libexif-dev libxvmc-dev \
+
</nowiki></code>
libxinerama-dev uuid-dev libicu-dev
+
|}
</pre></code>
+
  
Note: Version 0.24 requires also ''' libfreetype6-dev'''; not required but advised: '''yasm''', '''ccache'''.
+
{| class="mw-collapsible mw-collapsed wikitable"
 +
! Run Time Dependencies for MythWeb
 +
|-
 +
|<code><nowiki>
 +
apache2-mpm-prefork php5 php5-mysql libhttp-date-perl
 +
</nowiki></code>
 +
|}
  
Note: Version 0.21 and earlier use QT3 instad of QT4, so you need: '''libqt3-mt-dev''' and '''libqt3-mt-mysql'''.
+
The package ''mysql-server'' only needs to be installed on one backend, normally the master backend, or it can be installed on a separate database server, although this would be unusual.
  
 +
On systems that do not have ''mysql-server'' (e.g. remote frontends, slave backends), you need to install ''mysql-client'' instead.
  
To install css support use:
+
Install the build dependencies on your build machine. Install the Run Time dependencies on your MythTV machine (which may be the same as the build machine). If you plan to use MythWeb, install those dependencies on your master backend system.
<code><pre>
+
{| class="wikitable" style="width: 100%;"
/usr/share/doc/libdvdread3/install-css.sh
+
!Distribution||Install Command||Additional packages
</pre></code>
+
|-
or on newer distributions:
+
|style="width: 45%;"|Ubuntu, Debian, MythBuntu, other Debian based distributions.
<code><pre>
+
|style="width: 40%;"|<code>sudo apt-get install </code>''Dependency List''
/usr/share/doc/libdvdread4/install-css.sh
+
|style="width: 15%;"|<pre>build-essential git</pre>
</pre></code>
+
|}
 
+
Depending on your distribution, run the install command with the list of packages.
If you want mythweb as well - you need
+
<code><pre>
+
sudo apt-get install apache2 php5 libapache2-mod-php5 php5-mysql
+
</pre></code>
+
  
 
==Getting and compiling the source code==
 
==Getting and compiling the source code==
  
Get the [http://code.mythtv.org/trac latest code] for MythTV. In general, you should probably choose the stable version. If you don't mind if your MythTV system is non-functional or has serious bugs that may prevent proper operation/result in lost recordings or inability to play back recordings, you may try using the unstable, development code. If using unstable, development code, you should follow the [http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-commits mythtv-commits] and [http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev mythtv-dev] mailing lists.
+
{| class="wikitable" style="width: 100%;"
 +
!Step||Command to run
 +
|-
 +
|style="width: 30%;"|create a directory
 +
|style="width: 70%;"|<code>cd<br>mkdir ~/build</code>
 +
|-
 +
|clone
 +
|<code>cd ~/build<br>git clone <nowiki>https://github.com/MythTV/mythtv.git</nowiki> mythtv<br>cd mythtv</code>
 +
|-
 +
|Check versions available
 +
|<code>git branch -a</code>
 +
|-
 +
|Choose your version. The current stable released version is {{CurrentFixes}}. We recommend to use that version.
 +
|<code>git checkout fixes/0.xx</code>
 +
|-
 +
|}
  
Then, simply go in each directory and configure and build each component:
+
In general, you should probably choose the stable version. If you don't mind if your MythTV system is non-functional or has serious bugs that may prevent proper operation/result in lost recordings or inability to play back recordings, you may try using the unstable, development code. If using unstable, development code, you should follow the [http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-commits mythtv-commits] and [http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev mythtv-dev] mailing lists.
<code><pre>
+
./configure --enable-proc-opt
+
make
+
make install
+
</pre></code>
+
  
Note that adding any other configure arguments (with the possible exception of --prefix) to the main MythTV configure command is almost definitely a bad idea and shouldn't be required.
+
===Build and Install MythTV===
 +
In the ~/build/mythtv/mythtv directory, run the ./configure script. You can see available options by using the --help parameter with configure:
 +
<pre>./configure --help</pre>
 +
By default the build will install mythtv in a directory structure under /usr/local/. Executables will be in /usr/local/bin. You can modify this behavior with the --prefix= parameter. The default prefix is /usr/local.
  
For mythplugins, if you don't want some modules you might want to disable them (run "./configure --help" in each directory to see the options you can set for the build).
+
Normally you will not need to supply any options to configure, although 0.27 users should add ''--disable-mythlogserver'' ([[Mythlogserver|mythlogserver]]). Run it as follows:<br>
For example:
+
<pre>./configure</pre>
<code><pre>
+
The configure step may identify dependencies that are missing. If so you will need to find them and install them before continuing. Please let us know via an update to this page or make a comment in th discussion page.
./configure --disable-mythgame --disable-mythnetflix
+
make
+
make install
+
</pre></code>
+
  
Note: If you want to be able to easily uninstall later, for example to update to new set of fixes, use "checkinstall" rather than "make install". "checkinstall" keeps track of all files installed by a "make install" or equivalent, creates a Slackware, RPM, or Debian package with those files, and adds it to the installed packages database, allowing for easy package removal or distribution. "checkinstall" will prompt for a package description, and then you must supply a version number by following the prompts.
+
If the configure was successful, run the build as follows
<code><pre>
+
<pre>make</pre>
./configure
+
The build may identify missing dependencies. Install them and notify us via a comment in the discussion.<br>
 +
When the build is successful, install this way
 +
<pre>sudo make install</pre>
 +
This will install both backend and frontend software. Install this on all machines, backend or frontend. You will only start the backend on the backend machines. On frontend machines the backend software will exist but will not be used.
 +
===Build and Install Plugins===
 +
Building and installing the plugins is optional. I recommend that new users skip this step. Plugins are not needed for any of the main functionality of MythTV, including watching Videos and watching DVDs. Plugins are for Music, Weather, YouTube, Games, etc.
 +
 
 +
Plugins are only used on the frontend, so if you have a separate backend you need not install them on the backend.
 +
 
 +
In the ~/build/mythtv/mythplugins directory, run the same commands as above for building and installing MythTV. If you only want to build certain plugins, you can disable the others in the ./configure command (check the --help for the syntax for that).
 +
<pre>./configure
 
make
 
make
checkinstall
+
sudo make install</pre>
</pre></code>
+
===Shared-Library requirements for MythTV===
 +
The runtime manager for shared libraries, /lib/ld.so, gets information about the locations and contents of shared libraries from /etc/ld.so.cache, a file created by ldconfig from information in /etc/ld.so.conf. Because MythTV installs shared libraries in /usr/local/lib, that directory needs to be added to the list of directories for ld.so to search when doing runtime linking of programs, if it is not already there. You do this, as root, by editing /etc/ld.so.conf, then running ldconfig.  There are many ways to do this; to determine the way that your distribution is configured, type:
 +
<pre>
 +
cat /etc/ld.so.conf
 +
cat /etc/ld.so.conf.d/*
 +
</pre>
  
== Post-install tasks  ==
+
Check if <code>/usr/local/lib</code> is included in the list displayed. If so then no action is needed.
=== Creating the mythtv user ===
+
to run MythTV as its own user I created one (so the backend doesnt run as root)
+
<code><pre>
+
sudo useradd mythtv
+
</pre></code>
+
  
=== MythTV database setup ===
+
If <code>/usr/local/lib</code> is not already included, then create as root a file under <code>/etc/ld.so.conf.d</code> that contains a line containing
 +
<pre>/usr/local/lib</pre>
  
You have to create a file for mythtv for database connections <code>~mythtv/.mythtv/mysql.txt</code>  
+
Make sure that /etc/ld.so.conf contains a line as follows
{{Code box|~mythtv/.mythtv/mysql.txt|<pre>
+
<pre>include /etc/ld.so.conf.d/*.conf</pre>
DBHostName=localhost
+
  
# By default, Myth tries to ping the DB host to see if it exists.
+
To ensure the cache has been updated, run this command:
# If your DB host or network doesn't accept pings, set this to no:
+
<pre>sudo /sbin/ldconfig</pre>
#
+
DBHostPing=no
+
  
DBHostName=localhost
+
===Test Setup===
DBUserName=mythtv
+
Instead of setting up the shared library cache as described above, if you have customized the location of the libraries using for example ''./configure --prefix=/home/peter/work/mythtv'', you can install and run the backend and frontend in your home directory by setting the path of the lib files as follows:
DBName=mythconverg
+
<pre>
DBPassword=mythtv
+
export LD_LIBRARY_PATH=/home/peter/work/mythtv/lib
 +
export PATH="$PATH:/home/peter/work/mythtv/bin"
 +
</pre>
  
# Set the following if you want to use something other than this
+
===Install MythWeb===
# machine's real hostname for identifying settings in the database.
+
If you plan to run MythWeb, install it on your master backend server. Install the dependencies, listed above. Check out Mythweb from git:
# This is useful if your hostname changes often, as otherwise you
+
{| class="wikitable" style="width: 100%;"
# will need to reconfigure mythtv (or futz with the DB) every time.
+
!Step||Command to run
# TWO HOSTS MUST NOT USE THE SAME VALUE
+
|-
#
+
|style="width: 30%;"|clone
LocalHostName=MYCOOLMYTHTVHOST
+
|style="width: 70%;"|<code>cd ~/build<br><nowiki>git clone https://github.com/MythTV/mythweb.git mythweb</nowiki><br>cd mythweb</code>
 +
|-
 +
|Check versions available
 +
|<code>git branch -a</code>
 +
|-
 +
|Choose your version. The current stable released version is {{CurrentFixes}}. We recommend to use that version.
 +
|<code>git checkout fixes/0.xx</code>
 +
|-
 +
|}
  
# If you want your frontend to be able to wake your MySQL server
+
Set up the web application as follows:
# using WakeOnLan, have a look at the following settings:
+
#
+
#
+
# The time the frontend waits (in seconds) between reconnect tries.
+
# This should be the rough time your MySQL server needs for startup
+
#
+
#WOLsqlReconnectWaitTime=0
+
#
+
#
+
# This is the number of retries to wake the MySQL server
+
# until the frontend gives up
+
#
+
#WOLsqlConnectRetry=5
+
#
+
#
+
# This is the command executed to wake your MySQL server.
+
#
+
#WOLsqlCommand=echo 'WOLsqlServerCommand not set'
+
  
</pre>}}
+
<pre>cd ~/build/mythweb/
 +
sudo cp -r ~/build/mythweb /usr/local/share/mythtv/mythweb
 +
sudo ln -s /usr/local/share/mythtv/mythweb/ /var/www/html/
 +
sudo cp -v /usr/local/share/mythtv/mythweb/mythweb.conf.apache /etc/apache2/sites-available/mythweb.conf
 +
</pre>
 +
Edit file /etc/apache2/sites-available/mythweb.conf using gedit or vi, for example:
 +
<pre>sudo vi /etc/apache2/sites-available/mythweb.conf</pre>
 +
Change the lines containing ''<Directory "/var/www/html/data">'' and ''<Directory "/var/www/html" >'' so that they read ''<Directory "/var/www/html/mythweb/data">'' and ''<Directory "/var/www/html/mythweb" >'', i.e. add the ''mythweb'' subdirectory.
 +
<pre>
 +
sudo a2enmod rewrite
 +
sudo a2ensite mythweb.conf
 +
sudo chown -R www-data:www-data /usr/local/share/mythtv/mythweb/data/
 +
sudo chmod -R g+w /usr/local/share/mythtv/mythweb/data/
 +
</pre>
 +
Restart your apache server as follows to get the changes applied:
 +
<pre>
 +
sudo /etc/init.d/apache2 restart
 +
</pre>
 +
the database and backend must be running for MythWeb to work. At this point you have not yet set up the database or the backend so you cannot try MythWeb. Once those things have been set up and are running, test MythWeb by navigating to <nowiki>http://servername/mythweb</nowiki> where ''servername'' is your master backend server on which mythweb is running. If running from a different system you may have to add ''servername'' plus its ip address to your /etc/hosts file.
 +
 
 +
For more advanced and detailed instructions on MythWeb see the file mythweb/INSTALL in the download from github.
  
Then you have to create a database and let the user set above access it
+
== Post-install tasks  ==
<pre>
+
After installing the software there are a number of steps that must be taken before you have a working environment. If you installed from a pre-built package these would be done automatically.
mysql -u root -p
+
 
 +
=== Creating the mythtv user ===
 +
MythTV backend needs to run as its own user. This should be a system account. Create a user as follows:
 +
<pre>sudo useradd --system mythtv</pre>
 +
Users might want to add ''--groups cdrom,audio,video'' to the above.
 +
 
 +
=== MythTV Database Setup ===
 +
Run these commands from the command line. The mysql command will prompt for your root database password, which you would have supplied during mysql installation. The mysql daemon must be running.
 +
<pre>mysql -u root -p
 
create database mythconverg;
 
create database mythconverg;
 
create user 'mythtv'@'%' identified by 'mythtv';
 
create user 'mythtv'@'%' identified by 'mythtv';
Line 140: Line 206:
 
grant all privileges on *.* to 'mythtv'@'localhost' with grant option;
 
grant all privileges on *.* to 'mythtv'@'localhost' with grant option;
 
flush privileges;
 
flush privileges;
exit;
+
exit;</pre>
 +
Run the following command [[MySQL_Time_Zone_Tables|to set up time zone tables]]:
 +
<pre>mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql</pre>
 +
Run mythbackend. This will automatically create your database or upgrade your previous mythconverg database schema to the latest version:
 +
<pre>mythbackend</pre>
 +
mythbackend will start up and create the database tables, after which it will shut down. Further attempts to start it will result in a message as follows:
 +
<pre>
 +
E  Scheduler: No capture cards are defined in the database.
 +
Perhaps you should re-read the installation instructions?
 
</pre>
 
</pre>
 +
If there are problems with the database, see the article [[Database Setup]].
  
Run <code>mythbackend</code> to test. This will automatically upgrade your previous mythconverg database schema to the latest version:
+
Before you can get the backend to start up and stay running, you have to configure at least one capture card correctly, plus one video source and connect these with an input. See [[Configuring_MythTV]]. Note that if you had installed the Ubuntu pre-built package there would not be this restriction, the backend can run without any configuration being done.
<pre>mythbackend</pre>
+
If mythbackend is running OK, test mythfrontend:
+
<pre>mythfrontend</pre>
+
  
=== Running MythTV on start ===
+
=== Backend Startup ===
I use a slightly modified script from mythbuntu for that. Just copy the content to <code>/etc/init.d/mythtv-backend</code> - chmod it with <code>sudo chmod 755 /etc/init.d/mythtv-backend</code>
+
For MythTV to be able to schedule and make recordings, the backend must be running at the time of the scheduled recordings. Normally this means running the backend at all times while the server is running. It should be set up to be automatically started when the server starts. This is handled automatically for you in the pre-built packages, but if you are building it yourself you have to set up some mechanism. Possible ways of doing it are ''[[Systemd_mythbackend_Configuration|systemd]]'', ''[[Upstart_mythbackend_Configuration|Upstart]]'', ''init script'', ''/etc/rc.local''. Ubuntu packages run it from Upstart (but is likely to switch to systemd in 16.04), which has the ability to restart the process if it fails.
  
To start every time you still have to add it to the rc:
+
The simplest way will be by editing the rc.local. Use ''gksudo gedit'' to edit rc.local and add the following line:
<code>update-rc.d mythtv-backend defaults</code>
+
<pre>/usr/local/bin/mythbackend -d --logpath /tmp/ --user mythtv</pre>
 +
This is a very basic and simplistic approach, but will work. For a reliable system you need to use something more advanced like Upstart. If you install from the Ubuntu or MythBuntu package the Upstart setup is done for you. Also you should create a directory other than /tmp/ for your logs. ''/var/log/mythtv'' is the popular location. Note that whatever directory you create for logs must be writeable by the mythtv user as well as frontend users. The frontend user if your normal Linux login, which you will use for viewing MythTV.
  
Also create a log directory for mythtv:
+
You can get a list of options available with mythbackend by running ''mythbackend --help''.
<code><pre>
+
sudo mkdir /var/log/mythtv
+
sudo chown mythtv:mythtv /var/log/mythtv
+
</pre></code>
+
  
{{Code box|/etc/init.d/mythtv-backend|<pre>
+
If the backend starts up before you have added any capture cards it will immediately shut down again. Proceed to [[Configuring MythTV]] and complete the configuration up to the point of setting up a capture card, a video source and an input connection, before trying to start it again.
#! /bin/sh
+
### BEGIN INIT INFO
+
# Provides:          mythtv-backend
+
# Required-Start:    $local_fs $remote_fs $network
+
# Required-Stop:    $local_fs
+
# Default-Start:    2 3 4 5
+
# Default-Stop:      0 1 6
+
# Short-Description: Start/Stop the MythTV server.
+
### END INIT INFO
+
  
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+
==Next Steps==
DAEMON=/usr/local/bin/mythbackend
+
At this point you need to perform the configuration steps. See the table of contents and proceed to [[Configuring_MythTV]] and then [[Configuring_Frontend]]. Until you have done that you will not be able to do anything useful with MythTV.
NAME="mythbackend"
+
DESC="MythTV server"
+
  
test -x $DAEMON || exit 0
+
[[Category:Distribution_Specific_Install_Guides]]
  
. /lib/lsb/init-functions
+
[[Category:Software Installation|1800]]
 
+
set -e
+
 
+
prime_firewire()
+
{
+
    if [ "$ENABLE_FIREWIRE" = "TRUE" ]; then
+
        log_daemon_msg "Priming Firewire "
+
        su - $USER -c "/usr/bin/mythprime"
+
        log_end_msg $?
+
    fi
+
}
+
 
+
USER=mythtv
+
USER_HOME=$(grep ^$USER /etc/passwd | awk -F : '{print $6}')
+
RUNDIR=/var/run/mythtv
+
ARGS="--daemon --logfile /var/log/mythtv/mythbackend.log --pidfile $RUNDIR/$NAME.pid"
+
EXTRA_ARGS=""
+
NICE=0
+
 
+
if [ -f /etc/default/mythtv-backend ]; then
+
  . /etc/default/mythtv-backend
+
fi
+
 
+
ARGS="$ARGS $EXTRA_ARGS"
+
 
+
mkdir -p $RUNDIR
+
chown -R $USER $RUNDIR
+
 
+
unset DISPLAY
+
unset SESSION_MANAGER
+
 
+
#create a symbolic link for mysql.txt so it can't be overwritten
+
mkdir -p $USER_HOME/.mythtv
+
chown -R $USER $USER_HOME/.mythtv
+
if [ ! -e $USER_HOME/.mythtv/mysql.txt ]; then
+
        ln -s /etc/mythtv/mysql.txt $USER_HOME/.mythtv/mysql.txt
+
fi
+
 
+
case "$1" in
+
  start)
+
        if [ -e $RUNDIR/$NAME.pid ]; then
+
                PIDDIR=/proc/$(cat $RUNDIR/$NAME.pid)
+
                if [ -d ${RUNDIR} -a "$(readlink -f ${RUNDIR}/exe)" = "${DAEMON}" ]; then
+
                        log_success_msg "$DESC already started; use restart instead."
+
                        exit 1
+
                else
+
                        log_success_msg "Removing stale PID file $RUNDIR/$NAME"
+
                        rm -f $RUNDIR/$NAME.pid
+
                fi
+
        fi
+
        prime_firewire
+
        log_daemon_msg "Starting $DESC: $NAME "
+
        start-stop-daemon --start --pidfile $RUNDIR/$NAME.pid \
+
                --chuid $USER --nicelevel $NICE --exec $DAEMON -- $ARGS
+
        log_end_msg $?
+
        ;;
+
  stop)
+
        log_daemon_msg "Stopping $DESC: $NAME "
+
        start-stop-daemon --stop --oknodo --pidfile $RUNDIR/$NAME.pid \
+
                --chuid $USER --exec $DAEMON -- $ARGS
+
        log_end_msg $?
+
        test -e $RUNDIR/$NAME.pid && rm $RUNDIR/$NAME.pid
+
        ;;
+
  restart|force-reload)
+
        log_daemon_msg "Restarting $DESC: $NAME "
+
        start-stop-daemon --stop --oknodo --pidfile $RUNDIR/$NAME.pid \
+
                --chuid $USER --exec $DAEMON -- $ARGS
+
        sleep 3
+
        prime_firewire
+
        start-stop-daemon --start --pidfile $RUNDIR/$NAME.pid \
+
                --chuid $USER --nicelevel $NICE --exec $DAEMON -- $ARGS
+
    log_end_msg $?
+
        ;;
+
  status)
+
        # We want to maintain backward compatibility with Hardy,
+
        # so we're not going to use status_of_proc()
+
        pidofproc -p $RUNDIR/$NAME.pid $DAEMON >/dev/null && status=0 || status=$?
+
        if [ $status -eq 0 ]; then
+
                log_success_msg "$NAME is running"
+
        else
+
                log_failure_msg "$NAME is not running"
+
        fi
+
        exit $status
+
        ;;
+
  *)
+
        N=/etc/init.d/$NAME
+
        echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
+
        exit 2
+
        ;;
+
esac
+
 
+
exit 0
+
</pre>}}
+
 
+
=== Autostarting the frontend in Xubuntu / Ubuntu ===
+
 
+
Create a file in <code>~/.config/autostart/mythfrontend.desktop</code>:
+
{{Code box|~/.config/autostart/mythfrontend.desktop|<pre>
+
[Desktop Entry]
+
Encoding=UTF-8
+
Version=0.9.9
+
Type=Application
+
Name=MythTV Frontend
+
Comment=
+
Exec=mythfrontend
+
StartupNotify=false
+
Terminal=false
+
Hidden=false
+
</pre>}}
+
 
+
=== Mythweb ===
+
For mythweb I just created a symlink to the checked out mythweb in the <code>/var/www</code>:
+
<code><pre>
+
sudo ln -s /usr/local/src/mythtv/mythplugins/mythweb /var/www/mythweb
+
# make sure data is writeable
+
sudo chown -R www-data /usr/local/src/mythtv/mythplugins/mythweb/data
+
</pre></code>
+
 
+
you have to enable mod-rewrite
+
<code><pre>
+
sudo ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
+
</pre></code>
+
 
+
you also need to have a version of php which has session, mysql, pcre, posix and json support
+
 
+
and copy/edit the apache config
+
 
+
<code><pre>
+
sudo cp mythplugins/mythweb/mythweb.conf.apache /etc/apache2/sites-available/mythweb.conf
+
sudo ln -s /etc/apache2/sites-available/mythweb.conf /etc/apache2/sites-enabled/mythweb.conf
+
</pre></code>
+
 
+
after that restart and have fun:
+
<code><pre>
+
sudo /etc/init.d/apache2 restart
+
</pre></code>
+
 
+
== Something didn't work? ==
+
With this you should be able to compile and install mythtv on a new (x)ubuntu box. Most problems come with mythtv setup (config files, database initialization etc.) Please refer to the other wiki pages/documentation for info on that. Before doing that It's best to do some investigation yourself.
+
 
+
The best way to debug problems is to check the output of the backend and frontend tasks:
+
 
+
To check the backend for error messages:
+
 
+
  tail -f /var/log/mythtv/mythbackend.log
+
 
+
To check the frontend for errors, you have two options:
+
 
+
1) run it from the command line. You can ALT+TAB to see the output in the terminal window while the frontend is running:
+
 
+
  mythfrontend
+
 
+
2) check the frontend log for error messages:
+
 
+
  tail -f /var/log/mythtv/mythfrontend.log
+
 
+
==System settings==
+
 
+
When setting up your HTPC / MythTV system, its best to set the following
+
 
+
'''For Ubuntu'''
+
Volume: the volume control is on the top panel by default. Set this to max.
+
Power Management: System->Preferences->Power Management - "Put display to sleep when inactive for" move the slider to the far right (never)
+
Screensaver: System->Preferences->Screensaver - uncheck "Activate screensaver when computer is idle"
+
System Bell: System->Preferences->Sound - in the "System Beep" tab, uncheck "Enable system beep" and check "Visual System Beep".
+
 
+
 
+
 
+
 
+
 
+
==Setup MythTV backend preferences and tune TV cards==
+
 
+
Open a Terminal Window and type
+
 
+
> mythtv-setup
+
 
+
You will now see the GUI for MythTV to setup the backend server and in particular the channel tuning for our broadcast streams. You will need to set up:
+
 
+
#General &mdash; General Backend settings, most user can use the defaults
+
#Capture Cards &mdash; you will configure your capture cards/devices here
+
#Video Sources &mdash; create guide data.
+
#Input connections &mdash; connect the Capture Card name to the Video Source
+
#Channel Editor &mdash; scan for your channels here
+
#Storage Groups &mdash; Configure which folders your recordings will be saved.
+
 
+
On entering each screen, the cursor is positioned at the bottom right on the "Next" button.  The cursor may not be visible.  Use the up, down, left, and right cursor keys to make selections.  Fields marked with up and down arrows can be modified by pressing the PageUp and PageDown keys or the left and right cursor keys; in some cases, the action is different.  For example, when setting times, cursor left and cursor right change the time by minutes, while Page Up and Page Down change by half hours.  Some fields, notably text fields, accept direct keyboard input.  For many fields, context-sensitive help appears in the bottom part of the screen when you position on the field.
+
 
+
===Multiple tuner cards===
+
 
+
If you have more than one TV card, you only need to do the channel scan on one of the cards. All cards of the same type should point to the same video source. For example let's say you have two cards both for Freeview (UK Network). Create a Video Source called FreeviewUK, now connect both cards to this Video source.
+
 
+
[DVB1] DVB card 1->FreeviewUK
+
 
+
[DVB0] DVB card 2->FreeviewUK
+
 
+
http://acaciaclose.co.uk/mediac/400_0/media/mythtune.jpg
+
 
+
When you scan for your channels make sure that you put in a frequency that corresponds to the transmitter that you will be receiving from, for instance Crystal Palace. You can find out the frequency on the web for your country and region.
+
 
+
Older TV cards may need all of the parameters from the transmitters tab to be entered, and not just left as "auto". The next version of MythTV (0.19) should have a "blind" scan, and it should just find the channels for you.
+
 
+
Alternatively users in the USA using Schedules Direct can fetch there lineups form Schedules Direct in Input Connections to automatically configure channel lineups.
+
 
+
 
+
=More info=
+
 
+
[1] See [[Ubuntu Installation Guides]] for installing on other Ubuntu versions.
+
 
+
 
+
 
+
 
+
=Previous information to integrated in the text above=
+
 
+
==The setup==
+
 
+
There are four key parts to MythTV, and setup roughly in this order:
+
#Start system services that MythTV needs
+
#Initialize the system database, mythconverg
+
#Setup system preferences and tune your TV card using mythtv-setup
+
#Start main MythTV server, mythtvbackend
+
#Start MythTV, mythfrontend
+
 
+
'''Create a user called mythtv and do all of the following steps as this user'''
+
 
+
Its a good idea to run these from a terminal window to start with, so we can see that everything is as it should be. Once all has been set up and complete, then we can run mysql/mythbackend/frontend as background server processes.
+
 
+
==Start system services==
+
 
+
We need to have both "mysql" and "mythbackend" running on startup
+
 
+
[[Image:Geeko_head48.png|25px]] openSUSE
+
 
+
Start YaST -> System ->System Services ( RunLevel)
+
 
+
Select mysql      click "enable"  Click OK after popup dialog
+
 
+
Select ntp          click  "enable"  Click OK after popup dialog
+
 
+
Notice there is a mythbackend option, would suggest that you do not enable "mythbackend" just yet, until you have tried running in a terminal window as below. If all steps below work then enable this to run.
+
 
+
==Setup mysql database mythconverg==
+
 
+
Set the root password for the mysql database. (replace mysqlpassword with your own)
+
 
+
Open a Terminal window
+
 
+
> mysqladmin -u root password  mysqlpassword
+
 
+
Setup the initial database.
+
Note - the mc.sql file should have been installed along with the mythtv documentation onto your system.  The default location for this file is shown below, however it may have been relocated elsewhere according to your distribution's documentation rules, so you may have to use a search (find, locate, etc) tool to reveal its whereabouts.
+
Suse 11.0 -- mc.sql is at "/usr/share/doc/packages/mythtv-doc/database/mc.sql"
+
(The following command will prompt for password)
+
 
+
> mysql -u root -p  < /usr/share/mythtv/database/mc.sql
+
 
+
'''How to Reset the Root Password (Slackware):'''
+
 
+
Login as a root
+
 
+
> su -
+
 
+
Stop the database
+
 
+
> /etc/rc.d/rc.mysqld stop
+
 
+
Set the initial file for a new root database password
+
 
+
> echo "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');" > /var/lib/mysql/mysql-init
+
 
+
Change the user and group ownership
+
 
+
> chown mysql.mysql /var/lib/mysql/mysql-init
+
 
+
Start a database manually
+
 
+
> /usr/bin/mysqld_safe --init-file=/var/lib/mysql/mysql-init &
+
 
+
Login to the database as a root with a new password
+
 
+
> mysql -u root -p new_password
+
 
+
[http://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html How to Reset the Root Password]
+
 
+
[[Category:HOWTO]]
+
[[Category:Distribution_Specific_Install_Guides]]
+
[[Category:Ubuntu]]
+

Latest revision as of 02:08, 30 January 2016

Software-update-available.png This page is up-to-date as of MythTV version 0.27.6, the current release is 0.27.6

Introduction

For most people, it will be far easier to install a pre-built package for MythTV rather than building from source. Reasons for building from source include:

  • There is no pre-built package for your Linux distribution.
  • The pre-built package for your distribution is out of date.
  • You want to run a pre-release version of the software.
  • Users choose to test/write patches.

If you have already installed a pre-built package and you have a need to try out a source code change, it would be preferable to use your distribution's build process to build a version that is compatible with the already installed version. There are differences in the placement of files between the downloaded packages and the code you build yourself.

This guide shows how to build from source code downloaded from github.

Dependencies

One of the most difficult parts of building the code is getting the correct dependencies installed first. The syntax for installing these will vary from one distribution to another, and package names may also vary between distributions.

Build Dependencies for version 0.27
ccache yasm libqt4-dev libqtwebkit-dev libqt4-opengl-dev libdvdnav-dev libfreetype6-dev libavc1394-dev libiec61883-dev liblircclient-dev libxinerama-dev libxxf86vm-dev libcrystalhd-dev libxvmc-dev libxext-dev libimlib2-dev libasound2-dev libmp3lame-dev libvorbis-dev libdts-dev lsb-release libpulse-dev libxrandr-dev libfftw3-dev libva-dev libvdpau-dev libudev-dev libclass-dbi-perl libnet-upnp-perl libio-socket-inet6-perl libdbd-mysql-perl libjson-perl libwww-perl python-oauth python-lxml python-mysqldb python-pycurl python-urlgrabber libgl1-mesa-dev libdvdread-dev fftw-dev libvorbis-dev libflac-dev libmad0-dev libcdaudio-dev libcdio-dev libcdparanoia-dev libsdl1.2-dev libfaad-dev libexif-dev libtiff4-dev libxv-dev libtag1-dev libvisual-0.4-dev libmysqlclient-dev libdate-manip-perl libxml-simple-perl libimage-size-perl libdatetime-format-iso8601-perl libsoap-lite-perl libx264-dev libvpx-dev libavahi-compat-libdnssd-dev libssl-dev libcdio-cdda-dev libcdio-paranoia-dev libxml2-dev libass-dev libcec-dev uuid-dev libxml-xpath-perl autoconf gdb
Build Dependencies for version 0.28
ccache yasm help2man qtdeclarative5-dev libqt5webkit5-dev libqt5opengl5-dev qtscript5-dev qt5-qmake libdvb-dev po-debconf linux-kernel-headers libdvdnav-dev libfreetype6-dev libavc1394-dev libiec61883-dev liblircclient-dev libxinerama-dev libxxf86vm-dev libcrystalhd-dev libxvmc-dev libxext-dev libimlib2-dev libasound2-dev libmp3lame-dev libvorbis-dev libdts-dev lsb-release libpulse-dev libxrandr-dev libfftw3-dev libva-dev libvdpau-dev libudev-dev libclass-dbi-perl libnet-upnp-perl libio-socket-inet6-perl libdbd-mysql-perl libjson-perl libwww-perl dh-python python python-oauth python-lxml python-mysqldb python-pycurl python-urlgrabber libgl1-mesa-dev libdvdread-dev fftw-dev libvorbis-dev libflac-dev libmad0-dev libcdaudio-dev libcdio-dev libcdparanoia-dev libsdl1.2-dev libfaad-dev libexif-dev libtiff5-dev libxv-dev libtag1-dev libvisual-0.4-dev libmysqlclient-dev libdate-manip-perl libxml-simple-perl libimage-size-perl libdatetime-format-iso8601-perl libsoap-lite-perl libx264-dev libvpx-dev libavahi-compat-libdnssd-dev libssl-dev libcdio-cdda-dev libcdio-paranoia-dev libxml2-dev libass-dev libcec-dev libexiv2-dev uuid-dev libxml-xpath-perl autoconf gdb
Run Time Dependencies for version 0.27
mysql-server ntp libicu48 libqt4-sql-mysql
Run Time Dependencies for version 0.28
mysql-server-5.6 ntp libicu55 libqt5sql5-mysql mysql-client-5.6
Run Time Dependencies for MythWeb
apache2-mpm-prefork php5 php5-mysql libhttp-date-perl

The package mysql-server only needs to be installed on one backend, normally the master backend, or it can be installed on a separate database server, although this would be unusual.

On systems that do not have mysql-server (e.g. remote frontends, slave backends), you need to install mysql-client instead.

Install the build dependencies on your build machine. Install the Run Time dependencies on your MythTV machine (which may be the same as the build machine). If you plan to use MythWeb, install those dependencies on your master backend system.

Distribution Install Command Additional packages
Ubuntu, Debian, MythBuntu, other Debian based distributions. sudo apt-get install Dependency List
build-essential git

Depending on your distribution, run the install command with the list of packages.

Getting and compiling the source code

Step Command to run
create a directory cd
mkdir ~/build
clone cd ~/build
git clone https://github.com/MythTV/mythtv.git mythtv
cd mythtv
Check versions available git branch -a
Choose your version. The current stable released version is 0.27-fixes. We recommend to use that version. git checkout fixes/0.xx

In general, you should probably choose the stable version. If you don't mind if your MythTV system is non-functional or has serious bugs that may prevent proper operation/result in lost recordings or inability to play back recordings, you may try using the unstable, development code. If using unstable, development code, you should follow the mythtv-commits and mythtv-dev mailing lists.

Build and Install MythTV

In the ~/build/mythtv/mythtv directory, run the ./configure script. You can see available options by using the --help parameter with configure:

./configure --help

By default the build will install mythtv in a directory structure under /usr/local/. Executables will be in /usr/local/bin. You can modify this behavior with the --prefix= parameter. The default prefix is /usr/local.

Normally you will not need to supply any options to configure, although 0.27 users should add --disable-mythlogserver (mythlogserver). Run it as follows:

./configure

The configure step may identify dependencies that are missing. If so you will need to find them and install them before continuing. Please let us know via an update to this page or make a comment in th discussion page.

If the configure was successful, run the build as follows

make

The build may identify missing dependencies. Install them and notify us via a comment in the discussion.
When the build is successful, install this way

sudo make install

This will install both backend and frontend software. Install this on all machines, backend or frontend. You will only start the backend on the backend machines. On frontend machines the backend software will exist but will not be used.

Build and Install Plugins

Building and installing the plugins is optional. I recommend that new users skip this step. Plugins are not needed for any of the main functionality of MythTV, including watching Videos and watching DVDs. Plugins are for Music, Weather, YouTube, Games, etc.

Plugins are only used on the frontend, so if you have a separate backend you need not install them on the backend.

In the ~/build/mythtv/mythplugins directory, run the same commands as above for building and installing MythTV. If you only want to build certain plugins, you can disable the others in the ./configure command (check the --help for the syntax for that).

./configure
make
sudo make install

Shared-Library requirements for MythTV

The runtime manager for shared libraries, /lib/ld.so, gets information about the locations and contents of shared libraries from /etc/ld.so.cache, a file created by ldconfig from information in /etc/ld.so.conf. Because MythTV installs shared libraries in /usr/local/lib, that directory needs to be added to the list of directories for ld.so to search when doing runtime linking of programs, if it is not already there. You do this, as root, by editing /etc/ld.so.conf, then running ldconfig. There are many ways to do this; to determine the way that your distribution is configured, type:

cat /etc/ld.so.conf
cat /etc/ld.so.conf.d/*

Check if /usr/local/lib is included in the list displayed. If so then no action is needed.

If /usr/local/lib is not already included, then create as root a file under /etc/ld.so.conf.d that contains a line containing

/usr/local/lib

Make sure that /etc/ld.so.conf contains a line as follows

include /etc/ld.so.conf.d/*.conf

To ensure the cache has been updated, run this command:

sudo /sbin/ldconfig

Test Setup

Instead of setting up the shared library cache as described above, if you have customized the location of the libraries using for example ./configure --prefix=/home/peter/work/mythtv, you can install and run the backend and frontend in your home directory by setting the path of the lib files as follows:

export LD_LIBRARY_PATH=/home/peter/work/mythtv/lib
export PATH="$PATH:/home/peter/work/mythtv/bin"

Install MythWeb

If you plan to run MythWeb, install it on your master backend server. Install the dependencies, listed above. Check out Mythweb from git:

Step Command to run
clone cd ~/build
git clone https://github.com/MythTV/mythweb.git mythweb
cd mythweb
Check versions available git branch -a
Choose your version. The current stable released version is 0.27-fixes. We recommend to use that version. git checkout fixes/0.xx

Set up the web application as follows:

cd ~/build/mythweb/
sudo cp -r ~/build/mythweb /usr/local/share/mythtv/mythweb
sudo ln -s /usr/local/share/mythtv/mythweb/ /var/www/html/
sudo cp -v /usr/local/share/mythtv/mythweb/mythweb.conf.apache /etc/apache2/sites-available/mythweb.conf

Edit file /etc/apache2/sites-available/mythweb.conf using gedit or vi, for example:

sudo vi /etc/apache2/sites-available/mythweb.conf

Change the lines containing <Directory "/var/www/html/data"> and <Directory "/var/www/html" > so that they read <Directory "/var/www/html/mythweb/data"> and <Directory "/var/www/html/mythweb" >, i.e. add the mythweb subdirectory.

sudo a2enmod rewrite
sudo a2ensite mythweb.conf
sudo chown -R www-data:www-data /usr/local/share/mythtv/mythweb/data/
sudo chmod -R g+w /usr/local/share/mythtv/mythweb/data/

Restart your apache server as follows to get the changes applied:

sudo /etc/init.d/apache2 restart

the database and backend must be running for MythWeb to work. At this point you have not yet set up the database or the backend so you cannot try MythWeb. Once those things have been set up and are running, test MythWeb by navigating to http://servername/mythweb where servername is your master backend server on which mythweb is running. If running from a different system you may have to add servername plus its ip address to your /etc/hosts file.

For more advanced and detailed instructions on MythWeb see the file mythweb/INSTALL in the download from github.

Post-install tasks

After installing the software there are a number of steps that must be taken before you have a working environment. If you installed from a pre-built package these would be done automatically.

Creating the mythtv user

MythTV backend needs to run as its own user. This should be a system account. Create a user as follows:

sudo useradd --system mythtv

Users might want to add --groups cdrom,audio,video to the above.

MythTV Database Setup

Run these commands from the command line. The mysql command will prompt for your root database password, which you would have supplied during mysql installation. The mysql daemon must be running.

mysql -u root -p
create database mythconverg;
create user 'mythtv'@'%' identified by 'mythtv';
create user 'mythtv'@'localhost' identified by 'mythtv';
set password for 'mythtv'@'%' = password('mythtv');
set password for 'mythtv'@'localhost' = password('mythtv');
connect mythconverg;
grant all privileges on *.* to 'mythtv'@'%' with grant option;
grant all privileges on *.* to 'mythtv'@'localhost' with grant option;
flush privileges;
exit;

Run the following command to set up time zone tables:

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

Run mythbackend. This will automatically create your database or upgrade your previous mythconverg database schema to the latest version:

mythbackend

mythbackend will start up and create the database tables, after which it will shut down. Further attempts to start it will result in a message as follows:

 E  Scheduler: No capture cards are defined in the database.
 Perhaps you should re-read the installation instructions?

If there are problems with the database, see the article Database Setup.

Before you can get the backend to start up and stay running, you have to configure at least one capture card correctly, plus one video source and connect these with an input. See Configuring_MythTV. Note that if you had installed the Ubuntu pre-built package there would not be this restriction, the backend can run without any configuration being done.

Backend Startup

For MythTV to be able to schedule and make recordings, the backend must be running at the time of the scheduled recordings. Normally this means running the backend at all times while the server is running. It should be set up to be automatically started when the server starts. This is handled automatically for you in the pre-built packages, but if you are building it yourself you have to set up some mechanism. Possible ways of doing it are systemd, Upstart, init script, /etc/rc.local. Ubuntu packages run it from Upstart (but is likely to switch to systemd in 16.04), which has the ability to restart the process if it fails.

The simplest way will be by editing the rc.local. Use gksudo gedit to edit rc.local and add the following line:

/usr/local/bin/mythbackend -d --logpath /tmp/ --user mythtv

This is a very basic and simplistic approach, but will work. For a reliable system you need to use something more advanced like Upstart. If you install from the Ubuntu or MythBuntu package the Upstart setup is done for you. Also you should create a directory other than /tmp/ for your logs. /var/log/mythtv is the popular location. Note that whatever directory you create for logs must be writeable by the mythtv user as well as frontend users. The frontend user if your normal Linux login, which you will use for viewing MythTV.

You can get a list of options available with mythbackend by running mythbackend --help.

If the backend starts up before you have added any capture cards it will immediately shut down again. Proceed to Configuring MythTV and complete the configuration up to the point of setting up a capture card, a video source and an input connection, before trying to start it again.

Next Steps

At this point you need to perform the configuration steps. See the table of contents and proceed to Configuring_MythTV and then Configuring_Frontend. Until you have done that you will not be able to do anything useful with MythTV.