Merge pull request #59424 from florianjacob/journalwatch

journalwatch: fix broken package, general maintenance
This commit is contained in:
Aaron Andersen 2019-04-27 10:58:45 -04:00 committed by GitHub
commit 8d64ec7a17
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 24 deletions

View File

@ -4,6 +4,8 @@ with lib;
let let
cfg = config.services.journalwatch; cfg = config.services.journalwatch;
user = "journalwatch"; user = "journalwatch";
# for journal access
group = "systemd-journal";
dataDir = "/var/lib/${user}"; dataDir = "/var/lib/${user}";
journalwatchConfig = pkgs.writeText "config" ('' journalwatchConfig = pkgs.writeText "config" (''
@ -31,6 +33,17 @@ let
'') filterBlocks); '') filterBlocks);
# can't use joinSymlinks directly, because when we point $XDG_CONFIG_HOME
# to the /nix/store path, we still need the subdirectory "journalwatch" inside that
# to match journalwatch's expectations
journalwatchConfigDir = pkgs.runCommand "journalwatch-config"
{ preferLocalBuild = true; allowSubstitutes = false; }
''
mkdir -p $out/journalwatch
ln -sf ${journalwatchConfig} $out/journalwatch/config
ln -sf ${journalwatchPatterns} $out/journalwatch/patterns
'';
in { in {
options = { options = {
@ -199,33 +212,38 @@ in {
users.users.${user} = { users.users.${user} = {
isSystemUser = true; isSystemUser = true;
createHome = true;
home = dataDir; home = dataDir;
# for journal access group = group;
group = "systemd-journal";
}; };
systemd.tmpfiles.rules = [
# present since NixOS 19.09: remove old stateful symlink join directory,
# which has been replaced with the journalwatchConfigDir store path
"R ${dataDir}/config"
];
systemd.services.journalwatch = { systemd.services.journalwatch = {
environment = { environment = {
# journalwatch stores the last processed timpestamp here
# the share subdirectory is historic now that config home lives in /nix/store,
# but moving this in a backwards-compatible way is much more work than what's justified
# for cleaning that up.
XDG_DATA_HOME = "${dataDir}/share"; XDG_DATA_HOME = "${dataDir}/share";
XDG_CONFIG_HOME = "${dataDir}/config"; XDG_CONFIG_HOME = journalwatchConfigDir;
}; };
serviceConfig = { serviceConfig = {
User = user; User = user;
Group = group;
Type = "oneshot"; Type = "oneshot";
PermissionsStartOnly = true; # requires a relative directory name to create beneath /var/lib
StateDirectory = user;
StateDirectoryMode = 0750;
ExecStart = "${pkgs.python3Packages.journalwatch}/bin/journalwatch mail"; ExecStart = "${pkgs.python3Packages.journalwatch}/bin/journalwatch mail";
# lowest CPU and IO priority, but both still in best-effort class to prevent starvation # lowest CPU and IO priority, but both still in best-effort class to prevent starvation
Nice=19; Nice=19;
IOSchedulingPriority=7; IOSchedulingPriority=7;
}; };
preStart = ''
chown -R ${user}:systemd-journal ${dataDir}
chmod -R u+rwX,go-w ${dataDir}
mkdir -p ${dataDir}/config/journalwatch
ln -sf ${journalwatchConfig} ${dataDir}/config/journalwatch/config
ln -sf ${journalwatchPatterns} ${dataDir}/config/journalwatch/patterns
'';
}; };
systemd.timers.journalwatch = { systemd.timers.journalwatch = {

View File

@ -1,15 +1,15 @@
{ stdenv, buildPythonPackage, fetchurl, pythonOlder, systemd, pytest }: { stdenv, buildPythonPackage, fetchFromGitHub, pythonOlder, systemd, pytest }:
buildPythonPackage rec { buildPythonPackage rec {
pname = "journalwatch"; pname = "journalwatch";
name = "${pname}-${version}";
version = "1.1.0"; version = "1.1.0";
disabled = pythonOlder "3.3"; disabled = pythonOlder "3.3";
src = fetchFromGitHub {
src = fetchurl { owner = "The-Compiler";
url = "https://github.com/The-Compiler/${pname}/archive/v${version}.tar.gz"; repo = pname;
sha512 = "3hvbgx95hjfivz9iv0hbhj720wvm32z86vj4a60lji2zdfpbqgr2b428lvg2cpvf71l2xn6ca5v0hzyz57qylgwqzgfrx7hqhl5g38s"; rev = "v${version}";
sha512 = "11g2f1w9lfqw6zxxyg7qrqpb914s6w71j0gnpw7qr7cak2l5jlf2l39dlg30y55rw7jgmf0yg77wwzd0c430mq1n6q1v8w86g1rwkzb";
}; };
# can be removed post 1.1.0 # can be removed post 1.1.0
@ -20,14 +20,10 @@ buildPythonPackage rec {
doCheck = true; doCheck = true;
checkInputs = [ pytest ];
checkPhase = '' checkPhase = ''
pytest test_journalwatch.py
'';
buildInputs = [
pytest pytest
]; '';
propagatedBuildInputs = [ propagatedBuildInputs = [
systemd systemd