about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--nixos/modules/module-list.nix1
-rw-r--r--nixos/modules/tasks/stratis.nix18
-rw-r--r--nixos/tests/all-tests.nix1
-rw-r--r--nixos/tests/stratis/default.nix7
-rw-r--r--nixos/tests/stratis/simple.nix39
-rw-r--r--pkgs/development/python-modules/dbus-python-client-gen/default.nix34
-rw-r--r--pkgs/development/python-modules/dbus-signature-pyparsing/default.nix34
-rw-r--r--pkgs/development/python-modules/hs-dbus-signature/default.nix28
-rw-r--r--pkgs/development/python-modules/into-dbus-python/default.nix38
-rw-r--r--pkgs/tools/filesystems/stratis-cli/default.nix36
-rw-r--r--pkgs/tools/filesystems/stratisd/default.nix3
-rw-r--r--pkgs/top-level/all-packages.nix2
-rw-r--r--pkgs/top-level/python-packages.nix8
13 files changed, 249 insertions, 0 deletions
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 6fd0bacc5f57..d5ab997bda38 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -1266,6 +1266,7 @@
   ./tasks/network-interfaces-scripted.nix
   ./tasks/scsi-link-power-management.nix
   ./tasks/snapraid.nix
+  ./tasks/stratis.nix
   ./tasks/swraid.nix
   ./tasks/trackpoint.nix
   ./tasks/powertop.nix
diff --git a/nixos/modules/tasks/stratis.nix b/nixos/modules/tasks/stratis.nix
new file mode 100644
index 000000000000..9a85fe23f248
--- /dev/null
+++ b/nixos/modules/tasks/stratis.nix
@@ -0,0 +1,18 @@
+{ config, lib, pkgs, ... }:
+
+let
+  cfg = config.services.stratis;
+in
+{
+  options.services.stratis = {
+    enable = lib.mkEnableOption (lib.mdDoc "Stratis Storage - Easy to use local storage management for Linux");
+  };
+
+  config = lib.mkIf cfg.enable {
+    environment.systemPackages = [ pkgs.stratis-cli ];
+    systemd.packages = [ pkgs.stratisd ];
+    services.dbus.packages = [ pkgs.stratisd ];
+    services.udev.packages = [ pkgs.stratisd ];
+    systemd.services.stratisd.wantedBy = [ "sysinit.target" ];
+  };
+}
diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix
index 2464ec4d404b..e0121fe6b6b8 100644
--- a/nixos/tests/all-tests.nix
+++ b/nixos/tests/all-tests.nix
@@ -533,6 +533,7 @@ in {
   sssd-ldap = handleTestOn ["x86_64-linux"] ./sssd-ldap.nix {};
   starship = handleTest ./starship.nix {};
   step-ca = handleTestOn ["x86_64-linux"] ./step-ca.nix {};
+  stratis = handleTest ./stratis {};
   strongswan-swanctl = handleTest ./strongswan-swanctl.nix {};
   stunnel = handleTest ./stunnel.nix {};
   sudo = handleTest ./sudo.nix {};
diff --git a/nixos/tests/stratis/default.nix b/nixos/tests/stratis/default.nix
new file mode 100644
index 000000000000..6964852e30a0
--- /dev/null
+++ b/nixos/tests/stratis/default.nix
@@ -0,0 +1,7 @@
+{ system ? builtins.currentSystem
+, pkgs ? import ../../.. { inherit system; }
+}:
+
+{
+  simple = import ./simple.nix { inherit system pkgs; };
+}
diff --git a/nixos/tests/stratis/simple.nix b/nixos/tests/stratis/simple.nix
new file mode 100644
index 000000000000..7357d71fc52b
--- /dev/null
+++ b/nixos/tests/stratis/simple.nix
@@ -0,0 +1,39 @@
+import ../make-test-python.nix ({ pkgs, ... }:
+  {
+    name = "stratis";
+
+    meta = with pkgs.lib.maintainers; {
+      maintainers = [ nickcao ];
+    };
+
+    nodes.machine = { pkgs, ... }: {
+      services.stratis.enable = true;
+      virtualisation.emptyDiskImages = [ 1024 1024 1024 1024 ];
+    };
+
+    testScript = ''
+      machine.wait_for_unit("stratisd")
+      # test pool creation
+      machine.succeed("stratis pool create     testpool /dev/vdb")
+      machine.succeed("stratis pool add-data   testpool /dev/vdc")
+      machine.succeed("stratis pool init-cache testpool /dev/vdd")
+      machine.succeed("stratis pool add-cache  testpool /dev/vde")
+      # test filesystem creation and rename
+      machine.succeed("stratis filesystem create testpool testfs0")
+      machine.succeed("stratis filesystem rename testpool testfs0 testfs1")
+      # test snapshot
+      machine.succeed("mkdir -p /mnt/testfs1 /mnt/testfs2")
+      machine.wait_for_file("/dev/stratis/testpool/testfs1")
+      machine.succeed("mount /dev/stratis/testpool/testfs1 /mnt/testfs1")
+      machine.succeed("echo test0 > /mnt/testfs1/test0")
+      machine.succeed("echo test1 > /mnt/testfs1/test1")
+      machine.succeed("stratis filesystem snapshot testpool testfs1 testfs2")
+      machine.succeed("echo test2 > /mnt/testfs1/test1")
+      machine.wait_for_file("/dev/stratis/testpool/testfs2")
+      machine.succeed("mount /dev/stratis/testpool/testfs2 /mnt/testfs2")
+      assert "test0" in machine.succeed("cat /mnt/testfs1/test0")
+      assert "test0" in machine.succeed("cat /mnt/testfs2/test0")
+      assert "test2" in machine.succeed("cat /mnt/testfs1/test1")
+      assert "test1" in machine.succeed("cat /mnt/testfs2/test1")
+    '';
+  })
diff --git a/pkgs/development/python-modules/dbus-python-client-gen/default.nix b/pkgs/development/python-modules/dbus-python-client-gen/default.nix
new file mode 100644
index 000000000000..100144c152e4
--- /dev/null
+++ b/pkgs/development/python-modules/dbus-python-client-gen/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, into-dbus-python
+, dbus-python
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "dbus-python-client-gen";
+  version = "0.8";
+
+  src = fetchFromGitHub {
+    owner = "stratis-storage";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-nSzxT65WHBVct5pGHmIAHJXftd0tKZeK/argN+V9xcs=";
+  };
+
+  propagatedBuildInputs = [
+    into-dbus-python
+    dbus-python
+  ];
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  meta = with lib; {
+    description = "A Python library for generating dbus-python client code";
+    homepage = "https://github.com/stratis-storage/dbus-python-client-gen";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ nickcao ];
+  };
+}
diff --git a/pkgs/development/python-modules/dbus-signature-pyparsing/default.nix b/pkgs/development/python-modules/dbus-signature-pyparsing/default.nix
new file mode 100644
index 000000000000..659fcc3ed59d
--- /dev/null
+++ b/pkgs/development/python-modules/dbus-signature-pyparsing/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pyparsing
+, pytestCheckHook
+, hypothesis
+, hs-dbus-signature
+}:
+
+buildPythonPackage rec {
+  pname = "dbus-signature-pyparsing";
+  version = "0.04";
+
+  src = fetchFromGitHub {
+    owner = "stratis-storage";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-IXyepfq7pLTRkTolKWsKGrYDoxukVC9JTrxS9xV7s2I=";
+  };
+
+  propagatedBuildInputs = [ pyparsing ];
+  checkInputs = [
+    pytestCheckHook
+    hypothesis
+    hs-dbus-signature
+  ];
+
+  meta = with lib; {
+    description = "A Parser for a D-Bus Signature";
+    homepage = "https://github.com/stratis-storage/dbus-signature-pyparsing";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nickcao ];
+  };
+}
diff --git a/pkgs/development/python-modules/hs-dbus-signature/default.nix b/pkgs/development/python-modules/hs-dbus-signature/default.nix
new file mode 100644
index 000000000000..7d071b75c3b1
--- /dev/null
+++ b/pkgs/development/python-modules/hs-dbus-signature/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, pytestCheckHook
+, hypothesis
+}:
+
+buildPythonPackage rec {
+  pname = "hs-dbus-signature";
+  version = "0.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-NNnTcSX+K8zU+sj1QBd13h7aEXN9VqltJMNWCuhgZ6I=";
+  };
+
+  checkInputs = [
+    pytestCheckHook
+    hypothesis
+  ];
+
+  meta = with lib; {
+    description = "A Hypothesis Strategy for Generating Arbitrary DBus Signatures";
+    homepage = "https://github.com/stratis-storage/hs-dbus-signature";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ nickcao ];
+  };
+}
diff --git a/pkgs/development/python-modules/into-dbus-python/default.nix b/pkgs/development/python-modules/into-dbus-python/default.nix
new file mode 100644
index 000000000000..1d893cd69692
--- /dev/null
+++ b/pkgs/development/python-modules/into-dbus-python/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, dbus-signature-pyparsing
+, dbus-python
+, pytestCheckHook
+, hypothesis
+, hs-dbus-signature
+}:
+
+buildPythonPackage rec {
+  pname = "into-dbus-python";
+  version = "0.08";
+
+  src = fetchFromGitHub {
+    owner = "stratis-storage";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Z8e6oAvRMIisMjG4HcS5jSH1znGVc7pGpMITo5fXYVs=";
+  };
+
+  propagatedBuildInputs = [
+    dbus-signature-pyparsing
+    dbus-python
+  ];
+  checkInputs = [
+    pytestCheckHook
+    hypothesis
+    hs-dbus-signature
+  ];
+
+  meta = with lib; {
+    description = "A transformer to dbus-python types";
+    homepage = "https://github.com/stratis-storage/into-dbus-python";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nickcao ];
+  };
+}
diff --git a/pkgs/tools/filesystems/stratis-cli/default.nix b/pkgs/tools/filesystems/stratis-cli/default.nix
new file mode 100644
index 000000000000..813ecfa22c6d
--- /dev/null
+++ b/pkgs/tools/filesystems/stratis-cli/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+, nixosTests
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "stratis-cli";
+  version = "3.2.0";
+
+  src = fetchFromGitHub {
+    owner = "stratis-storage";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-JQXTzvm4l/pl2T4djZ3HEdDQJdFE+I9doe8Iv5q34kw=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    psutil
+    python-dateutil
+    wcwidth
+    justbytes
+    dbus-client-gen
+    dbus-python-client-gen
+    packaging
+  ];
+
+  passthru.tests = nixosTests.stratis;
+
+  meta = with lib; {
+    description = "CLI for the Stratis project";
+    homepage = "https://stratis-storage.github.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nickcao ];
+  };
+}
diff --git a/pkgs/tools/filesystems/stratisd/default.nix b/pkgs/tools/filesystems/stratisd/default.nix
index 1302c10ea8c1..b37c46c4e2d8 100644
--- a/pkgs/tools/filesystems/stratisd/default.nix
+++ b/pkgs/tools/filesystems/stratisd/default.nix
@@ -18,6 +18,7 @@
 , tpm2-tools
 , coreutils
 , clevisSupport ? false
