mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-12-16 05:53:03 +03:00
Compare commits
41 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
58e5931a32 | ||
|
|
fcd299965d | ||
|
|
b7fd68d366 | ||
|
|
1d1e6dede9 | ||
|
|
f384822aa5 | ||
|
|
8e5cccb22c | ||
|
|
500c0b9cba | ||
|
|
5054a77dcf | ||
|
|
dac2c98d8a | ||
|
|
aafed63c3f | ||
|
|
2e9a3d45c2 | ||
|
|
e281c79d6f | ||
|
|
38ec68c488 | ||
|
|
da61998ad6 | ||
|
|
f28dd79fb1 | ||
|
|
c2e57aba27 | ||
|
|
db54fe4c70 | ||
|
|
00fe66a38c | ||
|
|
406af5f086 | ||
|
|
f03e279382 | ||
|
|
1bc2b12ee3 | ||
|
|
469a17b3ca | ||
|
|
83948420a4 | ||
|
|
8c53407a9d | ||
|
|
69a81c0bc2 | ||
|
|
d978ae1996 | ||
|
|
6016a27736 | ||
|
|
566646ad8b | ||
|
|
6c1ca6f737 | ||
|
|
aa0c20afd5 | ||
|
|
46acff4113 | ||
|
|
de5c0bab70 | ||
|
|
5181427234 | ||
|
|
c79324154f | ||
|
|
77d4fec6eb | ||
|
|
29ff80d69c | ||
|
|
4a700778e3 | ||
|
|
f274d024ce | ||
|
|
c45b6aa53e | ||
|
|
4b4399fba6 | ||
|
|
c06598635f |
8
.copr/Makefile
Normal file
8
.copr/Makefile
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
srpm:
|
||||||
|
dnf -y install git
|
||||||
|
git submodule update --init --recursive
|
||||||
|
cd deployment/fedora-package-x64; \
|
||||||
|
./create_tarball.sh; \
|
||||||
|
rpmbuild -bs pkg-src/jellyfin.spec \
|
||||||
|
--define "_sourcedir $$PWD/pkg-src/" \
|
||||||
|
--define "_srcrpmdir $(outdir)"
|
||||||
1
.gitmodules
vendored
1
.gitmodules
vendored
@@ -1,3 +1,4 @@
|
|||||||
[submodule "MediaBrowser.WebDashboard/jellyfin-web"]
|
[submodule "MediaBrowser.WebDashboard/jellyfin-web"]
|
||||||
path = MediaBrowser.WebDashboard/jellyfin-web
|
path = MediaBrowser.WebDashboard/jellyfin-web
|
||||||
url = https://github.com/jellyfin/jellyfin-web.git
|
url = https://github.com/jellyfin/jellyfin-web.git
|
||||||
|
branch = .
|
||||||
|
|||||||
20
Dockerfile
20
Dockerfile
@@ -4,12 +4,10 @@ FROM microsoft/dotnet:${DOTNET_VERSION}-sdk as builder
|
|||||||
WORKDIR /repo
|
WORKDIR /repo
|
||||||
COPY . .
|
COPY . .
|
||||||
ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
|
ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
|
||||||
RUN dotnet publish \
|
RUN bash -c "source deployment/common.build.sh && \
|
||||||
--configuration release \
|
build_jellyfin Jellyfin.Server Release linux-x64 /jellyfin"
|
||||||
--output /jellyfin \
|
|
||||||
Jellyfin.Server
|
|
||||||
|
|
||||||
FROM jrottenberg/ffmpeg:4.0-vaapi as ffmpeg
|
FROM jellyfin/ffmpeg as ffmpeg
|
||||||
FROM microsoft/dotnet:${DOTNET_VERSION}-runtime
|
FROM microsoft/dotnet:${DOTNET_VERSION}-runtime
|
||||||
# libfontconfig1 is required for Skia
|
# libfontconfig1 is required for Skia
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
@@ -17,9 +15,15 @@ RUN apt-get update \
|
|||||||
libfontconfig1 \
|
libfontconfig1 \
|
||||||
&& apt-get clean autoclean \
|
&& apt-get clean autoclean \
|
||||||
&& apt-get autoremove \
|
&& apt-get autoremove \
|
||||||
&& rm -rf /var/lib/{apt,dpkg,cache,log}
|
&& rm -rf /var/lib/{apt,dpkg,cache,log} \
|
||||||
|
&& mkdir -p /cache /config /media \
|
||||||
|
&& chmod 777 /cache /config /media
|
||||||
COPY --from=ffmpeg / /
|
COPY --from=ffmpeg / /
|
||||||
COPY --from=builder /jellyfin /jellyfin
|
COPY --from=builder /jellyfin /jellyfin
|
||||||
EXPOSE 8096
|
EXPOSE 8096
|
||||||
VOLUME /config /media
|
VOLUME /cache /config /media
|
||||||
ENTRYPOINT dotnet /jellyfin/jellyfin.dll --datadir /config
|
ENTRYPOINT dotnet /jellyfin/jellyfin.dll \
|
||||||
|
--datadir /config \
|
||||||
|
--cachedir /cache \
|
||||||
|
--ffmpeg /usr/local/bin/ffmpeg \
|
||||||
|
--ffprobe /usr/local/bin/ffprobe
|
||||||
|
|||||||
@@ -17,18 +17,21 @@ RUN find . -type f -exec sed -i 's/netcoreapp2.1/netcoreapp3.0/g' {} \;
|
|||||||
# Discard objs - may cause failures if exists
|
# Discard objs - may cause failures if exists
|
||||||
RUN find . -type d -name obj | xargs -r rm -r
|
RUN find . -type d -name obj | xargs -r rm -r
|
||||||
# Build
|
# Build
|
||||||
RUN dotnet publish \
|
RUN bash -c "source deployment/common.build.sh && \
|
||||||
-r linux-arm \
|
build_jellyfin Jellyfin.Server Release linux-arm /jellyfin"
|
||||||
--configuration release \
|
|
||||||
--output /jellyfin \
|
|
||||||
Jellyfin.Server
|
|
||||||
|
|
||||||
|
|
||||||
FROM microsoft/dotnet:${DOTNET_VERSION}-runtime-stretch-slim-arm32v7
|
FROM microsoft/dotnet:${DOTNET_VERSION}-runtime-stretch-slim-arm32v7
|
||||||
COPY --from=qemu_extract qemu-arm-static /usr/bin
|
COPY --from=qemu_extract qemu-arm-static /usr/bin
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install --no-install-recommends --no-install-suggests -y ffmpeg
|
&& apt-get install --no-install-recommends --no-install-suggests -y ffmpeg \
|
||||||
|
&& mkdir -p /cache /config /media \
|
||||||
|
&& chmod 777 /cache /config /media
|
||||||
COPY --from=builder /jellyfin /jellyfin
|
COPY --from=builder /jellyfin /jellyfin
|
||||||
EXPOSE 8096
|
EXPOSE 8096
|
||||||
VOLUME /config /media
|
VOLUME /cache /config /media
|
||||||
ENTRYPOINT dotnet /jellyfin/jellyfin.dll --datadir /config
|
ENTRYPOINT dotnet /jellyfin/jellyfin.dll \
|
||||||
|
--datadir /config \
|
||||||
|
--cachedir /cache \
|
||||||
|
--ffmpeg /usr/bin/ffmpeg \
|
||||||
|
--ffprobe /usr/bin/ffprobe
|
||||||
|
|||||||
@@ -18,18 +18,21 @@ RUN find . -type f -exec sed -i 's/netcoreapp2.1/netcoreapp3.0/g' {} \;
|
|||||||
# Discard objs - may cause failures if exists
|
# Discard objs - may cause failures if exists
|
||||||
RUN find . -type d -name obj | xargs -r rm -r
|
RUN find . -type d -name obj | xargs -r rm -r
|
||||||
# Build
|
# Build
|
||||||
RUN dotnet publish \
|
RUN bash -c "source deployment/common.build.sh && \
|
||||||
-r linux-arm64 \
|
build_jellyfin Jellyfin.Server Release linux-arm64 /jellyfin"
|
||||||
--configuration release \
|
|
||||||
--output /jellyfin \
|
|
||||||
Jellyfin.Server
|
|
||||||
|
|
||||||
|
|
||||||
FROM microsoft/dotnet:${DOTNET_VERSION}-runtime-stretch-slim-arm64v8
|
FROM microsoft/dotnet:${DOTNET_VERSION}-runtime-stretch-slim-arm64v8
|
||||||
COPY --from=qemu_extract qemu-aarch64-static /usr/bin
|
COPY --from=qemu_extract qemu-aarch64-static /usr/bin
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install --no-install-recommends --no-install-suggests -y ffmpeg
|
&& apt-get install --no-install-recommends --no-install-suggests -y ffmpeg \
|
||||||
|
&& mkdir -p /cache /config /media \
|
||||||
|
&& chmod 777 /cache /config /media
|
||||||
COPY --from=builder /jellyfin /jellyfin
|
COPY --from=builder /jellyfin /jellyfin
|
||||||
EXPOSE 8096
|
EXPOSE 8096
|
||||||
VOLUME /config /media
|
VOLUME /cache /config /media
|
||||||
ENTRYPOINT dotnet /jellyfin/jellyfin.dll --datadir /config
|
ENTRYPOINT dotnet /jellyfin/jellyfin.dll \
|
||||||
|
--datadir /config \
|
||||||
|
--cachedir /cache \
|
||||||
|
--ffmpeg /usr/bin/ffmpeg \
|
||||||
|
--ffprobe /usr/bin/ffprobe
|
||||||
|
|||||||
@@ -175,25 +175,52 @@ namespace Emby.Naming.Video
|
|||||||
return videos;
|
return videos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var list = new List<VideoInfo>();
|
||||||
|
|
||||||
var folderName = Path.GetFileName(Path.GetDirectoryName(videos[0].Files[0].Path));
|
var folderName = Path.GetFileName(Path.GetDirectoryName(videos[0].Files[0].Path));
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(folderName) && folderName.Length > 1)
|
if (!string.IsNullOrEmpty(folderName) && folderName.Length > 1)
|
||||||
{
|
{
|
||||||
var ordered = videos.OrderBy(i => i.Name);
|
if (videos.All(i => i.Files.Count == 1 && IsEligibleForMultiVersion(folderName, i.Files[0].Path)))
|
||||||
|
|
||||||
return ordered.GroupBy(v => new {v.Name, v.Year}).Select(group => new VideoInfo
|
|
||||||
{
|
{
|
||||||
Name = folderName,
|
if (HaveSameYear(videos))
|
||||||
Year = group.First().Year,
|
{
|
||||||
Files = group.First().Files,
|
var ordered = videos.OrderBy(i => i.Name).ToList();
|
||||||
AlternateVersions = group.Skip(1).Select(i => i.Files[0]).ToList(),
|
|
||||||
Extras = group.First().Extras.Concat(group.Skip(1).SelectMany(i => i.Extras)).ToList()
|
list.Add(ordered[0]);
|
||||||
});
|
|
||||||
|
list[0].AlternateVersions = ordered.Skip(1).Select(i => i.Files[0]).ToList();
|
||||||
|
list[0].Name = folderName;
|
||||||
|
list[0].Extras.AddRange(ordered.Skip(1).SelectMany(i => i.Extras));
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return videos;
|
return videos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool HaveSameYear(List<VideoInfo> videos)
|
||||||
|
{
|
||||||
|
return videos.Select(i => i.Year ?? -1).Distinct().Count() < 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool IsEligibleForMultiVersion(string folderName, string testFilename)
|
||||||
|
{
|
||||||
|
testFilename = Path.GetFileNameWithoutExtension(testFilename) ?? string.Empty;
|
||||||
|
|
||||||
|
if (testFilename.StartsWith(folderName, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
testFilename = testFilename.Substring(folderName.Length).Trim();
|
||||||
|
return string.IsNullOrEmpty(testFilename) ||
|
||||||
|
testFilename.StartsWith("-") ||
|
||||||
|
string.IsNullOrWhiteSpace(Regex.Replace(testFilename, @"\[([^]]*)\]", string.Empty)) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private List<VideoFileInfo> GetExtras(IEnumerable<VideoFileInfo> remainingFiles, List<string> baseNames)
|
private List<VideoFileInfo> GetExtras(IEnumerable<VideoFileInfo> remainingFiles, List<string> baseNames)
|
||||||
{
|
{
|
||||||
foreach (var name in baseNames.ToList())
|
foreach (var name in baseNames.ToList())
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Entities.Audio;
|
using MediaBrowser.Controller.Entities.Audio;
|
||||||
@@ -65,6 +66,12 @@ namespace MediaBrowser.LocalMetadata.Images
|
|||||||
|
|
||||||
var path = item.ContainingFolderPath;
|
var path = item.ContainingFolderPath;
|
||||||
|
|
||||||
|
// Exit if the cache dir does not exist, alternative solution is to create it, but that's a lot of empty dirs...
|
||||||
|
if (!Directory.Exists(path))
|
||||||
|
{
|
||||||
|
return Array.Empty<FileSystemMetadata>();
|
||||||
|
}
|
||||||
|
|
||||||
if (includeDirectories)
|
if (includeDirectories)
|
||||||
{
|
{
|
||||||
return directoryService.GetFileSystemEntries(path)
|
return directoryService.GetFileSystemEntries(path)
|
||||||
|
|||||||
@@ -694,7 +694,8 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
|||||||
FileName = FFMpegPath,
|
FileName = FFMpegPath,
|
||||||
Arguments = args,
|
Arguments = args,
|
||||||
IsHidden = true,
|
IsHidden = true,
|
||||||
ErrorDialog = false
|
ErrorDialog = false,
|
||||||
|
EnableRaisingEvents = true
|
||||||
});
|
});
|
||||||
|
|
||||||
_logger.LogDebug("{0} {1}", process.StartInfo.FileName, process.StartInfo.Arguments);
|
_logger.LogDebug("{0} {1}", process.StartInfo.FileName, process.StartInfo.Arguments);
|
||||||
@@ -816,7 +817,8 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
|||||||
FileName = FFMpegPath,
|
FileName = FFMpegPath,
|
||||||
Arguments = args,
|
Arguments = args,
|
||||||
IsHidden = true,
|
IsHidden = true,
|
||||||
ErrorDialog = false
|
ErrorDialog = false,
|
||||||
|
EnableRaisingEvents = true
|
||||||
});
|
});
|
||||||
|
|
||||||
_logger.LogInformation(process.StartInfo.FileName + " " + process.StartInfo.Arguments);
|
_logger.LogInformation(process.StartInfo.FileName + " " + process.StartInfo.Arguments);
|
||||||
|
|||||||
@@ -92,10 +92,7 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
localImagesFailed = true;
|
localImagesFailed = true;
|
||||||
if (!(item is IItemByName))
|
Logger.LogError(ex, "Error validating images for {0}", item.Path ?? item.Name ?? "Unknown name");
|
||||||
{
|
|
||||||
Logger.LogError(ex, "Error validating images for {0}", item.Path ?? item.Name ?? "Unknown name");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var metadataResult = new MetadataResult<TItemType>
|
var metadataResult = new MetadataResult<TItemType>
|
||||||
|
|||||||
Submodule MediaBrowser.WebDashboard/jellyfin-web updated: f7e5946c79...ec5a3b6e5e
@@ -1,4 +1,4 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
[assembly: AssemblyVersion("10.2.0")]
|
[assembly: AssemblyVersion("10.2.2")]
|
||||||
[assembly: AssemblyFileVersion("10.2.0")]
|
[assembly: AssemblyFileVersion("10.2.2")]
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ DEFAULT_CONFIG="Release"
|
|||||||
DEFAULT_OUTPUT_DIR="dist/jellyfin-git"
|
DEFAULT_OUTPUT_DIR="dist/jellyfin-git"
|
||||||
DEFAULT_PKG_DIR="pkg-dist"
|
DEFAULT_PKG_DIR="pkg-dist"
|
||||||
DEFAULT_DOCKERFILE="Dockerfile"
|
DEFAULT_DOCKERFILE="Dockerfile"
|
||||||
DEFAULT_IMAGE_TAG="jellyfin:"`git rev-parse --abbrev-ref HEAD`
|
|
||||||
DEFAULT_ARCHIVE_CMD="tar -xvzf"
|
DEFAULT_ARCHIVE_CMD="tar -xvzf"
|
||||||
|
|
||||||
# Parse the version from the AssemblyVersion
|
# Parse the version from the AssemblyVersion
|
||||||
@@ -36,9 +35,9 @@ build_jellyfin()
|
|||||||
|
|
||||||
echo -e "${CYAN}Building jellyfin in '${ROOT}' for ${DOTNETRUNTIME} with configuration ${CONFIG} and output directory '${OUTPUT_DIR}'.${NC}"
|
echo -e "${CYAN}Building jellyfin in '${ROOT}' for ${DOTNETRUNTIME} with configuration ${CONFIG} and output directory '${OUTPUT_DIR}'.${NC}"
|
||||||
if [[ $DOTNETRUNTIME == 'framework' ]]; then
|
if [[ $DOTNETRUNTIME == 'framework' ]]; then
|
||||||
dotnet publish "${ROOT}" --configuration "${CONFIG}" --output="${OUTPUT_DIR}"
|
dotnet publish "${ROOT}" --configuration "${CONFIG}" --output="${OUTPUT_DIR}" "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none"
|
||||||
else
|
else
|
||||||
dotnet publish "${ROOT}" --configuration "${CONFIG}" --output="${OUTPUT_DIR}" --self-contained --runtime ${DOTNETRUNTIME}
|
dotnet publish "${ROOT}" --configuration "${CONFIG}" --output="${OUTPUT_DIR}" --self-contained --runtime ${DOTNETRUNTIME} "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none"
|
||||||
fi
|
fi
|
||||||
EXIT_CODE=$?
|
EXIT_CODE=$?
|
||||||
if [ $EXIT_CODE -eq 0 ]; then
|
if [ $EXIT_CODE -eq 0 ]; then
|
||||||
@@ -53,7 +52,7 @@ build_jellyfin_docker()
|
|||||||
(
|
(
|
||||||
BUILD_CONTEXT=${1-$DEFAULT_BUILD_CONTEXT}
|
BUILD_CONTEXT=${1-$DEFAULT_BUILD_CONTEXT}
|
||||||
DOCKERFILE=${2-$DEFAULT_DOCKERFILE}
|
DOCKERFILE=${2-$DEFAULT_DOCKERFILE}
|
||||||
IMAGE_TAG=${3-$DEFAULT_IMAGE_TAG}
|
IMAGE_TAG=${3-"jellyfin:$(git rev-parse --abbrev-ref HEAD)"}
|
||||||
|
|
||||||
echo -e "${CYAN}Building jellyfin docker image in '${BUILD_CONTEXT}' with Dockerfile '${DOCKERFILE}' and tag '${IMAGE_TAG}'.${NC}"
|
echo -e "${CYAN}Building jellyfin docker image in '${BUILD_CONTEXT}' with Dockerfile '${DOCKERFILE}' and tag '${IMAGE_TAG}'.${NC}"
|
||||||
docker build -t ${IMAGE_TAG} -f ${DOCKERFILE} ${BUILD_CONTEXT}
|
docker build -t ${IMAGE_TAG} -f ${DOCKERFILE} ${BUILD_CONTEXT}
|
||||||
|
|||||||
42
deployment/debian-package-armhf/Dockerfile.amd64
Normal file
42
deployment/debian-package-armhf/Dockerfile.amd64
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
FROM debian:9
|
||||||
|
# Docker build arguments
|
||||||
|
ARG SOURCE_DIR=/jellyfin
|
||||||
|
ARG PLATFORM_DIR=/jellyfin/deployment/debian-package-armhf
|
||||||
|
ARG ARTIFACT_DIR=/dist
|
||||||
|
ARG SDK_VERSION=2.2
|
||||||
|
# Docker run environment
|
||||||
|
ENV SOURCE_DIR=/jellyfin
|
||||||
|
ENV ARTIFACT_DIR=/dist
|
||||||
|
ENV DEB_BUILD_OPTIONS=noddebs
|
||||||
|
ENV ARCH=amd64
|
||||||
|
|
||||||
|
# Prepare Debian build environment
|
||||||
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv
|
||||||
|
|
||||||
|
# Install dotnet repository
|
||||||
|
# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
|
||||||
|
RUN wget https://download.visualstudio.microsoft.com/download/pr/69937b49-a877-4ced-81e6-286620b390ab/8ab938cf6f5e83b2221630354160ef21/dotnet-sdk-2.2.104-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
|
||||||
|
&& mkdir -p dotnet-sdk \
|
||||||
|
&& tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
|
||||||
|
&& ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet
|
||||||
|
|
||||||
|
# Prepare the cross-toolchain
|
||||||
|
RUN dpkg --add-architecture armhf \
|
||||||
|
&& apt-get update \
|
||||||
|
&& apt-get install -y cross-gcc-dev \
|
||||||
|
&& TARGET_LIST="armhf" cross-gcc-gensource 6 \
|
||||||
|
&& cd cross-gcc-packages-amd64/cross-gcc-6-armhf \
|
||||||
|
&& apt-get install -y gcc-6-source libstdc++6-armhf-cross binutils-arm-linux-gnueabihf bison flex libtool gdb sharutils netbase libcloog-isl-dev libmpc-dev libmpfr-dev libgmp-dev systemtap-sdt-dev autogen expect chrpath zlib1g-dev zip libc6-dev:armhf linux-libc-dev:armhf libgcc1:armhf libcurl4-openssl-dev:armhf libfontconfig1-dev:armhf libfreetype6-dev:armhf liblttng-ust0:armhf libstdc++6:armhf
|
||||||
|
|
||||||
|
# Link to docker-build script
|
||||||
|
RUN ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh
|
||||||
|
|
||||||
|
# Link to Debian source dir; mkdir needed or it fails, can't force dest
|
||||||
|
RUN mkdir -p ${SOURCE_DIR} && ln -sf ${PLATFORM_DIR}/pkg-src ${SOURCE_DIR}/debian
|
||||||
|
|
||||||
|
VOLUME ${ARTIFACT_DIR}/
|
||||||
|
|
||||||
|
COPY . ${SOURCE_DIR}/
|
||||||
|
|
||||||
|
ENTRYPOINT ["/docker-build.sh"]
|
||||||
34
deployment/debian-package-armhf/Dockerfile.armhf
Normal file
34
deployment/debian-package-armhf/Dockerfile.armhf
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
FROM debian:9
|
||||||
|
# Docker build arguments
|
||||||
|
ARG SOURCE_DIR=/jellyfin
|
||||||
|
ARG PLATFORM_DIR=/jellyfin/deployment/debian-package-armhf
|
||||||
|
ARG ARTIFACT_DIR=/dist
|
||||||
|
ARG SDK_VERSION=2.2
|
||||||
|
# Docker run environment
|
||||||
|
ENV SOURCE_DIR=/jellyfin
|
||||||
|
ENV ARTIFACT_DIR=/dist
|
||||||
|
ENV DEB_BUILD_OPTIONS=noddebs
|
||||||
|
ENV ARCH=armhf
|
||||||
|
|
||||||
|
# Prepare Debian build environment
|
||||||
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv libc6-dev libcurl4-openssl-dev libfontconfig1-dev libfreetype6-dev liblttng-ust0
|
||||||
|
|
||||||
|
# Install dotnet repository
|
||||||
|
# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
|
||||||
|
RUN wget https://download.visualstudio.microsoft.com/download/pr/d9f37b73-df8d-4dfa-a905-b7648d3401d0/6312573ac13d7a8ddc16e4058f7d7dc5/dotnet-sdk-2.2.104-linux-arm.tar.gz -O dotnet-sdk.tar.gz \
|
||||||
|
&& mkdir -p dotnet-sdk \
|
||||||
|
&& tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
|
||||||
|
&& ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet
|
||||||
|
|
||||||
|
# Link to docker-build script
|
||||||
|
RUN ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh
|
||||||
|
|
||||||
|
# Link to Debian source dir; mkdir needed or it fails, can't force dest
|
||||||
|
RUN mkdir -p ${SOURCE_DIR} && ln -sf ${PLATFORM_DIR}/pkg-src ${SOURCE_DIR}/debian
|
||||||
|
|
||||||
|
VOLUME ${ARTIFACT_DIR}/
|
||||||
|
|
||||||
|
COPY . ${SOURCE_DIR}/
|
||||||
|
|
||||||
|
ENTRYPOINT ["/docker-build.sh"]
|
||||||
29
deployment/debian-package-armhf/clean.sh
Executable file
29
deployment/debian-package-armhf/clean.sh
Executable file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
keep_artifacts="${1}"
|
||||||
|
|
||||||
|
WORKDIR="$( pwd )"
|
||||||
|
|
||||||
|
package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
|
||||||
|
output_dir="${WORKDIR}/pkg-dist"
|
||||||
|
current_user="$( whoami )"
|
||||||
|
image_name="jellyfin-debian_armhf-build"
|
||||||
|
|
||||||
|
rm -rf "${package_temporary_dir}" &>/dev/null \
|
||||||
|
|| sudo rm -rf "${package_temporary_dir}" &>/dev/null
|
||||||
|
|
||||||
|
rm -rf "${output_dir}" &>/dev/null \
|
||||||
|
|| sudo rm -rf "${output_dir}" &>/dev/null
|
||||||
|
|
||||||
|
if [[ ${keep_artifacts} == 'n' ]]; then
|
||||||
|
docker_sudo=""
|
||||||
|
if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
|
||||||
|
&& [[ ! ${EUID:-1000} -eq 0 ]] \
|
||||||
|
&& [[ ! ${USER} == "root" ]] \
|
||||||
|
&& [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
|
||||||
|
docker_sudo=sudo
|
||||||
|
fi
|
||||||
|
${docker_sudo} docker image rm ${image_name} --force
|
||||||
|
fi
|
||||||
1
deployment/debian-package-armhf/dependencies.txt
Normal file
1
deployment/debian-package-armhf/dependencies.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
docker
|
||||||
20
deployment/debian-package-armhf/docker-build.sh
Executable file
20
deployment/debian-package-armhf/docker-build.sh
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Builds the DEB inside the Docker container
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o xtrace
|
||||||
|
|
||||||
|
# Move to source directory
|
||||||
|
pushd ${SOURCE_DIR}
|
||||||
|
|
||||||
|
# Remove build-dep for dotnet-sdk-2.2, since it's not a package in this image
|
||||||
|
sed -i '/dotnet-sdk-2.2,/d' debian/control
|
||||||
|
|
||||||
|
# Build DEB
|
||||||
|
export CONFIG_SITE=/etc/dpkg-cross/cross-config.${ARCH}
|
||||||
|
dpkg-buildpackage -us -uc -aarmhf
|
||||||
|
|
||||||
|
# Move the artifacts out
|
||||||
|
mkdir -p ${ARTIFACT_DIR}/deb
|
||||||
|
mv /jellyfin_* ${ARTIFACT_DIR}/deb/
|
||||||
42
deployment/debian-package-armhf/package.sh
Executable file
42
deployment/debian-package-armhf/package.sh
Executable file
@@ -0,0 +1,42 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
ARCH="$( arch )"
|
||||||
|
WORKDIR="$( pwd )"
|
||||||
|
|
||||||
|
package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
|
||||||
|
output_dir="${WORKDIR}/pkg-dist"
|
||||||
|
current_user="$( whoami )"
|
||||||
|
image_name="jellyfin-debian_armhf-build"
|
||||||
|
|
||||||
|
# Determine if sudo should be used for Docker
|
||||||
|
if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
|
||||||
|
&& [[ ! ${EUID:-1000} -eq 0 ]] \
|
||||||
|
&& [[ ! ${USER} == "root" ]] \
|
||||||
|
&& [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
|
||||||
|
docker_sudo="sudo"
|
||||||
|
else
|
||||||
|
docker_sudo=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Determine which Dockerfile to use
|
||||||
|
case $ARCH in
|
||||||
|
'x86_64')
|
||||||
|
DOCKERFILE="Dockerfile.amd64"
|
||||||
|
;;
|
||||||
|
'armv7l')
|
||||||
|
DOCKERFILE="Dockerfile.armhf"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Set up the build environment Docker image
|
||||||
|
${docker_sudo} docker build ../.. -t "${image_name}" -f ./${DOCKERFILE}
|
||||||
|
# Build the DEBs and copy out to ${package_temporary_dir}
|
||||||
|
${docker_sudo} docker run --rm -v "${package_temporary_dir}:/dist" "${image_name}"
|
||||||
|
# Correct ownership on the DEBs (as current user, then as root if that fails)
|
||||||
|
chown -R "${current_user}" "${package_temporary_dir}" &>/dev/null \
|
||||||
|
|| sudo chown -R "${current_user}" "${package_temporary_dir}" &>/dev/null
|
||||||
|
# Move the DEBs to the output directory
|
||||||
|
mkdir -p "${output_dir}"
|
||||||
|
mv "${package_temporary_dir}"/deb/* "${output_dir}"
|
||||||
1
deployment/debian-package-armhf/pkg-src
Symbolic link
1
deployment/debian-package-armhf/pkg-src
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../debian-package-x64/pkg-src
|
||||||
@@ -1,3 +1,36 @@
|
|||||||
|
jellyfin (10.2.2-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* jellyfin:
|
||||||
|
* PR968 Release 10.2.z copr autobuild
|
||||||
|
* PR964 Install the dotnet runtime package in Fedora build
|
||||||
|
* PR979 Build Package releases without debug turned on
|
||||||
|
* PR990 Fix slow local image validation
|
||||||
|
* PR991 Fix the ffmpeg compatibility
|
||||||
|
* PR992 Add Debian armhf (Raspberry Pi) build plus crossbuild
|
||||||
|
* PR998 Set EnableRaisingEvents to true for processes that require it
|
||||||
|
* PR1017 Set ffmpeg+ffprobe paths in Docker container
|
||||||
|
* jellyfin-web:
|
||||||
|
* PR152 Go back on Media stop
|
||||||
|
* PR156 Fix volume slider not working on nowplayingbar
|
||||||
|
|
||||||
|
-- Jellyfin Packaging Team <packaging@jellyfin.org> Thu, 28 Feb 2019 15:32:16 -0500
|
||||||
|
|
||||||
|
jellyfin (10.2.1-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* jellyfin:
|
||||||
|
* PR920 Fix cachedir missing from Docker container
|
||||||
|
* PR924 Use the movie name instead of folder name
|
||||||
|
* PR933 Semi-revert to prefer old movie grouping behaviour
|
||||||
|
* PR948 Revert movie matching (supercedes PR933, PR924, PR739)
|
||||||
|
* PR960 Use jellyfin/ffmpeg image
|
||||||
|
* jellyfin-web:
|
||||||
|
* PR136 Re-add OpenSubtitles configuration page
|
||||||
|
* PR137 Replace HeaderEmbyServer with HeaderJellyfinServer on plugincatalog
|
||||||
|
* PR138 Remove left-over JS for Customize Home Screen
|
||||||
|
* PR141 Exit fullscreen automatically after video playback ends
|
||||||
|
|
||||||
|
-- Jellyfin Packaging Team <packaging@jellyfin.org> Wed, 20 Feb 2019 11:36:16 -0500
|
||||||
|
|
||||||
jellyfin (10.2.0-2) unstable; urgency=medium
|
jellyfin (10.2.0-2) unstable; urgency=medium
|
||||||
|
|
||||||
* jellyfin:
|
* jellyfin:
|
||||||
|
|||||||
@@ -21,9 +21,9 @@ JELLYFIN_CACHE_DIRECTORY="/var/cache/jellyfin"
|
|||||||
# Restart script for in-app server control
|
# Restart script for in-app server control
|
||||||
JELLYFIN_RESTART_OPT="--restartpath=/usr/lib/jellyfin/restart.sh"
|
JELLYFIN_RESTART_OPT="--restartpath=/usr/lib/jellyfin/restart.sh"
|
||||||
|
|
||||||
# [OPTIONAL] ffmpeg binary paths, overriding the UI-configured values
|
# ffmpeg binary paths, overriding the system values
|
||||||
#JELLYFIN_FFMPEG_OPT="--ffmpeg=/usr/bin/ffmpeg"
|
JELLYFIN_FFMPEG_OPT="--ffmpeg=/usr/share/jellyfin-ffmpeg/ffmpeg"
|
||||||
#JELLYFIN_FFPROBE_OPT="--ffprobe=/usr/bin/ffprobe"
|
JELLYFIN_FFPROBE_OPT="--ffprobe=/usr/share/jellyfin-ffmpeg/ffprobe"
|
||||||
|
|
||||||
# [OPTIONAL] run Jellyfin as a headless service
|
# [OPTIONAL] run Jellyfin as a headless service
|
||||||
#JELLYFIN_SERVICE_OPT="--service"
|
#JELLYFIN_SERVICE_OPT="--service"
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ Conflicts: mediabrowser, emby, emby-server-beta, jellyfin-dev, emby-server
|
|||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: at,
|
Depends: at,
|
||||||
libsqlite3-0,
|
libsqlite3-0,
|
||||||
ffmpeg (<7:4.1) | jellyfin-ffmpeg,
|
jellyfin-ffmpeg,
|
||||||
libfontconfig1,
|
libfontconfig1,
|
||||||
libfreetype6,
|
libfreetype6,
|
||||||
libssl1.0.0 | libssl1.0.2
|
libssl1.0.0 | libssl1.0.2
|
||||||
|
|||||||
@@ -2,7 +2,23 @@
|
|||||||
CONFIG := Release
|
CONFIG := Release
|
||||||
TERM := xterm
|
TERM := xterm
|
||||||
SHELL := /bin/bash
|
SHELL := /bin/bash
|
||||||
DOTNETRUNTIME := debian-x64
|
|
||||||
|
HOST_ARCH := $(shell arch)
|
||||||
|
BUILD_ARCH := ${DEB_HOST_MULTIARCH}
|
||||||
|
ifeq ($(HOST_ARCH),x86_64)
|
||||||
|
ifeq ($(BUILD_ARCH),arm-linux-gnueabihf)
|
||||||
|
# Cross-building ARM on AMD64
|
||||||
|
DOTNETRUNTIME := debian-arm
|
||||||
|
else
|
||||||
|
# Building AMD64
|
||||||
|
DOTNETRUNTIME := debian-x64
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
ifeq ($(HOST_ARCH),armv7l)
|
||||||
|
# Building ARM
|
||||||
|
DOTNETRUNTIME := debian-arm
|
||||||
|
endif
|
||||||
|
|
||||||
export DH_VERBOSE=1
|
export DH_VERBOSE=1
|
||||||
export DOTNET_CLI_TELEMETRY_OPTOUT=1
|
export DOTNET_CLI_TELEMETRY_OPTOUT=1
|
||||||
|
|
||||||
@@ -16,7 +32,8 @@ override_dh_auto_test:
|
|||||||
override_dh_clistrip:
|
override_dh_clistrip:
|
||||||
|
|
||||||
override_dh_auto_build:
|
override_dh_auto_build:
|
||||||
dotnet publish --configuration $(CONFIG) --output='$(CURDIR)/usr/lib/jellyfin/bin' --self-contained --runtime $(DOTNETRUNTIME) Jellyfin.Server
|
dotnet publish --configuration $(CONFIG) --output='$(CURDIR)/usr/lib/jellyfin/bin' --self-contained --runtime $(DOTNETRUNTIME) \
|
||||||
|
"-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none" Jellyfin.Server
|
||||||
|
|
||||||
override_dh_auto_clean:
|
override_dh_auto_clean:
|
||||||
dotnet clean -maxcpucount:1 --configuration $(CONFIG) Jellyfin.Server || true
|
dotnet clean -maxcpucount:1 --configuration $(CONFIG) Jellyfin.Server || true
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ RUN dnf update -y \
|
|||||||
&& dnf install -y @buildsys-build rpmdevtools dnf-plugins-core libcurl-devel fontconfig-devel freetype-devel openssl-devel glibc-devel libicu-devel \
|
&& dnf install -y @buildsys-build rpmdevtools dnf-plugins-core libcurl-devel fontconfig-devel freetype-devel openssl-devel glibc-devel libicu-devel \
|
||||||
&& dnf copr enable -y @dotnet-sig/dotnet \
|
&& dnf copr enable -y @dotnet-sig/dotnet \
|
||||||
&& rpmdev-setuptree \
|
&& rpmdev-setuptree \
|
||||||
&& dnf install -y dotnet-sdk-${SDK_VERSION} \
|
&& dnf install -y dotnet-sdk-${SDK_VERSION} dotnet-runtime-${SDK_VERSION} \
|
||||||
&& ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh \
|
&& ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh \
|
||||||
&& mkdir -p ${SOURCE_DIR}/SPECS \
|
&& mkdir -p ${SOURCE_DIR}/SPECS \
|
||||||
&& ln -s ${PLATFORM_DIR}/pkg-src/jellyfin.spec ${SOURCE_DIR}/SPECS/jellyfin.spec \
|
&& ln -s ${PLATFORM_DIR}/pkg-src/jellyfin.spec ${SOURCE_DIR}/SPECS/jellyfin.spec \
|
||||||
|
|||||||
55
deployment/fedora-package-x64/create_tarball.sh
Executable file
55
deployment/fedora-package-x64/create_tarball.sh
Executable file
@@ -0,0 +1,55 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
WORKDIR="$( pwd )"
|
||||||
|
VERSION="$( sed -ne '/^Version:/s/.* *//p' "${WORKDIR}"/pkg-src/jellyfin.spec )"
|
||||||
|
|
||||||
|
package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
|
||||||
|
pkg_src_dir="${WORKDIR}/pkg-src"
|
||||||
|
|
||||||
|
GNU_TAR=1
|
||||||
|
echo "Bundling all sources for RPM build."
|
||||||
|
tar \
|
||||||
|
--transform "s,^\.,jellyfin-${VERSION}," \
|
||||||
|
--exclude='.git*' \
|
||||||
|
--exclude='**/.git' \
|
||||||
|
--exclude='**/.hg' \
|
||||||
|
--exclude='**/.vs' \
|
||||||
|
--exclude='**/.vscode' \
|
||||||
|
--exclude='deployment' \
|
||||||
|
--exclude='**/bin' \
|
||||||
|
--exclude='**/obj' \
|
||||||
|
--exclude='**/.nuget' \
|
||||||
|
--exclude='*.deb' \
|
||||||
|
--exclude='*.rpm' \
|
||||||
|
-czf "$pkg_src_dir/jellyfin-${VERSION}.tar.gz" \
|
||||||
|
-C "../.." ./ || GNU_TAR=0
|
||||||
|
|
||||||
|
if [ $GNU_TAR -eq 0 ]; then
|
||||||
|
echo "The installed tar binary did not support --transform. Using workaround."
|
||||||
|
mkdir -p "${package_temporary_dir}/jellyfin"{,-"${VERSION}"}
|
||||||
|
# Not GNU tar
|
||||||
|
tar \
|
||||||
|
--exclude='.git*' \
|
||||||
|
--exclude='**/.git' \
|
||||||
|
--exclude='**/.hg' \
|
||||||
|
--exclude='**/.vs' \
|
||||||
|
--exclude='**/.vscode' \
|
||||||
|
--exclude='deployment' \
|
||||||
|
--exclude='**/bin' \
|
||||||
|
--exclude='**/obj' \
|
||||||
|
--exclude='**/.nuget' \
|
||||||
|
--exclude='*.deb' \
|
||||||
|
--exclude='*.rpm' \
|
||||||
|
-zcf \
|
||||||
|
"${package_temporary_dir}/jellyfin/jellyfin-${VERSION}.tar.gz" \
|
||||||
|
-C "../.." ./
|
||||||
|
echo "Extracting filtered package."
|
||||||
|
tar -xzf "${package_temporary_dir}/jellyfin/jellyfin-${VERSION}.tar.gz" -C "${package_temporary_dir}/jellyfin-${VERSION}"
|
||||||
|
echo "Removing filtered package."
|
||||||
|
rm -f "${package_temporary_dir}/jellyfin/jellyfin-${VERSION}.tar.gz"
|
||||||
|
echo "Repackaging package into final tarball."
|
||||||
|
tar -czf "${pkg_src_dir}/jellyfin-${VERSION}.tar.gz" -C "${package_temporary_dir}" "jellyfin-${VERSION}"
|
||||||
|
fi
|
||||||
@@ -21,52 +21,7 @@ else
|
|||||||
docker_sudo=""
|
docker_sudo=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create RPM source archive
|
./create_tarball.sh
|
||||||
GNU_TAR=1
|
|
||||||
mkdir -p "${package_temporary_dir}"
|
|
||||||
echo "Bundling all sources for RPM build."
|
|
||||||
tar \
|
|
||||||
--transform "s,^\.,jellyfin-${VERSION}," \
|
|
||||||
--exclude='.git*' \
|
|
||||||
--exclude='**/.git' \
|
|
||||||
--exclude='**/.hg' \
|
|
||||||
--exclude='**/.vs' \
|
|
||||||
--exclude='**/.vscode' \
|
|
||||||
--exclude='deployment' \
|
|
||||||
--exclude='**/bin' \
|
|
||||||
--exclude='**/obj' \
|
|
||||||
--exclude='**/.nuget' \
|
|
||||||
--exclude='*.deb' \
|
|
||||||
--exclude='*.rpm' \
|
|
||||||
-czf "${pkg_src_dir}/jellyfin-${VERSION}.tar.gz" \
|
|
||||||
-C "../.." ./ || GNU_TAR=0
|
|
||||||
|
|
||||||
if [ $GNU_TAR -eq 0 ]; then
|
|
||||||
echo "The installed tar binary did not support --transform. Using workaround."
|
|
||||||
mkdir -p "${package_temporary_dir}/jellyfin"
|
|
||||||
# Not GNU tar
|
|
||||||
tar \
|
|
||||||
--exclude='.git*' \
|
|
||||||
--exclude='**/.git' \
|
|
||||||
--exclude='**/.hg' \
|
|
||||||
--exclude='**/.vs' \
|
|
||||||
--exclude='**/.vscode' \
|
|
||||||
--exclude='deployment' \
|
|
||||||
--exclude='**/bin' \
|
|
||||||
--exclude='**/obj' \
|
|
||||||
--exclude='**/.nuget' \
|
|
||||||
--exclude='*.deb' \
|
|
||||||
--exclude='*.rpm' \
|
|
||||||
-zcf \
|
|
||||||
"${package_temporary_dir}/jellyfin/jellyfin-${VERSION}.tar.gz" \
|
|
||||||
-C "../.." ./
|
|
||||||
echo "Extracting filtered package."
|
|
||||||
tar -xzf "${package_temporary_dir}/jellyfin/jellyfin-${VERSION}.tar.gz" -C "${package_temporary_dir}/jellyfin-${VERSION}"
|
|
||||||
echo "Removing filtered package."
|
|
||||||
rm -f "${package_temporary_dir}/jellyfin/jellyfin-${VERSION}.tar.gz"
|
|
||||||
echo "Repackaging package into final tarball."
|
|
||||||
tar -czf "${pkg_src_dir}/jellyfin-${VERSION}.tar.gz" -C "${package_temporary_dir}" "jellyfin-${VERSION}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set up the build environment Docker image
|
# Set up the build environment Docker image
|
||||||
${docker_sudo} docker build ../.. -t "${image_name}" -f ./Dockerfile
|
${docker_sudo} docker build ../.. -t "${image_name}" -f ./Dockerfile
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
Name: jellyfin
|
Name: jellyfin
|
||||||
Version: 10.2.0
|
Version: 10.2.2
|
||||||
Release: 2%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: The Free Software Media Browser
|
Summary: The Free Software Media Browser
|
||||||
License: GPLv2
|
License: GPLv2
|
||||||
URL: https://jellyfin.media
|
URL: https://jellyfin.media
|
||||||
@@ -27,7 +27,7 @@ BuildRequires: libcurl-devel, fontconfig-devel, freetype-devel, openssl-devel,
|
|||||||
Requires: libcurl, fontconfig, freetype, openssl, glibc libicu
|
Requires: libcurl, fontconfig, freetype, openssl, glibc libicu
|
||||||
# Requirements not packaged in main repos
|
# Requirements not packaged in main repos
|
||||||
# COPR @dotnet-sig/dotnet
|
# COPR @dotnet-sig/dotnet
|
||||||
BuildRequires: dotnet-sdk-2.2
|
BuildRequires: dotnet-runtime-2.2, dotnet-sdk-2.2
|
||||||
# RPMfusion free
|
# RPMfusion free
|
||||||
Requires: ffmpeg
|
Requires: ffmpeg
|
||||||
|
|
||||||
@@ -49,7 +49,8 @@ Jellyfin is a free software media system that puts you in control of managing an
|
|||||||
%install
|
%install
|
||||||
export DOTNET_CLI_TELEMETRY_OPTOUT=1
|
export DOTNET_CLI_TELEMETRY_OPTOUT=1
|
||||||
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
|
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
|
||||||
dotnet publish --configuration Release --output='%{buildroot}%{_libdir}/jellyfin' --self-contained --runtime %{dotnet_runtime} Jellyfin.Server
|
dotnet publish --configuration Release --output='%{buildroot}%{_libdir}/jellyfin' --self-contained --runtime %{dotnet_runtime} \
|
||||||
|
"-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none" Jellyfin.Server
|
||||||
%{__install} -D -m 0644 LICENSE %{buildroot}%{_datadir}/licenses/%{name}/LICENSE
|
%{__install} -D -m 0644 LICENSE %{buildroot}%{_datadir}/licenses/%{name}/LICENSE
|
||||||
%{__install} -D -m 0644 %{SOURCE5} %{buildroot}%{_sysconfdir}/systemd/system/%{name}.service.d/override.conf
|
%{__install} -D -m 0644 %{SOURCE5} %{buildroot}%{_sysconfdir}/systemd/system/%{name}.service.d/override.conf
|
||||||
%{__install} -D -m 0644 Jellyfin.Server/Resources/Configuration/logging.json %{buildroot}%{_sysconfdir}/%{name}/logging.json
|
%{__install} -D -m 0644 Jellyfin.Server/Resources/Configuration/logging.json %{buildroot}%{_sysconfdir}/%{name}/logging.json
|
||||||
@@ -73,7 +74,6 @@ EOF
|
|||||||
%{_libdir}/%{name}/jellyfin-web/*
|
%{_libdir}/%{name}/jellyfin-web/*
|
||||||
%attr(755,root,root) %{_bindir}/%{name}
|
%attr(755,root,root) %{_bindir}/%{name}
|
||||||
%{_libdir}/%{name}/*.json
|
%{_libdir}/%{name}/*.json
|
||||||
%{_libdir}/%{name}/*.pdb
|
|
||||||
%{_libdir}/%{name}/*.dll
|
%{_libdir}/%{name}/*.dll
|
||||||
%{_libdir}/%{name}/*.so
|
%{_libdir}/%{name}/*.so
|
||||||
%{_libdir}/%{name}/*.a
|
%{_libdir}/%{name}/*.a
|
||||||
@@ -140,6 +140,31 @@ fi
|
|||||||
%systemd_postun_with_restart jellyfin.service
|
%systemd_postun_with_restart jellyfin.service
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Feb 28 2019 Jellyfin Packaging Team <packaging@jellyfin.org>
|
||||||
|
- jellyfin:
|
||||||
|
- PR968 Release 10.2.z copr autobuild
|
||||||
|
- PR964 Install the dotnet runtime package in Fedora build
|
||||||
|
- PR979 Build Package releases without debug turned on
|
||||||
|
- PR990 Fix slow local image validation
|
||||||
|
- PR991 Fix the ffmpeg compatibility
|
||||||
|
- PR992 Add Debian armhf (Raspberry Pi) build plus crossbuild
|
||||||
|
- PR998 Set EnableRaisingEvents to true for processes that require it
|
||||||
|
- PR1017 Set ffmpeg+ffprobe paths in Docker container
|
||||||
|
- jellyfin-web:
|
||||||
|
- PR152 Go back on Media stop
|
||||||
|
- PR156 Fix volume slider not working on nowplayingbar
|
||||||
|
* Wed Feb 20 2019 Jellyfin Packaging Team <packaging@jellyfin.org>
|
||||||
|
- jellyfin:
|
||||||
|
- PR920 Fix cachedir missing from Docker container
|
||||||
|
- PR924 Use the movie name instead of folder name
|
||||||
|
- PR933 Semi-revert to prefer old movie grouping behaviour
|
||||||
|
- PR948 Revert movie matching (supercedes PR933, PR924, PR739)
|
||||||
|
- PR960 Use jellyfin/ffmpeg image
|
||||||
|
- jellyfin-web:
|
||||||
|
- PR136 Re-add OpenSubtitles configuration page
|
||||||
|
- PR137 Replace HeaderEmbyServer with HeaderJellyfinServer on plugincatalog
|
||||||
|
- PR138 Remove left-over JS for Customize Home Screen
|
||||||
|
- PR141 Exit fullscreen automatically after video playback ends
|
||||||
* Fri Feb 15 2019 Jellyfin Packaging Team <packaging@jellyfin.org>
|
* Fri Feb 15 2019 Jellyfin Packaging Team <packaging@jellyfin.org>
|
||||||
- jellyfin:
|
- jellyfin:
|
||||||
- PR452 Use EF Core for Activity database
|
- PR452 Use EF Core for Activity database
|
||||||
|
|||||||
Reference in New Issue
Block a user