[Buildroot] [PATCH 1/1] package/tvheadend: new package
Peter Korsgaard
jacmet at uclibc.org
Wed Dec 26 22:26:46 UTC 2012
>>>>> "Yann" == Yann E MORIN <yann.morin.1998 at free.fr> writes:
Hi,
Yann> Signed-off-by: "Yann E. MORIN" <yann.morin.1998 at free.fr>
Yann> ---
Yann> package/Config.in | 1 +
Yann> package/tvheadend/Config.in | 20 +++++++++
Yann> package/tvheadend/tvheadend.config | 13 ++++++
Yann> package/tvheadend/tvheadend.default | 6 +++
Yann> package/tvheadend/tvheadend.init | 54 +++++++++++++++++++++++++
Yann> package/tvheadend/tvheadend.mk | 76 +++++++++++++++++++++++++++++++++++
Yann> package/tvheadend/tvheadend.mkuser | 52 ++++++++++++++++++++++++
Yann> 7 files changed, 222 insertions(+), 0 deletions(-)
Yann> create mode 100644 package/tvheadend/Config.in
Yann> create mode 100644 package/tvheadend/tvheadend.config
Yann> create mode 100644 package/tvheadend/tvheadend.default
Yann> create mode 100644 package/tvheadend/tvheadend.init
Yann> create mode 100644 package/tvheadend/tvheadend.mk
Yann> create mode 100755 package/tvheadend/tvheadend.mkuser
Yann> diff --git a/package/Config.in b/package/Config.in
Yann> index 3d556b2..bcf0009 100644
Yann> --- a/package/Config.in
Yann> +++ b/package/Config.in
Yann> @@ -682,6 +682,7 @@ source "package/tinyhttpd/Config.in"
Yann> source "package/tn5250/Config.in"
Yann> source "package/transmission/Config.in"
Yann> source "package/ttcp/Config.in"
Yann> +source "package/tvheadend/Config.in"
Yann> source "package/udpcast/Config.in"
Yann> source "package/ulogd/Config.in"
Yann> source "package/ushare/Config.in"
Yann> diff --git a/package/tvheadend/Config.in b/package/tvheadend/Config.in
Yann> new file mode 100644
Yann> index 0000000..679ca13
Yann> --- /dev/null
Yann> +++ b/package/tvheadend/Config.in
Yann> @@ -0,0 +1,20 @@
Yann> +comment "tvheadend requires a toolchain with WCHAR"
We normally add ' support' - E.G. WCHAR support.
It also needs largefile support unless you override CFLAGS in the
Makefile:
Makefile:CFLAGS += -D_FILE_OFFSET_BITS=64
Yann> +++ b/package/tvheadend/tvheadend.default
Yann> @@ -0,0 +1,6 @@
Yann> +TVH_USER=tvheadend
Yann> +TVH_GROUP=tvheadend
Yann> +#TVH_ADAPTERS=
Yann> +#TVH_HTTP_PORT=9981
Yann> +#TVH_HTSP_PORT=9982
Yann> +#TVH_DEBUG=1
Yann> diff --git a/package/tvheadend/tvheadend.init b/package/tvheadend/tvheadend.init
Yann> new file mode 100644
Yann> index 0000000..b05ec81
Yann> --- /dev/null
Yann> +++ b/package/tvheadend/tvheadend.init
Yann> @@ -0,0 +1,54 @@
Yann> +#! /bin/sh
Yann> +# Startup script inspired by the one in the package
It would be good to mention 'tvheadend' here.
Yann> +++ b/package/tvheadend/tvheadend.mk
Yann> @@ -0,0 +1,76 @@
Yann> +#############################################################
Yann> +#
Yann> +# tvheadend
Yann> +#
Yann> +##############################################################
Yann> +
Yann> +TVHEADEND_VERSION = v3.3
Yann> +TVHEADEND_SITE = http://github.com/tvheadend/tvheadend/tarball/$(TVHEADEND_VERSION)
Yann> +TVHEADEND_LICENSE = GPLv3+
Yann> +TVHEADEND_LICENSE_FILES = LICENSE
Yann> +TVHEADEND_DEPENDENCIES = host-pkgconf openssl python
Yann> +
Yann> +ifeq ($(BR2_PACKAGE_AVAHI),y)
Yann> +TVHEADEND_DEPENDENCIES += avahi
Yann> +endif
Yann> +
Yann> +#----------------------------------------------------------------------------
Yann> +# tvheadend is a little smuggler and thief! ;-)
Yann> +# During the ./configure, it downloads some files from the dvb-apps
Yann> +# package, so it has a list of pre-scanned tunner configurations.
Yann> +# For buildroot that has a few-unfortunate consequences:
Yann> +# - the network may not be availabe at the time of build, if the
Yann> +# user pre-downloaded the sources with 'make source'
Yann> +# So, here's what we do:
Yann> +# - after the main archive download, we do download those files
Yann> +# - after extract, we extract the required files
Yann> +
Yann> +TVHEADEND_DVBSCANS_VERSION = 3fc7dfa68484
Yann> +TVHEADEND_DVBSCANS_SITE = http://linuxtv.org/hg/dvb-apps/archive/
Yann> +TVHEADEND_DVBSCANS_DIR = dvb-apps-$(TVHEADEND_DVBSCANS_VERSION)
Yann> +TVHEADEND_DVBSCANS_SOURCE = $(TVHEADEND_DVBSCANS_DIR).tar.bz2
Yann> +
Yann> +define TVHEADEND_DOWNLOAD_DVBSCANS
Yann> + $(call DOWNLOAD_WGET,$(TVHEADEND_DVBSCANS_SITE)/$(TVHEADEND_DVBSCANS_VERSION).tar.bz2,$(TVHEADEND_DVBSCANS_SOURCE))
Yann> +endef
Yann> +TVHEADEND_POST_DOWNLOAD_HOOKS = TVHEADEND_DOWNLOAD_DVBSCANS
Yann> +
Yann> +define TVHEADEND_EXTRACT_DVBSCANS
Yann> + mkdir -p $(@D)/data/dvb-scan
Yann> + $(INFLATE.bz2) $(DL_DIR)/$(TVHEADEND_DVBSCANS_SOURCE) |\
Yann> + $(TAR) $(TAR_STRIP_COMPONENTS)=3 -C $(@D)/data/dvb-scan \
Yann> + $(TAR_OPTIONS) - \
Yann> + $(TVHEADEND_DVBSCANS_DIR)/util/scan/{atsc,dvb-{c,s,t}}
Yann> +endef
Yann> +TVHEADEND_POST_EXTRACT_HOOKS = TVHEADEND_EXTRACT_DVBSCANS
Yann> +
Yann> +#----------------------------------------------------------------------------
Yann> +# To run tvheadend, we need:
Yann> +# - a non-root user to be safe, with its owned ${HOME}
Yann> +# - a startup script, and its config file
Yann> +# - a default DB with a tvheadend admin
Yann> +TVHEADEND_MKUSER = TARGET_DIR=$(TARGET_DIR) INSTALL=$(INSTALL) package/tvheadend/tvheadend.mkuser
Yann> +define TVHEADEND_CREATE_USER
Yann> + $(TVHEADEND_MKUSER) mk_user
Yann> + $(INSTALL) -D package/tvheadend/tvheadend.config $(TARGET_DIR)/home/tvheadend/.hts/tvheadend/accesscontrol/1
Yann> +endef
Yann> +TVHEADEND_POST_INSTALL_TARGET_HOOKS = TVHEADEND_CREATE_USER
Yann> +
Yann> +define TVHEADEND_PERMISSIONS
Yann> + /home/tvheadend d 0700 $$(shell $(TVHEADEND_MKUSER) get_uid) $$(shell $(TVHEADEND_MKUSER) get_gid) - - - - -
Yann> + /home/tvheadend/.hts d 0700 $$(shell $(TVHEADEND_MKUSER) get_uid) $$(shell $(TVHEADEND_MKUSER) get_gid) - - - - -
Yann> + /home/tvheadend/.hts/tvheadend d 0700 $$(shell $(TVHEADEND_MKUSER) get_uid) $$(shell $(TVHEADEND_MKUSER) get_gid) - - - - -
Yann> + /home/tvheadend/.hts/tvheadend/accesscontrol d 0700 $$(shell $(TVHEADEND_MKUSER) get_uid) $$(shell $(TVHEADEND_MKUSER) get_gid) - - - - -
Yann> + /home/tvheadend/.hts/tvheadend/accesscontrol/1 f 0600 $$(shell $(TVHEADEND_MKUSER) get_uid) $$(shell $(TVHEADEND_MKUSER) get_gid) - - - - -
Yann> +endef
I'm not really happy about the user handling here. I think we should
either just add a static tvheadend user to system/skeleton/etc/passwd
like we've done for ssh/hal/dbus/.., or come up with some generic
infrastructure to handle it per package (like _PERMISSIONS) instead of
something tvheadend specific.
We also normally don't touch /home. Can't tvheadend run as system daemon
(still as a seperate user) instead?
Yann> +
Yann> +define TVHEADEND_INSTALL_SYSV_STARTUP_FILES
Yann> + $(INSTALL) -D package/tvheadend/tvheadend.default $(TARGET_DIR)/etc/default/tvheadend
Yann> + $(INSTALL) -D package/tvheadend/tvheadend.init $(TARGET_DIR)/etc/init.d/S99tvheadend
I personally prefer to keep the same names both in package/ and
output/target (so S99tvheadend). Makes it easier to find the
corresponding source files.
--
Bye, Peter Korsgaard
More information about the buildroot
mailing list