Compare commits

..

84 Commits

Author SHA1 Message Date
LinuxServer-CI
002dda3027 Bot Updating Package Versions 2019-02-11 20:42:30 +00:00
LinuxServer-CI
3122624bf0 Bot Updating Templated Files 2019-02-11 19:24:31 +00:00
aptalca
0f717f40e4 Merge pull request #103 from linuxserver/pipeline
Remove Picons pipeline logic and multi arch
2019-02-11 14:23:46 -05:00
thelamer
548d5b2946 pulling picons from object storage during the build 2019-01-17 21:19:52 -08:00
thelamer
ef8f4a0dd0 removing picicons as they are included in the source repo and removing libva from arm variants 2019-01-16 16:14:39 -08:00
thelamer
a99f76a006 adding pipeline logic and multi arching 2019-01-16 01:51:19 -08:00
Homer
6e0fc5e84c Merge pull request #99 from iaselk/curlpipeperl
Add https for curl | perl used for cpanminus
2018-11-19 12:51:19 +00:00
axuttaja
417a24d0c2 add https for curl | perl used for cpanminus 2018-10-18 01:56:28 +03:00
aptalca
eb7c4bbefa Merge pull request #94 from linuxserver/rebase_alpine_3.8
rebase to alpine 3.8 and use buildstage type build
2018-09-12 15:30:34 -04:00
sparklyballs
c2250aa33f rebase to alpine 3.8 2018-09-12 15:48:43 +01:00
sparklyballs
80fea09e66 Update Dockerfile 2018-09-03 11:48:48 +01:00
sparklyballs
bd7ef42e33 rebase to alpine 3.8 and use buildstage type build 2018-09-02 13:33:35 +01:00
sparklyballs
c92cf86b86 rebase to alpine 3.8 and use buildstage type build 2018-09-02 13:33:03 +01:00
saarg
01c0439c90 Merge pull request #84 from linuxserver/xmltv
Add JSON::XS Perl package for grab_tv_huro
2018-04-21 21:00:12 +02:00
tobbenb
17ff5fcca4 Add JSON::XS Perl package for grab_tv_huro 2018-04-21 16:39:02 +02:00
saarg
0ddbdd0c08 Merge pull request #82 from linuxserver/dvbcsa
Add dvbcsa package
2018-03-24 11:17:24 +01:00
tobbenb
df6da18c15 Add dvbcsa package 2018-03-24 10:56:39 +01:00
sparklyballs
83f2893d22 Merge pull request #78 from linuxserver/use_sourceforge_master_xmltv
use sourceforge master rather than mirror for xmltv
2018-03-04 11:25:49 +00:00
sparklyballs
b41cde8174 copy pasta error 2018-03-04 09:31:38 +00:00
sparklyballs
a306c49d7a use sourceforge master rather than mirror for xmltv 2018-03-04 09:21:56 +00:00
sparklyballs
4af60c604c Merge pull request #77 from linuxserver/libva
Add lost libva-intel-driver
2018-02-23 13:06:49 +00:00
tobbenb
4288628824 Add lost libva-intel-driver 2018-02-22 22:01:17 +01:00
saarg
5d372c0e19 Merge pull request #74 from linuxserver/iconv
Fix wrong version of Iconv used.
2018-02-21 23:41:05 +01:00
tobbenb
6746a3fbf6 Update README and remove old patch file 2018-02-21 21:45:02 +01:00
tobbenb
0f99b9a0d5 Remove --cflags option left from testing 2018-02-21 19:02:37 +01:00
tobbenb
aa9724fdc2 Fix iconv runtime crash 2018-02-21 19:00:51 +01:00
sparklyballs
de493babb9 Update README.md 2018-02-18 21:21:40 +00:00
sparklyballs
0321b4d01a Merge pull request #73 from CvH/vaapi-support
Vaapi support
2018-02-18 21:12:07 +00:00
cvh
c0fe17d93e add vaapi to readme 2018-02-18 21:23:56 +01:00
cvh
b1a069a702 remove dvb-apps dependency
- Tvh ships now an own implementation
2018-02-18 21:23:54 +01:00
cvh
a68b5c32a4 add some build options
- disable-avahi to prevent error at buildlog
- disable-dbus_1 to prevent error at buildlog
- disable-bintray_cache to prevent known problems with that cache
- enable-trace to allow the usage of advanced debug functions (this is a devel branch)
2018-02-18 21:23:53 +01:00
cvh
880d45e6fe add png compression
- all pics at the help get compressed without viewable quality loss
2018-02-18 21:23:51 +01:00
cvh
a6a8e1b6d4 add vaapi support 2018-02-18 21:23:50 +01:00
sparklyballs
4d7daed6fc Merge pull request #67 from linuxserver/deprecate_cpu_core
deprecate cpu_core routine lack of scaling
2018-01-04 20:45:13 +00:00
sparklyballs
c15493ddbe deprecate cpu_core routine lack of scaling 2018-01-04 11:59:40 +00:00
sparklyballs
3dbea6d9a5 Merge pull request #63 from linuxserver/3.7
bump alpine 3.7, fix continuation lines, linting fixes
2017-12-11 13:52:46 +00:00
sparklyballs
d18eb4297c Update Dockerfile 2017-12-11 11:36:34 +00:00
sparklyballs
53ba6baa56 bump alpine 3.7, fix continuation lines, linting fixes 2017-12-11 11:19:37 +00:00
sparklyballs
0d9c4b8394 bump alpine 3.7, fix continuation lines, linting fixes 2017-12-11 11:16:09 +00:00
aptalca
3a054b8a57 Merge pull request #62 from linuxserver/x264_fix
add codec dependencies
2017-09-01 21:23:11 -04:00
sparklyballs
6d486e90d0 add codec dependencies 2017-09-02 00:16:44 +01:00
aptalca
4aeef6554b Merge pull request #60 from linuxserver/config_patches
increased uniformity across all archs
2017-07-13 20:27:40 -04:00
sparklyballs
2e0e6d028c increased uniformity across all archs 2017-07-13 20:17:36 +01:00
sparklyballs
d4fb416e62 correct label tags 2017-07-12 15:51:58 +01:00
sparklyballs
51f45f4d30 update of README with badges for new ci 2017-07-11 09:36:12 +01:00
sparklyballs
6a4d853235 Merge pull request #58 from linuxserver/readme-master
Update README with full path for comskip
2017-07-09 12:25:44 +01:00
tobbenb
0b1069a088 Update README with full path for comskip 2017-07-08 12:26:54 +02:00
sparklyballs
c9181d7131 Update README.md 2017-07-03 12:22:17 +01:00
j0nnymoe
9a3b13ad27 Merge pull request #56 from linuxserver/readme
Update README with new branch
2017-07-03 12:15:49 +01:00
sparklyballs
bdc1f87ac6 tidy up dockerfile edit README with changes to release branch 2017-07-03 12:05:15 +01:00
sparklyballs
e4e07121af tidy up Dockerfile and use only one install run for runtime packages 2017-07-03 11:34:18 +01:00
sparklyballs
0e8ea6063c change branch for release 4.2 2017-07-02 16:03:09 +01:00
tobbenb
9b161c87f9 Update README with new branch 2017-07-02 16:50:26 +02:00
saarg
ec6ff1a886 Merge pull request #54 from linuxserver/alpine_3.6
bump to alpine 3.6
2017-05-28 16:12:13 +02:00
sparklyballs
87d4b9c811 remove unneeded ffmpeg variable 2017-05-28 02:34:06 +01:00
sparklyballs
0d53fe87a0 add pcre2 dependency 2017-05-27 23:52:54 +01:00
sparklyballs
314f59a89f bump to alpine 3.6 2017-05-27 23:37:20 +01:00
j0nnymoe
4e44306b81 Merge pull request #53 from linuxserver/README_edits
"placeholder" image to fix broken link, add missing image version info
2017-05-11 10:46:09 +01:00
sparklyballs
68a5beb2ce "placeholder" image to fix broken link, add missing image version info 2017-05-11 07:43:55 +01:00
j0nnymoe
9ce7af875d Merge pull request #52 from linuxserver/fix_duplicates_dockerfile
fix duplicates in Dockerfile, some spacing issues
2017-05-09 15:58:20 +01:00
sparklyballs
51e21fbae9 fix duplicates in Dockerfile, some spacing issues 2017-05-09 11:48:56 +01:00
sparklyballs
97ed2af733 use readme from 4.2.1 branch 2017-05-01 14:01:38 +01: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
15 changed files with 5359 additions and 219 deletions

