Compare commits
24 Commits
2018-01-05
...
2019-06-06
| Author | SHA1 | Date | |
|---|---|---|---|
| de02b42953 | |||
| 25275ec0dd | |||
| 19258654cf | |||
| 7a7bcc99f2 | |||
| dddc3e79e0 | |||
| 1e8b78d720 | |||
| 366eebee8a | |||
| 5ecdc764ac | |||
|
|
a5e03f769b | ||
|
|
c642afb7e6 | ||
|
|
1127daa925 | ||
|
|
328eabc735 | ||
|
|
f2247b6e3e | ||
|
|
0073763f32 | ||
| e2ba892109 | |||
| 0c47de1cb1 | |||
| 8dcdea29c1 | |||
| cffcd9bd3e | |||
| 3f80d6be6e | |||
| e94b16fce7 | |||
| 3f038be64a | |||
| 76fce51cf0 | |||
| 264a782227 | |||
| e56040b333 |
19
Makefile
19
Makefile
@@ -3,6 +3,7 @@ TIME=time
|
|||||||
|
|
||||||
CHRONY_STATUS=chronyc tracking
|
CHRONY_STATUS=chronyc tracking
|
||||||
CHRONY_STATS=chronyc sources -v
|
CHRONY_STATS=chronyc sources -v
|
||||||
|
CHRONY_STATS_SOURCES=chronyc sourcestats
|
||||||
|
|
||||||
all: rebuild-switch
|
all: rebuild-switch
|
||||||
date
|
date
|
||||||
@@ -24,10 +25,17 @@ clean-log:
|
|||||||
full-auto: submodules-update upgrade clean optimise
|
full-auto: submodules-update upgrade clean optimise
|
||||||
@date
|
@date
|
||||||
|
|
||||||
|
list-installed-packages:
|
||||||
|
@# source : https://functor.tokyo/blog/2018-02-20-show-packages-installed-on-nixos
|
||||||
|
@# https://www.domenkozar.com/2014/01/02/getting-started-with-nix-package-manager/
|
||||||
|
@#nixos-option environment.systemPackages
|
||||||
|
nixos-option environment.systemPackages | head -2 | tail -1 | sed -e 's/ /\n/g' | cut -d- -f2- | sort | uniq| sed -e 's/"$$//'
|
||||||
|
|
||||||
optimise:
|
optimise:
|
||||||
$(TIME) nix-store --optimise
|
$(TIME) nix optimise-store
|
||||||
|
|
||||||
rebuild-build:
|
rebuild-build:
|
||||||
|
nix-channel --add https://nixos.org/channels/nixos-19.03 nixos
|
||||||
$(TIME) time nixos-rebuild build --fallback --show-trace
|
$(TIME) time nixos-rebuild build --fallback --show-trace
|
||||||
|
|
||||||
rebuild-switch:
|
rebuild-switch:
|
||||||
@@ -43,14 +51,14 @@ show-roots:
|
|||||||
nix-store --gc --print-roots
|
nix-store --gc --print-roots
|
||||||
|
|
||||||
show-time:
|
show-time:
|
||||||
-@$(CHRONY_STATUS)
|
-@$(CHRONY_STATUS) && $(CHRONY_STATS)
|
||||||
#CHRONY_STATUS='chronyc tracking' CHRONY_STATS='chronyc sources -v' ${CHRONY_STATS} && watch -d -n 20 "${CHRONY_STATUS} && echo "--" && ${CHRONY_STATS}"
|
-@watch -d -n 2 "$(CHRONY_STATUS) && echo "-- Statistiques générales :" && $(CHRONY_STATS) && echo "-- Statistiques sur les sources :" && $(CHRONY_STATS_SOURCES) && echo "-- Statistiques sur les clients :" && chronyc clients"
|
||||||
-@watch -d -n 20 "$(CHRONY_STATUS) && echo "--" && $(CHRONY_STATS)"
|
|
||||||
|
|
||||||
store-repair:
|
store-repair:
|
||||||
$(TIME) nix-store --verify --check-contents --repair
|
$(TIME) nix-store --verify --check-contents --repair
|
||||||
|
|
||||||
upgrade:
|
upgrade:
|
||||||
|
nix-channel --add https://nixos.org/channels/nixos-19.03 nixos
|
||||||
$(TIME) nixos-rebuild switch --upgrade --fallback --show-trace
|
$(TIME) nixos-rebuild switch --upgrade --fallback --show-trace
|
||||||
|
|
||||||
##--------- Commandes spécifiques pour NixOS -- Opérations non courantes
|
##--------- Commandes spécifiques pour NixOS -- Opérations non courantes
|
||||||
@@ -105,3 +113,6 @@ tmpfs-umount:
|
|||||||
tmpfs-destroy: tmpfs-umount
|
tmpfs-destroy: tmpfs-umount
|
||||||
rmdir /mnt/tmpfs
|
rmdir /mnt/tmpfs
|
||||||
|
|
||||||
|
##- Test awesome
|
||||||
|
test-awesome:
|
||||||
|
Xephyr :5 & sleep 1; DISPLAY=:5 awesome
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ mkIf currentMachine.profiles.isDesktopEnvironment {
|
|||||||
fira # police créée pour Firefox
|
fira # police créée pour Firefox
|
||||||
fira-code # idem fira-mono + ligatures pour la programmation
|
fira-code # idem fira-mono + ligatures pour la programmation
|
||||||
fira-mono # dérivée de fira en monospace
|
fira-mono # dérivée de fira en monospace
|
||||||
|
font-awesome_5 # Jeux de police, utilisé avec Latex
|
||||||
hack-font # police monospace créée explicitement pour coder
|
hack-font # police monospace créée explicitement pour coder
|
||||||
hasklig # police dérivée de source-code-pro mais avec des ligatures
|
hasklig # police dérivée de source-code-pro mais avec des ligatures
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ environment.systemPackages = with pkgs; [
|
|||||||
clawsMail
|
clawsMail
|
||||||
hexchat
|
hexchat
|
||||||
quasselClient
|
quasselClient
|
||||||
mumble
|
#mumble
|
||||||
pidgin
|
pidgin
|
||||||
thunderbird
|
thunderbird
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ mkIf (flags.developpement-haskell && flags.graphical) {
|
|||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
] ++ (with pkgs.haskellPackages; [
|
] ++ (with pkgs.haskellPackages; [
|
||||||
# Haskell lib
|
# Haskell lib
|
||||||
threadscope # visualisation des threads (<bidule>.eventlog)
|
#threadscope # visualisation des threads (<bidule>.eventlog)
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ mkIf (flags.radio && flags.graphical) {
|
|||||||
# Paquets
|
# Paquets
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
## GUI
|
## GUI
|
||||||
gqrx # GUI
|
gqrx # GUI
|
||||||
#gnuradio # Software Defined Radio (SDR) software
|
gnuradio # Software Defined Radio (SDR) software
|
||||||
gnuradio-with-packages
|
gnuradio-with-packages # Software Defined Radio (SDR) software
|
||||||
|
|
||||||
## A Trier
|
## A Trier
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -19,8 +19,9 @@ mkIf flags.developpement-haskell {
|
|||||||
] ++ (with pkgs.haskellPackages; [
|
] ++ (with pkgs.haskellPackages; [
|
||||||
# Haskell lib
|
# Haskell lib
|
||||||
autoproc # ? procmail
|
autoproc # ? procmail
|
||||||
darcs # gestionnaire de version éponyme
|
#brittany # formatteur de code
|
||||||
ghc-mod # outil d'analyse de code haskell utilisé par IDE
|
#darcs # gestionnaire de version éponyme
|
||||||
|
#ghc-mod # outil d'analyse de code haskell utilisé par IDE
|
||||||
hindent # indentation code
|
hindent # indentation code
|
||||||
hlint # qualite de code, analyse statique de code + astuces & bonnes pratiques
|
hlint # qualite de code, analyse statique de code + astuces & bonnes pratiques
|
||||||
#postgrest # mapper HTTP <-> PostgreSQL
|
#postgrest # mapper HTTP <-> PostgreSQL
|
||||||
@@ -29,7 +30,7 @@ mkIf flags.developpement-haskell {
|
|||||||
turtle # genre shell-scripting
|
turtle # genre shell-scripting
|
||||||
|
|
||||||
# Application perso
|
# Application perso
|
||||||
hahp
|
#hahp
|
||||||
pandoc-filter-graphviz # filtre pour utiliser graphviz à partir de pandoc
|
pandoc-filter-graphviz # filtre pour utiliser graphviz à partir de pandoc
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ in
|
|||||||
./localisation.nix
|
./localisation.nix
|
||||||
./network.nix
|
./network.nix
|
||||||
#./network-ipv6.nix
|
#./network-ipv6.nix
|
||||||
|
./u2f.nix
|
||||||
./udev.nix
|
./udev.nix
|
||||||
|
|
||||||
# commandées par config-generator
|
# commandées par config-generator
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ in
|
|||||||
nix.buildCores = 0;
|
nix.buildCores = 0;
|
||||||
|
|
||||||
# The NixOS release to be compatible with for stateful data such as databases.
|
# The NixOS release to be compatible with for stateful data such as databases.
|
||||||
system.stateVersion = "18.03";
|
system.stateVersion = "19.03";
|
||||||
|
|
||||||
# copies the NixOS configuration file (usually /etc/nixos/configuration.nix) and links it from the resulting system (getting to /run/current-system/configuration.nix)
|
# copies the NixOS configuration file (usually /etc/nixos/configuration.nix) and links it from the resulting system (getting to /run/current-system/configuration.nix)
|
||||||
system.copySystemConfiguration = true;
|
system.copySystemConfiguration = true;
|
||||||
@@ -27,7 +27,8 @@ in
|
|||||||
boot.cleanTmpDir = true;
|
boot.cleanTmpDir = true;
|
||||||
|
|
||||||
# Activation des pages de manuel
|
# Activation des pages de manuel
|
||||||
programs.man.enable = true;
|
documentation.man.enable = true;
|
||||||
|
|
||||||
|
|
||||||
# Paquets
|
# Paquets
|
||||||
environment = {
|
environment = {
|
||||||
|
|||||||
41
configuration/u2f.nix
Normal file
41
configuration/u2f.nix
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (lib) mkIf mkMerge mkThenElse;
|
||||||
|
annuaire = config.r6d.machines;
|
||||||
|
currentMachine = annuaire."${config.networking.hostName}";
|
||||||
|
flags = currentMachine.configurationFlags;
|
||||||
|
in
|
||||||
|
|
||||||
|
mkIf true {
|
||||||
|
# Ajout du support des yobikey & hyperfido
|
||||||
|
## source des valeurs udev : https://github.com/Yubico/libu2f-host/blob/master/70-u2f.rules
|
||||||
|
|
||||||
|
## source car udev sur nixos semble ancien : https://raw.githubusercontent.com/Yubico/libu2f-host/master/70-old-u2f.rules
|
||||||
|
services.udev.extraRules = ''
|
||||||
|
# this udev file should be used with udev older than 188
|
||||||
|
ACTION!="add|change", GOTO="u2f_end"
|
||||||
|
|
||||||
|
# Yubico YubiKey
|
||||||
|
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1050", ATTRS{idProduct}=="0113|0114|0115|0116|0120|0402|0403|0406|0407|0410", GROUP="plugdev", MODE="0660"
|
||||||
|
|
||||||
|
# Happlink (formerly Plug-Up) Security KEY
|
||||||
|
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="2581", ATTRS{idProduct}=="f1d0", GROUP="plugdev", MODE="0660"
|
||||||
|
|
||||||
|
# Neowave Keydo and Keydo AES
|
||||||
|
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1e0d", ATTRS{idProduct}=="f1d0|f1ae", GROUP="plugdev", MODE="0660"
|
||||||
|
|
||||||
|
# HyperSecu HyperFIDO
|
||||||
|
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="096e", ATTRS{idProduct}=="0880", GROUP="plugdev", MODE="0660"
|
||||||
|
|
||||||
|
LABEL="u2f_end"
|
||||||
|
|
||||||
|
SUBSYSTEM=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", GROUP="audio", MODE="0666", SYMLINK+="rtl_sdr"
|
||||||
|
'';
|
||||||
|
|
||||||
|
security.pam.u2f.enable = true;
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
libu2f-host
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -22,4 +22,11 @@ mkIf true {
|
|||||||
allowedUDPPorts = [
|
allowedUDPPorts = [
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
} // {
|
||||||
|
assertions = [
|
||||||
|
{
|
||||||
|
assertion = true;
|
||||||
|
message = "Assetion toujours valide.";
|
||||||
|
}
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
23
options.nix
23
options.nix
@@ -62,10 +62,10 @@ let
|
|||||||
configurationOptions = {
|
configurationOptions = {
|
||||||
|
|
||||||
ipAddress = mkOption {
|
ipAddress = mkOption {
|
||||||
description = "Adresse IP";
|
description = "Adresse IP.";
|
||||||
type = lib.types.string;
|
type = lib.types.string;
|
||||||
};
|
};
|
||||||
nix-serve-server = mkEnableOption "nix-serve server";
|
nix-serve-server = mkEnableOption "nix-serve server.";
|
||||||
nix-serve-client = {
|
nix-serve-client = {
|
||||||
enable = mkEnableOption "nix-serve client";
|
enable = mkEnableOption "nix-serve client";
|
||||||
servers = mkOption {
|
servers = mkOption {
|
||||||
@@ -76,7 +76,7 @@ let
|
|||||||
};
|
};
|
||||||
|
|
||||||
tinc = {
|
tinc = {
|
||||||
enable = mkEnableOption "Enable tinc service";
|
enable = mkEnableOption "Enable tinc service.";
|
||||||
dnsFQDN = mkOption {
|
dnsFQDN = mkOption {
|
||||||
example = "device.example.net.";
|
example = "device.example.net.";
|
||||||
description = "DNS name of host pointing to tunnel IP.";
|
description = "DNS name of host pointing to tunnel IP.";
|
||||||
@@ -105,11 +105,26 @@ let
|
|||||||
Mode = router
|
Mode = router
|
||||||
ConnecTo = bar
|
ConnecTo = bar
|
||||||
'';
|
'';
|
||||||
description = "Configuration supplémentaire pour tinc";
|
description = "Configuration supplémentaire pour tinc.";
|
||||||
type = lib.types.string;
|
type = lib.types.string;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
quagga = {
|
||||||
|
enable = mkEnableOption "Enable Quagga + BGP service";
|
||||||
|
bgpConfig = mkOption {
|
||||||
|
type = types.lines;
|
||||||
|
default = "";
|
||||||
|
example =''
|
||||||
|
router bgp 65001
|
||||||
|
neighbor 10.0.0.1 remote-as 65001
|
||||||
|
'';
|
||||||
|
description = ''
|
||||||
|
BGP configuration statements.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
windowsBoot = {
|
windowsBoot = {
|
||||||
enable = mkEnableOption "Activation du démarrage de Windows par Grub";
|
enable = mkEnableOption "Activation du démarrage de Windows par Grub";
|
||||||
drive = mkOption {
|
drive = mkOption {
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ mkIf flags.docker {
|
|||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
# Ecosystème Docker
|
# Ecosystème Docker
|
||||||
docker
|
docker
|
||||||
python36Packages.docker_compose
|
docker-compose
|
||||||
];
|
];
|
||||||
|
|
||||||
virtualisation.docker.enable = true;
|
virtualisation.docker.enable = true;
|
||||||
|
|||||||
@@ -30,6 +30,14 @@ mkIf flags.munin {
|
|||||||
ignore_file ^sensors_-wrapped$
|
ignore_file ^sensors_-wrapped$
|
||||||
ignore_file ^.sensors_-wrapped$
|
ignore_file ^.sensors_-wrapped$
|
||||||
'';
|
'';
|
||||||
|
extraPlugins = {
|
||||||
|
chrony = /etc/nixos/base/services/munin-chrony;
|
||||||
|
chrony_tracking_stratum = /etc/nixos/base/services/munin-chrony-tracking-stratum;
|
||||||
|
chrony_tracking_ppm = /etc/nixos/base/services/munin-chrony-tracking-ppm;
|
||||||
|
chrony_tracking_time_ = /etc/nixos/base/services/munin-chrony-tracking-time;
|
||||||
|
chrony_tracking_time_root = /etc/nixos/base/services/munin-chrony-tracking-time-root;
|
||||||
|
chrony_tracking_update_time = /etc/nixos/base/services/munin-chrony-tracking-update-time;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
systemd.services.munin-node = {
|
systemd.services.munin-node = {
|
||||||
path = with pkgs; [ munin lm_sensors ];
|
path = with pkgs; [ munin lm_sensors ];
|
||||||
@@ -48,9 +56,22 @@ mkIf flags.munin {
|
|||||||
hosts = ''
|
hosts = ''
|
||||||
[${config.networking.hostName}]
|
[${config.networking.hostName}]
|
||||||
address 127.0.0.1
|
address 127.0.0.1
|
||||||
|
df._dev_sda2.warning 35
|
||||||
|
use_node_name yes
|
||||||
|
#contacts syslog
|
||||||
|
contacts email
|
||||||
'';
|
'';
|
||||||
|
# http://sametmax.com/monitorez-vos-serveurs-avec-munin-et-notifications-par-email/
|
||||||
|
# http://guide.munin-monitoring.org/en/latest/tutorial/alert.html#syntax-of-warning-and-critical
|
||||||
extraGlobalConfig = ''
|
extraGlobalConfig = ''
|
||||||
contact.email.command ${pkgs.mutt}/bin/mutt -F /etc/nixos/base/services/munin-muttrc -s "Munin notification for ''${var:host}" root@prunetwork.fr
|
#---
|
||||||
|
#contact.email.command ${pkgs.mutt}/bin/mutt -F /etc/nixos/base/services/munin-muttrc -s "Munin notification for ${config.networking.hostName}" root@ocean.prunetwork.fr
|
||||||
|
contact.email.command /run/current-system/sw/bin/mutt -F /etc/nixos/base/services/munin-muttrc -s "Munin notification for ${config.networking.hostName}" root@ocean.prunetwork.fr
|
||||||
|
contact.syslog.command /run/current-system/sw/bin/logger -p user.crit -t "Munin notification for ${config.networking.hostName}"
|
||||||
|
|
||||||
|
#---
|
||||||
|
contact.email.always_send ok,warning,critical,unknown
|
||||||
|
contact.syslog.always_send ok,warning,critical,unknown
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
123
services/munin-chrony
Executable file
123
services/munin-chrony
Executable file
@@ -0,0 +1,123 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
: <<=cut
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
parse Chrony Tracking output for timeserver status information
|
||||||
|
|
||||||
|
=head1 APPLICABLE SYSTEMS
|
||||||
|
|
||||||
|
Any system with a local chronyd service.
|
||||||
|
|
||||||
|
=head1 CONFIGURATION
|
||||||
|
|
||||||
|
No configuration.
|
||||||
|
|
||||||
|
=head1 MAGIC MARKERS
|
||||||
|
|
||||||
|
#%# family=auto
|
||||||
|
#%# capabilities=autoconf
|
||||||
|
|
||||||
|
=head1 VERSION
|
||||||
|
|
||||||
|
Revision 0.1 2008/08/23 13:06:00 joti
|
||||||
|
|
||||||
|
First version only chronyc tracking, autodetection included.
|
||||||
|
|
||||||
|
Revision 0.2 2008/10/11 16:09:00 joti
|
||||||
|
|
||||||
|
Added scaling of other values to match with frequency, added more description to fields
|
||||||
|
|
||||||
|
Revision 0.3 2014/02/16 zjttoefs
|
||||||
|
|
||||||
|
reduce forking by using awk
|
||||||
|
do not limit output precision
|
||||||
|
add stratum monitoring
|
||||||
|
detect slow/fast time or freqency and adjust sign of value accordingly
|
||||||
|
remove commented out code
|
||||||
|
|
||||||
|
Revision 0.4 2016/11/10 Lars Kruse
|
||||||
|
|
||||||
|
rewrite field handling
|
||||||
|
use "which" for "chronyc" location
|
||||||
|
switch from "bash" to "sh"
|
||||||
|
fix exit code of failing "autoconf"
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
joti
|
||||||
|
zjttoefs
|
||||||
|
Lars Kruse <devel@sumpfralle.de>
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
CHRONYC="$(which chronyc | head -1)"
|
||||||
|
|
||||||
|
# Frequency has extremely higher values than other. Therefore they are fitted by scaling via suitable factors.
|
||||||
|
# field definitions:
|
||||||
|
# - munin fieldname
|
||||||
|
# - factor for graph visualization (all values are supposed to reach a similar dimension)
|
||||||
|
# - regular expression of the chrony output line (may not contain whitespace, case insensitive)
|
||||||
|
# - label (may include "%d" for including the factor; may contain whitespace)
|
||||||
|
fields="stratum 1 ^Stratum Stratum
|
||||||
|
systime 1000000 ^System.time System Time (us)
|
||||||
|
offsetlast 1000000 ^Last.offset Last Offset (us)
|
||||||
|
offsetrms 1000000 ^RMS.offset RMS Offset (us)
|
||||||
|
frequency 1 ^Frequency Frequency (ppm)
|
||||||
|
residualfreq 1 ^Residual.freq Residual Freq (ppm)
|
||||||
|
skew 1 ^Skew Skew (ppm)
|
||||||
|
rootdelay 1000000 ^Root.delay Root Delay (us)
|
||||||
|
rootdispersion 1000000 ^Root.dispersion Root Dispersion (us)
|
||||||
|
updateinterval 1 ^Update.interval Update Interval (s)"
|
||||||
|
|
||||||
|
# chrony example output (v2.4.1):
|
||||||
|
# Reference ID : 131.188.3.221 (ntp1.rrze.uni-erlangen.de)
|
||||||
|
# Stratum : 2
|
||||||
|
# Ref time (UTC) : Thu Nov 10 22:39:50 2016
|
||||||
|
# System time : 0.000503798 seconds slow of NTP time
|
||||||
|
# Last offset : +0.000254355 seconds
|
||||||
|
# RMS offset : 0.002186779 seconds
|
||||||
|
# Frequency : 17.716 ppm slow
|
||||||
|
# Residual freq : +0.066 ppm
|
||||||
|
# Skew : 4.035 ppm
|
||||||
|
# Root delay : 0.042980 seconds
|
||||||
|
# Root dispersion : 0.005391 seconds
|
||||||
|
# Update interval : 258.4 seconds
|
||||||
|
# Leap status : Normal
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$1" = "autoconf" ]; then
|
||||||
|
if [ -n "$CHRONYC" ] && [ -x "$CHRONYC" ]; then
|
||||||
|
echo yes
|
||||||
|
else
|
||||||
|
echo "no (missing 'chronyc' executable)"
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$1" = "config" ]; then
|
||||||
|
echo 'graph_title Chrony Tracking Stats'
|
||||||
|
echo 'graph_args --base 1000 -l 0'
|
||||||
|
echo 'graph_vlabel (time,ppm)'
|
||||||
|
echo 'graph_category time'
|
||||||
|
echo 'graph_scale no'
|
||||||
|
echo "$fields" | while read fieldname factor regex label; do
|
||||||
|
# insert the factor, if "%d" is part of the label
|
||||||
|
printf "${fieldname}.label $label\n" "$factor"
|
||||||
|
echo "${fieldname}.type GAUGE"
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
chrony_status="$("$CHRONYC" tracking)"
|
||||||
|
echo "$fields" | while read fieldname factor regex label; do
|
||||||
|
status_line="$(echo "$chrony_status" | grep -i -- "$regex " | cut -d ":" -f 2-)"
|
||||||
|
if [ -z "$status_line" ]; then
|
||||||
|
value="U"
|
||||||
|
else
|
||||||
|
# the keyword "slow" indicates negative values
|
||||||
|
value="$(echo "$status_line" | awk '{ /slow/ ? SIGN=-1 : SIGN=1; print $1 * SIGN * '"$factor"' }')"
|
||||||
|
fi
|
||||||
|
echo "${fieldname}.value $value"
|
||||||
|
done
|
||||||
116
services/munin-chrony-tracking-ppm
Executable file
116
services/munin-chrony-tracking-ppm
Executable file
@@ -0,0 +1,116 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
: <<=cut
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
parse Chrony Tracking output for timeserver status information
|
||||||
|
|
||||||
|
=head1 APPLICABLE SYSTEMS
|
||||||
|
|
||||||
|
Any system with a local chronyd service.
|
||||||
|
|
||||||
|
=head1 CONFIGURATION
|
||||||
|
|
||||||
|
No configuration.
|
||||||
|
|
||||||
|
=head1 MAGIC MARKERS
|
||||||
|
|
||||||
|
#%# family=auto
|
||||||
|
#%# capabilities=autoconf
|
||||||
|
|
||||||
|
=head1 VERSION
|
||||||
|
|
||||||
|
Revision 0.1 2008/08/23 13:06:00 joti
|
||||||
|
|
||||||
|
First version only chronyc tracking, autodetection included.
|
||||||
|
|
||||||
|
Revision 0.2 2008/10/11 16:09:00 joti
|
||||||
|
|
||||||
|
Added scaling of other values to match with frequency, added more description to fields
|
||||||
|
|
||||||
|
Revision 0.3 2014/02/16 zjttoefs
|
||||||
|
|
||||||
|
reduce forking by using awk
|
||||||
|
do not limit output precision
|
||||||
|
add stratum monitoring
|
||||||
|
detect slow/fast time or freqency and adjust sign of value accordingly
|
||||||
|
remove commented out code
|
||||||
|
|
||||||
|
Revision 0.4 2016/11/10 Lars Kruse
|
||||||
|
|
||||||
|
rewrite field handling
|
||||||
|
use "which" for "chronyc" location
|
||||||
|
switch from "bash" to "sh"
|
||||||
|
fix exit code of failing "autoconf"
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
joti
|
||||||
|
zjttoefs
|
||||||
|
Lars Kruse <devel@sumpfralle.de>
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
CHRONYC="$(which chronyc | head -1)"
|
||||||
|
|
||||||
|
# Frequency has extremely higher values than other. Therefore they are fitted by scaling via suitable factors.
|
||||||
|
# field definitions:
|
||||||
|
# - munin fieldname
|
||||||
|
# - factor for graph visualization (all values are supposed to reach a similar dimension)
|
||||||
|
# - regular expression of the chrony output line (may not contain whitespace, case insensitive)
|
||||||
|
# - label (may include "%d" for including the factor; may contain whitespace)
|
||||||
|
fields="frequency 1 ^Frequency Local Clock Frequency Drift (ppm)
|
||||||
|
residualfreq 1 ^Residual.freq Residual Freq (ppm)
|
||||||
|
skew 1 ^Skew Skew (ppm)"
|
||||||
|
|
||||||
|
# chrony example output (v2.4.1):
|
||||||
|
# Reference ID : 131.188.3.221 (ntp1.rrze.uni-erlangen.de)
|
||||||
|
# Stratum : 2
|
||||||
|
# Ref time (UTC) : Thu Nov 10 22:39:50 2016
|
||||||
|
# System time : 0.000503798 seconds slow of NTP time
|
||||||
|
# Last offset : +0.000254355 seconds
|
||||||
|
# RMS offset : 0.002186779 seconds
|
||||||
|
# Frequency : 17.716 ppm slow
|
||||||
|
# Residual freq : +0.066 ppm
|
||||||
|
# Skew : 4.035 ppm
|
||||||
|
# Root delay : 0.042980 seconds
|
||||||
|
# Root dispersion : 0.005391 seconds
|
||||||
|
# Update interval : 258.4 seconds
|
||||||
|
# Leap status : Normal
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$1" = "autoconf" ]; then
|
||||||
|
if [ -n "$CHRONYC" ] && [ -x "$CHRONYC" ]; then
|
||||||
|
echo yes
|
||||||
|
else
|
||||||
|
echo "no (missing 'chronyc' executable)"
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$1" = "config" ]; then
|
||||||
|
echo 'graph_title Chrony Tracking Stats - Frequencies stability'
|
||||||
|
echo 'graph_args --base 1000 -l 0'
|
||||||
|
echo 'graph_vlabel (ppm)'
|
||||||
|
echo 'graph_category time'
|
||||||
|
echo 'graph_scale no'
|
||||||
|
echo "$fields" | while read fieldname factor regex label; do
|
||||||
|
# insert the factor, if "%d" is part of the label
|
||||||
|
printf "${fieldname}.label $label\n" "$factor"
|
||||||
|
echo "${fieldname}.type GAUGE"
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
chrony_status="$("$CHRONYC" tracking)"
|
||||||
|
echo "$fields" | while read fieldname factor regex label; do
|
||||||
|
status_line="$(echo "$chrony_status" | grep -i -- "$regex " | cut -d ":" -f 2-)"
|
||||||
|
if [ -z "$status_line" ]; then
|
||||||
|
value="U"
|
||||||
|
else
|
||||||
|
# the keyword "slow" indicates negative values
|
||||||
|
value="$(echo "$status_line" | awk '{ /slow/ ? SIGN=-1 : SIGN=1; print $1 * SIGN * '"$factor"' }')"
|
||||||
|
fi
|
||||||
|
echo "${fieldname}.value $value"
|
||||||
|
done
|
||||||
116
services/munin-chrony-tracking-stratum
Executable file
116
services/munin-chrony-tracking-stratum
Executable file
@@ -0,0 +1,116 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
: <<=cut
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
parse Chrony Tracking output for timeserver status information
|
||||||
|
|
||||||
|
=head1 APPLICABLE SYSTEMS
|
||||||
|
|
||||||
|
Any system with a local chronyd service.
|
||||||
|
|
||||||
|
=head1 CONFIGURATION
|
||||||
|
|
||||||
|
No configuration.
|
||||||
|
|
||||||
|
=head1 MAGIC MARKERS
|
||||||
|
|
||||||
|
#%# family=auto
|
||||||
|
#%# capabilities=autoconf
|
||||||
|
|
||||||
|
=head1 VERSION
|
||||||
|
|
||||||
|
Revision 0.1 2008/08/23 13:06:00 joti
|
||||||
|
|
||||||
|
First version only chronyc tracking, autodetection included.
|
||||||
|
|
||||||
|
Revision 0.2 2008/10/11 16:09:00 joti
|
||||||
|
|
||||||
|
Added scaling of other values to match with frequency, added more description to fields
|
||||||
|
|
||||||
|
Revision 0.3 2014/02/16 zjttoefs
|
||||||
|
|
||||||
|
reduce forking by using awk
|
||||||
|
do not limit output precision
|
||||||
|
add stratum monitoring
|
||||||
|
detect slow/fast time or freqency and adjust sign of value accordingly
|
||||||
|
remove commented out code
|
||||||
|
|
||||||
|
Revision 0.4 2016/11/10 Lars Kruse
|
||||||
|
|
||||||
|
rewrite field handling
|
||||||
|
use "which" for "chronyc" location
|
||||||
|
switch from "bash" to "sh"
|
||||||
|
fix exit code of failing "autoconf"
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
joti
|
||||||
|
zjttoefs
|
||||||
|
Lars Kruse <devel@sumpfralle.de>
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
CHRONYC="$(which chronyc | head -1)"
|
||||||
|
|
||||||
|
# Frequency has extremely higher values than other. Therefore they are fitted by scaling via suitable factors.
|
||||||
|
# field definitions:
|
||||||
|
# - munin fieldname
|
||||||
|
# - factor for graph visualization (all values are supposed to reach a similar dimension)
|
||||||
|
# - regular expression of the chrony output line (may not contain whitespace, case insensitive)
|
||||||
|
# - label (may include "%d" for including the factor; may contain whitespace)
|
||||||
|
fields="stratum 1 ^Stratum Stratum"
|
||||||
|
|
||||||
|
# chrony example output (v2.4.1):
|
||||||
|
# Reference ID : 131.188.3.221 (ntp1.rrze.uni-erlangen.de)
|
||||||
|
# Stratum : 2
|
||||||
|
# Ref time (UTC) : Thu Nov 10 22:39:50 2016
|
||||||
|
# System time : 0.000503798 seconds slow of NTP time
|
||||||
|
# Last offset : +0.000254355 seconds
|
||||||
|
# RMS offset : 0.002186779 seconds
|
||||||
|
# Frequency : 17.716 ppm slow
|
||||||
|
# Residual freq : +0.066 ppm
|
||||||
|
# Skew : 4.035 ppm
|
||||||
|
# Root delay : 0.042980 seconds
|
||||||
|
# Root dispersion : 0.005391 seconds
|
||||||
|
# Update interval : 258.4 seconds
|
||||||
|
# Leap status : Normal
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$1" = "autoconf" ]; then
|
||||||
|
if [ -n "$CHRONYC" ] && [ -x "$CHRONYC" ]; then
|
||||||
|
echo yes
|
||||||
|
else
|
||||||
|
echo "no (missing 'chronyc' executable)"
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$1" = "config" ]; then
|
||||||
|
echo 'graph_title Chrony Tracking Stats - Stratum'
|
||||||
|
echo 'graph_args --base 1000 -l 0'
|
||||||
|
echo 'graph_vlabel (stratum)'
|
||||||
|
echo 'graph_category time'
|
||||||
|
echo 'graph_scale no'
|
||||||
|
echo 'stratum.warning 8'
|
||||||
|
echo 'stratum.critical 11'
|
||||||
|
echo "$fields" | while read fieldname factor regex label; do
|
||||||
|
# insert the factor, if "%d" is part of the label
|
||||||
|
printf "${fieldname}.label $label\n" "$factor"
|
||||||
|
echo "${fieldname}.type GAUGE"
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
chrony_status="$("$CHRONYC" tracking)"
|
||||||
|
echo "$fields" | while read fieldname factor regex label; do
|
||||||
|
status_line="$(echo "$chrony_status" | grep -i -- "$regex " | cut -d ":" -f 2-)"
|
||||||
|
if [ -z "$status_line" ]; then
|
||||||
|
value="U"
|
||||||
|
else
|
||||||
|
# the keyword "slow" indicates negative values
|
||||||
|
value="$(echo "$status_line" | awk '{ /slow/ ? SIGN=-1 : SIGN=1; print $1 * SIGN * '"$factor"' }')"
|
||||||
|
fi
|
||||||
|
echo "${fieldname}.value $value"
|
||||||
|
done
|
||||||
118
services/munin-chrony-tracking-time
Executable file
118
services/munin-chrony-tracking-time
Executable file
@@ -0,0 +1,118 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
: <<=cut
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
parse Chrony Tracking output for timeserver status information
|
||||||
|
|
||||||
|
=head1 APPLICABLE SYSTEMS
|
||||||
|
|
||||||
|
Any system with a local chronyd service.
|
||||||
|
|
||||||
|
=head1 CONFIGURATION
|
||||||
|
|
||||||
|
No configuration.
|
||||||
|
|
||||||
|
=head1 MAGIC MARKERS
|
||||||
|
|
||||||
|
#%# family=auto
|
||||||
|
#%# capabilities=autoconf
|
||||||
|
|
||||||
|
=head1 VERSION
|
||||||
|
|
||||||
|
Revision 0.1 2008/08/23 13:06:00 joti
|
||||||
|
|
||||||
|
First version only chronyc tracking, autodetection included.
|
||||||
|
|
||||||
|
Revision 0.2 2008/10/11 16:09:00 joti
|
||||||
|
|
||||||
|
Added scaling of other values to match with frequency, added more description to fields
|
||||||
|
|
||||||
|
Revision 0.3 2014/02/16 zjttoefs
|
||||||
|
|
||||||
|
reduce forking by using awk
|
||||||
|
do not limit output precision
|
||||||
|
add stratum monitoring
|
||||||
|
detect slow/fast time or freqency and adjust sign of value accordingly
|
||||||
|
remove commented out code
|
||||||
|
|
||||||
|
Revision 0.4 2016/11/10 Lars Kruse
|
||||||
|
|
||||||
|
rewrite field handling
|
||||||
|
use "which" for "chronyc" location
|
||||||
|
switch from "bash" to "sh"
|
||||||
|
fix exit code of failing "autoconf"
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
joti
|
||||||
|
zjttoefs
|
||||||
|
Lars Kruse <devel@sumpfralle.de>
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
CHRONYC="$(which chronyc | head -1)"
|
||||||
|
|
||||||
|
# Frequency has extremely higher values than other. Therefore they are fitted by scaling via suitable factors.
|
||||||
|
# field definitions:
|
||||||
|
# - munin fieldname
|
||||||
|
# - factor for graph visualization (all values are supposed to reach a similar dimension)
|
||||||
|
# - regular expression of the chrony output line (may not contain whitespace, case insensitive)
|
||||||
|
# - label (may include "%d" for including the factor; may contain whitespace)
|
||||||
|
fields="systime 1000000 ^System.time System Time (us)
|
||||||
|
offsetlast 1000000 ^Last.offset Last Offset (us)
|
||||||
|
offsetrms 1000000 ^RMS.offset RMS Offset (us)
|
||||||
|
rootdelay 1000000 ^Root.delay Root Delay (us)
|
||||||
|
rootdispersion 1000000 ^Root.dispersion Root Dispersion (us)"
|
||||||
|
|
||||||
|
# chrony example output (v2.4.1):
|
||||||
|
# Reference ID : 131.188.3.221 (ntp1.rrze.uni-erlangen.de)
|
||||||
|
# Stratum : 2
|
||||||
|
# Ref time (UTC) : Thu Nov 10 22:39:50 2016
|
||||||
|
# System time : 0.000503798 seconds slow of NTP time
|
||||||
|
# Last offset : +0.000254355 seconds
|
||||||
|
# RMS offset : 0.002186779 seconds
|
||||||
|
# Frequency : 17.716 ppm slow
|
||||||
|
# Residual freq : +0.066 ppm
|
||||||
|
# Skew : 4.035 ppm
|
||||||
|
# Root delay : 0.042980 seconds
|
||||||
|
# Root dispersion : 0.005391 seconds
|
||||||
|
# Update interval : 258.4 seconds
|
||||||
|
# Leap status : Normal
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$1" = "autoconf" ]; then
|
||||||
|
if [ -n "$CHRONYC" ] && [ -x "$CHRONYC" ]; then
|
||||||
|
echo yes
|
||||||
|
else
|
||||||
|
echo "no (missing 'chronyc' executable)"
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$1" = "config" ]; then
|
||||||
|
echo 'graph_title Chrony Tracking Stats - Time'
|
||||||
|
echo 'graph_args --base 1000 -l 0'
|
||||||
|
echo 'graph_vlabel (time)'
|
||||||
|
echo 'graph_category time'
|
||||||
|
echo 'graph_scale no'
|
||||||
|
echo "$fields" | while read fieldname factor regex label; do
|
||||||
|
# insert the factor, if "%d" is part of the label
|
||||||
|
printf "${fieldname}.label $label\n" "$factor"
|
||||||
|
echo "${fieldname}.type GAUGE"
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
chrony_status="$("$CHRONYC" tracking)"
|
||||||
|
echo "$fields" | while read fieldname factor regex label; do
|
||||||
|
status_line="$(echo "$chrony_status" | grep -i -- "$regex " | cut -d ":" -f 2-)"
|
||||||
|
if [ -z "$status_line" ]; then
|
||||||
|
value="U"
|
||||||
|
else
|
||||||
|
# the keyword "slow" indicates negative values
|
||||||
|
value="$(echo "$status_line" | awk '{ /slow/ ? SIGN=-1 : SIGN=1; print $1 * SIGN * '"$factor"' }')"
|
||||||
|
fi
|
||||||
|
echo "${fieldname}.value $value"
|
||||||
|
done
|
||||||
115
services/munin-chrony-tracking-time-root
Normal file
115
services/munin-chrony-tracking-time-root
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
: <<=cut
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
parse Chrony Tracking output for timeserver status information
|
||||||
|
|
||||||
|
=head1 APPLICABLE SYSTEMS
|
||||||
|
|
||||||
|
Any system with a local chronyd service.
|
||||||
|
|
||||||
|
=head1 CONFIGURATION
|
||||||
|
|
||||||
|
No configuration.
|
||||||
|
|
||||||
|
=head1 MAGIC MARKERS
|
||||||
|
|
||||||
|
#%# family=auto
|
||||||
|
#%# capabilities=autoconf
|
||||||
|
|
||||||
|
=head1 VERSION
|
||||||
|
|
||||||
|
Revision 0.1 2008/08/23 13:06:00 joti
|
||||||
|
|
||||||
|
First version only chronyc tracking, autodetection included.
|
||||||
|
|
||||||
|
Revision 0.2 2008/10/11 16:09:00 joti
|
||||||
|
|
||||||
|
Added scaling of other values to match with frequency, added more description to fields
|
||||||
|
|
||||||
|
Revision 0.3 2014/02/16 zjttoefs
|
||||||
|
|
||||||
|
reduce forking by using awk
|
||||||
|
do not limit output precision
|
||||||
|
add stratum monitoring
|
||||||
|
detect slow/fast time or freqency and adjust sign of value accordingly
|
||||||
|
remove commented out code
|
||||||
|
|
||||||
|
Revision 0.4 2016/11/10 Lars Kruse
|
||||||
|
|
||||||
|
rewrite field handling
|
||||||
|
use "which" for "chronyc" location
|
||||||
|
switch from "bash" to "sh"
|
||||||
|
fix exit code of failing "autoconf"
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
joti
|
||||||
|
zjttoefs
|
||||||
|
Lars Kruse <devel@sumpfralle.de>
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
CHRONYC="$(which chronyc | head -1)"
|
||||||
|
|
||||||
|
# Frequency has extremely higher values than other. Therefore they are fitted by scaling via suitable factors.
|
||||||
|
# field definitions:
|
||||||
|
# - munin fieldname
|
||||||
|
# - factor for graph visualization (all values are supposed to reach a similar dimension)
|
||||||
|
# - regular expression of the chrony output line (may not contain whitespace, case insensitive)
|
||||||
|
# - label (may include "%d" for including the factor; may contain whitespace)
|
||||||
|
fields="rootdelay 1000000 ^Root.delay Root Delay (us)
|
||||||
|
rootdispersion 1000000 ^Root.dispersion Root Dispersion (us)"
|
||||||
|
|
||||||
|
# chrony example output (v2.4.1):
|
||||||
|
# Reference ID : 131.188.3.221 (ntp1.rrze.uni-erlangen.de)
|
||||||
|
# Stratum : 2
|
||||||
|
# Ref time (UTC) : Thu Nov 10 22:39:50 2016
|
||||||
|
# System time : 0.000503798 seconds slow of NTP time
|
||||||
|
# Last offset : +0.000254355 seconds
|
||||||
|
# RMS offset : 0.002186779 seconds
|
||||||
|
# Frequency : 17.716 ppm slow
|
||||||
|
# Residual freq : +0.066 ppm
|
||||||
|
# Skew : 4.035 ppm
|
||||||
|
# Root delay : 0.042980 seconds
|
||||||
|
# Root dispersion : 0.005391 seconds
|
||||||
|
# Update interval : 258.4 seconds
|
||||||
|
# Leap status : Normal
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$1" = "autoconf" ]; then
|
||||||
|
if [ -n "$CHRONYC" ] && [ -x "$CHRONYC" ]; then
|
||||||
|
echo yes
|
||||||
|
else
|
||||||
|
echo "no (missing 'chronyc' executable)"
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$1" = "config" ]; then
|
||||||
|
echo 'graph_title Chrony Tracking Stats - Root Time'
|
||||||
|
echo 'graph_args --base 1000 -l 0'
|
||||||
|
echo 'graph_vlabel (time)'
|
||||||
|
echo 'graph_category time'
|
||||||
|
echo 'graph_scale no'
|
||||||
|
echo "$fields" | while read fieldname factor regex label; do
|
||||||
|
# insert the factor, if "%d" is part of the label
|
||||||
|
printf "${fieldname}.label $label\n" "$factor"
|
||||||
|
echo "${fieldname}.type GAUGE"
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
chrony_status="$("$CHRONYC" tracking)"
|
||||||
|
echo "$fields" | while read fieldname factor regex label; do
|
||||||
|
status_line="$(echo "$chrony_status" | grep -i -- "$regex " | cut -d ":" -f 2-)"
|
||||||
|
if [ -z "$status_line" ]; then
|
||||||
|
value="U"
|
||||||
|
else
|
||||||
|
# the keyword "slow" indicates negative values
|
||||||
|
value="$(echo "$status_line" | awk '{ /slow/ ? SIGN=-1 : SIGN=1; print $1 * SIGN * '"$factor"' }')"
|
||||||
|
fi
|
||||||
|
echo "${fieldname}.value $value"
|
||||||
|
done
|
||||||
114
services/munin-chrony-tracking-update-time
Executable file
114
services/munin-chrony-tracking-update-time
Executable file
@@ -0,0 +1,114 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
: <<=cut
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
parse Chrony Tracking output for timeserver status information
|
||||||
|
|
||||||
|
=head1 APPLICABLE SYSTEMS
|
||||||
|
|
||||||
|
Any system with a local chronyd service.
|
||||||
|
|
||||||
|
=head1 CONFIGURATION
|
||||||
|
|
||||||
|
No configuration.
|
||||||
|
|
||||||
|
=head1 MAGIC MARKERS
|
||||||
|
|
||||||
|
#%# family=auto
|
||||||
|
#%# capabilities=autoconf
|
||||||
|
|
||||||
|
=head1 VERSION
|
||||||
|
|
||||||
|
Revision 0.1 2008/08/23 13:06:00 joti
|
||||||
|
|
||||||
|
First version only chronyc tracking, autodetection included.
|
||||||
|
|
||||||
|
Revision 0.2 2008/10/11 16:09:00 joti
|
||||||
|
|
||||||
|
Added scaling of other values to match with frequency, added more description to fields
|
||||||
|
|
||||||
|
Revision 0.3 2014/02/16 zjttoefs
|
||||||
|
|
||||||
|
reduce forking by using awk
|
||||||
|
do not limit output precision
|
||||||
|
add stratum monitoring
|
||||||
|
detect slow/fast time or freqency and adjust sign of value accordingly
|
||||||
|
remove commented out code
|
||||||
|
|
||||||
|
Revision 0.4 2016/11/10 Lars Kruse
|
||||||
|
|
||||||
|
rewrite field handling
|
||||||
|
use "which" for "chronyc" location
|
||||||
|
switch from "bash" to "sh"
|
||||||
|
fix exit code of failing "autoconf"
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
joti
|
||||||
|
zjttoefs
|
||||||
|
Lars Kruse <devel@sumpfralle.de>
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
CHRONYC="$(which chronyc | head -1)"
|
||||||
|
|
||||||
|
# Frequency has extremely higher values than other. Therefore they are fitted by scaling via suitable factors.
|
||||||
|
# field definitions:
|
||||||
|
# - munin fieldname
|
||||||
|
# - factor for graph visualization (all values are supposed to reach a similar dimension)
|
||||||
|
# - regular expression of the chrony output line (may not contain whitespace, case insensitive)
|
||||||
|
# - label (may include "%d" for including the factor; may contain whitespace)
|
||||||
|
fields="updateinterval 1 ^Update.interval Update Interval (s)"
|
||||||
|
|
||||||
|
# chrony example output (v2.4.1):
|
||||||
|
# Reference ID : 131.188.3.221 (ntp1.rrze.uni-erlangen.de)
|
||||||
|
# Stratum : 2
|
||||||
|
# Ref time (UTC) : Thu Nov 10 22:39:50 2016
|
||||||
|
# System time : 0.000503798 seconds slow of NTP time
|
||||||
|
# Last offset : +0.000254355 seconds
|
||||||
|
# RMS offset : 0.002186779 seconds
|
||||||
|
# Frequency : 17.716 ppm slow
|
||||||
|
# Residual freq : +0.066 ppm
|
||||||
|
# Skew : 4.035 ppm
|
||||||
|
# Root delay : 0.042980 seconds
|
||||||
|
# Root dispersion : 0.005391 seconds
|
||||||
|
# Update interval : 258.4 seconds
|
||||||
|
# Leap status : Normal
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$1" = "autoconf" ]; then
|
||||||
|
if [ -n "$CHRONYC" ] && [ -x "$CHRONYC" ]; then
|
||||||
|
echo yes
|
||||||
|
else
|
||||||
|
echo "no (missing 'chronyc' executable)"
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$1" = "config" ]; then
|
||||||
|
echo 'graph_title Chrony Tracking Stats - Update interval'
|
||||||
|
echo 'graph_args --base 1000 -l 0'
|
||||||
|
echo 'graph_vlabel (time)'
|
||||||
|
echo 'graph_category time'
|
||||||
|
echo 'graph_scale no'
|
||||||
|
echo "$fields" | while read fieldname factor regex label; do
|
||||||
|
# insert the factor, if "%d" is part of the label
|
||||||
|
printf "${fieldname}.label $label\n" "$factor"
|
||||||
|
echo "${fieldname}.type GAUGE"
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
chrony_status="$("$CHRONYC" tracking)"
|
||||||
|
echo "$fields" | while read fieldname factor regex label; do
|
||||||
|
status_line="$(echo "$chrony_status" | grep -i -- "$regex " | cut -d ":" -f 2-)"
|
||||||
|
if [ -z "$status_line" ]; then
|
||||||
|
value="U"
|
||||||
|
else
|
||||||
|
# the keyword "slow" indicates negative values
|
||||||
|
value="$(echo "$status_line" | awk '{ /slow/ ? SIGN=-1 : SIGN=1; print $1 * SIGN * '"$factor"' }')"
|
||||||
|
fi
|
||||||
|
echo "${fieldname}.value $value"
|
||||||
|
done
|
||||||
@@ -18,9 +18,8 @@ mkIf flags.nixos-manual {
|
|||||||
# Services
|
# Services
|
||||||
|
|
||||||
## documentation sur ctrl + alt + F8
|
## documentation sur ctrl + alt + F8
|
||||||
services.nixosManual = {
|
documentation.nixos = {
|
||||||
enable = true;
|
enable = true;
|
||||||
showManual = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# Réseau
|
# Réseau
|
||||||
|
|||||||
@@ -11,11 +11,20 @@ mkIf flags.scanner {
|
|||||||
|
|
||||||
# Paquets
|
# Paquets
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
|
# Driver
|
||||||
|
hplip # Scanner HP
|
||||||
|
python27Packages.pyqt4 # dépendance hplip
|
||||||
|
|
||||||
|
# Outils pour exploiter les scanners
|
||||||
simple-scan
|
simple-scan
|
||||||
];
|
];
|
||||||
|
|
||||||
# Services
|
# Services
|
||||||
hardware.sane.enable = true;
|
hardware.sane.enable = true;
|
||||||
|
services.saned = {
|
||||||
|
enable = true;
|
||||||
|
extraConfig = "192.168.0.0/24";
|
||||||
|
};
|
||||||
|
|
||||||
# Réseau
|
# Réseau
|
||||||
networking.firewall = {
|
networking.firewall = {
|
||||||
|
|||||||
@@ -26,6 +26,9 @@ mkIf true {
|
|||||||
# Use kernel sandbox mechanisms where possible in unprivilegied processes
|
# Use kernel sandbox mechanisms where possible in unprivilegied processes
|
||||||
# Systrace on OpenBSD, Seccomp on Linux, seatbelt on MacOSX/Darwin, rlimit elsewhere.
|
# Systrace on OpenBSD, Seccomp on Linux, seatbelt on MacOSX/Darwin, rlimit elsewhere.
|
||||||
UsePrivilegeSeparation sandbox
|
UsePrivilegeSeparation sandbox
|
||||||
|
|
||||||
|
# Permet de gérer le nombre de connexions multiplexées en simultané
|
||||||
|
MaxSessions 200
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ mkIf true {
|
|||||||
gnupg opensc pcsctools libu2f-host yubikey-personalization
|
gnupg opensc pcsctools libu2f-host yubikey-personalization
|
||||||
];
|
];
|
||||||
|
|
||||||
security.pam.enableU2F = true;
|
security.pam.u2f.enable = true;
|
||||||
|
|
||||||
/*users.extraUsers.joko = {
|
/*users.extraUsers.joko = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user