From 1e0cc1ec74b4a77edd7c222cb32145b4373d0205 Mon Sep 17 00:00:00 2001 From: chn Date: Sat, 4 May 2024 12:22:41 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=89=93=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 1 + default.nix | 18 ++++++++++++++++++ flake.nix | 20 +++++--------------- {keys => share/keys}/00 | 0 {keys => share/keys}/01 | 0 {keys => share/keys}/02 | 0 {keys => share/keys}/03 | 0 {keys => share/keys}/chn | 0 {keys => share/keys}/gb | 0 {keys => share/keys}/xll | 0 {keys => share/keys}/yjq | 0 {keys => share/keys}/zem | 0 src/env.cpp | 1 - src/ssh.cpp | 16 ++++++++-------- 14 files changed, 32 insertions(+), 24 deletions(-) create mode 100644 default.nix rename {keys => share/keys}/00 (100%) rename {keys => share/keys}/01 (100%) rename {keys => share/keys}/02 (100%) rename {keys => share/keys}/03 (100%) rename {keys => share/keys}/chn (100%) rename {keys => share/keys}/gb (100%) rename {keys => share/keys}/xll (100%) rename {keys => share/keys}/yjq (100%) rename {keys => share/keys}/zem (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index af6c5da..46ea8e1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,7 @@ target_link_libraries(hpcstat PRIVATE fmt::fmt Boost::headers Boost::filesystem nlohmann_json::nlohmann_json range-v3::range-v3) install(TARGETS hpcstat RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +install(DIRECTORY share/ DESTINATION ${CMAKE_INSTALL_DATADIR}/hpcstat) get_property(ImportedTargets DIRECTORY "${CMAKE_SOURCE_DIR}" PROPERTY IMPORTED_TARGETS) message("Imported targets: ${ImportedTargets}") diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..74297d6 --- /dev/null +++ b/default.nix @@ -0,0 +1,18 @@ +{ + stdenv, cmake, pkg-config, standalone ? false, makeWrapper, + boost, fmt, zxorm, nlohmann_json, zpp-bits, range-v3, nameof, openssh +}: stdenv.mkDerivation +{ + name = "hpcstat"; + src = ./.; + buildInputs = + [ boost fmt zxorm nlohmann_json zpp-bits range-v3 nameof ]; + nativeBuildInputs = [ cmake pkg-config makeWrapper ]; + postInstall = + if standalone then "cp ${openssh}/bin/{ssh-add,ssh-keygen} $out/bin" + else + '' + wrapProgram $out/bin/hpcstat --set HPCSTAT_SHAREDIR $out/share/hpcstat \ + --set HPCSTAT_DATADIR /var/lib/hpcstat + ''; +} diff --git a/flake.nix b/flake.nix index 54951ad..62cf3e4 100644 --- a/flake.nix +++ b/flake.nix @@ -14,30 +14,20 @@ { pkgs = final; inherit (inputs.nixpkgs) lib; topInputs = inputs.nixos.inputs; }; })]; }); - in + in rec { packages.x86_64-linux = rec { - hpcstat = pkgs.pkgsStatic.stdenv.mkDerivation - { - name = "hpcstat"; - src = ./.; - buildInputs = with pkgs.pkgsStatic; - [ boost fmt localPackages.zxorm nlohmann_json localPackages.zpp-bits range-v3 localPackages.nameof ]; - nativeBuildInputs = with pkgs; [ cmake pkg-config ]; - postInstall = "cp ${openssh}/bin/{ssh-add,ssh-keygen} $out/bin"; - }; + hpcstat = pkgs.pkgsStatic.callPackage ./. + { inherit (pkgs.pkgsStatic.localPackages) zxorm zpp-bits nameof; inherit openssh; standalone = true; }; default = hpcstat; openssh = (pkgs.pkgsStatic.openssh.override { withLdns = false; etcDir = null; }) .overrideAttrs (prev: { doCheck = false; patches = prev.patches ++ [ ./openssh.patch ];}); }; devShell.x86_64-linux = pkgs.mkShell { - nativeBuildInputs = with pkgs; [ pkg-config cmake clang-tools_18 ]; - buildInputs = (with pkgs.pkgsStatic; - [ fmt boost localPackages.zxorm nlohmann_json localPackages.zpp-bits range-v3 localPackages.nameof ]); - # hardeningDisable = [ "all" ]; - # NIX_DEBUG = "1"; + inputsFrom = [ packages.x86_64-linux.hpcstat ]; + nativeBuildInputs = with pkgs; [ clang-tools_18 ]; CMAKE_EXPORT_COMPILE_COMMANDS = "1"; }; }; diff --git a/keys/00 b/share/keys/00 similarity index 100% rename from keys/00 rename to share/keys/00 diff --git a/keys/01 b/share/keys/01 similarity index 100% rename from keys/01 rename to share/keys/01 diff --git a/keys/02 b/share/keys/02 similarity index 100% rename from keys/02 rename to share/keys/02 diff --git a/keys/03 b/share/keys/03 similarity index 100% rename from keys/03 rename to share/keys/03 diff --git a/keys/chn b/share/keys/chn similarity index 100% rename from keys/chn rename to share/keys/chn diff --git a/keys/gb b/share/keys/gb similarity index 100% rename from keys/gb rename to share/keys/gb diff --git a/keys/xll b/share/keys/xll similarity index 100% rename from keys/xll rename to share/keys/xll diff --git a/keys/yjq b/share/keys/yjq similarity index 100% rename from keys/yjq rename to share/keys/yjq diff --git a/keys/zem b/share/keys/zem similarity index 100% rename from keys/zem rename to share/keys/zem diff --git a/src/env.cpp b/src/env.cpp index 5eb9024..5bab8ad 100644 --- a/src/env.cpp +++ b/src/env.cpp @@ -15,5 +15,4 @@ namespace hpcstat::env } else return value; } - // XDG_SESSION_ID HPCSTAT_SUBACCOUNT SSH_CONNECTION } diff --git a/src/ssh.cpp b/src/ssh.cpp index 46e0c14..ecba639 100644 --- a/src/ssh.cpp +++ b/src/ssh.cpp @@ -14,12 +14,12 @@ namespace hpcstat::ssh { std::optional fingerprint() { - if (auto datadir = env::env("HPCSTAT_DATADIR", true); !datadir) + if (auto sharedir = env::env("HPCSTAT_SHAREDIR", true); !sharedir) return std::nullopt; else if ( auto output = - exec(std::filesystem::path(*datadir) / "ssh-add", { "-l" }); + exec(std::filesystem::path(*sharedir) / "ssh-add", { "-l" }); !output ) { std::cerr << "Failed to get ssh fingerprints\n"; return std::nullopt; } @@ -39,16 +39,16 @@ namespace hpcstat::ssh } std::optional sign(std::string message, std::string fingerprint) { - if (auto datadir = env::env("HPCSTAT_DATADIR", true); !datadir) + if (auto sharedir = env::env("HPCSTAT_SHAREDIR", true); !sharedir) return std::nullopt; else if ( auto output = exec ( - std::filesystem::path(*datadir) / "ssh-keygen", + std::filesystem::path(*sharedir) / "ssh-keygen", { "-Y", "sign", "-q", - "-f", fmt::format("{}/keys/{}", *datadir, Keys[fingerprint].PubkeyFilename), + "-f", fmt::format("{}/keys/{}", *sharedir, Keys[fingerprint].PubkeyFilename), "-n", "hpcstat@chn.moe", "-" }, message @@ -60,7 +60,7 @@ namespace hpcstat::ssh } bool verify(std::string message, std::string signature, std::string fingerprint) { - if (auto datadir = env::env("HPCSTAT_DATADIR", true); !datadir) + if (auto sharedir = env::env("HPCSTAT_SHAREDIR", true); !sharedir) return false; else { @@ -71,10 +71,10 @@ namespace hpcstat::ssh std::ofstream(signaturefile) << signature; return exec ( - std::filesystem::path(*datadir) / "ssh-keygen", + std::filesystem::path(*sharedir) / "ssh-keygen", { "-Y", "verify", - "-f", fmt::format("{}/keys/{}", *datadir, Keys[fingerprint].PubkeyFilename), + "-f", fmt::format("{}/keys/{}", *sharedir, Keys[fingerprint].PubkeyFilename), "-n", "hpcstat@chn.moe", "-s", signaturefile.string() }, message