diff options
-rw-r--r-- | hosts/fscusat/configuration.nix | 1 | ||||
-rw-r--r-- | hosts/fscusat/modules/ftpsync/default.nix | 21 | ||||
-rw-r--r-- | hosts/fscusat/modules/ftpsync/ftpsync.nix | 66 | ||||
-rw-r--r-- | hosts/fscusat/pkgs/archvsync/Makefile.patch | 50 | ||||
-rw-r--r-- | hosts/fscusat/pkgs/archvsync/common.patch | 26 | ||||
-rw-r--r-- | hosts/fscusat/pkgs/archvsync/default.nix | 52 |
6 files changed, 216 insertions, 0 deletions
diff --git a/hosts/fscusat/configuration.nix b/hosts/fscusat/configuration.nix index faa0b69..72e8e04 100644 --- a/hosts/fscusat/configuration.nix +++ b/hosts/fscusat/configuration.nix @@ -5,6 +5,7 @@ ./hardware-configuration.nix ./modules/network.nix ./modules/www.nix + ./modules/ftpsync ../../common.nix ]; diff --git a/hosts/fscusat/modules/ftpsync/default.nix b/hosts/fscusat/modules/ftpsync/default.nix new file mode 100644 index 0000000..aa214ac --- /dev/null +++ b/hosts/fscusat/modules/ftpsync/default.nix @@ -0,0 +1,21 @@ +{ config, ... }: let + name = config.userdata.user; + email = config.userdata.email; +in { + imports = [ ./ftpsync.nix ]; + + services.ftpsync = { + enable = true; + + settings = { + RSYNC_HOST = "ossmirror.mycloud.services"; + RSYNC_PATH = "debian"; + ARCH_INCLUDE = "amd64 riscv64"; + + INFO_MAINTAINER="${name} <${email}>"; + INFO_COUNTRY = "IN"; + INFO_LOCATION = "Kochi, Kerala"; + INFO_THROUGHPUT = "1Gb"; + }; + }; +} diff --git a/hosts/fscusat/modules/ftpsync/ftpsync.nix b/hosts/fscusat/modules/ftpsync/ftpsync.nix new file mode 100644 index 0000000..8c1d170 --- /dev/null +++ b/hosts/fscusat/modules/ftpsync/ftpsync.nix @@ -0,0 +1,66 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.services.ftpsync; + archvsync = pkgs.callPackage ../../pkgs/archvsync {}; + + formatKeyValue = k: v: '' ${k}="${v}" ''; + configFormat = pkgs.formats.keyValue { mkKeyValue = formatKeyValue; }; + configFile = configFormat.generate "ftpsync.conf" cfg.settings; +in +{ + meta.maintainers = with lib.maintainers; [ sinanmohd ]; + + options.services.ftpsync = { + enable = lib.mkEnableOption (lib.mdDoc "ftpsync"); + + settings = lib.mkOption { + inherit (configFormat) type; + default = {}; + description = lib.mdDoc '' + Configuration options for ftpsync. + See ftpsync.conf(5) man page for available options. + ''; + }; + }; + + config = lib.mkIf cfg.enable { + environment.etc."ftpsync/ftpsync.conf".source = configFile; + environment.systemPackages = [ archvsync ]; + + services.ftpsync.settings = { + TO = lib.mkDefault "$STATE_DIRECTORY"; + LOGDIR = lib.mkDefault "$LOGS_DIRECTORY"; + }; + + systemd = let + name = "ftpsync"; + meta = { + description = "Mirror Debian repositories of packages"; + documentation = [ "man:ftpsync(1)" ]; + }; + in { + timers.${name} = meta // { + wantedBy = [ "timers.target" ]; + + timerConfig = { + OnCalendar = "*-*-* 00,06,12,18:00:00"; + Unit="%i.service"; + Persistent = true; + FixedRandomDelay = true; + RandomizedDelaySec = "6h"; + }; + }; + + services.${name} = meta // { + serviceConfig = { + DynamicUser = true; + LogsDirectory = name; + StateDirectory = name; + + ExecStart = "${archvsync}/bin/ftpsync sync:all"; + }; + }; + }; + }; +} diff --git a/hosts/fscusat/pkgs/archvsync/Makefile.patch b/hosts/fscusat/pkgs/archvsync/Makefile.patch new file mode 100644 index 0000000..e82ada4 --- /dev/null +++ b/hosts/fscusat/pkgs/archvsync/Makefile.patch @@ -0,0 +1,50 @@ +From f2ba21ba678907fac0d3d088ad09b0d140ba7740 Mon Sep 17 00:00:00 2001 +From: sinanmohd <sinan@sinanmohd.com> +Date: Sat, 17 Feb 2024 11:37:23 +0530 +Subject: [PATCH] Makefile: nix port + +--- + Makefile | 17 ++++++++--------- + 1 file changed, 8 insertions(+), 9 deletions(-) + +diff --git a/Makefile b/Makefile +index 7a774b4..1efa053 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,9 +1,8 @@ +-include /usr/share/dpkg/pkg-info.mk ++bindir = ${OUT}/bin ++docdir = ${DOC}/share/doc/ftpsync ++mandir = ${MAN}/share/man + +-bindir = /usr/bin +-docdir = /usr/share/doc/ftpsync + examplesdir = ${docdir}/examples +-mandir = /usr/share/man + man1dir = ${mandir}/man1 + man5dir = ${mandir}/man5 + +@@ -41,15 +40,15 @@ install -D bin/runmirrors.$(1) $(2)/runmirrors + endef + + install: +- $(call install_bin,install,${DESTDIR}/${bindir}) +- install -D -m644 -t ${DESTDIR}/${docdir} \ ++ $(call install_bin,install,${bindir}) ++ install -D -m644 -t ${docdir} \ + README.md +- install -D -m644 -t ${DESTDIR}/${examplesdir} \ ++ install -D -m644 -t ${examplesdir} \ + etc/ftpsync.conf.sample \ + etc/runmirrors.conf.sample \ + etc/runmirrors.mirror.sample +- install -D -m644 -t ${DESTDIR}/${man1dir} ${MAN1:%=doc/%.1} +- install -D -m644 -t ${DESTDIR}/${man5dir} ${MAN5:%=doc/%.5} ++ install -D -m644 -t ${man1dir} ${MAN1:%=doc/%.1} ++ install -D -m644 -t ${man5dir} ${MAN5:%=doc/%.5} + + install-tar: + $(call install_bin,install-tar,${DESTDIR}/bin/) +-- +2.43.0 + diff --git a/hosts/fscusat/pkgs/archvsync/common.patch b/hosts/fscusat/pkgs/archvsync/common.patch new file mode 100644 index 0000000..d101f40 --- /dev/null +++ b/hosts/fscusat/pkgs/archvsync/common.patch @@ -0,0 +1,26 @@ +From 0bb6e03dbbf0bd47f6f8cc42274b8f7fa9fc9262 Mon Sep 17 00:00:00 2001 +From: sinanmohd <sinan@sinanmohd.com> +Date: Sat, 17 Feb 2024 14:31:03 +0530 +Subject: [PATCH] common: fix config location when wrapped + +--- + bin/common | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/bin/common b/bin/common +index 7ac7977..941e77a 100644 +--- a/bin/common ++++ b/bin/common +@@ -332,6 +332,9 @@ search_config() { + # Read config file + read_config() { + local name=$(echo "$1" | sed -e 's/[^A-Za-z0-9._-]/_/g') ++ name="${1%-wrapped.conf}" ++ name="${name#.}.conf" ++ + local config=$(search_config "$name") + if [ "$config" ]; then + . "$config" +-- +2.43.0 + diff --git a/hosts/fscusat/pkgs/archvsync/default.nix b/hosts/fscusat/pkgs/archvsync/default.nix new file mode 100644 index 0000000..bd3560e --- /dev/null +++ b/hosts/fscusat/pkgs/archvsync/default.nix @@ -0,0 +1,52 @@ +{ lib, + stdenvNoCC, + fetchFromGitLab, + makeWrapper, + + pandoc, + rsync, + bash, + hostname, +}: + +stdenvNoCC.mkDerivation { + pname = "archvsync"; + version = "unstable-2024-02-17"; + + src = fetchFromGitLab { + domain = "salsa.debian.org"; + owner = "mirror-team"; + repo = "archvsync"; + rev = "653357779c338863917aa069afbae1b24472d32d"; + hash = "sha256-vI32Cko5jXY/aZI9hKWm3GI26Oy89M5VLUFWBk1HNXQ="; + }; + + strictDeps = true; + nativeBuildInputs = [ makeWrapper pandoc ]; + outputs = [ "out" "man" "doc" ]; + + patches = [ ./Makefile.patch ./common.patch ]; + + postInstall = '' + for s in $out/bin/*; do + wrapProgram $s --prefix PATH : ${lib.makeBinPath + [ rsync bash hostname ] + } + done + ''; + + makeFlags = [ + "OUT=${placeholder "out"}" + "MAN=${placeholder "man"}" + "DOC=${placeholder "doc"}" + ]; + + meta = with lib; { + description = "Scripts for maintaining a Debian archive mirror"; + homepage = "https://salsa.debian.org/mirror-team/archvsync"; + license = licenses.gpl2; + platforms = platforms.all; + maintainers = with maintainers; [ sinanmohd ]; + mainProgram = "ftpsync"; + }; +} |