From 6b6db4e26a03928a3327f0c3622c3c807b7ecde9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Sat, 24 Oct 2020 10:43:29 +0200 Subject: [PATCH] Add blivet3 repackaging (work in progress) --- overlays/python-packages/default.nix | 1 + pkgs/python-packages/blivet/default.nix | 118 +++++++++++++++++++++ pkgs/python-packages/blivet/fix_path.patch | 21 ++++ pkgs/python-packages/blivet/poetry.lock | 96 +++++++++++++++++ pkgs/python-packages/blivet/pyproject.toml | 20 ++++ pkgs/python-packages/default.nix | 1 + 6 files changed, 257 insertions(+) create mode 100644 pkgs/python-packages/blivet/default.nix create mode 100644 pkgs/python-packages/blivet/fix_path.patch create mode 100644 pkgs/python-packages/blivet/poetry.lock create mode 100644 pkgs/python-packages/blivet/pyproject.toml diff --git a/overlays/python-packages/default.nix b/overlays/python-packages/default.nix index 901cd72..11dea09 100644 --- a/overlays/python-packages/default.nix +++ b/overlays/python-packages/default.nix @@ -23,6 +23,7 @@ in apprise = fromMyPythonPackages "apprise"; + blivet3 = fromMyPythonPackages "blivet3"; buildbot = import ./buildbot.nix; wokkel = fromMyPythonPackages "wokkel"; pymilter = fromMyPythonPackages "pymilter"; 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; +} diff --git a/pkgs/python-packages/blivet/fix_path.patch b/pkgs/python-packages/blivet/fix_path.patch new file mode 100644 index 0000000..29c4052 --- /dev/null +++ b/pkgs/python-packages/blivet/fix_path.patch @@ -0,0 +1,21 @@ +diff --git a/blivet/tasks/fsmount.py b/blivet/tasks/fsmount.py +index 15f79a3e..bb3fe873 100644 +--- a/blivet/tasks/fsmount.py ++++ b/blivet/tasks/fsmount.py +@@ -19,6 +19,7 @@ + # + # Red Hat Author(s): Anne Mulhern + ++from distutils.spawn import find_executable + import os + + from ..errors import FSError +@@ -58,7 +59,7 @@ class FSMount(task.BasicApplication, fstask.FSTask): + @property + def _can_mount(self): + return (self.mount_type in fslib.kernel_filesystems) or \ +- (os.access("/sbin/mount.%s" % (self.mount_type,), os.X_OK)) or \ ++ (find_executable("mount.%s" % (self.mount_type,)) is not None) or \ + self._has_driver + + @property diff --git a/pkgs/python-packages/blivet/poetry.lock b/pkgs/python-packages/blivet/poetry.lock new file mode 100644 index 0000000..c45011a --- /dev/null +++ b/pkgs/python-packages/blivet/poetry.lock @@ -0,0 +1,96 @@ +[[package]] +name = "distro" +version = "1.5.0" +description = "Distro - an OS platform information API" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "pycairo" +version = "1.19.1" +description = "Python interface for cairo" +category = "main" +optional = false +python-versions = ">=3.5, <4" + +[[package]] +name = "pygobject" +version = "3.36.1" +description = "Python bindings for GObject Introspection" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" + +[package.dependencies] +pycairo = ">=1.11.1" + +[[package]] +name = "pyparted" +version = "3.11.6" +description = "Python bindings for GNU parted" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "pyudev" +version = "0.22.0" +description = "A libudev binding" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +six = "*" + +[[package]] +name = "selinux" +version = "0.2.1" +description = "shim selinux module" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" + +[package.dependencies] +distro = ">=1.3.0" +setuptools = ">=39.0" + +[[package]] +name = "six" +version = "1.15.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[metadata] +lock-version = "1.0" +python-versions = "^3.8" +content-hash = "636edb46b1deb0f6d5db636b0bc6639205335c9915480b156a417067137548f8" + +[metadata.files] +distro = [ + {file = "distro-1.5.0-py2.py3-none-any.whl", hash = "sha256:df74eed763e18d10d0da624258524ae80486432cd17392d9c3d96f5e83cd2799"}, + {file = "distro-1.5.0.tar.gz", hash = "sha256:0e58756ae38fbd8fc3020d54badb8eae17c5b9dcbed388b17bb55b8a5928df92"}, +] +pycairo = [ + {file = "pycairo-1.19.1.tar.gz", hash = "sha256:2c143183280feb67f5beb4e543fd49990c28e7df427301ede04fc550d3562e84"}, +] +pygobject = [ + {file = "PyGObject-3.36.1.tar.gz", hash = "sha256:012a589aec687bfa809a1ff9f5cd775dc7f6fcec1a6bc7fe88e1002a68f8ba34"}, +] +pyparted = [ + {file = "pyparted-3.11.6.tar.gz", hash = "sha256:727ccdf308c194069aa9797f7a6a973bc95b2e407cdf5d58d6c8bc4c9dec92dc"}, +] +pyudev = [ + {file = "pyudev-0.22.0.tar.gz", hash = "sha256:69bb1beb7ac52855b6d1b9fe909eefb0017f38d917cba9939602c6880035b276"}, +] +selinux = [ + {file = "selinux-0.2.1-py2.py3-none-any.whl", hash = "sha256:820adcf1b4451c9cc7759848797703263ba0eb6a4cad76d73548a9e0d57b7926"}, + {file = "selinux-0.2.1.tar.gz", hash = "sha256:d435f514e834e3fdc0941f6a29d086b80b2ea51b28112aee6254bd104ee42a74"}, +] +six = [ + {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, + {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, +] diff --git a/pkgs/python-packages/blivet/pyproject.toml b/pkgs/python-packages/blivet/pyproject.toml new file mode 100644 index 0000000..cf86aa1 --- /dev/null +++ b/pkgs/python-packages/blivet/pyproject.toml @@ -0,0 +1,20 @@ +[tool.poetry] +name = "blivet" +version = "3.3.0" +description = "A python module for system storage configuration" +authors = ["David Lehman "] +license = "GPL-2.0-or-later" + +[tool.poetry.dependencies] +python = "^3.8" +six = "^1.15.0" +pyudev = "^0.22.0" +pyparted = "^3.11.6" +selinux = "^0.2.1" +pygobject = "^3.36.1" + +[tool.poetry.dev-dependencies] + +[build-system] +requires = ["poetry>=0.12"] +build-backend = "poetry.masonry.api" diff --git a/pkgs/python-packages/default.nix b/pkgs/python-packages/default.nix index 9347a06..94bb5fe 100644 --- a/pkgs/python-packages/default.nix +++ b/pkgs/python-packages/default.nix @@ -1,6 +1,7 @@ { mylibs, callPackage, python }: { apprise = callPackage ./apprise { inherit mylibs; pythonPackages = python.pkgs; }; + blivet3 = callPackage ./blivet { inherit python; pythonPackages = python.pkgs; }; buildbot-plugins = callPackage ./buildbot/plugins { inherit python; }; wokkel = callPackage ./wokkel.nix { pythonPackages = python.pkgs; }; pymilter = callPackage ./pymilter.nix { pythonPackages = python.pkgs; }; -- 2.41.0