Compare commits

...

140 Commits

Author SHA1 Message Date
LinuxServer-CI
6eb29390f0 Bot Updating Package Versions 2019-03-28 07:53:07 +00:00
Ryan Kuba
c064466ce4 #72 fix chowning Release 4.2 (#126)
* making mods for release-4.2 branch

* typo
2019-03-28 08:03:35 +01:00
LinuxServer-CI
b6a321aee6 Bot Updating Package Versions 2019-03-25 02:02:20 +01:00
Ryan Kuba
3d34a9cf03 Merge pull request #124 from thelamer/release-4.2
Switching to new Base images, shift to arm32v7 tag.
2019-03-24 17:10:13 -07:00
thelamer
e0a76e29e2 Switching to new Base images, shift to arm32v7 tag. 2019-03-23 22:18:13 -07:00
LinuxServer-CI
13f64cbc4b Bot Updating Package Versions 2019-03-22 00:31:34 +00:00
LinuxServer-CI
2c696d51b0 Bot Updating Package Versions 2019-03-07 19:02:51 -05:00
LinuxServer-CI
780b22728e Bot Updating Templated Files 2019-03-07 18:14:52 -05:00
aptalca
9417e1f9c4 Merge pull request #121 from thelamer/release-4.2
libiconv shifted to community repos- release 4.2
2019-03-07 18:14:02 -05:00
thelamer
5fb3338564 libiconv shifted to community repos 2019-03-07 14:12:48 -08:00
LinuxServer-CI
89322d5956 Bot Updating Package Versions 2019-03-02 00:28:07 +00:00
LinuxServer-CI
267e3ef786 Bot Updating Templated Files 2019-03-01 18:35:41 -05:00
saarg
5de6faf27f Merge pull request #114 from thelamer/release-4.2
switching back to clone and checkout release-4.2
2019-02-17 22:54:37 +01:00
thelamer
dab37e4ecd bumping to xmltv 0.5.70 and pulling it from github instead of sourceforge 2019-02-17 12:42:34 -08:00
thelamer
6ab17ce8b7 adding jq package for commit parsing on local build 2019-02-17 12:15:38 -08:00
thelamer
81c71ee54d switching back to clone and checkout 2019-02-17 10:41:49 -08:00
saarg
a5fe08ef84 Merge pull request #111 from thelamer/release-4.2
Fix for picons Release 4.2
2019-02-16 21:33:35 +01:00
thelamer
65b2f3c3c7 making requested changes to default config 2019-02-16 09:23:06 -08:00
thelamer
7d94cc4b64 forgot schema value 2019-02-15 13:03:14 -08:00
thelamer
e834619ec3 fixing paths for initial config 2019-02-15 12:58:34 -08:00
thelamer
ab115449e7 need to untar picons for htem to be read by the app 2019-02-15 11:45:41 -08:00
thelamer
322e35bb00 adding picons path to config if this is a first boot 2019-02-14 22:19:37 -08:00
j0nnymoe
6dfbb30c0a Merge pull request #108 from thelamer/release-4.2
adding dynamic readme
2019-02-12 14:34:26 +00:00
thelamer
94b0bc34c7 adding dynamic readme 2019-02-11 21:07:25 -08:00
LinuxServer-CI
2c89a24550 Bot Updating Package Versions 2019-02-11 22:20:05 +00:00
LinuxServer-CI
4d2207db61 Bot Updating Templated Files 2019-02-11 21:42:22 +00:00
aptalca
27ac3525fb Merge pull request #105 from linuxserver/pipeline-4.2
adding multi arch and pipeline logic, pulling picons from object storage
2019-02-11 16:41:43 -05:00
thelamer
946c4fd8a9 adding multi arch and pipeline logic, pulling picons from object storage 2019-01-17 22:46:45 -08:00
aptalca
bf0911b6f5 Merge pull request #95 from linuxserver/release-4.2_rebase_alpine_3.8
rebase to alpine 3.8 and use buildstage type build
2018-09-12 15:31:15 -04:00
sparklyballs
1a9770d227 rebase to alpine 3.8 2018-09-12 15:46:35 +01:00
sparklyballs
c0a3661442 rebase to alpine 3.8 and use buildstage type build 2018-09-03 12:38:00 +01:00
saarg
ba0a26bfb1 Merge pull request #85 from linuxserver/xmltv_4.2
Add JSON::XS Perl package for grab_tv_huro
2018-04-21 21:00:35 +02:00
tobbenb
ac7dc7b478 Add JSON::XS Perl package for grab_tv_huro 2018-04-21 16:41:11 +02:00
sparklyballs
24d94ed4ad Merge pull request #79 from linuxserver/release-4.2_use_sourceforge_master_xmltv
use sourceforge master rather than mirror for xmltv
2018-03-04 11:26:02 +00:00
sparklyballs
fb45df2646 use sourceforge master rather than mirror for xmltv 2018-03-04 09:39:23 +00:00
sparklyballs
57893d0451 Merge pull request #76 from linuxserver/pngquant
Add missing pngquant package
2018-02-23 13:06:20 +00:00
tobbenb
692ee67cf4 Add missing pngquant package 2018-02-22 21:57:43 +01:00
saarg
cacfb82b62 Merge pull request #75 from linuxserver/iconv_4.2
Fix wrong version of Iconv and add build options
2018-02-21 23:41:34 +01:00
tobbenb
e3b56a32cc Remove old libiconv patch 2018-02-21 23:01:55 +01:00
tobbenb
b487342878 Sparklyfi Dockerfile 2018-02-21 21:57:19 +01:00
tobbenb
0a365513dd Update README 2018-02-21 21:54:23 +01:00
tobbenb
1075ff6c38 Add build options from CvH 2018-02-21 21:52:32 +01:00
tobbenb
76d27bb36d Fix iconv runtime crash 2018-02-21 21:50:56 +01:00
sparklyballs
2f197666ac Merge pull request #66 from linuxserver/release-4.2_deprecate_cpu_core
deprecate cpu_core routine lack of scaling
2018-01-04 20:45:39 +00:00
sparklyballs
34b9ebf98f deprecate cpu_core routine lack of scaling 2018-01-04 11:49:17 +00:00
sparklyballs
e1e7730dcc Merge pull request #64 from linuxserver/release-4.2_3.7
bump alpine 3.7, fix continuation lines, linting fixes
2017-12-11 14:44:51 +00:00
sparklyballs
8269eee493 bump alpine 3.7, fix continuation lines, linting fixes 2017-12-11 12:42:03 +00:00
sparklyballs
4fa1634986 Update README.md 2017-12-09 00:40:09 +00:00
sparklyballs
5b5dee7f67 dot resolves weird github/jenkins syncing commits 2017-12-02 00:08:48 +00:00
aptalca
56c3b9a524 Merge pull request #61 from linuxserver/release-4.2_config_patches
increased uniformity across all archs
2017-07-13 20:28:00 -04:00
sparklyballs
a815f66aa3 increased uniformity across all archs 2017-07-13 20:21:04 +01:00
sparklyballs
bcaaad93e4 update of README with badges for new ci 2017-07-11 09:38:21 +01:00
sparklyballs
1cd1bf3fc5 Merge pull request #59 from linuxserver/readme-release
Update README with full path for comskip
2017-07-09 12:25:22 +01:00
tobbenb
b210ad4793 Update README with full path for comskip 2017-07-08 12:28:27 +02:00
sparklyballs
4af4d02187 Merge pull request #57 from linuxserver/dockerfile_tidy
tidy up Dockerfile and install runtime packages all in one
2017-07-03 11:12:17 +01:00
sparklyballs
c340938778 tidy up Dockerfile and install runtime packages all in one 2017-07-03 05:42:55 +01:00
tobbenb
cce4adf7e4 Move to one branch for all 4.2 releases 2017-07-02 16:40:53 +02:00
saarg
ee18601f12 Merge pull request #55 from linuxserver/stable-4.2.1_alpine3.6
bump to alpine 3.6
2017-05-28 16:12:22 +02:00
sparklyballs
68cc40f86e bump to alpine 3.6 2017-05-28 02:29:34 +01:00
sparklyballs
9b1f7b3303 Merge pull request #51 from linuxserver/4.2.1
Update to tvheadend 4.2.1 stable
2017-05-01 13:56:26 +01:00
sparklyballs
01af20a3df Update README.md 2017-05-01 12:37:09 +01:00
tobbenb
f65d09bea2 Cleaning up after sparklys cut and paste double 2017-05-01 13:17:08 +02:00
tobbenb
aab4fb1b35 Update to tvheadend 4.2.1 stable 2017-05-01 12:55:41 +02:00
saarg
bac8634898 Merge pull request #49 from linuxserver/gnu-libiconv
use repo version of gnu-libiconv rather than compile it
2017-04-18 22:50:29 +02:00
sparklyballs
ad949ef08c use repo version of gnu-libiconv rather than compile it 2017-04-18 21:18:36 +01:00
saarg
310b4e4fc2 Merge pull request #47 from linuxserver/cpanm_one_block
use one block and --installdeps for cpanm packages
2017-04-09 23:04:37 +02:00
sparklyballs
342e1f8627 "pin HTTP::Cache::Transparent " version via cpanfile 2017-04-09 13:47:20 +01:00
sparklyballs
82c9a350ac use cpanfile in patches folder for perl dependencies 2017-04-09 13:16:20 +01:00
sparklyballs
82ae97760e standardise build 2017-04-09 11:51:49 +01:00
sparklyballs
b0d9b54c45 standardise build 2017-04-09 11:51:17 +01:00
sparklyballs
8fbc5fdec8 use one block and --installdeps for cpanm packages 2017-04-09 09:58:32 +01:00
j0nnymoe
abf4ff8bd9 Merge pull request #45 from linuxserver/change_cpanm_order
change order of perl cpan package installs
2017-04-08 01:01:12 +01:00
sparklyballs
cf3b5da9a3 change order of perl cpan package installs 2017-04-08 00:32:31 +01:00
sparklyballs
81abf8bc9b fix formatting markdown README 2017-03-15 17:51:03 +00:00
sparklyballs
bc66f48037 Merge pull request #42 from linuxserver/perl
Perl changes, add picons file to gitignore and update XMLTV to 0.5.69
2017-02-09 22:50:13 +00:00
tobbenb
82b4aa4778 Change from openssl to libressl 2017-02-09 23:03:58 +01:00
tobbenb
131e9994ad Delete perl-unicode patch 2017-02-09 22:27:34 +01:00
tobbenb
452c471a56 Update README 2017-02-09 22:25:03 +01:00
tobbenb
41876bfedc Update XMLTV to 0.5.69 2017-02-09 20:00:04 +01:00
tobbenb
b995fe1041 Update XMLTV to 0.5.69 2017-02-09 19:03:11 +01:00
tobbenb
3a6ae839ba Add picons.tar.bz2 to .gitignore 2017-02-09 19:01:59 +01:00
tobbenb
872f6945dd Use alpine packages of perl modules instead of cpan 2017-02-09 19:00:51 +01:00
sparklyballs
6011e4a322 Merge pull request #41 from linuxserver/runopts-mast
Add variable to add additional runtime paramters
2017-02-08 11:18:27 +00:00
tobbenb
f7d763f73f Fix missing open line at end of run file 2017-02-07 22:28:56 +01:00
tobbenb
c45f84aa27 Add variable to add additional runtime paramters 2017-02-07 22:23:55 +01:00
sparklyballs
dc1d442d96 Merge pull request #37 from linuxserver/alpine3.5
Update Alpine to 3.5, change dvb-apps to only compile needed libs and update README.
2017-02-05 14:32:48 +00:00
tobbenb
a7c57ecc35 Update README 2017-02-05 14:57:48 +01:00
tobbenb
ec5307ef63 Update to Alpine 3.5 and change dvb-apps to only compile needed libs 2017-02-04 23:01:36 +01:00
sparklyballs
abfafbb52e fix badges 2017-01-28 13:41:53 +00:00
Neil
5a7a4d31f0 Update README.md 2017-01-23 22:52:39 +00:00
Neil
f8731afa97 Update README.md 2017-01-23 22:52:22 +00:00
Neil
d9bde53d3d Update README.md 2017-01-23 22:50:27 +00:00
sparklyballs
62dc7d0d26 Merge pull request #34 from tobbenb/master
Add picons to /picons and add info to README
2016-11-14 21:50:29 +00:00
tobbenb
ced7dc0842 Add permission fix for /picons 2016-11-14 22:10:07 +01:00
tobbenb
0605182ffc Add picons to /picons and add info to README 2016-11-14 20:39:37 +01:00
sparklyballs
dbc65430eb Update Dockerfile 2016-10-21 23:46:56 +01:00
sparklyballs
ed2383819d add extra parameters info 2016-10-17 23:54:46 +01:00
sparklyballs
ae729f43d5 update media links README 2016-10-07 10:38:19 +01:00
sparklyballs
ae1d953f12 update image link 2016-10-05 12:20:56 +01:00
sparklyballs
42eeb7b99e Merge pull request #33 from sparklyballs/repo-change
switch to european mirror to download libiconv source
2016-09-24 23:11:43 +01:00
sparklyballs
e0127d992c switch to european mirror to download libiconv source 2016-09-24 22:53:09 +01:00
j0nnymoe
09f478d615 Merge pull request #31 from tobbenb/libsmaster
Add missing libs for xmltv
2016-09-22 16:37:24 +01:00
tobbenb
d5b2cbaeb4 Add missing libs for xmltv 2016-09-22 16:48:01 +02:00
j0nnymoe
59a8633e2a Merge pull request #30 from tobbenb/wgfixmaster
Fix broken tv_grab_wg and update README
2016-09-22 15:25:25 +01:00
tobbenb
8c239ea3e4 Update README 2016-09-22 14:50:54 +02:00
tobbenb
f768afd1c3 Fix tv_grab_wg not working 2016-09-22 14:45:22 +02:00
sparklyballs
12c36b7feb Merge pull request #28 from tobbenb/xmltvmaster
Update XMLTV to 0.5.68 and update README
2016-09-18 22:06:38 +01:00
tobbenb
0dcb22b4bc Update XMLTV to 0.5.68 and update README 2016-09-18 21:43:26 +02:00
sparklyballs
b256cc55e0 add .ignores and templates 2016-09-17 02:43:18 +01:00
sparklyballs
4c754e3fa7 fix broken markdown 2016-09-11 21:56:55 +01:00
sparklyballs
f04613e139 quick and dirty edit to readme
broken link in markdown
2016-09-10 13:20:36 +01:00
sparklyballs
9fb879c301 Merge pull request #26 from linuxserver/microbadger
Microbadger
2016-09-10 11:25:28 +01:00
sparklyballs
8600fdc8ef add layer badge to README 2016-09-10 10:57:29 +01:00
sparklyballs
a015422c01 add layer badge to README 2016-09-10 10:55:40 +01:00
sparklyballs
9dea4039aa Merge pull request #22 from sparklyballs/master
Badges and README edits
2016-09-04 21:30:08 +01:00
sparklyballs
fc3b1f10b5 edit README 2016-09-04 21:13:04 +01:00
sparklyballs
87a5b0261d edit README 2016-09-04 20:58:39 +01:00
sparklyballs
8cbc8bdd87 edit README 2016-09-04 20:56:34 +01:00
sparklyballs
a7f761319d edit README 2016-09-04 20:52:58 +01:00
sparklyballs
52db267a59 add badges to README 2016-09-04 20:48:56 +01:00
sparklyballs
5a4fabb382 Merge pull request #21 from tobbenb/fixes
Fixes
2016-09-04 18:11:57 +01:00
tobbenb
1d782db5ff Prepared readme for release 2016-09-04 18:07:00 +02:00
tobbenb
fd0204e985 Remove git checkout and instead build latest commit 2016-09-04 17:28:23 +02:00
sparklyballs
5a355515c8 Merge pull request #15 from tobbenb/fix
Fix error in comskip.ini check
2016-08-27 23:33:11 +01:00
tobbenb
75289032b4 Fix error in comskip.ini check 2016-08-28 00:16:46 +02:00
tobbenb
0ae4b647f7 Merge pull request #12 from tobbenb/winfilename
Set windows compatible filenames to true
2016-08-20 22:32:04 +02:00
tobbenb
c0109fc8eb Set windows compatible filenames to true 2016-08-20 18:43:21 +02:00
tobbenb
cd9107225e Merge pull request #9 from sparklyballs/fixinit
fix config copy in init file
2016-08-20 14:00:12 +02:00
sparklyballs
ae8822135e fix config copy in init file 2016-08-20 12:43:00 +01:00
sparklyballs
252113dc1b Merge pull request #8 from tobbenb/master
Change config to old path.
2016-08-17 11:47:38 +01:00
tobbenb
3f8e723f7d Changed config path to tobbenb/tvheadend style.
Changed config path to tobbenb/tvheadend. Changed dvr default config check from file to directory.
2016-08-17 10:04:39 +02:00
tobbenb
745ea0acf9 Change config to old path.
Changed config to tobbenb/tvheadend path. This way there should be no problem moving to the linuxserver version. Should have done this from the start!
2016-08-17 09:03:36 +02:00
sparklyballs
75e7fccee8 Merge pull request #6 from linuxserver/revert-5-revert-4-iconv
Revert "Revert "test iconv as possible fix for file types""
2016-08-16 17:42:27 +01:00
sparklyballs
04d2505e81 Revert "Revert "test iconv as possible fix for file types"" 2016-08-16 17:37:23 +01:00
sparklyballs
54d63a5e00 Merge pull request #5 from linuxserver/revert-4-iconv
Revert "test iconv as possible fix for file types"
2016-08-16 17:31:35 +01:00
sparklyballs
a14f66db00 Revert "test iconv as possible fix for file types" 2016-08-16 17:30:38 +01:00
sparklyballs
e1ee820917 Merge pull request #4 from sparklyballs/iconv
test iconv as possible fix for file types
2016-08-16 17:13:36 +01:00
sparklyballs
644788414b test iconv as possible fix for file types 2016-08-16 16:41:14 +01:00
sparklyballs
8bf78cda30 Merge pull request #3 from tobbenb/master
Fix comskip ini path
2016-08-15 21:11:30 +01:00
tobbenb
72d025a041 Fix comskip ini path 2016-08-15 21:47:09 +02:00
23 changed files with 5720 additions and 224 deletions

6
.dockerignore Normal file
View File

@@ -0,0 +1,6 @@
.git
.gitignore
.github
.gitattributes
READMETEMPLATE.md
README.md

17
.gitattributes vendored Normal file
View File

@@ -0,0 +1,17 @@
# Auto detect text files and perform LF normalization
* text=auto
# Custom for Visual Studio
*.cs diff=csharp
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain

21
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,21 @@
<!--- Provide a general summary of the issue in the Title above -->
[linuxserverurl]: https://linuxserver.io
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)][linuxserverurl]
<!--- If you have an issue with the project, please provide us with the following information -->
<!--- Host OS -->
<!--- Command line users, your run/create command, GUI/Unraid users, a screenshot of your template settings. -->
<!--- Docker log output, docker log <container-name> -->
<!--- Mention if you're using symlinks on any of the volume mounts. -->
<!--- If you have a suggestion or fix for the project, please provide us with the following information -->
<!--- What you think your suggestion brings to the project, or fixes with the project -->
<!--- If it's a fix, would it be better suited as a Pull request to the repo ? -->
## Thanks, team linuxserver.io

15
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,15 @@
<!--- Provide a general summary of your changes in the Title above -->
[linuxserverurl]: https://linuxserver.io
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)][linuxserverurl]
<!--- Before submitting a pull request please check the following -->
<!--- That you have made a branch in your fork, we'd rather not merge from your master -->
<!--- That if the PR is addressing an existing issue include, closes #<issue number> , in the body of the PR commit message -->
<!--- You have included links to any files / patches etc your PR may be using in the body of the PR commit message -->
<!--- -->
## Thanks, team linuxserver.io

46
.gitignore vendored Normal file
View File

@@ -0,0 +1,46 @@
# Windows image file caches
Thumbs.db
ehthumbs.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msm
*.msp
# Windows shortcuts
*.lnk
# =========================
# Operating System Files
# =========================
# OSX
# =========================
.DS_Store
.AppleDouble
.LSOverride
# Thumbnails
._*
# Files that might appear on external disk
.Spotlight-V100
.Trashes
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# Picons file
picons.tar.bz2

View File

