parent
532f8cd016
commit
c3346f87c4
9 changed files with 117 additions and 7245 deletions
|
@ -154,6 +154,9 @@ in
|
||||||
description = "Mirakurun user";
|
description = "Mirakurun user";
|
||||||
group = "video";
|
group = "video";
|
||||||
isSystemUser = true;
|
isSystemUser = true;
|
||||||
|
|
||||||
|
# NPM insists on creating ~/.npm
|
||||||
|
home = "/var/cache/mirakurun";
|
||||||
};
|
};
|
||||||
|
|
||||||
services.mirakurun.serverSettings = {
|
services.mirakurun.serverSettings = {
|
||||||
|
@ -171,9 +174,10 @@ in
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
after = [ "network.target" ];
|
after = [ "network.target" ];
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
ExecStart = "${mirakurun}/bin/mirakurun-start";
|
ExecStart = "${mirakurun}/bin/mirakurun start";
|
||||||
User = username;
|
User = username;
|
||||||
Group = groupname;
|
Group = groupname;
|
||||||
|
CacheDirectory = "mirakurun";
|
||||||
RuntimeDirectory="mirakurun";
|
RuntimeDirectory="mirakurun";
|
||||||
StateDirectory="mirakurun";
|
StateDirectory="mirakurun";
|
||||||
Nice = -10;
|
Nice = -10;
|
||||||
|
|
|
@ -1,96 +1,74 @@
|
||||||
# NOTE: Mirakurun is packaged outside of nodePackages because Node2nix can't
|
|
||||||
# handle one of its subdependencies. See below link for details.
|
|
||||||
#
|
|
||||||
# https://github.com/Chinachu/node-aribts/blob/af84dbbbd81ea80b946e538083b64b5b2dc7e8f2/package.json#L26
|
|
||||||
|
|
||||||
{ lib
|
{ lib
|
||||||
, stdenvNoCC
|
, stdenv
|
||||||
, bash
|
, bash
|
||||||
|
, buildNpmPackage
|
||||||
, fetchFromGitHub
|
, fetchFromGitHub
|
||||||
, gitUpdater
|
, installShellFiles
|
||||||
, jq
|
|
||||||
, makeWrapper
|
, makeWrapper
|
||||||
, mkYarnPackage
|
, nodejs
|
||||||
, which
|
, substituteAll
|
||||||
, writers
|
|
||||||
, v4l-utils
|
, v4l-utils
|
||||||
, yarn
|
, which
|
||||||
, yarn2nix
|
|
||||||
}:
|
}:
|
||||||
|
|
||||||
stdenvNoCC.mkDerivation rec {
|
buildNpmPackage rec {
|
||||||
pname = "mirakurun";
|
pname = "mirakurun";
|
||||||
version = "3.8.0";
|
version = "3.9.0-rc.4";
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "Chinachu";
|
owner = "Chinachu";
|
||||||
repo = "Mirakurun";
|
repo = "Mirakurun";
|
||||||
rev = version;
|
rev = version;
|
||||||
sha256 = "1fmzi3jc3havvpc1kz5z16k52lnrsmc3b5yqyxc7i911gqyjsxzr";
|
sha256 = "sha256-Qg+wET5H9t3Mv2Hv0iT/C85/SEaQ+BHSBL3JjMQW5+Q=";
|
||||||
};
|
};
|
||||||
|
|
||||||
nativeBuildInputs = [ makeWrapper ];
|
patches = [
|
||||||
|
# NOTE: fixes for hardcoded paths and assumptions about filesystem
|
||||||
|
# permissions
|
||||||
|
./nix-filesystem.patch
|
||||||
|
];
|
||||||
|
|
||||||
mirakurun = mkYarnPackage rec {
|
npmDepsHash = "sha256-e7m7xb7p1SBzLAyQ82TTR/qLXv4lRm37x0JJPWYYGvI=";
|
||||||
name = "${pname}-${version}";
|
|
||||||
inherit version src;
|
|
||||||
|
|
||||||
yarnNix = ./yarn.nix;
|
nativeBuildInputs = [ installShellFiles makeWrapper ];
|
||||||
yarnLock = ./yarn.lock;
|
|
||||||
packageJSON = ./package.json;
|
|
||||||
|
|
||||||
# workaround for https://github.com/webpack/webpack/issues/14532
|
# workaround for https://github.com/webpack/webpack/issues/14532
|
||||||
NODE_OPTIONS = "--openssl-legacy-provider";
|
NODE_OPTIONS = "--openssl-legacy-provider";
|
||||||
|
|
||||||
patches = [
|
postInstall =
|
||||||
# NOTE: fixes for hardcoded paths and assumptions about filesystem
|
|
||||||
# permissions
|
|
||||||
./nix-filesystem.patch
|
|
||||||
];
|
|
||||||
|
|
||||||
buildPhase = ''
|
|
||||||
yarn --offline build
|
|
||||||
'';
|
|
||||||
|
|
||||||
distPhase = "true";
|
|
||||||
};
|
|
||||||
|
|
||||||
installPhase =
|
|
||||||
let
|
let
|
||||||
runtimeDeps = [ bash which v4l-utils ];
|
runtimeDeps = [
|
||||||
|
bash
|
||||||
|
nodejs
|
||||||
|
which
|
||||||
|
] ++ lib.optionals stdenv.isLinux [ v4l-utils ];
|
||||||
|
crc32Patch = substituteAll {
|
||||||
|
src = ./fix-musl-detection.patch;
|
||||||
|
isMusl = if stdenv.hostPlatform.isMusl then "true" else "false";
|
||||||
|
};
|
||||||
in
|
in
|
||||||
''
|
''
|
||||||
mkdir -p $out/bin
|
sed 's/@DESCRIPTION@/${meta.description}/g' ${./mirakurun.1} > mirakurun.1
|
||||||
|
installManPage mirakurun.1
|
||||||
|
|
||||||
makeWrapper ${mirakurun}/bin/mirakurun-epgdump $out/bin/mirakurun-epgdump \
|
wrapProgram $out/bin/mirakurun-epgdump \
|
||||||
--chdir "${mirakurun}/libexec/mirakurun/node_modules/mirakurun" \
|
|
||||||
--prefix PATH : ${lib.makeBinPath runtimeDeps}
|
--prefix PATH : ${lib.makeBinPath runtimeDeps}
|
||||||
|
|
||||||
# XXX: The original mirakurun command uses PM2 to manage the Mirakurun
|
# XXX: The original mirakurun command uses PM2 to manage the Mirakurun
|
||||||
# server. However, we invoke the server directly and let systemd
|
# server. However, we invoke the server directly and let systemd
|
||||||
# manage it to avoid complication. This is okay since no features
|
# manage it to avoid complication. This is okay since no features
|
||||||
# unique to PM2 is currently being used.
|
# unique to PM2 is currently being used.
|
||||||
makeWrapper ${yarn}/bin/yarn $out/bin/mirakurun-start \
|
makeWrapper ${nodejs}/bin/npm $out/bin/mirakurun \
|
||||||
--add-flags "start" \
|
--chdir "$out/lib/node_modules/mirakurun" \
|
||||||
--chdir "${mirakurun}/libexec/mirakurun/node_modules/mirakurun" \
|
|
||||||
--prefix PATH : ${lib.makeBinPath runtimeDeps}
|
--prefix PATH : ${lib.makeBinPath runtimeDeps}
|
||||||
|
|
||||||
|
pushd $out/lib/node_modules/mirakurun/node_modules/@node-rs/crc32
|
||||||
|
patch -p3 < ${crc32Patch}
|
||||||
|
popd
|
||||||
'';
|
'';
|
||||||
|
|
||||||
passthru.updateScript = import ./update.nix {
|
|
||||||
inherit lib;
|
|
||||||
inherit (src.meta) homepage;
|
|
||||||
inherit
|
|
||||||
pname
|
|
||||||
version
|
|
||||||
gitUpdater
|
|
||||||
writers
|
|
||||||
jq
|
|
||||||
yarn
|
|
||||||
yarn2nix;
|
|
||||||
};
|
|
||||||
|
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
inherit (mirakurun.meta) description platforms;
|
description = "Resource manager for TV tuners.";
|
||||||
license = licenses.asl20;
|
license = licenses.asl20;
|
||||||
maintainers = with maintainers; [ midchildan ];
|
maintainers = with maintainers; [ midchildan ];
|
||||||
};
|
};
|
||||||
|
|
29
pkgs/applications/video/mirakurun/fix-musl-detection.patch
Normal file
29
pkgs/applications/video/mirakurun/fix-musl-detection.patch
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
diff --git a/packages/crc32/index.js b/packages/crc32/index.js
|
||||||
|
index cdc7519..7b05930 100644
|
||||||
|
--- a/packages/crc32/index.js
|
||||||
|
+++ b/packages/crc32/index.js
|
||||||
|
@@ -5,7 +5,7 @@ const { platform, arch } = process
|
||||||
|
|
||||||
|
let nativeBinding = null
|
||||||
|
let localFileExisted = false
|
||||||
|
-let isMusl = false
|
||||||
|
+let isMusl = @isMusl@
|
||||||
|
let loadError = null
|
||||||
|
|
||||||
|
switch (platform) {
|
||||||
|
@@ -114,7 +114,6 @@ switch (platform) {
|
||||||
|
case 'linux':
|
||||||
|
switch (arch) {
|
||||||
|
case 'x64':
|
||||||
|
- isMusl = readFileSync('/usr/bin/ldd', 'utf8').includes('musl')
|
||||||
|
if (isMusl) {
|
||||||
|
localFileExisted = existsSync(join(__dirname, 'crc32.linux-x64-musl.node'))
|
||||||
|
try {
|
||||||
|
@@ -140,7 +139,6 @@ switch (platform) {
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case 'arm64':
|
||||||
|
- isMusl = readFileSync('/usr/bin/ldd', 'utf8').includes('musl')
|
||||||
|
if (isMusl) {
|
||||||
|
localFileExisted = existsSync(join(__dirname, 'crc32.linux-arm64-musl.node'))
|
||||||
|
try {
|
44
pkgs/applications/video/mirakurun/mirakurun.1
Normal file
44
pkgs/applications/video/mirakurun/mirakurun.1
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
.Dd $Mdocdate$
|
||||||
|
.Dt MIRAKURUN 1
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm mirakurun
|
||||||
|
.Nd @DESCRIPTION@
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.Nm
|
||||||
|
.Bk -words
|
||||||
|
.Op Ar command Op Ar args
|
||||||
|
.Ek
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
.Nm
|
||||||
|
is a wrapper command for Mirakurun provided by Nix. It's actually a thin
|
||||||
|
wrapper around the
|
||||||
|
.Xr npm 1
|
||||||
|
command line tool which you can use to invoke npm commands from the Mirakurun
|
||||||
|
project directory. The command line arguments are simply passed as-is to
|
||||||
|
.Xr npm 1 .
|
||||||
|
.Pp
|
||||||
|
On NixOS, it is strongly recommended that you enable the mirakurun module
|
||||||
|
instead of invoking this command directly to launch Mirakurun. On other
|
||||||
|
platforms, run
|
||||||
|
.Pp
|
||||||
|
.Dl $ mirakurun start
|
||||||
|
.Pp
|
||||||
|
to start Mirakurun.
|
||||||
|
.Sh FILES
|
||||||
|
.Bl -tag -width Ds -compact
|
||||||
|
.It Pa /etc/mirakurun
|
||||||
|
.Nm
|
||||||
|
configuration directory.
|
||||||
|
.El
|
||||||
|
.Sh EXAMPLES
|
||||||
|
Start Mirakurun.
|
||||||
|
.Pp
|
||||||
|
.Dl $ mirakurun start
|
||||||
|
.Pp
|
||||||
|
Start Mirakurun in development mode.
|
||||||
|
.Pp
|
||||||
|
.Dl $ mirakurun run debug
|
||||||
|
.Pp
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Xr npm 1
|
|
@ -1,129 +0,0 @@
|
||||||
{
|
|
||||||
"name": "mirakurun",
|
|
||||||
"preferGlobal": true,
|
|
||||||
"description": "Japanese DTV Tuner Server Service.",
|
|
||||||
"version": "3.8.0",
|
|
||||||
"homepage": "https://github.com/Chinachu/Mirakurun",
|
|
||||||
"keywords": [
|
|
||||||
"mirakurun",
|
|
||||||
"chinachu",
|
|
||||||
"rivarun",
|
|
||||||
"arib",
|
|
||||||
"isdb",
|
|
||||||
"dvb",
|
|
||||||
"dvr",
|
|
||||||
"dtv",
|
|
||||||
"tv"
|
|
||||||
],
|
|
||||||
"author": {
|
|
||||||
"name": "kanreisa",
|
|
||||||
"url": "https://github.com/kanreisa"
|
|
||||||
},
|
|
||||||
"contributors": [
|
|
||||||
"rndomhack"
|
|
||||||
],
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/Chinachu/Mirakurun.git"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/Chinachu/Mirakurun/issues"
|
|
||||||
},
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"bin": {
|
|
||||||
"mirakurun": "bin/cli.sh",
|
|
||||||
"mirakurun-epgdump": "bin/epgdump.js"
|
|
||||||
},
|
|
||||||
"main": "lib/client.js",
|
|
||||||
"scripts": {
|
|
||||||
"start": "node -r source-map-support/register lib/server.js",
|
|
||||||
"debug": "node -r source-map-support/register --inspect=0.0.0.0:9229 lib/server.js",
|
|
||||||
"start.win32": "node.exe -r source-map-support/register bin/init.win32.js",
|
|
||||||
"debug.win32": "node.exe -r source-map-support/register --inspect bin/init.win32.js",
|
|
||||||
"build": "tslint --project . && tsc --declaration && webpack",
|
|
||||||
"watch": "tsc -w --declaration",
|
|
||||||
"watch-webpack": "webpack -w",
|
|
||||||
"test": "tslint --project . && mocha --exit test/*.spec.js",
|
|
||||||
"clean": "rimraf lib/*",
|
|
||||||
"prepublishOnly": "npm run clean && npm run build",
|
|
||||||
"preinstall": "node bin/preinstall.js",
|
|
||||||
"postinstall": "node bin/postinstall.js && opencollective-postinstall",
|
|
||||||
"preuninstall": "node bin/preuninstall.js",
|
|
||||||
"docker-build": "docker-compose -f docker/docker-compose.yml build",
|
|
||||||
"docker-run": "docker-compose -f docker/docker-compose.yml run --rm --service-ports mirakurun",
|
|
||||||
"docker-debug": "docker-compose -f docker/docker-compose.yml run --rm --service-ports -e DEBUG=true mirakurun"
|
|
||||||
},
|
|
||||||
"directories": {
|
|
||||||
"doc": "doc",
|
|
||||||
"lib": "lib"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@fluentui/react": "8.27.0",
|
|
||||||
"aribts": "^1.3.5",
|
|
||||||
"colors": "^1.4.0",
|
|
||||||
"cors": "^2.8.5",
|
|
||||||
"dotenv": "^8.6.0",
|
|
||||||
"eventemitter3": "^4.0.7",
|
|
||||||
"express": "^4.17.1",
|
|
||||||
"express-openapi": "^8.0.0",
|
|
||||||
"glob": "^7.1.7",
|
|
||||||
"ip": "^1.1.4",
|
|
||||||
"js-yaml": "^4.1.0",
|
|
||||||
"latest-version": "^5.1.0",
|
|
||||||
"morgan": "^1.10.0",
|
|
||||||
"openapi-types": "^7.2.3",
|
|
||||||
"opencollective": "^1.0.3",
|
|
||||||
"opencollective-postinstall": "^2.0.3",
|
|
||||||
"promise-queue": "^2.2.3",
|
|
||||||
"react": "^17.0.2",
|
|
||||||
"react-dom": "^17.0.2",
|
|
||||||
"semver": "^7.3.5",
|
|
||||||
"sift": "^7.0.1",
|
|
||||||
"source-map-support": "^0.5.19",
|
|
||||||
"stream-http": "^3.2.0",
|
|
||||||
"swagger-ui-dist": "3.51.2",
|
|
||||||
"tail": "^2.2.3"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@types/cors": "^2.8.12",
|
|
||||||
"@types/express": "^4.17.13",
|
|
||||||
"@types/ip": "^1.1.0",
|
|
||||||
"@types/js-yaml": "^4.0.2",
|
|
||||||
"@types/morgan": "^1.9.3",
|
|
||||||
"@types/node": "^12.20.17",
|
|
||||||
"@types/promise-queue": "^2.2.0",
|
|
||||||
"@types/react": "^17.0.14",
|
|
||||||
"@types/react-dom": "^17.0.9",
|
|
||||||
"buffer": "^6.0.3",
|
|
||||||
"copy-webpack-plugin": "^9.0.1",
|
|
||||||
"css-loader": "5.2.7",
|
|
||||||
"mocha": "^8.4.0",
|
|
||||||
"process": "^0.11.10",
|
|
||||||
"rimraf": "^3.0.2",
|
|
||||||
"style-loader": "^2.0.0",
|
|
||||||
"ts-loader": "^9.2.3",
|
|
||||||
"tslint": "^6.1.3",
|
|
||||||
"tslint-config-prettier": "^1.18.0",
|
|
||||||
"typescript": "^4.3.5",
|
|
||||||
"url": "^0.11.0",
|
|
||||||
"webpack": "5.48.0",
|
|
||||||
"webpack-cli": "^4.7.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^12 || ^14 || ^16"
|
|
||||||
},
|
|
||||||
"engineStrict": true,
|
|
||||||
"os": [
|
|
||||||
"linux",
|
|
||||||
"darwin",
|
|
||||||
"win32"
|
|
||||||
],
|
|
||||||
"funding": {
|
|
||||||
"type": "opencollective",
|
|
||||||
"url": "https://opencollective.com/Mirakurun"
|
|
||||||
},
|
|
||||||
"collective": {
|
|
||||||
"type": "opencollective",
|
|
||||||
"url": "https://opencollective.com/Mirakurun"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,51 +0,0 @@
|
||||||
{ pname
|
|
||||||
, version
|
|
||||||
, homepage
|
|
||||||
, lib
|
|
||||||
, gitUpdater
|
|
||||||
, writers
|
|
||||||
, jq
|
|
||||||
, yarn
|
|
||||||
, yarn2nix
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
updater = gitUpdater {
|
|
||||||
inherit pname version;
|
|
||||||
attrPath = lib.toLower pname;
|
|
||||||
|
|
||||||
# exclude prerelease versions
|
|
||||||
ignoredVersions = "-";
|
|
||||||
};
|
|
||||||
updateScript = builtins.elemAt updater.command 0;
|
|
||||||
updateArgs = map (lib.escapeShellArg) (builtins.tail updater.command);
|
|
||||||
in writers.writeBash "update-mirakurun" ''
|
|
||||||
set -euxo pipefail
|
|
||||||
|
|
||||||
WORKDIR="$(mktemp -d)"
|
|
||||||
cleanup() {
|
|
||||||
rm -rf "$WORKDIR"
|
|
||||||
}
|
|
||||||
trap cleanup EXIT
|
|
||||||
|
|
||||||
# bump the version
|
|
||||||
${updateScript} ${lib.concatStringsSep " " updateArgs}
|
|
||||||
|
|
||||||
# Get the path to the latest source. Note that we can't just pass the value
|
|
||||||
# of mirakurun.src directly because it'd be evaluated before we can run
|
|
||||||
# updateScript.
|
|
||||||
SRC="$(nix-build "${toString ../../../..}" --no-out-link -A mirakurun.src)"
|
|
||||||
if [[ "${version}" == "$(${jq}/bin/jq -r .version "$SRC/package.json")" ]]; then
|
|
||||||
echo "[INFO] Already using the latest version of ${pname}" >&2
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd "$WORKDIR"
|
|
||||||
|
|
||||||
cp "$SRC/package.json" package.json
|
|
||||||
"${yarn}/bin/yarn" install --ignore-scripts
|
|
||||||
|
|
||||||
"${yarn2nix}/bin/yarn2nix" > "${toString ./.}/yarn.nix"
|
|
||||||
cp yarn.lock "${toString ./.}/yarn.lock"
|
|
||||||
cp package.json "${toString ./.}/package.json"
|
|
||||||
''
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -10062,13 +10062,7 @@ with pkgs;
|
||||||
pythonPackages = python3Packages;
|
pythonPackages = python3Packages;
|
||||||
};
|
};
|
||||||
|
|
||||||
mirakurun = callPackage ../applications/video/mirakurun {
|
mirakurun = callPackage ../applications/video/mirakurun { };
|
||||||
yarn = yarn.override { nodejs = nodejs_16; };
|
|
||||||
inherit (callPackage ../development/tools/yarn2nix-moretea/yarn2nix {
|
|
||||||
nodejs = nodejs_16;
|
|
||||||
yarn = yarn.override { nodejs = nodejs_16; };
|
|
||||||
}) mkYarnPackage;
|
|
||||||
};
|
|
||||||
|
|
||||||
miredo = callPackage ../tools/networking/miredo { };
|
miredo = callPackage ../tools/networking/miredo { };
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue