X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=pkgs%2Fpython-packages%2Fblivet%2Fdefault.nix;fp=pkgs%2Fpython-packages%2Fblivet%2Fdefault.nix;h=108d548ac12bfa68e5323ca63c630862680ce20a;hb=6b6db4e26a03928a3327f0c3622c3c807b7ecde9;hp=0000000000000000000000000000000000000000;hpb=051f375ca96f448820f0da33a24a8ee4bb937ad2;p=perso%2FImmae%2FConfig%2FNix.git diff --git a/pkgs/python-packages/blivet/default.nix b/pkgs/python-packages/blivet/default.nix new file mode 100644 index 0000000..108d548 --- /dev/null +++ b/pkgs/python-packages/blivet/default.nix @@ -0,0 +1,118 @@ +{ lib, writeText, poetry2nix, python, pythonPackages, + gobject-introspection, libblockdev, libbytesize, fetchFromGitHub, + pkg-config, parted, systemd, + with_dmraid ? false, + with_fs_btrfs ? false, + with_fs_fat ? false, + with_fs_f2fs ? false, + with_fs_hfs_plus ? false, + with_fs_jfs ? false, + with_fs_nfs ? false, + with_fs_nfsv4 ? false, + with_fs_ntfs ? false, + with_fs_reiserfs ? false, + with_fs_xfs ? false, + with_luks ? false, + with_lvm ? false, + with_mdadm ? false, + with_multipath ? false, + with_optical ? false, + with_iscsi ? false, + dmraid, multipath_tools, lvm2, eject, kmod, utillinux, lsof, + openiscsi, coreutils, dosfstools, e2fsprogs, jfsutils, btrfs-progs, + xfsprogs, f2fs-tools, hfsprogs, nfs-utils, ntfs3g, ntfsprogs, + reiserfsprogs, devicemapper, cryptsetup, mdadm +}@args: +let + # FIXME: blivet/tasks/fsmount.py links to /sbin + additionalPackages = + lib.optionals with_dmraid [ dmraid ] + ++ lib.optionals with_fs_btrfs [ btrfs-progs ] + ++ lib.optionals with_fs_fat [ dosfstools ] + ++ lib.optionals with_fs_f2fs [ f2fs-tools ] + ++ lib.optionals with_fs_hfs_plus [ hfsprogs ] + ++ lib.optionals with_fs_jfs [ jfsutils ] + ++ lib.optionals with_fs_nfs [ nfs-utils ] + ++ lib.optionals with_fs_ntfs [ ntfs3g ntfsprogs ] + ++ lib.optionals with_fs_reiserfs [ reiserfsprogs ] + ++ lib.optionals with_fs_xfs [ xfsprogs.bin ] + ++ lib.optionals with_luks [ devicemapper cryptsetup ] + ++ lib.optionals with_lvm [ lvm2 ] + ++ lib.optionals with_mdadm [ mdadm ] + ++ lib.optionals with_multipath [ multipath_tools ] + ++ lib.optionals with_optical [ eject ] + ++ lib.optionals with_iscsi [ openiscsi ]; +in +# nix-shell -E "with import {}; pkgs.mkShell { buildInputs = [ python3 python3Packages.blivet3 ]; }" +# nix-shell -E "with import {}; pkgs.mkShell { buildInputs = [ (python3.withPackages(p: [ p.blivet3 ])) ]; }" +poetry2nix.mkPoetryApplication { + inherit python; + propagatedBuildInputs = [ + gobject-introspection + (pythonPackages.toPythonModule libblockdev) + (pythonPackages.toPythonModule libbytesize) + ]; + src = fetchFromGitHub { + owner = "storaged-project"; + repo = "blivet"; + rev = "blivet-3.3.0"; + sha256 = "0ynxm37cxxr2sf2hj18hrdxs1qfw6dgdagkvv5f6g4fmp51m7c3c"; + }; + overrides = poetry2nix.overrides.withDefaults (self: super: { + pyparted = super.pyparted.overridePythonAttrs (old: { + buildInputs = old.buildInputs ++ [ parted ]; + nativeBuildInputs = old.nativeBuildInputs ++ [ pkg-config ]; + }); + selinux = super.selinux.overridePythonAttrs (old: { + buildInputs = old.buildInputs ++ [ self.setuptools-scm-git-archive ]; + nativeBuildInputs = old.nativeBuildInputs ++ [ pkg-config ]; + }); + }); + patches = [ ./fix_path.patch ]; + postPatch = let + runtimePaths = lib.makeBinPath ([ + systemd utillinux kmod e2fsprogs mdadm lsof coreutils + ] ++ additionalPackages); + libraryPath = builtins.concatStringsSep " " (map (v: "-rpath ${v}/lib -L ${v}/lib") [ systemd.lib ]); + giLibraryPath = lib.makeSearchPath "lib/girepository-1.0" [libblockdev gobject-introspection]; + addGiPath = writeText "add-gi-path" '' + import os + newGiPath = "${giLibraryPath}" + if newGiPath not in os.environ.get("GI_TYPELIB_PATH", ""): + os.environ["GI_TYPELIB_PATH"] = os.environ.get("GI_TYPELIB_PATH", "") + ":" + newGiPath + ''; + addPath = writeText "add-path" '' + import os + newPath = "${runtimePaths}" + newLibraryPath = "${libraryPath}" + if newPath not in os.environ.get("PATH", ""): + os.environ["PATH"] = os.environ.get("PATH", "") + ":" + newPath + os.environ["NIX_LDFLAGS"] = os.environ.get("NIX_LDFLAGS", "") + " " + newLibraryPath + ''; + in + '' + prepend() { + mv "$1" "$1.bak" + cat ${addPath} "$1.bak" > $1 + rm -f "$1.bak" + } + prepend "blivet/__init__.py" + prepend "blivet/iscsi.py" + prepend "blivet/tasks/availability.py" + prepend "blivet/util.py" + prepend "blivet/udev.py" + prependGi() { + mv "$1" "$1.bak" + cat ${addGiPath} "$1.bak" > $1 + rm -f "$1.bak" + } + grep -rl require_version blivet/ | while read i; do prependGi "$i"; done + sed -i -e "s@/lib/modules@/run/booted-system/kernel-modules/lib/modules/@" blivet/tasks/fsmount.py + ''; + postInstall = let + in '' + rm -rf $out/lib/python*/site-packages/{etc,usr} + ''; + pyproject = ./pyproject.toml; + poetrylock = ./poetry.lock; +}