3
.gitignore vendored
View File

@@ -41,3 +41,6 @@ $RECYCLE.BIN/
Network Trash Folder
Temporary Items
.apdisk
# Picons file
picons.tar.bz2

View File

@@ -1,29 +1,27 @@
FROM lsiobase/alpine:3.5
MAINTAINER saarg
FROM lsiobase/alpine:3.8 as buildstage
############## build stage ##############
# package version
# package versions
ARG ARGTABLE_VER="2.13"
ARG UNICODE_VER="2.09"
ARG XMLTV_VER="0.5.68"
ARG XMLTV_VER="0.5.69"
# set version label
ARG BUILD_DATE
ARG VERSION
LABEL build_version="Build-date:- ${BUILD_DATE}"
# Environment settings
# environment settings
ARG TZ="Europe/Oslo"
ARG TVHEADEND_COMMIT
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 \
@@ -31,44 +29,41 @@ RUN \
gcc \
gettext-dev \
git \
libhdhomerun-dev \
gzip \
jq \
libcurl \
libdvbcsa-dev \
libgcrypt-dev \
libhdhomerun-dev \
libtool \
libva-dev \
libvpx-dev \
libxml2-dev \
libxslt-dev \
make \
mercurial \
openssl-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 \
make \
openssl-dev \
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 \
@@ -76,148 +71,152 @@ RUN \
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://nl.alpinelinux.org/alpine/edge/testing \
gnu-libiconv-dev
# build libiconv
mkdir -p \
/tmp/iconv-src && \
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 https://cpanmin.us | perl - App::cpanminus && \
cpanm --installdeps /tmp/patches
RUN \
echo "**** compile XMLTV ****" && \
curl -o \
/tmp/iconv.tar.gz -L \
ftp://www.mirrorservice.org/sites/ftp.gnu.org/gnu/libiconv/libiconv-1.14.tar.gz && \
tar xf /tmp/iconv.tar.gz -C \
/tmp/iconv-src --strip-components=1 && \
cd /tmp/iconv-src && \
./configure \
--prefix=/usr/local && \
patch -p1 -i \
/tmp/patches/libiconv-1-fixes.patch && \
make && \
make install && \
libtool --finish /usr/local/lib && \
# install perl modules
curl -L http://cpanmin.us | perl - App::cpanminus && \
cpanm Date::Language && \
cpanm DateTime::Format::ISO8601 && \
cpanm DateTime::Format::Strptime && \
cpanm HTML::Entities && \
cpanm HTML::TableExtract && \
cpanm HTML::TreeBuilder && \
cpanm HTTP::Cache::Transparent && \
cpanm inc && \
cpanm IO::Scalar && \
cpanm IO::Socket::SSL && \
cpanm JSON::PP && \
cpanm Lingua::EN::Numbers::Ordinate && \
cpanm Lingua::Preferred && \
cpanm List::MoreUtils && \
cpanm LWP::Simple && \
cpanm LWP::UserAgent && \
cpanm PerlIO::gzip && \
cpanm SOAP::Lite && \
cpanm Storable && \
cpanm Term::ProgressBar && \
cpanm Unicode::UTF8simple && \
cpanm version && \
cpanm WWW::Mechanize && \
cpanm XML::DOM && \
cpanm XML::LibXML && \
cpanm XML::LibXSLT && \
cpanm XML::TreePP && \
cpanm XML::Twig && \
cpanm XML::Writer && \
# 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 && \
/tmp/xmtltv-src.tar.bz2 -L \
"https://sourceforge.net/projects/xmltv/files/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}" && \
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 && \
make test && \
make install && \
make DESTDIR=/tmp/xmltv-build install
# build dvb-apps
hg clone http://linuxtv.org/hg/dvb-apps /tmp/dvb-apps && \
cd /tmp/dvb-apps && \
make -C lib && \
make -C lib install && \
# build tvheadend
git clone https://github.com/tvheadend/tvheadend.git /tmp/tvheadend && \
RUN \
echo "**** compile tvheadend ****" && \
if [ -z ${TVHEADEND_COMMIT+x} ]; then \
TVHEADEND_COMMIT=$(curl -sX GET https://api.github.com/repos/tvheadend/tvheadend/commits/master \
| jq -r '. | .sha'); \
fi && \
curl -o \
/tmp/tvheadend.tar.gz -L \
"https://github.com/tvheadend/tvheadend/archive/${TVHEADEND_COMMIT}.tar.gz" && \
mkdir -p \
/tmp/tvheadend && \
tar xf \
/tmp/tvheadend.tar.gz -C \
/tmp/tvheadend/ --strip-components=1 && \
cd /tmp/tvheadend && \
./configure \
`#Encoding` \
--disable-ffmpeg_static \
--disable-hdhomerun_static \
--disable-libfdkaac_static \
--disable-libmfx_static \
--disable-libtheora_static \
--disable-libopus_static \
--disable-libvorbis_static \
--disable-libvpx_static \
--disable-libx264_static \
--disable-libx265_static \
--disable-libfdkaac \
--enable-libopus \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
\
`#Options` \
--disable-avahi \
--disable-dbus_1 \
--disable-bintray_cache \
--disable-hdhomerun_static \
--enable-hdhomerun_client \
--enable-libav \
--enable-pngquant \
--enable-trace \
--enable-vaapi \
--infodir=/usr/share/info \
--localstatedir=/var \
--mandir=/usr/share/man \
--prefix=/usr \
--sysconfdir=/config && \
make && \
make install && \
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 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 && \
@@ -225,29 +224,120 @@ RUN \
--bindir=/usr/bin \
--sysconfdir=/config/comskip && \
make && \
make install && \
make DESTDIR=/tmp/comskip-build install
# install runtime packages
############## runtime stage ##############
FROM lsiobase/alpine:3.8
# 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.0 \
libcurl \
libdvbcsa \
libhdhomerun-libs \
libssl1.0 \
libva \
libva-intel-driver \
libvpx \
libxml2 \
libxslt && \
libxslt \
linux-headers \
openssl \
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://nl.alpinelinux.org/alpine/edge/testing \
gnu-libiconv && \
echo "**** Add Picons ****" && \
mkdir -p /picons && \
curl -o \
/picons/picons.tar.bz2 -L \
https://lsio-ci.ams3.digitaloceanspaces.com/picons/picons.tar.bz2
# cleanup
apk del --purge \
build-dependencies && \
rm -rf \
/config/.cpanm \
/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/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/ /
# add picons
ADD picons.tar.bz2 /picons
# ports and volumes
EXPOSE 9981 9982
VOLUME /config /recordings

342
Dockerfile.aarch64 Normal file
View File

@@ -0,0 +1,342 @@
FROM lsiobase/alpine.arm64:3.8 as buildstage
############## build stage ##############
# package versions
ARG ARGTABLE_VER="2.13"
ARG XMLTV_VER="0.5.69"
# environment settings
ARG TZ="Europe/Oslo"
ARG TVHEADEND_COMMIT
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 \
libcurl \
libdvbcsa-dev \
libgcrypt-dev \
libhdhomerun-dev \
libtool \
libvpx-dev \
libxml2-dev \
libxslt-dev \
linux-headers \
make \
openssl-dev \
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://nl.alpinelinux.org/alpine/edge/testing \
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 https://cpanmin.us | perl - App::cpanminus && \
cpanm --installdeps /tmp/patches
RUN \
echo "**** compile XMLTV ****" && \
curl -o \
/tmp/xmtltv-src.tar.bz2 -L \
"https://sourceforge.net/projects/xmltv/files/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}" && \
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 && \
make test && \
make DESTDIR=/tmp/xmltv-build install
RUN \
echo "**** compile tvheadend ****" && \
if [ -z ${TVHEADEND_COMMIT+x} ]; then \
TVHEADEND_COMMIT=$(curl -sX GET https://api.github.com/repos/tvheadend/tvheadend/commits/master \
| jq -r '. | .sha'); \
fi && \
curl -o \
/tmp/tvheadend.tar.gz -L \
"https://github.com/tvheadend/tvheadend/archive/${TVHEADEND_COMMIT}.tar.gz" && \
mkdir -p \
/tmp/tvheadend && \
tar xf \
/tmp/tvheadend.tar.gz -C \
/tmp/tvheadend/ --strip-components=1 && \
cd /tmp/tvheadend && \
./configure \
`#Encoding` \
--disable-ffmpeg_static \
--disable-libfdkaac_static \
--disable-libtheora_static \
--disable-libopus_static \
--disable-libvorbis_static \
--disable-libvpx_static \
--disable-libx264_static \
--disable-libx265_static \
--disable-libfdkaac \
--enable-libopus \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
\
`#Options` \
--disable-avahi \
--disable-dbus_1 \
--disable-bintray_cache \
--disable-hdhomerun_static \
--enable-hdhomerun_client \
--enable-libav \
--enable-pngquant \
--enable-trace \
--infodir=/usr/share/info \
--localstatedir=/var \
--mandir=/usr/share/man \
--prefix=/usr \
--sysconfdir=/config && \
make && \
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 && \
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 && \
make DESTDIR=/tmp/comskip-build install
############## runtime stage ##############
FROM lsiobase/alpine.arm64:3.8
# Add qemu to build on x86_64 systems
COPY qemu-aarch64-static /usr/bin
# 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.0 \
libcurl \
libdvbcsa \
libhdhomerun-libs \
libssl1.0 \
libvpx \
libxml2 \
libxslt \
linux-headers \
openssl \
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://nl.alpinelinux.org/alpine/edge/testing \
gnu-libiconv && \
echo "**** Add Picons ****" && \
mkdir -p /picons && \
curl -o \
/picons/picons.tar.bz2 -L \
https://lsio-ci.ams3.digitaloceanspaces.com/picons/picons.tar.bz2
# 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/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

