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 thesudo service tvheadend start andsudo 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
<<