@@ -1,137 +1,167 @@
FROM lsiobase/alpine
MAINTAINER saarg
FROM lsiobase/alpine:3.9 as buildstage
############## build stage ##############
# package version
# package versions
ARG ARGTABLE_VER="2.13"
ARG TVH_VER="e3e8a797"
ARG UNICODE_VER="2.09"
ARG XMLTV_VER="0.5.67"
ARG TVH_VER="release/4.2"
ARG XMLTV_VER="v0.5.70"
ARG TVHEADEND_COMMIT
# Environment settings
# environment settings
ARG TZ="Europe/Oslo"
ENV HOME="/config"
# copy patches
# copy patches
COPY patches/ /tmp/patches/
# install build packages
RUN \
apk add --no-cache --virtual=build-dependencies \
echo "**** install build packages ****" && \
apk add --no-cache \
autoconf \
automake \
bsd-compat-headers \
bzip2 \
cmake \
coreutils \
curl \
ffmpeg-dev \
file \
findutils \
g++ \
gcc \
gettext-dev \
git \
gzip \
jq \
libgcrypt-dev \
libhdhomerun-dev \
libressl-dev \
libtool \
libvpx-dev \
libxml2-dev \
libxslt-dev \
linux-headers \
make \
mercurial \
openssl-dev \
opus-dev \
patch \
perl-dev \
pkgconf \
sdl-dev \
uriparser-dev \
wget \
zlib-dev && \
# add runtime dependencies required in build stage
apk add --no-cache \
bsd-compat-headers \
bzip2 \
curl \
gzip \
libcrypto1.0 \
libcurl \
libssl1.0 \
linux-headers \
openssl \
perl \
pcre2-dev \
perl-archive-zip \
perl-boolean \
perl-capture-tiny \
perl-cgi \
perl-compress-raw-zlib \
perl-data-dumper \
perl-date-manip \
perl-datetime \
perl-datetime-format-strptime \
perl-datetime-timezone \
perl-dbd-sqlite \
perl-dbi \
perl-dev \
perl-digest-sha1 \
perl-doc \
perl-file-slurp \
perl-file-temp \
perl-file-which \
perl-getopt-long \
perl-html-parser \
perl-html-tree \
perl-http-cookies \
perl-io \
perl-io-compress \
perl-io-html \
perl-io-socket-ssl \
perl-io-stringy \
perl-json \
perl-libwww \
perl-lingua-en-numbers-ordinate \
perl-lingua-preferred \
perl-list-moreutils \
perl-module-build \
perl-module-pluggable \
perl-net-ssleay \
perl-parse-recdescent \
perl-path-class \
perl-scalar-list-utils \
perl-term-progressbar \
perl-term-readkey \
perl-test-exception \
perl-test-requires \
perl-timedate \
perl-try-tiny \
perl-unicode-string \
perl-xml-libxml \
perl-xml-libxslt \
perl-xml-parser \
perl-xml-sax \
perl-xml-treepp \
perl-xml-twig \
perl-xml-writer \
pkgconf \
pngquant \
python \
sdl-dev \
tar \
uriparser \
uriparser-dev \
wget \
zlib && \
x264-dev \
x265-dev \
zlib-dev && \
apk add --no-cache \
--repository http://dl-cdn.alpinelinux.org/alpine/edge/community \
gnu-libiconv-dev
# install perl modules
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 "**** install perl modules for xmltv ****" && \
curl -L http://cpanmin.us | perl - App::cpanminus && \
cpanm HTML::TableExtract && \
cpanm HTTP::Cache::Transparent && \
cpanm inc && \
cpanm IO::Scalar && \
cpanm IO::Socket::SSL && \
cpanm Lingua::EN::Numbers::Ordinate && \
cpanm Lingua::Preferred && \
cpanm PerlIO::gzip && \
cpanm SOAP::Lite && \
cpanm Term::ProgressBar && \
cpanm Unicode::UTF8simple && \
cpanm version && \
cpanm WWW::Mechanize && \
cpanm XML::LibXML && \
cpanm XML::TreePP && \
cpanm XML::Twig && \
cpanm XML::Writer && \
cpanm --installdeps /tmp/patches
# patch and build perl-unicode-string
mkdir -p \
/tmp/unicode && \
curl -o \
/tmp/unicode-src.tar.gz -L \
"http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Unicode-String-${UNICODE_VER}.tar.gz" && \
tar xzf /tmp/unicode-src.tar.gz -C \
/tmp/unicode --strip-components=1 && \
cd /tmp/unicode/lib/Unicode && \
patch -i /tmp/patches/perl-unicode.patch && \
cd /tmp/unicode && \
perl Makefile.PL && \
make && \
RUN \
echo "**** compile XMLTV ****" && \
git clone https://github.com/XMLTV/xmltv.git /tmp/xmltv && \
cd /tmp/xmltv && \
git checkout ${XMLTV_VER} && \
echo "**** Perl 5.26 fixes for XMTLV ****" && \
sed "s/use POSIX 'tmpnam';//" -i filter/tv_to_latex && \
sed "s/use POSIX 'tmpnam';//" -i filter/tv_to_text && \
sed "s/\(lib\/set_share_dir.pl';\)/.\/\1/" -i grab/it/tv_grab_it.PL && \
sed "s/\(filter\/Grep.pm';\)/.\/\1/" -i filter/tv_grep.PL && \
sed "s/\(lib\/XMLTV.pm.in';\)/.\/\1/" -i lib/XMLTV.pm.PL && \
sed "s/\(lib\/Ask\/Term.pm';\)/.\/\1/" -i Makefile.PL && \
PERL5LIB=`pwd` && \
echo -e "yes" | perl Makefile.PL PREFIX=/usr/ INSTALLDIRS=vendor && \
make -j 2 && \
make test && \
make install && \
make DESTDIR=/tmp/xmltv-build install
# build dvb-apps
RUN \
echo "**** compile dvb-apps ****" && \
hg clone http://linuxtv.org/hg/dvb-apps /tmp/dvb-apps && \
cd /tmp/dvb-apps && \
make && \
make install && \
make -C lib && \
make -C lib DESTDIR=/tmp/dvbapps-build install && \
cp -pr /tmp/dvbapps-build/usr/* /usr/
# build tvheadend
RUN \
echo "**** compile tvheadend ****" && \
if [ -z ${TVHEADEND_COMMIT+x} ]; then \
TVHEADEND_COMMIT=$(curl -sX GET https://api.github.com/repos/tvheadend/tvheadend/commits/${TVH_VER} \
| jq -r '. | .sha'); \
fi && \
mkdir -p \
/tmp/tvheadend && \
git clone https://github.com/tvheadend/tvheadend.git /tmp/tvheadend && \
cd /tmp/tvheadend && \
git checkout "${TVH_VER}" && \
git checkout ${TVHEADEND_COMMIT} && \
./configure \
--disable-avahi \
--disable-bintray_cache \
--disable-dbus_1 \
--disable-ffmpeg_static \
--disable-hdhomerun_static \
--disable-libfdkaac_static \
@@ -143,65 +173,161 @@ RUN \
--disable-libx265_static \
--enable-hdhomerun_client \
--enable-libav \
--enable-pngquant \
--infodir=/usr/share/info \
--localstatedir=/var \
--mandir=/usr/share/man \
--prefix=/usr \
--sysconfdir=/config && \
make && \
make install && \
make -j 2 && \
make DESTDIR=/tmp/tvheadend-build install
# build XMLTV
curl -o /tmp/xmtltv-src.tar.bz2 -L \
"http://kent.dl.sourceforge.net/project/xmltv/xmltv/${XMLTV_VER}/xmltv-${XMLTV_VER}.tar.bz2" && \
tar xf /tmp/xmtltv-src.tar.bz2 -C \
/tmp --strip-components=1 && \
cd "/tmp/xmltv-${XMLTV_VER}" && \
/bin/echo -e "yes" | perl Makefile.PL PREFIX=/usr/ INSTALLDIRS=vendor && \
make && \
make test && \
make install && \
# build argtable2
RUN \
echo "**** compile argtable2 ****" && \
ARGTABLE_VER1="${ARGTABLE_VER//./-}" && \
mkdir -p \
/tmp/argtable && \
curl -o \
/tmp/argtable-src.tar.gz -L \
"https://sourceforge.net/projects/argtable/files/argtable/argtable-${ARGTABLE_VER}/argtable${ARGTABLE_VER1}.tar.gz" && \
tar xf /tmp/argtable-src.tar.gz -C \
tar xf \
/tmp/argtable-src.tar.gz -C \
/tmp/argtable --strip-components=1 && \
cp /tmp/patches/config.* /tmp/argtable && \
cd /tmp/argtable && \
./configure \
--prefix=/usr && \
make && \
make -j 2 && \
make check && \
make install && \
make DESTDIR=/tmp/argtable-build install && \
echo "**** copy to /usr for comskip dependency ****" && \
cp -pr /tmp/argtable-build/usr/* /usr/
# build comskip
RUN \
echo "***** compile comskip ****" && \
git clone git://github.com/erikkaashoek/Comskip /tmp/comskip && \
cd /tmp/comskip && \
./autogen.sh && \
./configure \
--bindir=/usr/bin \
--sysconfdir=/config && \
make && \
make install && \
--sysconfdir=/config/comskip && \
make -j 2 && \
make DESTDIR=/tmp/comskip-build install
# install runtime packages
############## runtime stage ##############
FROM lsiobase/alpine:3.9
# set version label
ARG BUILD_DATE
ARG VERSION
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
LABEL maintainer="saarg"
# environment settings
ENV HOME="/config"
RUN \
echo "**** install runtime packages ****" && \
apk add --no-cache \
bsd-compat-headers \
bzip2 \
curl \
ffmpeg \
ffmpeg-libs \
libhdhomerun-libs && \
# cleanup
apk del --purge \
build-dependencies && \
gzip \
libcrypto1.1 \
libcurl \
libhdhomerun-libs \
libressl \
libssl1.1 \
libvpx \
libxml2 \
libxslt \
linux-headers \
opus \
pcre2 \
perl \
perl-archive-zip \
perl-boolean \
perl-capture-tiny \
perl-cgi \
perl-compress-raw-zlib \
perl-data-dumper \
perl-date-manip \
perl-datetime \
perl-datetime-format-strptime \
perl-datetime-timezone \
perl-dbd-sqlite \
perl-dbi \
perl-digest-sha1 \
perl-doc \
perl-file-slurp \
perl-file-temp \
perl-file-which \
perl-getopt-long \
perl-html-parser \
perl-html-tree \
perl-http-cookies \
perl-io \
perl-io-compress \
perl-io-html \
perl-io-socket-ssl \
perl-io-stringy \
perl-json \
perl-libwww \
perl-lingua-en-numbers-ordinate \
perl-lingua-preferred \
perl-list-moreutils \
perl-module-build \
perl-module-pluggable \
perl-net-ssleay \
perl-parse-recdescent \
perl-path-class \
perl-scalar-list-utils \
perl-term-progressbar \
perl-term-readkey \
perl-test-exception \
perl-test-requires \
perl-timedate \
perl-try-tiny \
perl-unicode-string \
perl-xml-libxml \
perl-xml-libxslt \
perl-xml-parser \
perl-xml-sax \
perl-xml-treepp \
perl-xml-twig \
perl-xml-writer \
python \
tar \
uriparser \
wget \
x264 \
x265 \
zlib && \
apk add --no-cache \
--repository http://dl-cdn.alpinelinux.org/alpine/edge/community \
gnu-libiconv && \
echo "**** Add Picons ****" && \
mkdir -p /picons && \
curl -o \
/tmp/picons.tar.bz2 -L \
https://lsio-ci.ams3.digitaloceanspaces.com/picons/picons.tar.bz2 && \
tar xf \
/tmp/picons.tar.bz2 -C \
/picons && \
echo "**** cleanup ****" && \
rm -rf \
/config/.cpanm \
/tmp/*
/tmp/*
# copy local files
# copy local files and buildstage artifacts
COPY --from=buildstage /tmp/argtable-build/usr/ /usr/
COPY --from=buildstage /tmp/comskip-build/usr/ /usr/
COPY --from=buildstage /tmp/dvbapps-build/usr/ /usr/
COPY --from=buildstage /tmp/tvheadend-build/usr/ /usr/
COPY --from=buildstage /tmp/xmltv-build/usr/ /usr/
COPY --from=buildstage /usr/local/share/man/ /usr/local/share/man/
COPY --from=buildstage /usr/local/share/perl5/ /usr/local/share/perl5/
COPY root/ /
# ports and volumes

335
Dockerfile.aarch64 Normal file
View File

@@ -0,0 +1,335 @@
FROM lsiobase/alpine:arm64v8-3.9 as buildstage
############## build stage ##############
# package versions
ARG ARGTABLE_VER="2.13"
ARG TVH_VER="release/4.2"
ARG XMLTV_VER="v0.5.70"
ARG TVHEADEND_COMMIT
# environment settings
ARG TZ="Europe/Oslo"
ENV HOME="/config"
# copy patches
COPY patches/ /tmp/patches/
RUN \
echo "**** install build packages ****" && \
apk add --no-cache \
autoconf \
automake \
bsd-compat-headers \
bzip2 \
cmake \
curl \
ffmpeg-dev \
file \
findutils \
g++ \
gcc \
gettext-dev \
git \
gzip \
jq \
libgcrypt-dev \
libhdhomerun-dev \
libressl-dev \
libtool \
libvpx-dev \
libxml2-dev \
libxslt-dev \
linux-headers \
make \
mercurial \
opus-dev \
patch \
pcre2-dev \
perl-archive-zip \
perl-boolean \
perl-capture-tiny \
perl-cgi \
perl-compress-raw-zlib \
perl-data-dumper \
perl-date-manip \
perl-datetime \
perl-datetime-format-strptime \
perl-datetime-timezone \
perl-dbd-sqlite \
perl-dbi \
perl-dev \
perl-digest-sha1 \
perl-doc \
perl-file-slurp \
perl-file-temp \
perl-file-which \
perl-getopt-long \
perl-html-parser \
perl-html-tree \
perl-http-cookies \
perl-io \
perl-io-compress \
perl-io-html \
perl-io-socket-ssl \
perl-io-stringy \
perl-json \
perl-libwww \
perl-lingua-en-numbers-ordinate \
perl-lingua-preferred \
perl-list-moreutils \
perl-module-build \
perl-module-pluggable \
perl-net-ssleay \
perl-parse-recdescent \
perl-path-class \
perl-scalar-list-utils \
perl-term-progressbar \
perl-term-readkey \
perl-test-exception \
perl-test-requires \
perl-timedate \
perl-try-tiny \
perl-unicode-string \
perl-xml-libxml \
perl-xml-libxslt \
perl-xml-parser \
perl-xml-sax \
perl-xml-treepp \
perl-xml-twig \
perl-xml-writer \
pkgconf \
pngquant \
python \
sdl-dev \
tar \
uriparser-dev \
wget \
x264-dev \
x265-dev \
zlib-dev && \
apk add --no-cache \
--repository http://dl-cdn.alpinelinux.org/alpine/edge/community \
gnu-libiconv-dev
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 "**** install perl modules for xmltv ****" && \
curl -L http://cpanmin.us | perl - App::cpanminus && \
cpanm --installdeps /tmp/patches
RUN \
echo "**** compile XMLTV ****" && \
git clone https://github.com/XMLTV/xmltv.git /tmp/xmltv && \
cd /tmp/xmltv && \
git checkout ${XMLTV_VER} && \
echo "**** Perl 5.26 fixes for XMTLV ****" && \
sed "s/use POSIX 'tmpnam';//" -i filter/tv_to_latex && \
sed "s/use POSIX 'tmpnam';//" -i filter/tv_to_text && \
sed "s/\(lib\/set_share_dir.pl';\)/.\/\1/" -i grab/it/tv_grab_it.PL && \
sed "s/\(filter\/Grep.pm';\)/.\/\1/" -i filter/tv_grep.PL && \
sed "s/\(lib\/XMLTV.pm.in';\)/.\/\1/" -i lib/XMLTV.pm.PL && \
sed "s/\(lib\/Ask\/Term.pm';\)/.\/\1/" -i Makefile.PL && \
PERL5LIB=`pwd` && \
echo -e "yes" | perl Makefile.PL PREFIX=/usr/ INSTALLDIRS=vendor && \
make -j 2 && \
make test && \
make DESTDIR=/tmp/xmltv-build install
RUN \
echo "**** compile dvb-apps ****" && \
hg clone http://linuxtv.org/hg/dvb-apps /tmp/dvb-apps && \
cd /tmp/dvb-apps && \
make -C lib && \
make -C lib DESTDIR=/tmp/dvbapps-build install && \
cp -pr /tmp/dvbapps-build/usr/* /usr/
RUN \
echo "**** compile tvheadend ****" && \
if [ -z ${TVHEADEND_COMMIT+x} ]; then \
TVHEADEND_COMMIT=$(curl -sX GET https://api.github.com/repos/tvheadend/tvheadend/commits/${TVH_VER} \
| 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 \
--disable-avahi \
--disable-bintray_cache \
--disable-dbus_1 \
--disable-ffmpeg_static \
--disable-hdhomerun_static \
--disable-libfdkaac_static \
--disable-libmfx_static \
--disable-libtheora_static \
--disable-libvorbis_static \
--disable-libvpx_static \
--disable-libx264_static \
--disable-libx265_static \
--enable-hdhomerun_client \
--enable-libav \
--enable-pngquant \
--infodir=/usr/share/info \
--localstatedir=/var \
--mandir=/usr/share/man \
--prefix=/usr \
--sysconfdir=/config && \
make -j 2 && \
make DESTDIR=/tmp/tvheadend-build install
RUN \
echo "**** compile argtable2 ****" && \
ARGTABLE_VER1="${ARGTABLE_VER//./-}" && \
mkdir -p \
/tmp/argtable && \
curl -o \
/tmp/argtable-src.tar.gz -L \
"https://sourceforge.net/projects/argtable/files/argtable/argtable-${ARGTABLE_VER}/argtable${ARGTABLE_VER1}.tar.gz" && \
tar xf \
/tmp/argtable-src.tar.gz -C \
/tmp/argtable --strip-components=1 && \
cp /tmp/patches/config.* /tmp/argtable && \
cd /tmp/argtable && \
./configure \
--prefix=/usr && \
make -j 2 && \
make check && \
make DESTDIR=/tmp/argtable-build install && \
echo "**** copy to /usr for comskip dependency ****" && \
cp -pr /tmp/argtable-build/usr/* /usr/
RUN \
echo "***** compile comskip ****" && \
git clone git://github.com/erikkaashoek/Comskip /tmp/comskip && \
cd /tmp/comskip && \
./autogen.sh && \
./configure \
--bindir=/usr/bin \
--sysconfdir=/config/comskip && \
make -j 2 && \
make DESTDIR=/tmp/comskip-build install
############## runtime stage ##############
FROM lsiobase/alpine:arm64v8-3.9
# set version label
ARG BUILD_DATE
ARG VERSION
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
LABEL maintainer="saarg"
# environment settings
ENV HOME="/config"
RUN \
echo "**** install runtime packages ****" && \
apk add --no-cache \
bsd-compat-headers \
bzip2 \
curl \
ffmpeg \
ffmpeg-libs \
gzip \
libcrypto1.1 \
libcurl \
libhdhomerun-libs \
libressl \
libssl1.1 \
libvpx \
libxml2 \
libxslt \
linux-headers \
opus \
pcre2 \
perl \
perl-archive-zip \
perl-boolean \
perl-capture-tiny \
perl-cgi \
perl-compress-raw-zlib \
perl-data-dumper \
perl-date-manip \
perl-datetime \
perl-datetime-format-strptime \
perl-datetime-timezone \
perl-dbd-sqlite \
perl-dbi \
perl-digest-sha1 \
perl-doc \
perl-file-slurp \
perl-file-temp \
perl-file-which \
perl-getopt-long \
perl-html-parser \
perl-html-tree \
perl-http-cookies \
perl-io \
perl-io-compress \
perl-io-html \
perl-io-socket-ssl \
perl-io-stringy \
perl-json \
perl-libwww \
perl-lingua-en-numbers-ordinate \
perl-lingua-preferred \
perl-list-moreutils \
perl-module-build \
perl-module-pluggable \
perl-net-ssleay \
perl-parse-recdescent \
perl-path-class \
perl-scalar-list-utils \
perl-term-progressbar \
perl-term-readkey \
perl-test-exception \
perl-test-requires \
perl-timedate \
perl-try-tiny \
perl-unicode-string \
perl-xml-libxml \
perl-xml-libxslt \
perl-xml-parser \
perl-xml-sax \
perl-xml-treepp \
perl-xml-twig \
perl-xml-writer \
python \
tar \
uriparser \
wget \
x264 \
x265 \
zlib && \
apk add --no-cache \
--repository http://dl-cdn.alpinelinux.org/alpine/edge/community \
gnu-libiconv && \
echo "**** Add Picons ****" && \
mkdir -p /picons && \
curl -o \
/tmp/picons.tar.bz2 -L \
https://lsio-ci.ams3.digitaloceanspaces.com/picons/picons.tar.bz2 && \
tar xf \
/tmp/picons.tar.bz2 -C \
/picons && \
echo "**** cleanup ****" && \
rm -rf \
/tmp/*
# copy local files and buildstage artifacts
COPY --from=buildstage /tmp/argtable-build/usr/ /usr/
COPY --from=buildstage /tmp/comskip-build/usr/ /usr/
COPY --from=buildstage /tmp/dvbapps-build/usr/ /usr/
COPY --from=buildstage /tmp/tvheadend-build/usr/ /usr/
COPY --from=buildstage /tmp/xmltv-build/usr/ /usr/
COPY --from=buildstage /usr/local/share/man/ /usr/local/share/man/
COPY --from=buildstage /usr/local/share/perl5/ /usr/local/share/perl5/
COPY root/ /
# ports and volumes
EXPOSE 9981 9982
VOLUME /config /recordings

335
Dockerfile.armhf Normal file
View File

@@ -0,0 +1,335 @@
FROM lsiobase/alpine:arm32v7-3.9 as buildstage
############## build stage ##############
# package versions
ARG ARGTABLE_VER="2.13"
ARG TVH_VER="release/4.2"
ARG XMLTV_VER="v0.5.70"
ARG TVHEADEND_COMMIT
# environment settings
ARG TZ="Europe/Oslo"
ENV HOME="/config"
# copy patches
COPY patches/ /tmp/patches/
RUN \
echo "**** install build packages ****" && \
apk add --no-cache \
autoconf \
automake \
bsd-compat-headers \
bzip2 \
cmake \
curl \
ffmpeg-dev \
file \
findutils \
g++ \
gcc \
gettext-dev \
git \
gzip \
jq \
libgcrypt-dev \
libhdhomerun-dev \
libressl-dev \
libtool \
libvpx-dev \
libxml2-dev \
libxslt-dev \
linux-headers \
make \
mercurial \
opus-dev \
patch \
pcre2-dev \
perl-archive-zip \
perl-boolean \
perl-capture-tiny \
perl-cgi \
perl-compress-raw-zlib \
perl-data-dumper \
perl-date-manip \
perl-datetime \
perl-datetime-format-strptime \
perl-datetime-timezone \
perl-dbd-sqlite \
perl-dbi \
perl-dev \
perl-digest-sha1 \
perl-doc \
perl-file-slurp \
perl-file-temp \
perl-file-which \
perl-getopt-long \
perl-html-parser \
perl-html-tree \
perl-http-cookies \
perl-io \
perl-io-compress \
perl-io-html \
perl-io-socket-ssl \
perl-io-stringy \
perl-json \
perl-libwww \
perl-lingua-en-numbers-ordinate \
perl-lingua-preferred \
perl-list-moreutils \
perl-module-build \
perl-module-pluggable \
perl-net-ssleay \
perl-parse-recdescent \
perl-path-class \
perl-scalar-list-utils \
perl-term-progressbar \
perl-term-readkey \
perl-test-exception \
perl-test-requires \
perl-timedate \
perl-try-tiny \
perl-unicode-string \
perl-xml-libxml \
perl-xml-libxslt \
perl-xml-parser \
perl-xml-sax \
perl-xml-treepp \
perl-xml-twig \
perl-xml-writer \
pkgconf \
pngquant \
python \
sdl-dev \
tar \
uriparser-dev \
wget \
x264-dev \
x265-dev \
zlib-dev && \
apk add --no-cache \
--repository http://dl-cdn.alpinelinux.org/alpine/edge/community \
gnu-libiconv-dev
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 "**** install perl modules for xmltv ****" && \
curl -L http://cpanmin.us | perl - App::cpanminus && \
cpanm --installdeps /tmp/patches
RUN \
echo "**** compile XMLTV ****" && \
git clone https://github.com/XMLTV/xmltv.git /tmp/xmltv && \
cd /tmp/xmltv && \
git checkout ${XMLTV_VER} && \
echo "**** Perl 5.26 fixes for XMTLV ****" && \
sed "s/use POSIX 'tmpnam';//" -i filter/tv_to_latex && \
sed "s/use POSIX 'tmpnam';//" -i filter/tv_to_text && \
sed "s/\(lib\/set_share_dir.pl';\)/.\/\1/" -i grab/it/tv_grab_it.PL && \
sed "s/\(filter\/Grep.pm';\)/.\/\1/" -i filter/tv_grep.PL && \
sed "s/\(lib\/XMLTV.pm.in';\)/.\/\1/" -i lib/XMLTV.pm.PL && \
sed "s/\(lib\/Ask\/Term.pm';\)/.\/\1/" -i Makefile.PL && \
PERL5LIB=`pwd` && \
echo -e "yes" | perl Makefile.PL PREFIX=/usr/ INSTALLDIRS=vendor && \
make -j 2 && \
make test && \
make DESTDIR=/tmp/xmltv-build install
RUN \
echo "**** compile dvb-apps ****" && \
hg clone http://linuxtv.org/hg/dvb-apps /tmp/dvb-apps && \
cd /tmp/dvb-apps && \
make -C lib && \
make -C lib DESTDIR=/tmp/dvbapps-build install && \
cp -pr /tmp/dvbapps-build/usr/* /usr/
RUN \
echo "**** compile tvheadend ****" && \
if [ -z ${TVHEADEND_COMMIT+x} ]; then \
TVHEADEND_COMMIT=$(curl -sX GET https://api.github.com/repos/tvheadend/tvheadend/commits/${TVH_VER} \
| 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 \
--disable-avahi \
--disable-bintray_cache \
--disable-dbus_1 \
--disable-ffmpeg_static \
--disable-hdhomerun_static \
--disable-libfdkaac_static \
--disable-libmfx_static \
--disable-libtheora_static \
--disable-libvorbis_static \
--disable-libvpx_static \
--disable-libx264_static \
--disable-libx265_static \
--enable-hdhomerun_client \
--enable-libav \
--enable-pngquant \
--infodir=/usr/share/info \
--localstatedir=/var \
--mandir=/usr/share/man \
--prefix=/usr \
--sysconfdir=/config && \
make -j 2 && \
make DESTDIR=/tmp/tvheadend-build install
RUN \
echo "**** compile argtable2 ****" && \
ARGTABLE_VER1="${ARGTABLE_VER//./-}" && \
mkdir -p \
/tmp/argtable && \
curl -o \
/tmp/argtable-src.tar.gz -L \
"https://sourceforge.net/projects/argtable/files/argtable/argtable-${ARGTABLE_VER}/argtable${ARGTABLE_VER1}.tar.gz" && \
tar xf \
/tmp/argtable-src.tar.gz -C \
/tmp/argtable --strip-components=1 && \
cp /tmp/patches/config.* /tmp/argtable && \
cd /tmp/argtable && \
./configure \
--prefix=/usr && \
make -j 2 && \
make check && \
make DESTDIR=/tmp/argtable-build install && \
echo "**** copy to /usr for comskip dependency ****" && \
cp -pr /tmp/argtable-build/usr/* /usr/
RUN \
echo "***** compile comskip ****" && \
git clone git://github.com/erikkaashoek/Comskip /tmp/comskip && \
cd /tmp/comskip && \
./autogen.sh && \
./configure \
--bindir=/usr/bin \
--sysconfdir=/config/comskip && \
make -j 2 && \
make DESTDIR=/tmp/comskip-build install
############## runtime stage ##############
FROM lsiobase/alpine:arm32v7-3.9
# set version label
ARG BUILD_DATE
ARG VERSION
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
LABEL maintainer="saarg"
# environment settings
ENV HOME="/config"
RUN \
echo "**** install runtime packages ****" && \
apk add --no-cache \
bsd-compat-headers \
bzip2 \
curl \
ffmpeg \
ffmpeg-libs \
gzip \
libcrypto1.1 \
libcurl \
libhdhomerun-libs \
libressl \
libssl1.1 \
libvpx \
libxml2 \
libxslt \
linux-headers \
opus \
pcre2 \
perl \
perl-archive-zip \
perl-boolean \
perl-capture-tiny \
perl-cgi \
perl-compress-raw-zlib \
perl-data-dumper \
perl-date-manip \
perl-datetime \
perl-datetime-format-strptime \
perl-datetime-timezone \
perl-dbd-sqlite \
perl-dbi \
perl-digest-sha1 \
perl-doc \
perl-file-slurp \
perl-file-temp \
perl-file-which \
perl-getopt-long \
perl-html-parser \
perl-html-tree \
perl-http-cookies \
perl-io \
perl-io-compress \
perl-io-html \
perl-io-socket-ssl \
perl-io-stringy \
perl-json \
perl-libwww \
perl-lingua-en-numbers-ordinate \
perl-lingua-preferred \
perl-list-moreutils \
perl-module-build \
perl-module-pluggable \
perl-net-ssleay \
perl-parse-recdescent \
perl-path-class \
perl-scalar-list-utils \
perl-term-progressbar \
perl-term-readkey \
perl-test-exception \
perl-test-requires \
perl-timedate \
perl-try-tiny \
perl-unicode-string \
perl-xml-libxml \
perl-xml-libxslt \
perl-xml-parser \
perl-xml-sax \
perl-xml-treepp \
perl-xml-twig \
perl-xml-writer \
python \
tar \
uriparser \
wget \
x264 \
x265 \
zlib && \
apk add --no-cache \
--repository http://dl-cdn.alpinelinux.org/alpine/edge/community \
gnu-libiconv && \
echo "**** Add Picons ****" && \
mkdir -p /picons && \
curl -o \
/tmp/picons.tar.bz2 -L \
https://lsio-ci.ams3.digitaloceanspaces.com/picons/picons.tar.bz2 && \
tar xf \
/tmp/picons.tar.bz2 -C \
/picons && \
echo "**** cleanup ****" && \
rm -rf \
/tmp/*
# copy local files and buildstage artifacts
COPY --from=buildstage /tmp/argtable-build/usr/ /usr/
COPY --from=buildstage /tmp/comskip-build/usr/ /usr/
COPY --from=buildstage /tmp/dvbapps-build/usr/ /usr/
COPY --from=buildstage /tmp/tvheadend-build/usr/ /usr/
COPY --from=buildstage /tmp/xmltv-build/usr/ /usr/
COPY --from=buildstage /usr/local/share/man/ /usr/local/share/man/
COPY --from=buildstage /usr/local/share/perl5/ /usr/local/share/perl5/
COPY root/ /
# ports and volumes
EXPOSE 9981 9982
VOLUME /config /recordings

672
Jenkinsfile vendored Normal file
View File

@@ -0,0 +1,672 @@
pipeline {
agent {
label 'X86-64-MULTI'
}
// Input to determine if this is a package check
parameters {
string(defaultValue: 'false', description: 'package check run', name: 'PACKAGE_CHECK')
}
// Configuration for the variables used for this specific repo
environment {
BUILDS_DISCORD=credentials('build_webhook_url')
GITHUB_TOKEN=credentials('498b4638-2d02-4ce5-832d-8a57d01d97ab')
EXT_GIT_BRANCH = 'release/4.2'
EXT_USER = 'tvheadend'
EXT_REPO = 'tvheadend'
BUILD_VERSION_ARG = 'TVHEADEND_COMMIT'
LS_USER = 'linuxserver'
LS_REPO = 'docker-tvheadend'
CONTAINER_NAME = 'tvheadend'
DOCKERHUB_IMAGE = 'linuxserver/tvheadend'
DEV_DOCKERHUB_IMAGE = 'lsiodev/tvheadend'
PR_DOCKERHUB_IMAGE = 'lspipepr/tvheadend'
DIST_IMAGE = 'alpine'
MULTIARCH='true'
CI='true'
CI_WEB='true'
CI_PORT='9981'
CI_SSL='false'
CI_DELAY='120'
CI_DOCKERENV='TZ=US/Pacific'
CI_AUTH='user:password'
CI_WEBPATH=''
}
stages {
// Setup all the basic environment variables needed for the build
stage("Set ENV Variables base"){
steps{
script{
env.EXIT_STATUS = ''
env.LS_RELEASE = sh(
script: '''curl -s https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases | jq -r 'first(.[] | select(.prerelease == true)) | .tag_name' ''',
returnStdout: true).trim()
env.LS_RELEASE_NOTES = sh(
script: '''cat readme-vars.yml | awk -F \\" '/date: "[0-9][0-9].[0-9][0-9].[0-9][0-9]:/ {print $4;exit;}' | sed -E ':a;N;$!ba;s/\\r{0,1}\\n/\\\\n/g' ''',
returnStdout: true).trim()
env.GITHUB_DATE = sh(
script: '''date '+%Y-%m-%dT%H:%M:%S%:z' ''',
returnStdout: true).trim()
env.COMMIT_SHA = sh(
script: '''git rev-parse HEAD''',
returnStdout: true).trim()
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/commit/' + env.GIT_COMMIT
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/'
env.PULL_REQUEST = env.CHANGE_ID
}
script{
env.LS_RELEASE_NUMBER = sh(
script: '''echo ${LS_RELEASE} |sed 's/^.*-ls//g' ''',
returnStdout: true).trim()
}
script{
env.LS_TAG_NUMBER = sh(
script: '''#! /bin/bash
tagsha=$(git rev-list -n 1 ${LS_RELEASE} 2>/dev/null)
if [ "${tagsha}" == "${COMMIT_SHA}" ]; then
echo ${LS_RELEASE_NUMBER}
elif [ -z "${GIT_COMMIT}" ]; then
echo ${LS_RELEASE_NUMBER}
else
echo $((${LS_RELEASE_NUMBER} + 1))
fi''',
returnStdout: true).trim()
}
}
}
/* #######################
Package Version Tagging
####################### */
// Grab the current package versions in Git to determine package tag
stage("Set Package tag"){
steps{
script{
env.PACKAGE_TAG = sh(
script: '''#!/bin/bash
if [ -e package_versions.txt ] ; then
cat package_versions.txt | md5sum | cut -c1-8
else
echo none
fi''',
returnStdout: true).trim()
}
}
}
/* ########################
External Release Tagging
######################## */
// If this is a github commit trigger determine the current commit at head
stage("Set ENV github_commit"){
steps{
script{
env.EXT_RELEASE = sh(
script: '''curl -s https://api.github.com/repos/${EXT_USER}/${EXT_REPO}/commits/${EXT_GIT_BRANCH} | jq -r '. | .sha' | cut -c1-8 ''',
returnStdout: true).trim()
}
}
}
// If this is a github commit trigger Set the external release link
stage("Set ENV commit_link"){
steps{
script{
env.RELEASE_LINK = 'https://github.com/' + env.EXT_USER + '/' + env.EXT_REPO + '/commit/' + env.EXT_RELEASE
}
}
}
// Sanitize the release tag and strip illegal docker or github characters
stage("Sanitize tag"){
steps{
script{
env.EXT_RELEASE_CLEAN = sh(
script: '''echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''',
returnStdout: true).trim()
}
}
}
// If this is a release-4.2 build use live docker endpoints
stage("Set ENV live build"){
when {
branch "release-4.2"
environment name: 'CHANGE_ID', value: ''
}
steps {
script{
env.IMAGE = env.DOCKERHUB_IMAGE
if (env.MULTIARCH == 'true') {
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
} else {
env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
}
env.META_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
}
}
}
// If this is a dev build use dev docker endpoints
stage("Set ENV dev build"){
when {
not {branch "release-4.2"}
environment name: 'CHANGE_ID', value: ''
}
steps {
script{
env.IMAGE = env.DEV_DOCKERHUB_IMAGE
if (env.MULTIARCH == 'true') {
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
} else {
env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
}
env.META_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DEV_DOCKERHUB_IMAGE + '/tags/'
}
}
}
// If this is a pull request build use dev docker endpoints
stage("Set ENV PR build"){
when {
not {environment name: 'CHANGE_ID', value: ''}
}
steps {
script{
env.IMAGE = env.PR_DOCKERHUB_IMAGE
if (env.MULTIARCH == 'true') {
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST
} else {
env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST
}
env.META_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/pull/' + env.PULL_REQUEST
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.PR_DOCKERHUB_IMAGE + '/tags/'
}
}
}
// Run ShellCheck
stage('ShellCheck') {
when {
environment name: 'CI', value: 'true'
}
steps {
withCredentials([
string(credentialsId: 'spaces-key', variable: 'DO_KEY'),
string(credentialsId: 'spaces-secret', variable: 'DO_SECRET')
]) {
script{
env.SHELLCHECK_URL = 'https://lsio-ci.ams3.digitaloceanspaces.com/' + env.IMAGE + '/' + env.META_TAG + '/shellcheck-result.xml'
}
sh '''curl -sL https://raw.githubusercontent.com/linuxserver/docker-shellcheck/master/checkrun.sh | /bin/bash'''
sh '''#! /bin/bash
set -e
docker pull lsiodev/spaces-file-upload:latest
docker run --rm \
-e DESTINATION=\"${IMAGE}/${META_TAG}/shellcheck-result.xml\" \
-e FILE_NAME="shellcheck-result.xml" \
-e MIMETYPE="text/xml" \
-v ${WORKSPACE}:/mnt \
-e SECRET_KEY=\"${DO_SECRET}\" \
-e ACCESS_KEY=\"${DO_KEY}\" \
-t lsiodev/spaces-file-upload:latest \
python /upload.py'''
}
}
}
// Use helper containers to render templated files
stage('Update-Templates') {
when {
branch "release-4.2"
environment name: 'CHANGE_ID', value: ''
expression {
env.CONTAINER_NAME != null
}
}
steps {
sh '''#! /bin/bash
set -e
TEMPDIR=$(mktemp -d)
docker pull linuxserver/jenkins-builder:latest
docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH=release-4.2 -v ${TEMPDIR}:/ansible/jenkins linuxserver/jenkins-builder:latest
docker pull linuxserver/doc-builder:latest
docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH=release-4.2 -v ${TEMPDIR}:/ansible/readme linuxserver/doc-builder:latest
if [ "$(md5sum ${TEMPDIR}/${LS_REPO}/Jenkinsfile | awk '{ print $1 }')" != "$(md5sum Jenkinsfile | awk '{ print $1 }')" ] || [ "$(md5sum ${TEMPDIR}/${CONTAINER_NAME}/README.md | awk '{ print $1 }')" != "$(md5sum README.md | awk '{ print $1 }')" ]; then
mkdir -p ${TEMPDIR}/repo
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
git --git-dir ${TEMPDIR}/repo/${LS_REPO}/.git checkout -f release-4.2
cp ${TEMPDIR}/${CONTAINER_NAME}/README.md ${TEMPDIR}/repo/${LS_REPO}/
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile ${TEMPDIR}/repo/${LS_REPO}/
cd ${TEMPDIR}/repo/${LS_REPO}/
git --git-dir ${TEMPDIR}/repo/${LS_REPO}/.git add Jenkinsfile README.md
git --git-dir ${TEMPDIR}/repo/${LS_REPO}/.git commit -m 'Bot Updating Templated Files'
git --git-dir ${TEMPDIR}/repo/${LS_REPO}/.git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
else
echo "false" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
fi
mkdir -p ${TEMPDIR}/gitbook
git clone https://github.com/linuxserver/docker-documentation.git ${TEMPDIR}/gitbook/docker-documentation
if [ "${BRANCH_NAME}" = "master" ] && [ ! -f ${TEMPDIR}/gitbook/docker-documentation/images/docker-${CONTAINER_NAME}.md ] || [ "$(md5sum ${TEMPDIR}/gitbook/docker-documentation/images/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/${CONTAINER_NAME}/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')" ]; then
cp ${TEMPDIR}/${CONTAINER_NAME}/docker-${CONTAINER_NAME}.md ${TEMPDIR}/gitbook/docker-documentation/images/
cd ${TEMPDIR}/gitbook/docker-documentation/
git add images/docker-${CONTAINER_NAME}.md
git commit -m 'Bot Updating Templated Files'
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git --all
fi
rm -Rf ${TEMPDIR}'''
script{
env.FILES_UPDATED = sh(
script: '''cat /tmp/${COMMIT_SHA}-${BUILD_NUMBER}''',
returnStdout: true).trim()
}
}
}
// Exit the build if the Templated files were just updated
stage('Template-exit') {
when {
branch "release-4.2"
environment name: 'CHANGE_ID', value: ''
environment name: 'FILES_UPDATED', value: 'true'
expression {
env.CONTAINER_NAME != null
}
}
steps {
script{
env.EXIT_STATUS = 'ABORTED'
}
}
}
/* ###############
Build Container
############### */
// Build Docker container for push to LS Repo
stage('Build-Single') {
when {
environment name: 'MULTIARCH', value: 'false'
environment name: 'EXIT_STATUS', value: ''
}
steps {
sh "docker build --no-cache --pull -t ${IMAGE}:${META_TAG} \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
}
}
// Build MultiArch Docker containers for push to LS Repo
stage('Build-Multi') {
when {
environment name: 'MULTIARCH', value: 'true'
environment name: 'EXIT_STATUS', value: ''
}
parallel {
stage('Build X86') {
steps {
sh "docker build --no-cache --pull -t ${IMAGE}:amd64-${META_TAG} \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
}
}
stage('Build ARMHF') {
agent {
label 'ARMHF'
}
steps {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
]
]) {
echo 'Logging into DockerHub'
sh '''#! /bin/bash
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
'''
sh "curl https://lsio-ci.ams3.digitaloceanspaces.com/qemu-arm-static -o qemu-arm-static"
sh "chmod +x qemu-*"
sh "docker build --no-cache --pull -f Dockerfile.armhf -t ${IMAGE}:arm32v7-${META_TAG} \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh "docker tag ${IMAGE}:arm32v7-${META_TAG} lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}"
sh "docker push lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}"
sh '''docker rmi \
${IMAGE}:arm32v7-${META_TAG} \
lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} '''
}
}
}
stage('Build ARM64') {
agent {
label 'ARM64'
}
steps {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
]
]) {
echo 'Logging into DockerHub'
sh '''#! /bin/bash
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
'''
sh "curl https://lsio-ci.ams3.digitaloceanspaces.com/qemu-aarch64-static -o qemu-aarch64-static"
sh "chmod +x qemu-*"
sh "docker build --no-cache --pull -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh "docker tag ${IMAGE}:arm64v8-${META_TAG} lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
sh "docker push lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
sh '''docker rmi \
${IMAGE}:arm64v8-${META_TAG} \
lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} '''
}
}
}
}
}
// Take the image we just built and dump package versions for comparison
stage('Update-packages') {
when {
branch "release-4.2"
environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: ''
}
steps {
sh '''#! /bin/bash
set -e
TEMPDIR=$(mktemp -d)
if [ "${MULTIARCH}" == "true" ]; then
LOCAL_CONTAINER=${IMAGE}:amd64-${META_TAG}
else
LOCAL_CONTAINER=${IMAGE}:${META_TAG}
fi
if [ "${DIST_IMAGE}" == "alpine" ]; then
docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
apk info -v > /tmp/package_versions.txt && \
sort -o /tmp/package_versions.txt /tmp/package_versions.txt && \
chmod 777 /tmp/package_versions.txt'
elif [ "${DIST_IMAGE}" == "ubuntu" ]; then
docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
apt list -qq --installed | sed "s#/.*now ##g" | cut -d" " -f1 > /tmp/package_versions.txt && \
sort -o /tmp/package_versions.txt /tmp/package_versions.txt && \
chmod 777 /tmp/package_versions.txt'
fi
NEW_PACKAGE_TAG=$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 )
echo "Package tag sha from current packages in buit container is ${NEW_PACKAGE_TAG} comparing to old ${PACKAGE_TAG} from github"
if [ "${NEW_PACKAGE_TAG}" != "${PACKAGE_TAG}" ]; then
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/${LS_REPO}
git --git-dir ${TEMPDIR}/${LS_REPO}/.git checkout -f release-4.2
cp ${TEMPDIR}/package_versions.txt ${TEMPDIR}/${LS_REPO}/
cd ${TEMPDIR}/${LS_REPO}/
wait
git add package_versions.txt
git commit -m 'Bot Updating Package Versions'
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all
echo "true" > /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER}
echo "Package tag updated, stopping build process"
else
echo "false" > /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER}
echo "Package tag is same as previous continue with build process"
fi
rm -Rf ${TEMPDIR}'''
script{
env.PACKAGE_UPDATED = sh(
script: '''cat /tmp/packages-${COMMIT_SHA}-${BUILD_NUMBER}''',
returnStdout: true).trim()
}
}
}
// Exit the build if the package file was just updated
stage('PACKAGE-exit') {
when {
branch "release-4.2"
environment name: 'CHANGE_ID', value: ''
environment name: 'PACKAGE_UPDATED', value: 'true'
environment name: 'EXIT_STATUS', value: ''
}
steps {
script{
env.EXIT_STATUS = 'ABORTED'
}
}
}
// Exit the build if this is just a package check and there are no changes to push
stage('PACKAGECHECK-exit') {
when {
branch "release-4.2"
environment name: 'CHANGE_ID', value: ''
environment name: 'PACKAGE_UPDATED', value: 'false'
environment name: 'EXIT_STATUS', value: ''
expression {
params.PACKAGE_CHECK == 'true'
}
}
steps {
script{
env.EXIT_STATUS = 'ABORTED'
}
}
}
/* #######
Testing
####### */
// Run Container tests
stage('Test') {
when {
environment name: 'CI', value: 'true'
environment name: 'EXIT_STATUS', value: ''
}
steps {
withCredentials([
string(credentialsId: 'spaces-key', variable: 'DO_KEY'),
string(credentialsId: 'spaces-secret', variable: 'DO_SECRET')
]) {
script{
env.CI_URL = 'https://lsio-ci.ams3.digitaloceanspaces.com/' + env.IMAGE + '/' + env.META_TAG + '/index.html'
}
sh '''#! /bin/bash
set -e
docker pull lsiodev/ci:latest
if [ "${MULTIARCH}" == "true" ]; then
docker pull lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
docker pull lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
docker tag lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
docker tag lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
fi
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-e IMAGE=\"${IMAGE}\" \
-e DELAY_START=\"${CI_DELAY}\" \
-e TAGS=\"${CI_TAGS}\" \
-e META_TAG=\"${META_TAG}\" \
-e PORT=\"${CI_PORT}\" \
-e SSL=\"${CI_SSL}\" \
-e BASE=\"${DIST_IMAGE}\" \
-e SECRET_KEY=\"${DO_SECRET}\" \
-e ACCESS_KEY=\"${DO_KEY}\" \
-e DOCKER_ENV=\"${CI_DOCKERENV}\" \
-e WEB_SCREENSHOT=\"${CI_WEB}\" \
-e WEB_AUTH=\"${CI_AUTH}\" \
-e WEB_PATH=\"${CI_WEBPATH}\" \
-e DO_REGION="ams3" \
-e DO_BUCKET="lsio-ci" \
-t lsiodev/ci:latest \
python /ci/ci.py'''
}
}
}
/* ##################
Release Logic
################## */
// If this is an amd64 only image only push a single image
stage('Docker-Push-Single') {
when {
environment name: 'MULTIARCH', value: 'false'
environment name: 'EXIT_STATUS', value: ''
}
steps {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
]
]) {
echo 'Logging into DockerHub'
sh '''#! /bin/bash
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
'''
sh "docker tag ${IMAGE}:${META_TAG} ${IMAGE}:release-4.2"
sh "docker push ${IMAGE}:release-4.2"
sh "docker push ${IMAGE}:${META_TAG}"
sh '''docker rmi \
${IMAGE}:${META_TAG} \
${IMAGE}:release-4.2 '''
}
}
}
// If this is a multi arch release push all images and define the manifest
stage('Docker-Push-Multi') {
when {
environment name: 'MULTIARCH', value: 'true'
environment name: 'EXIT_STATUS', value: ''
}
steps {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
]
]) {
sh '''#! /bin/bash
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
'''
sh '''#! /bin/bash
if [ "${CI}" == "false" ]; then
docker pull lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}
docker pull lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
docker tag lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
docker tag lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
fi'''
sh "docker tag ${IMAGE}:amd64-${META_TAG} ${IMAGE}:amd64-release-4.2"
sh "docker tag ${IMAGE}:arm32v7-${META_TAG} ${IMAGE}:arm32v7-release-4.2"
sh "docker tag ${IMAGE}:arm64v8-${META_TAG} ${IMAGE}:arm64v8-release-4.2"
sh "docker push ${IMAGE}:amd64-${META_TAG}"
sh "docker push ${IMAGE}:arm32v7-${META_TAG}"
sh "docker push ${IMAGE}:arm64v8-${META_TAG}"
sh "docker push ${IMAGE}:amd64-release-4.2"
sh "docker push ${IMAGE}:arm32v7-release-4.2"
sh "docker push ${IMAGE}:arm64v8-release-4.2"
sh "docker manifest push --purge ${IMAGE}:release-4.2 || :"
sh "docker manifest create ${IMAGE}:release-4.2 ${IMAGE}:amd64-release-4.2 ${IMAGE}:arm32v7-release-4.2 ${IMAGE}:arm64v8-release-4.2"
sh "docker manifest annotate ${IMAGE}:release-4.2 ${IMAGE}:arm32v7-release-4.2 --os linux --arch arm"
sh "docker manifest annotate ${IMAGE}:release-4.2 ${IMAGE}:arm64v8-release-4.2 --os linux --arch arm64 --variant v8"
sh "docker manifest push --purge ${IMAGE}:${META_TAG} || :"
sh "docker manifest create ${IMAGE}:${META_TAG} ${IMAGE}:amd64-${META_TAG} ${IMAGE}:arm32v7-${META_TAG} ${IMAGE}:arm64v8-${META_TAG}"
sh "docker manifest annotate ${IMAGE}:${META_TAG} ${IMAGE}:arm32v7-${META_TAG} --os linux --arch arm"
sh "docker manifest annotate ${IMAGE}:${META_TAG} ${IMAGE}:arm64v8-${META_TAG} --os linux --arch arm64 --variant v8"
sh "docker manifest push --purge ${IMAGE}:release-4.2"
sh "docker manifest push --purge ${IMAGE}:${META_TAG}"
sh '''docker rmi \
${IMAGE}:amd64-${META_TAG} \
${IMAGE}:amd64-release-4.2 \
${IMAGE}:arm32v7-${META_TAG} \
${IMAGE}:arm32v7-release-4.2 \
${IMAGE}:arm64v8-${META_TAG} \
${IMAGE}:arm64v8-release-4.2 \
lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \
lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} '''
}
}
}
// If this is a public release tag it in the LS Github
stage('Github-Tag-Push-Release') {
when {
branch "release-4.2"
expression {
env.LS_RELEASE != env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-ls' + env.LS_TAG_NUMBER
}
environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: ''
}
steps {
echo "Pushing New tag for current commit ${EXT_RELEASE_CLEAN}-pkg-${PACKAGE_TAG}-ls${LS_TAG_NUMBER}"
sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \
-d '{"tag":"'${EXT_RELEASE_CLEAN}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\
"object": "'${COMMIT_SHA}'",\
"message": "Tagging Release '${EXT_RELEASE_CLEAN}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}' to release-4.2",\
"type": "commit",\
"tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
echo "Pushing New release for Tag"
sh '''#! /bin/bash
curl -s https://api.github.com/repos/${EXT_USER}/${EXT_REPO}/commits/${EXT_GIT_BRANCH} | jq '. | .commit.message' | sed 's:^.\\(.*\\).$:\\1:' > releasebody.json
echo '{"tag_name":"'${EXT_RELEASE_CLEAN}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\
"target_commitish": "release-4.2",\
"name": "'${EXT_RELEASE_CLEAN}'-pkg-'${PACKAGE_TAG}'-ls'${LS_TAG_NUMBER}'",\
"body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n**'${EXT_REPO}' Changes:**\\n\\n' > start
printf '","draft": false,"prerelease": true}' >> releasebody.json
paste -d'\\0' start releasebody.json > releasebody.json.done
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done'''
}
}
// Use helper container to sync the current README on master to the dockerhub endpoint
stage('Sync-README') {
when {
environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: ''
}
steps {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
]
]) {
sh '''#! /bin/bash
docker pull lsiodev/readme-sync
docker run --rm=true \
-e DOCKERHUB_USERNAME=$DOCKERUSER \
-e DOCKERHUB_PASSWORD=$DOCKERPASS \
-e GIT_REPOSITORY=${LS_USER}/${LS_REPO} \
-e DOCKER_REPOSITORY=${IMAGE} \
-e GIT_BRANCH=master \
lsiodev/readme-sync bash -c 'node sync' '''
}
}
}
// If this is a Pull request send the CI link as a comment on it
stage('Pull Request Comment') {
when {
not {environment name: 'CHANGE_ID', value: ''}
environment name: 'CI', value: 'true'
environment name: 'EXIT_STATUS', value: ''
}
steps {
sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/issues/${PULL_REQUEST}/comments \
-d '{"body": "I am a bot, here are the test results for this PR: \\n'${CI_URL}' \\n'${SHELLCHECK_URL}'"}' '''
}
}
}
/* ######################
Send status to Discord
###################### */
post {
always {
script{
if (env.EXIT_STATUS == "ABORTED"){
sh 'echo "build aborted"'
}
else if (currentBuild.currentResult == "SUCCESS"){
sh ''' curl -X POST --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 1681177,\
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** Success\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
}
else {
sh ''' curl -X POST --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 16711680,\
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** failure\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
"username": "Jenkins"}' ${BUILDS_DISCORD} '''
}
}
}
}
}

279
README.md
View File

@@ -1,10 +1,277 @@
![https://linuxserver.io](https://www.linuxserver.io/wp-content/uploads/2015/06/linuxserver_medium.png)
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io)
## This is a Container in active development by the [LinuxServer.io](https://linuxserver.io) team and is not recommended for use by the general public.
The [LinuxServer.io](https://linuxserver.io) team brings you another container release featuring :-
If you want to comment\contribute on this container , are looking for support on any of our other work , or are curious about us in general, check out the following.
* regular and timely application updates
* easy user mappings (PGID, PUID)
* custom base image with s6 overlay
* weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
* regular security updates
* [forum.linuxserver.io](https://forum.linuxserver.io)
* [IRC](https://www.linuxserver.io/index.php/irc/) on freenode at `#linuxserver.io`
* [Podcast](https://www.linuxserver.io/index.php/category/podcast/) covers everything to do with getting the most from your Linux Server plus a focus on all things Docker and containerisation!
Find us at:
* [Discord](https://discord.gg/YWrKVTn) - realtime support / chat with the community and the team.
* [IRC](https://irc.linuxserver.io) - on freenode at `#linuxserver.io`. Our primary support channel is Discord.
* [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more!
# [linuxserver/tvheadend](https://github.com/linuxserver/docker-tvheadend)
[![](https://img.shields.io/discord/354974912613449730.svg?logo=discord&label=LSIO%20Discord&style=flat-square)](https://discord.gg/YWrKVTn)
[![](https://images.microbadger.com/badges/version/linuxserver/tvheadend.svg)](https://microbadger.com/images/linuxserver/tvheadend "Get your own version badge on microbadger.com")
[![](https://images.microbadger.com/badges/image/linuxserver/tvheadend.svg)](https://microbadger.com/images/linuxserver/tvheadend "Get your own version badge on microbadger.com")
![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/tvheadend.svg)
![Docker Stars](https://img.shields.io/docker/stars/linuxserver/tvheadend.svg)
[![Build Status](https://ci.linuxserver.io/buildStatus/icon?job=Docker-Pipeline-Builders/docker-tvheadend/master)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-tvheadend/job/master/)
[![](https://lsio-ci.ams3.digitaloceanspaces.com/linuxserver/tvheadend/latest/badge.svg)](https://lsio-ci.ams3.digitaloceanspaces.com/linuxserver/tvheadend/latest/index.html)
[Tvheadend](https://www.tvheadend.org/) works as a proxy server: is a TV streaming server and recorder for Linux, FreeBSD and Android supporting DVB-S, DVB-S2, DVB-C, DVB-T, 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 (over-the-air DVB and ATSC including OpenTV DVB extensions, XMLTV, PyXML).
[![tvheadend](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/tvheadend-big.png)](https://www.tvheadend.org/)
## Supported Architectures
Our images support multiple architectures such as `x86-64`, `arm64` and `armhf`. We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-2.md#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/).
Simply pulling `linuxserver/tvheadend` should retrieve the correct image for your arch, but you can also pull specific arch images via tags.
The architectures supported by this image are:
| Architecture | Tag |
| :----: | --- |
| x86-64 | amd64-latest |
| arm64 | arm64v8-latest |
| armhf | arm32v7-latest |
## Version Tags
This image provides various versions that are available via tags. `latest` tag usually provides the latest stable version. Others are considered under development and caution must be exercised when using them.
| Tag | Description |
| :----: | --- |
| latest | Current latest release. |
| release-4.2 | Latest release from 4.2 branch. |
| stable-4.2.1 | Old stable version. Will not be updated anymore! |
| stable-4.0.9 | Old stable version. Will not be updated anymore! |
## Usage
Here are some example snippets to help you get started creating a container.
### docker
```
docker create \
--name=tvheadend \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Europe/London \
-e RUN_OPTS=<run options here> `#optional` \
-p 9981:9981 \
-p 9982:9982 \
-v <path to data>:/config \
-v <path to recordings>:/recordings \
--device /dev/dri:/dev/dri `#optional` \
--device /dev/drb:/dev/dvb `#optional` \
--restart unless-stopped \
linuxserver/tvheadend
```
#### Host vs. Bridge
If you use IPTV, SAT>IP or HDHomeRun, you need to create the container with --net=host and remove the -p flags. This is because of a limitation in docker and multicast.
### docker-compose
Compatible with docker-compose v2 schemas.
```
---
version: "2"
services:
tvheadend:
image: linuxserver/tvheadend
container_name: tvheadend
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
- RUN_OPTS=<run options here> #optional
volumes:
- <path to data>:/config
- <path to recordings>:/recordings
ports:
- 9981:9981
- 9982:9982
devices:
- /dev/dri:/dev/dri #optional
- /dev/drb:/dev/dvb #optional
restart: unless-stopped
```
## Parameters
Container images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `<external>:<internal>` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container.
| Parameter | Function |
| :----: | --- |
| `-p 9981` | WebUI |
| `-p 9982` | HTSP server port. |
| `-e PUID=1000` | for UserID - see below for explanation |
| `-e PGID=1000` | for GroupID - see below for explanation |
| `-e TZ=Europe/London` | Specify a timezone to use EG Europe/London. |
| `-e RUN_OPTS=<run options here>` | Optionally specify additional arguments to be passed. See Additional runtime parameters. |
| `-v /config` | Where TVHeadend show store it's config files. |
| `-v /recordings` | Where you want the PVR to store recordings. |
| `--device /dev/dri` | Only needed if you want to use your AMD/Intel GPU for hardware accelerated video encoding (vaapi). |
| `--device /dev/dvb` | Only needed if you want to pass through a DVB card to the container. If you use IPTV or HDHomeRun you can leave it out. |
## User / Group Identifiers
When using volumes (`-v` flags) permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user `PUID` and group `PGID`.
Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.
In this instance `PUID=1000` and `PGID=1000`, to find yours use `id user` as below:
```
$ id username
uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
```
&nbsp;
## Application Setup
The setup depends if you run the one of the stable tags or use latest. Running latest is the easiest as it has a setup wizard.
**Stable**
First thing to do is to go to Configuration --> DVB Inputs --> TV adapters and add your LNB/switch info. Then create a new network in the Networks tab and set the correct pre-defined muxes and orbital position.
Go back to the TV adapters tab and add the newly created network under universal LNB. Go back to the Networks tab and mark the network you created earlier and press the Force Scan button. Tvheadend will now scan the muxes for services.
After the scan is done, head to the Services tab and find the services you want as channels, mark them, and press map services. They should now appear under Configuration --> Channel/EPG.
**Latest**
The first thing to do is to run the setup wizard. If it doesn't pop up at first login, you can find it in Configuration --> General --> Base and click Start Wizard. This will guide you to set up the basic parts of tvheadend.
**Configuring XMLTV grabber**
To configure the XMLTV grabber, first check if your grabber is listed in Configuration --> Channel/EPG --> EPG Grabber Modules. If it's listed, you will have to configure the grabber before enabling.
Find the path in the path field of your grabber. We will use the last part. It starts with tv_grab_. Add it after /usr/bin/ in the below command. There should be no space between Usr/bin/ and the part you added.
```
docker exec -it -u abc tvheadend /usr/bin/for_you_to_fill_out --configure
```
Now follow the onscreen progress. If you get asked about cache, just accept the default. After you have configured your grabber, you can go back and enable your grabber.
If you allready have a configuration file, you can add it in the .xmltv folder where you mapped the /config volume. If it's not created, create it.
**Comskip**
This container comes with Comskip for commercial flagging of recordings. This you have to add in the recording config of tvheadend.
Go to Configuration --> Recording. Change the view level to advanced in the top right corner, and add the below in the Post-processor command field.
```
/usr/bin/comskip --ini=/config/comskip/comskip.ini "%f"
```
Now comskip will run after each recording is finished. You will find comskip.ini in the comskip folder of your /config volume mapping. See the [Comskip](http://www.kaashoek.com/comskip/) homepage for tuning of the ini file.
**FFmpeg**
FFmpeg is installed in /usr/bin/ in case you need to use it with pipe.
**EPG XML file**
If you have EPG data in XML format from a supplier, you can drop it in the data folder of your /config volume mapping. If it doesn't exist, create it. Then choose the XML file grabber in Configuration --> Channel/EPG --> EPG Grabber Modules.
If you use WebGrab+Plus, choose the WebGrab+Plus XML file grabber. The XML file goes in the same path as above.
The xml file has to be named guide.xml.
For advanced setup of tvheadend, go to [Tvheadend][appurl]
**Picons**
We have added all the picons from [picons.xyz](https://picons.xyz/) in the folder /picons. To enable the use of these picons, add the path to the Channel icon path in Configuration --> General --> Base.
You need to enable minimum advanced view level to see the picons options.
## Additional runtime parameters
In some cases it might be necessary to start tvheadend with additional parameters, for example to enable debugging or specify webroot for reverse proxy. Be sure to have the right parameters set, as adding the wrong once might lead to the container not starting correctly.
## Support Info
* Shell access whilst the container is running: `docker exec -it tvheadend /bin/bash`
* To monitor the logs of the container in realtime: `docker logs -f tvheadend`
* container version number
* `docker inspect -f '{{ index .Config.Labels "build_version" }}' tvheadend`
* image version number
* `docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/tvheadend`
## Updating Info
Most of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (ie. nextcloud, plex), we do not recommend or support updating apps inside the container. Please consult the [Application Setup](#application-setup) section above to see if it is recommended for the image.
Below are the instructions for updating containers:
### Via Docker Run/Create
* Update the image: `docker pull linuxserver/tvheadend`
* Stop the running container: `docker stop tvheadend`
* Delete the container: `docker rm tvheadend`
* Recreate a new container with the same docker create parameters as instructed above (if mapped correctly to a host folder, your `/config` folder and settings will be preserved)
* Start the new container: `docker start tvheadend`
* You can also remove the old dangling images: `docker image prune`
### Via Taisun auto-updater (especially useful if you don't remember the original parameters)
* Pull the latest image at its tag and replace it with the same env variables in one shot:
```
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock taisun/updater \
--oneshot tvheadend
```
* You can also remove the old dangling images: `docker image prune`
### Via Docker Compose
* Update all images: `docker-compose pull`
* or update a single image: `docker-compose pull tvheadend`
* Let compose update all containers as necessary: `docker-compose up -d`
* or update a single container: `docker-compose up -d tvheadend`
* You can also remove the old dangling images: `docker image prune`
## Versions
* **27.03.19:** - Rebase to Alpine 3.9, fix init logic to only chown once.
* **23.03.19:** - Switching to new Base images, shift to arm32v7 tag.
* **17.02.19:** - Bump xmltv to 5.70, ensure version tagging works by cloning tvheadend.
* **14.02.19:** - Add picons path to config.
* **15.01.19:** - Add pipeline logic and multi arch.
* **12.09.18:** - Rebase to alpine 3.8 and use buildstage type build.
* **21.04.18:** - Add JSON::XS Perl package for grab_tv_huro.
* **24.03.18:** - Add dvbcsa package.
* **04.03.18:** - Use sourceforge master rather than mirror for xmltv.
* **22.02.18:** - Add lost libva-intel-driver.
* **21.02.18:** - Fix wrong version of iconv used.
* **18.02.18:** - Add vaapi support, some cleanup and dropping of deprecated options.
* **04.01.18:** - Deprecate cpu_core routine lack of scaling.
* **11.12.17:** - Rebase to alpine 3.7, linting fixes.
* **02.09.17:** - Add codec dependencies.
* **13.07.17:** - Increase uniformity across all archs.
* **08.07.17:** - Update README with full path for comskip.
* **02.07.17:** - Move to one branch for all 4.2 releases.
* **27.05.17:** - Rebase to alpine 3.6.
* **01.05.17:** - Update to tvheadend 4.2.1 stable.
* **18.04.17:** - Use repo version of gnu-libiconv rather than compiling.
* **09.04.17:** - Chain cpanm installs in one block and use --installdeps.
* **09.02.17:** - Perl changes, add picons file to gitignore and update XMLTV to 0.5.69.
* **07.02.17:** - Add variable to add additional runtime paramters.
* **05.02.17:** - Update to alpine 3.5 and change dvb-apps to only compile needed libs.
* **14.11.16:** - Add picons from picons.xyz to /picons folder and add info to README.
* **22.09.16:** - Fix broken tv_grab_wg, libs for xmltv and update README.
* **18.09.16:** - Update XMLTV to 0.5.68 and update README.
* **10.09.16:** - Add layer badges to README.
* **05.09.16:** - Initial Release.

View File

@@ -1,95 +0,0 @@
![https://linuxserver.io](https://www.linuxserver.io/wp-content/uploads/2015/06/linuxserver_medium.png)
The [LinuxServer.io](https://linuxserver.io) team brings you another container release featuring easy user mapping and community support. Find us for support at:
* [forum.linuxserver.io](https://forum.linuxserver.io)
* [IRC](https://www.linuxserver.io/index.php/irc/) on freenode at `#linuxserver.io`
* [Podcast](https://www.linuxserver.io/index.php/category/podcast/) covers everything to do with getting the most from your Linux Server plus a focus on all things Docker and containerisation!
# linuxserver/tvheadend-unstable
[Tvheadend] (https://www.tvheadend.org/) is a TV streaming server and recorder for Linux, FreeBSD and Android supporting DVB-S, DVB-S2, DVB-C, DVB-T, 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 (over-the-air DVB and ATSC including OpenTV DVB extensions, XMLTV, PyXML).
## Usage
```
docker create \
--name=tvheadend-unstable \
-v <path to data>:/config \
-e PGID=<gid> -e PUID=<uid> \
-p 9981:9981 \
-p 9982:9982 \
--device=/dev/dvb
linuxserver/tvheadend-unstable
```
The --device=/dev/dvb is only needed if you want to pass through a DVB card to the container. If you use IPTV or HDHomeRun you can leave it out.
**Parameters**
* `-p 1234` - the port(s)
* `-v /config` - explain what lives here
* `-e PGID` for GroupID - see below for explanation
* `-e PUID` for UserID - see below for explanation
It is based on alpine linux with s6 overlay, for shell access whilst the container is running do `docker exec -it tvheadend-unstable /bin/bash`.
### User / Group Identifiers
Sometimes when using data volumes (`-v` flags) permissions issues can arise between the host OS and the container. We avoid this issue by allowing you to specify the user `PUID` and group `PGID`. Ensure the data volume directory on the host is owned by the same user you specify and it will "just work" ™.
In this instance `PUID=1001` and `PGID=1001`. To find yours use `id user` as below:
```
$ id <dockeruser>
uid=1001(dockeruser) gid=1001(dockergroup) groups=1001(dockergroup)
```
## Setting up the application
The first thing to do is to run the setup wizard. If it doesn't pop up at first login, you can find it in Configuration --> General --> Base and click Start Wizard. This will guide you to set up the basic parts of tvheadend.
**Configuring XMLTV grabber**
To configure the XMLTV grabber, first check if your grabber is listed in Configuration --> Channel/EPG --> EPG Grabber Modules. If it's listed, you will have to configure the grabber before enabling.
Find the path in the path field of your grabber. We will use the last part. It starts with tv_grab_. Add it after /usr/bin/ in the below command. There should be no space between Usr/bin/ and the part you added.
```
docker exec -it -u abc tvheadend-unstable /usr/bin/ --configure
```
Now follow the onscreen progress. If you get asked about cache, just accept the default. After you have configured your grabber, you can go back and enable your grabber.
If you allready have a configuration file, you can add it in the .xmltv folder where you mapped the /config volume. If it's not created, create it.
**Comskip**
This container comes with Comskip for commercial flagging of recordings. This you have to add in the recording config of tvheadend.
Go to Configuration --> Recording. Change the view level to advanced in the top right corner, and add the below in the Post-processor command field.
```
comskip "%f"
```
Now comskip will run after each recording is finished. You will find comskip.ini in the comskip folder of your /config volume mapping. See the [Comskip] (http://www.kaashoek.com/comskip/) homepage for tuning of the ini file.
**FFmpeg**
FFmpeg is installed in /usr/bin/ in case you need to use it with pipe.
**EPG XML file**
If you have EPG data in XML format from a supplier, you can drop it in the data folder of your your /config volume mapping. Then choose the XML file grabber in Configuration --> Channel/EPG --> EPG Grabber Modules.
If you use WebGrab+Plus, choose the WebGrab+Plus XML file grabber. The XML file goes in the same path as above.
For advanced setup of tvheadend, go to [tvheadend.org] (https://www.tvheadend.org)
## Info
* Shell access whilst the container is running: `docker exec -it tvheadend-unstable /bin/bash`
* To monitor the logs of the container in realtime: `docker logs -f tvheadend-unstable`
## Versions
+ **14.08.2016:** Initial release.

29
jenkins-vars.yml Normal file
View File

@@ -0,0 +1,29 @@
---
# jenkins variables
project_name: docker-tvheadend
external_type: github_commit
release_type: prerelease
release_tag: release-4.2
ls_branch: release-4.2
repo_vars:
- EXT_GIT_BRANCH = 'release/4.2'
- EXT_USER = 'tvheadend'
- EXT_REPO = 'tvheadend'
- BUILD_VERSION_ARG = 'TVHEADEND_COMMIT'
- LS_USER = 'linuxserver'
- LS_REPO = 'docker-tvheadend'
- CONTAINER_NAME = 'tvheadend'
- DOCKERHUB_IMAGE = 'linuxserver/tvheadend'
- DEV_DOCKERHUB_IMAGE = 'lsiodev/tvheadend'
- PR_DOCKERHUB_IMAGE = 'lspipepr/tvheadend'
- DIST_IMAGE = 'alpine'
- MULTIARCH='true'
- CI='true'
- CI_WEB='true'
- CI_PORT='9981'
- CI_SSL='false'
- CI_DELAY='120'
- CI_DOCKERENV='TZ=US/Pacific'
- CI_AUTH='user:password'
- CI_WEBPATH=''

218
package_versions.txt Executable file
View File

@@ -0,0 +1,218 @@
alpine-baselayout-3.1.0-r3
alpine-keys-2.1-r1
alsa-lib-1.1.8-r0
apk-tools-2.10.3-r1
bash-4.4.19-r1
bsd-compat-headers-0.7.1-r0
busybox-1.29.3-r10
bzip2-1.0.6-r6
ca-certificates-20190108-r0
ca-certificates-cacert-20190108-r0
coreutils-8.30-r0
curl-7.64.0-r1
expat-2.2.6-r0
ffmpeg-4.0.2-r0
ffmpeg-libs-4.0.2-r0
fontconfig-2.13.1-r0
freetype-2.9.1-r2
fribidi-1.0.5-r0
gdbm-1.13-r1
gmp-6.1.2-r1
gnu-libiconv-1.15-r2
gnutls-3.6.4-r0
gzip-1.10-r0
lame-3.100-r0
libacl-2.2.52-r5
libass-0.14.0-r0
libattr-2.4.47-r7
libbsd-0.8.6-r2
libbz2-1.0.6-r6
libc-utils-0.7.1-r0
libcrypto1.1-1.1.1b-r1
libcurl-7.64.0-r1
libdrm-2.4.96-r0
libffi-3.2.1-r6
libgcc-8.2.0-r2
libgcrypt-1.8.4-r0
libgpg-error-1.33-r0
libhdhomerun-libs-20161117-r1
libidn-1.35-r0
libjpeg-turbo-1.5.3-r4
libogg-1.3.3-r2
libpciaccess-0.14-r0
libpng-1.6.35-r0
libressl-2.7.5-r0
libressl2.7-libcrypto-2.7.5-r0
libressl2.7-libssl-2.7.5-r0
libressl2.7-libtls-2.7.5-r0
libssh2-1.8.2-r0
libssl1.1-1.1.1b-r1
libstdc++-8.2.0-r2
libtasn1-4.13-r0
libtheora-1.1.1-r13
libtls-standalone-2.7.4-r6
libunistring-0.9.10-r0
libuuid-2.33-r0
libva-2.2.0-r0
libvdpau-1.1.1-r2
libvorbis-1.3.6-r2
libvpx-1.6.1-r1
libx11-1.6.7-r0
libxau-1.0.8-r3
libxcb-1.13-r2
libxdmcp-1.1.2-r5
libxext-1.3.3-r3
libxfixes-5.0.3-r2
libxml2-2.9.9-r1
libxslt-1.1.32-r0
linux-headers-4.18.13-r1
linux-pam-1.3.0-r0
musl-1.1.20-r4
musl-utils-1.1.20-r4
ncurses-libs-6.1_p20190105-r0
ncurses-terminfo-6.1_p20190105-r0
ncurses-terminfo-base-6.1_p20190105-r0
nettle-3.4.1-r0
nghttp2-libs-1.35.1-r0
opus-1.3-r0
p11-kit-0.23.14-r0
pcre2-10.32-r1
perl-5.26.3-r0
perl-archive-zip-1.64-r0
perl-b-hooks-endofscope-0.24-r0
perl-boolean-0.46-r0
perl-capture-tiny-0.48-r0
perl-cgi-4.40-r0
perl-class-data-inheritable-0.08-r0
perl-class-inspector-1.32-r0
perl-class-methodmaker-2.24-r2
perl-class-singleton-1.5-r0
perl-compress-raw-bzip2-2.084-r0
perl-compress-raw-zlib-2.084-r0
perl-cpan-meta-check-0.014-r1
perl-data-dumper-2.173-r0
perl-date-manip-6.75-r1
perl-datetime-1.44-r0
perl-datetime-format-strptime-1.74-r0
perl-datetime-locale-1.22-r0
perl-datetime-timezone-2.19-r0
perl-dbd-sqlite-1.62-r0
perl-dbi-1.642-r0
perl-devel-stacktrace-2.03-r0
perl-devel-symdump-2.18-r0
perl-digest-sha1-2.13-r9
perl-dist-checkconflicts-0.11-r1
perl-doc-5.26.3-r0
perl-encode-locale-1.05-r1
perl-eval-closure-0.14-r0
perl-exception-class-1.44-r0
perl-exporter-tiny-1.002001-r0
perl-file-listing-6.04-r1
perl-file-sharedir-1.116-r0
perl-file-sharedir-install-0.13-r0
perl-file-slurp-9999.25-r0
perl-file-temp-0.2308-r0
perl-file-which-1.22-r0
perl-getopt-long-2.50-r0
perl-html-parser-3.72-r2
perl-html-tagset-3.20-r1
perl-html-tree-5.07-r0
perl-http-cookies-6.04-r0
perl-http-daemon-6.01-r1
perl-http-date-6.02-r1
perl-http-message-6.18-r0
perl-http-negotiate-6.01-r1
perl-importer-0.025-r0
perl-io-1.25-r4
perl-io-compress-2.084-r0
perl-io-html-1.001-r1
perl-io-socket-ssl-2.060-r0
perl-io-stringy-2.111-r1
perl-ipc-run3-0.048-r0
perl-json-2.97000-r0
perl-libwww-6.36-r0
perl-lingua-en-numbers-ordinate-1.04-r1
perl-lingua-preferred-0.2.4-r1
perl-list-moreutils-0.419-r1
perl-lwp-mediatypes-6.02-r1
perl-module-build-0.4224-r0
perl-module-implementation-0.09-r1
perl-module-pluggable-5.2-r0
perl-module-runtime-0.016-r1
perl-mro-compat-0.13-r0
perl-namespace-autoclean-0.28-r0
perl-namespace-clean-0.27-r0
perl-net-http-6.09-r1
perl-net-libidn-0.12-r5
perl-net-ssleay-1.85-r4
perl-package-deprecationmanager-0.17-r0
perl-package-stash-0.37-r0
perl-package-stash-xs-0.28-r4
perl-params-classify-0.015-r0
perl-params-util-1.07-r5
perl-params-validate-1.29-r0
perl-params-validationcompiler-0.27-r0
perl-parse-recdescent-1.967015-r1
perl-path-class-0.37-r0
perl-pod-coverage-0.23-r0
perl-role-tiny-2.000006-r0
perl-scalar-list-utils-1.50-r0
perl-scope-guard-0.21-r0
perl-specio-0.42-r0
perl-sub-exporter-progressive-0.001013-r0
perl-sub-identify-0.14-r1
perl-sub-info-0.002-r0
perl-sub-install-0.928-r1
perl-sub-name-0.21-r1
perl-sub-quote-2.004000-r0
perl-sub-uplevel-0.2800-r0
perl-term-progressbar-2.22-r0
perl-term-readkey-2.37-r1
perl-term-table-0.012-r0
perl-test-exception-0.43-r0
perl-test-fatal-0.014-r1
perl-test-needs-0.002005-r1
perl-test-pod-1.52-r0
perl-test-requires-0.10-r0
perl-test-simple-1.302141-r0
perl-test-taint-1.06-r5
perl-test-warnings-0.026-r0
perl-test-without-module-0.20-r0
perl-test2-plugin-nowarnings-0.06-r0
perl-test2-suite-0.000114-r0
perl-timedate-2.30-r1
perl-try-tiny-0.30-r0
perl-unicode-string-2.09-r6
perl-uri-1.74-r0
perl-variable-magic-0.62-r0
perl-www-robotrules-6.02-r1
perl-xml-libxml-2.0132-r1
perl-xml-libxslt-1.96-r0
perl-xml-namespacesupport-1.12-r0
perl-xml-parser-2.44-r4
perl-xml-sax-0.99-r2
perl-xml-sax-base-1.09-r0
perl-xml-treepp-0.43-r1
perl-xml-twig-3.52-r1
perl-xml-writer-0.625-r2
perl-yaml-syck-1.31-r0
python2-2.7.15-r3
readline-7.0.003-r1
scanelf-1.2.3-r0
sdl2-2.0.9-r0
shadow-4.5-r0
sqlite-libs-3.26.0-r3
ssl_client-1.29.3-r10
tar-1.32-r0
tzdata-2018i-r0
uriparser-0.9.1-r0
v4l-utils-libs-1.16.2-r0
wget-1.20.1-r0
x264-20180304-r1
x264-libs-20180304-r1
x265-2.8-r1
x265-libs-2.8-r1
xvidcore-1.3.4-r1
xz-5.2.4-r0
xz-libs-5.2.4-r0
zlib-1.2.11-r1

1466
patches/config.guess vendored Normal file

File diff suppressed because it is too large Load Diff

1836
patches/config.sub vendored Normal file

File diff suppressed because it is too large Load Diff

23
patches/cpanfile Normal file
View File

@@ -0,0 +1,23 @@
requires 'perl' => '5.24.0';
# perl packages for tvheadend x86
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 'JSON::XS' ;
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' ;

View File

@@ -1,11 +0,0 @@
--- CharName.pm 2005-10-25 20:11:00.000000000 +0200
+++ CharName.pm.mod 2016-08-12 23:25:51.752348000 +0200
@@ -77,7 +77,7 @@
return join("", "HANGUL SYLLABLE ", @s)
}
}
- _init_names() unless defined %NAMES;
+ _init_names() unless %NAMES;
$NAMES{sprintf("%04X",$code)}
}

157
readme-vars.yml Normal file
View File

@@ -0,0 +1,157 @@
---
# project information
project_name: tvheadend
project_url: "https://www.tvheadend.org/"
project_logo: "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/tvheadend-big.png"
project_blurb: |
[{{ project_name|capitalize }}]({{ project_url }}) works as a proxy server: is a TV streaming server and recorder for Linux, FreeBSD and Android supporting DVB-S, DVB-S2, DVB-C, DVB-T, 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 (over-the-air DVB and ATSC including OpenTV DVB extensions, XMLTV, PyXML).
project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}"
project_blurb_optional_extras_enabled: false
# supported architectures
available_architectures:
- { arch: "{{ arch_x86_64 }}", tag: "amd64-latest"}
- { arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"}
- { arch: "{{ arch_armhf }}", tag: "arm32v7-latest"}
# development version
# development version
development_versions: true
development_versions_items:
- { tag: "latest", desc: "Current latest release." }
- { tag: "release-4.2", desc: "Latest release from 4.2 branch." }
- { tag: "stable-4.2.1", desc: "Old stable version. Will not be updated anymore!" }
- { tag: "stable-4.0.9", desc: "Old stable version. Will not be updated anymore!" }
# container parameters
common_param_env_vars_enabled: true
param_container_name: "{{ project_name }}"
param_usage_include_net: false
param_usage_include_env: true
param_env_vars:
- { env_var: "TZ", env_value: "Europe/London", desc: "Specify a timezone to use EG Europe/London." }
param_usage_include_vols: true
param_volumes:
- { vol_path: "/config", vol_host_path: "<path to data>", desc: "Where TVHeadend show store it's config files." }
- { vol_path: "/recordings", vol_host_path: "<path to recordings>", desc: "Where you want the PVR to store recordings." }
param_usage_include_ports: true
param_ports:
- { external_port: "9981", internal_port: "9981", port_desc: "WebUI" }
- { external_port: "9982", internal_port: "9982", port_desc: "HTSP server port." }
param_device_map: false
cap_add_param: false
# optional container parameters
opt_param_usage_include_env: true
opt_param_env_vars:
- { env_var: "RUN_OPTS", env_value: "<run options here>", desc: "Optionally specify additional arguments to be passed. See Additional runtime parameters." }
opt_param_usage_include_vols: false
opt_param_usage_include_ports: false
opt_param_device_map: true
opt_param_devices:
- { device_path: "/dev/dri", device_host_path: "/dev/dri", desc: "Only needed if you want to use your AMD/Intel GPU for hardware accelerated video encoding (vaapi)." }
- { device_path: "/dev/dvb", device_host_path: "/dev/drb", desc: "Only needed if you want to pass through a DVB card to the container. If you use IPTV or HDHomeRun you can leave it out." }
opt_cap_add_param: false
optional_block_1: true
optional_block_1_items:
- |
#### Host vs. Bridge
If you use IPTV, SAT>IP or HDHomeRun, you need to create the container with --net=host and remove the -p flags. This is because of a limitation in docker and multicast.
# application setup block
app_setup_block_enabled: true
app_setup_block: |
The setup depends if you run the one of the stable tags or use latest. Running latest is the easiest as it has a setup wizard.
**Stable**
First thing to do is to go to Configuration --> DVB Inputs --> TV adapters and add your LNB/switch info. Then create a new network in the Networks tab and set the correct pre-defined muxes and orbital position.
Go back to the TV adapters tab and add the newly created network under universal LNB. Go back to the Networks tab and mark the network you created earlier and press the Force Scan button. Tvheadend will now scan the muxes for services.
After the scan is done, head to the Services tab and find the services you want as channels, mark them, and press map services. They should now appear under Configuration --> Channel/EPG.
**Latest**
The first thing to do is to run the setup wizard. If it doesn't pop up at first login, you can find it in Configuration --> General --> Base and click Start Wizard. This will guide you to set up the basic parts of tvheadend.
**Configuring XMLTV grabber**
To configure the XMLTV grabber, first check if your grabber is listed in Configuration --> Channel/EPG --> EPG Grabber Modules. If it's listed, you will have to configure the grabber before enabling.
Find the path in the path field of your grabber. We will use the last part. It starts with tv_grab_. Add it after /usr/bin/ in the below command. There should be no space between Usr/bin/ and the part you added.
```
docker exec -it -u abc tvheadend /usr/bin/for_you_to_fill_out --configure
```
Now follow the onscreen progress. If you get asked about cache, just accept the default. After you have configured your grabber, you can go back and enable your grabber.
If you allready have a configuration file, you can add it in the .xmltv folder where you mapped the /config volume. If it's not created, create it.
**Comskip**
This container comes with Comskip for commercial flagging of recordings. This you have to add in the recording config of tvheadend.
Go to Configuration --> Recording. Change the view level to advanced in the top right corner, and add the below in the Post-processor command field.
```
/usr/bin/comskip --ini=/config/comskip/comskip.ini "%f"
```
Now comskip will run after each recording is finished. You will find comskip.ini in the comskip folder of your /config volume mapping. See the [Comskip](http://www.kaashoek.com/comskip/) homepage for tuning of the ini file.
**FFmpeg**
FFmpeg is installed in /usr/bin/ in case you need to use it with pipe.
**EPG XML file**
If you have EPG data in XML format from a supplier, you can drop it in the data folder of your /config volume mapping. If it doesn't exist, create it. Then choose the XML file grabber in Configuration --> Channel/EPG --> EPG Grabber Modules.
If you use WebGrab+Plus, choose the WebGrab+Plus XML file grabber. The XML file goes in the same path as above.
The xml file has to be named guide.xml.
For advanced setup of tvheadend, go to [Tvheadend][appurl]
**Picons**
We have added all the picons from [picons.xyz](https://picons.xyz/) in the folder /picons. To enable the use of these picons, add the path to the Channel icon path in Configuration --> General --> Base.
You need to enable minimum advanced view level to see the picons options.
## Additional runtime parameters
In some cases it might be necessary to start tvheadend with additional parameters, for example to enable debugging or specify webroot for reverse proxy. Be sure to have the right parameters set, as adding the wrong once might lead to the container not starting correctly.
# changelog
changelogs:
- { date: "27.03.19:", desc: "Rebase to Alpine 3.9, fix init logic to only chown once." }
- { date: "23.03.19:", desc: "Switching to new Base images, shift to arm32v7 tag." }
- { date: "17.02.19:", desc: "Bump xmltv to 5.70, ensure version tagging works by cloning tvheadend." }
- { date: "14.02.19:", desc: "Add picons path to config." }
- { date: "15.01.19:", desc: "Add pipeline logic and multi arch." }
- { date: "12.09.18:", desc: "Rebase to alpine 3.8 and use buildstage type build." }
- { date: "21.04.18:", desc: "Add JSON::XS Perl package for grab_tv_huro." }
- { date: "24.03.18:", desc: "Add dvbcsa package." }
- { date: "04.03.18:", desc: "Use sourceforge master rather than mirror for xmltv." }
- { date: "22.02.18:", desc: "Add lost libva-intel-driver." }
- { date: "21.02.18:", desc: "Fix wrong version of iconv used." }
- { date: "18.02.18:", desc: "Add vaapi support, some cleanup and dropping of deprecated options." }
- { date: "04.01.18:", desc: "Deprecate cpu_core routine lack of scaling." }
- { date: "11.12.17:", desc: "Rebase to alpine 3.7, linting fixes." }
- { date: "02.09.17:", desc: "Add codec dependencies." }
- { date: "13.07.17:", desc: "Increase uniformity across all archs." }
- { date: "08.07.17:", desc: "Update README with full path for comskip." }
- { date: "02.07.17:", desc: "Move to one branch for all 4.2 releases." }
- { date: "27.05.17:", desc: "Rebase to alpine 3.6." }
- { date: "01.05.17:", desc: "Update to tvheadend 4.2.1 stable." }
- { date: "18.04.17:", desc: "Use repo version of gnu-libiconv rather than compiling." }
- { date: "09.04.17:", desc: "Chain cpanm installs in one block and use --installdeps." }
- { date: "09.02.17:", desc: "Perl changes, add picons file to gitignore and update XMLTV to 0.5.69." }
- { date: "07.02.17:", desc: "Add variable to add additional runtime paramters." }
- { date: "05.02.17:", desc: "Update to alpine 3.5 and change dvb-apps to only compile needed libs." }
- { date: "14.11.16:", desc: "Add picons from picons.xyz to /picons folder and add info to README." }
- { date: "22.09.16:", desc: "Fix broken tv_grab_wg, libs for xmltv and update README." }
- { date: "18.09.16:", desc: "Update XMLTV to 0.5.68 and update README." }
- { date: "10.09.16:", desc: "Add layer badges to README." }
- { date: "05.09.16:", desc: "Initial Release." }

View File

@@ -34,5 +34,5 @@
"omit-title": false,
"clean-title": false,
"whitespace-in-title": false,
"windows-compatible-filenames": false
"windows-compatible-filenames": true
}

7
root/defaults/config Normal file
View File

@@ -0,0 +1,7 @@
{
"prefer_picon": true,
"chiconpath": "file:///picons/%C.png",
"piconpath": "file:///picons/",
"piconscheme": 0,
"chiconscheme": 2
}

View File

@@ -2,16 +2,40 @@
# make folders
mkdir -p \
/config/.hts/tvheadend/dvr/config \
/config/comskip
# copy config
[[ ! -e /config/.hts/tvheadend/dvr/config/7a5edfbe189851e5b1d1df19c93962f0 ]] && \
cp /defaults/7a5edfbe189851e5b1d1df19c93962f0 /config/.hts/tvheadend/dvr/config/7a5edfbe189851e5b1d1df19c93962f0
[[ ! -e /config/comskip/comskip.ini ]]
[[ ! -e /config/dvr/config ]] && \
(mkdir -p /config/dvr/config && cp /defaults/7a5edfbe189851e5b1d1df19c93962f0 /config/dvr/config/7a5edfbe189851e5b1d1df19c93962f0)
[[ ! -e /config/comskip/comskip.ini ]] && \
cp /defaults/comskip.ini.org /config/comskip/comskip.ini
[[ ! -e /config/config ]] && \
(cp /defaults/config /config/config)
# permissions
chown -R abc:abc \
/config \
/config/.hts
# function to randomly sample 10 files for their owner and only chown if not abc
chowner () {
files=(${1}/*)
for i in {1..10}; do
user=$(stat -c '%U' $(printf "%s\n" "${files[RANDOM % ${#files[@]}]}"))
if [ "${user}" != "abc" ]; then
chown -R abc:abc ${1}
break
fi
done
}
# permissions
echo "Setting permissions"
abc_dirs=( \
/config \
/picons \
)
for i in "${abc_dirs[@]}"; do
if [ "$(ls -A ${i})" ]; then
chowner ${i}
else
chown -R abc:abc ${i}
fi
done

5
root/etc/services.d/tvheadend/run Executable file → Normal file
View File

@@ -1,3 +1,6 @@
#!/usr/bin/with-contenv bash
IFS=" " read -r -a RUN_ARRAY <<< "$RUN_OPTS"
exec \
s6-setuidgid abc /usr/bin/tvheadend -C
s6-setuidgid abc /usr/bin/tvheadend -C -c /config "${RUN_ARRAY[@]}"

View File

@@ -1,12 +1,11 @@
#!/bin/bash
xmltv_file_location=/config/data/*.xml
dflag=
vflag=
cflag=
qflag=
if (( $# < 1 ))
then
cat "$xmltv_file_location"
cat /config/data/*.xml
exit 0
fi