mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-12-13 04:23:01 +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"]
|
||||
path = MediaBrowser.WebDashboard/jellyfin-web
|
||||
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
|
||||
COPY . .
|
||||
ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
|
||||
RUN dotnet publish \
|
||||
--configuration release \
|
||||
--output /jellyfin \
|
||||
Jellyfin.Server
|
||||
RUN bash -c "source deployment/common.build.sh && \
|
||||
build_jellyfin Jellyfin.Server Release linux-x64 /jellyfin"
|
||||
|
||||
FROM jrottenberg/ffmpeg:4.0-vaapi as ffmpeg
|
||||
FROM jellyfin/ffmpeg as ffmpeg
|
||||
FROM microsoft/dotnet:${DOTNET_VERSION}-runtime
|
||||
# libfontconfig1 is required for Skia
|
||||
RUN apt-get update \
|
||||
@@ -17,9 +15,15 @@ RUN apt-get update \
|
||||
libfontconfig1 \
|
||||
&& apt-get clean autoclean \
|
||||
&& 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=builder /jellyfin /jellyfin
|
||||
EXPOSE 8096
|
||||
VOLUME /config /media
|
||||
ENTRYPOINT dotnet /jellyfin/jellyfin.dll --datadir /config
|
||||
VOLUME /cache /config /media
|
||||
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
|
||||
RUN find . -type d -name obj | xargs -r rm -r
|
||||
# Build
|
||||
RUN dotnet publish \
|
||||
-r linux-arm \
|
||||
--configuration release \
|
||||
--output /jellyfin \
|
||||
Jellyfin.Server
|
||||
RUN bash -c "source deployment/common.build.sh && \
|
||||
build_jellyfin Jellyfin.Server Release linux-arm /jellyfin"
|
||||
|
||||
|
||||
FROM microsoft/dotnet:${DOTNET_VERSION}-runtime-stretch-slim-arm32v7
|
||||
COPY --from=qemu_extract qemu-arm-static /usr/bin
|
||||
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
|
||||
EXPOSE 8096
|
||||
VOLUME /config /media
|
||||
ENTRYPOINT dotnet /jellyfin/jellyfin.dll --datadir /config
|
||||
VOLUME /cache /config /media
|
||||
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
|
||||
RUN find . -type d -name obj | xargs -r rm -r
|
||||
# Build
|
||||
RUN dotnet publish \
|
||||
-r linux-arm64 \
|
||||
--configuration release \
|
||||
--output /jellyfin \
|
||||
Jellyfin.Server
|
||||
RUN bash -c "source deployment/common.build.sh && \
|
||||
build_jellyfin Jellyfin.Server Release linux-arm64 /jellyfin"
|
||||
|
||||
|
||||
FROM microsoft/dotnet:${DOTNET_VERSION}-runtime-stretch-slim-arm64v8
|
||||
COPY --from=qemu_extract qemu-aarch64-static /usr/bin
|
||||
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
|
||||
EXPOSE 8096
|
||||
VOLUME /config /media
|
||||
ENTRYPOINT dotnet /jellyfin/jellyfin.dll --datadir /config
|
||||
VOLUME /cache /config /media
|
||||
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;
|
||||
}
|
||||
|
||||
var list = new List<VideoInfo>();
|
||||
|
||||
var folderName = Path.GetFileName(Path.GetDirectoryName(videos[0].Files[0].Path));
|
||||
|
||||
if (!string.IsNullOrEmpty(folderName) && folderName.Length > 1)
|
||||
{
|
||||
var ordered = videos.OrderBy(i => i.Name);
|
||||
|
||||
return ordered.GroupBy(v => new {v.Name, v.Year}).Select(group => new VideoInfo
|
||||
if (videos.All(i => i.Files.Count == 1 && IsEligibleForMultiVersion(folderName, i.Files[0].Path)))
|
||||
{
|
||||
Name = folderName,
|
||||
Year = group.First().Year,
|
||||
Files = group.First().Files,
|
||||
AlternateVersions = group.Skip(1).Select(i => i.Files[0]).ToList(),
|
||||
Extras = group.First().Extras.Concat(group.Skip(1).SelectMany(i => i.Extras)).ToList()
|
||||
});
|
||||
if (HaveSameYear(videos))
|
||||
{
|
||||
var ordered = videos.OrderBy(i => i.Name).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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
foreach (var name in baseNames.ToList())
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.Audio;
|
||||
@@ -65,6 +66,12 @@ namespace MediaBrowser.LocalMetadata.Images
|
||||
|
||||
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)
|
||||
{
|
||||
return directoryService.GetFileSystemEntries(path)
|
||||
|
||||
@@ -694,7 +694,8 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
FileName = FFMpegPath,
|
||||
Arguments = args,
|
||||
IsHidden = true,
|
||||
ErrorDialog = false
|
||||
ErrorDialog = false,
|
||||
EnableRaisingEvents = true
|
||||
});
|
||||
|
||||
_logger.LogDebug("{0} {1}", process.StartInfo.FileName, process.StartInfo.Arguments);
|
||||
@@ -816,7 +817,8 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||
FileName = FFMpegPath,
|
||||
Arguments = args,
|
||||
IsHidden = true,
|
||||
ErrorDialog = false
|
||||
ErrorDialog = false,
|
||||
EnableRaisingEvents = true
|
||||
});
|
||||
|
||||
_logger.LogInformation(process.StartInfo.FileName + " " + process.StartInfo.Arguments);
|
||||
|
||||
@@ -92,10 +92,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
catch (Exception ex)
|
||||
{
|
||||
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>
|
||||
|
||||
Submodule MediaBrowser.WebDashboard/jellyfin-web updated: f7e5946c79...ec5a3b6e5e
@@ -1,4 +1,4 @@
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: AssemblyVersion("10.2.0")]
|
||||
[assembly: AssemblyFileVersion("10.2.0")]
|
||||
[assembly: AssemblyVersion("10.2.2")]
|
||||
[assembly: AssemblyFileVersion("10.2.2")]
|
||||
|
||||
@@ -15,7 +15,6 @@ DEFAULT_CONFIG="Release"
|
||||
DEFAULT_OUTPUT_DIR="dist/jellyfin-git"
|
||||
DEFAULT_PKG_DIR="pkg-dist"
|
||||
DEFAULT_DOCKERFILE="Dockerfile"
|
||||
DEFAULT_IMAGE_TAG="jellyfin:"`git rev-parse --abbrev-ref HEAD`
|
||||
DEFAULT_ARCHIVE_CMD="tar -xvzf"
|
||||
|
||||
# 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}"
|
||||
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
|
||||
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
|
||||
EXIT_CODE=$?
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
@@ -53,7 +52,7 @@ build_jellyfin_docker()
|
||||
(
|
||||
BUILD_CONTEXT=${1-$DEFAULT_BUILD_CONTEXT}
|
||||
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}"
|
||||
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:
|
||||
|
||||
@@ -21,9 +21,9 @@ JELLYFIN_CACHE_DIRECTORY="/var/cache/jellyfin"
|
||||
# Restart script for in-app server control
|
||||
JELLYFIN_RESTART_OPT="--restartpath=/usr/lib/jellyfin/restart.sh"
|
||||
|
||||
# [OPTIONAL] ffmpeg binary paths, overriding the UI-configured values
|
||||
#JELLYFIN_FFMPEG_OPT="--ffmpeg=/usr/bin/ffmpeg"
|
||||
#JELLYFIN_FFPROBE_OPT="--ffprobe=/usr/bin/ffprobe"
|
||||
# ffmpeg binary paths, overriding the system values
|
||||
JELLYFIN_FFMPEG_OPT="--ffmpeg=/usr/share/jellyfin-ffmpeg/ffmpeg"
|
||||
JELLYFIN_FFPROBE_OPT="--ffprobe=/usr/share/jellyfin-ffmpeg/ffprobe"
|
||||
|
||||
# [OPTIONAL] run Jellyfin as a headless service
|
||||
#JELLYFIN_SERVICE_OPT="--service"
|
||||
|
||||
@@ -20,7 +20,7 @@ Conflicts: mediabrowser, emby, emby-server-beta, jellyfin-dev, emby-server
|
||||
Architecture: any
|
||||
Depends: at,
|
||||
libsqlite3-0,
|
||||
ffmpeg (<7:4.1) | jellyfin-ffmpeg,
|
||||
jellyfin-ffmpeg,
|
||||
libfontconfig1,
|
||||
libfreetype6,
|
||||
libssl1.0.0 | libssl1.0.2
|
||||
|
||||
@@ -2,7 +2,23 @@
|
||||
CONFIG := Release
|
||||
TERM := xterm
|
||||
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 DOTNET_CLI_TELEMETRY_OPTOUT=1
|
||||
|
||||
@@ -16,7 +32,8 @@ override_dh_auto_test:
|
||||
override_dh_clistrip:
|
||||
|
||||
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:
|
||||
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 copr enable -y @dotnet-sig/dotnet \
|
||||
&& 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 \
|
||||
&& mkdir -p ${SOURCE_DIR}/SPECS \
|
||||
&& 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=""
|
||||
fi
|
||||
|
||||
# Create RPM source archive
|
||||
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
|
||||
./create_tarball.sh
|
||||
|
||||
# Set up the build environment Docker image
|
||||
${docker_sudo} docker build ../.. -t "${image_name}" -f ./Dockerfile
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
%endif
|
||||
|
||||
Name: jellyfin
|
||||
Version: 10.2.0
|
||||
Release: 2%{?dist}
|
||||
Version: 10.2.2
|
||||
Release: 1%{?dist}
|
||||
Summary: The Free Software Media Browser
|
||||
License: GPLv2
|
||||
URL: https://jellyfin.media
|
||||
@@ -27,7 +27,7 @@ BuildRequires: libcurl-devel, fontconfig-devel, freetype-devel, openssl-devel,
|
||||
Requires: libcurl, fontconfig, freetype, openssl, glibc libicu
|
||||
# Requirements not packaged in main repos
|
||||
# COPR @dotnet-sig/dotnet
|
||||
BuildRequires: dotnet-sdk-2.2
|
||||
BuildRequires: dotnet-runtime-2.2, dotnet-sdk-2.2
|
||||
# RPMfusion free
|
||||
Requires: ffmpeg
|
||||
|
||||
@@ -49,7 +49,8 @@ Jellyfin is a free software media system that puts you in control of managing an
|
||||
%install
|
||||
export DOTNET_CLI_TELEMETRY_OPTOUT=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 %{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
|
||||
@@ -73,7 +74,6 @@ EOF
|
||||
%{_libdir}/%{name}/jellyfin-web/*
|
||||
%attr(755,root,root) %{_bindir}/%{name}
|
||||
%{_libdir}/%{name}/*.json
|
||||
%{_libdir}/%{name}/*.pdb
|
||||
%{_libdir}/%{name}/*.dll
|
||||
%{_libdir}/%{name}/*.so
|
||||
%{_libdir}/%{name}/*.a
|
||||
@@ -140,6 +140,31 @@ fi
|
||||
%systemd_postun_with_restart jellyfin.service
|
||||
|
||||
%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>
|
||||
- jellyfin:
|
||||
- PR452 Use EF Core for Activity database
|
||||
|
||||
Reference in New Issue
Block a user