342
Dockerfile.armhf Normal file
View File

@@ -0,0 +1,342 @@
FROM lsiobase/alpine.armhf:3.8 as buildstage
############## build stage ##############
# package versions
ARG ARGTABLE_VER="2.13"
ARG XMLTV_VER="0.5.69"
# environment settings
ARG TZ="Europe/Oslo"
ARG TVHEADEND_COMMIT
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 \
libcurl \
libdvbcsa-dev \
libgcrypt-dev \
libhdhomerun-dev \
libtool \
libvpx-dev \
libxml2-dev \
libxslt-dev \
linux-headers \
make \
openssl-dev \
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://nl.alpinelinux.org/alpine/edge/testing \
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 https://cpanmin.us | perl - App::cpanminus && \
cpanm --installdeps /tmp/patches
RUN \
echo "**** compile XMLTV ****" && \
curl -o \
/tmp/xmtltv-src.tar.bz2 -L \
"https://sourceforge.net/projects/xmltv/files/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}" && \
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 && \
make test && \
make DESTDIR=/tmp/xmltv-build install
RUN \
echo "**** compile tvheadend ****" && \
if [ -z ${TVHEADEND_COMMIT+x} ]; then \
TVHEADEND_COMMIT=$(curl -sX GET https://api.github.com/repos/tvheadend/tvheadend/commits/master \
| jq -r '. | .sha'); \
fi && \
curl -o \
/tmp/tvheadend.tar.gz -L \
"https://github.com/tvheadend/tvheadend/archive/${TVHEADEND_COMMIT}.tar.gz" && \
mkdir -p \
/tmp/tvheadend && \
tar xf \
/tmp/tvheadend.tar.gz -C \
/tmp/tvheadend/ --strip-components=1 && \
cd /tmp/tvheadend && \
./configure \
`#Encoding` \
--disable-ffmpeg_static \
--disable-libfdkaac_static \
--disable-libtheora_static \
--disable-libopus_static \
--disable-libvorbis_static \
--disable-libvpx_static \
--disable-libx264_static \
--disable-libx265_static \
--disable-libfdkaac \
--enable-libopus \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
\
`#Options` \
--disable-avahi \
--disable-dbus_1 \
--disable-bintray_cache \
--disable-hdhomerun_static \
--enable-hdhomerun_client \
--enable-libav \
--enable-pngquant \
--enable-trace \
--infodir=/usr/share/info \
--localstatedir=/var \
--mandir=/usr/share/man \
--prefix=/usr \
--sysconfdir=/config && \
make && \
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 && \
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 && \
make DESTDIR=/tmp/comskip-build install
############## runtime stage ##############
FROM lsiobase/alpine.armhf:3.8
# Add qemu to build on x86_64 systems
COPY qemu-arm-static /usr/bin
# 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.0 \
libcurl \
libdvbcsa \
libhdhomerun-libs \
libssl1.0 \
libvpx \
libxml2 \
libxslt \
linux-headers \
openssl \
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://nl.alpinelinux.org/alpine/edge/testing \
gnu-libiconv && \
echo "**** Add Picons ****" && \
mkdir -p /picons && \
curl -o \
/picons/picons.tar.bz2 -L \
https://lsio-ci.ams3.digitaloceanspaces.com/picons/picons.tar.bz2
# 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/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

612
Jenkinsfile vendored Normal file
View File

@@ -0,0 +1,612 @@
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 = 'master'
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/latest | jq -r '. | .tag_name' ''',
returnStdout: true).trim()
env.LS_RELEASE_NOTES = sh(
script: '''git log -1 --pretty=%B | 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 master build use live docker endpoints
stage("Set ENV live build"){
when {
branch "master"
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 + '|arm32v6-' + 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 "master"}
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 + '|arm32v6-' + 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 + '|arm32v6-' + 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/'
}
}
}
// Use helper containers to render templated files
stage('Update-Templates') {
when {
branch "master"
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=master -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=master -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 master
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 "master"
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 -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 -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 -f Dockerfile.armhf -t ${IMAGE}:arm32v6-${META_TAG} \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh "docker tag ${IMAGE}:arm32v6-${META_TAG} lsiodev/buildcache:arm32v6-${COMMIT_SHA}-${BUILD_NUMBER}"
sh "docker push lsiodev/buildcache:arm32v6-${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 -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}"
}
}
}
}
}
// Take the image we just built and dump package versions for comparison
stage('Update-packages') {
when {
branch "master"
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 > packages && \
apk info -v > versions && \
paste -d " " packages versions > /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 > /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 master
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 "master"
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 "master"
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:arm32v6-${COMMIT_SHA}-${BUILD_NUMBER}
docker pull lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
docker tag lsiodev/buildcache:arm32v6-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v6-${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}:latest"
sh "docker push ${IMAGE}:latest"
sh "docker push ${IMAGE}:${META_TAG}"
}
}
}
// 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:arm32v6-${COMMIT_SHA}-${BUILD_NUMBER}
docker pull lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
docker tag lsiodev/buildcache:arm32v6-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v6-${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-latest"
sh "docker tag ${IMAGE}:arm32v6-${META_TAG} ${IMAGE}:arm32v6-latest"
sh "docker tag ${IMAGE}:arm64v8-${META_TAG} ${IMAGE}:arm64v8-latest"
sh "docker push ${IMAGE}:amd64-${META_TAG}"
sh "docker push ${IMAGE}:arm32v6-${META_TAG}"
sh "docker push ${IMAGE}:arm64v8-${META_TAG}"
sh "docker push ${IMAGE}:amd64-latest"
sh "docker push ${IMAGE}:arm32v6-latest"
sh "docker push ${IMAGE}:arm64v8-latest"
sh "docker manifest push --purge ${IMAGE}:latest || :"
sh "docker manifest create ${IMAGE}:latest ${IMAGE}:amd64-latest ${IMAGE}:arm32v6-latest ${IMAGE}:arm64v8-latest"
sh "docker manifest annotate ${IMAGE}:latest ${IMAGE}:arm32v6-latest --os linux --arch arm"
sh "docker manifest annotate ${IMAGE}:latest ${IMAGE}:arm64v8-latest --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}:arm32v6-${META_TAG} ${IMAGE}:arm64v8-${META_TAG}"
sh "docker manifest annotate ${IMAGE}:${META_TAG} ${IMAGE}:arm32v6-${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}:latest"
sh "docker manifest push --purge ${IMAGE}:${META_TAG}"
}
}
}
// If this is a public release tag it in the LS Github
stage('Github-Tag-Push-Release') {
when {
branch "master"
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 master",\
"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": "master",\
"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": false}' >> 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' '''
}
}
}
}
/* ######################
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**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**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} '''
}
}
}
}
}

View File

@@ -2,6 +2,8 @@
[forumurl]: https://forum.linuxserver.io
[ircurl]: https://www.linuxserver.io/irc/
[podcasturl]: https://www.linuxserver.io/podcast/
[appurl]: https://www.tvheadend.org/
[hub]: https://hub.docker.com/r/linuxserver/tvheadend/
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)][linuxserverurl]
@@ -11,16 +13,13 @@ The [LinuxServer.io][linuxserverurl] team brings you another container release f
* [Podcast][podcasturl] covers everything to do with getting the most from your Linux Server plus a focus on all things Docker and containerisation!
# linuxserver/tvheadend
[![](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)](http://microbadger.com/images/linuxserver/tvheadend "Get your own image badge on microbadger.com")[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/tvheadend.svg)][hub][![Docker Stars](https://img.shields.io/docker/stars/linuxserver/tvheadend.svg)][hub][![Build Status](http://jenkins.linuxserver.io:8080/buildStatus/icon?job=Dockers/LinuxServer.io/linuxserver-tvheadend)](http://jenkins.linuxserver.io:8080/job/Dockers/job/LinuxServer.io/job/linuxserver-tvheadend/)
[hub]: https://hub.docker.com/r/linuxserver/tvheadend/
[![](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 image badge on microbadger.com")[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/tvheadend.svg)][hub][![Docker Stars](https://img.shields.io/docker/stars/linuxserver/tvheadend.svg)][hub][![Build Status](https://ci.linuxserver.io/buildStatus/icon?job=Docker-Builders/x86-64/x86-64-tvheadend)](https://ci.linuxserver.io/job/Docker-Builders/job/x86-64/job/x86-64-tvheadend/)
[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).
[![tvheadend](https://s31.postimg.io/8urk8vdu3/logobig.png)][tvheadendurl]
[tvheadendurl]: https://www.tvheadend.org/
[![tvheadend](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/tvheadend-big.png)][appurl]
## Usage
@@ -31,21 +30,25 @@ docker create \
-v <path to data>:/config \
-v <path to recordings>:/recordings \
-e PGID=<gid> -e PUID=<uid> \
-e RUN_OPTS=<parameter> \
-p 9981:9981 \
-p 9982:9982 \
--device=/dev/dvb
--device=/dev/dvb \
--device=/dev/dri
linuxserver/tvheadend
```
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.
The --device=/dev/dri is only needed if you want to use your AMD/Intel GPU for hardware accelerated video encoding (vaapi).
You can choose between ,using tags, latest (default, and no tag required or a specific release branch of tvheadend.
You can choose between ,using tags, latest (default, and no tag required or a specific stable version of tvheadend.
Add one of the tags, if required, to the linuxserver/tvheadend line of the run/create command in the following format, linuxserver/tvheadend:stable-4.0.9
Add one of the tags, if required, to the linuxserver/tvheadend line of the run/create command in the following format, linuxserver/tvheadend:release-4.2
#### Tags
+ **stable-4.0.9** : latest stable version.
+ **release-4.2** : latest release from 4.2 branch. Freshly built every friday night uk time.
+ **stable-4.2.1** : old stable version. Will not be updated anymore!
+ **stable-4.0.9** : old stable version. Will not be updated anymore!
#### Host vs. Bridge
@@ -53,7 +56,7 @@ If you use IPTV, SAT>IP or HDHomeRun, you need to create the container with --ne
## Parameters
`The parameters are split into two halves, separated by a colon, the left hand side representing the host and the right the container side.
`The parameters are split into two halves, separated by a colon, the left hand side representing the host and the right the container side.
For example with a port -p external:internal - what this shows is the port mapping from internal to external of the container.
So -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080
http://192.168.x.x:8080 would show you what's running INSIDE the container on port 80.`
@@ -64,7 +67,9 @@ http://192.168.x.x:8080 would show you what's running INSIDE the container on po
* `-v /recordings` - Where you want the PVR to store recordings
* `-e PGID` for GroupID - see below for explanation
* `-e PUID` for UserID - see below for explanation
* `-e RUN_OPTS` additional runtime parameters - see below for explanation
* `--device=/dev/dvb` - for passing through DVB-cards
* `--device=/dev/dri` - for passing through GPU
* `--net=host` - for IPTV, SAT>IP and HDHomeRun
* `-e TZ` - for timezone information *eg Europe/London, etc*
@@ -81,6 +86,11 @@ In this instance `PUID=1001` and `PGID=1001`. To find yours use `id user` as bel
uid=1001(dockeruser) gid=1001(dockergroup) groups=1001(dockergroup)
```
## 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.
## Setting up the application
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.
@@ -99,7 +109,7 @@ The first thing to do is to run the setup wizard. If it doesn't pop up at first
**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.
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
@@ -114,7 +124,7 @@ This container comes with Comskip for commercial flagging of recordings. This yo
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 --ini=/config/comskip/comskip.ini "%f"
/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.
@@ -130,7 +140,7 @@ If you have EPG data in XML format from a supplier, you can drop it in the data
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][tvheadendurl]
For advanced setup of tvheadend, go to [Tvheadend][appurl]
**Picons**
@@ -142,11 +152,39 @@ You need to enable minimum advanced view level to see the picons options.
* 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`
## Versions
+ **05.02.2017:** Update to alpine 3.5 and change dvb-apps to only compile needed libs.
+ **14.11.2016:** Add picons from picons.xyz to /picons folder and add info to README.
+ **22.09.2016:** Fix broken tv_grab_wg, libs for xmltv and update README.
+ **18.09.2016:** Update XMLTV to 0.5.68 and update README.
+ **10.09.2016:** Add layer badges to README.
+ **05.09.2016:** Initial release.
+ **15.01.19:** Add pipeline and multi arch logic.
+ **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.

29
jenkins-vars.yml Normal file
View File

@@ -0,0 +1,29 @@
---
# jenkins variables
project_name: docker-tvheadend
external_type: github_commit
release_type: stable
release_tag: latest
ls_branch: master
repo_vars:
- EXT_GIT_BRANCH = 'master'
- 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=''

216
package_versions.txt Executable file
View File

@@ -0,0 +1,216 @@
musl musl-1.1.19-r10
busybox busybox-1.28.4-r3
alpine-baselayout alpine-baselayout-3.1.0-r0
alpine-keys alpine-keys-2.1-r1
libressl2.7-libcrypto libressl2.7-libcrypto-2.7.4-r0
libressl2.7-libssl libressl2.7-libssl-2.7.4-r0
libressl2.7-libtls libressl2.7-libtls-2.7.4-r0
ssl_client ssl_client-1.28.4-r3
zlib zlib-1.2.11-r1
apk-tools apk-tools-2.10.1-r0
scanelf scanelf-1.2.3-r0
musl-utils musl-utils-1.1.19-r10
libc-utils libc-utils-0.7.1-r0
xz-libs xz-libs-5.2.4-r0
xz xz-5.2.4-r0
ca-certificates ca-certificates-20171114-r3
ncurses-terminfo-base ncurses-terminfo-base-6.1_p20180818-r1
ncurses-terminfo ncurses-terminfo-6.1_p20180818-r1
ncurses-libs ncurses-libs-6.1_p20180818-r1
readline readline-7.0.003-r0
bash bash-4.4.19-r1
libattr libattr-2.4.47-r7
libacl libacl-2.2.52-r5
coreutils coreutils-8.29-r2
linux-pam linux-pam-1.3.0-r0
shadow shadow-4.5-r0
tzdata tzdata-2018f-r0
bsd-compat-headers bsd-compat-headers-0.7.1-r0
bzip2 bzip2-1.0.6-r6
nghttp2-libs nghttp2-libs-1.32.0-r0
libssh2 libssh2-1.8.0-r3
libcurl libcurl-7.61.1-r1
curl curl-7.61.1-r1
sdl2 sdl2-2.0.8-r1
libxau libxau-1.0.8-r2
libbsd libbsd-0.8.6-r2
libxdmcp libxdmcp-1.1.2-r4
libxcb libxcb-1.13-r2
libx11 libx11-1.6.6-r0
alsa-lib alsa-lib-1.1.6-r0
expat expat-2.2.5-r0
libbz2 libbz2-1.0.6-r6
libpng libpng-1.6.34-r1
freetype freetype-2.9.1-r1
fontconfig fontconfig-2.12.6-r1
fribidi fribidi-1.0.2-r0
libass libass-0.13.7-r1
gmp gmp-6.1.2-r1
nettle nettle-3.4-r1
libffi libffi-3.2.1-r4
p11-kit p11-kit-0.23.10-r0
libtasn1 libtasn1-4.13-r0
libunistring libunistring-0.9.7-r0
gnutls gnutls-3.6.2-r0
lame lame-3.100-r0
opus opus-1.2.1-r1
librtmp librtmp-2.4_git20160909-r5
libogg libogg-1.3.3-r2
libtheora libtheora-1.1.1-r13
libjpeg-turbo libjpeg-turbo-1.5.3-r4
v4l-utils-libs v4l-utils-libs-1.12.6-r1
libxext libxext-1.3.3-r2
libxfixes libxfixes-5.0.3-r1
libpciaccess libpciaccess-0.13.5-r1
libdrm libdrm-2.4.92-r0
libva libva-2.1.0-r1
libvdpau libvdpau-1.1.1-r1
libvorbis libvorbis-1.3.6-r2
libvpx libvpx-1.6.1-r0
x264-libs x264-libs-20180304-r1
libgcc libgcc-6.4.0-r9
libstdc++ libstdc++-6.4.0-r9
x265 x265-2.7-r1
xvidcore xvidcore-1.3.4-r1
ffmpeg-libs ffmpeg-libs-3.4.4-r1
ffmpeg ffmpeg-3.4.4-r1
gzip gzip-1.9-r0
libcrypto1.0 libcrypto1.0-1.0.2q-r0
libdvbcsa libdvbcsa-1.1.0-r1
libhdhomerun-libs libhdhomerun-libs-20161117-r1
libssl1.0 libssl1.0-1.0.2q-r0
libva-intel-driver libva-intel-driver-2.1.0-r0
libxml2 libxml2-2.9.8-r1
libgpg-error libgpg-error-1.30-r0
libgcrypt libgcrypt-1.8.3-r0
libxslt libxslt-1.1.32-r0
linux-headers linux-headers-4.4.6-r2
openssl openssl-1.0.2q-r0
pcre2 pcre2-10.31-r0
perl perl-5.26.3-r0
perl-archive-zip perl-archive-zip-1.60-r0
perl-boolean perl-boolean-0.46-r0
perl-capture-tiny perl-capture-tiny-0.48-r0
perl-html-tagset perl-html-tagset-3.20-r1
perl-html-parser perl-html-parser-3.72-r2
perl-cgi perl-cgi-4.38-r0
perl-compress-raw-zlib perl-compress-raw-zlib-2.081-r0
perl-data-dumper perl-data-dumper-2.161-r2
perl-yaml-syck perl-yaml-syck-1.30-r1
perl-date-manip perl-date-manip-6.70-r0
perl-cpan-meta-check perl-cpan-meta-check-0.014-r1
perl-exporter-tiny perl-exporter-tiny-1.000000-r0
perl-list-moreutils perl-list-moreutils-0.419-r1
perl-module-runtime perl-module-runtime-0.016-r0
perl-dist-checkconflicts perl-dist-checkconflicts-0.11-r1
perl-class-inspector perl-class-inspector-1.28-r1
perl-file-sharedir perl-file-sharedir-1.106-r0
perl-file-sharedir-install perl-file-sharedir-install-0.11-r0
perl-sub-exporter-progressive perl-sub-exporter-progressive-0.001013-r0
perl-devel-symdump perl-devel-symdump-2.18-r0
perl-test-pod perl-test-pod-1.52-r0
perl-pod-coverage perl-pod-coverage-0.23-r0
perl-try-tiny perl-try-tiny-0.30-r0
perl-test-taint perl-test-taint-1.06-r5
perl-module-implementation perl-module-implementation-0.09-r1
perl-variable-magic perl-variable-magic-0.62-r0
perl-b-hooks-endofscope perl-b-hooks-endofscope-0.24-r0
perl-package-stash-xs perl-package-stash-xs-0.28-r4
perl-package-stash perl-package-stash-0.37-r0
perl-sub-name perl-sub-name-0.21-r1
perl-sub-identify perl-sub-identify-0.14-r1
perl-namespace-clean perl-namespace-clean-0.27-r0
perl-namespace-autoclean perl-namespace-autoclean-0.28-r0
perl-params-validate perl-params-validate-1.28-r0
perl-test-needs perl-test-needs-0.002005-r1
perl-devel-stacktrace perl-devel-stacktrace-2.02-r0
perl-eval-closure perl-eval-closure-0.14-r0
perl-mro-compat perl-mro-compat-0.13-r0
perl-role-tiny perl-role-tiny-2.000005-r0
perl-test-fatal perl-test-fatal-0.014-r1
perl-sub-quote perl-sub-quote-2.004000-r0
perl-specio perl-specio-0.42-r0
perl-test-simple perl-test-simple-1.302136-r0
perl-importer perl-importer-0.025-r0
perl-term-table perl-term-table-0.012-r0
perl-sub-info perl-sub-info-0.002-r0
perl-scope-guard perl-scope-guard-0.21-r0
perl-module-pluggable perl-module-pluggable-5.2-r0
perl-test2-suite perl-test2-suite-0.000114-r0
perl-test-without-module perl-test-without-module-0.20-r0
perl-class-data-inheritable perl-class-data-inheritable-0.08-r0
perl-exception-class perl-exception-class-1.44-r0
perl-ipc-run3 perl-ipc-run3-0.048-r0
perl-test2-plugin-nowarnings perl-test2-plugin-nowarnings-0.06-r0
perl-params-validationcompiler perl-params-validationcompiler-0.24-r1
perl-scalar-list-utils perl-scalar-list-utils-1.50-r0
perl-test-requires perl-test-requires-0.10-r0
perl-test-warnings perl-test-warnings-0.026-r0
perl-datetime-locale perl-datetime-locale-1.18-r0
perl-class-singleton perl-class-singleton-1.5-r0
perl-datetime-timezone perl-datetime-timezone-2.19-r0
perl-datetime perl-datetime-1.44-r0
perl-sub-install perl-sub-install-0.928-r1
perl-params-util perl-params-util-1.07-r5
perl-package-deprecationmanager perl-package-deprecationmanager-0.17-r0
perl-datetime-format-strptime perl-datetime-format-strptime-1.74-r0
perl-dbi perl-dbi-1.641-r0
perl-dbd-sqlite perl-dbd-sqlite-1.58-r0
perl-digest-sha1 perl-digest-sha1-2.13-r9
perl-doc perl-doc-5.26.3-r0
perl-file-slurp perl-file-slurp-9999.19-r0
perl-file-temp perl-file-temp-0.2304-r0
perl-file-which perl-file-which-1.22-r0
perl-getopt-long perl-getopt-long-2.50-r0
perl-html-tree perl-html-tree-5.07-r0
perl-http-date perl-http-date-6.02-r1
perl-lwp-mediatypes perl-lwp-mediatypes-6.02-r1
perl-encode-locale perl-encode-locale-1.05-r1
perl-uri perl-uri-1.72-r0
perl-io-html perl-io-html-1.001-r1
perl-http-message perl-http-message-6.15-r0
perl-http-cookies perl-http-cookies-6.04-r0
perl-io perl-io-1.25-r4
perl-compress-raw-bzip2 perl-compress-raw-bzip2-2.081-r0
perl-io-compress perl-io-compress-2.081-r0
libidn libidn-1.34-r1
perl-net-libidn perl-net-libidn-0.12-r4
perl-net-ssleay perl-net-ssleay-1.85-r1
perl-io-socket-ssl perl-io-socket-ssl-2.048-r1
perl-io-stringy perl-io-stringy-2.111-r1
perl-json perl-json-2.97000-r0
perl-net-http perl-net-http-6.09-r1
perl-http-daemon perl-http-daemon-6.01-r1
perl-file-listing perl-file-listing-6.04-r1
perl-www-robotrules perl-www-robotrules-6.02-r1
perl-http-negotiate perl-http-negotiate-6.01-r1
perl-libwww perl-libwww-6.34-r0
perl-lingua-en-numbers-ordinate perl-lingua-en-numbers-ordinate-1.04-r1
perl-lingua-preferred perl-lingua-preferred-0.2.4-r1
perl-module-build perl-module-build-0.4224-r0
perl-parse-recdescent perl-parse-recdescent-1.967015-r1
perl-path-class perl-path-class-0.37-r0
perl-class-methodmaker perl-class-methodmaker-2.24-r2
perl-term-readkey perl-term-readkey-2.37-r1
perl-sub-uplevel perl-sub-uplevel-0.2800-r0
perl-test-exception perl-test-exception-0.43-r0
perl-term-progressbar perl-term-progressbar-2.22-r0
perl-timedate perl-timedate-2.30-r1
perl-unicode-string perl-unicode-string-2.09-r6
perl-xml-sax-base perl-xml-sax-base-1.09-r0
perl-xml-namespacesupport perl-xml-namespacesupport-1.12-r0
perl-xml-sax perl-xml-sax-0.99-r2
perl-xml-libxml perl-xml-libxml-2.0132-r1
perl-xml-libxslt perl-xml-libxslt-1.96-r0
perl-xml-parser perl-xml-parser-2.44-r4
perl-xml-treepp perl-xml-treepp-0.43-r1
perl-xml-twig perl-xml-twig-3.52-r1
perl-xml-writer perl-xml-writer-0.625-r2
gdbm gdbm-1.13-r1
sqlite-libs sqlite-libs-3.25.3-r0
python2 python2-2.7.15-r1
tar tar-1.31-r0
uriparser uriparser-0.8.5-r0
wget wget-1.20.1-r0
x264 x264-20180304-r1
gnu-libiconv gnu-libiconv-1.15-r2

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,46 +0,0 @@
This file is part of MXE.
See index.html for further information.
Contains ad hoc patches for cross building.
From 47345f5dcfb91da8afed7c4e6c29faa2056db447 Mon Sep 17 00:00:00 2001
From: MXE
Date: Fri, 7 Jun 2013 17:44:24 +1000
Subject: [PATCH] remove gets since c++11 removed it
https://lists.gnu.org/archive/html/bug-gnulib/2012-03/msg00186.html
diff --git a/srclib/stdio.in.h b/srclib/stdio.in.h
index 473c84c..dfb59eb 100644
--- a/srclib/stdio.in.h
+++ b/srclib/stdio.in.h
@@ -679,22 +679,11 @@ _GL_WARN_ON_USE (getline, "getline is unportable - "
# endif
#endif
-#if @GNULIB_GETS@
-# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
-# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-# undef gets
-# define gets rpl_gets
-# endif
-_GL_FUNCDECL_RPL (gets, char *, (char *s) _GL_ARG_NONNULL ((1)));
-_GL_CXXALIAS_RPL (gets, char *, (char *s));
-# else
-_GL_CXXALIAS_SYS (gets, char *, (char *s));
-# undef gets
-# endif
-_GL_CXXALIASWARN (gets);
/* It is very rare that the developer ever has full control of stdin,
- so any use of gets warrants an unconditional warning. Assume it is
- always declared, since it is required by C89. */
+ so any use of gets warrants an unconditional warning; besides, C11
+ removed it. */
+#undef gets
+#if HAVE_RAW_DECL_GETS
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
#endif
--
1.8.2.3

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)}
}

