NixOS configuration for HPC cluster
https://docs.hpc.informatik.hs-fulda.de/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
227 lines
6.8 KiB
227 lines
6.8 KiB
{ pkgs, config, lib, ... }:
|
|
|
|
with lib;
|
|
|
|
{
|
|
options.hpc.beegfs = {
|
|
package = mkOption {
|
|
description = ''
|
|
BeeGFS package.
|
|
'';
|
|
type = types.package;
|
|
default = config.boot.kernelPackages.callPackage ../packages/beegfs/default.nix { };
|
|
};
|
|
|
|
mgmtdHost = mkOption {
|
|
description = ''
|
|
Hostname of the management host.
|
|
'';
|
|
type = types.str;
|
|
};
|
|
|
|
connAuthFile = mkOption {
|
|
description = ''
|
|
File containing shared secret authentication.
|
|
'';
|
|
type = types.str;
|
|
};
|
|
|
|
client = {
|
|
enable = mkEnableOption "BeeGFS client";
|
|
|
|
mountPoint = mkOption {
|
|
description = ''
|
|
Mount point under which the BeeGFS filesystem is mounted.
|
|
'';
|
|
type = types.nullOr types.str;
|
|
default = null;
|
|
};
|
|
};
|
|
|
|
mgmtd = {
|
|
enable = mkEnableOption "BeeGFS management server daemon";
|
|
};
|
|
|
|
meta = {
|
|
enable = mkEnableOption "BeeGFS meta-data server daemon";
|
|
};
|
|
|
|
storage = {
|
|
enable = mkEnableOption "BeeGFS storage server daemon";
|
|
};
|
|
};
|
|
|
|
config = mkMerge [
|
|
(mkIf config.hpc.beegfs.client.enable {
|
|
boot.kernelModules = [ "beegfs" ];
|
|
boot.extraModulePackages = [ config.hpc.beegfs.package.module ];
|
|
|
|
environment.etc."beegfs-client" = {
|
|
enable = true;
|
|
target = "beegfs/client.conf";
|
|
text = ''
|
|
sysMgmtdHost = ${config.hpc.beegfs.mgmtdHost}
|
|
connAuthFile = ${config.hpc.beegfs.connAuthFile}
|
|
'';
|
|
};
|
|
|
|
systemd.mounts = mkIf (config.hpc.beegfs.client.mountPoint != null) [ {
|
|
where = config.hpc.beegfs.client.mountPoint;
|
|
what = "beegfs_nodev";
|
|
type = "beegfs";
|
|
|
|
options = "cfgFile=/etc/beegfs/client.conf,_netdev";
|
|
|
|
requires = [ "beegfs-helperd.service" ];
|
|
after = [ "beegfs-helperd.service" ];
|
|
} ];
|
|
|
|
systemd.services."beegfs-helperd" = let
|
|
cfgFile = pkgs.writeText "beegfs-helperd.conf" ''
|
|
connAuthFile = ${config.hpc.beegfs.connAuthFile}
|
|
logType = syslog
|
|
'';
|
|
in {
|
|
wantedBy = [ "multi-user.target" ];
|
|
requires = [ "network-online.target" ];
|
|
after = [ "network-online.target" ];
|
|
|
|
serviceConfig = rec {
|
|
ExecStart = ''
|
|
${config.hpc.beegfs.package}/bin/beegfs-helperd \
|
|
cfgFile=${cfgFile} \
|
|
pidFile=${PIDFile} \
|
|
runDaemonized=false
|
|
'';
|
|
PIDFile = "/run/beegfs-helperd.pid";
|
|
TimeoutStopSec = "300";
|
|
};
|
|
};
|
|
|
|
environment.systemPackages = [ (pkgs.runCommandLocal "beegfs-utils" {
|
|
nativeBuildInputs = [ pkgs.makeWrapper ];
|
|
} ''
|
|
mkdir -p $out/bin
|
|
|
|
makeWrapper ${config.hpc.beegfs.package}/bin/beegfs-check-servers \
|
|
$out/bin/beegfs-check-servers \
|
|
--add-flags "-c /etc/beegfs/client.conf" \
|
|
--prefix PATH : ${lib.makeBinPath [ config.hpc.beegfs.package ]}
|
|
|
|
makeWrapper ${config.hpc.beegfs.package}/bin/beegfs-ctl \
|
|
$out/bin/beegfs-ctl \
|
|
--add-flags "--cfgFile=/etc/beegfs/client.conf"
|
|
|
|
makeWrapper ${config.hpc.beegfs.package}/bin/beegfs-ctl \
|
|
$out/bin/beegfs-df \
|
|
--add-flags "--cfgFile=/etc/beegfs/client.conf" \
|
|
--add-flags --listtargets \
|
|
--add-flags --hidenodeid \
|
|
--add-flags --pools \
|
|
--add-flags --spaceinfo
|
|
|
|
makeWrapper ${config.hpc.beegfs.package}/bin/fsck.beegfs \
|
|
$out/bin/beegfs-fsck \
|
|
--add-flags "--cfgFile=/etc/beegfs/client.conf"
|
|
'') ];
|
|
})
|
|
|
|
(mkIf config.hpc.beegfs.mgmtd.enable (let
|
|
cfgFile = pkgs.writeText "beegfs-mgmtd.conf" ''
|
|
storeMgmtdDirectory = /var/lib/beegs/mgmtd
|
|
storeAllowFirstRunInit = false
|
|
connAuthFile = ${config.hpc.beegfs.connAuthFile}
|
|
logType = syslog
|
|
'';
|
|
in {
|
|
systemd.services."beegfs-mgmtd" = {
|
|
wantedBy = [ "multi-user.target" ];
|
|
requires = [ "network-online.target" ];
|
|
after = [ "network-online.target" "rdma.service" "opensmd.service" "opensm.service" ];
|
|
|
|
preStart = ''
|
|
if ! test -e /var/lib/beegs/mgmtd; then
|
|
${config.hpc.beegfs.package}/bin/beegfs-setup-mgmtd -C -p /var/lib/beegs/mgmtd
|
|
fi
|
|
'';
|
|
|
|
serviceConfig = rec {
|
|
ExecStart = ''
|
|
${config.hpc.beegfs.package}/bin/beegfs-mgmtd \
|
|
cfgFile=${cfgFile} \
|
|
pidFile=${PIDFile} \
|
|
runDaemonized=false
|
|
'';
|
|
PIDFile = "/run/beegfs-mgmtd.pid";
|
|
TimeoutStopSec = "300";
|
|
};
|
|
};
|
|
}))
|
|
|
|
(mkIf config.hpc.beegfs.meta.enable (let
|
|
cfgFile = pkgs.writeText "beegfs-meta.conf" ''
|
|
storeMetaDirectory = /var/lib/beegs/meta
|
|
storeAllowFirstRunInit = false
|
|
sysMgmtdHost = ${config.hpc.beegfs.mgmtdHost}
|
|
connAuthFile = ${config.hpc.beegfs.connAuthFile}
|
|
logType = syslog
|
|
'';
|
|
in {
|
|
systemd.services."beegfs-meta" = {
|
|
wantedBy = [ "multi-user.target" ];
|
|
requires = [ "network-online.target" ];
|
|
after = [ "network-online.target" "beegfs-mgmt.service" "beegfs-storage.service" "rdma.service" "opensmd.service" "opensm.service" ];
|
|
|
|
preStart = ''
|
|
if ! test -e /var/lib/beegs/meta; then
|
|
${config.hpc.beegfs.package}/bin/beegfs-setup-meta -C -p /var/lib/beegs/meta
|
|
fi
|
|
'';
|
|
|
|
serviceConfig = rec {
|
|
ExecStart = ''
|
|
${config.hpc.beegfs.package}/bin/beegfs-meta \
|
|
cfgFile=${cfgFile} \
|
|
pidFile=${PIDFile} \
|
|
runDaemonized=false
|
|
'';
|
|
PIDFile = "/run/beegfs-meta.pid";
|
|
TimeoutStopSec = "300";
|
|
};
|
|
};
|
|
}))
|
|
|
|
(mkIf config.hpc.beegfs.storage.enable (let
|
|
cfgFile = pkgs.writeText "beegfs-storage.conf" ''
|
|
storeStorageDirectory = /var/lib/beegs/storage
|
|
storeAllowFirstRunInit = false
|
|
sysMgmtdHost = ${config.hpc.beegfs.mgmtdHost}
|
|
connAuthFile = ${config.hpc.beegfs.connAuthFile}
|
|
logType = syslog
|
|
'';
|
|
in {
|
|
systemd.services."beegfs-storage" = {
|
|
wantedBy = [ "multi-user.target" ];
|
|
requires = [ "network-online.target" ];
|
|
after = [ "network-online.target" "beegfs-mgmt.service" "rdma.service" "opensmd.service" "opensm.service" ];
|
|
|
|
preStart = ''
|
|
if ! test -e /var/lib/beegs/storage; then
|
|
${config.hpc.beegfs.package}/bin/beegfs-setup-storage -C -p /var/lib/beegs/storage
|
|
fi
|
|
'';
|
|
|
|
serviceConfig = rec {
|
|
ExecStart = ''
|
|
${config.hpc.beegfs.package}/bin/beegfs-storage \
|
|
cfgFile=${cfgFile} \
|
|
pidFile=${PIDFile} \
|
|
runDaemonized=false
|
|
'';
|
|
PIDFile = "/run/beegfs-storage.pid";
|
|
TimeoutStopSec = "300";
|
|
};
|
|
};
|
|
}))
|
|
];
|
|
}
|