+, nixosTests
 }:
 
 stdenv.mkDerivation rec {
@@ -95,6 +96,8 @@ stdenv.mkDerivation rec {
     rm -r "$out/lib/systemd/system-generators"
   '';
 
+  passthru.tests = nixosTests.stratis;
+
   meta = with lib; {
     description = "Easy to use local storage management for Linux";
     homepage = "https://stratis-storage.github.io";
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index c5ceab27e574..efb71a1b39e6 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -5940,6 +5940,8 @@ with pkgs;
 
   stratisd = callPackage ../tools/filesystems/stratisd { };
 
+  stratis-cli = callPackage ../tools/filesystems/stratis-cli { };
+
   strawberry = libsForQt5.callPackage ../applications/audio/strawberry { };
 
   schildichat-desktop = callPackage ../applications/networking/instant-messengers/schildichat/schildichat-desktop.nix {
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 63218f729214..6d95f5c4beec 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -2302,6 +2302,10 @@ in {
     inherit (pkgs) dbus;
   };
 
+  dbus-python-client-gen = callPackage ../development/python-modules/dbus-python-client-gen { };
+
+  dbus-signature-pyparsing = callPackage ../development/python-modules/dbus-signature-pyparsing { };
+
   dbutils = callPackage ../development/python-modules/dbutils { };
 
   db-dtypes = callPackage ../development/python-modules/db-dtypes { };
@@ -4235,6 +4239,8 @@ in {
 
   hpccm = callPackage ../development/python-modules/hpccm { };
 
+  hs-dbus-signature = callPackage ../development/python-modules/hs-dbus-signature { };
+
   hsaudiotag3k = callPackage ../development/python-modules/hsaudiotag3k { };
 
   hsluv = callPackage ../development/python-modules/hsluv { };
@@ -4523,6 +4529,8 @@ in {
 
   intervaltree = callPackage ../development/python-modules/intervaltree { };
 
+  into-dbus-python = callPackage ../development/python-modules/into-dbus-python { };
+
   intreehooks = callPackage ../development/python-modules/intreehooks { };
 
   invocations = callPackage ../development/python-modules/invocations { };