197
readme-vars.yml Normal file
View File

@@ -0,0 +1,197 @@
---
# project information
project_name: tvheadend
full_custom_readme: |
{% raw -%}
[linuxserverurl]: https://linuxserver.io
[forumurl]: https://forum.linuxserver.io
[ircurl]: https://www.linuxserver.io/irc/
[podcasturl]: https://www.linuxserver.io/podcast/
[appurl]: https://www.tvheadend.org/
[hub]: https://hub.docker.com/r/linuxserver/tvheadend/
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)][linuxserverurl]
The [LinuxServer.io][linuxserverurl] team brings you another container release featuring easy user mapping and community support. Find us for support at:
* [forum.linuxserver.io][forumurl]
* [IRC][ircurl] on freenode at `#linuxserver.io`
* [Podcast][podcasturl] covers everything to do with getting the most from your Linux Server plus a focus on all things Docker and containerisation!
# linuxserver/tvheadend
[![](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 image badge on microbadger.com")[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/tvheadend.svg)][hub][![Docker Stars](https://img.shields.io/docker/stars/linuxserver/tvheadend.svg)][hub][![Build Status](https://ci.linuxserver.io/buildStatus/icon?job=Docker-Builders/x86-64/x86-64-tvheadend)](https://ci.linuxserver.io/job/Docker-Builders/job/x86-64/job/x86-64-tvheadend/)
[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).
[![tvheadend](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/tvheadend-big.png)][appurl]
## Usage
```
docker create \
--name=tvheadend \
--net=bridge \
-v <path to data>:/config \
-v <path to recordings>:/recordings \
-e PGID=<gid> -e PUID=<uid> \
-e RUN_OPTS=<parameter> \
-p 9981:9981 \
-p 9982:9982 \
--device=/dev/dvb \
--device=/dev/dri
linuxserver/tvheadend
```
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.
The --device=/dev/dri is only needed if you want to use your AMD/Intel GPU for hardware accelerated video encoding (vaapi).
You can choose between ,using tags, latest (default, and no tag required or a specific release branch of tvheadend.
Add one of the tags, if required, to the linuxserver/tvheadend line of the run/create command in the following format, linuxserver/tvheadend:release-4.2
#### Tags
+ **release-4.2** : latest release from 4.2 branch. Freshly built every friday night uk time.
+ **stable-4.2.1** : old stable version. Will not be updated anymore!
+ **stable-4.0.9** : old stable version. Will not be updated anymore!
#### 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.
## Parameters
`The parameters are split into two halves, separated by a colon, the left hand side representing the host and the right the container side.
For example with a port -p external:internal - what this shows is the port mapping from internal to external of the container.
So -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080
http://192.168.x.x:8080 would show you what's running INSIDE the container on port 80.`
* `-p 1234` - the port(s)
* `-v /config` - Where TVHeadend show store it's config files
* `-v /recordings` - Where you want the PVR to store recordings
* `-e PGID` for GroupID - see below for explanation
* `-e PUID` for UserID - see below for explanation
* `-e RUN_OPTS` additional runtime parameters - see below for explanation
* `--device=/dev/dvb` - for passing through DVB-cards
* `--device=/dev/dri` - for passing through GPU
* `--net=host` - for IPTV, SAT>IP and HDHomeRun
* `-e TZ` - for timezone information *eg Europe/London, etc*
It is based on alpine linux with s6 overlay, for shell access whilst the container is running do `docker exec -it tvheadend /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)
```
## 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.
## Setting up the application
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.
## 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`
## Versions
+ **15.01.19:** Add pipeline and multi arch logic.
+ **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.
{%- endraw %}

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 -c /config
s6-setuidgid abc /usr/bin/tvheadend -C -c /config "${RUN_ARRAY[@]}"