Project

General

Profile

[TUTO] Debian 8.5 + Tvheadend 4.1 (git) + transcoding + SiliconDust HDHomeRun (from scratch)

Added by Sylvain Cecchetto over 8 years ago

Tutorial to install and configure Tvheadend 4.1 (build from Github) on Debian 8.5 with transcoding feature and the dual tuner SiliconDust HDHomeRun (HDHR4-2DT)

Hello ! This is my first tuto about this amazing tool: Tvheadend. First of all, sorry for my english, I'm french.
In this tuto I will explain you how to create a Tvheadend backed server from scratch.

Debian install and configuration

Preparing the USB stick (Mac users)

  • Download ISO file debian-*-amd64-netinst.iso
  • Copy the file to the USB stick with unetbootin
  • Boot on the USB stick

Debian installation

  • Choose standard installation
  • Software selection: uncheck all except SSH server and Standard system utilities

Debian configuration

  • Update / Upgrade
su root
apt-get update
apt-get upgrade
  • Add "sudo" command
su root
apt-get install sudo
adduser lamda_user sudo
  • Chande SSH default port
sudo nano /etc/ssh/sshd_config

Port XXX (as you want)

sudo /etc/init.d/ssh restart
  • Reduce Grub wait time
sudo nano /etc/default/grub
 

GRUB_TIMEOUT = 0 (on boot, pres ESC to access menu)

sudo update-grub
  • Install pm-utils
sudo apt-get install pm-utils
  • Static IP
sudo nano /etc/network/interfaces

iface eth0 inet static
address 192.168.XX.XX
netmask 255.255.255.0
gateway 192.168.1.1

sudo nano /etc/resolv.conf

nameserver 192.168.1.1

sudo /etc/init.d/networking restart

Tvheadend build, install and configuration

Preliminary packages

sudo apt-get update
sudo apt-get install build-essential git pkg-config libssl-dev bzip2 wget cmake
sudo apt-get install libavahi-client-dev zlib1g-dev libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavresample-dev libavfilter-dev  libav-tools liburiparser1 liburiparser-dev debhelper libcurl4-gnutls-dev liba52-0.7.4-dev

Build and install

cd /usr/src
sudo git clone https://github.com/tvheadend/tvheadend.git
cd tvheadend
sudo ./configure

if necessary

sudo ./configure --enable-ffmpeg_static --enable-hdhomerun_client --enable-hdhomerun_static

sudo make -j8
sudo make install

Create hts user in video group

We create a specific user to run tvheadend in the video group. The video group is important to allow Tvheadend to control the TV tuner.

sudo groupadd video
sudo adduser hts
sudo usermod -a -G video hts

Optionnal

sudo adduser hts sudo

Create daemon

The daemon allows us to use the sudo service tvheadend start and sudo service tvheadend stop command. Furthermore we can run Tvheadend on Debian start-up.

tvheadend_daemon file

 #! /bin/sh
### BEGIN INIT INFO
# Provides:          tvheadend
# Required-Start:    $local_fs $remote_fs udev
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO

# Author: Andreas Öman
# Modify by: Sylvain Cecchetto

# Do NOT "set -e" 

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
DESC="Tvheadend" 
NAME=tvheadend
DAEMON=/usr/local/bin/$NAME
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

TVH_USER=hts
TVH_GROUP=video
TVH_ENABLED=1

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Configure command line options
[ "$TVH_ENABLED" = "1" ] || exit 0

ARGS="-f" 
[ -z "$TVH_USER"      ] || ARGS="$ARGS -u $TVH_USER" 
[ -z "$TVH_GROUP"     ] || ARGS="$ARGS -g $TVH_GROUP" 
[ -z "$TVH_CONF_DIR"  ] || ARGS="$ARGS -c $TVH_CONF_DIR" 
[ -z "$TVH_ADAPTERS"  ] || ARGS="$ARGS -a $TVH_ADAPTERS" 
[ "$TVH_IPV6" = "1"   ] && ARGS="$ARGS -6" 
[ -z "$TVH_HTTP_PORT" ] || ARGS="$ARGS --http_port $TVH_HTTP_PORT" 
[ -z "$TVH_HTTP_ROOT" ] || ARGS="$ARGS --http_root $TVH_HTTP_ROOT" 
[ -z "$TVH_HTSP_PORT" ] || ARGS="$ARGS --htsp_port $TVH_HTSP_PORT" 
[ -z "$TVH_ARGS"      ] || ARGS="$ARGS $TVH_ARGS" 
[ "$TVH_DEBUG" = "1"  ] && ARGS="$ARGS -s" 

# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
    # Return
    #   0 if daemon has been started
    #   1 if daemon was already running
    #   2 if daemon could not be started
        udevadm settle
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
        || return 1
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
        $ARGS \
        || return 2
}

