Add files via upload
This commit is contained in:
125
tvheadend/DOCS.md
Normal file
125
tvheadend/DOCS.md
Normal file
@@ -0,0 +1,125 @@
|
||||
# Home Assistant Community Add-on: TVHeadend
|
||||
|
||||
TVHeadend is a TV streaming server and recorder supporting:
|
||||
DVB-S, DVB-S2, DVB-C, DVB-T, DVB-T2, ATSC, ISDB-T, IPTV, SAT>IP and HDHomeRun
|
||||
as input sources.
|
||||
TVHeadend offers the HTTP (VLC, MPlayer), HTSP (Kodi, Movian) and SAT>IP streaming.
|
||||
|
||||
Multiple EPG sources are supported such as
|
||||
over-the-air DVB and ATSC including OpenTV DVB extensions, XMLTV, PyXML.
|
||||
|
||||
Have included the following along with TVHeadend:
|
||||
-Webgrab+
|
||||
-Streamlink
|
||||
|
||||
## Installation
|
||||
|
||||
The installation of this add-on is pretty straightforward and not different in
|
||||
comparison to installing any other Home Assistant add-on.
|
||||
|
||||
1. Add this repository to have addons by GauthamVarmaK:
|
||||
[![Home Assistant with repository URL pre-filled][my-ha-shield]][my-ha-repo]
|
||||
1. Search for the "TVHeadend" add-on in the Supervisor add-on store and install it.
|
||||
1. Start the "TVHeadend" add-on.
|
||||
1. Check the logs of the "TVHeadend" to see if everything went well.
|
||||
1. Click the "OPEN WEB UI" button and start using it.
|
||||
1. Ready to go!
|
||||
|
||||
## Configuration
|
||||
|
||||
**Note**: _Remember to restart the add-on when the configuration is changed._
|
||||
|
||||
Example add-on configuration:
|
||||
|
||||
```yaml
|
||||
system_packages:
|
||||
- ffmpeg
|
||||
init_commands:
|
||||
- echo 'Hello World'
|
||||
```
|
||||
|
||||
**Note**: _This is just an example, don't copy and paste it! Create your own!_
|
||||
|
||||
### Option: `system_packages`
|
||||
|
||||
Allows you to specify additional [Alpine packages][alpine-packages] to be
|
||||
installed to the TVHeadend Addon (e.g., `ffmpeg`, `g++`, etc. ).
|
||||
|
||||
**Note**: _Adding many packages will result in a longer start-up time for the add-on._
|
||||
|
||||
### Option: `init_commands`
|
||||
|
||||
Customize your TVHeadend environment even more with the `init_commands` option.
|
||||
Add one or more shell commands to the list, and they will be executed
|
||||
every single time this add-on starts.
|
||||
|
||||
## Additional Details
|
||||
|
||||
- Config files are stored in `/config/tvheadend/`
|
||||
- Recording files are stored in `/config/tvheadend/recordings/`
|
||||
- `/dev/dvb/`, `/dev/dri/` would be respectively mapped to
|
||||
`/dev/dvb/`, `/dev/dri/` inside the addon.
|
||||
|
||||
Consider, backing `/config/tvheadend/` up whenever migrating.
|
||||
|
||||
## Changelog & Releases
|
||||
|
||||
This repository keeps a change log using [GitHub's releases][releases]
|
||||
functionality.
|
||||
|
||||
Releases are based on [Semantic Versioning][semver], and use the format
|
||||
of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
|
||||
based on the following:
|
||||
|
||||
- `MAJOR`: Incompatible or major changes.
|
||||
- `MINOR`: Backwards-compatible new features and enhancements.
|
||||
- `PATCH`: Backwards-compatible bugfixes and package updates.
|
||||
|
||||
## Support
|
||||
|
||||
Got questions?
|
||||
|
||||
You have several options to get them answered:
|
||||
|
||||
- The Home Assistant [Community Forum][forum].
|
||||
- You could also [open an issue here][issue] GitHub.
|
||||
|
||||
## Authors & contributors
|
||||
|
||||
This repository is owned and maintained by [GauthamVarmaK][gautham].
|
||||
|
||||
This has been possible thanks to the community add-ons initiative by [Frenck][frenck]
|
||||
|
||||
## License
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021-2022 GauthamVarmaK
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
[alpine-packages]: https://pkgs.alpinelinux.org/packages
|
||||
[forum]: https://community.home-assistant.io/
|
||||
[frenck]: https://github.com/frenck
|
||||
[gautham]: https://github.com/GauthamVarmaK
|
||||
[my-ha-shield]: https://my.home-assistant.io/badges/supervisor_add_addon_repository.svg
|
||||
[issue]: https://github.com/GauthamVarmaK/addon-tvheadend/issues
|
||||
[semver]: http://semver.org/spec/v2.0.0.htm
|
||||
[my-ha-repo]: https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2FGauthamVarmaK%2Fhassio-addons
|
||||
[releases]: https://github.com/GauthamVarmaK/addon-tvheadend/releases
|
||||
197
tvheadend/Dockerfile
Normal file
197
tvheadend/Dockerfile
Normal file
@@ -0,0 +1,197 @@
|
||||
ARG BUILD_FROM
|
||||
# hadolint ignore=DL3006
|
||||
FROM ${BUILD_FROM} as buildstage
|
||||
############## build stage ##############
|
||||
|
||||
# package versions
|
||||
ARG TVHEADEND_COMMIT="52c3ed3e"
|
||||
|
||||
# environment settings
|
||||
ARG TZ="Europe/Berlin"
|
||||
ENV HOME="/config"
|
||||
|
||||
# copy patches
|
||||
COPY patches/ /tmp/patches/
|
||||
|
||||
RUN \
|
||||
echo "**** install build packages ****" && \
|
||||
apk add --no-cache \
|
||||
libcrypto1.1=1.1.1t-r1 \
|
||||
libssl1.1=1.1.1t-r1 \
|
||||
autoconf \
|
||||
automake \
|
||||
bsd-compat-headers \
|
||||
bzip2 \
|
||||
cmake \
|
||||
curl \
|
||||
ffmpeg-dev \
|
||||
file \
|
||||
findutils \
|
||||
g++ \
|
||||
gcc \
|
||||
gettext-dev \
|
||||
git \
|
||||
gnu-libiconv-dev \
|
||||
gzip \
|
||||
jq \
|
||||
libcurl \
|
||||
libdvbcsa-dev \
|
||||
libgcrypt-dev \
|
||||
libhdhomerun-dev \
|
||||
libtool \
|
||||
libva-dev \
|
||||
libvpx-dev \
|
||||
libxml2-dev \
|
||||
libxslt-dev \
|
||||
linux-headers \
|
||||
make \
|
||||
openssl-dev \
|
||||
opus-dev \
|
||||
patch \
|
||||
pcre2-dev \
|
||||
pkgconf \
|
||||
pngquant \
|
||||
python3 \
|
||||
sdl-dev \
|
||||
tar \
|
||||
uriparser-dev \
|
||||
wget \
|
||||
x264-dev \
|
||||
x265-dev \
|
||||
zlib-dev \
|
||||
xmltv \
|
||||
coreutils
|
||||
|
||||
RUN \
|
||||
echo "**** remove musl iconv.h and replace with gnu-iconv.h ****" && \
|
||||
rm -rf /usr/include/iconv.h && \
|
||||
cp /usr/include/gnu-libiconv/iconv.h /usr/include/iconv.h
|
||||
|
||||
RUN \
|
||||
echo "**** compile tvheadend ****" && \
|
||||
if [ -z ${TVHEADEND_COMMIT} ]; then \
|
||||
TVHEADEND_COMMIT=$(curl -sX GET https://api.github.com/repos/tvheadend/tvheadend/commits/master \
|
||||
| jq -r '. | .sha'); \
|
||||
fi && \
|
||||
mkdir -p \
|
||||
/tmp/tvheadend && \
|
||||
git clone https://github.com/tvheadend/tvheadend.git /tmp/tvheadend && \
|
||||
cd /tmp/tvheadend && \
|
||||
git checkout ${TVHEADEND_COMMIT} && \
|
||||
./configure \
|
||||
`#Encoding` \
|
||||
--disable-ffmpeg_static \
|
||||
--disable-libfdkaac_static \
|
||||
--disable-libtheora_static \
|
||||
--disable-libopus_static \
|
||||
--disable-libvorbis_static \
|
||||
--disable-libvpx_static \
|
||||
--disable-libx264_static \
|
||||
--disable-libx265_static \
|
||||
--disable-libfdkaac \
|
||||
--enable-libopus \
|
||||
--enable-libvorbis \
|
||||
--enable-libvpx \
|
||||
--enable-libx264 \
|
||||
--enable-libx265 \
|
||||
\
|
||||
`#Options` \
|
||||
--disable-avahi \
|
||||
--disable-dbus_1 \
|
||||
--disable-bintray_cache \
|
||||
--disable-execinfo \
|
||||
--disable-hdhomerun_static \
|
||||
--enable-hdhomerun_client \
|
||||
--enable-libav \
|
||||
--enable-pngquant \
|
||||
--enable-trace \
|
||||
--enable-vaapi \
|
||||
--infodir=/usr/share/info \
|
||||
--localstatedir=/var \
|
||||
--mandir=/usr/share/man \
|
||||
--prefix=/usr \
|
||||
--python=python3 \
|
||||
--sysconfdir=/config && \
|
||||
make -j 2 && \
|
||||
make DESTDIR=/tmp/tvheadend-build install
|
||||
|
||||
############## runtime stage ##############
|
||||
FROM ${BUILD_FROM}
|
||||
|
||||
# environment settings
|
||||
ENV HOME="/config"
|
||||
|
||||
# libva-intel-driver \
|
||||
# intel-media-driver \
|
||||
RUN \
|
||||
echo "**** install runtime packages ****" && \
|
||||
apk add --no-cache \
|
||||
bsd-compat-headers \
|
||||
bzip2 \
|
||||
curl \
|
||||
ffmpeg \
|
||||
ffmpeg-libs \
|
||||
gnu-libiconv \
|
||||
gzip \
|
||||
libcrypto1.1 \
|
||||
libcurl \
|
||||
libdvbcsa \
|
||||
libhdhomerun-libs \
|
||||
libssl1.1 \
|
||||
libva \
|
||||
mesa-dri-ati \
|
||||
libvpx \
|
||||
libxml2 \
|
||||
libxslt \
|
||||
linux-headers \
|
||||
openssl \
|
||||
opus \
|
||||
pcre2 \
|
||||
py3-requests \
|
||||
python3 \
|
||||
tar \
|
||||
uriparser \
|
||||
wget \
|
||||
x264 \
|
||||
x265 \
|
||||
zlib \
|
||||
xmltv
|
||||
|
||||
# copy local files and buildstage artifacts
|
||||
COPY --from=buildstage /tmp/tvheadend-build/usr/ /usr/
|
||||
#COPY --from=buildstage /usr/local/share/man/ /usr/local/share/man/
|
||||
|
||||
# Copy root filesystem
|
||||
COPY rootfs /
|
||||
|
||||
# ports and volumes
|
||||
VOLUME /config
|
||||
|
||||
# Build arguments
|
||||
ARG BUILD_ARCH
|
||||
ARG BUILD_DATE
|
||||
ARG BUILD_DESCRIPTION
|
||||
ARG BUILD_NAME
|
||||
ARG BUILD_REF
|
||||
ARG BUILD_REPOSITORY
|
||||
ARG BUILD_VERSION
|
||||
|
||||
# Labels
|
||||
LABEL \
|
||||
io.hass.name="${BUILD_NAME}" \
|
||||
io.hass.description="${BUILD_DESCRIPTION}" \
|
||||
io.hass.arch="${BUILD_ARCH}" \
|
||||
io.hass.type="addon" \
|
||||
io.hass.version=${BUILD_VERSION} \
|
||||
maintainer="Gautham Varma K <43441192+GauthamVarmaK@users.noreply.github.com>" \
|
||||
org.opencontainers.image.title="${BUILD_NAME}" \
|
||||
org.opencontainers.image.description="${BUILD_DESCRIPTION}" \
|
||||
org.opencontainers.image.vendor="GauthamVarmaK" \
|
||||
org.opencontainers.image.authors="Gautham Varma K <43441192+GauthamVarmaK@users.noreply.github.com>" \
|
||||
org.opencontainers.image.licenses="MIT" \
|
||||
org.opencontainers.image.url="https://github.com/GauthamVarmaK/addon-tvheadend" \
|
||||
org.opencontainers.image.source="https://github.com/${BUILD_REPOSITORY}" \
|
||||
org.opencontainers.image.documentation="https://github.com/${BUILD_REPOSITORY}/blob/main/README.md" \
|
||||
org.opencontainers.image.created=${BUILD_DATE} \
|
||||
org.opencontainers.image.revision=${BUILD_REF} \
|
||||
org.opencontainers.image.version=${BUILD_VERSION}
|
||||
7
tvheadend/build.yaml
Normal file
7
tvheadend/build.yaml
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
build_from:
|
||||
aarch64: ghcr.io/hassio-addons/base/aarch64:11.1.2
|
||||
amd64: ghcr.io/hassio-addons/base/amd64:11.1.2
|
||||
armhf: ghcr.io/hassio-addons/base/armhf:11.1.2
|
||||
armv7: ghcr.io/hassio-addons/base/armv7:11.1.2
|
||||
i386: ghcr.io/hassio-addons/base/i386:11.1.2
|
||||
50
tvheadend/config.yaml
Normal file
50
tvheadend/config.yaml
Normal file
@@ -0,0 +1,50 @@
|
||||
---
|
||||
name: TVHeadend
|
||||
version: 1.5-3
|
||||
stage: experimental
|
||||
slug: tvheadend
|
||||
description: TV streaming server and recorder.
|
||||
url: "https://github.com/GauthamVarmaK/addon-tvheadend"
|
||||
init: false
|
||||
arch:
|
||||
- aarch64
|
||||
- amd64
|
||||
- armhf
|
||||
- armv7
|
||||
- i386
|
||||
webui: "http://[HOST]:[PORT:9981]/"
|
||||
hassio_role: admin
|
||||
hassio_api: true
|
||||
host_network: true
|
||||
privileged:
|
||||
- NET_ADMIN
|
||||
- SYS_ADMIN
|
||||
- SYS_RAWIO
|
||||
devices:
|
||||
- /dev/dvb
|
||||
- /dev/dri
|
||||
ports:
|
||||
9981/tcp: 9981
|
||||
9982/tcp: 9982
|
||||
ports_description:
|
||||
9981/tcp: TVH Web Interface
|
||||
9982/tcp: TVH HTSP
|
||||
map:
|
||||
- "config:rw"
|
||||
- "media:rw"
|
||||
options:
|
||||
system_packages: []
|
||||
init_commands: []
|
||||
webgrabplus: false
|
||||
picons: false
|
||||
snp_url: ""
|
||||
srp_url: ""
|
||||
schema:
|
||||
system_packages:
|
||||
- str
|
||||
init_commands:
|
||||
- str
|
||||
webgrabplus: bool
|
||||
picons: bool
|
||||
snp_url: str
|
||||
srp_url: str
|
||||
BIN
tvheadend/icon.png
Normal file
BIN
tvheadend/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 63 KiB |
BIN
tvheadend/logo.png
Normal file
BIN
tvheadend/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.5 KiB |
1466
tvheadend/patches/config.guess
vendored
Normal file
1466
tvheadend/patches/config.guess
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1836
tvheadend/patches/config.sub
vendored
Normal file
1836
tvheadend/patches/config.sub
vendored
Normal file
File diff suppressed because it is too large
Load Diff
23
tvheadend/patches/cpanfile
Normal file
23
tvheadend/patches/cpanfile
Normal file
@@ -0,0 +1,23 @@
|
||||
requires 'perl' => '5.24.0';
|
||||
|
||||
# perl packages for tvheadend x86
|
||||
requires 'Data::Dump' ;
|
||||
requires 'DateTime::Format::ISO8601' ;
|
||||
requires 'DateTime::Format::SQLite' ;
|
||||
requires 'Encode' ;
|
||||
requires 'File::HomeDir' ;
|
||||
requires 'File::Path' ;
|
||||
requires 'HTML::Entities' ;
|
||||
requires 'HTML::TableExtract' ;
|
||||
requires 'HTTP::Cache::Transparent' => ">= 1.3, != 1.4" ;
|
||||
requires 'inc' ;
|
||||
requires 'JSON::PP' ;
|
||||
requires 'LWP::Simple' ;
|
||||
requires 'LWP::UserAgent' ;
|
||||
requires 'PerlIO::gzip' ;
|
||||
requires 'SOAP::Lite' ;
|
||||
requires 'Storable' ;
|
||||
requires 'Unicode::UTF8simple' ;
|
||||
requires 'version' ;
|
||||
requires 'WWW::Mechanize' ;
|
||||
requires 'XML::DOM' ;
|
||||
26
tvheadend/rootfs/etc/cont-init.d/50-gid-video
Normal file
26
tvheadend/rootfs/etc/cont-init.d/50-gid-video
Normal file
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
|
||||
FILES=$(find /dev/dri /dev/dvb -type c -print 2>/dev/null)
|
||||
|
||||
for i in $FILES
|
||||
do
|
||||
VIDEO_GID=$(stat -c '%g' "$i")
|
||||
if id -G abc | grep -qw "$VIDEO_GID"; then
|
||||
touch /groupadd
|
||||
else
|
||||
if [ ! "${VIDEO_GID}" == '0' ]; then
|
||||
VIDEO_NAME=$(getent group "${VIDEO_GID}" | awk -F: '{print $1}')
|
||||
if [ -z "${VIDEO_NAME}" ]; then
|
||||
VIDEO_NAME="video$(head /dev/urandom | tr -dc 'a-z0-9' | head -c8)"
|
||||
groupadd "$VIDEO_NAME"
|
||||
groupmod -g "$VIDEO_GID" "$VIDEO_NAME"
|
||||
fi
|
||||
usermod -a -G "$VIDEO_NAME" abc
|
||||
touch /groupadd
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -n "${FILES}" ] && [ ! -f "/groupadd" ]; then
|
||||
usermod -a -G root abc
|
||||
fi
|
||||
24
tvheadend/rootfs/etc/cont-init.d/customizations.sh
Normal file
24
tvheadend/rootfs/etc/cont-init.d/customizations.sh
Normal file
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: TVHeadend
|
||||
# Executes user customizations on startup
|
||||
# ==============================================================================
|
||||
|
||||
# Install user configured/requested packages
|
||||
if bashio::config.has_value 'system_packages'; then
|
||||
apk update \
|
||||
|| bashio::exit.nok 'Failed updating Alpine packages repository indexes'
|
||||
|
||||
for package in $(bashio::config 'system_packages'); do
|
||||
apk add "$package" \
|
||||
|| bashio::exit.nok "Failed installing system package ${package}"
|
||||
done
|
||||
fi
|
||||
|
||||
# Executes user commands on startup
|
||||
if bashio::config.has_value 'init_commands'; then
|
||||
while read -r cmd; do
|
||||
eval "${cmd}" \
|
||||
|| bashio::exit.nok "Failed executing init command: ${cmd}"
|
||||
done <<< "$(bashio::config 'init_commands')"
|
||||
fi
|
||||
102
tvheadend/rootfs/etc/cont-init.d/tvheadend.sh
Normal file
102
tvheadend/rootfs/etc/cont-init.d/tvheadend.sh
Normal file
@@ -0,0 +1,102 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: TVHeadend
|
||||
# Executes user customizations on startup
|
||||
# ==============================================================================
|
||||
|
||||
check_picons(){
|
||||
if [ -z "$(ls -A /config/tvheadend/picons)" ]; then return 1; else return 0; fi
|
||||
}
|
||||
|
||||
picons_install(){
|
||||
if apk update; then
|
||||
bashio::log.info '[Picons] APK: Installing required packages.'
|
||||
if apk add --no-cache --virtual .build-deps xz; then
|
||||
bashio::log.info '[Picons] Installing Picons.'
|
||||
bashio::log.info '[Picons] SNP-Picons Download.'
|
||||
wget -O /config/tvheadend/snp.tar.xz $(bashio::config 'snp_url')
|
||||
bashio::log.info '[Picons] SRP-Picons Download.'
|
||||
wget -O /config/tvheadend/srp.tar.xz $(bashio::config 'srp_url')
|
||||
bashio::log.info '[Picons] SNP-Picons extract.'
|
||||
mkdir -p /config/tvheadend/picons/snp
|
||||
tar -xf /config/tvheadend/snp.tar.xz --strip-components=1 -C /config/tvheadend/picons/snp
|
||||
rm /config/tvheadend/snp.tar.xz
|
||||
bashio::log.info '[Picons] SRP-Picons extract.'
|
||||
mkdir -p /config/tvheadend/picons/srp
|
||||
tar -xf /config/tvheadend/srp.tar.xz --strip-components=1 -C /config/tvheadend/picons/srp
|
||||
rm /config/tvheadend/srp.tar.xz
|
||||
bashio::log.info '[Picons] Update config.'
|
||||
sed -i 's|.*chiconpath.*| "chiconpath": "file:///config/tvheadend/picons/snp/%C.png",|g' /config/tvheadend/config
|
||||
sed -i 's|.*piconpath.*| "piconpath": "file:///config/tvheadend/picons/srp",|g' /config/tvheadend/config
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
check_webgrabplus(){
|
||||
if [ -z "$(ls -A /config/tvheadend/wg++)" ]; then return 1; else return 0; fi
|
||||
}
|
||||
|
||||
webgrabplus_install(){
|
||||
if apk update; then
|
||||
bashio::log.info '[Webgrab+] APK: Installing required packages.'
|
||||
if apk add --no-cache --virtual .build-deps git mono --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing; then
|
||||
bashio::log.info '[Webgrab+] Installing Webgrab+.'
|
||||
cd /tmp \
|
||||
&& wget http://webgrabplus.com/sites/default/files/download/SW/V3.2.0/WebGrabPlus_V3.2_install.tar.gz \
|
||||
&& tar -zxvf WebGrabPlus_V3.2_install.tar.gz \
|
||||
&& rm WebGrabPlus_V3.2_install.tar.gz \
|
||||
&& mv .wg++/ /config/tvheadend/wg++ \
|
||||
&& cd /config/tvheadend/wg++ \
|
||||
&& ./install.sh \
|
||||
&& rm -rf siteini.pack/ \
|
||||
&& wget http://webgrabplus.com/sites/default/files/download/ini/SiteIniPack_current.zip \
|
||||
&& unzip SiteIniPack_current.zip \
|
||||
&& rm SiteIniPack_current.zip \
|
||||
&& cp siteini.pack/India/* siteini.user/ \
|
||||
&& wget -O /usr/bin/tv_grab_wg++ http://www.webgrabplus.com/sites/default/files/tv_grab_wg.txt \
|
||||
&& sed -i 's|~/.wg++/guide.xml|/config/tvheadend/wg++/guide.xml|g' /usr/bin/tv_grab_wg++ \
|
||||
&& chmod a+x /usr/bin/tv_grab_wg++
|
||||
else
|
||||
bashio::log.info '[Webgrab+] APK: Critical error. Unable install required packages.'
|
||||
exit 1
|
||||
fi
|
||||
bashio::log.info '[Webgrab+] APK: Removing packages no longer required.'
|
||||
apk del --no-cache --purge .build-deps
|
||||
else
|
||||
bashio::log.error '[Webgrab+] APK: Critical error. Unable to update pkg list. Check connectivity.'
|
||||
exit 1
|
||||
fi
|
||||
bashio::log.info '[Webgrab+] Finsihed all APK and PIP3 updates and installs.'
|
||||
}
|
||||
|
||||
# Ensure directory exists
|
||||
if ! bashio::fs.directory_exists '/config/tvheadend/'; then
|
||||
bashio::log.info "Creating default configuration directory at /config/tvheadend/"
|
||||
timeout 20s /usr/bin/tvheadend --firstrun -u root -g root -c /config/tvheadend
|
||||
fi
|
||||
|
||||
if check_picons; then
|
||||
bashio::log.info "[Picons] Picons already installed"
|
||||
else
|
||||
bashio::log.info "[Picons] No Picons installation found"
|
||||
if [ $(bashio::config 'picons') = true ]; then
|
||||
bashio::log.info "[Picons] Installing Picons"
|
||||
picons_install
|
||||
chmod +x /usr/bin/restart_addon
|
||||
exec /usr/bin/restart_addon
|
||||
fi
|
||||
fi
|
||||
|
||||
if check_webgrabplus; then
|
||||
bashio::log.info "[Webgrab+] Webgrab+ already installed"
|
||||
else
|
||||
bashio::log.info "[Webgrab+] No webgrab+ installation found"
|
||||
if [ $(bashio::config 'webgrabplus') = true ]; then
|
||||
bashio::log.info "[Webgrab+] Installing webgrab+"
|
||||
webgrabplus_install
|
||||
chmod +x /usr/bin/restart_addon
|
||||
exec /usr/bin/restart_addon
|
||||
fi
|
||||
fi
|
||||
|
||||
bashio::log.info 'Setup completed without errors!!'
|
||||
1
tvheadend/rootfs/etc/cron.d/webgrabplus
Normal file
1
tvheadend/rootfs/etc/cron.d/webgrabplus
Normal file
@@ -0,0 +1 @@
|
||||
0 0 * * * /config/tvheadend/wg++/run.sh
|
||||
9
tvheadend/rootfs/etc/services.d/cron/finish
Normal file
9
tvheadend/rootfs/etc/services.d/cron/finish
Normal file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/execlineb -S0
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: TVHeadend
|
||||
# Take down the S6 supervision tree when crond fails
|
||||
# ==============================================================================
|
||||
if -n { s6-test $# -ne 0 }
|
||||
if -n { s6-test ${1} -eq 256 }
|
||||
|
||||
s6-svscanctl -t /var/run/s6/services
|
||||
6
tvheadend/rootfs/etc/services.d/cron/run
Normal file
6
tvheadend/rootfs/etc/services.d/cron/run
Normal file
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: TVHeadend
|
||||
# Runs the cron daemon
|
||||
# ==============================================================================
|
||||
exec fdmove -c 2 1 /usr/sbin/crond -f -L /var/log/cron -l 0 -c /etc/crontabs
|
||||
9
tvheadend/rootfs/etc/services.d/tvheadend/finish
Normal file
9
tvheadend/rootfs/etc/services.d/tvheadend/finish
Normal file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/execlineb -S0
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: TVHeadend
|
||||
# Take down the S6 supervision tree when TVHeadend fails
|
||||
# ==============================================================================
|
||||
if -n { s6-test $# -ne 0 }
|
||||
if -n { s6-test ${1} -eq 256 }
|
||||
|
||||
s6-svscanctl -t /var/run/s6/services
|
||||
15
tvheadend/rootfs/etc/services.d/tvheadend/run
Normal file
15
tvheadend/rootfs/etc/services.d/tvheadend/run
Normal file
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: TVHeadend
|
||||
# Starts TVHeadend
|
||||
# ==============================================================================
|
||||
|
||||
declare satip_xml
|
||||
|
||||
bashio::log.info "Starting TVHeadend..."
|
||||
if bashio::config.has_value 'satip_xml'; then
|
||||
satip_xml="--satip_xml $(bashio::config 'satip_xml')"
|
||||
else
|
||||
satip_xml=""
|
||||
fi
|
||||
exec /usr/bin/tvheadend -u root -g root -c /config/tvheadend $satip_xml
|
||||
9
tvheadend/rootfs/usr/bin/restart_addon
Normal file
9
tvheadend/rootfs/usr/bin/restart_addon
Normal file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bashio
|
||||
# ==============================================================================
|
||||
# Home Assistant Community Add-on: TVHeadend
|
||||
# Restarts the add-on
|
||||
# ==============================================================================
|
||||
|
||||
echo "Restarting add-on"
|
||||
|
||||
bashio::addon.restart
|
||||
55
tvheadend/rootfs/usr/bin/tv_grab_file
Normal file
55
tvheadend/rootfs/usr/bin/tv_grab_file
Normal file
@@ -0,0 +1,55 @@
|
||||
#!/bin/bash
|
||||
dflag=
|
||||
vflag=
|
||||
cflag=
|
||||
if (( $# < 1 ))
|
||||
then
|
||||
cat /config/data/*.xml
|
||||
exit 0
|
||||
fi
|
||||
|
||||
for arg
|
||||
do
|
||||
delim=""
|
||||
case "$arg" in
|
||||
#translate --gnu-long-options to -g (short options)
|
||||
--description) args="${args}-d ";;
|
||||
--version) args="${args}-v ";;
|
||||
--capabilities) args="${args}-c ";;
|
||||
#pass through anything else
|
||||
*) [[ "${arg:0:1}" == "-" ]] || delim="\""
|
||||
args="${args}${delim}${arg}${delim} ";;
|
||||
esac
|
||||
done
|
||||
|
||||
#Reset the positional parameters to the short options
|
||||
eval set -- $args
|
||||
|
||||
while getopts "dvc" option
|
||||
do
|
||||
case $option in
|
||||
d) dflag=1;;
|
||||
v) vflag=1;;
|
||||
c) cflag=1;;
|
||||
\?) printf "unknown option: -%s\n" $OPTARG
|
||||
printf "Usage: %s: [--description] [--version] [--capabilities] \n" $(basename $0)
|
||||
exit 2
|
||||
;;
|
||||
esac >&2
|
||||
done
|
||||
|
||||
if [ "$dflag" ]
|
||||
then
|
||||
printf "XML file grabber\n"
|
||||
fi
|
||||
if [ "$vflag" ]
|
||||
then
|
||||
printf "0.1\n"
|
||||
fi
|
||||
if [ "$cflag" ]
|
||||
then
|
||||
printf "baseline\n"
|
||||
fi
|
||||
|
||||
exit 0
|
||||
|
||||
67
tvheadend/rootfs/usr/bin/tv_grab_url
Normal file
67
tvheadend/rootfs/usr/bin/tv_grab_url
Normal file
@@ -0,0 +1,67 @@
|
||||
#!/bin/bash
|
||||
|
||||
dflag=
|
||||
vflag=
|
||||
cflag=
|
||||
|
||||
if (( $# < 1 ))
|
||||
then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
OPTARG=""
|
||||
URL=$1
|
||||
|
||||
for arg
|
||||
do
|
||||
delim=""
|
||||
case "$arg" in
|
||||
#translate --gnu-long-options to -g (short options)
|
||||
--description) args="${args}-d ";;
|
||||
--version) args="${args}-v ";;
|
||||
--capabilities) args="${args}-c ";;
|
||||
#pass through anything else
|
||||
*) if [ "${arg:0:1}" == "-" ] || delim="\""
|
||||
then
|
||||
args="${args}${delim}${arg}${delim} "
|
||||
else
|
||||
OPTARG=${arg}
|
||||
fi
|
||||
esac
|
||||
done
|
||||
|
||||
#Reset the positional parameters to the short options
|
||||
eval set -- $args
|
||||
|
||||
while getopts "dvc" option
|
||||
do
|
||||
case $option in
|
||||
d) dflag=1;;
|
||||
v) vflag=1;;
|
||||
c) cflag=1;;
|
||||
\?) printf "unknown option: -%s\n" $OPTARG
|
||||
printf "Usage: %s: [--description] [--version] [--capabilities] \n" $(basename $0)
|
||||
exit 2
|
||||
;;
|
||||
esac >&2
|
||||
done
|
||||
|
||||
if [ "$dflag" ]
|
||||
then
|
||||
printf "XMLTV URL grabber\n"
|
||||
exit 0
|
||||
fi
|
||||
if [ "$vflag" ]
|
||||
then
|
||||
printf "0.1\n"
|
||||
exit 0
|
||||
fi
|
||||
if [ "$cflag" ]
|
||||
then
|
||||
printf "baseline\n"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
curl -s "$URL"
|
||||
|
||||
exit 0
|
||||
62
tvheadend/rootfs/usr/bin/tv_grab_wg
Normal file
62
tvheadend/rootfs/usr/bin/tv_grab_wg
Normal file
@@ -0,0 +1,62 @@
|
||||
#!/bin/bash
|
||||
dflag=
|
||||
vflag=
|
||||
cflag=
|
||||
qflag=
|
||||
if (( $# < 1 ))
|
||||
then
|
||||
cat /config/data/*.xml
|
||||
exit 0
|
||||
fi
|
||||
|
||||
for arg
|
||||
do
|
||||
delim=""
|
||||
case "$arg" in
|
||||
#translate --gnu-long-options to -g (short options)
|
||||
--description) args="${args}-d ";;
|
||||
--version) args="${args}-v ";;
|
||||
--capabilities) args="${args}-c ";;
|
||||
--quiet) args="${args}-q ";;
|
||||
|
||||
#pass through anything else
|
||||
*) [[ "${arg:0:1}" == "-" ]] || delim="\""
|
||||
args="${args}${delim}${arg}${delim} ";;
|
||||
esac
|
||||
done
|
||||
|
||||
#Reset the positional parameters to the short options
|
||||
eval set -- $args
|
||||
|
||||
while getopts "dvcq" option
|
||||
do
|
||||
case $option in
|
||||
d) dflag=1;;
|
||||
v) vflag=1;;
|
||||
c) cflag=1;;
|
||||
q) qflag=1;;
|
||||
\?) printf "unknown option: -%s\n" $OPTARG
|
||||
printf "Usage: %s: [--description] [--version] [--capabilities] \n" $(basename $0)
|
||||
exit 2
|
||||
;;
|
||||
esac >&2
|
||||
done
|
||||
|
||||
if [ "$dflag" ]
|
||||
then
|
||||
printf "WebGrab+Plus XML file grabber\n"
|
||||
fi
|
||||
if [ "$vflag" ]
|
||||
then
|
||||
printf "0.2\n"
|
||||
fi
|
||||
if [ "$cflag" ]
|
||||
then
|
||||
printf "baseline\n"
|
||||
fi
|
||||
if [ "$qflag" ]
|
||||
then
|
||||
printf ""
|
||||
fi
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user