Closed adam248 closed 10 months ago
This is the Arch AUR version
https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=decent-sampler-bin
This is the closest I could get, but when I try to run DecentSampler
binary it segfaults.
{ lib, stdenv, fetchzip, patchelf, ripgrep, alsa-lib, freetype, nghttp2 }:
stdenv.mkDerivation rec {
pname = "decent-sampler";
version = "1.8.12";
static = "-Static";
dynamic = "-Dynamic";
type = static;
src = fetchzip {
url = "https://www.dropbox.com/sh/dwyry6xpy5uut07/AADhKQCQZt9HYZhXL1d-6pICa/Decent_Sampler-${version}${type}-Linux-x86_64.tar.gz";
sha256 = "sha256-9Xjo8Jk4c6dCjz6Yd0h5FKKhpRz3VZCCsbVoO/MFL1k=";
};
nativeBuildInputs = [ patchelf ripgrep ];
buildInputs = [ alsa-lib freetype nghttp2 ];
prePatch = ''
echo Starting Patch
patchelf --print-interpreter DecentSampler
echo REQUIRED LIBARIES... -----------------------------
patchelf --print-needed DecentSampler
echo SEARCH ...............
ldd DecentSampler | rg 'not found'
echo REQUIRED LIBARIES... -----------------------------
'';
installPhase = ''
ls
mkdir -p "$out/bin"
cp ./DecentSampler "$out/bin/"
cp ./DecentSampler.so "$out/bin"
cp -r ./DecentSampler.vst3 "$out/bin"
'';
preFixup = let
libPath = lib.makeLibraryPath [
nghttp2 # libnghttp2.so
alsa-lib # libasound.so
freetype # libfreetype.so
];
in ''
patchelf \
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
--set-rpath "${libPath}" \
$out/bin/DecentSampler
'';
meta = with lib; {
description = "An audio sample player";
longDescription = ''
Decent Sampler is an audio sample player.
Allowing you to play sample libraries in the DecentSampler format
(files with extensions: dspreset and dslibrary).
It claims to be free but we currently cannot find any license
that it is released under.
'';
homepage = "https://www.decentsamples.com/product/decent-sampler-plugin/";
license = licenses.unfree;
platforms = platforms.linux;
};
}
./result/bin/DecentSampler
Segmentation fault (core dumped)
Tried using autoPatchelfHook
{ lib, stdenv, fetchzip, patchelf, ripgrep, alsa-lib, freetype, nghttp2, autoPatchelfHook }:
stdenv.mkDerivation rec {
pname = "decent-sampler";
version = "1.8.12";
static = "-Static";
dynamic = "-Dynamic";
type = static;
src = fetchzip {
url = "https://www.dropbox.com/sh/dwyry6xpy5uut07/AADhKQCQZt9HYZhXL1d-6pICa/Decent_Sampler-${version}${type}-Linux-x86_64.tar.gz";
sha256 = "sha256-9Xjo8Jk4c6dCjz6Yd0h5FKKhpRz3VZCCsbVoO/MFL1k=";
};
nativeBuildInputs = [ autoPatchelfHook patchelf ripgrep ];
buildInputs = [ alsa-lib freetype nghttp2 ];
installPhase = ''
install -m755 -D DecentSampler $out/bin/DecentSampler
'';
meta = with lib; {
description = "An audio sample player";
longDescription = ''
Decent Sampler is an audio sample player.
Allowing you to play sample libraries in the DecentSampler format
(files with extensions: dspreset and dslibrary).
It claims to be free but we currently cannot find any license
that it is released under.
'';
homepage = "https://www.decentsamples.com/product/decent-sampler-plugin/";
license = licenses.unfree;
platforms = platforms.linux;
};
}
I have raised an issue with the dev here: https://www.decentsamples.com/bugtracker/view.php?id=37 Anyone who wishes to comment on the bugtracker to help get it resolved will be most welcome. Thanks
I have some good news. I managed to get Decent Sampler working on NixOS via pkgs.buildFHSEnv
.
Since this is the first time I am using this build method I am not sure how this is working, but I am posting the details here now to keep a good log of what is happening. I also am not sure how to package this for nixpkgs.
Here I am able to run DecentSampler binary without it being patched (manually or via autoPatchelfHook).
So here you just download DecentSampler as a normal Linux download then point this shell.nix
file's runScript
attribute at the Decent Sampler binary (./nixpkgs/source/DecentSampler
) and it just works
™.
I simply copied the example from https://ryantm.github.io/nixpkgs/builders/special/fhs-environments/ and added freetype
and nghttp2
.
I have tried removing ++ (with pkgs.xorg; [ libX11 libXcursor libXrandr ])
but it goes back to segfaulting.
So this might be the reason?
# file: shell.nix
# use nix-shell to run
{ pkgs ? import <nixpkgs> {} }:
(pkgs.buildFHSEnv {
name = "simple-x11-env";
targetPkgs = pkgs: (with pkgs; [
udev
alsa-lib
freetype
nghttp2
]) ++ (with pkgs.xorg; [
libX11
libXcursor
libXrandr
]);
multiPkgs = pkgs: (with pkgs; [
udev
alsa-lib
]);
runScript = "./nixpkgs/source/DecentSampler";
}).env
Can anyone explain why this works when the other methods end with a segfault
?
Did some more digging and it appears that only pkgs.xorg.libX11
is needed.
If I remove that then we go back to segfaulting.
{ pkgs ? import <nixpkgs> {} }:
(pkgs.buildFHSEnv {
name = "decent-sampler-env";
targetPkgs = pkgs: (with pkgs; [
xorg.libX11
alsa-lib
freetype
nghttp2
]);
runScript = "./nixpkgs/source/DecentSampler";
}).env
Is the simplest FHSEnv needed....
{ pkgs, lib, stdenv, fetchzip, autoPatchelfHook, alsa-lib, freetype, nghttp2}:
stdenv.mkDerivation rec {
pname = "decent-sampler";
version = "1.9.8";
static = "Static";
dynamic = "Dynamic";
type = static; # this will get patched by autoPatchelfHook
src = fetchzip {
url = "https://www.dropbox.com/sh/dwyry6xpy5uut07/AACSicfMpcDXSbYg2UqIIymLa/Decent_Sampler-${version}-Linux-${type}-x86_64.tar.gz?dl=0";
sha256 = "sha256-O/0R70tZOmSGgth6nzt4zPiJr1P8890uzk8PiQGnC6M=";
};
nativeBuildInputs = [ autoPatchelfHook ];
buildInputs = [ pkgs.xorg.libX11 alsa-lib freetype nghttp2 ];
installPhase = ''
mkdir -p $out/{bin,lib}
install -m755 -D DecentSampler $out/bin/
install -m755 -D DecentSampler.so $out/lib/
'';
meta = with lib; {
description = "An audio sample player";
longDescription = ''
Decent Sampler is an audio sample player.
Allowing you to play sample libraries in the DecentSampler format
(files with extensions: dspreset and dslibrary).
It claims to be free but we currently cannot find any license
that it is released under.
'';
homepage = "https://www.decentsamples.com/product/decent-sampler-plugin/";
license = licenses.unlicense;
platforms = platforms.linux;
};
}
Updated this to have pkgs.xorg.libX11
still doesn't work. It seems that pkgs.buildFHSEnv
is working for another reason other than simply pkgs.xorg.libX11
.
This issue has been mentioned on NixOS Discourse. There might be relevant details there:
@tobiasBora did a great article on stack exchange that might help... https://unix.stackexchange.com/questions/522822/different-methods-to-run-a-non-nixos-executable-on-nixos
However, it appears that an example of how to use buildFHSEnv
along with mkDerivation
is missing.
I will read it again later....
I have finally figured it out by copying this package's methodology: https://github.com/NixOS/nixpkgs/blob/12a0a9da151da0750988c8dd489c5794d7cc7c83/pkgs/development/tools/hover/default.nix
Here is the final and tested (on my machine) default.nix
file:
# default.nix
{ lib
, stdenv
, fetchzip
, buildFHSEnv
, alsa-lib
, freetype
, nghttp2
, xorg
, }:
let
pname = "decent-sampler";
version = "1.9.4";
decent-sampler = stdenv.mkDerivation {
inherit pname version;
src = fetchzip {
# dropbox link: https://www.dropbox.com/sh/dwyry6xpy5uut07/AABBJ84bjTTSQWzXGG5TOQpfa\
# Internet Archive should be more reliable
url = "https://archive.org/download/decent-sampler-linux-static-download-mirror/Decent_Sampler-${version}-Linux-Static-x86_64.tar.gz";
sha256 = "sha256-O/0R70tZOmSGgth6nzt4zPiJr1P8890uzk8PiQGnC6M=";
};
installPhase = ''
mkdir -p $out/bin
install -m755 "DecentSampler" "$out/bin/decent-sampler"
'';
};
in
buildFHSEnv {
inherit pname version;
targetPkgs = pkgs: [
decent-sampler
alsa-lib
freetype
nghttp2
xorg.libX11
];
runScript = "decent-sampler";
meta = with lib; {
description = "An audio sample player";
longDescription = ''
Decent Sampler is an audio sample player.
Allowing you to play sample libraries in the DecentSampler format
(files with extensions: dspreset and dslibrary).
It claims to be free but we currently cannot find any license
that it is released under.
'';
homepage = "https://www.decentsamples.com/product/decent-sampler-plugin/";
license = licenses.unlicense;
platforms = platforms.linux;
maintainers = with maintainers; [ adam248 ];
};
}
@PowerUser64 just letting you know that I have now made a pull request, please add a thumbs up to it to help get it merged.... thanks
Decent Sampler
I am asking for the standalone app to be packaged. This way you can just plugin a MIDI keyboard and play music.
I am not asking for automatic VST, VST3, *.so, linking. So you can just run the
DecentSampler
binary directly and that is it.I have tried just running it directly in NixOS but I get this error:
bash: ./DecentSampler: cannot execute: required file not found
Project description
The Decent Samples plugin is a FREE sample player plugin that allows you to play sample libraries in the DecentSampler format (files with extensions: dspreset and dslibrary). It is available in the following formats:
This app automatically downloads samples from the net, so it needs a mutable directory. I currently do not know the default dir, but will update when I figure that out.
Metadata
Important Note about Linux builds
There are two different builds for linux. One tries to staticly link needed dependencies and the other dynamically.
Dropbox API downloading You need to have
?dl=1
to get the direct download link.