#
# Function that stops the daemon/service
#
do_stop()
{
    # Return
    #   0 if daemon has been stopped
    #   1 if daemon was already stopped
    #   2 if daemon could not be stopped
    #   other if a failure occurred
    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
    RETVAL="$?" 
    [ "$RETVAL" = 2 ] && return 2
    # Many daemons don't delete their pidfiles when they exit.
    rm -f $PIDFILE
    return "$RETVAL" 
}

case "$1" in
  start)
    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" 
    do_start
    case "$?" in
        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
    ;;
  stop)
    [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" 
    do_stop
    case "$?" in
        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
    ;;
  restart|force-reload)
    #
    # If the "reload" option is implemented then remove the
    # 'force-reload' alias
    #
    log_daemon_msg "Restarting $DESC" "$NAME" 
    do_stop
    case "$?" in
      0|1)
        do_start
        case "$?" in
            0) log_end_msg 0 ;;
            1) log_end_msg 1 ;; # Old process is still running
            *) log_end_msg 1 ;; # Failed to start
        esac
        ;;
      *)
          # Failed to stop
        log_end_msg 1
        ;;
    esac
    ;;
  status)
        status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
        ;;
  *)
    echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
    exit 3
    ;;
esac

:

Copy the entire tvheadend_daemon file above in the file /etc/init.d/tvheadend

sudo nano /etc/init.d/tvheadend

sudo chmod 755 /etc/init.d/tvheadend

Only if you want to run Tvheadend on Debian start-up

sudo update-rc.d tvheadend defaults

First run

The first run is particular because you have to run Tvheadend without user access control. After the Tvheadend wizard allow you to create an admin user.

su hts
/usr/local/bin/tvheadend -C

Now open a browser at tvheadend_ip:9981 and follow the Tvheadend wizard. Once the wizard completed come back to the Tvheadend bash.

To kill the Tvheadend process

Ctrl+C

Now we can run Tvheadend as a service

To start Tvheadend

sudo service tvheadend start

Divers

Tvheadend log

sudo tail -f /var/log/syslog | grep tvheadend

Comments

I home this tutorial can help. Thanks a lot to the dev(s) for this work and this tool!
Feel free to ask questions or to offer suggestions.

You can find all the files, tutorials and other things on my Github :

https://github.com/SylvainCecchetto/Notes-guides-tutorials-and-other-tips


Replies (6)

RE: [TUTO] Debian 8.5 + Tvheadend 4.1 (git) + transcoding + SiliconDust HDHomeRun (from scratch) - Added by jamper serman over 8 years ago

Thanks for this tutorial!

Hello as serious server installation on Ubuntu 14.04?

RE: [TUTO] Debian 8.5 + Tvheadend 4.1 (git) + transcoding + SiliconDust HDHomeRun (from scratch) - Added by Sylvain Cecchetto over 8 years ago

I'm not sure I understand your question (my English ...).

But installing on ubuntu is almost the same I think. Before I was on ubuntu.

RE: [TUTO] Debian 8.5 + Tvheadend 4.1 (git) + transcoding + SiliconDust HDHomeRun (from scratch) - Added by jamper serman over 8 years ago

Thank you very much , I have it installed.

For future updates as serious ?

RE: [TUTO] Debian 8.5 + Tvheadend 4.1 (git) + transcoding + SiliconDust HDHomeRun (from scratch) - Added by Sylvain Cecchetto over 8 years ago

Cool !

For future updates you have to stop tvheadend service : "sudo service tvheadend stop".
Then follow the "build and install" step in the tuto. That's all.
By doing that you "overwrite" the current tvheadend install with the last git version.

During the first start of the new tvheadend version, if you look at the log you will see that tvheadend automatically backup all the configuration files present in the .hts folder.

Hope it can help

RE: [TUTO] Debian 8.5 + Tvheadend 4.1 (git) + transcoding + SiliconDust HDHomeRun (from scratch) - Added by Etienne PRIEUR over 8 years ago

Thank you very much , I have installed it twice on a esxi Virtual Machine.

When i launch tvheadend all work fine.

But I cant start with daemon:

$ sudo service tvheadend start
Job for tvheadend.service failed. See 'systemctl status tvheadend.service' and 'journalctl -xn' for details.

sudo tail -f /var/log/syslog | grep tvheadend
systemd[911]: Failed at step EXEC spawning /etc/init.d/tvheadend: No such file or directory
systemd[1]: tvheadend.service: control process exited, code=exited status=203
systemd[1]: Unit tvheadend.service entered failed state.

$ systemctl status tvheadend.service
● tvheadend.service - (null)
   Loaded: loaded (/etc/init.d/tvheadend)
   Active: failed (Result: exit-code) since ven. 2016-08-05 20:24:38 CEST; 3min 17s ago
  Process: 878 ExecStart=/etc/init.d/tvheadend start (code=exited, status=203/EXEC)

I'm newbie on linux, I don't know what can I do? :(

    (1-6/6)