mirror of https://github.com/jellyfin/jellyfin.git
Build scripts and build system consolidation.
Squashed commit.
This commit is contained in:
parent
3d867c2c46
commit
399a079dd4
|
@ -3,3 +3,6 @@
|
||||||
Dockerfile
|
Dockerfile
|
||||||
CONTRIBUTORS.md
|
CONTRIBUTORS.md
|
||||||
README.md
|
README.md
|
||||||
|
deployment/*/dist
|
||||||
|
deployment/*/pkg-dist
|
||||||
|
deployment/collect-dist/
|
||||||
|
|
|
@ -9,4 +9,4 @@ steps:
|
||||||
- name: build
|
- name: build
|
||||||
image: microsoft/dotnet:2-sdk
|
image: microsoft/dotnet:2-sdk
|
||||||
commands:
|
commands:
|
||||||
- dotnet publish --configuration release --output /release
|
- dotnet publish --configuration release --output /release Jellyfin.Server
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
!*
|
|
||||||
|
|
||||||
.directory
|
.directory
|
||||||
|
|
||||||
#################
|
#################
|
||||||
|
@ -49,6 +47,8 @@ ProgramData-UI*/
|
||||||
## Ignore Visual Studio temporary files, build results, and
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
## files generated by popular Visual Studio add-ons.
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
|
||||||
|
.vs/
|
||||||
|
|
||||||
# User-specific files
|
# User-specific files
|
||||||
*.suo
|
*.suo
|
||||||
*.user
|
*.user
|
||||||
|
@ -204,7 +204,6 @@ $RECYCLE.BIN/
|
||||||
# Mac crap
|
# Mac crap
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
|
|
||||||
#############
|
#############
|
||||||
## Python
|
## Python
|
||||||
#############
|
#############
|
||||||
|
@ -234,23 +233,32 @@ pip-log.txt
|
||||||
|
|
||||||
#Mr Developer
|
#Mr Developer
|
||||||
.mr.developer.cfg
|
.mr.developer.cfg
|
||||||
/.vs
|
|
||||||
|
|
||||||
##########
|
##########
|
||||||
# Rider
|
# Rider
|
||||||
##########
|
##########
|
||||||
.idea/
|
.idea/
|
||||||
|
|
||||||
|
##########
|
||||||
|
# Visual Studio Code
|
||||||
|
##########
|
||||||
|
.vscode/
|
||||||
|
|
||||||
#########################
|
#########################
|
||||||
# Debian build artifacts
|
# Build artifacts
|
||||||
#########################
|
#########################
|
||||||
|
|
||||||
debian/.debhelper/
|
# Artifacts for debian-x64
|
||||||
debian/*.debhelper
|
deployment/debian-x64/pkg-src/.debhelper/
|
||||||
debian/debhelper-build-stamp
|
deployment/debian-x64/pkg-src/*.debhelper
|
||||||
debian/files
|
deployment/debian-x64/pkg-src/debhelper-build-stamp
|
||||||
debian/jellyfin.substvars
|
deployment/debian-x64/pkg-src/files
|
||||||
debian/jellyfin/
|
deployment/debian-x64/pkg-src/jellyfin.substvars
|
||||||
|
deployment/debian-x64/pkg-src/jellyfin/
|
||||||
# Don't ignore the debian/bin folder
|
# Don't ignore the debian/bin folder
|
||||||
!debian/bin/
|
!deployment/debian-x64/pkg-src/bin/
|
||||||
|
|
||||||
|
deployment/**/dist/
|
||||||
|
deployment/**/pkg-dist/
|
||||||
|
deployment/collect-dist/
|
||||||
|
|
||||||
|
|
24
build-deb.sh
24
build-deb.sh
|
@ -1,24 +0,0 @@
|
||||||
#!/usr/bin/env sh
|
|
||||||
|
|
||||||
# Build a Jellyfin .deb file with Docker on Linux
|
|
||||||
# Places the output .deb file in the parent directory
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o xtrace
|
|
||||||
set -o nounset
|
|
||||||
|
|
||||||
package_temporary_dir="`mktemp -d`"
|
|
||||||
current_user="`whoami`"
|
|
||||||
image_name="jellyfin-debuild"
|
|
||||||
|
|
||||||
cleanup() {
|
|
||||||
set +o errexit
|
|
||||||
docker image rm $image_name --force
|
|
||||||
rm -rf "$package_temporary_dir"
|
|
||||||
}
|
|
||||||
trap cleanup EXIT INT
|
|
||||||
|
|
||||||
docker build . -t "$image_name" -f ./Dockerfile.debian_package
|
|
||||||
docker run --rm -v "$package_temporary_dir:/temp" "$image_name" cp -r /dist /temp/
|
|
||||||
sudo chown -R "$current_user" "$package_temporary_dir"
|
|
||||||
mv "$package_temporary_dir"/dist/*.deb ../
|
|
|
@ -1,37 +0,0 @@
|
||||||
#Allow jellyfin group to start, stop and restart itself
|
|
||||||
Cmnd_Alias RESTARTSERVER_SYSV = /sbin/service jellyfin restart, /usr/sbin/service jellyfin restart
|
|
||||||
Cmnd_Alias STARTSERVER_SYSV = /sbin/service jellyfin start, /usr/sbin/service jellyfin start
|
|
||||||
Cmnd_Alias STOPSERVER_SYSV = /sbin/service jellyfin stop, /usr/sbin/service jellyfin stop
|
|
||||||
Cmnd_Alias RESTARTSERVER_SYSTEMD = /usr/bin/systemctl restart jellyfin, /bin/systemctl restart jellyfin
|
|
||||||
Cmnd_Alias STARTSERVER_SYSTEMD = /usr/bin/systemctl start jellyfin, /bin/systemctl start jellyfin
|
|
||||||
Cmnd_Alias STOPSERVER_SYSTEMD = /usr/bin/systemctl stop jellyfin, /bin/systemctl stop jellyfin
|
|
||||||
Cmnd_Alias RESTARTSERVER_INITD = /etc/init.d/jellyfin restart
|
|
||||||
Cmnd_Alias STARTSERVER_INITD = /etc/init.d/jellyfin start
|
|
||||||
Cmnd_Alias STOPSERVER_INITD = /etc/init.d/jellyfin stop
|
|
||||||
|
|
||||||
|
|
||||||
%jellyfin ALL=(ALL) NOPASSWD: RESTARTSERVER_SYSV
|
|
||||||
%jellyfin ALL=(ALL) NOPASSWD: STARTSERVER_SYSV
|
|
||||||
%jellyfin ALL=(ALL) NOPASSWD: STOPSERVER_SYSV
|
|
||||||
%jellyfin ALL=(ALL) NOPASSWD: RESTARTSERVER_SYSTEMD
|
|
||||||
%jellyfin ALL=(ALL) NOPASSWD: STARTSERVER_SYSTEMD
|
|
||||||
%jellyfin ALL=(ALL) NOPASSWD: STOPSERVER_SYSTEMD
|
|
||||||
%jellyfin ALL=(ALL) NOPASSWD: RESTARTSERVER_INITD
|
|
||||||
%jellyfin ALL=(ALL) NOPASSWD: STARTSERVER_INITD
|
|
||||||
%jellyfin ALL=(ALL) NOPASSWD: STOPSERVER_INITD
|
|
||||||
|
|
||||||
Defaults!RESTARTSERVER_SYSV !requiretty
|
|
||||||
Defaults!STARTSERVER_SYSV !requiretty
|
|
||||||
Defaults!STOPSERVER_SYSV !requiretty
|
|
||||||
Defaults!RESTARTSERVER_SYSTEMD !requiretty
|
|
||||||
Defaults!STARTSERVER_SYSTEMD !requiretty
|
|
||||||
Defaults!STOPSERVER_SYSTEMD !requiretty
|
|
||||||
Defaults!RESTARTSERVER_INITD !requiretty
|
|
||||||
Defaults!STARTSERVER_INITD !requiretty
|
|
||||||
Defaults!STOPSERVER_INITD !requiretty
|
|
||||||
|
|
||||||
#Allow the server to mount iso images
|
|
||||||
%jellyfin ALL=(ALL) NOPASSWD: /bin/mount
|
|
||||||
%jellyfin ALL=(ALL) NOPASSWD: /bin/umount
|
|
||||||
|
|
||||||
Defaults:%jellyfin !requiretty
|
|
|
@ -1,18 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
NAME=jellyfin
|
|
||||||
|
|
||||||
restart_cmds=("s6-svc -t /var/run/s6/services/${NAME}" \
|
|
||||||
"systemctl restart ${NAME}" \
|
|
||||||
"service ${NAME} restart" \
|
|
||||||
"/etc/init.d/${NAME} restart")
|
|
||||||
|
|
||||||
for restart_cmd in "${restart_cmds[@]}"; do
|
|
||||||
cmd=$(echo "$restart_cmd" | awk '{print $1}')
|
|
||||||
cmd_loc=$(command -v ${cmd})
|
|
||||||
if [[ -n "$cmd_loc" ]]; then
|
|
||||||
restart_cmd=$(echo "$restart_cmd" | sed -e "s%${cmd}%${cmd_loc}%")
|
|
||||||
echo "sleep 2; sudo $restart_cmd > /dev/null 2>&1" | at now > /dev/null 2>&1
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
done
|
|
|
@ -1 +0,0 @@
|
||||||
tar-ignore = ".git*"
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
# Build scripts
|
||||||
|
|
||||||
|
All `build.sh` and `package.sh` scripts are for *nix platforms (or WSL on Windows 10).
|
||||||
|
|
||||||
|
After running both, check the `*/pkg-dist/` folders for the archives and packages.
|
||||||
|
|
||||||
|
`build_all.sh` will invoke every build and package script.
|
||||||
|
Use `collect_all.sh` to copy all artifact to one directory for easy uploading.
|
|
@ -0,0 +1,23 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Execute all build.sh and package.sh and sign.sh scripts in every folder. In that order. Script should check for artifacts themselves.
|
||||||
|
echo "Running for platforms '$@'."
|
||||||
|
for directory in */ ; do
|
||||||
|
platform=`basename "${directory}"`
|
||||||
|
if [[ $@ == *"$platform"* || $@ = *"all"* ]]; then
|
||||||
|
echo "Processing ${platform}"
|
||||||
|
pushd "$platform"
|
||||||
|
if [ -f build.sh ]; then
|
||||||
|
echo ./build.sh
|
||||||
|
fi
|
||||||
|
if [ -f package.sh ]; then
|
||||||
|
echo ./package.sh
|
||||||
|
fi
|
||||||
|
if [ -f sign.sh ]; then
|
||||||
|
echo ./sign.sh
|
||||||
|
fi
|
||||||
|
popd
|
||||||
|
else
|
||||||
|
echo "Skipping $platform."
|
||||||
|
fi
|
||||||
|
done
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Execute every clean.sh scripts in every folder.
|
||||||
|
echo "Running for platforms '$@'."
|
||||||
|
for directory in */ ; do
|
||||||
|
platform=`basename "${directory}"`
|
||||||
|
if [[ $@ == *"$platform"* || $@ = *"all"* ]]; then
|
||||||
|
echo "Processing ${platform}"
|
||||||
|
pushd "$platform"
|
||||||
|
if [ -f clean.sh ]; then
|
||||||
|
echo ./clean.sh
|
||||||
|
fi
|
||||||
|
popd
|
||||||
|
else
|
||||||
|
echo "Skipping $platform."
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
rm -rf ./collect-dist
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ..`
|
||||||
|
|
||||||
|
COLLECT_DIR="./collect-dist"
|
||||||
|
|
||||||
|
mkdir -p ./collect-dist
|
||||||
|
|
||||||
|
DIRS=`find . -type d -name "pkg-dist"`
|
||||||
|
|
||||||
|
while read directory
|
||||||
|
do
|
||||||
|
echo "Collecting everything from '$directory'.."
|
||||||
|
PLATFORM=$(basename "$(dirname "$directory")")
|
||||||
|
# Copy all artifacts with extensions tar.gz, deb, exe, zip, rpm and add the platform name to resolve any duplicates.
|
||||||
|
find $directory \( -name "jellyfin*.tar.gz" -o -name "jellyfin*.deb" -o -name "jellyfin*.rpm" -o -name "jellyfin*.zip" -o -name "jellyfin*.exe" \) -exec sh -c 'cp "$1" "'${COLLECT_DIR}'/jellyfin_'${PLATFORM}'_${1#*jellyfin_}"' _ {} \;
|
||||||
|
|
||||||
|
done <<< "${DIRS}"
|
|
@ -0,0 +1,108 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
CYAN='\033[0;36m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
DEFAULT_BUILD_CONTEXT="../.."
|
||||||
|
DEFAULT_ROOT="."
|
||||||
|
DEFAULT_DOTNETRUNTIME="framework"
|
||||||
|
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`
|
||||||
|
|
||||||
|
# Run a build
|
||||||
|
build_jellyfin()
|
||||||
|
(
|
||||||
|
ROOT=${1-$DEFAULT_ROOT}
|
||||||
|
CONFIG=${2-$DEFAULT_CONFIG}
|
||||||
|
DOTNETRUNTIME=${3-$DEFAULT_DOTNETRUNTIME}
|
||||||
|
OUTPUT_DIR=${4-$DEFAULT_OUTPUT_DIR}
|
||||||
|
|
||||||
|
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}"
|
||||||
|
else
|
||||||
|
dotnet publish "${ROOT}" --configuration "${CONFIG}" --output="${OUTPUT_DIR}" --self-contained --runtime ${DOTNETRUNTIME}
|
||||||
|
fi
|
||||||
|
EXIT_CODE=$?
|
||||||
|
if [ $EXIT_CODE -eq 0 ]; then
|
||||||
|
echo -e "${GREEN}[DONE] Build jellyfin in '${ROOT}' for ${DOTNETRUNTIME} with configuration ${CONFIG} and output directory '${OUTPUT_DIR}' complete.${NC}"
|
||||||
|
else
|
||||||
|
echo -e "${RED}[FAIL] Build jellyfin in '${ROOT}' for ${DOTNETRUNTIME} with configuration ${CONFIG} and output directory '${OUTPUT_DIR}' FAILED.${NC}"
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
|
||||||
|
# Run a docker
|
||||||
|
build_jellyfin_docker()
|
||||||
|
(
|
||||||
|
BUILD_CONTEXT=${1-$DEFAULT_BUILD_CONTEXT}
|
||||||
|
DOCKERFILE=${2-$DEFAULT_DOCKERFILE}
|
||||||
|
IMAGE_TAG=${3-$DEFAULT_IMAGE_TAG}
|
||||||
|
|
||||||
|
echo -e "${CYAN}Building jellyfin docker image in '${ROOT}' with Dockerfile ${CONFIG} and tag '${IMAGE_TAG}'.${NC}"
|
||||||
|
docker build -t ${IMAGE_TAG} -f ${DOCKERFILE} ${ROOT}
|
||||||
|
EXIT_CODE=$?
|
||||||
|
if [ $EXIT_CODE -eq 0 ]; then
|
||||||
|
echo -e "${GREEN}[DONE] Building jellyfin docker image in '${ROOT}' with Dockerfile ${CONFIG} and tag '${IMAGE_TAG}' complete.${NC}"
|
||||||
|
else
|
||||||
|
echo -e "${RED}[FAIL] Building jellyfin docker image in '${ROOT}' with Dockerfile ${CONFIG} and tag '${IMAGE_TAG}' FAILED.${NC}"
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
|
||||||
|
# Clean a build
|
||||||
|
clean_jellyfin()
|
||||||
|
(
|
||||||
|
local ROOT=${1-$DEFAULT_ROOT}
|
||||||
|
local CONFIG=${2-$DEFAULT_CONFIG}
|
||||||
|
local OUTPUT_DIR=${3-$DEFAULT_OUTPUT_DIR}
|
||||||
|
local PKG_DIR=${4-$DEFAULT_PKG_DIR}
|
||||||
|
echo -e "${CYAN}Cleaning jellyfin in '${ROOT}'' with configuration ${CONFIG} and output directory '${OUTPUT_DIR}'.${NC}"
|
||||||
|
echo -e "${CYAN}Deleting '${OUTPUT_DIR}'${NC}"
|
||||||
|
rm -rf "$OUTPUT_DIR"
|
||||||
|
echo -e "${CYAN}Deleting '${PKG_DIR}'${NC}"
|
||||||
|
rm -rf "$PKG_DIR"
|
||||||
|
dotnet clean "${ROOT}" -maxcpucount:1 --configuration ${CONFIG}
|
||||||
|
local EXIT_CODE=$?
|
||||||
|
if [ $EXIT_CODE -eq 0 ]; then
|
||||||
|
echo -e "${GREEN}[DONE] Clean jellyfin in '${ROOT}' with configuration ${CONFIG} and output directory '${OUTPUT_DIR}' complete.${NC}"
|
||||||
|
else
|
||||||
|
echo -e "${RED}[FAIL] Clean jellyfin in '${ROOT}' with configuration ${CONFIG} and output directory '${OUTPUT_DIR}' failed.${NC}"
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
|
||||||
|
# Parse the version from the AssemblyVersion
|
||||||
|
get_version()
|
||||||
|
(
|
||||||
|
local ROOT=${1-$DEFAULT_ROOT}
|
||||||
|
grep "AssemblyVersion" ${ROOT}/SharedVersion.cs | sed -E 's/\[assembly: ?AssemblyVersion\("([0-9\.]+)"\)\]/\1/' | sed -E 's/.0$//'
|
||||||
|
)
|
||||||
|
|
||||||
|
# Packages the output folder into an archive.
|
||||||
|
package_portable()
|
||||||
|
(
|
||||||
|
local ROOT=${1-$DEFAULT_ROOT}
|
||||||
|
local OUTPUT_DIR=${2-$DEFAULT_OUTPUT_DIR}
|
||||||
|
local PKG_DIR=${3-$DEFAULT_PKG_DIR}
|
||||||
|
# Package portable build result
|
||||||
|
if [ -d ${OUTPUT_DIR} ]; then
|
||||||
|
echo -e "${CYAN}Packaging build in '${OUTPUT_DIR}' for `basename "${OUTPUT_DIR}"` to '${PKG_DIR}' with root '${ROOT}'.${NC}"
|
||||||
|
mkdir -p ${PKG_DIR}
|
||||||
|
tar -zcvf "${PKG_DIR}/`basename "${OUTPUT_DIR}"`.portable.tar.gz" -C "`dirname "${OUTPUT_DIR}"`" "`basename "${OUTPUT_DIR}"`"
|
||||||
|
local EXIT_CODE=$?
|
||||||
|
if [ $EXIT_CODE -eq 0 ]; then
|
||||||
|
echo -e "${GREEN}[DONE] Packaging build in '${OUTPUT_DIR}' for `basename "${OUTPUT_DIR}"` to '${PKG_DIR}' with root '${ROOT}' complete.${NC}"
|
||||||
|
else
|
||||||
|
echo -e "${RED}[FAIL] Packaging build in '${OUTPUT_DIR}' for `basename "${OUTPUT_DIR}"` to '${PKG_DIR}' with root '${ROOT}' FAILED.${NC}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e "${RED}[FAIL] Build artifacts do not exist for ${OUTPUT_DIR}. Run build.sh first.${NC}"
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
FROM debian:9
|
FROM debian:9
|
||||||
|
ARG SOURCEDIR=/repo
|
||||||
|
ENV DEB_BUILD_OPTIONS=noddebs
|
||||||
|
|
||||||
# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
|
# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
|
@ -11,12 +13,11 @@ RUN apt-get update \
|
||||||
&& chown root:root /etc/apt/sources.list.d/microsoft-prod.list \
|
&& chown root:root /etc/apt/sources.list.d/microsoft-prod.list \
|
||||||
&& apt-get update
|
&& apt-get update
|
||||||
|
|
||||||
WORKDIR /repo
|
WORKDIR ${SOURCEDIR}
|
||||||
COPY . .
|
COPY . .
|
||||||
|
COPY ./deployment/debian-x64/pkg-src ./debian
|
||||||
|
|
||||||
RUN yes|mk-build-deps -i \
|
RUN yes | mk-build-deps -i debian/control \
|
||||||
&& dpkg-buildpackage -us -uc \
|
&& dpkg-buildpackage -us -uc
|
||||||
&& mkdir /dist \
|
|
||||||
&& mv /jellyfin*deb /dist
|
|
||||||
|
|
||||||
WORKDIR /dist
|
WORKDIR /
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
clean_jellyfin ../.. Release `pwd`/dist/jellyfin_${VERSION}
|
|
@ -0,0 +1,33 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
# TODO get the version in the package automatically. And using the changelog to decide the debian package suffix version.
|
||||||
|
|
||||||
|
# Build a Jellyfin .deb file with Docker on Linux
|
||||||
|
# Places the output .deb file in the parent directory
|
||||||
|
|
||||||
|
package_temporary_dir="`pwd`/pkg-dist-tmp"
|
||||||
|
output_dir="`pwd`/pkg-dist"
|
||||||
|
current_user="`whoami`"
|
||||||
|
image_name="jellyfin-debuild"
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
set +o errexit
|
||||||
|
docker image rm $image_name --force
|
||||||
|
rm -rf "$package_temporary_dir"
|
||||||
|
}
|
||||||
|
trap cleanup EXIT INT
|
||||||
|
|
||||||
|
docker build ../.. -t "$image_name" -f ./Dockerfile --build-arg SOURCEDIR="/jellyfin-${VERSION}"
|
||||||
|
mkdir -p "$package_temporary_dir"
|
||||||
|
mkdir -p "$output_dir"
|
||||||
|
docker run --rm -v "$package_temporary_dir:/temp" "$image_name" sh -c 'find / -maxdepth 1 -type f -name "jellyfin*" -exec mv {} /temp \;'
|
||||||
|
chown -R "$current_user" "$package_temporary_dir"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
# Some platforms need this to chown the file properly. (Platforms with native docker, not just the client)
|
||||||
|
sudo chown -R "$current_user" "$package_temporary_dir"
|
||||||
|
fi
|
||||||
|
mv "$package_temporary_dir"/* "$output_dir"
|
|
@ -3,4 +3,4 @@ pristine-tar = False
|
||||||
cleaner = fakeroot debian/rules clean
|
cleaner = fakeroot debian/rules clean
|
||||||
|
|
||||||
[import-orig]
|
[import-orig]
|
||||||
filter = [ ".git*", ".hg*" ]
|
filter = [ ".git*", ".hg*", ".vs*", ".vscode*" ]
|
|
@ -2,7 +2,7 @@
|
||||||
CONFIG := Release
|
CONFIG := Release
|
||||||
TERM := xterm
|
TERM := xterm
|
||||||
SHELL := /bin/bash
|
SHELL := /bin/bash
|
||||||
DOTNETRUNTIME := linux-x64
|
DOTNETRUNTIME := debian-x64
|
||||||
export DH_VERBOSE=1
|
export DH_VERBOSE=1
|
||||||
export DOTNET_CLI_TELEMETRY_OPTOUT=1
|
export DOTNET_CLI_TELEMETRY_OPTOUT=1
|
||||||
|
|
||||||
|
@ -16,8 +16,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)
|
dotnet publish --configuration $(CONFIG) --output='$(CURDIR)/usr/lib/jellyfin/bin' --self-contained --runtime $(DOTNETRUNTIME) Jellyfin.Server
|
||||||
|
|
||||||
override_dh_auto_clean:
|
override_dh_auto_clean:
|
||||||
dotnet clean -maxcpucount:1 --configuration $(CONFIG) || true
|
dotnet clean -maxcpucount:1 --configuration $(CONFIG) Jellyfin.Server || true
|
||||||
rm -rf '$(CURDIR)/usr'
|
rm -rf '$(CURDIR)/usr'
|
|
@ -0,0 +1,11 @@
|
||||||
|
tar-ignore='.git*'
|
||||||
|
tar-ignore='**/.git'
|
||||||
|
tar-ignore='**/.hg'
|
||||||
|
tar-ignore='**/.vs'
|
||||||
|
tar-ignore='**/.vscode'
|
||||||
|
tar-ignore='deployment'
|
||||||
|
tar-ignore='**/bin'
|
||||||
|
tar-ignore='**/obj'
|
||||||
|
tar-ignore='**/.nuget'
|
||||||
|
tar-ignore='*.deb'
|
||||||
|
tar-ignore='ThirdParty'
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
build_jellyfin ../../Jellyfin.Server Release debian-x64 `pwd`/dist/jellyfin_${VERSION}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
clean_jellyfin ../.. Release `pwd`/dist/jellyfin_${VERSION}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
package_portable ../.. `pwd`/dist/jellyfin_${VERSION}
|
|
@ -15,7 +15,7 @@ WORKDIR /repo
|
||||||
COPY . .
|
COPY . .
|
||||||
RUN export DOTNET_CLI_TELEMETRY_OPTOUT=1 \
|
RUN export DOTNET_CLI_TELEMETRY_OPTOUT=1 \
|
||||||
&& dotnet clean \
|
&& dotnet clean \
|
||||||
&& dotnet publish --configuration release --output /jellyfin
|
&& dotnet publish --configuration release --output /jellyfin Jellyfin.Server
|
||||||
|
|
||||||
|
|
||||||
FROM microsoft/dotnet:${DOTNET_VERSION}-runtime
|
FROM microsoft/dotnet:${DOTNET_VERSION}-runtime
|
||||||
|
@ -24,5 +24,5 @@ COPY --from=ffmpeg /ffmpeg-bin/* /usr/bin/
|
||||||
EXPOSE 8096
|
EXPOSE 8096
|
||||||
VOLUME /config /media
|
VOLUME /config /media
|
||||||
RUN apt update \
|
RUN apt update \
|
||||||
&& apt install -y libfontconfig1 # needed for Skia
|
&& apt install -y libfontconfig1 --no-install-recommends # needed for Skia
|
||||||
ENTRYPOINT dotnet /jellyfin/jellyfin.dll -programdata /config
|
ENTRYPOINT dotnet /jellyfin/jellyfin.dll -programdata /config
|
|
@ -6,7 +6,7 @@ COPY . .
|
||||||
RUN export DOTNET_CLI_TELEMETRY_OPTOUT=1 \
|
RUN export DOTNET_CLI_TELEMETRY_OPTOUT=1 \
|
||||||
&& find . -type f -exec sed -i 's/netcoreapp2.1/netcoreapp3.0/g' {} \; \
|
&& find . -type f -exec sed -i 's/netcoreapp2.1/netcoreapp3.0/g' {} \; \
|
||||||
&& dotnet clean \
|
&& dotnet clean \
|
||||||
&& dotnet publish --configuration release --output /jellyfin
|
&& dotnet publish --configuration release --output /jellyfin Jellyfin.Server
|
||||||
|
|
||||||
FROM microsoft/dotnet:${DOTNET_VERSION}-runtime
|
FROM microsoft/dotnet:${DOTNET_VERSION}-runtime
|
||||||
COPY --from=builder /jellyfin /jellyfin
|
COPY --from=builder /jellyfin /jellyfin
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
build_jellyfin_docker ../.. Dockerfile jellyfin:${VERSION}
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
#Magic word framework will create a non self contained build
|
||||||
|
build_jellyfin ../../Jellyfin.Server Release framework `pwd`/dist/jellyfin_${VERSION}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
clean_jellyfin ../.. Release `pwd`/dist/jellyfin_${VERSION}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
package_portable ../.. `pwd`/dist/jellyfin_${VERSION}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
build_jellyfin ../../Jellyfin.Server Release linux-x64 `pwd`/dist/jellyfin_${VERSION}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
clean_jellyfin ../.. Release `pwd`/dist/jellyfin_${VERSION}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
package_portable ../.. `pwd`/dist/jellyfin_${VERSION}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
build_jellyfin ../../Jellyfin.Server Release osx-x64 `pwd`/dist/jellyfin_${VERSION}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
clean_jellyfin ../.. Release `pwd`/dist/jellyfin_${VERSION}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
package_portable ../.. `pwd`/dist/jellyfin_${VERSION}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
build_jellyfin ../../Jellyfin.Server Release ubuntu-x64 `pwd`/dist/jellyfin_${VERSION}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
clean_jellyfin ../.. Release `pwd`/dist/jellyfin_${VERSION}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
package_portable ../.. `pwd`/dist/jellyfin_${VERSION}
|
|
@ -0,0 +1,15 @@
|
||||||
|
# docker-templates
|
||||||
|
|
||||||
|
### Installation:
|
||||||
|
|
||||||
|
Open unRaid GUI (at least unRaid 6.5)
|
||||||
|
|
||||||
|
Click on the Docker tab
|
||||||
|
|
||||||
|
Add the following line under "Template Repositories"
|
||||||
|
|
||||||
|
https://github.com/jellyfin/jellyfin/blob/master/deployment/unraid/docker-templates
|
||||||
|
|
||||||
|
Click save than click on Add Container and select jellyfin.
|
||||||
|
|
||||||
|
Adjust to your paths to your liking and off you go!
|
|
@ -0,0 +1,51 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Containers>
|
||||||
|
<TemplateURL>https://raw.githubusercontent.com/jellyfin/jellyfin/deployment/unraid/docker-templates/jellyfin.xml</TemplateURL>
|
||||||
|
<Beta>False</Beta>
|
||||||
|
<Category>MediaApp:Video MediaApp:Music MediaApp:Photos MediaServer:Video MediaServer:Music MediaServer:Photos</Category>
|
||||||
|
<Name>JellyFin</Name>
|
||||||
|
<Description>
|
||||||
|
JellyFin is The Free Software Media Browser Converted By Community Applications Always verify this template (and values) against the dockerhub support page for the container!![br][br]
|
||||||
|
You can add as many mount points as needed for recordings, movies ,etc. [br][br]
|
||||||
|
[b][span style='color: #E80000;']Directions:[/span][/b][br]
|
||||||
|
[b]/config[/b] : this is where Jellyfin will store it's databases and configuration.[br][br]
|
||||||
|
[b]Port[/b] : This is the default port for Jellyfin. (Will add ssl port later)[br][br]
|
||||||
|
[b]Media[/b] : This is the mounting point of your media. When you access it in Jellyfin it will be /media or whatever you chose for a mount point
|
||||||
|
[b]Tip:[/b] You can add more volume mappings if you wish Jellyfin has access to it.
|
||||||
|
</Description>
|
||||||
|
<Overview>
|
||||||
|
Jellyfin Server is a home media server built on top of other popular open source technologies such as Service Stack, jQuery, jQuery mobile, and Mono and will remain completely free!
|
||||||
|
</Overview>
|
||||||
|
<Support>https://www.reddit.com/r/jellyfin/</Support>
|
||||||
|
<Registry>https://hub.docker.com/r/jellyfin/jellyfin/</Registry>
|
||||||
|
<GitHub>https://github.com/jellyfin/jellyfin/></GitHub>
|
||||||
|
<Repository>jellyfin/jellyfin</Repository>
|
||||||
|
<Project>https://jellyfin.media/</Project>
|
||||||
|
<BindTime>true</BindTime>
|
||||||
|
<Privileged>false</Privileged>
|
||||||
|
<Networking>
|
||||||
|
<Mode>host</Mode>
|
||||||
|
<Publish>
|
||||||
|
<Port>
|
||||||
|
<HostPort>8096</HostPort>
|
||||||
|
<ContainerPort>8096</ContainerPort>
|
||||||
|
<Protocol>tcp</Protocol>
|
||||||
|
</Port>
|
||||||
|
</Publish>
|
||||||
|
</Networking>
|
||||||
|
<Data>
|
||||||
|
<Volume>
|
||||||
|
<HostDir>/mnt/cache/appdata/config</HostDir>
|
||||||
|
<ContainerDir>/config</ContainerDir>
|
||||||
|
<Mode>rw</Mode>
|
||||||
|
</Volume>
|
||||||
|
<Volume>
|
||||||
|
<HostDir>/mnt/user</HostDir>
|
||||||
|
<ContainerDir>/media</ContainerDir>
|
||||||
|
<Mode>rw</Mode>
|
||||||
|
</Volume>
|
||||||
|
</Data>
|
||||||
|
<WebUI>http://[IP]:[PORT:8096]/</WebUI>
|
||||||
|
<Icon>https://raw.githubusercontent.com/binhex/docker-templates/master/binhex/images/emby-icon.png</Icon>
|
||||||
|
<ExtraParams></ExtraParams>
|
||||||
|
</Containers>
|
|
@ -1,110 +1,110 @@
|
||||||
[CmdletBinding()]
|
[CmdletBinding()]
|
||||||
param(
|
param(
|
||||||
[switch]$InstallFFMPEG,
|
[switch]$InstallFFMPEG,
|
||||||
[switch]$InstallNSSM,
|
[switch]$InstallNSSM,
|
||||||
[switch]$GenerateZip,
|
[switch]$GenerateZip,
|
||||||
[string]$InstallLocation = "$Env:AppData/Jellyfin-Server/",
|
[string]$InstallLocation = "$Env:AppData/Jellyfin-Server/",
|
||||||
[ValidateSet('Debug','Release')][string]$BuildType = 'Release',
|
[ValidateSet('Debug','Release')][string]$BuildType = 'Release',
|
||||||
[ValidateSet('Quiet','Minimal', 'Normal')][string]$DotNetVerbosity = 'Minimal',
|
[ValidateSet('Quiet','Minimal', 'Normal')][string]$DotNetVerbosity = 'Minimal',
|
||||||
[ValidateSet('win','win7', 'win8','win81','win10')][string]$WindowsVersion = 'win',
|
[ValidateSet('win','win7', 'win8','win81','win10')][string]$WindowsVersion = 'win',
|
||||||
[ValidateSet('x64','x86', 'arm', 'arm64')][string]$Architecture = 'x64'
|
[ValidateSet('x64','x86', 'arm', 'arm64')][string]$Architecture = 'x64'
|
||||||
)
|
)
|
||||||
|
|
||||||
#PowershellCore and *nix check to make determine which temp dir to use.
|
#PowershellCore and *nix check to make determine which temp dir to use.
|
||||||
if(($PSVersionTable.PSEdition -eq 'Core') -and (-not $IsWindows)){
|
if(($PSVersionTable.PSEdition -eq 'Core') -and (-not $IsWindows)){
|
||||||
$TempDir = mktemp -d
|
$TempDir = mktemp -d
|
||||||
}else{
|
}else{
|
||||||
$TempDir = $env:Temp
|
$TempDir = $env:Temp
|
||||||
}
|
}
|
||||||
|
|
||||||
function Build-JellyFin {
|
function Build-JellyFin {
|
||||||
if(($Architecture -eq 'arm64') -and ($WindowsVersion -ne 'win10')){
|
if(($Architecture -eq 'arm64') -and ($WindowsVersion -ne 'win10')){
|
||||||
Write-Error "arm64 only supported with Windows10 Version"
|
Write-Error "arm64 only supported with Windows10 Version"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
if(($Architecture -eq 'arm') -and ($WindowsVersion -notin @('win10','win81','win8'))){
|
if(($Architecture -eq 'arm') -and ($WindowsVersion -notin @('win10','win81','win8'))){
|
||||||
Write-Error "arm only supported with Windows 8 or higher"
|
Write-Error "arm only supported with Windows 8 or higher"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
dotnet publish -c $BuildType -r "$windowsversion-$Architecture" MediaBrowser.sln -o $InstallLocation -v $DotNetVerbosity
|
dotnet publish -c $BuildType -r "$windowsversion-$Architecture" MediaBrowser.sln -o $InstallLocation -v $DotNetVerbosity
|
||||||
}
|
}
|
||||||
|
|
||||||
function Install-FFMPEG {
|
function Install-FFMPEG {
|
||||||
param(
|
param(
|
||||||
[string]$InstallLocation,
|
[string]$InstallLocation,
|
||||||
[string]$Architecture
|
[string]$Architecture
|
||||||
)
|
)
|
||||||
Write-Verbose "Checking Architecture"
|
Write-Verbose "Checking Architecture"
|
||||||
if($Architecture -notin @('x86','x64')){
|
if($Architecture -notin @('x86','x64')){
|
||||||
Write-Warning "No builds available for your selected architecture of $Architecture"
|
Write-Warning "No builds available for your selected architecture of $Architecture"
|
||||||
Write-Warning "FFMPEG will not be installed"
|
Write-Warning "FFMPEG will not be installed"
|
||||||
}elseif($Architecture -eq 'x64'){
|
}elseif($Architecture -eq 'x64'){
|
||||||
Write-Verbose "Downloading 64 bit FFMPEG"
|
Write-Verbose "Downloading 64 bit FFMPEG"
|
||||||
Invoke-WebRequest -Uri https://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-4.1-win64-static.zip -UseBasicParsing -OutFile "$tempdir/fmmpeg.zip" | Write-Verbose
|
Invoke-WebRequest -Uri https://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-4.1-win64-static.zip -UseBasicParsing -OutFile "$tempdir/fmmpeg.zip" | Write-Verbose
|
||||||
}else{
|
}else{
|
||||||
Write-Verbose "Downloading 32 bit FFMPEG"
|
Write-Verbose "Downloading 32 bit FFMPEG"
|
||||||
Invoke-WebRequest -Uri https://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-4.1-win32-static.zip -UseBasicParsing -OutFile "$tempdir/fmmpeg.zip" | Write-Verbose
|
Invoke-WebRequest -Uri https://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-4.1-win32-static.zip -UseBasicParsing -OutFile "$tempdir/fmmpeg.zip" | Write-Verbose
|
||||||
}
|
}
|
||||||
|
|
||||||
Expand-Archive "$tempdir/fmmpeg.zip" -DestinationPath "$tempdir/ffmpeg/" | Write-Verbose
|
Expand-Archive "$tempdir/fmmpeg.zip" -DestinationPath "$tempdir/ffmpeg/" | Write-Verbose
|
||||||
if($Architecture -eq 'x64'){
|
if($Architecture -eq 'x64'){
|
||||||
Write-Verbose "Copying Binaries to Jellyfin location"
|
Write-Verbose "Copying Binaries to Jellyfin location"
|
||||||
Get-ChildItem "$tempdir/ffmpeg/ffmpeg-4.1-win64-static/bin" | ForEach-Object {
|
Get-ChildItem "$tempdir/ffmpeg/ffmpeg-4.1-win64-static/bin" | ForEach-Object {
|
||||||
Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
|
Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
Write-Verbose "Copying Binaries to Jellyfin location"
|
Write-Verbose "Copying Binaries to Jellyfin location"
|
||||||
Get-ChildItem "$tempdir/ffmpeg/ffmpeg-4.1-win32-static/bin" | ForEach-Object {
|
Get-ChildItem "$tempdir/ffmpeg/ffmpeg-4.1-win32-static/bin" | ForEach-Object {
|
||||||
Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
|
Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Remove-Item "$tempdir/ffmpeg/" -Recurse -Force -ErrorAction Continue | Write-Verbose
|
Remove-Item "$tempdir/ffmpeg/" -Recurse -Force -ErrorAction Continue | Write-Verbose
|
||||||
Remove-Item "$tempdir/fmmpeg.zip" -Force -ErrorAction Continue | Write-Verbose
|
Remove-Item "$tempdir/fmmpeg.zip" -Force -ErrorAction Continue | Write-Verbose
|
||||||
}
|
}
|
||||||
|
|
||||||
function Install-NSSM {
|
function Install-NSSM {
|
||||||
param(
|
param(
|
||||||
[string]$InstallLocation,
|
[string]$InstallLocation,
|
||||||
[string]$Architecture
|
[string]$Architecture
|
||||||
)
|
)
|
||||||
Write-Verbose "Checking Architecture"
|
Write-Verbose "Checking Architecture"
|
||||||
if($Architecture -notin @('x86','x64')){
|
if($Architecture -notin @('x86','x64')){
|
||||||
Write-Warning "No builds available for your selected architecture of $Architecture"
|
Write-Warning "No builds available for your selected architecture of $Architecture"
|
||||||
Write-Warning "NSSM will not be installed"
|
Write-Warning "NSSM will not be installed"
|
||||||
}else{
|
}else{
|
||||||
Write-Verbose "Downloading NSSM"
|
Write-Verbose "Downloading NSSM"
|
||||||
Invoke-WebRequest -Uri https://nssm.cc/ci/nssm-2.24-101-g897c7ad.zip -UseBasicParsing -OutFile "$tempdir/nssm.zip" | Write-Verbose
|
Invoke-WebRequest -Uri https://nssm.cc/ci/nssm-2.24-101-g897c7ad.zip -UseBasicParsing -OutFile "$tempdir/nssm.zip" | Write-Verbose
|
||||||
}
|
}
|
||||||
|
|
||||||
Expand-Archive "$tempdir/nssm.zip" -DestinationPath "$tempdir/nssm/" | Write-Verbose
|
Expand-Archive "$tempdir/nssm.zip" -DestinationPath "$tempdir/nssm/" | Write-Verbose
|
||||||
if($Architecture -eq 'x64'){
|
if($Architecture -eq 'x64'){
|
||||||
Write-Verbose "Copying Binaries to Jellyfin location"
|
Write-Verbose "Copying Binaries to Jellyfin location"
|
||||||
Get-ChildItem "$tempdir/nssm/nssm-2.24-101-g897c7ad/win64" | ForEach-Object {
|
Get-ChildItem "$tempdir/nssm/nssm-2.24-101-g897c7ad/win64" | ForEach-Object {
|
||||||
Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
|
Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
Write-Verbose "Copying Binaries to Jellyfin location"
|
Write-Verbose "Copying Binaries to Jellyfin location"
|
||||||
Get-ChildItem "$tempdir/nssm/nssm-2.24-101-g897c7ad/win32" | ForEach-Object {
|
Get-ChildItem "$tempdir/nssm/nssm-2.24-101-g897c7ad/win32" | ForEach-Object {
|
||||||
Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
|
Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Remove-Item "$tempdir/nssm/" -Recurse -Force -ErrorAction Continue | Write-Verbose
|
Remove-Item "$tempdir/nssm/" -Recurse -Force -ErrorAction Continue | Write-Verbose
|
||||||
Remove-Item "$tempdir/nssm.zip" -Force -ErrorAction Continue | Write-Verbose
|
Remove-Item "$tempdir/nssm.zip" -Force -ErrorAction Continue | Write-Verbose
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Verbose "Starting Build Process: Selected Environment is $WindowsVersion-$Architecture"
|
Write-Verbose "Starting Build Process: Selected Environment is $WindowsVersion-$Architecture"
|
||||||
Build-JellyFin
|
Build-JellyFin
|
||||||
if($InstallFFMPEG.IsPresent -or ($InstallFFMPEG -eq $true)){
|
if($InstallFFMPEG.IsPresent -or ($InstallFFMPEG -eq $true)){
|
||||||
Write-Verbose "Starting FFMPEG Install"
|
Write-Verbose "Starting FFMPEG Install"
|
||||||
Install-FFMPEG $InstallLocation $Architecture
|
Install-FFMPEG $InstallLocation $Architecture
|
||||||
}
|
}
|
||||||
if($InstallNSSM.IsPresent -or ($InstallNSSM -eq $true)){
|
if($InstallNSSM.IsPresent -or ($InstallNSSM -eq $true)){
|
||||||
Write-Verbose "Starting NSSM Install"
|
Write-Verbose "Starting NSSM Install"
|
||||||
Install-NSSM $InstallLocation $Architecture
|
Install-NSSM $InstallLocation $Architecture
|
||||||
}
|
}
|
||||||
Copy-Item .\install-jellyfin.ps1 $InstallLocation\install-jellyfin.ps1
|
Copy-Item .\install-jellyfin.ps1 $InstallLocation\install-jellyfin.ps1
|
||||||
Copy-Item .\install.bat $InstallLocation\install.bat
|
Copy-Item .\install.bat $InstallLocation\install.bat
|
||||||
if($GenerateZip.IsPresent -or ($GenerateZip -eq $true)){
|
if($GenerateZip.IsPresent -or ($GenerateZip -eq $true)){
|
||||||
Compress-Archive -Path $InstallLocation -DestinationPath "$InstallLocation/jellyfin.zip" -Force
|
Compress-Archive -Path $InstallLocation -DestinationPath "$InstallLocation/jellyfin.zip" -Force
|
||||||
}
|
}
|
||||||
Write-Verbose "Finished"
|
Write-Verbose "Finished"
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
build_jellyfin ../../Jellyfin.Server Release win-x64 `pwd`/dist/jellyfin_${VERSION}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
clean_jellyfin ../.. Release `pwd`/dist/jellyfin_${VERSION}
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
package_portable ../.. `pwd`/dist/jellyfin_${VERSION}
|
||||||
|
|
||||||
|
#TODO setup and maybe change above code to produce the Windows native zip format.
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
build_jellyfin ../../Jellyfin.Server Release win-x86 `pwd`/dist/jellyfin_${VERSION}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
clean_jellyfin ../.. Release `pwd`/dist/jellyfin_${VERSION}
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source ../common.build.sh
|
||||||
|
|
||||||
|
VERSION=`get_version ../..`
|
||||||
|
|
||||||
|
package_portable ../.. `pwd`/dist/jellyfin_${VERSION}
|
||||||
|
|
||||||
|
#TODO setup and maybe change above code to produce the Windows native zip format.
|
Loading…
Reference in New Issue