Author: rob
Date: Wed Sep 29 11:31:09 2010
New Revision: 23990
URL: https://svn.nixos.org/websvn/nix/?rev=23990&sc=1
Log:
initial try for a nixos module for hydra channel mirroring
Added:
nixos/trunk/modules/services/backup/hydra-mirror.nix
Modified:
nixos/trunk/modules/module-list.nix
Modified: nixos/trunk/modules/module-list.nix
==============================================================================
--- nixos/trunk/modules/module-list.nix Wed Sep 29 11:01:48 2010 (r23989)
+++ nixos/trunk/modules/module-list.nix Wed Sep 29 11:31:09 2010 (r23990)
@@ -44,6 +44,7 @@
./security/sudo.nix
./services/audio/alsa.nix
./services/audio/pulseaudio.nix
+ ./services/backup/hydra-mirror.nix
./services/backup/mysql-backup.nix
./services/backup/postgresql-backup.nix
./services/backup/sitecopy-backup.nix
Added: nixos/trunk/modules/services/backup/hydra-mirror.nix
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ nixos/trunk/modules/services/backup/hydra-mirror.nix Wed Sep 29
11:31:09 2010 (r23990)
@@ -0,0 +1,93 @@
+{ config, pkgs, ... }:
+
+with pkgs.lib;
+
+let
+ cfg = config.services.hydraChannelMirror ;
+ mirrorChannel = pkgs.fetchsvn {
+ url =
https://svn.nixos.org/repos/nix/release/trunk/channels/mirror-channel.pl;
+ rev = 23988;
+ sha256 = "1h06clvhr3zz378d8fblhwynvzk1smq7fipv7caakakfd31cv8i6";
+ };
+ cronjob = jobset : ''
+ ${cfg.period} root perl -I${config.environment.nix}/libexec/nix
${mirrorChannel} \
+
${cfg.hydraURL}/jobset/${jobset.project}/${jobset.jobset}/channel/latest \
+ ${cfg.dataDir}/channels/${jobset.relURL} \
+ ${cfg.dataDir}/nars \
+ ${cfg.mirrorURL}/nars \
+ ${cfg.dataDir}/patches \
+ ${cfg.mirrorURL}/patches \
+ ${if jobset.nixexprs == "" then "" else
"${cfg.hydraURL}/job/${jobset.project}/${jobset.jobset}/${jobset.nixexprs}/latest/download-by-type/file/source-dist"}
\
+ >> ${cfg.dataDir}/logs/${jobset.name}.log
+ '';
+in
+{
+ options = {
+
+ services.hydraChannelMirror = {
+
+ enable = mkOption {
+ default = false;
+ description = ''
+ Whether to enable Hydra channel mirroring.
+ '';
+ };
+
+ period = mkOption {
+ default = "15 * * * *";
+ description = ''
+ This option defines (in the format used by cron) when the
+ mirroring should occur.
+ '';
+ };
+
+ jobsets = mkOption {
+ default = [ rec { name = "nixpkgs-unstable"; project = "nixpkgs";
jobset = "trunk"; nixexprs = "tarball"; relURL = "nixpkgs/channels/${name}"; }
];
+ description = ''
+ List of jobsets to mirror.
+ '';
+ };
+
+ hydraURL = mkOption {
+ default = "http://hydra.nixos.org";
+ description = ''
+ Location (URL) of Hydra instance
+ '';
+ };
+
+ mirrorURL = mkOption {
+ default = "http://nixos.org/releases";
+ description = ''
+ Location (URL) of Hydra mirror
+ '';
+ };
+
+ dataDir = mkOption {
+ default = "/data/hydra-mirror";
+ description = ''
+ Location of Hydra mirror data
+ '';
+ };
+ };
+
+ };
+
+ config = mkIf cfg.enable {
+
+ services.cron.systemCronJobs = map cronjob cfg.jobsets ;
+
+ system.activationScripts.hydraChannelMirror = stringAfter [ "stdio"
"users" ]
+ ''
+ mkdir -m 0755 -p ${cfg.dataDir}
+ mkdir -m 0755 -p ${cfg.dataDir}/nars
+ mkdir -m 0755 -p ${cfg.dataDir}/patches
+ mkdir -m 0755 -p ${cfg.dataDir}/channels
+ mkdir -m 0755 -p ${cfg.dataDir}/logs
+ ${concatMapStrings (j : ''
+ mkdir -m 0755 -p ${cfg.dataDir}/channels/${j.relURL}
+ '') cfg.jobsets}
+ '';
+
+ };
+
+}
_______________________________________________
nix-commits mailing list
[email protected]
http://mail.cs.uu.nl/mailman/listinfo/nix-commits