Skip to content

Instantly share code, notes, and snippets.

@cleverca22
Forked from nh2/almost-works-only-glusterfind-fails.nix
Last active May 10, 2017 00:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cleverca22/82febba9de3900901586e65e2de421ff to your computer and use it in GitHub Desktop.
Save cleverca22/82febba9de3900901586e65e2de421ff to your computer and use it in GitHub Desktop.
nix gluster python scripts packaging
with import <nixpkgs> { config = {}; };
callPackage ./glusterfs.nix {}
{stdenv, fetchurl, fuse, bison, flex_2_5_35, openssl, python2, ncurses, readline,
autoconf, automake, libtool, pkgconfig, zlib, libaio, libxml2, acl, sqlite
, liburcu, attr, makeWrapper, coreutils, gnused, gnugrep, which, python2Packages
}:
let
s =
rec {
baseName="glusterfs";
version = "3.10.1";
name="${baseName}-${version}";
url="https://github.com/nh2/glusterfs/archive/v3.10.1-runner-log.tar.gz";
sha256 = "0d0n981vhyrxxwbfkdkbhyswiipa8pipz8j80mbvwb8aiqsk6kqs";
};
buildInputs = [
fuse bison flex_2_5_35 openssl ncurses readline
autoconf automake libtool pkgconfig zlib libaio libxml2
acl sqlite liburcu attr makeWrapper
(python2.withPackages (pkgs: [ pkgs.flask pkgs.requests pkgs.prettytable ]))
python2
];
# Some of the headers reference acl
propagatedBuildInputs = [
acl
];
in
stdenv.mkDerivation
rec {
inherit (s) name version;
inherit buildInputs propagatedBuildInputs;
# nativeBuildInputs = [
# (python2.withPackages (pkgs: [pkgs.flask])) # works
# ];
preConfigure = ''
./autogen.sh
'';
configureFlags = [
''--localstatedir=/var''
];
makeFlags = "DESTDIR=$(out)";
enableParallelBuilding = true;
postInstall = ''
cp -r $out/$out/* $out
rm -r $out/nix
wrapProgram $out/sbin/mount.glusterfs --set PATH "${stdenv.lib.makeBinPath [ coreutils gnused attr gnugrep which]}"
'';
postFixup = ''
# Set Python environment for the Python based utilities.
# (@nh2) I'm not sure if there's a better way to do this, automatically for all of them.
# Also, this is brittle: If we forget a dependency or gluster adds a new one, things will break deep inside gluster.
# We should better try to get an explicit list of Python dependencies from gluster and ensure all of them are in the PYTHONPATH of all these python scripts.
wrapProgram $out/bin/gluster-eventsapi --set PYTHONPATH "$(toPythonPath $out)"
wrapProgram $out/bin/gluster-mountbroker --set PYTHONPATH "$(toPythonPath $out)"
wrapProgram $out/bin/gluster-georep-sshkey --set PYTHONPATH "$(toPythonPath $out)"
wrapProgram $out/bin/glusterfind --set PYTHONPATH "$(toPythonPath $out)"
wrapProgram $out/libexec/glusterfs/peer_eventsapi.py --set PYTHONPATH "$(toPythonPath $out)"
wrapProgram $out/libexec/glusterfs/peer_georep-sshkey.py --set PYTHONPATH "$(toPythonPath $out)"
wrapProgram $out/libexec/glusterfs/peer_mountbroker.py --set PYTHONPATH "$(toPythonPath $out)"
wrapProgram $out/libexec/glusterfs/glusterfind/changelog.py --set PYTHONPATH "$(toPythonPath $out):$(toPythonPath ${python2Packages.xattr}):$(toPythonPath ${python2Packages.cffi}):$(toPythonPath ${python2Packages.pycparser})"
wrapProgram $out/libexec/glusterfs/gfind_missing_files/gfid_to_path.py --set PYTHONPATH "$(toPythonPath $out):$(toPythonPath ${python2Packages.xattr}):$(toPythonPath ${python2Packages.cffi}):$(toPythonPath ${python2Packages.pycparser})"
wrapProgram $out/share/glusterfs/scripts/eventsdash.py --set PYTHONPATH "$(toPythonPath $out)"
mkdir a
touch b
echo b | $out/libexec/glusterfs/gfind_missing_files/gfid_to_path.py a
'';
src = fetchurl {
inherit (s) url sha256;
};
meta = {
inherit (s) version;
description = "Distributed storage system";
maintainers = [
stdenv.lib.maintainers.raskin
];
platforms = with stdenv.lib.platforms;
linux ++ freebsd;
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment