forked from rarias/jungle
Compare commits
122 Commits
remove-old
...
llvm-intel
| Author | SHA1 | Date | |
|---|---|---|---|
|
e8a51dc271
|
|||
|
6be58c257c
|
|||
|
71f8ffc0f6
|
|||
|
0b4f84e2a4
|
|||
|
1e99b944b5
|
|||
|
8ea3d58939
|
|||
|
b07c53191a
|
|||
|
54ad2a97fc
|
|||
|
4ff540c4c8
|
|||
|
83f6b22876
|
|||
|
5610c927e8
|
|||
|
690fb8a793
|
|||
|
d2b42a3a8c
|
|||
|
f9b16c5cec
|
|||
|
77e96f3217
|
|||
|
32d5502eb6
|
|||
|
5572a94e70
|
|||
|
1ed7e8ee93
|
|||
|
53cc7d738b
|
|||
|
82b41a6208
|
|||
|
28501e00ba
|
|||
|
dd8f1f7f6f
|
|||
|
0be7caa975
|
|||
|
c1e5ada835
|
|||
|
fed2093d8b
|
|||
|
e0e96e3c9e
|
|||
|
b89de113a9
|
|||
|
d955edc8d5
|
|||
|
4b5faf5226
|
|||
|
e11ca84d91
|
|||
|
6d97ad2622
|
|||
|
16915bdcef
|
|||
| cf47139ebe | |||
|
54dfaa9dff
|
|||
|
34238d81c7
|
|||
|
1b36c70512
|
|||
|
f5b1082ab9
|
|||
|
386cfd8973
|
|||
|
f9db76c466
|
|||
|
0a255b1ffa
|
|||
|
af512636ac
|
|||
|
9dae6a6f38
|
|||
|
839b9b8c76
|
|||
|
7ac154a55b
|
|||
|
14af841511
|
|||
|
1d02f7fae4
|
|||
|
a71b12c60e
|
|||
|
b96e3422b2
|
|||
|
e7b3f972b0
|
|||
|
79fdfc6c0e
|
|||
|
71352ff5d1
|
|||
|
06925bc0ca
|
|||
|
1eaca98618
|
|||
|
7195ca4cb6
|
|||
|
7674f61b17
|
|||
| f71e807d47 | |||
| 461d96dc75 | |||
| 26d9e3d432 | |||
| 5c30975b8b | |||
| d4c00679ee | |||
| 32a576e870 | |||
| 8197221146 | |||
| 374cd4ce48 | |||
| d3e54b7c99 | |||
| 46b7efb5ac | |||
| 56ab099017 | |||
| 2654b9fdd9 | |||
| 84a5cb09ee | |||
|
4899d20748
|
|||
| 76cd6d64b2 | |||
| 8dab0d82ba | |||
| 958dcd4774 | |||
| 7a6e4232de | |||
| 3b56e905e5 | |||
| 2d41309466 | |||
| deb0cd1488 | |||
| cd1f502ecc | |||
| dda6a66782 | |||
| 22420e6ac8 | |||
| a71cd78b4c | |||
| e84a2cadbb | |||
| d3e43eb651 | |||
| a491546ffb | |||
| 933c78a80b | |||
| 150969be9b | |||
| 9097729759 | |||
| 779449f1db | |||
| 6cbe33bd80 | |||
| 3f1f5ae8f2 | |||
| fe8586e780 | |||
| 8677adba27 | |||
| f614149edf | |||
| 859eebda98 | |||
| c2a201b085 | |||
| f921f0a4bd | |||
| aa16bfc0bc | |||
|
a173af654f
|
|||
|
2fff7e4a7b
|
|||
|
a761b73336
|
|||
|
86eb796771
|
|||
|
08633435cf
|
|||
|
39d64456a4
|
|||
|
410040a4a0
|
|||
| fc69ef3217 | |||
| 1d025f7a38 | |||
| 7989779c8f | |||
| 7d721084a7 | |||
| 796d34a549 | |||
| 5ff1b1343b | |||
| c5cc13fad8 | |||
| 2e09314a7e | |||
| 217d9c1fc0 | |||
| f47ab7757e | |||
| 4b265c071e | |||
| 019826d09e | |||
| a294daf7e3 | |||
| a7018250ca | |||
| e3d1785285 | |||
|
ab86243a07
|
|||
| 14f2393d30 | |||
| f115d611e7 | |||
| 4261d327c6 |
90
flake.lock
generated
90
flake.lock
generated
@@ -1,107 +1,25 @@
|
|||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"agenix": {
|
|
||||||
"inputs": {
|
|
||||||
"darwin": "darwin",
|
|
||||||
"home-manager": "home-manager",
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"systems": "systems"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1750173260,
|
|
||||||
"narHash": "sha256-9P1FziAwl5+3edkfFcr5HeGtQUtrSdk/MksX39GieoA=",
|
|
||||||
"owner": "ryantm",
|
|
||||||
"repo": "agenix",
|
|
||||||
"rev": "531beac616433bac6f9e2a19feb8e99a22a66baf",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "ryantm",
|
|
||||||
"repo": "agenix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"darwin": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"agenix",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1744478979,
|
|
||||||
"narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=",
|
|
||||||
"owner": "lnl7",
|
|
||||||
"repo": "nix-darwin",
|
|
||||||
"rev": "43975d782b418ebf4969e9ccba82466728c2851b",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "lnl7",
|
|
||||||
"ref": "master",
|
|
||||||
"repo": "nix-darwin",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"home-manager": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"agenix",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1745494811,
|
|
||||||
"narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "home-manager",
|
|
||||||
"rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "home-manager",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1752436162,
|
"lastModified": 1767634882,
|
||||||
"narHash": "sha256-Kt1UIPi7kZqkSc5HVj6UY5YLHHEzPBkgpNUByuyxtlw=",
|
"narHash": "sha256-2GffSfQxe3sedHzK+sTKlYo/NTIAGzbFCIsNMUPAAnk=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "dfcd5b901dbab46c9c6e80b265648481aafb01f8",
|
"rev": "3c9db02515ef1d9b6b709fc60ba9a540957f661c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"ref": "nixos-25.05",
|
"ref": "nixos-25.11",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"agenix": "agenix",
|
|
||||||
"nixpkgs": "nixpkgs"
|
"nixpkgs": "nixpkgs"
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"systems": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1681028828,
|
|
||||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
|
||||||
"owner": "nix-systems",
|
|
||||||
"repo": "default",
|
|
||||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-systems",
|
|
||||||
"repo": "default",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": "root",
|
"root": "root",
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
{
|
{
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
|
||||||
agenix.url = "github:ryantm/agenix";
|
|
||||||
agenix.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs, agenix, ... }:
|
outputs = { self, nixpkgs, ... }:
|
||||||
let
|
let
|
||||||
mkConf = name: nixpkgs.lib.nixosSystem {
|
mkConf = name: nixpkgs.lib.nixosSystem {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
specialArgs = { inherit nixpkgs agenix; theFlake = self; };
|
specialArgs = { inherit nixpkgs; theFlake = self; };
|
||||||
modules = [ "${self.outPath}/m/${name}/configuration.nix" ];
|
modules = [ "${self.outPath}/m/${name}/configuration.nix" ];
|
||||||
};
|
};
|
||||||
# For now we only support x86
|
# For now we only support x86
|
||||||
|
|||||||
3
keys.nix
3
keys.nix
@@ -22,8 +22,9 @@ rec {
|
|||||||
storage = [ bay lake2 ];
|
storage = [ bay lake2 ];
|
||||||
monitor = [ hut ];
|
monitor = [ hut ];
|
||||||
login = [ apex ];
|
login = [ apex ];
|
||||||
|
services = [ tent ];
|
||||||
|
|
||||||
system = storage ++ monitor ++ login;
|
system = storage ++ monitor ++ login ++ services;
|
||||||
safe = system ++ compute;
|
safe = system ++ compute;
|
||||||
all = safe ++ playground;
|
all = safe ++ playground;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -57,6 +57,18 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
services.fail2ban = {
|
||||||
|
enable = true;
|
||||||
|
maxretry = 5;
|
||||||
|
bantime-increment = {
|
||||||
|
enable = true; # Double ban time on each attack
|
||||||
|
maxtime = "7d"; # Ban up to a week
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Disable SSH login with password, allow only keypair
|
||||||
|
services.openssh.settings.PasswordAuthentication = false;
|
||||||
|
|
||||||
networking.firewall = {
|
networking.firewall = {
|
||||||
extraCommands = ''
|
extraCommands = ''
|
||||||
# Blackhole BSC vulnerability scanner (OpenVAS) as it is spamming our
|
# Blackhole BSC vulnerability scanner (OpenVAS) as it is spamming our
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
mountdPort = 4002;
|
mountdPort = 4002;
|
||||||
statdPort = 4000;
|
statdPort = 4000;
|
||||||
exports = ''
|
exports = ''
|
||||||
/home 10.0.40.0/24(rw,async,no_subtree_check,no_root_squash)
|
/home 10.0.40.0/21(rw,async,no_subtree_check,no_root_squash)
|
||||||
/home 10.106.0.0/24(rw,async,no_subtree_check,no_root_squash)
|
/home 10.106.0.0/24(rw,async,no_subtree_check,no_root_squash)
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
@@ -15,19 +15,19 @@
|
|||||||
# Check with `rpcinfo -p`
|
# Check with `rpcinfo -p`
|
||||||
extraCommands = ''
|
extraCommands = ''
|
||||||
# Accept NFS traffic from compute nodes but not from the outside
|
# Accept NFS traffic from compute nodes but not from the outside
|
||||||
iptables -A nixos-fw -p tcp -s 10.0.40.0/24 --dport 111 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s 10.0.40.0/21 --dport 111 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p tcp -s 10.0.40.0/24 --dport 2049 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s 10.0.40.0/21 --dport 2049 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p tcp -s 10.0.40.0/24 --dport 4000 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s 10.0.40.0/21 --dport 4000 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p tcp -s 10.0.40.0/24 --dport 4001 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s 10.0.40.0/21 --dport 4001 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p tcp -s 10.0.40.0/24 --dport 4002 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s 10.0.40.0/21 --dport 4002 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p tcp -s 10.0.40.0/24 --dport 20048 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s 10.0.40.0/21 --dport 20048 -j nixos-fw-accept
|
||||||
# Same but UDP
|
# Same but UDP
|
||||||
iptables -A nixos-fw -p udp -s 10.0.40.0/24 --dport 111 -j nixos-fw-accept
|
iptables -A nixos-fw -p udp -s 10.0.40.0/21 --dport 111 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p udp -s 10.0.40.0/24 --dport 2049 -j nixos-fw-accept
|
iptables -A nixos-fw -p udp -s 10.0.40.0/21 --dport 2049 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p udp -s 10.0.40.0/24 --dport 4000 -j nixos-fw-accept
|
iptables -A nixos-fw -p udp -s 10.0.40.0/21 --dport 4000 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p udp -s 10.0.40.0/24 --dport 4001 -j nixos-fw-accept
|
iptables -A nixos-fw -p udp -s 10.0.40.0/21 --dport 4001 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p udp -s 10.0.40.0/24 --dport 4002 -j nixos-fw-accept
|
iptables -A nixos-fw -p udp -s 10.0.40.0/21 --dport 4002 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p udp -s 10.0.40.0/24 --dport 20048 -j nixos-fw-accept
|
iptables -A nixos-fw -p udp -s 10.0.40.0/21 --dport 20048 -j nixos-fw-accept
|
||||||
|
|
||||||
# Accept NFS traffic from wg0
|
# Accept NFS traffic from wg0
|
||||||
iptables -A nixos-fw -p tcp -i wg0 -s 10.106.0.0/24 --dport 111 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -i wg0 -s 10.106.0.0/24 --dport 111 -j nixos-fw-accept
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
address = "10.0.40.40";
|
address = "10.0.40.40";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
interfaces.ibp5s0.ipv4.addresses = [ {
|
interfaces.ibs785.ipv4.addresses = [ {
|
||||||
address = "10.0.42.40";
|
address = "10.0.42.40";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
# Accept monitoring requests from hut
|
# Accept monitoring requests from hut
|
||||||
iptables -A nixos-fw -p tcp -s hut -m multiport --dport 9283,9002 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s hut -m multiport --dport 9283,9002 -j nixos-fw-accept
|
||||||
# Accept all Ceph traffic from the local network
|
# Accept all Ceph traffic from the local network
|
||||||
iptables -A nixos-fw -p tcp -s 10.0.40.0/24 -m multiport --dport 3300,6789,6800:7568 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s 10.0.40.0/21 -m multiport --dport 3300,6789,6800:7568 -j nixos-fw-accept
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
{ agenix, ... }:
|
{ pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [ agenix.nixosModules.default ];
|
imports = [ ../../module/agenix.nix ];
|
||||||
|
|
||||||
environment.systemPackages = [
|
# Add agenix to system packages
|
||||||
agenix.packages.x86_64-linux.default
|
environment.systemPackages = [ pkgs.agenix ];
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,36 @@
|
|||||||
{ pkgs, config, ... }:
|
{ pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
vim wget git htop tmux pciutils tcpdump ripgrep nix-index nixos-option
|
cmake
|
||||||
nix-diff ipmitool freeipmi ethtool lm_sensors cmake gnumake file tree
|
ethtool
|
||||||
ncdu config.boot.kernelPackages.perf ldns pv
|
file
|
||||||
# From bsckgs overlay
|
freeipmi
|
||||||
|
git
|
||||||
|
gnumake
|
||||||
|
home-manager
|
||||||
|
htop
|
||||||
|
ipmitool
|
||||||
|
ldns
|
||||||
|
lm_sensors
|
||||||
|
ncdu
|
||||||
|
nix-diff
|
||||||
|
nix-index
|
||||||
|
nix-output-monitor
|
||||||
|
nixfmt-tree
|
||||||
|
nixos-option
|
||||||
|
pciutils
|
||||||
|
perf
|
||||||
|
pv
|
||||||
|
ripgrep
|
||||||
|
tcpdump
|
||||||
|
tmux
|
||||||
|
tree
|
||||||
|
vim
|
||||||
|
wget
|
||||||
|
|
||||||
|
# From jungle overlay
|
||||||
|
nixgen
|
||||||
osumb
|
osumb
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -134,11 +134,12 @@
|
|||||||
home = "/home/Computational/varcila";
|
home = "/home/Computational/varcila";
|
||||||
description = "Vincent Arcila";
|
description = "Vincent Arcila";
|
||||||
group = "Computational";
|
group = "Computational";
|
||||||
hosts = [ "apex" "hut" "tent" "fox" ];
|
hosts = [ "apex" "hut" "tent" "fox" "owl1" "owl2" ];
|
||||||
hashedPassword = "$6$oB0Tcn99DcM4Ch$Vn1A0ulLTn/8B2oFPi9wWl/NOsJzaFAWjqekwcuC9sMC7cgxEVb.Nk5XSzQ2xzYcNe5MLtmzkVYnRS1CqP39Y0";
|
hashedPassword = "$6$oB0Tcn99DcM4Ch$Vn1A0ulLTn/8B2oFPi9wWl/NOsJzaFAWjqekwcuC9sMC7cgxEVb.Nk5XSzQ2xzYcNe5MLtmzkVYnRS1CqP39Y0";
|
||||||
openssh.authorizedKeys.keys = [
|
openssh.authorizedKeys.keys = [
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKGt0ESYxekBiHJQowmKpfdouw0hVm3N7tUMtAaeLejK vincent@varch"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKGt0ESYxekBiHJQowmKpfdouw0hVm3N7tUMtAaeLejK vincent@varch"
|
||||||
];
|
];
|
||||||
|
shell = pkgs.zsh;
|
||||||
};
|
};
|
||||||
|
|
||||||
pmartin1 = {
|
pmartin1 = {
|
||||||
@@ -180,6 +181,45 @@
|
|||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFmMqKqPg4uocNOr3O41kLbZMOMJn3m2ZdN1JvTR96z3 bsccns@arnau-bsc"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFmMqKqPg4uocNOr3O41kLbZMOMJn3m2ZdN1JvTR96z3 bsccns@arnau-bsc"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
aaguirre = {
|
||||||
|
uid = 9655;
|
||||||
|
isNormalUser = true;
|
||||||
|
home = "/home/Computational/aaguirre";
|
||||||
|
description = "Alejandro Aguirre";
|
||||||
|
group = "Computational";
|
||||||
|
hosts = [ "apex" "hut" ];
|
||||||
|
hashedPassword = "$6$TXRXQT6jjBvxkxU6$E.sh5KspAm1qeG5Ct7OPHpo8REmbGDwjFGvqeGgTVz3GASGOAnPL7UMZsMAsAKBoahOw.v8LNno6XGrTEPzZH1";
|
||||||
|
openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOlRX7ZCnqtUJYCxKgWmgSrFCYuA2LHY96rVwqxXPl86 aaguirre@BSC-8488184117"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
emonteir = {
|
||||||
|
uid = 9656;
|
||||||
|
isNormalUser = true;
|
||||||
|
home = "/home/Computational/emonteir";
|
||||||
|
description = "Erwin Royson Monteiro";
|
||||||
|
group = "Computational";
|
||||||
|
hosts = [ "apex" "fox" ];
|
||||||
|
hashedPassword = "$6$0mU88zd3ZuK5NiJQ$DFWL5RMLH6esQM5UyhBCiiNryw4lDDmvJp7Usz3tmevnsiSJr6u0RsUKAnR/K8GRBFrV1.GocrgNjKjik5GY//";
|
||||||
|
openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOKZKot/Y3F5Wq9pQIXlCbyvQuVVeWMCsAC96Nd+LTcG erwin@Oreo"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
ssanzmar = {
|
||||||
|
uid = 9657;
|
||||||
|
isNormalUser = true;
|
||||||
|
home = "/home/Computational/ssanzmar";
|
||||||
|
description = "Sergio Sanz Martínez";
|
||||||
|
group = "Computational";
|
||||||
|
hosts = [ "apex" "fox" ];
|
||||||
|
hashedPassword = "$6$HUjNDJeJMmNQ6M64$laXSOZcXg6o4v2r8Jm8Xj9kmqw7veCY32po3TVDPRR4WlyxvOeqwoKr4NjlUlPPpKN55Oot3ZYHi.9iNXsH5E1";
|
||||||
|
openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIELrsRRHXryrdA2ZBx5XmdGxL4DC5bmJydhBeTWQ0SQ sergio.sanz.martinez@estudiantat.upc.edu"
|
||||||
|
];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
groups = {
|
groups = {
|
||||||
|
|||||||
@@ -5,5 +5,5 @@
|
|||||||
boot.kernelModules = [ "ipmi_watchdog" ];
|
boot.kernelModules = [ "ipmi_watchdog" ];
|
||||||
|
|
||||||
# Enable systemd watchdog with 30 s interval
|
# Enable systemd watchdog with 30 s interval
|
||||||
systemd.watchdog.runtimeTime = "30s";
|
systemd.settings.Manager.RuntimeWatchdogSec = 30;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,6 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{ pkgs, lib, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
# add the perf tool
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
config.boot.kernelPackages.perf
|
|
||||||
];
|
|
||||||
|
|
||||||
# allow non-root users to read tracing data from the kernel
|
# allow non-root users to read tracing data from the kernel
|
||||||
boot.kernel.sysctl."kernel.perf_event_paranoid" = -2;
|
boot.kernel.sysctl."kernel.perf_event_paranoid" = -2;
|
||||||
boot.kernel.sysctl."kernel.kptr_restrict" = 0;
|
boot.kernel.sysctl."kernel.kptr_restrict" = 0;
|
||||||
|
|||||||
@@ -93,20 +93,4 @@
|
|||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
serviceConfig.ExecStart = script;
|
serviceConfig.ExecStart = script;
|
||||||
};
|
};
|
||||||
|
|
||||||
# Only allow SSH connections from users who have a SLURM allocation
|
|
||||||
# See: https://slurm.schedmd.com/pam_slurm_adopt.html
|
|
||||||
security.pam.services.sshd.rules.account.slurm = {
|
|
||||||
control = "required";
|
|
||||||
enable = true;
|
|
||||||
modulePath = "${pkgs.slurm}/lib/security/pam_slurm_adopt.so";
|
|
||||||
args = [ "log_level=debug5" ];
|
|
||||||
order = 999999; # Make it last one
|
|
||||||
};
|
|
||||||
|
|
||||||
# Disable systemd session (pam_systemd.so) as it will conflict with the
|
|
||||||
# pam_slurm_adopt.so module. What happens is that the shell is first adopted
|
|
||||||
# into the slurmstepd task and then into the systemd session, which is not
|
|
||||||
# what we want, otherwise it will linger even if all jobs are gone.
|
|
||||||
security.pam.services.sshd.startSession = lib.mkForce false;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
./postgresql.nix
|
./postgresql.nix
|
||||||
./nginx.nix
|
./nginx.nix
|
||||||
./p.nix
|
./p.nix
|
||||||
|
./ompss2-timer.nix
|
||||||
#./pxe.nix
|
#./pxe.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -44,7 +45,7 @@
|
|||||||
address = "10.0.40.7";
|
address = "10.0.40.7";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
interfaces.ibp5s0.ipv4.addresses = [ {
|
interfaces.ibs785.ipv4.addresses = [ {
|
||||||
address = "10.0.42.7";
|
address = "10.0.42.7";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
|
|||||||
@@ -29,6 +29,9 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Allow gitea user to send mail
|
||||||
|
users.users.gitea.extraGroups = [ "mail-robot" ];
|
||||||
|
|
||||||
services.gitea-actions-runner.instances = {
|
services.gitea-actions-runner.instances = {
|
||||||
runrun = {
|
runrun = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -51,6 +51,7 @@
|
|||||||
"/nix/store:/nix/store:ro"
|
"/nix/store:/nix/store:ro"
|
||||||
"/nix/var/nix/db:/nix/var/nix/db:ro"
|
"/nix/var/nix/db:/nix/var/nix/db:ro"
|
||||||
"/nix/var/nix/daemon-socket:/nix/var/nix/daemon-socket:ro"
|
"/nix/var/nix/daemon-socket:/nix/var/nix/daemon-socket:ro"
|
||||||
|
"/var/run/postgresql/:/var/run/postgresql/"
|
||||||
];
|
];
|
||||||
dockerExtraHosts = [
|
dockerExtraHosts = [
|
||||||
# Required to pass the proxy via hut
|
# Required to pass the proxy via hut
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
../module/slurm-exporter.nix
|
../module/slurm-exporter.nix
|
||||||
../module/meteocat-exporter.nix
|
../module/meteocat-exporter.nix
|
||||||
../module/upc-qaire-exporter.nix
|
../module/upc-qaire-exporter.nix
|
||||||
./gpfs-probe.nix
|
./ssh-robot-probes.nix
|
||||||
../module/nix-daemon-exporter.nix
|
../module/nix-daemon-exporter.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -111,6 +111,7 @@
|
|||||||
"127.0.0.1:${toString config.services.prometheus.exporters.smartctl.port}"
|
"127.0.0.1:${toString config.services.prometheus.exporters.smartctl.port}"
|
||||||
"127.0.0.1:9341" # Slurm exporter
|
"127.0.0.1:9341" # Slurm exporter
|
||||||
"127.0.0.1:9966" # GPFS custom exporter
|
"127.0.0.1:9966" # GPFS custom exporter
|
||||||
|
"127.0.0.1:9967" # SLURM custom exporter
|
||||||
"127.0.0.1:9999" # Nix-daemon custom exporter
|
"127.0.0.1:9999" # Nix-daemon custom exporter
|
||||||
"127.0.0.1:9929" # Meteocat custom exporter
|
"127.0.0.1:9929" # Meteocat custom exporter
|
||||||
"127.0.0.1:9928" # UPC Qaire custom exporter
|
"127.0.0.1:9928" # UPC Qaire custom exporter
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
{ config, lib, ... }:
|
{ config, lib, ... }:
|
||||||
{
|
{
|
||||||
|
# Robot user that can see the password to send mail from jungle-robot
|
||||||
|
users.groups.mail-robot = {};
|
||||||
|
|
||||||
age.secrets.jungleRobotPassword = {
|
age.secrets.jungleRobotPassword = {
|
||||||
file = ../../secrets/jungle-robot-password.age;
|
file = ../../secrets/jungle-robot-password.age;
|
||||||
group = "gitea";
|
group = "mail-robot";
|
||||||
mode = "440";
|
mode = "440";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ let
|
|||||||
name = "jungle-web";
|
name = "jungle-web";
|
||||||
src = pkgs.fetchgit {
|
src = pkgs.fetchgit {
|
||||||
url = "https://jungle.bsc.es/git/rarias/jungle-website.git";
|
url = "https://jungle.bsc.es/git/rarias/jungle-website.git";
|
||||||
rev = "739bf0175a7f05380fe7ad7023ff1d60db1710e1";
|
rev = "5f18335d14126d2fef134c0cd441771436f7dfa1";
|
||||||
hash = "sha256-ea5DzhYTzZ9TmqD+x95rdNdLbxPnBluqlYH2NmBYmc4=";
|
hash = "sha256-s9VBF91sQ7hg9+lrwNFPYgoXTTyXaQcAulCiGJgWERo=";
|
||||||
};
|
};
|
||||||
buildInputs = [ pkgs.hugo ];
|
buildInputs = [ pkgs.hugo ];
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
|
|||||||
85
m/hut/ompss2-timer.nix
Normal file
85
m/hut/ompss2-timer.nix
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
systemd.timers = {
|
||||||
|
"ompss2-closing" = {
|
||||||
|
wantedBy = [ "timers.target" ];
|
||||||
|
timerConfig = {
|
||||||
|
Unit = "ompss2-closing.service";
|
||||||
|
OnCalendar = [ "*-03-15 07:00:00" "*-09-15 07:00:00"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"ompss2-freeze" = {
|
||||||
|
wantedBy = [ "timers.target" ];
|
||||||
|
timerConfig = {
|
||||||
|
Unit = "ompss2-freeze.service";
|
||||||
|
OnCalendar = [ "*-04-15 07:00:00" "*-10-15 07:00:00" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"ompss2-release" = {
|
||||||
|
wantedBy = [ "timers.target" ];
|
||||||
|
timerConfig = {
|
||||||
|
Unit = "ompss2-release.service";
|
||||||
|
OnCalendar = [ "*-05-15 07:00:00" "*-11-15 07:00:00" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services =
|
||||||
|
let
|
||||||
|
closing = pkgs.writeText "closing.txt"
|
||||||
|
''
|
||||||
|
Subject: OmpSs-2 release enters closing period
|
||||||
|
|
||||||
|
Hi,
|
||||||
|
|
||||||
|
You have one month to merge the remaining features for the next OmpSs-2
|
||||||
|
release. Please, identify what needs to be merged and discuss it in the next
|
||||||
|
OmpSs-2 meeting.
|
||||||
|
|
||||||
|
Thanks!,
|
||||||
|
Jungle robot
|
||||||
|
'';
|
||||||
|
freeze = pkgs.writeText "freeze.txt"
|
||||||
|
''
|
||||||
|
Subject: OmpSs-2 release enters freeze period
|
||||||
|
|
||||||
|
Hi,
|
||||||
|
|
||||||
|
The period to introduce new features or breaking changes is over, only bug
|
||||||
|
fixes are allowed now. During this time, please prepare the release notes
|
||||||
|
to be included in the next OmpSs-2 release.
|
||||||
|
|
||||||
|
Thanks!,
|
||||||
|
Jungle robot
|
||||||
|
'';
|
||||||
|
release = pkgs.writeText "release.txt"
|
||||||
|
''
|
||||||
|
Subject: OmpSs-2 release now
|
||||||
|
|
||||||
|
Hi,
|
||||||
|
|
||||||
|
The period to introduce bug fixes is now over. Please, proceed to do the
|
||||||
|
OmpSs-2 release.
|
||||||
|
|
||||||
|
Thanks!,
|
||||||
|
Jungle robot
|
||||||
|
'';
|
||||||
|
mkServ = name: mail: {
|
||||||
|
"ompss2-${name}" = {
|
||||||
|
script = ''
|
||||||
|
set -eu
|
||||||
|
set -o pipefail
|
||||||
|
cat ${mail} | ${config.security.wrapperDir}/sendmail star@bsc.es
|
||||||
|
'';
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
DynamicUser = true;
|
||||||
|
Group = "mail-robot";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
(mkServ "closing" closing) //
|
||||||
|
(mkServ "freeze" freeze) //
|
||||||
|
(mkServ "release" release);
|
||||||
|
}
|
||||||
@@ -8,12 +8,14 @@
|
|||||||
{ name = "anavarro"; ensureClauses.superuser = true; }
|
{ name = "anavarro"; ensureClauses.superuser = true; }
|
||||||
{ name = "rarias"; ensureClauses.superuser = true; }
|
{ name = "rarias"; ensureClauses.superuser = true; }
|
||||||
{ name = "grafana"; }
|
{ name = "grafana"; }
|
||||||
|
{ name = "gitlab-runner"; }
|
||||||
];
|
];
|
||||||
authentication = ''
|
authentication = ''
|
||||||
#type database DBuser auth-method
|
#type database DBuser auth-method
|
||||||
local perftestsdb rarias trust
|
local perftestsdb rarias trust
|
||||||
local perftestsdb anavarro trust
|
local perftestsdb anavarro trust
|
||||||
local perftestsdb grafana trust
|
local perftestsdb grafana trust
|
||||||
|
local perftestsdb gitlab-runner trust
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
8
m/hut/sblame-probe.sh
Executable file
8
m/hut/sblame-probe.sh
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
|
HTTP/1.1 200 OK
|
||||||
|
Content-Type: text/plain; version=0.0.4; charset=utf-8; escaping=values
|
||||||
|
|
||||||
|
EOF
|
||||||
|
ssh bsc015557@glogin2.bsc.es "timeout 3 command sblame -E"
|
||||||
@@ -6,6 +6,12 @@ let
|
|||||||
chmod +x $out
|
chmod +x $out
|
||||||
''
|
''
|
||||||
;
|
;
|
||||||
|
sblame-probe-script = pkgs.runCommand "sblame-probe.sh" { }
|
||||||
|
''
|
||||||
|
cp ${./sblame-probe.sh} $out;
|
||||||
|
chmod +x $out
|
||||||
|
''
|
||||||
|
;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
# Use a new user to handle the SSH keys
|
# Use a new user to handle the SSH keys
|
||||||
@@ -28,4 +34,17 @@ in
|
|||||||
Group = "ssh-robot";
|
Group = "ssh-robot";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
systemd.services.sblame-probe = {
|
||||||
|
description = "Daemon to report SLURM statistics via SSH";
|
||||||
|
path = [ pkgs.openssh pkgs.netcat ];
|
||||||
|
after = [ "network.target" ];
|
||||||
|
wantedBy = [ "default.target" ];
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "simple";
|
||||||
|
ExecStart = "${pkgs.socat}/bin/socat TCP4-LISTEN:9967,fork EXEC:${sblame-probe-script}";
|
||||||
|
User = "ssh-robot";
|
||||||
|
Group = "ssh-robot";
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
address = "10.0.40.42";
|
address = "10.0.40.42";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
interfaces.ibp5s0.ipv4.addresses = [ {
|
interfaces.ibs785.ipv4.addresses = [ {
|
||||||
address = "10.0.42.42";
|
address = "10.0.42.42";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
# Accept monitoring requests from hut
|
# Accept monitoring requests from hut
|
||||||
iptables -A nixos-fw -p tcp -s hut --dport 9002 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s hut --dport 9002 -j nixos-fw-accept
|
||||||
# Accept all Ceph traffic from the local network
|
# Accept all Ceph traffic from the local network
|
||||||
iptables -A nixos-fw -p tcp -s 10.0.40.0/24 -m multiport --dport 3300,6789,6800:7568 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s 10.0.40.0/21 -m multiport --dport 3300,6789,6800:7568 -j nixos-fw-accept
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
357
m/module/agenix.nix
Normal file
357
m/module/agenix.nix
Normal file
@@ -0,0 +1,357 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.age;
|
||||||
|
|
||||||
|
isDarwin = lib.attrsets.hasAttrByPath [ "environment" "darwinConfig" ] options;
|
||||||
|
|
||||||
|
ageBin = config.age.ageBin;
|
||||||
|
|
||||||
|
users = config.users.users;
|
||||||
|
|
||||||
|
sysusersEnabled =
|
||||||
|
if isDarwin then
|
||||||
|
false
|
||||||
|
else
|
||||||
|
options.systemd ? sysusers && (config.systemd.sysusers.enable || config.services.userborn.enable);
|
||||||
|
|
||||||
|
mountCommand =
|
||||||
|
if isDarwin then
|
||||||
|
''
|
||||||
|
if ! diskutil info "${cfg.secretsMountPoint}" &> /dev/null; then
|
||||||
|
num_sectors=1048576
|
||||||
|
dev=$(hdiutil attach -nomount ram://"$num_sectors" | sed 's/[[:space:]]*$//')
|
||||||
|
newfs_hfs -v agenix "$dev"
|
||||||
|
mount -t hfs -o nobrowse,nodev,nosuid,-m=0751 "$dev" "${cfg.secretsMountPoint}"
|
||||||
|
fi
|
||||||
|
''
|
||||||
|
else
|
||||||
|
''
|
||||||
|
grep -q "${cfg.secretsMountPoint} ramfs" /proc/mounts ||
|
||||||
|
mount -t ramfs none "${cfg.secretsMountPoint}" -o nodev,nosuid,mode=0751
|
||||||
|
'';
|
||||||
|
newGeneration = ''
|
||||||
|
_agenix_generation="$(basename "$(readlink ${cfg.secretsDir})" || echo 0)"
|
||||||
|
(( ++_agenix_generation ))
|
||||||
|
echo "[agenix] creating new generation in ${cfg.secretsMountPoint}/$_agenix_generation"
|
||||||
|
mkdir -p "${cfg.secretsMountPoint}"
|
||||||
|
chmod 0751 "${cfg.secretsMountPoint}"
|
||||||
|
${mountCommand}
|
||||||
|
mkdir -p "${cfg.secretsMountPoint}/$_agenix_generation"
|
||||||
|
chmod 0751 "${cfg.secretsMountPoint}/$_agenix_generation"
|
||||||
|
'';
|
||||||
|
|
||||||
|
chownGroup = if isDarwin then "admin" else "keys";
|
||||||
|
# chown the secrets mountpoint and the current generation to the keys group
|
||||||
|
# instead of leaving it root:root.
|
||||||
|
chownMountPoint = ''
|
||||||
|
chown :${chownGroup} "${cfg.secretsMountPoint}" "${cfg.secretsMountPoint}/$_agenix_generation"
|
||||||
|
'';
|
||||||
|
|
||||||
|
setTruePath = secretType: ''
|
||||||
|
${
|
||||||
|
if secretType.symlink then
|
||||||
|
''
|
||||||
|
_truePath="${cfg.secretsMountPoint}/$_agenix_generation/${secretType.name}"
|
||||||
|
''
|
||||||
|
else
|
||||||
|
''
|
||||||
|
_truePath="${secretType.path}"
|
||||||
|
''
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
|
||||||
|
installSecret = secretType: ''
|
||||||
|
${setTruePath secretType}
|
||||||
|
echo "decrypting '${secretType.file}' to '$_truePath'..."
|
||||||
|
TMP_FILE="$_truePath.tmp"
|
||||||
|
|
||||||
|
IDENTITIES=()
|
||||||
|
for identity in ${toString cfg.identityPaths}; do
|
||||||
|
test -r "$identity" || continue
|
||||||
|
test -s "$identity" || continue
|
||||||
|
IDENTITIES+=(-i)
|
||||||
|
IDENTITIES+=("$identity")
|
||||||
|
done
|
||||||
|
|
||||||
|
test "''${#IDENTITIES[@]}" -eq 0 && echo "[agenix] WARNING: no readable identities found!"
|
||||||
|
|
||||||
|
mkdir -p "$(dirname "$_truePath")"
|
||||||
|
[ "${secretType.path}" != "${cfg.secretsDir}/${secretType.name}" ] && mkdir -p "$(dirname "${secretType.path}")"
|
||||||
|
(
|
||||||
|
umask u=r,g=,o=
|
||||||
|
test -f "${secretType.file}" || echo '[agenix] WARNING: encrypted file ${secretType.file} does not exist!'
|
||||||
|
test -d "$(dirname "$TMP_FILE")" || echo "[agenix] WARNING: $(dirname "$TMP_FILE") does not exist!"
|
||||||
|
LANG=${
|
||||||
|
config.i18n.defaultLocale or "C"
|
||||||
|
} ${ageBin} --decrypt "''${IDENTITIES[@]}" -o "$TMP_FILE" "${secretType.file}"
|
||||||
|
)
|
||||||
|
chmod ${secretType.mode} "$TMP_FILE"
|
||||||
|
mv -f "$TMP_FILE" "$_truePath"
|
||||||
|
|
||||||
|
${optionalString secretType.symlink ''
|
||||||
|
[ "${secretType.path}" != "${cfg.secretsDir}/${secretType.name}" ] && ln -sfT "${cfg.secretsDir}/${secretType.name}" "${secretType.path}"
|
||||||
|
''}
|
||||||
|
'';
|
||||||
|
|
||||||
|
testIdentities = map (path: ''
|
||||||
|
test -f ${path} || echo '[agenix] WARNING: config.age.identityPaths entry ${path} not present!'
|
||||||
|
'') cfg.identityPaths;
|
||||||
|
|
||||||
|
cleanupAndLink = ''
|
||||||
|
_agenix_generation="$(basename "$(readlink ${cfg.secretsDir})" || echo 0)"
|
||||||
|
(( ++_agenix_generation ))
|
||||||
|
echo "[agenix] symlinking new secrets to ${cfg.secretsDir} (generation $_agenix_generation)..."
|
||||||
|
ln -sfT "${cfg.secretsMountPoint}/$_agenix_generation" ${cfg.secretsDir}
|
||||||
|
|
||||||
|
(( _agenix_generation > 1 )) && {
|
||||||
|
echo "[agenix] removing old secrets (generation $(( _agenix_generation - 1 )))..."
|
||||||
|
rm -rf "${cfg.secretsMountPoint}/$(( _agenix_generation - 1 ))"
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
|
||||||
|
installSecrets = builtins.concatStringsSep "\n" (
|
||||||
|
[ "echo '[agenix] decrypting secrets...'" ]
|
||||||
|
++ testIdentities
|
||||||
|
++ (map installSecret (builtins.attrValues cfg.secrets))
|
||||||
|
++ [ cleanupAndLink ]
|
||||||
|
);
|
||||||
|
|
||||||
|
chownSecret = secretType: ''
|
||||||
|
${setTruePath secretType}
|
||||||
|
chown ${secretType.owner}:${secretType.group} "$_truePath"
|
||||||
|
'';
|
||||||
|
|
||||||
|
chownSecrets = builtins.concatStringsSep "\n" (
|
||||||
|
[ "echo '[agenix] chowning...'" ]
|
||||||
|
++ [ chownMountPoint ]
|
||||||
|
++ (map chownSecret (builtins.attrValues cfg.secrets))
|
||||||
|
);
|
||||||
|
|
||||||
|
secretType = types.submodule (
|
||||||
|
{ config, ... }:
|
||||||
|
{
|
||||||
|
options = {
|
||||||
|
name = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = config._module.args.name;
|
||||||
|
defaultText = literalExpression "config._module.args.name";
|
||||||
|
description = ''
|
||||||
|
Name of the file used in {option}`age.secretsDir`
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
file = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
description = ''
|
||||||
|
Age file the secret is loaded from.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
path = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "${cfg.secretsDir}/${config.name}";
|
||||||
|
defaultText = literalExpression ''
|
||||||
|
"''${cfg.secretsDir}/''${config.name}"
|
||||||
|
'';
|
||||||
|
description = ''
|
||||||
|
Path where the decrypted secret is installed.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
mode = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "0400";
|
||||||
|
description = ''
|
||||||
|
Permissions mode of the decrypted secret in a format understood by chmod.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
owner = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "0";
|
||||||
|
description = ''
|
||||||
|
User of the decrypted secret.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
group = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = users.${config.owner}.group or "0";
|
||||||
|
defaultText = literalExpression ''
|
||||||
|
users.''${config.owner}.group or "0"
|
||||||
|
'';
|
||||||
|
description = ''
|
||||||
|
Group of the decrypted secret.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
symlink = mkEnableOption "symlinking secrets to their destination" // {
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(mkRenamedOptionModule [ "age" "sshKeyPaths" ] [ "age" "identityPaths" ])
|
||||||
|
];
|
||||||
|
|
||||||
|
options.age = {
|
||||||
|
ageBin = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "${pkgs.age}/bin/age";
|
||||||
|
defaultText = literalExpression ''
|
||||||
|
"''${pkgs.age}/bin/age"
|
||||||
|
'';
|
||||||
|
description = ''
|
||||||
|
The age executable to use.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
secrets = mkOption {
|
||||||
|
type = types.attrsOf secretType;
|
||||||
|
default = { };
|
||||||
|
description = ''
|
||||||
|
Attrset of secrets.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
secretsDir = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
default = "/run/agenix";
|
||||||
|
description = ''
|
||||||
|
Folder where secrets are symlinked to
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
secretsMountPoint = mkOption {
|
||||||
|
type =
|
||||||
|
types.addCheck types.str (
|
||||||
|
s:
|
||||||
|
(builtins.match "[ \t\n]*" s) == null # non-empty
|
||||||
|
&& (builtins.match ".+/" s) == null
|
||||||
|
) # without trailing slash
|
||||||
|
// {
|
||||||
|
description = "${types.str.description} (with check: non-empty without trailing slash)";
|
||||||
|
};
|
||||||
|
default = "/run/agenix.d";
|
||||||
|
description = ''
|
||||||
|
Where secrets are created before they are symlinked to {option}`age.secretsDir`
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
identityPaths = mkOption {
|
||||||
|
type = types.listOf types.path;
|
||||||
|
default =
|
||||||
|
if isDarwin then
|
||||||
|
[
|
||||||
|
"/etc/ssh/ssh_host_ed25519_key"
|
||||||
|
"/etc/ssh/ssh_host_rsa_key"
|
||||||
|
]
|
||||||
|
else if (config.services.openssh.enable or false) then
|
||||||
|
map (e: e.path) (
|
||||||
|
lib.filter (e: e.type == "rsa" || e.type == "ed25519") config.services.openssh.hostKeys
|
||||||
|
)
|
||||||
|
else
|
||||||
|
[ ];
|
||||||
|
defaultText = literalExpression ''
|
||||||
|
if isDarwin
|
||||||
|
then [
|
||||||
|
"/etc/ssh/ssh_host_ed25519_key"
|
||||||
|
"/etc/ssh/ssh_host_rsa_key"
|
||||||
|
]
|
||||||
|
else if (config.services.openssh.enable or false)
|
||||||
|
then map (e: e.path) (lib.filter (e: e.type == "rsa" || e.type == "ed25519") config.services.openssh.hostKeys)
|
||||||
|
else [];
|
||||||
|
'';
|
||||||
|
description = ''
|
||||||
|
Path to SSH keys to be used as identities in age decryption.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf (cfg.secrets != { }) (mkMerge [
|
||||||
|
{
|
||||||
|
assertions = [
|
||||||
|
{
|
||||||
|
assertion = cfg.identityPaths != [ ];
|
||||||
|
message = "age.identityPaths must be set, for example by enabling openssh.";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
(optionalAttrs (!isDarwin) {
|
||||||
|
# When using sysusers we no longer be started as an activation script
|
||||||
|
# because those are started in initrd while sysusers is started later.
|
||||||
|
systemd.services.agenix-install-secrets = mkIf sysusersEnabled {
|
||||||
|
wantedBy = [ "sysinit.target" ];
|
||||||
|
after = [ "systemd-sysusers.service" ];
|
||||||
|
unitConfig.DefaultDependencies = "no";
|
||||||
|
|
||||||
|
path = [ pkgs.mount ];
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
ExecStart = pkgs.writeShellScript "agenix-install" (concatLines [
|
||||||
|
newGeneration
|
||||||
|
installSecrets
|
||||||
|
chownSecrets
|
||||||
|
]);
|
||||||
|
RemainAfterExit = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Create a new directory full of secrets for symlinking (this helps
|
||||||
|
# ensure removed secrets are actually removed, or at least become
|
||||||
|
# invalid symlinks).
|
||||||
|
system.activationScripts = mkIf (!sysusersEnabled) {
|
||||||
|
agenixNewGeneration = {
|
||||||
|
text = newGeneration;
|
||||||
|
deps = [
|
||||||
|
"specialfs"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
agenixInstall = {
|
||||||
|
text = installSecrets;
|
||||||
|
deps = [
|
||||||
|
"agenixNewGeneration"
|
||||||
|
"specialfs"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# So user passwords can be encrypted.
|
||||||
|
users.deps = [ "agenixInstall" ];
|
||||||
|
|
||||||
|
# Change ownership and group after users and groups are made.
|
||||||
|
agenixChown = {
|
||||||
|
text = chownSecrets;
|
||||||
|
deps = [
|
||||||
|
"users"
|
||||||
|
"groups"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# So other activation scripts can depend on agenix being done.
|
||||||
|
agenix = {
|
||||||
|
text = "";
|
||||||
|
deps = [ "agenixChown" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
|
||||||
|
(optionalAttrs isDarwin {
|
||||||
|
launchd.daemons.activate-agenix = {
|
||||||
|
script = ''
|
||||||
|
set -e
|
||||||
|
set -o pipefail
|
||||||
|
export PATH="${pkgs.gnugrep}/bin:${pkgs.coreutils}/bin:@out@/sw/bin:/usr/bin:/bin:/usr/sbin:/sbin"
|
||||||
|
${newGeneration}
|
||||||
|
${installSecrets}
|
||||||
|
${chownSecrets}
|
||||||
|
exit 0
|
||||||
|
'';
|
||||||
|
serviceConfig = {
|
||||||
|
RunAtLoad = true;
|
||||||
|
KeepAlive.SuccessfulExit = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
]);
|
||||||
|
}
|
||||||
@@ -1,3 +1,10 @@
|
|||||||
{
|
{
|
||||||
services.nixseparatedebuginfod.enable = true;
|
services.nixseparatedebuginfod2 = {
|
||||||
|
enable = true;
|
||||||
|
substituters = [
|
||||||
|
"local:"
|
||||||
|
"https://cache.nixos.org"
|
||||||
|
"http://hut/cache"
|
||||||
|
];
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{ lib, ... }:
|
{ lib, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
@@ -21,4 +21,20 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
services.slurm.client.enable = true;
|
services.slurm.client.enable = true;
|
||||||
|
|
||||||
|
# Only allow SSH connections from users who have a SLURM allocation
|
||||||
|
# See: https://slurm.schedmd.com/pam_slurm_adopt.html
|
||||||
|
security.pam.services.sshd.rules.account.slurm = {
|
||||||
|
control = "required";
|
||||||
|
enable = true;
|
||||||
|
modulePath = "${pkgs.slurm}/lib/security/pam_slurm_adopt.so";
|
||||||
|
args = [ "log_level=debug5" ];
|
||||||
|
order = 999999; # Make it last one
|
||||||
|
};
|
||||||
|
|
||||||
|
# Disable systemd session (pam_systemd.so) as it will conflict with the
|
||||||
|
# pam_slurm_adopt.so module. What happens is that the shell is first adopted
|
||||||
|
# into the slurmstepd task and then into the systemd session, which is not
|
||||||
|
# what we want, otherwise it will linger even if all jobs are gone.
|
||||||
|
security.pam.services.sshd.startSession = lib.mkForce false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,31 +1,6 @@
|
|||||||
{ config, pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
let
|
{
|
||||||
suspendProgram = pkgs.writeShellScript "suspend.sh" ''
|
|
||||||
exec 1>>/var/log/power_save.log 2>>/var/log/power_save.log
|
|
||||||
set -x
|
|
||||||
export "PATH=/run/current-system/sw/bin:$PATH"
|
|
||||||
echo "$(date) Suspend invoked $0 $*" >> /var/log/power_save.log
|
|
||||||
hosts=$(scontrol show hostnames $1)
|
|
||||||
for host in $hosts; do
|
|
||||||
echo Shutting down host: $host
|
|
||||||
ipmitool -I lanplus -H ''${host}-ipmi -P "" -U "" chassis power off
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
|
|
||||||
resumeProgram = pkgs.writeShellScript "resume.sh" ''
|
|
||||||
exec 1>>/var/log/power_save.log 2>>/var/log/power_save.log
|
|
||||||
set -x
|
|
||||||
export "PATH=/run/current-system/sw/bin:$PATH"
|
|
||||||
echo "$(date) Suspend invoked $0 $*" >> /var/log/power_save.log
|
|
||||||
hosts=$(scontrol show hostnames $1)
|
|
||||||
for host in $hosts; do
|
|
||||||
echo Starting host: $host
|
|
||||||
ipmitool -I lanplus -H ''${host}-ipmi -P "" -U "" chassis power on
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
|
|
||||||
in {
|
|
||||||
services.slurm = {
|
services.slurm = {
|
||||||
controlMachine = "apex";
|
controlMachine = "apex";
|
||||||
clusterName = "jungle";
|
clusterName = "jungle";
|
||||||
@@ -59,16 +34,6 @@ in {
|
|||||||
# the resources. Use the task/cgroup plugin to enable process containment.
|
# the resources. Use the task/cgroup plugin to enable process containment.
|
||||||
TaskPlugin=task/affinity,task/cgroup
|
TaskPlugin=task/affinity,task/cgroup
|
||||||
|
|
||||||
# Power off unused nodes until they are requested
|
|
||||||
SuspendProgram=${suspendProgram}
|
|
||||||
SuspendTimeout=60
|
|
||||||
ResumeProgram=${resumeProgram}
|
|
||||||
ResumeTimeout=300
|
|
||||||
SuspendExcNodes=fox
|
|
||||||
|
|
||||||
# Turn the nodes off after 1 hour of inactivity
|
|
||||||
SuspendTime=3600
|
|
||||||
|
|
||||||
# Reduce port range so we can allow only this range in the firewall
|
# Reduce port range so we can allow only this range in the firewall
|
||||||
SrunPortRange=60000-61000
|
SrunPortRange=60000-61000
|
||||||
|
|
||||||
@@ -86,9 +51,7 @@ in {
|
|||||||
# when a task runs (srun) so we can ssh early.
|
# when a task runs (srun) so we can ssh early.
|
||||||
PrologFlags=Alloc,Contain,X11
|
PrologFlags=Alloc,Contain,X11
|
||||||
|
|
||||||
# LaunchParameters=ulimit_pam_adopt will set RLIMIT_RSS in processes
|
LaunchParameters=use_interactive_step
|
||||||
# adopted by the external step, similar to tasks running in regular steps
|
|
||||||
# LaunchParameters=ulimit_pam_adopt
|
|
||||||
SlurmdDebug=debug5
|
SlurmdDebug=debug5
|
||||||
#DebugFlags=Protocol,Cgroup
|
#DebugFlags=Protocol,Cgroup
|
||||||
'';
|
'';
|
||||||
|
|||||||
27
m/module/tc1-board.nix
Normal file
27
m/module/tc1-board.nix
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{ lib, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Allow user access to FTDI USB device
|
||||||
|
services.udev.packages = lib.singleton (pkgs.writeTextFile {
|
||||||
|
# Needs to be < 73
|
||||||
|
name = "60-ftdi-tc1.rules";
|
||||||
|
text = ''
|
||||||
|
# Bus 003 Device 003: ID 0403:6011 Future Technology Devices International, Ltd FT4232H Quad HS USB-UART/FIFO IC
|
||||||
|
# Use := to make sure it doesn't get changed later
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", MODE:="0666"
|
||||||
|
'';
|
||||||
|
destination = "/etc/udev/rules.d/60-ftdi-tc1.rules";
|
||||||
|
});
|
||||||
|
|
||||||
|
# Allow access to USB for docker in GitLab runner
|
||||||
|
services.gitlab-runner = {
|
||||||
|
services.gitlab-bsc-docker = {
|
||||||
|
registrationFlags = [
|
||||||
|
# We need raw access to the USB port to reboot the board
|
||||||
|
"--docker-devices /dev/bus/usb/003/003"
|
||||||
|
# And TTY access for the serial port
|
||||||
|
"--docker-devices /dev/ttyUSB2"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
address = "10.0.40.1";
|
address = "10.0.40.1";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
interfaces.ibp5s0.ipv4.addresses = [ {
|
interfaces.ibs785.ipv4.addresses = [ {
|
||||||
address = "10.0.42.1";
|
address = "10.0.42.1";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
# Watch out! The OmniPath device is not in the same place here:
|
# Watch out! The OmniPath device is not in the same place here:
|
||||||
interfaces.ibp129s0.ipv4.addresses = [ {
|
interfaces.ibs801.ipv4.addresses = [ {
|
||||||
address = "10.0.42.2";
|
address = "10.0.42.2";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
../module/p.nix
|
../module/p.nix
|
||||||
../module/vpn-dac.nix
|
../module/vpn-dac.nix
|
||||||
../module/hut-substituter.nix
|
../module/hut-substituter.nix
|
||||||
|
../module/tc1-board.nix
|
||||||
|
../module/ceph.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
# Select the this using the ID to avoid mismatches
|
# Select the this using the ID to avoid mismatches
|
||||||
@@ -63,6 +65,13 @@
|
|||||||
fsType = "ext4";
|
fsType = "ext4";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Mount the NFS home
|
||||||
|
fileSystems."/nfs/home" = {
|
||||||
|
device = "10.106.0.30:/home";
|
||||||
|
fsType = "nfs";
|
||||||
|
options = [ "nfsvers=3" "rsize=1024" "wsize=1024" "cto" "nofail" ];
|
||||||
|
};
|
||||||
|
|
||||||
# Make a /vault/$USER directory for each user.
|
# Make a /vault/$USER directory for each user.
|
||||||
systemd.services.create-vault-dirs = let
|
systemd.services.create-vault-dirs = let
|
||||||
# Take only normal users in tent
|
# Take only normal users in tent
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
{ config, lib, ... }:
|
{ config, lib, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.services.gitea;
|
||||||
|
in
|
||||||
{
|
{
|
||||||
services.gitea = {
|
services.gitea = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -26,5 +29,54 @@
|
|||||||
SENDMAIL_ARGS = "--";
|
SENDMAIL_ARGS = "--";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
dump = {
|
||||||
|
enable = false; # Do not enable NixOS module, use our custom systemd script below
|
||||||
|
backupDir = "/vault/backup/gitea";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
systemd.services.gitea-backup = let
|
||||||
|
exe = lib.getExe cfg.package;
|
||||||
|
in {
|
||||||
|
description = "Gitea daily backup";
|
||||||
|
after = [ "gitea.service" ];
|
||||||
|
path = [ cfg.package ];
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
USER = cfg.user;
|
||||||
|
HOME = cfg.stateDir;
|
||||||
|
GITEA_WORK_DIR = cfg.stateDir;
|
||||||
|
GITEA_CUSTOM = cfg.customDir;
|
||||||
|
};
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
User = cfg.user;
|
||||||
|
WorkingDirectory = cfg.dump.backupDir;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = ''
|
||||||
|
name="gitea-dump-$(date +%a).${cfg.dump.type}"
|
||||||
|
${exe} dump --type ${cfg.dump.type} --file - >"$name.tmp"
|
||||||
|
mv "$name.tmp" "$name"
|
||||||
|
cp "$name" "/ceph/backup/gitea/$name"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
# Create also the /ceph directories if needed
|
||||||
|
systemd.tmpfiles.rules = [
|
||||||
|
"d /ceph/backup/gitea/ 0750 ${cfg.user} ${cfg.group} - -"
|
||||||
|
"z /ceph/backup/gitea/ 0750 ${cfg.user} ${cfg.group} - -"
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.timers.gitea-backup = {
|
||||||
|
description = "Update timer for gitea-backup";
|
||||||
|
partOf = [ "gitea-backup.service" ];
|
||||||
|
wantedBy = [ "timers.target" ];
|
||||||
|
timerConfig.OnCalendar = cfg.dump.interval;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Allow gitea user to send mail
|
||||||
|
users.users.gitea.extraGroups = [ "mail-robot" ];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
registrationFlags = [
|
registrationFlags = [
|
||||||
# Increase build log length to 64 MiB
|
# Increase build log length to 64 MiB
|
||||||
"--output-limit 65536"
|
"--output-limit 65536"
|
||||||
|
"--docker-network-mode host"
|
||||||
];
|
];
|
||||||
preBuildScript = pkgs.writeScript "setup-container" ''
|
preBuildScript = pkgs.writeScript "setup-container" ''
|
||||||
mkdir -p -m 0755 /nix/var/log/nix/drvs
|
mkdir -p -m 0755 /nix/var/log/nix/drvs
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ let
|
|||||||
name = "jungle-web";
|
name = "jungle-web";
|
||||||
src = pkgs.fetchgit {
|
src = pkgs.fetchgit {
|
||||||
url = "https://jungle.bsc.es/git/rarias/jungle-website.git";
|
url = "https://jungle.bsc.es/git/rarias/jungle-website.git";
|
||||||
rev = "739bf0175a7f05380fe7ad7023ff1d60db1710e1";
|
rev = "5f18335d14126d2fef134c0cd441771436f7dfa1";
|
||||||
hash = "sha256-ea5DzhYTzZ9TmqD+x95rdNdLbxPnBluqlYH2NmBYmc4=";
|
hash = "sha256-s9VBF91sQ7hg9+lrwNFPYgoXTTyXaQcAulCiGJgWERo=";
|
||||||
};
|
};
|
||||||
buildInputs = [ pkgs.hugo ];
|
buildInputs = [ pkgs.hugo ];
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
address = "10.0.40.6";
|
address = "10.0.40.6";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
interfaces.ibp5s0.ipv4.addresses = [ {
|
interfaces.ibs785.ipv4.addresses = [ {
|
||||||
address = "10.0.42.6";
|
address = "10.0.42.6";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
|
|||||||
67
overlay.nix
67
overlay.nix
@@ -7,6 +7,7 @@ let
|
|||||||
callPackage = final.callPackage;
|
callPackage = final.callPackage;
|
||||||
|
|
||||||
bscPkgs = {
|
bscPkgs = {
|
||||||
|
agenix = prev.callPackage ./pkgs/agenix/default.nix { };
|
||||||
amd-uprof = prev.callPackage ./pkgs/amd-uprof/default.nix { };
|
amd-uprof = prev.callPackage ./pkgs/amd-uprof/default.nix { };
|
||||||
bench6 = callPackage ./pkgs/bench6/default.nix { };
|
bench6 = callPackage ./pkgs/bench6/default.nix { };
|
||||||
bigotes = callPackage ./pkgs/bigotes/default.nix { };
|
bigotes = callPackage ./pkgs/bigotes/default.nix { };
|
||||||
@@ -18,7 +19,13 @@ let
|
|||||||
cudainfo = prev.callPackage ./pkgs/cudainfo/default.nix { };
|
cudainfo = prev.callPackage ./pkgs/cudainfo/default.nix { };
|
||||||
#extrae = callPackage ./pkgs/extrae/default.nix { }; # Broken and outdated
|
#extrae = callPackage ./pkgs/extrae/default.nix { }; # Broken and outdated
|
||||||
gpi-2 = callPackage ./pkgs/gpi-2/default.nix { };
|
gpi-2 = callPackage ./pkgs/gpi-2/default.nix { };
|
||||||
intelPackages_2023 = callPackage ./pkgs/intel-oneapi/2023.nix { };
|
gromacs = callPackage ./pkgs/gromacs/default.nix { enableSYCL = true; };
|
||||||
|
wrapIntel = callPackage ./pkgs/intel-oneapi/common/wrapper.nix { };
|
||||||
|
intel-apt = callPackage ./pkgs/intel-oneapi/deb/packages.nix { };
|
||||||
|
intelPackages_2023 = callPackage ./pkgs/intel-oneapi/deb/2023.nix { };
|
||||||
|
intelPackages_2024 = final.intel-apt.hpckit_2024;
|
||||||
|
intelPackages_2025 = final.intel-apt.hpckit_2025;
|
||||||
|
intelPackages = final.intelPackages_2025;
|
||||||
jemallocNanos6 = callPackage ./pkgs/nanos6/jemalloc.nix { };
|
jemallocNanos6 = callPackage ./pkgs/nanos6/jemalloc.nix { };
|
||||||
# FIXME: Extend this to all linuxPackages variants. Open problem, see:
|
# FIXME: Extend this to all linuxPackages variants. Open problem, see:
|
||||||
# https://discourse.nixos.org/t/whats-the-right-way-to-make-a-custom-kernel-module-available/4636
|
# https://discourse.nixos.org/t/whats-the-right-way-to-make-a-custom-kernel-module-available/4636
|
||||||
@@ -28,28 +35,35 @@ let
|
|||||||
linuxPackages_latest = prev.linuxPackages_latest.extend(_final: _prev: {
|
linuxPackages_latest = prev.linuxPackages_latest.extend(_final: _prev: {
|
||||||
amd-uprof-driver = _prev.callPackage ./pkgs/amd-uprof/driver.nix { };
|
amd-uprof-driver = _prev.callPackage ./pkgs/amd-uprof/driver.nix { };
|
||||||
});
|
});
|
||||||
|
llvm-intel-unwrapped = callPackage ./pkgs/intel-oneapi/open/default.nix { };
|
||||||
|
llvm-intel = final.wrapIntel { cc = final.llvm-intel-unwrapped; };
|
||||||
lmbench = callPackage ./pkgs/lmbench/default.nix { };
|
lmbench = callPackage ./pkgs/lmbench/default.nix { };
|
||||||
mcxx = callPackage ./pkgs/mcxx/default.nix { };
|
# Broken and unmantained
|
||||||
|
# mcxx = callPackage ./pkgs/mcxx/default.nix { };
|
||||||
meteocat-exporter = prev.callPackage ./pkgs/meteocat-exporter/default.nix { };
|
meteocat-exporter = prev.callPackage ./pkgs/meteocat-exporter/default.nix { };
|
||||||
mpi = final.mpich; # Set MPICH as default
|
mpi = final.mpich; # Set MPICH as default
|
||||||
mpich = callPackage ./pkgs/mpich/default.nix { mpich = prev.mpich; };
|
mpich = callPackage ./pkgs/mpich/default.nix { mpich = prev.mpich; };
|
||||||
nanos6 = callPackage ./pkgs/nanos6/default.nix { };
|
nanos6 = callPackage ./pkgs/nanos6/default.nix { };
|
||||||
nanos6Debug = final.nanos6.override { enableDebug = true; };
|
nanos6Debug = final.nanos6.override { enableDebug = true; };
|
||||||
nixtools = callPackage ./pkgs/nixtools/default.nix { };
|
nixtools = callPackage ./pkgs/nixtools/default.nix { };
|
||||||
# Broken because of pkgsStatic.libcap
|
nixgen = callPackage ./pkgs/nixgen/default.nix { };
|
||||||
# See: https://github.com/NixOS/nixpkgs/pull/268791
|
nix-portable = callPackage ./pkgs/nix-portable/default.nix { };
|
||||||
#nix-wrap = callPackage ./pkgs/nix-wrap/default.nix { };
|
nix-wrap = callPackage ./pkgs/nix-wrap/default.nix { };
|
||||||
nodes = callPackage ./pkgs/nodes/default.nix { };
|
nodes = callPackage ./pkgs/nodes/default.nix { };
|
||||||
nosv = callPackage ./pkgs/nosv/default.nix { };
|
nosv = callPackage ./pkgs/nosv/default.nix { };
|
||||||
|
oneMath = callPackage ./pkgs/onemath/default.nix { };
|
||||||
openmp = callPackage ./pkgs/llvm-ompss2/openmp.nix { monorepoSrc = final.clangOmpss2Unwrapped.src; version = final.clangOmpss2Unwrapped.version; };
|
openmp = callPackage ./pkgs/llvm-ompss2/openmp.nix { monorepoSrc = final.clangOmpss2Unwrapped.src; version = final.clangOmpss2Unwrapped.version; };
|
||||||
openmpv = final.openmp.override { enableNosv = true; enableOvni = true; };
|
openmpv = final.openmp.override { enableNosv = true; enableOvni = true; };
|
||||||
osumb = callPackage ./pkgs/osu/default.nix { };
|
osumb = callPackage ./pkgs/osu/default.nix { };
|
||||||
ovni = callPackage ./pkgs/ovni/default.nix { };
|
ovni = callPackage ./pkgs/ovni/default.nix { };
|
||||||
ovniGit = final.ovni.override { useGit = true; };
|
ovniGit = final.ovni.override { useGit = true; };
|
||||||
paraverKernel = callPackage ./pkgs/paraver/kernel.nix { };
|
paraverKernel = callPackage ./pkgs/paraver/kernel.nix { };
|
||||||
|
pocl = callPackage ./pkgs/pocl/default.nix { };
|
||||||
|
pocl-noicd = callPackage ./pkgs/pocl/default.nix { enableICD = false; };
|
||||||
prometheus-slurm-exporter = prev.callPackage ./pkgs/slurm-exporter/default.nix { };
|
prometheus-slurm-exporter = prev.callPackage ./pkgs/slurm-exporter/default.nix { };
|
||||||
#pscom = callPackage ./pkgs/parastation/pscom.nix { }; # Unmaintaned
|
#pscom = callPackage ./pkgs/parastation/pscom.nix { }; # Unmaintaned
|
||||||
#psmpi = callPackage ./pkgs/parastation/psmpi.nix { }; # Unmaintaned
|
#psmpi = callPackage ./pkgs/parastation/psmpi.nix { }; # Unmaintaned
|
||||||
|
slurm = import ./pkgs/slurm/default.nix { slurm = prev.slurm; };
|
||||||
sonar = callPackage ./pkgs/sonar/default.nix { };
|
sonar = callPackage ./pkgs/sonar/default.nix { };
|
||||||
stdenvClangOmpss2 = final.stdenv.override { cc = final.clangOmpss2; allowedRequisites = null; };
|
stdenvClangOmpss2 = final.stdenv.override { cc = final.clangOmpss2; allowedRequisites = null; };
|
||||||
stdenvClangOmpss2Nanos6 = final.stdenv.override { cc = final.clangOmpss2Nanos6; allowedRequisites = null; };
|
stdenvClangOmpss2Nanos6 = final.stdenv.override { cc = final.clangOmpss2Nanos6; allowedRequisites = null; };
|
||||||
@@ -57,6 +71,8 @@ let
|
|||||||
stdenvClangOmpss2NodesOmpv = final.stdenv.override { cc = final.clangOmpss2NodesOmpv; allowedRequisites = null; };
|
stdenvClangOmpss2NodesOmpv = final.stdenv.override { cc = final.clangOmpss2NodesOmpv; allowedRequisites = null; };
|
||||||
tagaspi = callPackage ./pkgs/tagaspi/default.nix { };
|
tagaspi = callPackage ./pkgs/tagaspi/default.nix { };
|
||||||
tampi = callPackage ./pkgs/tampi/default.nix { };
|
tampi = callPackage ./pkgs/tampi/default.nix { };
|
||||||
|
tasycl = callPackage ./pkgs/tasycl/default.nix { };
|
||||||
|
tasycl-acpp = callPackage ./pkgs/tasycl/default.nix { useIntel = false; };
|
||||||
upc-qaire-exporter = prev.callPackage ./pkgs/upc-qaire-exporter/default.nix { };
|
upc-qaire-exporter = prev.callPackage ./pkgs/upc-qaire-exporter/default.nix { };
|
||||||
wxparaver = callPackage ./pkgs/paraver/default.nix { };
|
wxparaver = callPackage ./pkgs/paraver/default.nix { };
|
||||||
};
|
};
|
||||||
@@ -66,6 +82,13 @@ let
|
|||||||
#sigsegv = callPackage ./test/reproducers/sigsegv.nix { };
|
#sigsegv = callPackage ./test/reproducers/sigsegv.nix { };
|
||||||
hello-c = callPackage ./test/compilers/hello-c.nix { };
|
hello-c = callPackage ./test/compilers/hello-c.nix { };
|
||||||
hello-cpp = callPackage ./test/compilers/hello-cpp.nix { };
|
hello-cpp = callPackage ./test/compilers/hello-cpp.nix { };
|
||||||
|
hello-sycl = callPackage ./test/compilers/hello-sycl.nix { };
|
||||||
|
hello-syclompss = callPackage ./test/compilers/icpx-ompss2.nix { };
|
||||||
|
hello-sycl-pocl = (callPackage ./test/compilers/hello-sycl.nix { }).withPocl;
|
||||||
|
hello-sycl-intel = (callPackage ./test/compilers/hello-sycl.nix { }).withIntel;
|
||||||
|
hello-syclompss-pocl = (callPackage ./test/compilers/icpx-ompss2.nix { }).withPocl;
|
||||||
|
hello-syclompss-intel = (callPackage ./test/compilers/icpx-ompss2.nix { }).withIntel;
|
||||||
|
|
||||||
lto = callPackage ./test/compilers/lto.nix { };
|
lto = callPackage ./test/compilers/lto.nix { };
|
||||||
asan = callPackage ./test/compilers/asan.nix { };
|
asan = callPackage ./test/compilers/asan.nix { };
|
||||||
intel2023-icx-c = hello-c.override { stdenv = final.intelPackages_2023.stdenv; };
|
intel2023-icx-c = hello-c.override { stdenv = final.intelPackages_2023.stdenv; };
|
||||||
@@ -75,6 +98,17 @@ let
|
|||||||
intel2023-ifort = callPackage ./test/compilers/hello-f.nix {
|
intel2023-ifort = callPackage ./test/compilers/hello-f.nix {
|
||||||
stdenv = final.intelPackages_2023.stdenv-ifort;
|
stdenv = final.intelPackages_2023.stdenv-ifort;
|
||||||
};
|
};
|
||||||
|
intel2024-icx-c = hello-c.override { stdenv = final.intelPackages_2024.stdenv; };
|
||||||
|
intel2025-icx-c = hello-c.override { stdenv = final.intelPackages_2025.stdenv; };
|
||||||
|
intel2024-icx-cpp = hello-cpp.override { stdenv = final.intelPackages_2024.stdenv; };
|
||||||
|
intel2025-icx-cpp = hello-cpp.override { stdenv = final.intelPackages_2025.stdenv; };
|
||||||
|
# intel2023-sycl = hello-sycl.override { intelPackages = final.intelPackages_2023; }; # broken
|
||||||
|
intel2024-sycl = hello-sycl.override { intelPackages = final.intelPackages_2024; };
|
||||||
|
intel2025-sycl = hello-sycl.override { intelPackages = final.intelPackages_2025; };
|
||||||
|
oneapi-c = hello-c.override { inherit (final.llvm-intel) stdenv; };
|
||||||
|
oneapi-cpp = hello-cpp.override { inherit (final.llvm-intel) stdenv; };
|
||||||
|
oneapi-sycl = hello-sycl.override { intelPackages = final.llvm-intel; };
|
||||||
|
oneapi-syclompss = hello-syclompss.override { intelPackages = final.llvm-intel; };
|
||||||
clangOmpss2-lto = lto.override { stdenv = final.stdenvClangOmpss2Nanos6; };
|
clangOmpss2-lto = lto.override { stdenv = final.stdenvClangOmpss2Nanos6; };
|
||||||
clangOmpss2-asan = asan.override { stdenv = final.stdenvClangOmpss2Nanos6; };
|
clangOmpss2-asan = asan.override { stdenv = final.stdenvClangOmpss2Nanos6; };
|
||||||
clangOmpss2-task = callPackage ./test/compilers/ompss2.nix {
|
clangOmpss2-task = callPackage ./test/compilers/ompss2.nix {
|
||||||
@@ -92,20 +126,31 @@ let
|
|||||||
clangNosvOmpv-ld = callPackage ./test/compilers/clang-openmp-ld.nix {
|
clangNosvOmpv-ld = callPackage ./test/compilers/clang-openmp-ld.nix {
|
||||||
stdenv = final.stdenvClangOmpss2NodesOmpv;
|
stdenv = final.stdenvClangOmpss2NodesOmpv;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ocl-build = callPackage ./test/compilers/opencl.nix { };
|
||||||
|
ocl-build-noicd = callPackage ./test/compilers/opencl.nix { ocl-icd = final.pocl-noicd; };
|
||||||
|
|
||||||
|
pocl = callPackage ./test/compilers/pocl.nix { };
|
||||||
|
ocl-run-pocl = ocl-build.test-icd;
|
||||||
|
ocl-run-pocl-noicd = ocl-build-noicd.test-noicd;
|
||||||
|
|
||||||
|
sycl-ls = callPackage ./test/compilers/sycl-ls.nix { };
|
||||||
};
|
};
|
||||||
|
|
||||||
# For now, only build toplevel packages in CI/Hydra
|
# For now, only build toplevel packages in CI/Hydra
|
||||||
pkgsTopLevel = filterAttrs (_: isDerivation) bscPkgs;
|
pkgsTopLevel = filterAttrs (_: isDerivation) bscPkgs;
|
||||||
|
|
||||||
# Native build in that platform doesn't imply cross build works
|
# Native build in that platform doesn't imply cross build works
|
||||||
canCrossCompile = platform: pkg:
|
canCrossCompile = platform: default: pkg:
|
||||||
(isDerivation pkg) &&
|
(isDerivation pkg) &&
|
||||||
# Must be defined explicitly
|
# If meta.cross is undefined, use default
|
||||||
(pkg.meta.cross or false) &&
|
(pkg.meta.cross or default) &&
|
||||||
(meta.availableOn platform pkg);
|
(meta.availableOn final.pkgsCross.${platform}.stdenv.hostPlatform pkg);
|
||||||
|
|
||||||
# For now only RISC-V
|
# For now only RISC-V
|
||||||
crossSet = { riscv64 = final.pkgsCross.riscv64.bsc.pkgsTopLevel; };
|
crossSet = genAttrs [ "riscv64" ] (platform:
|
||||||
|
filterAttrs (_: canCrossCompile platform true)
|
||||||
|
final.pkgsCross.${platform}.bsc.pkgsTopLevel);
|
||||||
|
|
||||||
buildList = name: paths:
|
buildList = name: paths:
|
||||||
final.runCommandLocal name { } ''
|
final.runCommandLocal name { } ''
|
||||||
@@ -125,7 +170,7 @@ let
|
|||||||
# For now only RISC-V
|
# For now only RISC-V
|
||||||
crossList = buildList "ci-cross"
|
crossList = buildList "ci-cross"
|
||||||
(filter
|
(filter
|
||||||
(canCrossCompile final.pkgsCross.riscv64.stdenv.hostPlatform)
|
(canCrossCompile "riscv64" false) # opt-in (pkgs with: meta.cross = true)
|
||||||
(builtins.attrValues crossSet.riscv64));
|
(builtins.attrValues crossSet.riscv64));
|
||||||
|
|
||||||
in bscPkgs // {
|
in bscPkgs // {
|
||||||
|
|||||||
212
pkgs/agenix/agenix.sh
Normal file
212
pkgs/agenix/agenix.sh
Normal file
@@ -0,0 +1,212 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -Eeuo pipefail
|
||||||
|
|
||||||
|
PACKAGE="agenix"
|
||||||
|
|
||||||
|
function show_help () {
|
||||||
|
echo "$PACKAGE - edit and rekey age secret files"
|
||||||
|
echo " "
|
||||||
|
echo "$PACKAGE -e FILE [-i PRIVATE_KEY]"
|
||||||
|
echo "$PACKAGE -r [-i PRIVATE_KEY]"
|
||||||
|
echo ' '
|
||||||
|
echo 'options:'
|
||||||
|
echo '-h, --help show help'
|
||||||
|
# shellcheck disable=SC2016
|
||||||
|
echo '-e, --edit FILE edits FILE using $EDITOR'
|
||||||
|
echo '-r, --rekey re-encrypts all secrets with specified recipients'
|
||||||
|
echo '-d, --decrypt FILE decrypts FILE to STDOUT'
|
||||||
|
echo '-i, --identity identity to use when decrypting'
|
||||||
|
echo '-v, --verbose verbose output'
|
||||||
|
echo ' '
|
||||||
|
echo 'FILE an age-encrypted file'
|
||||||
|
echo ' '
|
||||||
|
echo 'PRIVATE_KEY a path to a private SSH key used to decrypt file'
|
||||||
|
echo ' '
|
||||||
|
echo 'EDITOR environment variable of editor to use when editing FILE'
|
||||||
|
echo ' '
|
||||||
|
echo 'If STDIN is not interactive, EDITOR will be set to "cp /dev/stdin"'
|
||||||
|
echo ' '
|
||||||
|
echo 'RULES environment variable with path to Nix file specifying recipient public keys.'
|
||||||
|
echo "Defaults to './secrets.nix'"
|
||||||
|
echo ' '
|
||||||
|
echo "agenix version: @version@"
|
||||||
|
echo "age binary path: @ageBin@"
|
||||||
|
echo "age version: $(@ageBin@ --version)"
|
||||||
|
}
|
||||||
|
|
||||||
|
function warn() {
|
||||||
|
printf '%s\n' "$*" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
function err() {
|
||||||
|
warn "$*"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
test $# -eq 0 && (show_help && exit 1)
|
||||||
|
|
||||||
|
REKEY=0
|
||||||
|
DECRYPT_ONLY=0
|
||||||
|
DEFAULT_DECRYPT=(--decrypt)
|
||||||
|
|
||||||
|
while test $# -gt 0; do
|
||||||
|
case "$1" in
|
||||||
|
-h|--help)
|
||||||
|
show_help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-e|--edit)
|
||||||
|
shift
|
||||||
|
if test $# -gt 0; then
|
||||||
|
export FILE=$1
|
||||||
|
else
|
||||||
|
echo "no FILE specified"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-i|--identity)
|
||||||
|
shift
|
||||||
|
if test $# -gt 0; then
|
||||||
|
DEFAULT_DECRYPT+=(--identity "$1")
|
||||||
|
else
|
||||||
|
echo "no PRIVATE_KEY specified"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-r|--rekey)
|
||||||
|
shift
|
||||||
|
REKEY=1
|
||||||
|
;;
|
||||||
|
-d|--decrypt)
|
||||||
|
shift
|
||||||
|
DECRYPT_ONLY=1
|
||||||
|
if test $# -gt 0; then
|
||||||
|
export FILE=$1
|
||||||
|
else
|
||||||
|
echo "no FILE specified"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-v|--verbose)
|
||||||
|
shift
|
||||||
|
set -x
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
show_help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
RULES=${RULES:-./secrets.nix}
|
||||||
|
function cleanup {
|
||||||
|
if [ -n "${CLEARTEXT_DIR+x}" ]
|
||||||
|
then
|
||||||
|
rm -rf -- "$CLEARTEXT_DIR"
|
||||||
|
fi
|
||||||
|
if [ -n "${REENCRYPTED_DIR+x}" ]
|
||||||
|
then
|
||||||
|
rm -rf -- "$REENCRYPTED_DIR"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
trap "cleanup" 0 2 3 15
|
||||||
|
|
||||||
|
function keys {
|
||||||
|
(@nixInstantiate@ --json --eval --strict -E "(let rules = import $RULES; in rules.\"$1\".publicKeys)" | @jqBin@ -r .[]) || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function armor {
|
||||||
|
(@nixInstantiate@ --json --eval --strict -E "(let rules = import $RULES; in (builtins.hasAttr \"armor\" rules.\"$1\" && rules.\"$1\".armor))") || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function decrypt {
|
||||||
|
FILE=$1
|
||||||
|
KEYS=$2
|
||||||
|
if [ -z "$KEYS" ]
|
||||||
|
then
|
||||||
|
err "There is no rule for $FILE in $RULES."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$FILE" ]
|
||||||
|
then
|
||||||
|
DECRYPT=("${DEFAULT_DECRYPT[@]}")
|
||||||
|
if [[ "${DECRYPT[*]}" != *"--identity"* ]]; then
|
||||||
|
if [ -f "$HOME/.ssh/id_rsa" ]; then
|
||||||
|
DECRYPT+=(--identity "$HOME/.ssh/id_rsa")
|
||||||
|
fi
|
||||||
|
if [ -f "$HOME/.ssh/id_ed25519" ]; then
|
||||||
|
DECRYPT+=(--identity "$HOME/.ssh/id_ed25519")
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ "${DECRYPT[*]}" != *"--identity"* ]]; then
|
||||||
|
err "No identity found to decrypt $FILE. Try adding an SSH key at $HOME/.ssh/id_rsa or $HOME/.ssh/id_ed25519 or using the --identity flag to specify a file."
|
||||||
|
fi
|
||||||
|
|
||||||
|
@ageBin@ "${DECRYPT[@]}" -- "$FILE" || exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function edit {
|
||||||
|
FILE=$1
|
||||||
|
KEYS=$(keys "$FILE") || exit 1
|
||||||
|
ARMOR=$(armor "$FILE") || exit 1
|
||||||
|
|
||||||
|
CLEARTEXT_DIR=$(@mktempBin@ -d)
|
||||||
|
CLEARTEXT_FILE="$CLEARTEXT_DIR/$(basename -- "$FILE")"
|
||||||
|
DEFAULT_DECRYPT+=(-o "$CLEARTEXT_FILE")
|
||||||
|
|
||||||
|
decrypt "$FILE" "$KEYS" || exit 1
|
||||||
|
|
||||||
|
[ ! -f "$CLEARTEXT_FILE" ] || cp -- "$CLEARTEXT_FILE" "$CLEARTEXT_FILE.before"
|
||||||
|
|
||||||
|
[ -t 0 ] || EDITOR='cp -- /dev/stdin'
|
||||||
|
|
||||||
|
$EDITOR "$CLEARTEXT_FILE"
|
||||||
|
|
||||||
|
if [ ! -f "$CLEARTEXT_FILE" ]
|
||||||
|
then
|
||||||
|
warn "$FILE wasn't created."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
[ -f "$FILE" ] && [ "$EDITOR" != ":" ] && @diffBin@ -q -- "$CLEARTEXT_FILE.before" "$CLEARTEXT_FILE" && warn "$FILE wasn't changed, skipping re-encryption." && return
|
||||||
|
|
||||||
|
ENCRYPT=()
|
||||||
|
if [[ "$ARMOR" == "true" ]]; then
|
||||||
|
ENCRYPT+=(--armor)
|
||||||
|
fi
|
||||||
|
while IFS= read -r key
|
||||||
|
do
|
||||||
|
if [ -n "$key" ]; then
|
||||||
|
ENCRYPT+=(--recipient "$key")
|
||||||
|
fi
|
||||||
|
done <<< "$KEYS"
|
||||||
|
|
||||||
|
REENCRYPTED_DIR=$(@mktempBin@ -d)
|
||||||
|
REENCRYPTED_FILE="$REENCRYPTED_DIR/$(basename -- "$FILE")"
|
||||||
|
|
||||||
|
ENCRYPT+=(-o "$REENCRYPTED_FILE")
|
||||||
|
|
||||||
|
@ageBin@ "${ENCRYPT[@]}" <"$CLEARTEXT_FILE" || exit 1
|
||||||
|
|
||||||
|
mkdir -p -- "$(dirname -- "$FILE")"
|
||||||
|
|
||||||
|
mv -f -- "$REENCRYPTED_FILE" "$FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
function rekey {
|
||||||
|
FILES=$( (@nixInstantiate@ --json --eval -E "(let rules = import $RULES; in builtins.attrNames rules)" | @jqBin@ -r .[]) || exit 1)
|
||||||
|
|
||||||
|
for FILE in $FILES
|
||||||
|
do
|
||||||
|
warn "rekeying $FILE..."
|
||||||
|
EDITOR=: edit "$FILE"
|
||||||
|
cleanup
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
[ $REKEY -eq 1 ] && rekey && exit 0
|
||||||
|
[ $DECRYPT_ONLY -eq 1 ] && DEFAULT_DECRYPT+=("-o" "-") && decrypt "${FILE}" "$(keys "$FILE")" && exit 0
|
||||||
|
edit "$FILE" && cleanup && exit 0
|
||||||
66
pkgs/agenix/default.nix
Normal file
66
pkgs/agenix/default.nix
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
age,
|
||||||
|
jq,
|
||||||
|
nix,
|
||||||
|
mktemp,
|
||||||
|
diffutils,
|
||||||
|
replaceVars,
|
||||||
|
ageBin ? "${age}/bin/age",
|
||||||
|
shellcheck,
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
bin = "${placeholder "out"}/bin/agenix";
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "agenix";
|
||||||
|
version = "0.15.0";
|
||||||
|
src = replaceVars ./agenix.sh {
|
||||||
|
inherit ageBin version;
|
||||||
|
jqBin = "${jq}/bin/jq";
|
||||||
|
nixInstantiate = "${nix}/bin/nix-instantiate";
|
||||||
|
mktempBin = "${mktemp}/bin/mktemp";
|
||||||
|
diffBin = "${diffutils}/bin/diff";
|
||||||
|
};
|
||||||
|
dontUnpack = true;
|
||||||
|
doInstallCheck = true;
|
||||||
|
installCheckInputs = [ shellcheck ];
|
||||||
|
postInstallCheck = ''
|
||||||
|
shellcheck ${bin}
|
||||||
|
${bin} -h | grep ${version}
|
||||||
|
|
||||||
|
test_tmp=$(mktemp -d 2>/dev/null || mktemp -d -t 'mytmpdir')
|
||||||
|
export HOME="$test_tmp/home"
|
||||||
|
export NIX_STORE_DIR="$test_tmp/nix/store"
|
||||||
|
export NIX_STATE_DIR="$test_tmp/nix/var"
|
||||||
|
mkdir -p "$HOME" "$NIX_STORE_DIR" "$NIX_STATE_DIR"
|
||||||
|
function cleanup {
|
||||||
|
rm -rf "$test_tmp"
|
||||||
|
}
|
||||||
|
trap "cleanup" 0 2 3 15
|
||||||
|
|
||||||
|
mkdir -p $HOME/.ssh
|
||||||
|
cp -r "${./example}" $HOME/secrets
|
||||||
|
chmod -R u+rw $HOME/secrets
|
||||||
|
(
|
||||||
|
umask u=rw,g=r,o=r
|
||||||
|
cp ${./example_keys/user1.pub} $HOME/.ssh/id_ed25519.pub
|
||||||
|
chown $UID $HOME/.ssh/id_ed25519.pub
|
||||||
|
)
|
||||||
|
(
|
||||||
|
umask u=rw,g=,o=
|
||||||
|
cp ${./example_keys/user1} $HOME/.ssh/id_ed25519
|
||||||
|
chown $UID $HOME/.ssh/id_ed25519
|
||||||
|
)
|
||||||
|
|
||||||
|
cd $HOME/secrets
|
||||||
|
test $(${bin} -d secret1.age) = "hello"
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
install -D $src ${bin}
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta.description = "age-encrypted secrets for NixOS";
|
||||||
|
}
|
||||||
7
pkgs/agenix/example/-leading-hyphen-filename.age
Normal file
7
pkgs/agenix/example/-leading-hyphen-filename.age
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 V3XmEA zirqdzZZ1E+sedBn7fbEHq4ntLEkokZ4GctarBBOHXY
|
||||||
|
Rvs5YHaAUeCZyNwPedubPcHClWYIuXXWA5zadXPWY6w
|
||||||
|
-> ssh-ed25519 KLPP8w BVp4rDkOYSQyn8oVeHFeinSqW+pdVtxBF9+5VM1yORY
|
||||||
|
bMwppAi8Nhz0328taU4AzUkTVyWtSLvFZG6c5W/Fs78
|
||||||
|
--- xCbqLhXAcOziO2wmbjTiSQfZvt5Rlsc4SCvF+iEzpQA
|
||||||
|
<EFBFBD>KB<EFBFBD><EFBFBD>/<2F>Z<><5A>r<EFBFBD>%<01><>4<EFBFBD><34><EFBFBD>Mq5<71><35>_<EFBFBD><5F>ݒ<><DD92><EFBFBD><EFBFBD><EFBFBD>11ܨqM;& <20><>Lr<4C><72><EFBFBD>f<EFBFBD><66><EFBFBD>]>N
|
||||||
7
pkgs/agenix/example/armored-secret.age
Normal file
7
pkgs/agenix/example/armored-secret.age
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFYzWG1FQSBpZkZW
|
||||||
|
aFpLNnJxc0VUMHRmZ2dZS0pjMGVENnR3OHd5K0RiT1RjRUhibFZBCnN5UG5vUjA3
|
||||||
|
SXpsNGtiVUw4T0tIVFo5Wkk5QS9NQlBndzVvektiQ0ozc0kKLS0tIGxyY1Q4dEZ1
|
||||||
|
VGZEanJyTFNta2JNRmpZb2FnK2JyS1hSVml1UGdMNWZKQXMKYla+wTXcRedyZoEb
|
||||||
|
LVWaSx49WoUTU0KBPJg9RArxaeC23GoCDzR/aM/1DvYU
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
9
pkgs/agenix/example/passwordfile-user1.age
Normal file
9
pkgs/agenix/example/passwordfile-user1.age
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 KLPP8w s1DYZRlZuSsyhmZCF1lFB+E9vB8bZ/+ZhBRlx8nprwE
|
||||||
|
nmYVCsVBrX2CFXXPU+D+bbkkIe/foofp+xoUrg9DHZw
|
||||||
|
-> ssh-ed25519 V3XmEA Pwv3oCwcY0DX8rY48UNfsj9RumWsn4dbgorYHCwObgI
|
||||||
|
FKxRYkL3JHtJxUwymWDF0rAtJ33BivDI6IfPsfumM90
|
||||||
|
-> V'v(/u$-grease em/Vgf 2qDuk
|
||||||
|
7I3iiQLPGi1COML9u/JeYkr7EqbSLoU
|
||||||
|
--- 57WJRigUGtmcObrssS3s4PvmR8wgh1AOC/ijJn1s3xI
|
||||||
|
<EFBFBD>'K<>ƷY&<26>7G<37>O<EFBFBD><4F>Fj<13>k<EFBFBD>X<EFBFBD><58>BnuJ<75><4A>:9<>(<><7F><EFBFBD>X<EFBFBD>#<23>A<EFBFBD><41><EFBFBD><EFBFBD>ڧj<DAA7>,<02>_<17><><EFBFBD>?<3F>Z<EFBFBD><17>v<EFBFBD><76>V<EFBFBD>96]oks~%<25>c <04>e^C<>%JQ5<51><H<>z}<7D>C<EFBFBD>,<2C>p<EFBFBD><70>*!W<><57><EFBFBD>A<EFBFBD><41><EFBFBD>҅dC<15>K)<10><>-<2D>y
|
||||||
BIN
pkgs/agenix/example/secret1.age
Normal file
BIN
pkgs/agenix/example/secret1.age
Normal file
Binary file not shown.
5
pkgs/agenix/example/secret2.age
Normal file
5
pkgs/agenix/example/secret2.age
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 V3XmEA OB4+1FbPhQ3r6iGksM7peWX5it8NClpXIq/o5nnP7GA
|
||||||
|
FmHVUj+A5i5+bDFgySQskmlvynnosJiWUTJmBRiNA9I
|
||||||
|
--- tP+3mFVtd7ogVu1Lkboh55zoi5a77Ht08Uc/QuIviv4
|
||||||
|
<EFBFBD><EFBFBD>X<EFBFBD>{<7B><>O<EFBFBD><4F><1F><04>tMXx<58>vӪ(<28>I<EFBFBD>myP<79><50><EFBFBD><EFBFBD>+3<>S3i
|
||||||
23
pkgs/agenix/example/secrets.nix
Normal file
23
pkgs/agenix/example/secrets.nix
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
let
|
||||||
|
user1 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL0idNvgGiucWgup/mP78zyC23uFjYq0evcWdjGQUaBH";
|
||||||
|
system1 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPJDyIr/FSz1cJdcoW69R+NrWzwGK/+3gJpqD1t8L2zE";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
"secret1.age".publicKeys = [
|
||||||
|
user1
|
||||||
|
system1
|
||||||
|
];
|
||||||
|
"secret2.age".publicKeys = [ user1 ];
|
||||||
|
"passwordfile-user1.age".publicKeys = [
|
||||||
|
user1
|
||||||
|
system1
|
||||||
|
];
|
||||||
|
"-leading-hyphen-filename.age".publicKeys = [
|
||||||
|
user1
|
||||||
|
system1
|
||||||
|
];
|
||||||
|
"armored-secret.age" = {
|
||||||
|
publicKeys = [ user1 ];
|
||||||
|
armor = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
7
pkgs/agenix/example_keys/system1
Normal file
7
pkgs/agenix/example_keys/system1
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||||
|
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
|
||||||
|
QyNTUxOQAAACDyQ8iK/xUs9XCXXKFuvUfja1s8Biv/t4Caag9bfC9sxAAAAJA3yvCWN8rw
|
||||||
|
lgAAAAtzc2gtZWQyNTUxOQAAACDyQ8iK/xUs9XCXXKFuvUfja1s8Biv/t4Caag9bfC9sxA
|
||||||
|
AAAEA+J2V6AG1NriAIvnNKRauIEh1JE9HSdhvKJ68a5Fm0w/JDyIr/FSz1cJdcoW69R+Nr
|
||||||
|
WzwGK/+3gJpqD1t8L2zEAAAADHJ5YW50bUBob21lMQE=
|
||||||
|
-----END OPENSSH PRIVATE KEY-----
|
||||||
1
pkgs/agenix/example_keys/system1.pub
Normal file
1
pkgs/agenix/example_keys/system1.pub
Normal file
@@ -0,0 +1 @@
|
|||||||
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPJDyIr/FSz1cJdcoW69R+NrWzwGK/+3gJpqD1t8L2zE
|
||||||
7
pkgs/agenix/example_keys/user1
Normal file
7
pkgs/agenix/example_keys/user1
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||||
|
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
|
||||||
|
QyNTUxOQAAACC9InTb4BornFoLqf5j+/M8gtt7hY2KtHr3FnYxkFGgRwAAAJC2JJ8htiSf
|
||||||
|
IQAAAAtzc2gtZWQyNTUxOQAAACC9InTb4BornFoLqf5j+/M8gtt7hY2KtHr3FnYxkFGgRw
|
||||||
|
AAAEDxt5gC/s53IxiKAjfZJVCCcFIsdeERdIgbYhLO719+Kb0idNvgGiucWgup/mP78zyC
|
||||||
|
23uFjYq0evcWdjGQUaBHAAAADHJ5YW50bUBob21lMQE=
|
||||||
|
-----END OPENSSH PRIVATE KEY-----
|
||||||
1
pkgs/agenix/example_keys/user1.pub
Normal file
1
pkgs/agenix/example_keys/user1.pub
Normal file
@@ -0,0 +1 @@
|
|||||||
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL0idNvgGiucWgup/mP78zyC23uFjYq0evcWdjGQUaBH
|
||||||
23
pkgs/agenix/update.sh
Executable file
23
pkgs/agenix/update.sh
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# All operations are done relative to root
|
||||||
|
GITROOT=$(git rev-parse --show-toplevel)
|
||||||
|
cd "$GITROOT"
|
||||||
|
|
||||||
|
REVISION=${1:-main}
|
||||||
|
|
||||||
|
TMPCLONE=$(mktemp -d)
|
||||||
|
trap "rm -rf ${TMPCLONE}" EXIT
|
||||||
|
|
||||||
|
git clone https://github.com/ryantm/agenix.git --revision="$REVISION" "$TMPCLONE" --depth=1
|
||||||
|
|
||||||
|
cp "${TMPCLONE}/pkgs/agenix.sh" pkgs/agenix/agenix.sh
|
||||||
|
cp "${TMPCLONE}/pkgs/agenix.nix" pkgs/agenix/default.nix
|
||||||
|
sed -i 's#../example#./example#' pkgs/agenix/default.nix
|
||||||
|
|
||||||
|
cp "${TMPCLONE}/example/"* pkgs/agenix/example/
|
||||||
|
cp "${TMPCLONE}/example_keys/"* pkgs/agenix/example_keys/
|
||||||
|
|
||||||
|
cp "${TMPCLONE}/modules/age.nix" m/module/agenix.nix
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
{ stdenv
|
{ stdenv
|
||||||
, lib
|
, lib
|
||||||
, curl
|
, fetchurl
|
||||||
, cacert
|
|
||||||
, runCommandLocal
|
|
||||||
, autoPatchelfHook
|
, autoPatchelfHook
|
||||||
, elfutils
|
, elfutils
|
||||||
, glib
|
, glib
|
||||||
@@ -26,26 +24,22 @@ let
|
|||||||
tarball = "AMDuProf_Linux_x64_${version}.tar.bz2";
|
tarball = "AMDuProf_Linux_x64_${version}.tar.bz2";
|
||||||
|
|
||||||
# NOTE: Remember to update the radare2 patch below if AMDuProfPcm changes.
|
# NOTE: Remember to update the radare2 patch below if AMDuProfPcm changes.
|
||||||
uprofSrc = runCommandLocal tarball {
|
src = fetchurl {
|
||||||
nativeBuildInputs = [ curl ];
|
url = "https://download.amd.com/developer/eula/uprof/uprof-5-1/${tarball}";
|
||||||
outputHash = "sha256-j9gxcBcIg6Zhc5FglUXf/VV9bKSo+PAKeootbN7ggYk=";
|
sha256 = "sha256-j9gxcBcIg6Zhc5FglUXf/VV9bKSo+PAKeootbN7ggYk=";
|
||||||
SSL_CERT_FILE="${cacert}/etc/ssl/certs/ca-bundle.crt";
|
curlOptsList = [
|
||||||
} ''
|
"-H" "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:139.0) Gecko/20100101 Firefox/139.0"
|
||||||
curl \
|
"-H" "'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'"
|
||||||
-o $out \
|
"-H" "Accept-Language: en-US,en;q=0.5"
|
||||||
'https://download.amd.com/developer/eula/uprof/uprof-5-1/${tarball}' \
|
"-H" "Accept-Encoding: gzip, deflate, br, zstd"
|
||||||
-H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:139.0) Gecko/20100101 Firefox/139.0' \
|
"-H" "Referer: https://www.amd.com/"
|
||||||
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
|
];
|
||||||
-H 'Accept-Language: en-US,en;q=0.5' \
|
};
|
||||||
-H 'Accept-Encoding: gzip, deflate, br, zstd' \
|
|
||||||
-H 'Referer: https://www.amd.com/' 2>&1 | tr '\r' '\n'
|
|
||||||
'';
|
|
||||||
|
|
||||||
in
|
in
|
||||||
stdenv.mkDerivation {
|
stdenv.mkDerivation {
|
||||||
pname = "AMD-uProf";
|
pname = "AMD-uProf";
|
||||||
inherit version;
|
inherit src version;
|
||||||
src = uprofSrc;
|
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
phases = [ "installPhase" "fixupPhase" ];
|
phases = [ "installPhase" "fixupPhase" ];
|
||||||
nativeBuildInputs = [ autoPatchelfHook radare2 ];
|
nativeBuildInputs = [ autoPatchelfHook radare2 ];
|
||||||
@@ -90,7 +84,7 @@ in
|
|||||||
meta = {
|
meta = {
|
||||||
description = "Performance analysis tool-suite for x86 based applications";
|
description = "Performance analysis tool-suite for x86 based applications";
|
||||||
homepage = "https://www.amd.com/es/developer/uprof.html";
|
homepage = "https://www.amd.com/es/developer/uprof.html";
|
||||||
platforms = lib.platforms.linux;
|
platforms = [ "x86_64-linux" ];
|
||||||
license = lib.licenses.unfree;
|
license = lib.licenses.unfree;
|
||||||
maintainers = with lib.maintainers.bsc; [ rarias varcila ];
|
maintainers = with lib.maintainers.bsc; [ rarias varcila ];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ in stdenv.mkDerivation {
|
|||||||
'';
|
'';
|
||||||
hardeningDisable = [ "pic" "format" ];
|
hardeningDisable = [ "pic" "format" ];
|
||||||
nativeBuildInputs = kernel.moduleBuildDependencies;
|
nativeBuildInputs = kernel.moduleBuildDependencies;
|
||||||
patches = [ ./makefile.patch ./hrtimer.patch ];
|
patches = [ ./makefile.patch ./hrtimer.patch ./remove-wr-rdmsrq.patch ];
|
||||||
makeFlags = [
|
makeFlags = [
|
||||||
"KERNEL_VERSION=${kernel.modDirVersion}"
|
"KERNEL_VERSION=${kernel.modDirVersion}"
|
||||||
"KERNEL_DIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
|
"KERNEL_DIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
|
||||||
|
|||||||
20
pkgs/amd-uprof/remove-wr-rdmsrq.patch
Normal file
20
pkgs/amd-uprof/remove-wr-rdmsrq.patch
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
diff --git a/inc/PwrProfAsm.h b/inc/PwrProfAsm.h
|
||||||
|
index d77770a..c93a0e9 100644
|
||||||
|
--- a/inc/PwrProfAsm.h
|
||||||
|
+++ b/inc/PwrProfAsm.h
|
||||||
|
@@ -347,6 +347,7 @@
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/*
|
||||||
|
#define rdmsrq(msr,val1,val2,val3,val4) ({ \
|
||||||
|
__asm__ __volatile__( \
|
||||||
|
"rdmsr\n" \
|
||||||
|
@@ -362,6 +363,7 @@
|
||||||
|
:"c"(msr), "a"(val1), "d"(val2), "S"(val3), "D"(val4) \
|
||||||
|
); \
|
||||||
|
})
|
||||||
|
+*/
|
||||||
|
|
||||||
|
#define rdmsrpw(msr,val1,val2,val3,val4) ({ \
|
||||||
|
__asm__ __volatile__( \
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
stdenv
|
stdenv
|
||||||
|
, lib
|
||||||
, cudatoolkit
|
, cudatoolkit
|
||||||
, cudaPackages
|
, cudaPackages
|
||||||
, autoAddDriverRunpath
|
, autoAddDriverRunpath
|
||||||
@@ -11,7 +12,7 @@ stdenv.mkDerivation (finalAttrs: {
|
|||||||
src = ./.;
|
src = ./.;
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
cudatoolkit # Required for nvcc
|
cudatoolkit # Required for nvcc
|
||||||
cudaPackages.cuda_cudart.static # Required for -lcudart_static
|
(lib.getOutput "static" cudaPackages.cuda_cudart) # Required for -lcudart_static
|
||||||
autoAddDriverRunpath
|
autoAddDriverRunpath
|
||||||
];
|
];
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
@@ -40,4 +41,9 @@ stdenv.mkDerivation (finalAttrs: {
|
|||||||
'';
|
'';
|
||||||
installPhase = "touch $out";
|
installPhase = "touch $out";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
platforms = [ "x86_64-linux" ];
|
||||||
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
|
};
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
, automake
|
, automake
|
||||||
, libtool
|
, libtool
|
||||||
, mpi
|
, mpi
|
||||||
, rsync
|
|
||||||
, gfortran
|
, gfortran
|
||||||
}:
|
}:
|
||||||
|
|
||||||
@@ -44,13 +43,24 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
configureFlags = [
|
configureFlags = [
|
||||||
"--with-infiniband=${rdma-core-all}"
|
"--with-infiniband=${rdma-core-all}"
|
||||||
"--with-mpi=${mpiAll}"
|
"--with-mpi=yes" # fixes mpi detection when cross-compiling
|
||||||
"--with-slurm"
|
"--with-slurm"
|
||||||
"CFLAGS=-fPIC"
|
"CFLAGS=-fPIC"
|
||||||
"CXXFLAGS=-fPIC"
|
"CXXFLAGS=-fPIC"
|
||||||
];
|
];
|
||||||
|
|
||||||
buildInputs = [ slurm mpiAll rdma-core-all autoconf automake libtool rsync gfortran ];
|
nativeBuildInputs = [
|
||||||
|
autoconf
|
||||||
|
automake
|
||||||
|
gfortran
|
||||||
|
libtool
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
slurm
|
||||||
|
mpiAll
|
||||||
|
rdma-core-all
|
||||||
|
];
|
||||||
|
|
||||||
hardeningDisable = [ "all" ];
|
hardeningDisable = [ "all" ];
|
||||||
|
|
||||||
@@ -60,5 +70,6 @@ stdenv.mkDerivation rec {
|
|||||||
maintainers = with lib.maintainers.bsc; [ rarias ];
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
platforms = lib.platforms.linux;
|
platforms = lib.platforms.linux;
|
||||||
license = lib.licenses.gpl3Plus;
|
license = lib.licenses.gpl3Plus;
|
||||||
|
cross = false; # infiniband detection does not work
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
191
pkgs/gromacs/default.nix
Normal file
191
pkgs/gromacs/default.nix
Normal file
@@ -0,0 +1,191 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
fetchurl,
|
||||||
|
cmake,
|
||||||
|
hwloc,
|
||||||
|
fftw,
|
||||||
|
perl,
|
||||||
|
blas,
|
||||||
|
lapack,
|
||||||
|
llvmPackages,
|
||||||
|
intelPackages ? null,
|
||||||
|
mpi,
|
||||||
|
cudaPackages,
|
||||||
|
plumed,
|
||||||
|
singlePrec ? true,
|
||||||
|
config,
|
||||||
|
enableSYCL ? false,
|
||||||
|
enableCuda ? config.cudaSupport,
|
||||||
|
enableMpi ? false,
|
||||||
|
enablePlumed ? false,
|
||||||
|
cpuAcceleration ? null,
|
||||||
|
}:
|
||||||
|
|
||||||
|
# CUDA is only implemented for single precission
|
||||||
|
assert enableCuda -> singlePrec;
|
||||||
|
|
||||||
|
assert !(enableSYCL && enableCuda);
|
||||||
|
|
||||||
|
assert enableSYCL -> intelPackages != null;
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (cudaPackages.flags) cmakeCudaArchitecturesString;
|
||||||
|
|
||||||
|
# Select reasonable defaults for all major platforms
|
||||||
|
# The possible values are defined in CMakeLists.txt:
|
||||||
|
# AUTO None SSE2 SSE4.1 AVX_128_FMA AVX_256 AVX2_256
|
||||||
|
# AVX2_128 AVX_512 AVX_512_KNL MIC ARM_NEON ARM_NEON_ASIMD
|
||||||
|
SIMD =
|
||||||
|
x:
|
||||||
|
if (cpuAcceleration != null) then
|
||||||
|
x
|
||||||
|
else if stdenv.hostPlatform.system == "i686-linux" then
|
||||||
|
"SSE2"
|
||||||
|
else if stdenv.hostPlatform.system == "x86_64-linux" then
|
||||||
|
"SSE4.1"
|
||||||
|
else if stdenv.hostPlatform.system == "x86_64-darwin" then
|
||||||
|
"SSE4.1"
|
||||||
|
else if stdenv.hostPlatform.system == "aarch64-linux" then
|
||||||
|
"ARM_NEON_ASIMD"
|
||||||
|
else
|
||||||
|
"None";
|
||||||
|
|
||||||
|
source =
|
||||||
|
if enablePlumed then
|
||||||
|
{
|
||||||
|
version = "2024.2";
|
||||||
|
hash = "sha256-gCp+M18uiVdw9XsVnk7DaOuw/yzm2sz3BsboAlw2hSs=";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
version = "2025.3";
|
||||||
|
hash = "sha256-i9/KAmjz8Qp8o8BuWbYvc+oCQgxnIRwP85EvMteDPGU=";
|
||||||
|
};
|
||||||
|
|
||||||
|
stdenv' = if enableSYCL then intelPackages.stdenv else stdenv;
|
||||||
|
|
||||||
|
in
|
||||||
|
stdenv'.mkDerivation rec {
|
||||||
|
pname = "gromacs";
|
||||||
|
version = source.version;
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "ftp://ftp.gromacs.org/pub/gromacs/gromacs-${version}.tar.gz";
|
||||||
|
inherit (source) hash;
|
||||||
|
};
|
||||||
|
|
||||||
|
patches = [ (if enablePlumed then ./pkgconfig-2024.patch else ./pkgconfig-2025.patch) ];
|
||||||
|
|
||||||
|
postPatch = lib.optionalString enablePlumed ''
|
||||||
|
plumed patch -p -e gromacs-${source.version}
|
||||||
|
'';
|
||||||
|
|
||||||
|
outputs = [
|
||||||
|
"out"
|
||||||
|
"dev"
|
||||||
|
"man"
|
||||||
|
];
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
cmake
|
||||||
|
]
|
||||||
|
++ lib.optional enablePlumed plumed
|
||||||
|
++ lib.optionals enableCuda [ cudaPackages.cuda_nvcc ];
|
||||||
|
|
||||||
|
env.MKLROOT = intelPackages.mkl;
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
fftw
|
||||||
|
perl
|
||||||
|
hwloc
|
||||||
|
blas
|
||||||
|
lapack
|
||||||
|
]
|
||||||
|
++ lib.optional enableMpi mpi
|
||||||
|
++ lib.optionals enableCuda [
|
||||||
|
cudaPackages.cuda_cccl
|
||||||
|
cudaPackages.cuda_cudart
|
||||||
|
cudaPackages.libcufft
|
||||||
|
cudaPackages.cuda_profiler_api
|
||||||
|
]
|
||||||
|
++ lib.optional stdenv.hostPlatform.isDarwin llvmPackages.openmp;
|
||||||
|
|
||||||
|
propagatedBuildInputs = lib.optional enableMpi mpi;
|
||||||
|
propagatedUserEnvPkgs = lib.optional enableMpi mpi;
|
||||||
|
|
||||||
|
cmakeFlags = [
|
||||||
|
(lib.cmakeBool "GMX_HWLOC" true)
|
||||||
|
"-DGMX_SIMD:STRING=${SIMD cpuAcceleration}"
|
||||||
|
"-DGMX_OPENMP:BOOL=TRUE"
|
||||||
|
"-DBUILD_SHARED_LIBS=ON"
|
||||||
|
]
|
||||||
|
++ (
|
||||||
|
if singlePrec then
|
||||||
|
[
|
||||||
|
"-DGMX_DOUBLE=OFF"
|
||||||
|
]
|
||||||
|
else
|
||||||
|
[
|
||||||
|
"-DGMX_DOUBLE=ON"
|
||||||
|
"-DGMX_DEFAULT_SUFFIX=OFF"
|
||||||
|
]
|
||||||
|
)
|
||||||
|
++ (
|
||||||
|
if enableMpi then
|
||||||
|
[
|
||||||
|
"-DGMX_MPI:BOOL=TRUE"
|
||||||
|
"-DGMX_THREAD_MPI:BOOL=FALSE"
|
||||||
|
]
|
||||||
|
else
|
||||||
|
[
|
||||||
|
"-DGMX_MPI:BOOL=FALSE"
|
||||||
|
]
|
||||||
|
)
|
||||||
|
++ (lib.optionals enableSYCL [
|
||||||
|
"-DGMX_GPU=SYCL"
|
||||||
|
"-DGMX_OPENMP=OFF" # TODO: enable OpenMP with SYCL?
|
||||||
|
])
|
||||||
|
++ lib.optionals enableCuda [
|
||||||
|
"-DGMX_GPU=CUDA"
|
||||||
|
(lib.cmakeFeature "CMAKE_CUDA_ARCHITECTURES" cmakeCudaArchitecturesString)
|
||||||
|
|
||||||
|
# Gromacs seems to ignore and override the normal variables, so we add this ad hoc:
|
||||||
|
(lib.cmakeFeature "GMX_CUDA_TARGET_COMPUTE" cmakeCudaArchitecturesString)
|
||||||
|
];
|
||||||
|
|
||||||
|
postInstall = ''
|
||||||
|
moveToOutput share/cmake $dev
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
homepage = "https://www.gromacs.org";
|
||||||
|
license = licenses.lgpl21Plus;
|
||||||
|
description = "Molecular dynamics software package";
|
||||||
|
longDescription = ''
|
||||||
|
GROMACS is a versatile package to perform molecular dynamics,
|
||||||
|
i.e. simulate the Newtonian equations of motion for systems
|
||||||
|
with hundreds to millions of particles.
|
||||||
|
|
||||||
|
It is primarily designed for biochemical molecules like
|
||||||
|
proteins, lipids and nucleic acids that have a lot of
|
||||||
|
complicated bonded interactions, but since GROMACS is
|
||||||
|
extremely fast at calculating the nonbonded interactions (that
|
||||||
|
usually dominate simulations) many groups are also using it
|
||||||
|
for research on non-biological systems, e.g. polymers.
|
||||||
|
|
||||||
|
GROMACS supports all the usual algorithms you expect from a
|
||||||
|
modern molecular dynamics implementation, (check the online
|
||||||
|
reference or manual for details), but there are also quite a
|
||||||
|
few features that make it stand out from the competition.
|
||||||
|
|
||||||
|
See: https://www.gromacs.org/about.html for details.
|
||||||
|
'';
|
||||||
|
platforms = platforms.unix;
|
||||||
|
maintainers = with maintainers; [
|
||||||
|
sheepforce
|
||||||
|
markuskowa
|
||||||
|
bsc.abonerib
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
24
pkgs/gromacs/pkgconfig-2024.patch
Normal file
24
pkgs/gromacs/pkgconfig-2024.patch
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
diff --git a/src/external/muparser/muparser.pc.in b/src/external/muparser/muparser.pc.in
|
||||||
|
index 646787cb53..9b97ad57f7 100644
|
||||||
|
--- a/src/external/muparser/muparser.pc.in
|
||||||
|
+++ b/src/external/muparser/muparser.pc.in
|
||||||
|
@@ -1,7 +1,5 @@
|
||||||
|
-prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
|
-exec_prefix=${prefix}
|
||||||
|
-libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
|
||||||
|
-includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
|
||||||
|
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
||||||
|
+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
|
||||||
|
|
||||||
|
Name: @PACKAGE_NAME@
|
||||||
|
Description: Mathematical expressions parser library
|
||||||
|
diff --git a/src/gromacs/libgromacs.pc.cmakein b/src/gromacs/libgromacs.pc.cmakein
|
||||||
|
index ec1ed6684e..ca1105474a 100644
|
||||||
|
--- a/src/gromacs/libgromacs.pc.cmakein
|
||||||
|
+++ b/src/gromacs/libgromacs.pc.cmakein
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-libdir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@
|
||||||
|
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
||||||
|
|
||||||
|
Name: libgromacs@GMX_LIBS_SUFFIX@
|
||||||
|
Description: Gromacs library
|
||||||
36
pkgs/gromacs/pkgconfig-2025.patch
Normal file
36
pkgs/gromacs/pkgconfig-2025.patch
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
diff --git a/src/external/muparser/muparser.pc.in b/src/external/muparser/muparser.pc.in
|
||||||
|
index 646787cb53..d26e84de8f 100644
|
||||||
|
--- a/src/external/muparser/muparser.pc.in
|
||||||
|
+++ b/src/external/muparser/muparser.pc.in
|
||||||
|
@@ -1,11 +1,9 @@
|
||||||
|
-prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
|
-exec_prefix=${prefix}
|
||||||
|
-libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
|
||||||
|
-includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
|
||||||
|
-
|
||||||
|
-Name: @PACKAGE_NAME@
|
||||||
|
-Description: Mathematical expressions parser library
|
||||||
|
-Version: @MUPARSER_VERSION@
|
||||||
|
-Requires:
|
||||||
|
-Libs: -L${libdir} -lmuparser
|
||||||
|
-Cflags: -I${includedir} @PKG_CONFIG_FLAGS@
|
||||||
|
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
||||||
|
+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
|
||||||
|
+
|
||||||
|
+Name: @PACKAGE_NAME@
|
||||||
|
+Description: Mathematical expressions parser library
|
||||||
|
+Version: @MUPARSER_VERSION@
|
||||||
|
+Requires:
|
||||||
|
+Libs: -L${libdir} -lmuparser
|
||||||
|
+Cflags: -I${includedir} @PKG_CONFIG_FLAGS@
|
||||||
|
diff --git a/src/gromacs/libgromacs.pc.cmakein b/src/gromacs/libgromacs.pc.cmakein
|
||||||
|
index af9b5a6dc0..5f58d549bf 100644
|
||||||
|
--- a/src/gromacs/libgromacs.pc.cmakein
|
||||||
|
+++ b/src/gromacs/libgromacs.pc.cmakein
|
||||||
|
@@ -1,5 +1,4 @@
|
||||||
|
-prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
|
-libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
|
||||||
|
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
||||||
|
|
||||||
|
Name: libgromacs@GMX_LIBS_SUFFIX@
|
||||||
|
Description: Gromacs library
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
73
pkgs/intel-oneapi/common/wrapper.nix
Normal file
73
pkgs/intel-oneapi/common/wrapper.nix
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
{
|
||||||
|
stdenv,
|
||||||
|
lib,
|
||||||
|
gcc,
|
||||||
|
libgcc,
|
||||||
|
overrideCC,
|
||||||
|
wrapCCWith,
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
cc,
|
||||||
|
extraPath ? lib.makeBinPath (
|
||||||
|
[ gcc.cc ] ++ (lib.optionals (cc.enableCuda or false) [ cc.cudaPackages.cudatoolkit ])
|
||||||
|
),
|
||||||
|
extraBuildCommands ? "",
|
||||||
|
extraInstallCommands ? "",
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
targetConfig = stdenv.targetPlatform.config;
|
||||||
|
in
|
||||||
|
(wrapCCWith {
|
||||||
|
inherit cc;
|
||||||
|
|
||||||
|
nixSupport = {
|
||||||
|
cc-ldflags = [
|
||||||
|
"-L${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}"
|
||||||
|
"-L${gcc.cc.lib}/lib"
|
||||||
|
"-L${libgcc.out}/lib"
|
||||||
|
"-L${gcc.libc}/lib"
|
||||||
|
"-L${cc}/lib"
|
||||||
|
];
|
||||||
|
cc-cflags = [
|
||||||
|
"--gcc-toolchain=${gcc.cc}"
|
||||||
|
"-isystem ${cc.original or cc}/lib/clang/${toString cc.llvmMajorVersion}/include"
|
||||||
|
"-isystem ${cc}/include"
|
||||||
|
"-isystem ${cc}/include/intel64"
|
||||||
|
"-isystem ${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}/include"
|
||||||
|
];
|
||||||
|
libcxx-cxxflags = [
|
||||||
|
"-isystem ${gcc.cc}/include/c++/${gcc.version}"
|
||||||
|
"-isystem ${gcc.cc}/include/c++/${gcc.version}/${targetConfig}"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
extraBuildCommands = ''
|
||||||
|
# FIXME: We should find a better way to modify the PATH instead of using
|
||||||
|
# this ugly hack. See https://jungle.bsc.es/git/rarias/bscpkgs/issues/9
|
||||||
|
echo 'path_backup="${extraPath}:$path_backup"' >>$out/nix-support/cc-wrapper-hook
|
||||||
|
|
||||||
|
# Disable hardening by default
|
||||||
|
echo "" > $out/nix-support/add-hardening.sh
|
||||||
|
|
||||||
|
pushd $ccPath
|
||||||
|
for i in $ {llvm,sycl}-* ; do
|
||||||
|
ln -s $ccPath/$i $out/bin/$i
|
||||||
|
done
|
||||||
|
popd
|
||||||
|
|
||||||
|
# Use this to detect when a compiler subprocess is called
|
||||||
|
# from icpx (--fsycl-host-compiler)
|
||||||
|
echo 'export NIX_CC_WRAPPER_INTEL=1' >>$out/nix-support/cc-wrapper-hook
|
||||||
|
|
||||||
|
# oneMath looks for sycl libraries in bin/../lib
|
||||||
|
ln -s ${cc}/lib $out/lib
|
||||||
|
ln -s ${cc}/include $out/include
|
||||||
|
''
|
||||||
|
+ extraBuildCommands;
|
||||||
|
}).overrideAttrs
|
||||||
|
(finalAttrs: prevAttrs: {
|
||||||
|
installPhase = prevAttrs.installPhase + extraInstallCommands;
|
||||||
|
passthru.stdenv = overrideCC stdenv finalAttrs.finalPackage;
|
||||||
|
})
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
, zlib
|
, zlib
|
||||||
, autoPatchelfHook
|
, autoPatchelfHook
|
||||||
, libfabric
|
, libfabric
|
||||||
, gcc13
|
, gcc
|
||||||
, wrapCCWith
|
, wrapCCWith
|
||||||
}:
|
}:
|
||||||
|
|
||||||
@@ -33,8 +33,6 @@ let
|
|||||||
maintainers = with lib.maintainers.bsc; [ abonerib ];
|
maintainers = with lib.maintainers.bsc; [ abonerib ];
|
||||||
};
|
};
|
||||||
|
|
||||||
gcc = gcc13;
|
|
||||||
|
|
||||||
v = {
|
v = {
|
||||||
hpckit = "2023.1.0";
|
hpckit = "2023.1.0";
|
||||||
compiler = "2023.1.0";
|
compiler = "2023.1.0";
|
||||||
@@ -42,45 +40,19 @@ let
|
|||||||
mpi = "2021.9.0";
|
mpi = "2021.9.0";
|
||||||
};
|
};
|
||||||
|
|
||||||
aptPackageIndex = stdenv.mkDerivation {
|
findMatch = name:
|
||||||
name = "intel-oneapi-packages";
|
|
||||||
srcs = [
|
|
||||||
# Run update.sh to update the package lists
|
|
||||||
./amd64-packages ./all-packages
|
|
||||||
];
|
|
||||||
phases = [ "installPhase" ];
|
|
||||||
installPhase = ''
|
|
||||||
awk -F': ' '\
|
|
||||||
BEGIN { print "[ {" } \
|
|
||||||
NR>1 && /^Package: / { print "} {"; } \
|
|
||||||
/: / { printf "%s = \"%s\";\n", $1, $2 } \
|
|
||||||
END { print "} ]" }' $srcs > $out
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
aptPackages = import aptPackageIndex;
|
|
||||||
|
|
||||||
apthost = "https://apt.repos.intel.com/oneapi/";
|
|
||||||
|
|
||||||
getSum = pkgList: name:
|
|
||||||
let
|
let
|
||||||
matches = lib.filter (x: name == x.Package) pkgList;
|
aptPackages = builtins.fromJSON (builtins.readFile ./packages.json);
|
||||||
#n = lib.length matches;
|
matches = lib.filter (x: name == x.pname) aptPackages;
|
||||||
#match = builtins.trace (name + " -- ${builtins.toString n}") (lib.elemAt matches 0);
|
|
||||||
match = lib.elemAt matches 0;
|
|
||||||
in
|
|
||||||
match.SHA256;
|
|
||||||
|
|
||||||
getUrl = pkgList: name:
|
|
||||||
let
|
|
||||||
matches = lib.filter (x: name == x.Package) pkgList;
|
|
||||||
#match = assert lib.length matches == 1; lib.elemAt matches 0;
|
|
||||||
n = lib.length matches;
|
n = lib.length matches;
|
||||||
match =
|
match = builtins.traceVerbose (name + " -- ${builtins.toString n}") (builtins.head matches);
|
||||||
#builtins.trace (name + " -- n=${builtins.toString n}")
|
|
||||||
(lib.elemAt matches 0);
|
apthost = "https://apt.repos.intel.com/oneapi/";
|
||||||
in
|
in
|
||||||
apthost + match.Filename;
|
{
|
||||||
|
url = apthost + match.filename;
|
||||||
|
sha256 = match.sha256;
|
||||||
|
};
|
||||||
|
|
||||||
uncompressDebs = debs: name: stdenv.mkDerivation {
|
uncompressDebs = debs: name: stdenv.mkDerivation {
|
||||||
name = name;
|
name = name;
|
||||||
@@ -100,10 +72,7 @@ let
|
|||||||
|
|
||||||
joinDebs = name: names:
|
joinDebs = name: names:
|
||||||
let
|
let
|
||||||
urls = builtins.map (x: getUrl aptPackages x) names;
|
debs = builtins.map (x: builtins.fetchurl (findMatch x)) names;
|
||||||
sums = builtins.map (x: getSum aptPackages x) names;
|
|
||||||
getsrc = url: sha256: builtins.fetchurl { inherit url sha256; };
|
|
||||||
debs = lib.zipListsWith getsrc urls sums;
|
|
||||||
in
|
in
|
||||||
uncompressDebs debs "${name}-source";
|
uncompressDebs debs "${name}-source";
|
||||||
|
|
||||||
@@ -472,7 +441,7 @@ let
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
ifort-wrapper = wrapIntel rec {
|
ifort-wrapper = wrapIntel {
|
||||||
cc = intel-compiler-fortran;
|
cc = intel-compiler-fortran;
|
||||||
mygcc = gcc;
|
mygcc = gcc;
|
||||||
extraBuild = ''
|
extraBuild = ''
|
||||||
1
pkgs/intel-oneapi/deb/packages.json
Normal file
1
pkgs/intel-oneapi/deb/packages.json
Normal file
File diff suppressed because one or more lines are too long
301
pkgs/intel-oneapi/deb/packages.nix
Normal file
301
pkgs/intel-oneapi/deb/packages.nix
Normal file
@@ -0,0 +1,301 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
callPackage,
|
||||||
|
dpkg,
|
||||||
|
fetchurl,
|
||||||
|
|
||||||
|
sqlite,
|
||||||
|
elfutils,
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (builtins)
|
||||||
|
attrNames
|
||||||
|
attrValues
|
||||||
|
concatMap
|
||||||
|
elem
|
||||||
|
filter
|
||||||
|
fromJSON
|
||||||
|
getAttr
|
||||||
|
groupBy
|
||||||
|
head
|
||||||
|
isNull
|
||||||
|
listToAttrs
|
||||||
|
map
|
||||||
|
mapAttrs
|
||||||
|
readFile
|
||||||
|
replaceStrings
|
||||||
|
splitVersion
|
||||||
|
;
|
||||||
|
inherit (lib)
|
||||||
|
converge
|
||||||
|
findFirst
|
||||||
|
groupBy'
|
||||||
|
hasPrefix
|
||||||
|
optional
|
||||||
|
pipe
|
||||||
|
take
|
||||||
|
toInt
|
||||||
|
toList
|
||||||
|
versionAtLeast
|
||||||
|
versionOlder
|
||||||
|
;
|
||||||
|
|
||||||
|
aptData = fromJSON (readFile ./packages.json);
|
||||||
|
|
||||||
|
# Compare versions in debian control file syntax
|
||||||
|
# See: https://www.debian.org/doc/debian-policy/ch-relationships.html#syntax-of-relationship-fields
|
||||||
|
#
|
||||||
|
# NOTE: this is not a proper version comparison
|
||||||
|
#
|
||||||
|
# A proper version solver, should aggregate dependencies with the same name
|
||||||
|
# and compute the constraint (e.g. a (>= 2) a (<< 5) -> 2 <= a << 5)
|
||||||
|
#
|
||||||
|
# But in the intel repo, there are no such "duplicated" dependencies to specify
|
||||||
|
# upper limits, which leads to issues when intel-hpckit-2021 depends on things
|
||||||
|
# like intel-basekit >= 2021.1.0-2403 and we end up installing the newest
|
||||||
|
# basekit instead of the one from 2021.
|
||||||
|
#
|
||||||
|
# To mitigate this, >= is set to take the latest version with matching major
|
||||||
|
# and minor (only revision and patch are allowed to change)
|
||||||
|
compareVersions =
|
||||||
|
got: kind: want:
|
||||||
|
let
|
||||||
|
g0 = take 2 (splitVersion got);
|
||||||
|
w0 = take 2 (splitVersion want);
|
||||||
|
in
|
||||||
|
if isNull want then
|
||||||
|
true
|
||||||
|
else if kind == "=" then
|
||||||
|
got == want
|
||||||
|
else if kind == "<<" then
|
||||||
|
versionOlder got want
|
||||||
|
else if kind == "<=" then
|
||||||
|
versionAtLeast want got
|
||||||
|
else if kind == ">>" then
|
||||||
|
versionOlder want got
|
||||||
|
else if kind == ">=" then
|
||||||
|
(g0 == w0) && versionAtLeast got want # always match major version
|
||||||
|
else
|
||||||
|
throw "unknown operation: ${kind}";
|
||||||
|
|
||||||
|
findMatching =
|
||||||
|
{
|
||||||
|
pname,
|
||||||
|
kind,
|
||||||
|
version,
|
||||||
|
}:
|
||||||
|
findFirst (x: pname == x.pname && compareVersions x.version kind version) null aptData;
|
||||||
|
|
||||||
|
isIntel = pkg: (hasPrefix "intel-" pkg.pname);
|
||||||
|
|
||||||
|
expandDeps =
|
||||||
|
pkg: (map findMatching (filter isIntel pkg.dependencies)) ++ (optional (pkg.size != 0) pkg);
|
||||||
|
|
||||||
|
# get the oldest by major version. If they have the same major version, take
|
||||||
|
# the newest. This prevents most issues with resolutions
|
||||||
|
# versionOlder b a -> true if b is older than a (b `older` a)
|
||||||
|
getNewerInMajor =
|
||||||
|
a: b:
|
||||||
|
let
|
||||||
|
va = a.version;
|
||||||
|
vb = b.version;
|
||||||
|
va0 = head (splitVersion va);
|
||||||
|
vb0 = head (splitVersion vb);
|
||||||
|
in
|
||||||
|
if isNull a then
|
||||||
|
b
|
||||||
|
else if va0 != vb0 then
|
||||||
|
if va0 > vb0 then b else a
|
||||||
|
else if versionOlder vb va then
|
||||||
|
a
|
||||||
|
else
|
||||||
|
b;
|
||||||
|
removeDups = l: attrValues (groupBy' getNewerInMajor null (getAttr "provides") l);
|
||||||
|
|
||||||
|
_resolveDeps = converge (l: removeDups (concatMap expandDeps l));
|
||||||
|
resolveDeps =
|
||||||
|
pkg:
|
||||||
|
let
|
||||||
|
deps = _resolveDeps (toList pkg);
|
||||||
|
namedDeps = (map (x: "${x.pname}-${x.version}") deps);
|
||||||
|
in
|
||||||
|
builtins.traceVerbose (builtins.deepSeq namedDeps namedDeps) deps;
|
||||||
|
|
||||||
|
blacklist = [
|
||||||
|
"intel-basekit-env"
|
||||||
|
"intel-basekit-getting-started"
|
||||||
|
"intel-hpckit-env"
|
||||||
|
"intel-hpckit-getting-started"
|
||||||
|
"intel-oneapi-advisor"
|
||||||
|
"intel-oneapi-common-licensing"
|
||||||
|
"intel-oneapi-common-oneapi-vars"
|
||||||
|
"intel-oneapi-common-vars"
|
||||||
|
"intel-oneapi-compiler-cpp-eclipse-cfg"
|
||||||
|
"intel-oneapi-compiler-dpcpp-eclipse-cfg"
|
||||||
|
"intel-oneapi-condaindex"
|
||||||
|
"intel-oneapi-dev-utilities-eclipse-cfg"
|
||||||
|
"intel-oneapi-dpcpp-ct-eclipse-cfg"
|
||||||
|
"intel-oneapi-eclipse-ide"
|
||||||
|
"intel-oneapi-hpc-toolkit-getting-started"
|
||||||
|
"intel-oneapi-icc-eclipse-plugin-cpp"
|
||||||
|
"intel-oneapi-vtune"
|
||||||
|
"intel-oneapi-vtune-eclipse-plugin-vtune"
|
||||||
|
];
|
||||||
|
|
||||||
|
isInBlacklist = pkg: elem pkg.provides blacklist;
|
||||||
|
removeBlacklist = filter (e: !(isInBlacklist e));
|
||||||
|
|
||||||
|
dpkgExtractAll =
|
||||||
|
pname: version:
|
||||||
|
{ srcs, deps }:
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
inherit pname version srcs;
|
||||||
|
|
||||||
|
nativeBuildInputs = [ dpkg ];
|
||||||
|
phases = [ "installPhase" ];
|
||||||
|
|
||||||
|
passthru = { inherit deps; };
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out
|
||||||
|
for src in $srcs; do
|
||||||
|
echo "Unpacking $src"
|
||||||
|
dpkg -x $src $out
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
apthost = "https://apt.repos.intel.com/oneapi/";
|
||||||
|
fetchDeb =
|
||||||
|
p:
|
||||||
|
fetchurl {
|
||||||
|
url = apthost + p.filename;
|
||||||
|
inherit (p) sha256;
|
||||||
|
};
|
||||||
|
|
||||||
|
buildIntel =
|
||||||
|
pkg:
|
||||||
|
pipe pkg [
|
||||||
|
resolveDeps
|
||||||
|
removeBlacklist
|
||||||
|
(l: {
|
||||||
|
srcs = map fetchDeb l;
|
||||||
|
deps = l;
|
||||||
|
})
|
||||||
|
(dpkgExtractAll "${pkg.provides}-extracted" pkg.version)
|
||||||
|
];
|
||||||
|
|
||||||
|
findHpcKit =
|
||||||
|
year:
|
||||||
|
findMatching {
|
||||||
|
pname = "intel-hpckit";
|
||||||
|
kind = "<<";
|
||||||
|
version = toString (year + 1);
|
||||||
|
};
|
||||||
|
years = map toInt (attrNames components);
|
||||||
|
|
||||||
|
patchIntel = callPackage ./patch_intel.nix { };
|
||||||
|
|
||||||
|
# Version information for each hpckit. This is used to normalize the paths
|
||||||
|
# so that files are in $out/{bin,lib,include...} instead of all over the place
|
||||||
|
# in $out/opt/intel/oneapi/*/*/{...}.
|
||||||
|
#
|
||||||
|
# The most important is the compiler component, which is used to build the
|
||||||
|
# stdenv for the hpckit.
|
||||||
|
#
|
||||||
|
# NOTE: this have to be manually specified, so we can avoid IFD. To add a
|
||||||
|
# new version, add a new field with an empty attrset, (e.g. "2026" = {}; ),
|
||||||
|
# build hpckit_2026.unpatched and use the values from
|
||||||
|
# result/opt/intel/oneapi/* to populate the attrset.
|
||||||
|
#
|
||||||
|
# WARN: if there are more than one version in the folders of the unpatched
|
||||||
|
# components, our dependency resolution hacks have probably failed and the
|
||||||
|
# package set may be broken.
|
||||||
|
components = {
|
||||||
|
"2025" = {
|
||||||
|
ishmem = "1.4";
|
||||||
|
pti = "0.13";
|
||||||
|
tcm = "1.4";
|
||||||
|
umf = "0.11";
|
||||||
|
|
||||||
|
ccl = "2021.16";
|
||||||
|
compiler = "2025.2";
|
||||||
|
dal = "2025.8";
|
||||||
|
debugger = "2025.2";
|
||||||
|
dev-utilities = "2025.2";
|
||||||
|
dnnl = "2025.2";
|
||||||
|
dpcpp-ct = "2025.2";
|
||||||
|
dpl = "2022.9";
|
||||||
|
ipp = "2022.2";
|
||||||
|
ippcp = "2025.2";
|
||||||
|
mkl = "2025.2";
|
||||||
|
mpi = "2021.16";
|
||||||
|
tbb = "2022.2";
|
||||||
|
|
||||||
|
llvmMajorVersion = 21;
|
||||||
|
};
|
||||||
|
"2024" = {
|
||||||
|
tcm = "1.1";
|
||||||
|
|
||||||
|
ccl = "2021.13";
|
||||||
|
compiler = "2024.2";
|
||||||
|
dal = "2024.6";
|
||||||
|
debugger = "2024.2";
|
||||||
|
dev-utilities = "2024.2";
|
||||||
|
diagnostics = "2024.2";
|
||||||
|
dnnl = "2024.2";
|
||||||
|
dpcpp-ct = "2024.2";
|
||||||
|
dpl = "2022.6";
|
||||||
|
ipp = "2021.12";
|
||||||
|
ippcp = "2021.12";
|
||||||
|
mkl = "2024.2";
|
||||||
|
mpi = "2021.13";
|
||||||
|
tbb = "2021.13";
|
||||||
|
|
||||||
|
llvmMajorVersion = 19;
|
||||||
|
|
||||||
|
extraPackages = [
|
||||||
|
sqlite
|
||||||
|
elfutils
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
replaceDots = replaceStrings [ "." ] [ "_" ];
|
||||||
|
|
||||||
|
in
|
||||||
|
lib.recurseIntoAttrs (
|
||||||
|
listToAttrs (
|
||||||
|
map (
|
||||||
|
year:
|
||||||
|
let
|
||||||
|
year_str = toString year;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
name = "hpckit_${year_str}";
|
||||||
|
value = patchIntel {
|
||||||
|
unpatched = buildIntel (findHpcKit year);
|
||||||
|
components = components.${year_str};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
) years
|
||||||
|
)
|
||||||
|
)
|
||||||
|
// {
|
||||||
|
apt = pipe aptData [
|
||||||
|
(groupBy (p: replaceDots p.provides))
|
||||||
|
(mapAttrs (
|
||||||
|
_: l:
|
||||||
|
listToAttrs (
|
||||||
|
map (pkg: {
|
||||||
|
name = replaceDots ("v" + pkg.version);
|
||||||
|
value = pkg;
|
||||||
|
}) l
|
||||||
|
)
|
||||||
|
))
|
||||||
|
];
|
||||||
|
|
||||||
|
inherit resolveDeps patchIntel buildIntel;
|
||||||
|
}
|
||||||
156
pkgs/intel-oneapi/deb/patch_intel.nix
Normal file
156
pkgs/intel-oneapi/deb/patch_intel.nix
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
{
|
||||||
|
stdenv,
|
||||||
|
stdenvNoCC,
|
||||||
|
lib,
|
||||||
|
symlinkJoin,
|
||||||
|
autoPatchelfHook,
|
||||||
|
wrapIntel,
|
||||||
|
overrideCC,
|
||||||
|
hwloc,
|
||||||
|
libelf,
|
||||||
|
libffi_3_3,
|
||||||
|
libpsm2,
|
||||||
|
libuuid,
|
||||||
|
libxml2,
|
||||||
|
numactl,
|
||||||
|
ocl-icd,
|
||||||
|
openssl,
|
||||||
|
python3,
|
||||||
|
rdma-core,
|
||||||
|
ucx,
|
||||||
|
zlib,
|
||||||
|
writeTextFile,
|
||||||
|
}:
|
||||||
|
|
||||||
|
lib.makeOverridable (
|
||||||
|
{
|
||||||
|
unpatched,
|
||||||
|
components ? { },
|
||||||
|
extraPackages ? components.extraPackages or [ ],
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (builtins)
|
||||||
|
attrValues
|
||||||
|
filter
|
||||||
|
mapAttrs
|
||||||
|
removeAttrs
|
||||||
|
;
|
||||||
|
|
||||||
|
inherit (components) llvmMajorVersion;
|
||||||
|
|
||||||
|
__components = removeAttrs components [
|
||||||
|
"extraPackages"
|
||||||
|
"llvmMajorVersion"
|
||||||
|
];
|
||||||
|
_components = __components;
|
||||||
|
# _components = lib.traceSeqN 2 {
|
||||||
|
# inherit unpatched __components;
|
||||||
|
# deps = builtins.map (x: "${x.pname}-${x.version}") unpatched.deps;
|
||||||
|
# } __components;
|
||||||
|
|
||||||
|
in
|
||||||
|
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||||
|
pname = lib.removeSuffix "-extracted" unpatched.pname;
|
||||||
|
inherit (unpatched) version;
|
||||||
|
src = unpatched;
|
||||||
|
|
||||||
|
phases = [
|
||||||
|
"installPhase"
|
||||||
|
"fixupPhase"
|
||||||
|
];
|
||||||
|
buildInputs = [
|
||||||
|
libffi_3_3
|
||||||
|
libelf
|
||||||
|
libxml2
|
||||||
|
hwloc
|
||||||
|
numactl
|
||||||
|
libuuid
|
||||||
|
libpsm2
|
||||||
|
zlib
|
||||||
|
ocl-icd
|
||||||
|
rdma-core
|
||||||
|
ucx
|
||||||
|
openssl
|
||||||
|
python3
|
||||||
|
stdenv.cc.cc.lib
|
||||||
|
]
|
||||||
|
++ extraPackages;
|
||||||
|
|
||||||
|
autoPatchelfIgnoreMissingDeps = [
|
||||||
|
"libhwloc.so.5"
|
||||||
|
"libcuda.so.1"
|
||||||
|
"libze_loader.so.1"
|
||||||
|
];
|
||||||
|
|
||||||
|
# There are broken symlinks that go outside packages, ignore them
|
||||||
|
dontCheckForBrokenSymlinks = true;
|
||||||
|
|
||||||
|
nativeBuildInputs = [ autoPatchelfHook ];
|
||||||
|
installPhase = ''
|
||||||
|
cp -r $src/opt/intel/oneapi/ $out
|
||||||
|
'';
|
||||||
|
|
||||||
|
passthru =
|
||||||
|
let
|
||||||
|
pkgs = mapAttrs (
|
||||||
|
folder: version:
|
||||||
|
let
|
||||||
|
original = "${finalAttrs.finalPackage}/${folder}/${version}";
|
||||||
|
|
||||||
|
etc-vendors = writeTextFile {
|
||||||
|
name = "intel-ocl-icd";
|
||||||
|
text = "${original}/lib/libintelocl.so";
|
||||||
|
destination = "/etc/OpenCL/vendors/intel.icd";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
symlinkJoin {
|
||||||
|
pname = "intel-${folder}";
|
||||||
|
inherit version;
|
||||||
|
paths = [ original ] ++ lib.optionals (folder == "compiler") [ etc-vendors ];
|
||||||
|
passthru = { inherit original llvmMajorVersion; };
|
||||||
|
}
|
||||||
|
) _components;
|
||||||
|
in
|
||||||
|
pkgs
|
||||||
|
// {
|
||||||
|
inherit unpatched;
|
||||||
|
pkgs = lib.recurseIntoAttrs pkgs;
|
||||||
|
components = _components;
|
||||||
|
|
||||||
|
# This contains all packages properly symlinked into toplevel directories
|
||||||
|
# in $out.
|
||||||
|
#
|
||||||
|
# NOTE: there are clashes with packages that have symlinks outside their
|
||||||
|
# scope (libtcm and env/vars.sh)
|
||||||
|
all = symlinkJoin {
|
||||||
|
pname = finalAttrs.finalPackage.pname + "-symlinked";
|
||||||
|
inherit (finalAttrs.finalPackage) version;
|
||||||
|
paths = filter lib.isDerivation (attrValues finalAttrs.finalPackage.pkgs);
|
||||||
|
};
|
||||||
|
|
||||||
|
stdenv = overrideCC stdenv finalAttrs.finalPackage.cc;
|
||||||
|
|
||||||
|
cc = wrapIntel {
|
||||||
|
cc = finalAttrs.finalPackage.pkgs.compiler;
|
||||||
|
extraBuildCommands = ''
|
||||||
|
wrap icx $wrapper $ccPath/icx
|
||||||
|
wrap icpx $wrapper $ccPath/icpx
|
||||||
|
wrap ifx $wrapper $ccPath/ifx
|
||||||
|
|
||||||
|
ln -s $out/bin/icpx $out/bin/c++
|
||||||
|
ln -s $out/bin/icx $out/bin/cc
|
||||||
|
|
||||||
|
sed -i 's/.*isCxx=0/isCxx=1/' $out/bin/icpx
|
||||||
|
'';
|
||||||
|
|
||||||
|
extraInstallCommands = ''
|
||||||
|
export named_cc="icx"
|
||||||
|
export named_cxx="icpx"
|
||||||
|
export named_fc="ifx"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
})
|
||||||
|
)
|
||||||
29
pkgs/intel-oneapi/deb/process.jq
Executable file
29
pkgs/intel-oneapi/deb/process.jq
Executable file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/usr/bin/env -S jq -f
|
||||||
|
|
||||||
|
def extract_fields: {
|
||||||
|
pname : .Package,
|
||||||
|
version : .Version,
|
||||||
|
provides : .Package | sub("[0-9.-]*$"; ""),
|
||||||
|
filename : .Filename,
|
||||||
|
size : ."Installed-Size" | tonumber,
|
||||||
|
sha256 : .SHA256,
|
||||||
|
dependencies : .Depends,
|
||||||
|
} ;
|
||||||
|
|
||||||
|
# parses dependencies into a list of [{.pname, .kind, .version}]
|
||||||
|
# some dependencies do not have a version specified, in which case, kind = version = null
|
||||||
|
#
|
||||||
|
# example dependencies:
|
||||||
|
# intel-oneapi-common-vars (>= 2023.0.0-25325), intel-oneapi-common-licensing-2023.0.0
|
||||||
|
|
||||||
|
def split_dependencies : map(try(.dependencies |= split(",\\s?"; "")) // .dependencies |= []) ;
|
||||||
|
|
||||||
|
def match_version : capture("(?<pname>[a-zA-Z0-9_\\-.]*) *(\\((?<kind>[<>=]*) *(?<version>.*)\\))?"; "") ;
|
||||||
|
|
||||||
|
def parse_dependencies : map_values(.dependencies.[] |= match_version) ;
|
||||||
|
|
||||||
|
def sort_version_decreasing : sort_by(.version | split("[-.]"; "") | map(tonumber)) | reverse ;
|
||||||
|
|
||||||
|
map(extract_fields) | split_dependencies | parse_dependencies | sort_version_decreasing
|
||||||
|
|
||||||
|
# [.[] | select(.pname == "intel-hpckit") | .version]
|
||||||
29
pkgs/intel-oneapi/deb/toJson.awk
Executable file
29
pkgs/intel-oneapi/deb/toJson.awk
Executable file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/usr/bin/env -S awk -f
|
||||||
|
|
||||||
|
BEGIN {
|
||||||
|
FS=": "
|
||||||
|
|
||||||
|
prev_empty=1
|
||||||
|
t=" "
|
||||||
|
|
||||||
|
print "[ {"
|
||||||
|
}
|
||||||
|
|
||||||
|
!NF { # empty line, update separator so next non empty line closes the dict
|
||||||
|
prev_empty=1
|
||||||
|
t="},\n{ "
|
||||||
|
next # skip line (we won't match anything else)
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
printf t "\"%s\" : \"%s\"\n", $1, $2
|
||||||
|
|
||||||
|
if (prev_empty) {
|
||||||
|
# we were the first after a group of empty lines, following ones have to
|
||||||
|
# have a comma
|
||||||
|
prev_empty=0
|
||||||
|
t=", "
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
END { print "} ]" }
|
||||||
11
pkgs/intel-oneapi/deb/update.sh
Executable file
11
pkgs/intel-oneapi/deb/update.sh
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
out_64=$(mktemp intel-api.64.XXXXXX)
|
||||||
|
out_all=$(mktemp intel-api.all.XXXXXX)
|
||||||
|
trap 'rm -f "$out_64" "$out_all"' EXIT INT HUP
|
||||||
|
|
||||||
|
curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-amd64/Packages -o "$out_64"
|
||||||
|
curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-all/Packages -o "$out_all"
|
||||||
|
|
||||||
|
# NOTE: we use `jq -r tostring` to minify the json (3.2Mb -> 2.3Mb)
|
||||||
|
cat "$out_64" "$out_all" | ./toJson.awk | ./process.jq | jq -r tostring >packages.json
|
||||||
246
pkgs/intel-oneapi/open/default.nix
Normal file
246
pkgs/intel-oneapi/open/default.nix
Normal file
@@ -0,0 +1,246 @@
|
|||||||
|
{
|
||||||
|
stdenv,
|
||||||
|
lib,
|
||||||
|
ninja,
|
||||||
|
autoAddDriverRunpath,
|
||||||
|
wrapCC,
|
||||||
|
cmake,
|
||||||
|
emhash,
|
||||||
|
fetchFromGitHub,
|
||||||
|
khronos-ocl-icd-loader,
|
||||||
|
libbacktrace,
|
||||||
|
opencl-headers,
|
||||||
|
parallel-hashmap,
|
||||||
|
perl,
|
||||||
|
pkg-config,
|
||||||
|
python3,
|
||||||
|
spirv-headers,
|
||||||
|
spirv-tools,
|
||||||
|
symlinkJoin,
|
||||||
|
zlib,
|
||||||
|
|
||||||
|
config,
|
||||||
|
|
||||||
|
cudaPackages ? null,
|
||||||
|
enableCuda ? config.cudaSupport,
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
llvmMajorVersion = "21";
|
||||||
|
version = "6.2.1";
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "intel";
|
||||||
|
repo = "llvm";
|
||||||
|
tag = "v${version}";
|
||||||
|
sha256 = "sha256-j8+DmGKO0qDF5JjH+DlkLKs1kBz6dS7ukwySd/Crqv0=";
|
||||||
|
};
|
||||||
|
|
||||||
|
pinned = {
|
||||||
|
inherit parallel-hashmap;
|
||||||
|
|
||||||
|
vc-intrinsics.src = fetchFromGitHub {
|
||||||
|
owner = "intel";
|
||||||
|
repo = "vc-intrinsics";
|
||||||
|
rev = "4e51b2467104a257c22788e343dafbdde72e28bb";
|
||||||
|
sha256 = "sha256-AHXeKbih4bzmcuu+tx2TeS7Ixmk54uS1vKFVxI6ZP8g=";
|
||||||
|
};
|
||||||
|
|
||||||
|
unified-memory-framework.src = fetchFromGitHub {
|
||||||
|
owner = "oneapi-src";
|
||||||
|
repo = "unified-memory-framework";
|
||||||
|
tag = "v0.11.0";
|
||||||
|
sha256 = "sha256-k8QdP2u1QOoeCZ6ps4sM8+1iZq/H3q0lqCfVk8mz9KI=";
|
||||||
|
};
|
||||||
|
|
||||||
|
ocl-headers = opencl-headers.overrideAttrs {
|
||||||
|
version = "2024.10.24";
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "KhronosGroup";
|
||||||
|
repo = "OpenCL-Headers";
|
||||||
|
tag = "v2024.10.24";
|
||||||
|
sha256 = "sha256-KDlruE0IG8d+lAChxYyc6dg5XOvqCMrMyO69sdAzejA=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
ocl-icd = khronos-ocl-icd-loader;
|
||||||
|
|
||||||
|
spirv-headers = spirv-headers.overrideAttrs {
|
||||||
|
version = "1.4.309.0";
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "KhronosGroup";
|
||||||
|
repo = "SPIRV-Headers";
|
||||||
|
tag = "vulkan-sdk-1.4.309.0";
|
||||||
|
sha256 = "sha256-Q1i6i5XimULuGufP6mimwDW674anAETUiIEvDQwvg5Y=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fetchcontent_cmakeFlags = lib.mapAttrsToList (
|
||||||
|
name: value: (lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_${lib.toUpper name}" (toString value.src))
|
||||||
|
) pinned;
|
||||||
|
|
||||||
|
# Hack to fix #include <emhash/...>
|
||||||
|
emhash' = symlinkJoin {
|
||||||
|
name = "emhash";
|
||||||
|
paths = [ emhash ];
|
||||||
|
postBuild = ''
|
||||||
|
pushd $out/include
|
||||||
|
ln -s . emhash
|
||||||
|
popd
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
pname = "intel-llvm";
|
||||||
|
inherit src version;
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
strictDeps = true;
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
perl
|
||||||
|
cmake
|
||||||
|
ninja
|
||||||
|
pkg-config
|
||||||
|
python3
|
||||||
|
spirv-tools
|
||||||
|
]
|
||||||
|
++ lib.optionals enableCuda [
|
||||||
|
autoAddDriverRunpath
|
||||||
|
cudaPackages.cuda_nvcc
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
emhash'
|
||||||
|
libbacktrace
|
||||||
|
zlib
|
||||||
|
|
||||||
|
pinned.ocl-icd
|
||||||
|
pinned.ocl-headers
|
||||||
|
pinned.spirv-headers
|
||||||
|
]
|
||||||
|
++ lib.optionals enableCuda [
|
||||||
|
cudaPackages.cudatoolkit
|
||||||
|
];
|
||||||
|
|
||||||
|
patches = [ ./fix-ur.patch ]; # Has been fixed in next release
|
||||||
|
|
||||||
|
preBuild = ''
|
||||||
|
chmod -R u+w /build/source
|
||||||
|
'';
|
||||||
|
|
||||||
|
cmakeDir = "../llvm";
|
||||||
|
|
||||||
|
cmakeFlags =
|
||||||
|
let
|
||||||
|
cmakeList = name: l: lib.cmakeOptionType "list" name (builtins.concatStringsSep ";" l);
|
||||||
|
|
||||||
|
LLVM_EXTERNAL_PROJECTS = [
|
||||||
|
"sycl"
|
||||||
|
"llvm-spirv"
|
||||||
|
"opencl"
|
||||||
|
"xpti"
|
||||||
|
"xptifw"
|
||||||
|
"compiler-rt"
|
||||||
|
"sycl-jit"
|
||||||
|
"libdevice"
|
||||||
|
]
|
||||||
|
++ lib.optionals enableCuda [
|
||||||
|
"libclc"
|
||||||
|
];
|
||||||
|
in
|
||||||
|
[
|
||||||
|
(lib.cmakeBool "LLVM_ENABLE_ASSERTIONS" true)
|
||||||
|
|
||||||
|
(cmakeList "LLVM_TARGETS_TO_BUILD" (
|
||||||
|
[
|
||||||
|
"host"
|
||||||
|
"SPIRV"
|
||||||
|
]
|
||||||
|
++ lib.optionals enableCuda [ "NVPTX" ]
|
||||||
|
))
|
||||||
|
(cmakeList "LLVM_EXTERNAL_PROJECTS" LLVM_EXTERNAL_PROJECTS)
|
||||||
|
(cmakeList "LLVM_ENABLE_PROJECTS" ([ "clang" ] ++ LLVM_EXTERNAL_PROJECTS))
|
||||||
|
|
||||||
|
(lib.cmakeBool "UR_USE_EXTERNAL_UMF" false)
|
||||||
|
(lib.cmakeOptionType "path" "UR_OPENCL_INCLUDE_DIR" (toString pinned.ocl-headers))
|
||||||
|
(lib.cmakeOptionType "path" "UR_OPENCL_ICD_LOADER_LIBRARY" (toString pinned.ocl-icd))
|
||||||
|
(lib.cmakeFeature "UR_OPENCL_ICD_LOADER_LIBRARY" (toString pinned.ocl-icd))
|
||||||
|
|
||||||
|
(lib.cmakeBool "BUILD_SHARED_LIBS" false)
|
||||||
|
(lib.cmakeBool "LLVM_BUILD_TOOLS" true)
|
||||||
|
(lib.cmakeBool "LLVM_ENABLE_ZSTD" true)
|
||||||
|
(lib.cmakeBool "LLVM_USE_STATIC_ZSTD" true)
|
||||||
|
(lib.cmakeBool "LLVM_ENABLE_DOXYGEN" false)
|
||||||
|
(lib.cmakeBool "LLVM_ENABLE_LLD" false)
|
||||||
|
(lib.cmakeBool "LLVM_ENABLE_SPHINX" false)
|
||||||
|
(lib.cmakeBool "LLVM_SPIRV_ENABLE_LIBSPIRV_DIS" false)
|
||||||
|
(lib.cmakeBool "SYCL_ENABLE_WERROR" false)
|
||||||
|
(lib.cmakeBool "SYCL_INCLUDE_TESTS" false)
|
||||||
|
(lib.cmakeBool "SYCL_ENABLE_EXTENSION_JIT" true)
|
||||||
|
(lib.cmakeBool "SYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB" false)
|
||||||
|
(lib.cmakeBool "SYCL_ENABLE_XPTI_TRACING" true)
|
||||||
|
(lib.cmakeBool "XPTI_ENABLE_WERROR" false)
|
||||||
|
|
||||||
|
(cmakeList "SYCL_ENABLE_BACKENDS" ([ "opencl" ] ++ lib.optionals enableCuda [ "cuda" ]))
|
||||||
|
]
|
||||||
|
++ fetchcontent_cmakeFlags
|
||||||
|
++ lib.optionals enableCuda [
|
||||||
|
(lib.cmakeOptionType "list" "LIBCLC_TARGETS_TO_BUILD" "nvptx64--nvidiacl")
|
||||||
|
(lib.cmakeBool "LIBCLC_GENERATE_REMANGLED_VARIANTS" true)
|
||||||
|
(lib.cmakeBool "LIBCLC_NATIVECPU_HOST_TARGET" false)
|
||||||
|
];
|
||||||
|
|
||||||
|
hardeningDisable = [ "zerocallusedregs" ];
|
||||||
|
|
||||||
|
postPatch =
|
||||||
|
|
||||||
|
let
|
||||||
|
# See the postPatch phase for details on why this is used
|
||||||
|
ccWrapperStub = wrapCC (
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
name = "ccWrapperStub";
|
||||||
|
dontUnpack = true;
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/bin
|
||||||
|
cat > $out/bin/clang-${llvmMajorVersion} <<'EOF'
|
||||||
|
#!/bin/sh
|
||||||
|
exec "$NIX_BUILD_TOP/source/build/bin/clang-${llvmMajorVersion}" "$@"
|
||||||
|
EOF
|
||||||
|
chmod +x $out/bin/clang-${llvmMajorVersion}
|
||||||
|
cp $out/bin/clang-${llvmMajorVersion} $out/bin/clang
|
||||||
|
cp $out/bin/clang-${llvmMajorVersion} $out/bin/clang++
|
||||||
|
'';
|
||||||
|
passthru.isClang = true;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
in
|
||||||
|
''
|
||||||
|
# Parts of libdevice are built using the freshly-built compiler.
|
||||||
|
# As it tries to link to system libraries, we need to wrap it with the
|
||||||
|
# usual nix cc-wrapper.
|
||||||
|
# Since the compiler to be wrapped is not available at this point,
|
||||||
|
# we use a stub that points to where it will be later on
|
||||||
|
# in `$NIX_BUILD_TOP/source/build/bin/clang-${llvmMajorVersion}`
|
||||||
|
substituteInPlace libdevice/cmake/modules/SYCLLibdevice.cmake \
|
||||||
|
--replace-fail "\''${clang_exe}" "${ccWrapperStub}/bin/clang++"
|
||||||
|
'';
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
inherit llvmMajorVersion;
|
||||||
|
inherit enableCuda cudaPackages;
|
||||||
|
};
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
homepage = "https://github.com/intel/llvm";
|
||||||
|
description = "Intel staging area for llvm.org contribution";
|
||||||
|
maintainers = with lib.maintainers.bsc; [ abonerib ];
|
||||||
|
platforms = lib.platforms.linux;
|
||||||
|
license = [
|
||||||
|
lib.licenses.asl20
|
||||||
|
lib.licenses.llvm-exception
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
23
pkgs/intel-oneapi/open/fix-ur.patch
Normal file
23
pkgs/intel-oneapi/open/fix-ur.patch
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
diff --git a/unified-runtime/source/adapters/cuda/CMakeLists.txt b/unified-runtime/source/adapters/cuda/CMakeLists.txt
|
||||||
|
index a8401c71a..2ab363926 100644
|
||||||
|
--- a/unified-runtime/source/adapters/cuda/CMakeLists.txt
|
||||||
|
+++ b/unified-runtime/source/adapters/cuda/CMakeLists.txt
|
||||||
|
@@ -62,14 +62,14 @@ add_library(cudadrv SHARED IMPORTED GLOBAL)
|
||||||
|
if (WIN32)
|
||||||
|
set_target_properties(
|
||||||
|
cudadrv PROPERTIES
|
||||||
|
- IMPORTED_IMPLIB ${CUDA_cuda_driver_LIBRARY}
|
||||||
|
- INTERFACE_INCLUDE_DIRECTORIES ${CUDAToolkit_INCLUDE_DIRS}
|
||||||
|
+ IMPORTED_IMPLIB "${CUDA_cuda_driver_LIBRARY}"
|
||||||
|
+ INTERFACE_INCLUDE_DIRECTORIES "${CUDAToolkit_INCLUDE_DIRS}"
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
set_target_properties(
|
||||||
|
cudadrv PROPERTIES
|
||||||
|
- IMPORTED_LOCATION ${CUDA_cuda_driver_LIBRARY}
|
||||||
|
- INTERFACE_INCLUDE_DIRECTORIES ${CUDAToolkit_INCLUDE_DIRS}
|
||||||
|
+ IMPORTED_LOCATION "${CUDA_cuda_driver_LIBRARY}"
|
||||||
|
+ INTERFACE_INCLUDE_DIRECTORIES "${CUDAToolkit_INCLUDE_DIRS}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-amd64/Packages -o amd64-packages
|
|
||||||
curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-all/Packages -o all-packages
|
|
||||||
@@ -16,19 +16,19 @@
|
|||||||
, useGit ? false
|
, useGit ? false
|
||||||
, gitUrl ? "ssh://git@bscpm04.bsc.es/llvm-ompss/llvm-mono.git"
|
, gitUrl ? "ssh://git@bscpm04.bsc.es/llvm-ompss/llvm-mono.git"
|
||||||
, gitBranch ? "master"
|
, gitBranch ? "master"
|
||||||
, gitCommit ? "880e2341c56bad1dc14e8c369fb3356bec19018e"
|
, gitCommit ? "872ba63f86edaefc9787984ef3fae9f2f94e0124" # github-release-2025.11
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
stdenv = llvmPackages_latest.stdenv;
|
stdenv = llvmPackages_latest.stdenv;
|
||||||
|
|
||||||
release = rec {
|
release = rec {
|
||||||
version = "2025.06";
|
version = "2025.11";
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "bsc-pm";
|
owner = "bsc-pm";
|
||||||
repo = "llvm";
|
repo = "llvm";
|
||||||
rev = "refs/tags/github-release-${version}";
|
rev = "refs/tags/github-release-${version}";
|
||||||
hash = "sha256-ww9PpRmtz/M9IyLiZ8rAehx2UW4VpQt+svf4XfKBzKo=";
|
hash = "sha256-UgwMTUkM9Z87dDH205swZFBeFhrcbLAxginViG40pBM=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
, lib
|
, lib
|
||||||
, gcc
|
, gcc
|
||||||
, clangOmpss2Unwrapped
|
, clangOmpss2Unwrapped
|
||||||
|
, writeShellScript
|
||||||
, openmp ? null
|
, openmp ? null
|
||||||
, wrapCCWith
|
, wrapCCWith
|
||||||
, llvmPackages_latest
|
, llvmPackages_latest
|
||||||
@@ -27,20 +28,17 @@ let
|
|||||||
# We need to replace the lld linker from bintools with our linker just built,
|
# We need to replace the lld linker from bintools with our linker just built,
|
||||||
# otherwise we run into incompatibility issues when mixing compiler and linker
|
# otherwise we run into incompatibility issues when mixing compiler and linker
|
||||||
# versions.
|
# versions.
|
||||||
bintools-unwrapped = llvmPackages_latest.tools.bintools-unwrapped.override {
|
bintools-unwrapped = llvmPackages_latest.bintools-unwrapped.override {
|
||||||
lld = clangOmpss2Unwrapped;
|
lld = clangOmpss2Unwrapped;
|
||||||
};
|
};
|
||||||
bintools = llvmPackages_latest.tools.bintools.override {
|
bintools = llvmPackages_latest.bintools.override {
|
||||||
bintools = bintools-unwrapped;
|
bintools = bintools-unwrapped;
|
||||||
};
|
};
|
||||||
targetConfig = stdenv.targetPlatform.config;
|
targetConfig = stdenv.targetPlatform.config;
|
||||||
inherit gcc;
|
inherit gcc;
|
||||||
cc = clangOmpss2Unwrapped;
|
cc = clangOmpss2Unwrapped;
|
||||||
gccVersion = with versions; let v = gcc.version; in concatStringsSep "." [(major v) (minor v) (patch v)];
|
gccVersion = with versions; let v = gcc.version; in concatStringsSep "." [(major v) (minor v) (patch v)];
|
||||||
in wrapCCWith {
|
|
||||||
inherit cc bintools;
|
|
||||||
# extraPackages adds packages to depsTargetTargetPropagated
|
|
||||||
extraPackages = optional (openmp != null) openmp;
|
|
||||||
extraBuildCommands = ''
|
extraBuildCommands = ''
|
||||||
echo "-target ${targetConfig}" >> $out/nix-support/cc-cflags
|
echo "-target ${targetConfig}" >> $out/nix-support/cc-cflags
|
||||||
echo "-B${gcc.cc}/lib/gcc/${targetConfig}/${gccVersion}" >> $out/nix-support/cc-cflags
|
echo "-B${gcc.cc}/lib/gcc/${targetConfig}/${gccVersion}" >> $out/nix-support/cc-cflags
|
||||||
@@ -57,14 +55,50 @@ in wrapCCWith {
|
|||||||
echo "--gcc-toolchain=${gcc}" >> $out/nix-support/cc-cflags
|
echo "--gcc-toolchain=${gcc}" >> $out/nix-support/cc-cflags
|
||||||
|
|
||||||
wrap clang++ $wrapper $ccPath/clang++
|
wrap clang++ $wrapper $ccPath/clang++
|
||||||
|
|
||||||
'' + optionalString (openmp != null) ''
|
|
||||||
echo "export OPENMP_RUNTIME=${ompname}" >> $out/nix-support/cc-wrapper-hook
|
|
||||||
'' + optionalString (ompss2rt != null) ''
|
|
||||||
echo "export OMPSS2_RUNTIME=${rtname}" >> $out/nix-support/cc-wrapper-hook
|
|
||||||
echo "export ${homevar}=${ompss2rt}" >> $out/nix-support/cc-wrapper-hook
|
|
||||||
'' + optionalString (ompss2rt != null && ompss2rt.pname == "nodes") ''
|
|
||||||
echo "export NOSV_HOME=${ompss2rt.nosv}" >> $out/nix-support/cc-wrapper-hook
|
|
||||||
'';
|
'';
|
||||||
}
|
|
||||||
|
|
||||||
|
envExports = lib.optionalString (openmp != null) ''
|
||||||
|
echo "export OPENMP_RUNTIME=${ompname}" >> $out/nix-support/cc-wrapper-hook
|
||||||
|
'' + optionalString (ompss2rt != null) ''
|
||||||
|
echo "export OMPSS2_RUNTIME=${rtname}" >> $out/nix-support/cc-wrapper-hook
|
||||||
|
echo "export ${homevar}=${ompss2rt}" >> $out/nix-support/cc-wrapper-hook
|
||||||
|
'' + optionalString (ompss2rt != null && ompss2rt.pname == "nodes") ''
|
||||||
|
echo "export NOSV_HOME=${ompss2rt.nosv}" >> $out/nix-support/cc-wrapper-hook
|
||||||
|
'';
|
||||||
|
|
||||||
|
extraPackages = optional (openmp != null) openmp;
|
||||||
|
|
||||||
|
wrappedCC = wrapCCWith {
|
||||||
|
# extraPackages adds packages to depsTargetTargetPropagated
|
||||||
|
inherit cc bintools extraPackages;
|
||||||
|
extraBuildCommands = extraBuildCommands + envExports;
|
||||||
|
};
|
||||||
|
|
||||||
|
resetIntelCCFlags = let tconf = builtins.replaceStrings ["-"] ["_"] targetConfig;
|
||||||
|
in writeShellScript "remove-intel.sh" ''
|
||||||
|
if [ "''${NIX_CC_WRAPPER_INTEL:-0}" = 1 ]; then
|
||||||
|
unset NIX_CFLAGS_COMPILE_${tconf}
|
||||||
|
unset NIX_CC_WRAPPER_FLAGS_SET_${tconf}
|
||||||
|
|
||||||
|
if (( "''${NIX_DEBUG:-0}" >= 1 )); then
|
||||||
|
echo "ompss2: cleaned NIX_CFLAGS_COMPILE_${tconf} (invokation from intel compiler detected)"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
|
intelExtraBuildCommands = ''
|
||||||
|
sed -i 's|# Flirting.*|source ${resetIntelCCFlags}\n\n&|' $out/bin/clang
|
||||||
|
sed -i 's|# Flirting.*|source ${resetIntelCCFlags}\n\n&|' $out/bin/clang++
|
||||||
|
'';
|
||||||
|
|
||||||
|
wrappedCCIntel = wrapCCWith {
|
||||||
|
inherit cc bintools extraPackages;
|
||||||
|
# extraPackages adds packages to depsTargetTargetPropagated
|
||||||
|
extraBuildCommands = intelExtraBuildCommands + envExports;
|
||||||
|
};
|
||||||
|
|
||||||
|
in wrappedCC.overrideAttrs (oldAttrs: {
|
||||||
|
passthru = oldAttrs.passthru // {
|
||||||
|
forIcpx = wrappedCCIntel;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ stdenv.mkDerivation rec {
|
|||||||
];
|
];
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
|
broken = true;
|
||||||
homepage = "https://github.com/bsc-pm/mcxx";
|
homepage = "https://github.com/bsc-pm/mcxx";
|
||||||
description = "C/C++/Fortran source-to-source compilation infrastructure aimed at fast prototyping";
|
description = "C/C++/Fortran source-to-source compilation infrastructure aimed at fast prototyping";
|
||||||
maintainers = with lib.maintainers.bsc; [ rpenacob ];
|
maintainers = with lib.maintainers.bsc; [ rpenacob ];
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
{ python3Packages, lib }:
|
{ python3Packages, lib }:
|
||||||
|
|
||||||
python3Packages.buildPythonApplication rec {
|
python3Packages.buildPythonApplication {
|
||||||
pname = "meteocat-exporter";
|
pname = "meteocat-exporter";
|
||||||
version = "1.0";
|
version = "1.0";
|
||||||
|
|
||||||
|
pyproject = true;
|
||||||
|
|
||||||
src = ./.;
|
src = ./.;
|
||||||
|
|
||||||
doCheck = false;
|
doCheck = false;
|
||||||
|
|||||||
@@ -6,6 +6,13 @@
|
|||||||
, pmix
|
, pmix
|
||||||
, gfortran
|
, gfortran
|
||||||
, symlinkJoin
|
, symlinkJoin
|
||||||
|
# Disabled when cross-compiling
|
||||||
|
# To fix cross compilation, we should fill the values in:
|
||||||
|
# https://github.com/pmodels/mpich/blob/main/maint/fcrosscompile/cross_values.txt.in
|
||||||
|
# For each arch
|
||||||
|
, enableFortran ? stdenv.hostPlatform == stdenv.buildPlatform
|
||||||
|
, perl
|
||||||
|
, targetPackages
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
@@ -15,10 +22,13 @@ let
|
|||||||
paths = [ pmix.dev pmix.out ];
|
paths = [ pmix.dev pmix.out ];
|
||||||
};
|
};
|
||||||
in mpich.overrideAttrs (old: {
|
in mpich.overrideAttrs (old: {
|
||||||
buildInput = old.buildInputs ++ [
|
buildInputs = old.buildInputs ++ [
|
||||||
libfabric
|
libfabric
|
||||||
pmixAll
|
pmixAll
|
||||||
];
|
];
|
||||||
|
nativeBuildInputs = old.nativeBuildInputs ++ [
|
||||||
|
perl
|
||||||
|
];
|
||||||
configureFlags = [
|
configureFlags = [
|
||||||
"--enable-shared"
|
"--enable-shared"
|
||||||
"--enable-sharedlib"
|
"--enable-sharedlib"
|
||||||
@@ -31,10 +41,21 @@ in mpich.overrideAttrs (old: {
|
|||||||
] ++ lib.optionals (lib.versionAtLeast gfortran.version "10") [
|
] ++ lib.optionals (lib.versionAtLeast gfortran.version "10") [
|
||||||
"FFLAGS=-fallow-argument-mismatch" # https://github.com/pmodels/mpich/issues/4300
|
"FFLAGS=-fallow-argument-mismatch" # https://github.com/pmodels/mpich/issues/4300
|
||||||
"FCFLAGS=-fallow-argument-mismatch"
|
"FCFLAGS=-fallow-argument-mismatch"
|
||||||
|
] ++ lib.optionals (!enableFortran) [
|
||||||
|
"--disable-fortran"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
preFixup = ''
|
||||||
|
sed -i 's:^CC=.*:CC=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc:' $out/bin/mpicc
|
||||||
|
sed -i 's:^CXX=.*:CXX=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}c++:' $out/bin/mpicxx
|
||||||
|
'' + lib.optionalString enableFortran ''
|
||||||
|
sed -i 's:^FC=.*:FC=${targetPackages.gfortran or gfortran}/bin/${targetPackages.gfortran.targetPrefix or gfortran.targetPrefix}gfortran:' $out/bin/mpifort
|
||||||
|
'';
|
||||||
|
|
||||||
hardeningDisable = [ "all" ];
|
hardeningDisable = [ "all" ];
|
||||||
|
|
||||||
meta = old.meta // {
|
meta = old.meta // {
|
||||||
maintainers = old.meta.maintainers ++ (with lib.maintainers.bsc; [ rarias ]);
|
maintainers = old.meta.maintainers ++ (with lib.maintainers.bsc; [ rarias ]);
|
||||||
|
cross = true;
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ jemalloc.overrideAttrs (old: {
|
|||||||
"--with-jemalloc-prefix=nanos6_je_"
|
"--with-jemalloc-prefix=nanos6_je_"
|
||||||
"--enable-stats"
|
"--enable-stats"
|
||||||
];
|
];
|
||||||
|
enableParallelBuilding = true;
|
||||||
hardeningDisable = [ "all" ];
|
hardeningDisable = [ "all" ];
|
||||||
meta = old.meta // {
|
meta = old.meta // {
|
||||||
description = old.meta.description + " (for Nanos6)";
|
description = old.meta.description + " (for Nanos6)";
|
||||||
|
|||||||
650
pkgs/nix-portable/default.nix
Normal file
650
pkgs/nix-portable/default.nix
Normal file
@@ -0,0 +1,650 @@
|
|||||||
|
with builtins;
|
||||||
|
{
|
||||||
|
nix,
|
||||||
|
unzip,
|
||||||
|
zip,
|
||||||
|
unixtools,
|
||||||
|
stdenv,
|
||||||
|
buildPackages,
|
||||||
|
upx,
|
||||||
|
|
||||||
|
bootstrapPrograms ? [
|
||||||
|
"gitMinimal"
|
||||||
|
"netcat-openbsd"
|
||||||
|
"openssh"
|
||||||
|
"bashInteractive"
|
||||||
|
],
|
||||||
|
|
||||||
|
cacert ? pkgs.cacert,
|
||||||
|
compression ? "zstd -19 -T0",
|
||||||
|
lib ? pkgs.lib,
|
||||||
|
pkgs ? import <nixpkgs> {},
|
||||||
|
# hardcode executable to run. Useful when creating a bundle.
|
||||||
|
bundledPackage ? null,
|
||||||
|
|
||||||
|
nixStatic,
|
||||||
|
busyboxStatic ? pkgs.pkgsStatic.busybox,
|
||||||
|
bwrapStatic ? pkgs.pkgsStatic.bubblewrap,
|
||||||
|
zstdStatic ? pkgs.pkgsStatic.zstd,
|
||||||
|
|
||||||
|
perlBuildBuild ? pkgs.pkgsBuildBuild.perl,
|
||||||
|
}@inp:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
|
||||||
|
perl = perlBuildBuild;
|
||||||
|
|
||||||
|
pname =
|
||||||
|
if bundledPackage == null
|
||||||
|
then "nix-portable"
|
||||||
|
else lib.getName bundledPackage;
|
||||||
|
|
||||||
|
bundledExe = lib.getExe bundledPackage;
|
||||||
|
|
||||||
|
nixpkgsSrc = pkgs.path;
|
||||||
|
|
||||||
|
maketar = targets:
|
||||||
|
let
|
||||||
|
closureInfo = buildPackages.closureInfo { rootPaths = targets; };
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
name = "nix-portable-store-tarball";
|
||||||
|
nativeBuildInputs = [ perl zstd ];
|
||||||
|
exportReferencesGraph = map (x: [("closure-" + baseNameOf x) x]) targets;
|
||||||
|
buildCommand = ''
|
||||||
|
storePaths=$(cat ${closureInfo}/store-paths)
|
||||||
|
mkdir $out
|
||||||
|
echo $storePaths > $out/index
|
||||||
|
cp -r ${closureInfo} $out/closureInfo
|
||||||
|
|
||||||
|
tar -cf - \
|
||||||
|
--owner=0 --group=0 --mode=u+rw,uga+r \
|
||||||
|
--hard-dereference \
|
||||||
|
$storePaths | ${compression} > $out/tar
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
packStaticBin = binPath: let
|
||||||
|
binName = (last (splitString "/" binPath)); in
|
||||||
|
pkgs.runCommand
|
||||||
|
binName
|
||||||
|
{ nativeBuildInputs = [ upx ]; }
|
||||||
|
''
|
||||||
|
mkdir -p $out/bin
|
||||||
|
theBinPath=${binPath}
|
||||||
|
|
||||||
|
if [[ -L "$theBinPath" ]]; then
|
||||||
|
theBinPath=$(readlink -f "$theBinPath")
|
||||||
|
fi
|
||||||
|
|
||||||
|
upx -9 -o $out/bin/${binName} $theBinPath
|
||||||
|
'';
|
||||||
|
|
||||||
|
installBin = pkg: bin: ''
|
||||||
|
unzip -qqoj "\$self" ${ lib.removePrefix "/" "${pkg}/bin/${bin}"} -d \$dir/bin
|
||||||
|
chmod +wx \$dir/bin/${bin};
|
||||||
|
'';
|
||||||
|
|
||||||
|
installDynamic = pkgname: let
|
||||||
|
out = pkgs.${pkgname}.out;
|
||||||
|
in ''
|
||||||
|
if [ ! -e \$store${lib.removePrefix "/nix/store" pkgs.${pkgname}.out} ] ; then
|
||||||
|
debug "Installing ${pkgname}"
|
||||||
|
\$run \$store${lib.removePrefix "/nix/store" nix}/bin/nix build --impure --no-link --expr "
|
||||||
|
(import ${nixpkgsSrc} {}).${pkgname}.out
|
||||||
|
"
|
||||||
|
else
|
||||||
|
debug "${pkgname} already installed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
export PATH="${out}/bin:\$PATH"
|
||||||
|
'';
|
||||||
|
|
||||||
|
caBundleZstd = pkgs.runCommand "cacerts" {} "cat ${cacert}/etc/ssl/certs/ca-bundle.crt | ${zstd}/bin/zstd -19 > $out";
|
||||||
|
|
||||||
|
bwrap = packStaticBin "${bwrapStatic}/bin/bwrap";
|
||||||
|
nixStatic = packStaticBin "${inp.nixStatic}/bin/nix";
|
||||||
|
zstd = packStaticBin "${zstdStatic}/bin/zstd";
|
||||||
|
|
||||||
|
# the default nix store contents to extract when first used
|
||||||
|
storeTar = maketar ([ cacert nix nixpkgsSrc ] ++ lib.optional (bundledPackage != null) bundledPackage);
|
||||||
|
|
||||||
|
|
||||||
|
# The runtime script which unpacks the necessary files to $HOME/.nix-portable
|
||||||
|
# and then executes nix via bwrap
|
||||||
|
# Some shell expressions will be evaluated at build time and some at run time.
|
||||||
|
# Variables/expressions escaped via `\$` will be evaluated at run time
|
||||||
|
runtimeScript = ''
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
start=\$(date +%s%N) # start time in nanoseconds
|
||||||
|
|
||||||
|
# dump environment on exit if debug is enabled
|
||||||
|
if [ -n "\$NP_DEBUG" ] && [ "\$NP_DEBUG" -ge 1 ]; then
|
||||||
|
trap "declare -p > \''${TMPDIR:-/tmp}/np_env" EXIT
|
||||||
|
fi
|
||||||
|
|
||||||
|
set -e
|
||||||
|
if [ -n "\$NP_DEBUG" ] && [ "\$NP_DEBUG" -ge 2 ]; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
|
||||||
|
# &3 is our error out which we either forward to &2 or to /dev/null
|
||||||
|
# depending on the setting
|
||||||
|
if [ -n "\$NP_DEBUG" ] && [ "\$NP_DEBUG" -ge 1 ]; then
|
||||||
|
debug(){
|
||||||
|
echo \$@ || true
|
||||||
|
}
|
||||||
|
exec 3>&2
|
||||||
|
else
|
||||||
|
debug(){
|
||||||
|
true
|
||||||
|
}
|
||||||
|
exec 3>/dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
# to reference this script's file
|
||||||
|
self="\$(realpath \''${BASH_SOURCE[0]})"
|
||||||
|
|
||||||
|
# fingerprint will be inserted by builder
|
||||||
|
fingerprint="_FINGERPRINT_PLACEHOLDER_"
|
||||||
|
|
||||||
|
# user specified location for program files and nix store
|
||||||
|
[ -z "\$NP_LOCATION" ] && NP_LOCATION="\$HOME"
|
||||||
|
NP_LOCATION="\$(readlink -f "\$NP_LOCATION")"
|
||||||
|
dir="\$NP_LOCATION/.nix-portable"
|
||||||
|
|
||||||
|
# Create NP_LOCATION and remove sgid bit
|
||||||
|
mkdir -p \$dir
|
||||||
|
if [ ! -z "\$BSC_MACHINE" ]; then
|
||||||
|
# Attempt to avoid issues with sgid folders
|
||||||
|
chmod g-s \$dir
|
||||||
|
chgrp bsc \$dir
|
||||||
|
fi
|
||||||
|
|
||||||
|
store="\$dir/nix/store"
|
||||||
|
# create /nix/var/nix to prevent nix from falling back to chroot store.
|
||||||
|
mkdir -p \$dir/{bin,nix/var/nix,nix/store}
|
||||||
|
|
||||||
|
# create minimal drv file for nix to spawn a nix shell
|
||||||
|
echo 'builtins.derivation {name="foo"; builder="/bin/sh"; args = ["-c" "echo hello \> \\\$out"]; system=builtins.currentSystem;}' > "\$dir/mini-drv.nix"
|
||||||
|
|
||||||
|
# the fingerprint being present inside a file indicates that
|
||||||
|
# this version of nix-portable has already been initialized
|
||||||
|
if test -e \$dir/conf/fingerprint && [ "\$(cat \$dir/conf/fingerprint)" == "\$fingerprint" ]; then
|
||||||
|
newNPVersion=false
|
||||||
|
else
|
||||||
|
newNPVersion=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Nix portable ships its own nix.conf
|
||||||
|
export NIX_CONF_DIR=\$dir/conf/
|
||||||
|
|
||||||
|
NP_CONF_SANDBOX=\''${NP_CONF_SANDBOX:-false}
|
||||||
|
NP_CONF_STORE=\''${NP_CONF_STORE:-auto}
|
||||||
|
|
||||||
|
|
||||||
|
recreate_nix_conf(){
|
||||||
|
mkdir -p "\$NIX_CONF_DIR"
|
||||||
|
rm -f "\$NIX_CONF_DIR/nix.conf"
|
||||||
|
|
||||||
|
# static config
|
||||||
|
echo "build-users-group = " >> \$dir/conf/nix.conf
|
||||||
|
echo "experimental-features = nix-command flakes" >> \$dir/conf/nix.conf
|
||||||
|
echo "ignored-acls = security.selinux system.nfs4_acl" >> \$dir/conf/nix.conf
|
||||||
|
echo "sandbox-paths = /bin/sh=\$dir/busybox/bin/busybox" >> \$dir/conf/nix.conf
|
||||||
|
echo "extra-substituters = https://jungle.bsc.es/cache">> \$dir/conf/nix.conf
|
||||||
|
echo "extra-trusted-public-keys = jungle.bsc.es:pEc7MlAT0HEwLQYPtpkPLwRsGf80ZI26aj29zMw/HH0=" >> \$dir/conf/nix.conf
|
||||||
|
|
||||||
|
echo "extra-system-features = sys-devices" >> \$dir/conf/nix.conf
|
||||||
|
echo "extra-sandbox-paths = /sys/devices/system/cpu=/sys/devices/system/cpu /sys/devices/system/node=/sys/devices/system/node" >> \$dir/conf/nix.conf
|
||||||
|
echo "extra-trusted-users = @bsc" >> \$dir/conf/nix.conf
|
||||||
|
|
||||||
|
|
||||||
|
# configurable config
|
||||||
|
echo "sandbox = \$NP_CONF_SANDBOX" >> \$dir/conf/nix.conf
|
||||||
|
echo "store = \$NP_CONF_STORE" >> \$dir/conf/nix.conf
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
### install files
|
||||||
|
|
||||||
|
PATH_OLD="\$PATH"
|
||||||
|
|
||||||
|
# as soon as busybox is unpacked, restrict PATH to busybox to ensure reproducibility of this script
|
||||||
|
# only unpack binaries if necessary
|
||||||
|
if [ "\$newNPVersion" == "false" ]; then
|
||||||
|
|
||||||
|
debug "binaries already installed"
|
||||||
|
# our busybox does not run on termux, therefore we suffix the PATH only on termux
|
||||||
|
export PATH="\''${TERMUX_VERSION:+\$PATH:}\$dir/busybox/bin"
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
debug "installing files"
|
||||||
|
|
||||||
|
mkdir -p \$dir/emptyroot
|
||||||
|
|
||||||
|
# install busybox
|
||||||
|
mkdir -p \$dir/busybox/bin
|
||||||
|
(base64 -d> "\$dir/busybox/bin/busybox" && chmod +x "\$dir/busybox/bin/busybox") << END
|
||||||
|
$(cat ${busyboxStatic}/bin/busybox | base64)
|
||||||
|
END
|
||||||
|
busyBins="${toString (attrNames (filterAttrs (d: type: type == "symlink") (readDir "${busyboxStatic}/bin")))}"
|
||||||
|
for bin in \$busyBins; do
|
||||||
|
[ ! -e "\$dir/busybox/bin/\$bin" ] && ln -s busybox "\$dir/busybox/bin/\$bin"
|
||||||
|
done
|
||||||
|
|
||||||
|
# our busybox does not run on termux, therefore we suffix the PATH only on termux
|
||||||
|
export PATH="\''${TERMUX_VERSION:+\$PATH:}\$dir/busybox/bin"
|
||||||
|
|
||||||
|
# install other binaries
|
||||||
|
${installBin zstd "zstd"}
|
||||||
|
${installBin bwrap "bwrap"}
|
||||||
|
${installBin nixStatic "nix"}
|
||||||
|
|
||||||
|
# install ssl cert bundle
|
||||||
|
unzip -poj "\$self" ${ lib.removePrefix "/" "${caBundleZstd}"} | \$dir/bin/zstd -d > \$dir/ca-bundle.crt
|
||||||
|
|
||||||
|
recreate_nix_conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Override $SHELL with nix bashInteractive
|
||||||
|
export SHELL="${pkgs.bashInteractive.out}/bin/bash"
|
||||||
|
export PS1="\n\[\033[1;32m\][\[\e]0;\u@\h: \w\a\]\u@\h:\w]\$\[\033[0m\] "
|
||||||
|
|
||||||
|
# unset bash function aliases
|
||||||
|
unset -f which ml module
|
||||||
|
|
||||||
|
### setup SSL
|
||||||
|
# find ssl certs or use from nixpkgs
|
||||||
|
debug "figuring out ssl certs"
|
||||||
|
if [ -z "\$SSL_CERT_FILE" ]; then
|
||||||
|
debug "SSL_CERT_FILE not defined. trying to find certs automatically"
|
||||||
|
if [ -e /etc/ssl/certs/ca-bundle.crt ]; then
|
||||||
|
export SSL_CERT_FILE=\$(realpath /etc/ssl/certs/ca-bundle.crt)
|
||||||
|
debug "found /etc/ssl/certs/ca-bundle.crt with real path \$SSL_CERT_FILE"
|
||||||
|
elif [ -e /etc/ssl/certs/ca-certificates.crt ]; then
|
||||||
|
export SSL_CERT_FILE=\$(realpath /etc/ssl/certs/ca-certificates.crt)
|
||||||
|
debug "found /etc/ssl/certs/ca-certificates.crt with real path \$SSL_CERT_FILE"
|
||||||
|
elif [ ! -e /etc/ssl/certs ]; then
|
||||||
|
debug "/etc/ssl/certs does not exist. Will use certs from nixpkgs."
|
||||||
|
export SSL_CERT_FILE=\$dir/ca-bundle.crt
|
||||||
|
else
|
||||||
|
debug "certs seem to reside in /etc/ssl/certs. No need to set up anything"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ -n "\$SSL_CERT_FILE" ]; then
|
||||||
|
sslBind="\$(realpath \$SSL_CERT_FILE) \$dir/ca-bundle.crt"
|
||||||
|
export SSL_CERT_FILE="\$dir/ca-bundle.crt"
|
||||||
|
else
|
||||||
|
sslBind="/etc/ssl /etc/ssl"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "\$NP_GIT" ]; then
|
||||||
|
echo "WARN: NP_GIT is not supported, using nix version instead"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
storePathOfFile(){
|
||||||
|
file=\$(realpath \$1)
|
||||||
|
sPath="\$(echo \$file | awk -F "/" 'BEGIN{OFS="/";}{print \$2,\$3,\$4}')"
|
||||||
|
echo "/\$sPath"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
collectBinds(){
|
||||||
|
pathsTopLevel="/boot /run /sys \$PWD /gpfs /tmp /scratch"
|
||||||
|
|
||||||
|
toBind=""
|
||||||
|
for p in \$pathsTopLevel; do
|
||||||
|
if [ -e "\$p" ]; then
|
||||||
|
real=\$(realpath \$p)
|
||||||
|
if [ -e "\$real" ]; then
|
||||||
|
if [[ "\$real" == /nix/store/* ]]; then
|
||||||
|
storePath=\$(storePathOfFile \$real)
|
||||||
|
toBind="\$toBind \$storePath \$storePath"
|
||||||
|
else
|
||||||
|
toBind="\$toBind \$real \$p"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: add /var/run/dbus/system_bus_socket
|
||||||
|
paths="/etc/host.conf /etc/hosts /etc/hosts.equiv /etc/mtab /etc/netgroup /etc/networks /etc/passwd /etc/group /etc/nsswitch.conf /etc/resolv.conf /etc/localtime \$HOME"
|
||||||
|
|
||||||
|
for p in \$paths; do
|
||||||
|
if [ -e "\$p" ]; then
|
||||||
|
real=\$(realpath \$p)
|
||||||
|
if [ -e "\$real" ]; then
|
||||||
|
if [[ "\$real" == /nix/store/* ]]; then
|
||||||
|
storePath=\$(storePathOfFile \$real)
|
||||||
|
toBind="\$toBind \$storePath \$storePath"
|
||||||
|
else
|
||||||
|
toBind="\$toBind \$real \$real"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# provide /bin/sh via the shipped busybox
|
||||||
|
toBind="\$toBind \$dir/busybox/bin/busybox /bin/sh"
|
||||||
|
toBind="\$toBind \$dir/busybox/bin/busybox /usr/bin/env"
|
||||||
|
|
||||||
|
# on termux, make sure termux packages still work inside the nix-portable environment
|
||||||
|
if [ -n "\$TERMUX_VERSION" ]; then
|
||||||
|
# binds required so termux native packages still run inside the nix-portable sandbox
|
||||||
|
# TODO: this doesn't quite work yet. debug and fix
|
||||||
|
toBind="\$toBind /system/lib64/libc.so /system/lib64/libc.so"
|
||||||
|
toBind="\$toBind /system/lib64/ld-android.so /system/lib64/ld-android.so"
|
||||||
|
toBind="\$toBind /system/lib64/libdl.so /system/lib64/libdl.so"
|
||||||
|
toBind="\$toBind /system/bin /system/bin"
|
||||||
|
toBind="\$toBind /system/lib64 /system/lib64"
|
||||||
|
toBind="\$toBind /apex/com.android.runtime/bin /apex/com.android.runtime/bin"
|
||||||
|
toBind="\$toBind /linkerconfig/ld.config.txt /linkerconfig/ld.config.txt"
|
||||||
|
toBind="\$toBind \$dir/ca-bundle.crt /etc/ssl/certs/ca-certificates.crt"
|
||||||
|
toBind="\$toBind \$(realpath \$HOME/../usr/etc/resolv.conf) /etc/resolv.conf"
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
makeBindArgs(){
|
||||||
|
arg=\$1; shift
|
||||||
|
sep=\$1; shift
|
||||||
|
binds=""
|
||||||
|
while :; do
|
||||||
|
if [ -n "\$1" ]; then
|
||||||
|
from="\$1"; shift
|
||||||
|
to="\$1"; shift || { echo "no bind destination provided for \$from!"; exit 3; }
|
||||||
|
binds="\$binds \$arg \$from\$sep\$to";
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### select container runtime
|
||||||
|
debug "figuring out which runtime to use"
|
||||||
|
[ -z "\$NP_BWRAP" ] && NP_BWRAP=\$dir/bin/bwrap
|
||||||
|
debug "bwrap executable: \$NP_BWRAP"
|
||||||
|
[ -z "\$NP_NIX" ] && NP_NIX=\$dir/bin/nix
|
||||||
|
debug "nix executable: \$NP_NIX"
|
||||||
|
debug "testing all available runtimes..."
|
||||||
|
if [ -z "\$NP_RUNTIME" ]; then
|
||||||
|
# read last automatic selected runtime from disk
|
||||||
|
if [ "\$newNPVersion" == "true" ]; then
|
||||||
|
debug "removing cached auto selected runtime"
|
||||||
|
rm -f "\$dir/conf/last_auto_runtime"
|
||||||
|
fi
|
||||||
|
if [ -f "\$dir/conf/last_auto_runtime" ]; then
|
||||||
|
last_auto_runtime="\$(cat "\$dir/conf/last_auto_runtime")"
|
||||||
|
else
|
||||||
|
last_auto_runtime=
|
||||||
|
fi
|
||||||
|
debug "last auto selected runtime: \$last_auto_runtime"
|
||||||
|
if [ "\$last_auto_runtime" != "" ]; then
|
||||||
|
NP_RUNTIME="\$last_auto_runtime"
|
||||||
|
# check if nix --store works
|
||||||
|
elif \\
|
||||||
|
debug "testing nix --store" \\
|
||||||
|
&& mkdir -p \$dir/tmp/ \\
|
||||||
|
&& touch \$dir/tmp/testfile \\
|
||||||
|
&& "\$NP_NIX" --store "\$dir/tmp/__store" shell -f "\$dir/mini-drv.nix" -c "\$dir/bin/nix" store add-file --store "\$dir/tmp/__store" "\$dir/tmp/testfile" >/dev/null 2>&3; then
|
||||||
|
chmod -R +w \$dir/tmp/__store
|
||||||
|
rm -r \$dir/tmp/__store
|
||||||
|
debug "nix --store works on this system -> will use nix as runtime"
|
||||||
|
NP_RUNTIME=nix
|
||||||
|
# check if bwrap works properly
|
||||||
|
elif \\
|
||||||
|
debug "nix --store failed -> testing bwrap" \\
|
||||||
|
&& \$NP_BWRAP --bind \$dir/emptyroot / --bind \$dir/ /nix --bind \$dir/busybox/bin/busybox "\$dir/true" "\$dir/true" 2>&3 ; then
|
||||||
|
debug "bwrap seems to work on this system -> will use bwrap"
|
||||||
|
NP_RUNTIME=bwrap
|
||||||
|
else
|
||||||
|
debug "bwrap doesn't work on this system -> will use proot"
|
||||||
|
NP_RUNTIME=proot
|
||||||
|
fi
|
||||||
|
echo -n "\$NP_RUNTIME" > "\$dir/conf/last_auto_runtime"
|
||||||
|
else
|
||||||
|
debug "runtime selected via NP_RUNTIME: \$NP_RUNTIME"
|
||||||
|
fi
|
||||||
|
debug "NP_RUNTIME: \$NP_RUNTIME"
|
||||||
|
if [ "\$NP_RUNTIME" == "nix" ]; then
|
||||||
|
run="\$NP_NIX shell -f \$dir/mini-drv.nix -c"
|
||||||
|
export PATH="\$PATH:\$store${lib.removePrefix "/nix/store" nix}/bin"
|
||||||
|
NP_CONF_STORE="\$dir"
|
||||||
|
recreate_nix_conf
|
||||||
|
elif [ "\$NP_RUNTIME" == "bwrap" ]; then
|
||||||
|
collectBinds
|
||||||
|
makeBindArgs --bind " " \$toBind \$sslBind
|
||||||
|
run="\$NP_BWRAP \$BWRAP_ARGS \\
|
||||||
|
--bind \$dir/emptyroot /\\
|
||||||
|
--dev-bind /dev /dev\\
|
||||||
|
--proc /proc\\
|
||||||
|
--bind \$dir/nix /nix\\
|
||||||
|
\$binds"
|
||||||
|
# --bind \$dir/busybox/bin/busybox /bin/sh\\
|
||||||
|
else
|
||||||
|
# proot
|
||||||
|
echo Unsupported runtime: $NP_RUNTIME
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
debug "base command will be: \$run"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### setup environment
|
||||||
|
export NIX_PATH="\$dir/channels:nixpkgs=\$dir/channels/nixpkgs"
|
||||||
|
mkdir -p \$dir/channels
|
||||||
|
[ -h \$dir/channels/nixpkgs ] || ln -s ${nixpkgsSrc} \$dir/channels/nixpkgs
|
||||||
|
|
||||||
|
|
||||||
|
### install nix store
|
||||||
|
# Install all the nix store paths necessary for the current nix-portable version
|
||||||
|
# We only unpack missing store paths from the tar archive.
|
||||||
|
index="$(cat ${storeTar}/index)"
|
||||||
|
|
||||||
|
export missing=\$(
|
||||||
|
for path in \$index; do
|
||||||
|
basepath=\$(basename \$path)
|
||||||
|
if [ ! -e \$store/\$basepath ]; then
|
||||||
|
echo "nix/store/\$basepath"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
)
|
||||||
|
|
||||||
|
if [ -n "\$missing" ]; then
|
||||||
|
debug "extracting missing store paths"
|
||||||
|
(
|
||||||
|
mkdir -p \$dir/tmp \$store/
|
||||||
|
rm -rf \$dir/tmp/*
|
||||||
|
cd \$dir/tmp
|
||||||
|
unzip -qqp "\$self" ${ lib.removePrefix "/" "${storeTar}/tar"} \
|
||||||
|
| \$dir/bin/zstd -d \
|
||||||
|
| tar -x \$missing --strip-components 2
|
||||||
|
mv \$dir/tmp/* \$store/
|
||||||
|
)
|
||||||
|
rm -rf \$dir/tmp
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "\$missing" ]; then
|
||||||
|
debug "registering new store paths to DB"
|
||||||
|
reg="$(cat ${storeTar}/closureInfo/registration)"
|
||||||
|
cmd="\$run \$store${lib.removePrefix "/nix/store" nix}/bin/nix-store --load-db"
|
||||||
|
debug "running command: \$cmd"
|
||||||
|
echo "\$reg" | \$cmd
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
### select executable
|
||||||
|
# the executable can either be selected by
|
||||||
|
# - executing './nix-portable BIN_NAME',
|
||||||
|
# - symlinking to nix-portable, in which case the name of the symlink selects the nix executable
|
||||||
|
# Alternatively the executable can be hardcoded by specifying the argument 'executable' of nix-portable's default.nix file.
|
||||||
|
executable="${if bundledPackage == null then "" else bundledExe}"
|
||||||
|
if [ "\$executable" != "" ]; then
|
||||||
|
bin="\$executable"
|
||||||
|
debug "executable is hardcoded to: \$bin"
|
||||||
|
|
||||||
|
elif [[ "\$(basename \$0)" == nix-portable* ]]; then\
|
||||||
|
if [ -z "\$1" ]; then
|
||||||
|
echo "Error: please specify the nix binary to execute"
|
||||||
|
echo "Alternatively symlink against \$0"
|
||||||
|
exit 1
|
||||||
|
elif [ "\$1" == "debug" ]; then
|
||||||
|
bin="\$(which \$2)"
|
||||||
|
shift; shift
|
||||||
|
else
|
||||||
|
bin="\$store${lib.removePrefix "/nix/store" nix}/bin/\$1"
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
# for binary selection via symlink
|
||||||
|
else
|
||||||
|
bin="\$store${lib.removePrefix "/nix/store" nix}/bin/\$(basename \$0)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### check which runtime has been used previously
|
||||||
|
if [ -f "\$dir/conf/last_runtime" ]; then
|
||||||
|
lastRuntime=\$(cat "\$dir/conf/last_runtime")
|
||||||
|
else
|
||||||
|
lastRuntime=
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### check if nix is functional with or without sandbox
|
||||||
|
# sandbox-fallback is not reliable: https://github.com/NixOS/nix/issues/4719
|
||||||
|
if [ "\$newNPVersion" == "true" ] || [ "\$lastRuntime" != "\$NP_RUNTIME" ]; then
|
||||||
|
nixBin="\$(dirname \$bin)/nix"
|
||||||
|
debug "Testing if nix can build stuff without sandbox"
|
||||||
|
if ! \$run "\$nixBin" build --no-link -f "\$dir/mini-drv.nix" --option sandbox false >&3 2>&3; then
|
||||||
|
echo "Fatal error: nix is unable to build packages"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
debug "Testing if nix sandbox is functional"
|
||||||
|
if ! \$run "\$nixBin" build --no-link -f "\$dir/mini-drv.nix" --option sandbox true >&3 2>&3; then
|
||||||
|
debug "Sandbox doesn't work -> disabling sandbox"
|
||||||
|
NP_CONF_SANDBOX=false
|
||||||
|
recreate_nix_conf
|
||||||
|
else
|
||||||
|
debug "Sandboxed builds work -> enabling sandbox"
|
||||||
|
NP_CONF_SANDBOX=true
|
||||||
|
recreate_nix_conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
### save fingerprint and lastRuntime
|
||||||
|
if [ "\$newNPVersion" == "true" ]; then
|
||||||
|
echo -n "\$fingerprint" > "\$dir/conf/fingerprint"
|
||||||
|
fi
|
||||||
|
if [ "\$lastRuntime" != \$NP_RUNTIME ]; then
|
||||||
|
echo -n \$NP_RUNTIME > "\$dir/conf/last_runtime"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### set PATH
|
||||||
|
export PATH="\$dir/busybox/bin"
|
||||||
|
export PATH="\$PATH:\$store${lib.removePrefix "/nix/store" nix}/bin"
|
||||||
|
|
||||||
|
### install programs via nix
|
||||||
|
${concatMapStringsSep "\n" installDynamic bootstrapPrograms}
|
||||||
|
|
||||||
|
### print elapsed time
|
||||||
|
end=\$(date +%s%N) # end time in nanoseconds
|
||||||
|
# time elapsed in millis with two decimal places
|
||||||
|
|
||||||
|
# print stats about initialization time of nix-portable
|
||||||
|
# skipt for termux, as it doesn't have bc installed
|
||||||
|
if [ -z "\$TERMUX_VERSION" ]; then
|
||||||
|
elapsed=\$(echo "scale=2; (\$end - \$start)/1000000" | bc)
|
||||||
|
debug "Time to initialize nix-portable: \$elapsed millis"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
### run commands
|
||||||
|
[ -z "\$NP_RUN" ] && NP_RUN="\$run"
|
||||||
|
if [ "\$NP_RUNTIME" == "proot" ]; then
|
||||||
|
debug "running command: \$NP_RUN \$bin \$@"
|
||||||
|
exec \$NP_RUN \$bin "\$@"
|
||||||
|
else
|
||||||
|
cmd="\$NP_RUN \$bin \$@"
|
||||||
|
debug "running command: \$cmd"
|
||||||
|
exec \$NP_RUN \$bin "\$@"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
'';
|
||||||
|
|
||||||
|
runtimeScriptEscaped = replaceStrings ["\""] ["\\\""] runtimeScript;
|
||||||
|
|
||||||
|
nixPortable = pkgs.runCommand pname {
|
||||||
|
nativeBuildInputs = [unixtools.xxd unzip];
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
homepage = "https://github.com/DavHau/nix-portable";
|
||||||
|
description = "Nix - Static, Permissionless, Installation-free, Pre-configured for mn5";
|
||||||
|
maintainers = with lib.maintainers.bsc; [ abonerib ];
|
||||||
|
platforms = lib.platforms.linux;
|
||||||
|
license = lib.licenses.mit;
|
||||||
|
};
|
||||||
|
} ''
|
||||||
|
mkdir -p $out/bin
|
||||||
|
echo "${runtimeScriptEscaped}" > $out/bin/nix-portable.zip
|
||||||
|
xxd $out/bin/nix-portable.zip | tail
|
||||||
|
|
||||||
|
sizeA=$(printf "%08x" `stat -c "%s" $out/bin/nix-portable.zip` | tac -rs ..)
|
||||||
|
echo 504b 0304 0000 0000 0000 0000 0000 0000 | xxd -r -p >> $out/bin/nix-portable.zip
|
||||||
|
echo 0000 0000 0000 0000 0000 0200 0000 4242 | xxd -r -p >> $out/bin/nix-portable.zip
|
||||||
|
|
||||||
|
sizeB=$(printf "%08x" `stat -c "%s" $out/bin/nix-portable.zip` | tac -rs ..)
|
||||||
|
echo 504b 0102 0000 0000 0000 0000 0000 0000 | xxd -r -p >> $out/bin/nix-portable.zip
|
||||||
|
echo 0000 0000 0000 0000 0000 0000 0200 0000 | xxd -r -p >> $out/bin/nix-portable.zip
|
||||||
|
echo 0000 0000 0000 0000 0000 $sizeA 4242 | xxd -r -p >> $out/bin/nix-portable.zip
|
||||||
|
|
||||||
|
echo 504b 0506 0000 0000 0000 0100 3000 0000 | xxd -r -p >> $out/bin/nix-portable.zip
|
||||||
|
echo $sizeB 0000 0000 0000 0000 0000 0000 | xxd -r -p >> $out/bin/nix-portable.zip
|
||||||
|
|
||||||
|
unzip -vl $out/bin/nix-portable.zip
|
||||||
|
|
||||||
|
zip="${zip}/bin/zip -0"
|
||||||
|
$zip $out/bin/nix-portable.zip ${bwrap}/bin/bwrap
|
||||||
|
$zip $out/bin/nix-portable.zip ${nixStatic}/bin/nix
|
||||||
|
$zip $out/bin/nix-portable.zip ${zstd}/bin/zstd
|
||||||
|
$zip $out/bin/nix-portable.zip ${storeTar}/tar
|
||||||
|
$zip $out/bin/nix-portable.zip ${caBundleZstd}
|
||||||
|
|
||||||
|
# create fingerprint
|
||||||
|
fp=$(sha256sum $out/bin/nix-portable.zip | cut -d " " -f 1)
|
||||||
|
sed -i "s/_FINGERPRINT_PLACEHOLDER_/$fp/g" $out/bin/nix-portable.zip
|
||||||
|
# fix broken zip header due to manual modification
|
||||||
|
${zip}/bin/zip -F $out/bin/nix-portable.zip --out $out/bin/nix-portable-fixed.zip
|
||||||
|
|
||||||
|
rm $out/bin/nix-portable.zip
|
||||||
|
executable=${if bundledPackage == null then "" else bundledExe}
|
||||||
|
if [ "$executable" == "" ]; then
|
||||||
|
target="$out/bin/nix-portable"
|
||||||
|
else
|
||||||
|
target="$out/bin/$(basename "$executable")"
|
||||||
|
fi
|
||||||
|
mv $out/bin/nix-portable-fixed.zip "$target"
|
||||||
|
chmod +x "$target"
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
nixPortable.overrideAttrs (prev: {
|
||||||
|
passthru = (prev.passthru or {}) // {
|
||||||
|
inherit bwrap;
|
||||||
|
};
|
||||||
|
})
|
||||||
@@ -14,7 +14,7 @@ let
|
|||||||
nixConfDir = "share";
|
nixConfDir = "share";
|
||||||
nix_wrap_sh = writeText "nix-wrap.sh" ''
|
nix_wrap_sh = writeText "nix-wrap.sh" ''
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#
|
|
||||||
busybox_bin="${nixPrefix}${busybox}/bin"
|
busybox_bin="${nixPrefix}${busybox}/bin"
|
||||||
bubblewrap_bin="${nixPrefix}/${bubblewrap}/bin"
|
bubblewrap_bin="${nixPrefix}/${bubblewrap}/bin"
|
||||||
|
|
||||||
@@ -69,7 +69,6 @@ stdenv.mkDerivation rec {
|
|||||||
name = "nix-wrap";
|
name = "nix-wrap";
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
bashInteractive
|
bashInteractive
|
||||||
busybox
|
|
||||||
nix
|
nix
|
||||||
];
|
];
|
||||||
src = null;
|
src = null;
|
||||||
@@ -92,7 +91,6 @@ stdenv.mkDerivation rec {
|
|||||||
homepage = null;
|
homepage = null;
|
||||||
description = "nix bubblewrap wrapper";
|
description = "nix bubblewrap wrapper";
|
||||||
maintainers = [ ];
|
maintainers = [ ];
|
||||||
broken = true;
|
|
||||||
platforms = lib.platforms.linux;
|
platforms = lib.platforms.linux;
|
||||||
license = lib.licenses.mit;
|
license = lib.licenses.mit;
|
||||||
};
|
};
|
||||||
|
|||||||
22
pkgs/nixgen/default.nix
Normal file
22
pkgs/nixgen/default.nix
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
stdenv
|
||||||
|
, lib
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
pname = "nixgen";
|
||||||
|
version = "0.0.1";
|
||||||
|
src = ./nixgen;
|
||||||
|
dontUnpack = true;
|
||||||
|
phases = [ "installPhase" ];
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/bin
|
||||||
|
cp -a $src $out/bin/nixgen
|
||||||
|
'';
|
||||||
|
meta = {
|
||||||
|
description = "Quickly generate flake.nix from command line";
|
||||||
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
|
platforms = lib.platforms.linux;
|
||||||
|
license = lib.licenses.gpl3Plus;
|
||||||
|
};
|
||||||
|
}
|
||||||
97
pkgs/nixgen/nixgen
Executable file
97
pkgs/nixgen/nixgen
Executable file
@@ -0,0 +1,97 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2025, Barcelona Supercomputing Center (BSC)
|
||||||
|
# SPDX-License-Identifier: GPL-3.0+
|
||||||
|
# Author: Rodrigo Arias Mallo <rodrigo.arias@bsc.es>
|
||||||
|
|
||||||
|
function usage() {
|
||||||
|
echo "USAGE: nixgen [-f] [package [...]] [-b package [...]]" >&2
|
||||||
|
echo " Generates a flake.nix file with the given packages." >&2
|
||||||
|
echo " After flake.nix is created, use 'nix develop' to enter the shell." >&2
|
||||||
|
echo "OPTIONS" >&2
|
||||||
|
echo " -f Overwrite existing flake.nix (default: no)." >&2
|
||||||
|
echo " packages... Add these packages to the shell." >&2
|
||||||
|
echo " -b packages... Add the dependencies needed to build these packages." >&2
|
||||||
|
echo "EXAMPLE" >&2
|
||||||
|
echo " $ nixgen ovni bigotes -b nosv tampi" >&2
|
||||||
|
echo " Adds the packages ovni and bigotes as well as all required dependencies" >&2
|
||||||
|
echo " to build nosv and tampi." >&2
|
||||||
|
echo "AUTHOR" >&2
|
||||||
|
echo " Rodrigo Arias Mallo <rodrigo.arias@bsc.es>" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
mode=package
|
||||||
|
packages=
|
||||||
|
inputsFrom=
|
||||||
|
force=
|
||||||
|
|
||||||
|
if [[ $# -eq 0 ]]; then
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in -b)
|
||||||
|
mode=build
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-f)
|
||||||
|
force=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-h)
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
-*|--*)
|
||||||
|
echo "error: unknown option $1" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if [ "$mode" == "package" ]; then
|
||||||
|
packages+="${packages:+ }$1"
|
||||||
|
else
|
||||||
|
inputsFrom+="${inputsFrom:+ }$1"
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ ! "$force" -a -e flake.nix ]; then
|
||||||
|
echo "error: flake.nix exists, force overwrite with -f" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat > flake.nix <<EOF
|
||||||
|
{
|
||||||
|
inputs.jungle.url = "git+https://jungle.bsc.es/git/rarias/jungle";
|
||||||
|
outputs = { self, jungle }:
|
||||||
|
let
|
||||||
|
nixpkgs = jungle.inputs.nixpkgs;
|
||||||
|
customOverlay = (final: prev: {
|
||||||
|
# Example overlay, for now empty
|
||||||
|
});
|
||||||
|
pkgs = import nixpkgs {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
overlays = [
|
||||||
|
# Apply jungle overlay to get our BSC custom packages
|
||||||
|
jungle.outputs.bscOverlay
|
||||||
|
# And on top apply our local changes to customize for cluster
|
||||||
|
customOverlay
|
||||||
|
];
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
devShells.x86_64-linux.default = pkgs.mkShell {
|
||||||
|
pname = "devshell";
|
||||||
|
# Include these packages in the shell
|
||||||
|
packages = with pkgs; [
|
||||||
|
$packages
|
||||||
|
];
|
||||||
|
# The dependencies needed to build these packages will be also included
|
||||||
|
inputsFrom = with pkgs; [
|
||||||
|
$inputsFrom
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
EOF
|
||||||
@@ -3,7 +3,6 @@
|
|||||||
, lib
|
, lib
|
||||||
, fetchFromGitHub
|
, fetchFromGitHub
|
||||||
, pkg-config
|
, pkg-config
|
||||||
, perl
|
|
||||||
, numactl
|
, numactl
|
||||||
, hwloc
|
, hwloc
|
||||||
, boost
|
, boost
|
||||||
@@ -11,22 +10,23 @@
|
|||||||
, ovni
|
, ovni
|
||||||
, nosv
|
, nosv
|
||||||
, clangOmpss2
|
, clangOmpss2
|
||||||
|
, which
|
||||||
, useGit ? false
|
, useGit ? false
|
||||||
, gitUrl ? "ssh://git@gitlab-internal.bsc.es/nos-v/nodes.git"
|
, gitUrl ? "ssh://git@gitlab-internal.bsc.es/nos-v/nodes.git"
|
||||||
, gitBranch ? "master"
|
, gitBranch ? "master"
|
||||||
, gitCommit ? "6002ec9ae6eb876d962cc34366952a3b26599ba6"
|
, gitCommit ? "511489e71504a44381e0930562e7ac80ac69a848" # version-1.4
|
||||||
}:
|
}:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
let
|
let
|
||||||
release = rec {
|
release = rec {
|
||||||
version = "1.3";
|
version = "1.4";
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "bsc-pm";
|
owner = "bsc-pm";
|
||||||
repo = "nodes";
|
repo = "nodes";
|
||||||
rev = "version-${version}";
|
rev = "version-${version}";
|
||||||
hash = "sha256-cFb9pxcjtkMmH0CsGgUO9LTdXDNh7MCqicgGWawLrsU=";
|
hash = "sha256-+lR/R0l3fGZO3XG7whMorFW2y2YZ0ZFnLeOHyQYrAsQ=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -59,6 +59,7 @@ in
|
|||||||
doCheck = false;
|
doCheck = false;
|
||||||
nativeCheckInputs = [
|
nativeCheckInputs = [
|
||||||
clangOmpss2
|
clangOmpss2
|
||||||
|
which
|
||||||
];
|
];
|
||||||
|
|
||||||
# The "bindnow" flags are incompatible with ifunc resolution mechanism. We
|
# The "bindnow" flags are incompatible with ifunc resolution mechanism. We
|
||||||
|
|||||||
@@ -13,19 +13,19 @@
|
|||||||
, useGit ? false
|
, useGit ? false
|
||||||
, gitUrl ? "git@gitlab-internal.bsc.es:nos-v/nos-v.git"
|
, gitUrl ? "git@gitlab-internal.bsc.es:nos-v/nos-v.git"
|
||||||
, gitBranch ? "master"
|
, gitBranch ? "master"
|
||||||
, gitCommit ? "9f47063873c3aa9d6a47482a82c5000a8c813dd8"
|
, gitCommit ? "1108e4786b58e0feb9a16fa093010b763eb2f8e8" # version 4.0.0
|
||||||
}:
|
}:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
let
|
let
|
||||||
release = rec {
|
release = rec {
|
||||||
version = "3.2.0";
|
version = "4.0.0";
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "bsc-pm";
|
owner = "bsc-pm";
|
||||||
repo = "nos-v";
|
repo = "nos-v";
|
||||||
rev = "${version}";
|
rev = "${version}";
|
||||||
hash = "sha256-yaz92426EM8trdkBJlISmAoG9KJCDTvoAW/HKrasvOw=";
|
hash = "sha256-llaq73bd/YxLVKNlMebnUHKa4z3sdcsuDUoVwUxNuw8=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
91
pkgs/onemath/default.nix
Normal file
91
pkgs/onemath/default.nix
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
fetchFromGitHub,
|
||||||
|
cmake,
|
||||||
|
withCFlags,
|
||||||
|
intelPackages,
|
||||||
|
|
||||||
|
mklSupport ? true,
|
||||||
|
|
||||||
|
config,
|
||||||
|
|
||||||
|
cudaSupport ? config.cudaSupport,
|
||||||
|
cudaPackages ? { },
|
||||||
|
|
||||||
|
rocmSupport ? config.rocmSupport,
|
||||||
|
hipTargets ? null, # only one target at a time supported
|
||||||
|
rocmPackages ? { },
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
# rocmSupport is not enough, we need a specific target
|
||||||
|
enableHip = rocmSupport && hipTargets != null;
|
||||||
|
|
||||||
|
stdenv = withCFlags (lib.optionals cudaSupport [
|
||||||
|
"--cuda-path=${cudaPackages.cudatoolkit}"
|
||||||
|
]) intelPackages.stdenv;
|
||||||
|
in
|
||||||
|
|
||||||
|
# at least one backend has to be enabled
|
||||||
|
assert mklSupport || cudaSupport || enableHip;
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "oneMath";
|
||||||
|
version = "0.9";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "uxlfoundation";
|
||||||
|
repo = "oneMath";
|
||||||
|
rev = "v${version}";
|
||||||
|
sha256 = "sha256-jVcrpne6OyOeUlQHg07zZXEyFXvEGCYW88sWnYgEeu8=";
|
||||||
|
};
|
||||||
|
|
||||||
|
cmakeFlags = [
|
||||||
|
(lib.cmakeBool "ENABLE_MKLCPU_BACKEND" mklSupport)
|
||||||
|
(lib.cmakeBool "ENABLE_MKLGPU_BACKEND" mklSupport)
|
||||||
|
|
||||||
|
(lib.cmakeBool "ENABLE_CUBLAS_BACKEND" cudaSupport)
|
||||||
|
(lib.cmakeBool "ENABLE_CUFFT_BACKEND" cudaSupport)
|
||||||
|
(lib.cmakeBool "ENABLE_CURAND_BACKEND" cudaSupport)
|
||||||
|
(lib.cmakeBool "ENABLE_CUSOLVER_BACKEND" cudaSupport)
|
||||||
|
(lib.cmakeBool "ENABLE_CUSPARSE_BACKEND" cudaSupport)
|
||||||
|
|
||||||
|
(lib.cmakeBool "ENABLE_ROCBLAS_BACKEND" enableHip)
|
||||||
|
(lib.cmakeBool "ENABLE_ROCFFT_BACKEND" enableHip)
|
||||||
|
(lib.cmakeBool "ENABLE_ROCSOLVER_BACKEND" enableHip)
|
||||||
|
(lib.cmakeBool "ENABLE_ROCRAND_BACKEND" enableHip)
|
||||||
|
(lib.cmakeBool "ENABLE_ROCSPARSE_BACKEND" enableHip)
|
||||||
|
|
||||||
|
(lib.cmakeBool "BUILD_FUNCTIONAL_TESTS" false)
|
||||||
|
(lib.cmakeBool "BUILD_EXAMPLES" false)
|
||||||
|
]
|
||||||
|
++ lib.optionals enableHip [
|
||||||
|
(lib.cmakeFeature "HIP_TARGETS" hipTargets)
|
||||||
|
];
|
||||||
|
|
||||||
|
nativeBuildInputs = [ cmake ];
|
||||||
|
buildInputs =
|
||||||
|
lib.optionals (mklSupport) [
|
||||||
|
intelPackages.mkl
|
||||||
|
intelPackages.tbb
|
||||||
|
]
|
||||||
|
++ lib.optionals (enableHip) [
|
||||||
|
rocmPackages.rocmPath
|
||||||
|
rocmPackages.rocblas
|
||||||
|
rocmPackages.rocfft
|
||||||
|
rocmPackages.rocsolver
|
||||||
|
rocmPackages.rocrand
|
||||||
|
rocmPackages.rocsparse
|
||||||
|
]
|
||||||
|
++ lib.optionals (cudaSupport) [
|
||||||
|
(lib.getDev cudaPackages.cuda_cudart)
|
||||||
|
cudaPackages.cudatoolkit
|
||||||
|
|
||||||
|
cudaPackages.libcublas
|
||||||
|
cudaPackages.libcurand
|
||||||
|
cudaPackages.libcufft
|
||||||
|
cudaPackages.libcusparse
|
||||||
|
cudaPackages.libcusolver
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
@@ -32,6 +32,11 @@ stdenv.mkDerivation rec {
|
|||||||
"CXX=mpicxx"
|
"CXX=mpicxx"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
env = {
|
||||||
|
MPICH_CC="${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc";
|
||||||
|
MPICH_CXX="${stdenv.cc}/bin/${stdenv.cc.targetPrefix}c++";
|
||||||
|
};
|
||||||
|
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
mkdir -p $out/bin
|
mkdir -p $out/bin
|
||||||
for f in $(find $out -executable -type f); do
|
for f in $(find $out -executable -type f); do
|
||||||
@@ -44,5 +49,6 @@ stdenv.mkDerivation rec {
|
|||||||
homepage = "http://mvapich.cse.ohio-state.edu/benchmarks/";
|
homepage = "http://mvapich.cse.ohio-state.edu/benchmarks/";
|
||||||
maintainers = [ ];
|
maintainers = [ ];
|
||||||
platforms = lib.platforms.all;
|
platforms = lib.platforms.all;
|
||||||
|
cross = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
, useGit ? false
|
, useGit ? false
|
||||||
, gitBranch ? "master"
|
, gitBranch ? "master"
|
||||||
, gitUrl ? "ssh://git@bscpm04.bsc.es/rarias/ovni.git"
|
, gitUrl ? "ssh://git@bscpm04.bsc.es/rarias/ovni.git"
|
||||||
, gitCommit ? "e4f62382076f0cf0b1d08175cf57cc0bc51abc61"
|
, gitCommit ? "06432668f346c8bdc1006fabc23e94ccb81b0d8b" # version 1.13.0
|
||||||
, enableDebug ? false
|
, enableDebug ? false
|
||||||
# Only enable MPI if the build is native (fails on cross-compilation)
|
# Only enable MPI if the build is native (fails on cross-compilation)
|
||||||
, useMpi ? (stdenv.buildPlatform.canExecute stdenv.hostPlatform)
|
, useMpi ? (stdenv.buildPlatform.canExecute stdenv.hostPlatform)
|
||||||
@@ -15,13 +15,13 @@
|
|||||||
|
|
||||||
let
|
let
|
||||||
release = rec {
|
release = rec {
|
||||||
version = "1.12.0";
|
version = "1.13.0";
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "bsc-pm";
|
owner = "bsc-pm";
|
||||||
repo = "ovni";
|
repo = "ovni";
|
||||||
rev = "${version}";
|
rev = "${version}";
|
||||||
hash = "sha256-H04JvsVKrdqr3ON7JhU0g17jjlg/jzQ7eTfx9vUNd3E=";
|
hash = "sha256-0l2ryIyWNiZqeYdVlnj/WnQGS3xFCY4ICG8JedX424w=";
|
||||||
} // { shortRev = "a73afcf"; };
|
} // { shortRev = "0643266"; };
|
||||||
};
|
};
|
||||||
|
|
||||||
git = rec {
|
git = rec {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
, paraverKernel
|
, paraverKernel
|
||||||
, openssl
|
, openssl
|
||||||
, glibcLocales
|
, glibcLocales
|
||||||
, wrapGAppsHook
|
, wrapGAppsHook3
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
@@ -64,7 +64,7 @@ stdenv.mkDerivation rec {
|
|||||||
autoconf
|
autoconf
|
||||||
automake
|
automake
|
||||||
autoreconfHook
|
autoreconfHook
|
||||||
wrapGAppsHook
|
wrapGAppsHook3
|
||||||
];
|
];
|
||||||
|
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
|
|||||||
26
pkgs/pocl/0001-cmake-do-not-use-suffix.patch
Normal file
26
pkgs/pocl/0001-cmake-do-not-use-suffix.patch
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
From ccf301659caac9b5e973ba1f2d32352acf617a98 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Aleix=20Bon=C3=A9?= <aleix.boneribo@bsc.es>
|
||||||
|
Date: Tue, 2 Jul 2024 16:45:05 +0200
|
||||||
|
Subject: [PATCH] cmake: do not use suffix
|
||||||
|
|
||||||
|
---
|
||||||
|
cmake/LLVM.cmake | 3 ++
|
||||||
|
1 files changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/cmake/LLVM.cmake b/cmake/LLVM.cmake
|
||||||
|
index f4dbda065..e29144dce 100644
|
||||||
|
--- a/cmake/LLVM.cmake
|
||||||
|
+++ b/cmake/LLVM.cmake
|
||||||
|
@@ -65,6 +65,9 @@ else()
|
||||||
|
message(WARNING "Cannot determine llvm binary suffix from ${LLVM_CONFIG}")
|
||||||
|
endif()
|
||||||
|
message(STATUS "LLVM binaries suffix : ${LLVM_BINARY_SUFFIX}")
|
||||||
|
+
|
||||||
|
+ # We don't want suffixes in nix
|
||||||
|
+ set(LLVM_BINARY_SUFFIX "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
get_filename_component(LLVM_CONFIG_LOCATION "${LLVM_CONFIG}" DIRECTORY)
|
||||||
|
--
|
||||||
|
2.45.1
|
||||||
|
|
||||||
33
pkgs/pocl/0001-cmake-native-build-tools.patch
Normal file
33
pkgs/pocl/0001-cmake-native-build-tools.patch
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
From f24b456c50f587b05cc8f2699c94d8cdefc5b13e Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Aleix=20Bon=C3=A9?= <aleix.boneribo@bsc.es>
|
||||||
|
Date: Tue, 2 Jul 2024 17:11:11 +0200
|
||||||
|
Subject: [PATCH] cmake: native build tools
|
||||||
|
|
||||||
|
---
|
||||||
|
cmake/LLVM.cmake | 7 +-
|
||||||
|
1 files changed, 6 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/cmake/LLVM.cmake b/cmake/LLVM.cmake
|
||||||
|
index e29144dce..b9f14ce6a 100644
|
||||||
|
--- a/cmake/LLVM.cmake
|
||||||
|
+++ b/cmake/LLVM.cmake
|
||||||
|
@@ -269,10 +269,15 @@ endforeach()
|
||||||
|
|
||||||
|
####################################################################
|
||||||
|
|
||||||
|
+if(DEFINED LLVM_NATIVE_TOOL_DIR)
|
||||||
|
+ set(TOOL_DIR "${LLVM_NATIVE_TOOL_DIR}")
|
||||||
|
+ message(STATUS "TOOL_DIR=${TOOL_DIR}")
|
||||||
|
+endif()
|
||||||
|
+
|
||||||
|
macro(find_program_or_die OUTPUT_VAR PROG_NAME DOCSTRING)
|
||||||
|
find_program(${OUTPUT_VAR}
|
||||||
|
NAMES "${PROG_NAME}${LLVM_BINARY_SUFFIX}${CMAKE_EXECUTABLE_SUFFIX}"
|
||||||
|
- HINTS "${LLVM_BINDIR}" "${LLVM_CONFIG_LOCATION}"
|
||||||
|
+ HINTS "${TOOL_DIR}" "${LLVM_BINDIR}" "${LLVM_CONFIG_LOCATION}"
|
||||||
|
DOC "${DOCSTRING}"
|
||||||
|
NO_CMAKE_PATH
|
||||||
|
NO_CMAKE_ENVIRONMENT_PATH
|
||||||
|
--
|
||||||
|
2.45.1
|
||||||
|
|
||||||
48
pkgs/pocl/0001-cmake-use-clang-from-cmake-variable.patch
Normal file
48
pkgs/pocl/0001-cmake-use-clang-from-cmake-variable.patch
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
From 4688b5ce895761c884ae15fc0234ed8d623b988b Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Aleix=20Bon=C3=A9?= <aleix.boneribo@bsc.es>
|
||||||
|
Date: Tue, 2 Jul 2024 15:41:47 +0200
|
||||||
|
Subject: [PATCH] cmake: use clang from cmake variable
|
||||||
|
|
||||||
|
---
|
||||||
|
cmake/LLVM.cmake | 22 ++++++++++++++++++++--
|
||||||
|
1 file changed, 20 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/cmake/LLVM.cmake b/cmake/LLVM.cmake
|
||||||
|
index 71b786dc7..f4dbda065 100644
|
||||||
|
--- a/cmake/LLVM.cmake
|
||||||
|
+++ b/cmake/LLVM.cmake
|
||||||
|
@@ -281,11 +281,29 @@ macro(find_program_or_die OUTPUT_VAR PROG_NAME DOCSTRING)
|
||||||
|
endif()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
-find_program_or_die( CLANG "clang" "clang binary")
|
||||||
|
+# -DCMAKE_C_COMPILER=riscv64-unknown-linux-gnu-clang -DCMAKE_CXX_COMPILER=riscv64-unknown-linux-gnu-clang++
|
||||||
|
+
|
||||||
|
+# if(DEFINED CLANG_EXECUTABLE)
|
||||||
|
+if(DEFINED CMAKE_C_COMPILER)
|
||||||
|
+ # set(CLANG "${CLANG_EXECUTABLE}")
|
||||||
|
+ set(CLANG "${CMAKE_C_COMPILER}")
|
||||||
|
+ message(STATUS "Using CLANG_EXECUTABLE: ${CLANG}")
|
||||||
|
+else()
|
||||||
|
+ find_program_or_die( CLANG "clang" "clang binary")
|
||||||
|
+endif()
|
||||||
|
execute_process(COMMAND "${CLANG}" "--version" OUTPUT_VARIABLE LLVM_CLANG_VERSION RESULT_VARIABLE CLANG_RES)
|
||||||
|
+
|
||||||
|
# TODO this should be optional
|
||||||
|
-find_program_or_die( CLANGXX "clang++" "clang++ binary")
|
||||||
|
+# if(DEFINED CLANGXX_EXECUTABLE)
|
||||||
|
+if(DEFINED CMAKE_CXX_COMPILER)
|
||||||
|
+ # set(CLANGXX "${CLANGXX_EXECUTABLE}")
|
||||||
|
+ set(CLANGXX "${CMAKE_CXX_COMPILER}")
|
||||||
|
+ message(STATUS "Using CLANGXX_EXECUTABLE: ${CLANGXX}")
|
||||||
|
+else()
|
||||||
|
+ find_program_or_die( CLANGXX "clang++" "clang++ binary")
|
||||||
|
+endif()
|
||||||
|
execute_process(COMMAND "${CLANGXX}" "--version" OUTPUT_VARIABLE LLVM_CLANGXX_VERSION RESULT_VARIABLE CLANGXX_RES)
|
||||||
|
+
|
||||||
|
if(CLANGXX_RES OR CLANG_RES)
|
||||||
|
message(FATAL_ERROR "Failed running clang/clang++ --version")
|
||||||
|
endif()
|
||||||
|
--
|
||||||
|
2.45.1
|
||||||
|
|
||||||
255
pkgs/pocl/default.nix
Normal file
255
pkgs/pocl/default.nix
Normal file
@@ -0,0 +1,255 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
llvmPackages,
|
||||||
|
ninja,
|
||||||
|
cmake,
|
||||||
|
hwloc,
|
||||||
|
ocl-icd,
|
||||||
|
opencl-headers,
|
||||||
|
getconf,
|
||||||
|
pkg-config,
|
||||||
|
spirv-llvm-translator,
|
||||||
|
spirv-tools,
|
||||||
|
libxml2, # required for statically linked llvm
|
||||||
|
python3,
|
||||||
|
writableTmpDirAsHomeHook,
|
||||||
|
writeText,
|
||||||
|
runCommand,
|
||||||
|
opencl-cts,
|
||||||
|
|
||||||
|
fetchFromGitHub,
|
||||||
|
|
||||||
|
useGit ? false,
|
||||||
|
gitUrl ? "git@gitlab-internal.bsc.es:task-awareness/pocl/pocl.git",
|
||||||
|
gitBranch ? "feat/nosv",
|
||||||
|
gitCommit ? "556542309fc3c5900cf05dae5b41d200cd3de6a0",
|
||||||
|
|
||||||
|
staticLLVM ? true,
|
||||||
|
enableICD ? true,
|
||||||
|
enableSPIRV ? true,
|
||||||
|
enableHWLOC ? true,
|
||||||
|
enableRemoteServer ? false,
|
||||||
|
enableRemoteClient ? false,
|
||||||
|
enableDistroVariants ? false,
|
||||||
|
|
||||||
|
lttng-ust,
|
||||||
|
enableLTTNG ? false,
|
||||||
|
|
||||||
|
onetbb,
|
||||||
|
enableTBB ? false,
|
||||||
|
|
||||||
|
nosv ? null,
|
||||||
|
ovni ? null,
|
||||||
|
enableNOSV ? useGit,
|
||||||
|
enableOVNI ? useGit,
|
||||||
|
|
||||||
|
buildPackages,
|
||||||
|
targetPackages,
|
||||||
|
nix-update-script,
|
||||||
|
}:
|
||||||
|
|
||||||
|
assert (enableNOSV || enableOVNI) -> useGit;
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
release = rec {
|
||||||
|
version = "7.1";
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "pocl";
|
||||||
|
repo = "pocl";
|
||||||
|
tag = "v${version}";
|
||||||
|
hash = "sha256-bS6vTIjLO7YLs7qYLKW0cYYbEJ/hRS/+IjjAKbkj8ac=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
git = rec {
|
||||||
|
version = src.shortRev;
|
||||||
|
src = builtins.fetchGit {
|
||||||
|
url = gitUrl;
|
||||||
|
ref = gitBranch;
|
||||||
|
rev = gitCommit;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
source = if (useGit) then git else release;
|
||||||
|
|
||||||
|
stdenv = llvmPackages.stdenv;
|
||||||
|
|
||||||
|
buildLlvmPackages = buildPackages.llvmPackages;
|
||||||
|
|
||||||
|
isCross = stdenv.hostPlatform != stdenv.buildPlatform;
|
||||||
|
|
||||||
|
featureList = lib.concatStringsSep "+" (
|
||||||
|
(lib.optionals enableICD [ "icd" ])
|
||||||
|
++ (lib.optionals enableNOSV [ "nosv" ])
|
||||||
|
++ (lib.optionals enableOVNI [ "ovni" ])
|
||||||
|
++ (lib.optionals enableSPIRV [ "spirv" ])
|
||||||
|
++ (lib.optionals enableTBB [ "tbb" ])
|
||||||
|
++ (lib.optionals enableRemoteClient [ "server" ])
|
||||||
|
++ (lib.optionals enableRemoteServer [ "client" ])
|
||||||
|
);
|
||||||
|
in
|
||||||
|
|
||||||
|
stdenv.mkDerivation (finalAttrs: {
|
||||||
|
pname = "pocl";
|
||||||
|
version = featureList + "-" + source.version;
|
||||||
|
inherit (source) src;
|
||||||
|
|
||||||
|
patches = lib.optionals useGit [
|
||||||
|
./0001-cmake-use-clang-from-cmake-variable.patch
|
||||||
|
./0001-cmake-do-not-use-suffix.patch
|
||||||
|
./0001-cmake-native-build-tools.patch
|
||||||
|
];
|
||||||
|
|
||||||
|
cmakeFlags = [
|
||||||
|
# TODO: all these are broken when cross compiling. Upstream has refactored
|
||||||
|
# all the cmake infra for cross compilation, but it's not in a release yet
|
||||||
|
(lib.cmakeOptionType "filepath" "WITH_LLVM_CONFIG" (
|
||||||
|
lib.getExe' buildLlvmPackages.llvm.dev "llvm-config"
|
||||||
|
))
|
||||||
|
(lib.cmakeOptionType "filepath" "CLANG" (lib.getExe' buildLlvmPackages.clangUseLLVM "clang"))
|
||||||
|
(lib.cmakeOptionType "filepath" "CLANGXX" (lib.getExe' buildLlvmPackages.clangUseLLVM "clang++"))
|
||||||
|
(lib.cmakeOptionType "path" "CLANG_RESOURCE_DIR" "${llvmPackages.stdenv.cc}/resource-root")
|
||||||
|
|
||||||
|
(lib.cmakeBool "ENABLE_TESTS" finalAttrs.finalPackage.doCheck)
|
||||||
|
|
||||||
|
(lib.cmakeBool "ENABLE_RELOCATION" true)
|
||||||
|
(lib.cmakeBool "ENABLE_POCL_BUILDING" true)
|
||||||
|
(lib.cmakeBool "POCL_ICD_ABSOLUTE_PATH" true)
|
||||||
|
|
||||||
|
(lib.cmakeBool "ENABLE_TBB_DEVICE" enableTBB)
|
||||||
|
(lib.cmakeBool "ENABLE_ICD" enableICD)
|
||||||
|
(lib.cmakeBool "ENABLE_HWLOC" enableHWLOC)
|
||||||
|
(lib.cmakeBool "ENABLE_LTTNG" enableLTTNG)
|
||||||
|
|
||||||
|
(lib.cmakeBool "ENABLE_REMOTE_CLIENT" enableRemoteClient)
|
||||||
|
(lib.cmakeBool "ENABLE_REMOTE_SERVER" enableRemoteServer)
|
||||||
|
|
||||||
|
# avoid the runtime linker pulling in a different llvm e.g. from graphics drivers
|
||||||
|
(lib.cmakeBool "STATIC_LLVM" staticLLVM)
|
||||||
|
]
|
||||||
|
++ lib.optionals (enableNOSV || enableOVNI) [
|
||||||
|
(lib.cmakeBool "ENABLE_NOSV" enableNOSV)
|
||||||
|
(lib.cmakeBool "ENABLE_OVNI" enableOVNI)
|
||||||
|
]
|
||||||
|
++ lib.optionals (!isCross && enableDistroVariants) [
|
||||||
|
(lib.cmakeFeature "KERNELLIB_HOST_CPU_VARIANTS" "distro") # TODO: check if we can do it when cross compiling
|
||||||
|
]
|
||||||
|
++ lib.optionals isCross [
|
||||||
|
(lib.cmakeFeature "CMAKE_SYSTEM_NAME" "Linux")
|
||||||
|
(lib.cmakeFeature "CMAKE_FIND_ROOT_PATH_MODE_PROGRAM" "NEVER")
|
||||||
|
(lib.cmakeFeature "CMAKE_FIND_ROOT_PATH_MODE_LIBRARY" "ONLY")
|
||||||
|
(lib.cmakeFeature "CMAKE_FIND_ROOT_PATH_MODE_INCLUDE" "ONLY")
|
||||||
|
(lib.cmakeFeature "CMAKE_FIND_ROOT_PATH_MODE_PACKAGE" "ONLY")
|
||||||
|
]
|
||||||
|
++ lib.optionals stdenv.hostPlatform.isRiscV [
|
||||||
|
(lib.cmakeFeature "LLC_TRIPLE" "riscv64-unknown-linux-gnu")
|
||||||
|
(lib.cmakeFeature "LLC_HOST_CPU" "rv64g")
|
||||||
|
(lib.cmakeFeature "CLANG_MARCH_FLAG" "-march=")
|
||||||
|
];
|
||||||
|
|
||||||
|
# Fixes error: ld: cannot find -lgcc / -lgcc_s when linking from libpocl on
|
||||||
|
# host
|
||||||
|
preConfigure = ''
|
||||||
|
cmakeFlagsArray+=(
|
||||||
|
-DEXTRA_HOST_LD_FLAGS="${lib.escapeShellArg (builtins.readFile "${targetPackages.stdenv.cc}/nix-support/cc-ldflags")}"
|
||||||
|
-DEXTRA_KERNEL_FLAGS="${lib.escapeShellArg (builtins.readFile "${targetPackages.stdenv.cc}/nix-support/cc-ldflags")}"
|
||||||
|
)
|
||||||
|
'';
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
cmake
|
||||||
|
getconf
|
||||||
|
ninja
|
||||||
|
pkg-config
|
||||||
|
python3
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
opencl-headers
|
||||||
|
llvmPackages.libclang
|
||||||
|
llvmPackages.llvm
|
||||||
|
]
|
||||||
|
++ lib.optionals staticLLVM [ libxml2 ]
|
||||||
|
++ lib.optionals enableNOSV [ nosv ]
|
||||||
|
++ lib.optionals enableOVNI [ ovni ]
|
||||||
|
++ lib.optionals enableHWLOC [ hwloc ]
|
||||||
|
++ lib.optionals enableTBB [ onetbb ]
|
||||||
|
++ lib.optionals enableICD [ ocl-icd ]
|
||||||
|
++ lib.optionals enableLTTNG [ lttng-ust ]
|
||||||
|
++ lib.optionals enableSPIRV [
|
||||||
|
(spirv-llvm-translator.override { inherit (llvmPackages) llvm; })
|
||||||
|
spirv-tools
|
||||||
|
];
|
||||||
|
|
||||||
|
nativeInstallCheckInputs = [
|
||||||
|
writableTmpDirAsHomeHook # needed for POCL_CACHE_DIR
|
||||||
|
];
|
||||||
|
|
||||||
|
doInstallCheck = true;
|
||||||
|
|
||||||
|
installCheckPhase = lib.optionalString enableICD ''
|
||||||
|
runHook preInstallCheck
|
||||||
|
|
||||||
|
export OCL_ICD_VENDORS=$out/etc/OpenCL/vendors
|
||||||
|
$out/bin/poclcc -o poclcc.cl.pocl $src/examples/poclcc/poclcc.cl
|
||||||
|
|
||||||
|
runHook postInstallCheck
|
||||||
|
'';
|
||||||
|
|
||||||
|
setupHook = lib.optionalDrvAttr enableICD (
|
||||||
|
writeText "setup-hook" ''
|
||||||
|
addToSearchPath OCL_ICD_VENDORS @out@/etc/OpenCL/vendors
|
||||||
|
''
|
||||||
|
);
|
||||||
|
|
||||||
|
passthru =
|
||||||
|
let
|
||||||
|
self = finalAttrs.finalPackage;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
updateScript = nix-update-script { };
|
||||||
|
git = self.override { useGit = true; };
|
||||||
|
|
||||||
|
withICD = enableICD;
|
||||||
|
|
||||||
|
test = {
|
||||||
|
# Run builtin tests (causes a rebuild)
|
||||||
|
self = self.overrideAttrs { doCheck = true; };
|
||||||
|
|
||||||
|
# Run basic test from Khronos OpenCL Conformance Test Suite
|
||||||
|
# WARN: despite its name, test_basic is very exhaustive, and can take more
|
||||||
|
# than 1 hour in a marenostrum5 node.
|
||||||
|
cts =
|
||||||
|
assert enableICD;
|
||||||
|
lib.genAttrs [ "api" "basic" "c11_atomics" "printf" "svm" ] (
|
||||||
|
name:
|
||||||
|
runCommand "pocl-cts-test_${name}" {
|
||||||
|
nativeBuildInputs = [ self ];
|
||||||
|
requiredSystemFeatures = [ "sys-devices" ];
|
||||||
|
env = {
|
||||||
|
POCL_DEBUG = "error,warn";
|
||||||
|
POCL_CACHE_DIR = "/build/pocl_cache";
|
||||||
|
};
|
||||||
|
} "${opencl-cts}/bin/Release/test_${name} | tee $out"
|
||||||
|
);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
env.HWLOC_SYNTHETIC = lib.optionalDrvAttr enableHWLOC "node:1 core:1 pu:1";
|
||||||
|
|
||||||
|
propagatedBuildInputs = [ stdenv.cc.cc ];
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "A portable open source (MIT-licensed) implementation of the OpenCL standard";
|
||||||
|
homepage = "http://portablecl.org";
|
||||||
|
license = licenses.mit;
|
||||||
|
maintainers = with maintainers; [
|
||||||
|
leixb
|
||||||
|
jansol
|
||||||
|
xddxdd
|
||||||
|
bsc.abonerib
|
||||||
|
];
|
||||||
|
platforms = platforms.linux ++ platforms.darwin;
|
||||||
|
};
|
||||||
|
})
|
||||||
@@ -35,5 +35,6 @@ stdenv.mkDerivation rec {
|
|||||||
maintainers = with lib.maintainers.bsc; [ rarias ];
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
platforms = lib.platforms.linux;
|
platforms = lib.platforms.linux;
|
||||||
license = lib.licenses.mit;
|
license = lib.licenses.mit;
|
||||||
|
cross = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,23 +5,14 @@
|
|||||||
, automake
|
, automake
|
||||||
, autoconf
|
, autoconf
|
||||||
, libtool
|
, libtool
|
||||||
, mpi
|
|
||||||
, autoreconfHook
|
, autoreconfHook
|
||||||
, gpi-2
|
, gpi-2
|
||||||
, boost
|
, boost
|
||||||
, numactl
|
, numactl
|
||||||
, rdma-core
|
, rdma-core
|
||||||
, gfortran
|
, gfortran
|
||||||
, symlinkJoin
|
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
|
||||||
mpiAll = symlinkJoin {
|
|
||||||
name = "mpi-all";
|
|
||||||
paths = [ mpi.all ];
|
|
||||||
};
|
|
||||||
in
|
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
pname = "tagaspi";
|
pname = "tagaspi";
|
||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
@@ -35,16 +26,18 @@ stdenv.mkDerivation rec {
|
|||||||
hash = "sha256-RGG/Re2uM293HduZfGzKUWioDtwnSYYdfeG9pVrX9EM=";
|
hash = "sha256-RGG/Re2uM293HduZfGzKUWioDtwnSYYdfeG9pVrX9EM=";
|
||||||
};
|
};
|
||||||
|
|
||||||
buildInputs = [
|
nativeBuildInputs = [
|
||||||
autoreconfHook
|
autoreconfHook
|
||||||
automake
|
automake
|
||||||
autoconf
|
autoconf
|
||||||
libtool
|
libtool
|
||||||
|
gfortran
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
boost
|
boost
|
||||||
numactl
|
numactl
|
||||||
rdma-core
|
rdma-core
|
||||||
gfortran
|
|
||||||
mpiAll
|
|
||||||
];
|
];
|
||||||
|
|
||||||
dontDisableStatic = true;
|
dontDisableStatic = true;
|
||||||
@@ -63,5 +56,6 @@ stdenv.mkDerivation rec {
|
|||||||
maintainers = with lib.maintainers.bsc; [ rarias ];
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
platforms = lib.platforms.linux;
|
platforms = lib.platforms.linux;
|
||||||
license = lib.licenses.gpl3Plus;
|
license = lib.licenses.gpl3Plus;
|
||||||
|
cross = false; # gpi-2 cannot cross
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,5 +68,6 @@ in stdenv.mkDerivation {
|
|||||||
maintainers = with lib.maintainers.bsc; [ rarias ];
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
platforms = lib.platforms.linux;
|
platforms = lib.platforms.linux;
|
||||||
license = lib.licenses.gpl3Plus;
|
license = lib.licenses.gpl3Plus;
|
||||||
|
cross = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
95
pkgs/tasycl/default.nix
Normal file
95
pkgs/tasycl/default.nix
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
autoconf,
|
||||||
|
automake,
|
||||||
|
autoreconfHook,
|
||||||
|
boost,
|
||||||
|
fetchFromGitHub,
|
||||||
|
gnumake,
|
||||||
|
libtool,
|
||||||
|
withCFlags,
|
||||||
|
|
||||||
|
useIntel ? true,
|
||||||
|
adaptivecpp ? null,
|
||||||
|
intelPackages ? null,
|
||||||
|
|
||||||
|
useGit ? false,
|
||||||
|
gitUrl ? "git@gitlab-internal.bsc.es:task-awareness/tasycl/tasycl.git",
|
||||||
|
gitBranch ? "main",
|
||||||
|
gitCommit ? "78f98dcf60a66e0eaa3b4ebcf55be076bec64825",
|
||||||
|
}:
|
||||||
|
|
||||||
|
assert !useIntel -> adaptivecpp != null;
|
||||||
|
assert useIntel -> intelPackages != null;
|
||||||
|
|
||||||
|
let
|
||||||
|
variant = if useIntel then "intel" else "acpp";
|
||||||
|
|
||||||
|
syclStdenv = withCFlags [ "-O3" ] (if useIntel then intelPackages.stdenv else stdenv);
|
||||||
|
|
||||||
|
release = rec {
|
||||||
|
version = "2.1.0";
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "bsc-pm";
|
||||||
|
repo = "tasycl";
|
||||||
|
rev = version;
|
||||||
|
hash = "sha256-0kXnb0lHeQNHR27GTLbJ8xbiICLU8k2+FqEnnFSrzzo=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
git = rec {
|
||||||
|
version = src.shortRev;
|
||||||
|
src = builtins.fetchGit {
|
||||||
|
url = gitUrl;
|
||||||
|
ref = gitBranch;
|
||||||
|
rev = gitCommit;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
source = if (useGit) then git else release;
|
||||||
|
|
||||||
|
in
|
||||||
|
|
||||||
|
syclStdenv.mkDerivation {
|
||||||
|
pname = "tasycl-${variant}";
|
||||||
|
inherit (source) src version;
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
separateDebugInfo = true;
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
autoreconfHook
|
||||||
|
automake
|
||||||
|
autoconf
|
||||||
|
libtool
|
||||||
|
gnumake
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
boost
|
||||||
|
];
|
||||||
|
|
||||||
|
configureFlags = lib.optionals (!useIntel) [
|
||||||
|
"CXX=${lib.getExe adaptivecpp}"
|
||||||
|
];
|
||||||
|
|
||||||
|
# add symlinks so we can explicitly link with tasycl-intel / tasycl-acpp
|
||||||
|
postInstall = ''
|
||||||
|
pushd $out/lib
|
||||||
|
for i in libtasycl* ; do
|
||||||
|
ln -s "$i" "''\${i/tasycl/tasycl-${variant}}"
|
||||||
|
done
|
||||||
|
popd
|
||||||
|
'';
|
||||||
|
|
||||||
|
hardeningDisable = [ "all" ];
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
homepage = "https://github.com/bsc-pm/tasycl";
|
||||||
|
description = "Interoperability support between task-based programming models and SYCL";
|
||||||
|
maintainers = with lib.maintainers.bsc; [ abonerib ];
|
||||||
|
platforms = lib.platforms.linux;
|
||||||
|
license = lib.licenses.gpl3Plus;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,9 +1,11 @@
|
|||||||
{ python3Packages, lib }:
|
{ python3Packages, lib }:
|
||||||
|
|
||||||
python3Packages.buildPythonApplication rec {
|
python3Packages.buildPythonApplication {
|
||||||
pname = "upc-qaire-exporter";
|
pname = "upc-qaire-exporter";
|
||||||
version = "1.0";
|
version = "1.0";
|
||||||
|
|
||||||
|
pyproject = true;
|
||||||
|
|
||||||
src = ./.;
|
src = ./.;
|
||||||
|
|
||||||
doCheck = false;
|
doCheck = false;
|
||||||
|
|||||||
@@ -1,25 +1,29 @@
|
|||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 AY8zKw /gmhFOFqOs8IobAImvQVKeM5Y6k0FpuR61/Cu5drVVI
|
-> ssh-ed25519 AY8zKw Crgof1PMHzv3jBw8VeJAst6FKSoyqPFdANFpf79CAgo
|
||||||
g9FXJg2oIoien0zJ70FWHwSTM8SBwbpS188S3Swj7EM
|
7fagE5BmlWdTsdY/i3RbExu1KBcjW1LQXbYwu6chxlk
|
||||||
-> ssh-ed25519 sgAamA opPjlWPhSiI0Rd5l7kd204S5FXFLcQcQftyKb7MDmnU
|
-> ssh-ed25519 sgAamA tGRCaK8mjvz65YziXjRcjMOHIRoyGNJFzBEEbivXPDo
|
||||||
3XrRDVnglCP+vBwvfd1rP5gHttsGDHyXwbf10a8/kKY
|
YLzE5a3J81r+gzkfZIeh9gS+mXzMooC82tBbZ+C3C8o
|
||||||
-> ssh-ed25519 HY2yRg QKZbubM76C3tobPoyCFDRclA9Pzb2fC7s4WOoIgdORc
|
-> ssh-ed25519 HY2yRg +vhO1/vdGPM1JnZRsvVnViFWaFWUZ7MIqvWdePivkxA
|
||||||
K5kckU0KhQFTE6SikJXFJgM41Tco5+VqOsaG0qLrY1Q
|
2K+JdN82DTeGh9QwZBTaghg8C5BCLoEsOgTCM64PU28
|
||||||
-> ssh-ed25519 fw2Xhg +ohqts8dLFjvdHxrGHcOGxU0dm+V3N//giljHkobpDM
|
-> ssh-ed25519 fw2Xhg NHDn0dq32I/AVdUZlpzBX6retlEYEUipde7A9R90qW4
|
||||||
jR/UzGrfS9lrJ/VeolKLxfzeJAf2fIB2pdIn/6ukqNk
|
SJO78ooqEwfHlBRW+YCzgSQJb1JHNo8jz37t3qvLClE
|
||||||
-> ssh-ed25519 tcumPQ 3DPkDPIQQSVtXSLzIRETsIyXQ0k1o18Evn6vf+l/6R8
|
-> ssh-ed25519 G5LX5w d4HfLzI2623artkR2FIfRJgr5yb2BKZJUWqPnwOWDCk
|
||||||
bLXF62OmJjnOT1vvgq3+AcOKKSG5NonrK5EqCVc0Mwo
|
Kh50QESJZSjaJPyp3xroHGn0fD5pPNEYgKkDdqxGpjs
|
||||||
-> ssh-ed25519 JJ1LWg 2Wefc7eLolMU5InEmCNTq21Mf71mI0a2N1HgDrlHvy4
|
-> ssh-ed25519 tcumPQ wQyOKtT15Qezs3cyv5/xxIPVD7Jyk6N6ZLkfxxBHLTo
|
||||||
qXFW9CQBnrzubZ0mzS0Io2WGRrwGBkmeYndBTcZn/fM
|
rKlRBjJdfDVT6U8211+ssFF8yY9yRs1u3GhCSvsw2oE
|
||||||
-> ssh-ed25519 cDBabA oiH36AoIt/fFFYgnoxtH7OoetP+2/wjtn8qo3RJDSHc
|
-> ssh-ed25519 JJ1LWg 98tF1MdA244xNny4w3RnMFuubf4WcuQaZf2bN2Uq8Qc
|
||||||
qKmkxy1aZGP4ZwC0iH7n7hiJ0+rFQYvjQb5O1a1Z0r4
|
MA1Xh1H9vHisVYdqkxNeBkngtn8cYuT2eSimvooIXYo
|
||||||
-> ssh-ed25519 cK5kHw bX3RtO5StMejUYWAaA37fjHA5nO7Xs1vWDQk3yOjs2o
|
-> ssh-ed25519 cDBabA imJ0rXLQETELP7yo3sArhqA9nJwY+S6gkC7tA7CJsQA
|
||||||
Egxmcf8FKAd+E5hMLmhV1yQsCo5rJyUazf1szOvpTAM
|
pKMHW/KDAoEj5ZD64VKekg6et9hlS2PKSgDw3eB3eu8
|
||||||
-> ssh-ed25519 CAWG4Q oKqqRDJH0w8lsoQBQk0w8PO+z5gFNmSaGBUSumvDp1I
|
-> ssh-ed25519 WY7yGw +2g5021/02HvLxLqq42ynr6qKgOKJ3J5GgB1a1bmFXg
|
||||||
m1zWp9MfViAmtpbJhqOHraIokDaPKb0DvvO4vAGCTWI
|
fYvj52R6bM6ngPOZ2lwVezTJnx+8LJBbdnaapKKbyd0
|
||||||
-> ssh-ed25519 xA739A G26kPOz6sbFATs+KAr7gbDvji13eA1smFusQAOJXMwA
|
-> ssh-ed25519 cK5kHw fLZ6yF3NggJ724rjYqhs5ZZh1xUExuK+ITAyqONluzk
|
||||||
Sppvz7A103kZoNxoGsd6eXeCvVh7mBE2MRwLFj9O1dY
|
NS9OMX70XEHrbPQnmC4KB/eoiHChIb8DwDLYJiwOLUU
|
||||||
-> ssh-ed25519 MSF3dg 55ekNcp+inbUd+GQ/VZ7BoBASaJ8YDqF74CVXy1PUxQ
|
-> ssh-ed25519 CAWG4Q tVduE/wMzdfS+DjNbU3Q4blNhL/A63IehNSZGJkJjD0
|
||||||
aTHLLAbzQPWWld/OT3BKebc6FcmsqMTaWCPBGm1UHic
|
jEBB5zG+gLA/88YF+KqWQsNH7lfCsWNvAkrgfbescFs
|
||||||
--- mVkAMnI9XQhS3fMiFuuXP/yLR9wEG9+Rr8pA4Uc0avY
|
-> ssh-ed25519 xA739A ZhFvev77I+YOl1YSHKn2ZcEvGoLjWOILufjd4q/k8HM
|
||||||
<04>DU <20><>s<EFBFBD><73><EFBFBD><EFBFBD>j<EFBFBD><6A>M<EFBFBD><4D>$<24>[<5B>M<EFBFBD><4D><EFBFBD><03>[_<>K7s<37>ju<>v<EFBFBD>D<EFBFBD>4<EFBFBD>g<EFBFBD><67>܄3<>Gn<47><6E><EFBFBD> ɽ<>P<EFBFBD>7~rZs<><73>
|
YXEtHHtjPQlgZW60zHgHm7CLI6vYiRo+AM8QERL9tCg
|
||||||
|
-> ssh-ed25519 MSF3dg 9DvLNheBU1vlfW2zNNxBrGnJ6k4P5ox7s+OGKlgRdyQ
|
||||||
|
wseHfLGHz0huNi5sZsNOfeNkm6Kjjx0SZ8lK4/oXtUQ
|
||||||
|
--- bnJE+14onuSla0XmckD4z/wChWGZh6exbkcbyhcmNYU
|
||||||
|
<EFBFBD><EFBFBD>t<>N猈<><10>U<EFBFBD>w▮i2<69><32>-<2D>iV'(<1E>IF<49><46> S<><53>xs/s<><73> <09><>NDm<44>Q<EFBFBD><51><EFBFBD>o<EFBFBD><6F><EFBFBD><EFBFBD>wZv<7F><76>.\
|
||||||
Binary file not shown.
Binary file not shown.
@@ -1,13 +1,13 @@
|
|||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 HY2yRg U2KQWviZIVNemm9e8h7H+eOzoYNxXgLLS3hsZLMAuGk
|
-> ssh-ed25519 HY2yRg eHM55QsHK1ca9b5nP3EoVUZYu0w2d4B5tkilNK0j/lw
|
||||||
6n5dH1McNzk3rscP4v2pqZYDWtUFMd15rZsEd/mqIFM
|
6Na6lkMe0fOd7+vNP1fLIaVEQDUw5m65Wh8jUH1I6C0
|
||||||
-> ssh-ed25519 cK5kHw Ebrj/cpz1cFWAYAV9OxgyyH85OEMUnfUIV66p7jaoFY
|
-> ssh-ed25519 cK5kHw 0ekhoBYwF7OSWwn4P5f/J4gXb9UHJAWGKV0yI7HCzzE
|
||||||
6J7hWqODtS/fIF4BpxhxbrxZq5vbolvbLqRKqazT02M
|
2Q+Tt5jXAB9ip9jf1z+jeM4FSiqd1w5DNtbqtacuOcM
|
||||||
-> ssh-ed25519 CAWG4Q mXqoQH9ycHF7u0y8mazCgynHxNLxTnrmQHke+2a5QCc
|
-> ssh-ed25519 CAWG4Q Jmw4v9efOFXHjjNky96q/d6vGBP5dNM4wK9zoGrwOh8
|
||||||
mq6PdSF+KOqthuXwzTCsOQsi5KG0z1wHUck+bSTyOBY
|
u5I17wcIq8/2ARWckDXsYckhfX0jWE4AEm5mip/KHws
|
||||||
-> ssh-ed25519 xA739A TADeswueqDEroZWLjMw3RDNwVQ2xRD+JUMVZENovn0M
|
-> ssh-ed25519 xA739A 10pPeC2YG9DJzaQlt7p+fGo27VDiL2dN6JmvY2npcUw
|
||||||
KFlnSjVFbjc+ZsbY8Ed7edC5B01TJGzd/dSryiLArPc
|
4aRV8DekYeL9HagGWgOSjlYnPKmYdKZH8Aw4lRdm+r8
|
||||||
-> ssh-ed25519 MSF3dg Pq+ZD8AqJGDHDbd4PO1ngNFST8+6C2ghZkO/knKzzEc
|
-> ssh-ed25519 MSF3dg hDwIE3Su6cN3sq2E5v/oy6vTNfxTT1ZPts85//gIhwY
|
||||||
wyiL/u38hdQMokmfTsBrY7CtYwc+31FG4EDaqVEn31U
|
aoiaGjQYJB1ededhIuVBCKDRLIOVThWz1pSTvg65J3Y
|
||||||
--- 1z4cOipayh0zYkvasEVEvGreajegE/dqBV7b6E7aFh0
|
--- OYPAGb5U/nwLOIV5VchSvxhChjNnwzbEgU9glSkWCl4
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>@<40>/i<>I'<27><><EFBFBD>Nx<4E>r"<1D>`<1E>O<EFBFBD><4F><EFBFBD>y<><79>8<EFBFBD><38> \/<2F><>I<19><17>D<EFBFBD>`<60>ߓ<EFBFBD><DF93><EFBFBD><1E><04>uy<75><79><EFBFBD>:9Lt<4C><1D><><EFBFBD>؋<EFBFBD><D88B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AU<41><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`<60>;<3B>q8<71>GLU#<23>i<EFBFBD>y<EFBFBD><79>i<03>ڜ
|
<EFBFBD>=<3D><><EFBFBD>c<EFBFBD>WȟJSaІ&<26><1F>ቧ)E<><0B> C<><43>J~u<>c<63><7F>2<EFBFBD><32>v<EFBFBD><76><EFBFBD><03><>s<EFBFBD><73><EFBFBD>vf<76><10><>X7(<28>~<7E><1A>=XCi;<3B>״<EFBFBD>\ߢ<><DFA2><EFBFBD>ܣ<EFBFBD><10><><07>ɳCe<43>D;;X*<2A>3<EFBFBD>i<EFBFBD><69>r<EFBFBD>Em<45><6D><
|
||||||
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user