Add p service for pastes
This commit is contained in:
parent
01d531e05c
commit
65f2f81a81
68
m/module/p.nix
Normal file
68
m/module/p.nix
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.services.p;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options = {
|
||||||
|
services.p = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "Whether to enable the p service.";
|
||||||
|
};
|
||||||
|
path = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "/var/lib/p";
|
||||||
|
description = "Where to save the pasted files on disk.";
|
||||||
|
};
|
||||||
|
url = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "https://jungle.bsc.es/p";
|
||||||
|
description = "URL prefix for the printed file.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
environment.systemPackages = let
|
||||||
|
p = pkgs.writeShellScriptBin "p" ''
|
||||||
|
set -e
|
||||||
|
pastedir="${cfg.path}/$USER"
|
||||||
|
cd "$pastedir"
|
||||||
|
|
||||||
|
ext="txt"
|
||||||
|
if [ -n "$1" ]; then
|
||||||
|
ext="$1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
out=$(mktemp "XXXXXXXX.$ext")
|
||||||
|
cat > "$out"
|
||||||
|
chmod go+r "$out"
|
||||||
|
echo "${cfg.url}/$USER/$out"
|
||||||
|
'';
|
||||||
|
in [ p ];
|
||||||
|
|
||||||
|
systemd.services.p = let
|
||||||
|
# Take only normal users
|
||||||
|
users = lib.filterAttrs (_: v: v.isNormalUser) config.users.users;
|
||||||
|
# Create a directory for each user
|
||||||
|
commands = lib.concatLists (lib.mapAttrsToList (_: user: [
|
||||||
|
"install -d -o ${user.name} -g ${user.group} -m 0755 ${cfg.path}/${user.name}"
|
||||||
|
]) users);
|
||||||
|
in {
|
||||||
|
description = "P service setup";
|
||||||
|
requires = [ "network-online.target" ];
|
||||||
|
#wants = [ "remote-fs.target" ];
|
||||||
|
#after = [ "remote-fs.target" ];
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = pkgs.writeShellScript "p-init.sh" (''
|
||||||
|
|
||||||
|
install -d -o root -g root -m 0755 ${cfg.path}
|
||||||
|
|
||||||
|
'' + (lib.concatLines commands));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
@ -12,6 +12,7 @@
|
|||||||
./gitlab-runner.nix
|
./gitlab-runner.nix
|
||||||
./gitea.nix
|
./gitea.nix
|
||||||
../hut/public-inbox.nix
|
../hut/public-inbox.nix
|
||||||
|
../module/p.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
# Select the this using the ID to avoid mismatches
|
# Select the this using the ID to avoid mismatches
|
||||||
@ -32,6 +33,8 @@
|
|||||||
defaultGateway = "10.0.44.1";
|
defaultGateway = "10.0.44.1";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
services.p.enable = true;
|
||||||
|
|
||||||
services.prometheus.exporters.node = {
|
services.prometheus.exporters.node = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enabledCollectors = [ "systemd" ];
|
enabledCollectors = [ "systemd" ];
|
||||||
|
@ -64,6 +64,9 @@ in
|
|||||||
autoindex on;
|
autoindex on;
|
||||||
absolute_redirect off;
|
absolute_redirect off;
|
||||||
}
|
}
|
||||||
|
location /p/ {
|
||||||
|
alias /var/lib/p/;
|
||||||
|
}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -5,13 +5,13 @@ author: "Rodrigo Arias Mallo"
|
|||||||
date: 2024-09-20
|
date: 2024-09-20
|
||||||
---
|
---
|
||||||
|
|
||||||
The hut machine provides a paste service using the program `p` (as in paste).
|
The tent machine provides a paste service using the program `p` (as in paste).
|
||||||
|
|
||||||
You can use it directly from the hut machine or remotely if you have [SSH
|
You can use it directly from the tent machine or remotely if you have [SSH
|
||||||
access](/access) to hut using the following alias:
|
access](/access) to tent using the following alias:
|
||||||
|
|
||||||
```
|
```
|
||||||
alias p="ssh hut p"
|
alias p="ssh tent p"
|
||||||
```
|
```
|
||||||
|
|
||||||
You can add it to bashrc or zshrc for persistent installation.
|
You can add it to bashrc or zshrc for persistent installation.
|
||||||
@ -19,7 +19,7 @@ You can add it to bashrc or zshrc for persistent installation.
|
|||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
The `p` command reads from the standard input, uploads the content to a file
|
The `p` command reads from the standard input, uploads the content to a file
|
||||||
in the ceph filesystem and prints the URL to access it. It only accepts an
|
in the local filesystem and prints the URL to access it. It only accepts an
|
||||||
optional argument, which is the extension of the file that will be stored on
|
optional argument, which is the extension of the file that will be stored on
|
||||||
disk (without the dot). By default it uses the `txt` extension, so plain text
|
disk (without the dot). By default it uses the `txt` extension, so plain text
|
||||||
can be read in the browser directly.
|
can be read in the browser directly.
|
||||||
@ -28,21 +28,21 @@ can be read in the browser directly.
|
|||||||
p [extension]
|
p [extension]
|
||||||
```
|
```
|
||||||
|
|
||||||
To remove files, go to `/ceph/p/$USER` and remove them manually.
|
To remove files, go to `/var/lib/p/$USER` and remove them manually.
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
Share a text file, in this case the source of p itself:
|
Share a text file, in this case the source of p itself:
|
||||||
|
|
||||||
```
|
```
|
||||||
hut% p < m/hut/p.nix
|
tent% p < m/tent/p.nix
|
||||||
https://jungle.bsc.es/p/rarias/okbtG130.txt
|
https://jungle.bsc.es/p/rarias/okbtG130.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste the last dmesg lines directly from a pipe:
|
Paste the last dmesg lines directly from a pipe:
|
||||||
|
|
||||||
```
|
```
|
||||||
hut% dmesg | tail -5 | p
|
tent% dmesg | tail -5 | p
|
||||||
https://jungle.bsc.es/p/rarias/luX4STm9.txt
|
https://jungle.bsc.es/p/rarias/luX4STm9.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user