summaryrefslogtreecommitdiffstats
path: root/files/reprepro/snapshots/time_based
diff options
context:
space:
mode:
authorintrigeri <intrigeri@boum.org>2015-10-28 14:07:25 +0000
committerintrigeri <intrigeri@boum.org>2015-10-28 14:08:33 +0000
commit8bdb854cf17d22931d20622faf2cfa2197d53506 (patch)
tree1cb8ebd35c9cb8c50063ee41a7e809e85c35282b /files/reprepro/snapshots/time_based
parent8fe0fd1f9153403873ed4872c519500cdac15748 (diff)
Use more explicit namespacing for the snapshot resources.
That is, essentially: s/reprepro::time_based_snapshots/reprepro::snapshots::time_based/ This makes room for tagged snapshots classes etc.
Diffstat (limited to 'files/reprepro/snapshots/time_based')
-rwxr-xr-xfiles/reprepro/snapshots/time_based/tails-update-time-based-apt-snapshots120
-rw-r--r--files/reprepro/snapshots/time_based/upstream-keys.d/debian-security.asc111
-rw-r--r--files/reprepro/snapshots/time_based/upstream-keys.d/debian.asc111
3 files changed, 342 insertions, 0 deletions
diff --git a/files/reprepro/snapshots/time_based/tails-update-time-based-apt-snapshots b/files/reprepro/snapshots/time_based/tails-update-time-based-apt-snapshots
new file mode 100755
index 0000000..8332b96
--- /dev/null
+++ b/files/reprepro/snapshots/time_based/tails-update-time-based-apt-snapshots
@@ -0,0 +1,120 @@
+#! /usr/bin/perl
+
+# Example usage:
+#
+# $0 ftp-master.debian.org \
+# /srv/apt-snapshots/time-based \
+# "$(date -u '+%Y%m%d')01"
+
+# Dependencies:
+#
+# libcarp-assert-perl libcarp-assert-more-perl libipc-system-simple-perl
+# libpath-tiny-perl libtry-tiny-perl
+
+use strict;
+use warnings;
+use 5.10.0;
+
+use autodie qw{:all};
+use Carp;
+use Carp::Assert;
+use Carp::Assert::More;
+use English qw{-no_match_vars};
+use Path::Tiny;
+use IPC::System::Simple qw{systemx $EXITVAL};
+use Try::Tiny;
+
+### Functions
+
+sub error {
+ say STDERR @_;
+ exit 1;
+}
+
+sub reprepro {
+ my $args = shift;
+ my $opts = shift;
+
+ assert_listref($args);
+ assert_exists($opts, 'basedir', q{basedir option is set});
+
+ systemx(
+ '/usr/bin/reprepro',
+ ($ENV{VERBOSE} ? '--verbose' : ()),
+ ($ENV{SILENT} ? '--silent' : ()),
+ '--basedir', $opts->{basedir}, @$args
+ );
+}
+
+sub reprepro_config_file_lines {
+ my $basedir = shift;
+ my $filename = shift;
+
+ path($basedir, 'conf', $filename)->lines_utf8({chomp => 1});
+}
+
+sub distributions {
+ my $basedir = shift;
+
+ my @distributions;
+ foreach my $line (reprepro_config_file_lines($basedir, 'distributions')) {
+ if (my ($codename) = ($line =~ /^Codename:\s+(.*)$/)) {
+ push @distributions, $codename;
+ }
+ }
+ return @distributions;
+}
+
+sub update_mirrors {
+ my $basedir = shift;
+
+ reprepro(['update'], { basedir => $basedir });
+}
+
+sub generate_snapshots {
+ my $basedir = shift;
+ my $serial = shift;
+
+ foreach my $codename (distributions($basedir)) {
+ reprepro(['gensnapshot', $codename, $serial], { basedir => $basedir });
+ }
+}
+
+sub update_trace_file {
+ my $archive = shift;
+ my $basedir = shift;
+ my $serial = shift;
+
+ my $trace_file = path($basedir, 'project', 'trace', $archive);
+ $trace_file->parent->mkpath;
+ $trace_file->spew_utf8("Archive serial: $serial\n");
+}
+
+sub clean {
+ my $basedir = shift;
+
+ reprepro(['clearvanished'], { basedir => $basedir });
+
+ # XXX: expire snapshots
+}
+
+### Parse and check command-line
+
+my $USAGE = "Usage: $PROGRAM_NAME ARCHIVE BASEDIR SERIAL";
+
+assert(@ARGV == 3, $USAGE);
+
+my ($ARCHIVE, $BASEDIR, $SERIAL) = @ARGV;
+
+assert_nonblank($ARCHIVE, q{ARCHIVE is not blank});
+assert_nonblank($BASEDIR, q{BASEDIR is not blank});
+assert(-d $BASEDIR, "BASEDIR ('$BASEDIR') is a directory");
+assert_nonblank($SERIAL, q{SERIAL is not blank});
+assert_like($SERIAL, qr/^\d{10}$/, q{Serial is well formed});
+
+### Main
+
+update_mirrors($BASEDIR);
+generate_snapshots($BASEDIR, $SERIAL);
+update_trace_file($ARCHIVE, $BASEDIR, $SERIAL);
+clean($BASEDIR);
diff --git a/files/reprepro/snapshots/time_based/upstream-keys.d/debian-security.asc b/files/reprepro/snapshots/time_based/upstream-keys.d/debian-security.asc
new file mode 100644
index 0000000..9e780c4
--- /dev/null
+++ b/files/reprepro/snapshots/time_based/upstream-keys.d/debian-security.asc
@@ -0,0 +1,111 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+lc/RtZpF5uUq1yGf/TyOgm9X3tiS+mueTz36
+=pvO8
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/files/reprepro/snapshots/time_based/upstream-keys.d/debian.asc b/files/reprepro/snapshots/time_based/upstream-keys.d/debian.asc
new file mode 100644
index 0000000..aa1f3f3
--- /dev/null
+++ b/files/reprepro/snapshots/time_based/upstream-keys.d/debian.asc
@@ -0,0 +1,111 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+3rRmtFrJQ50iIcnJX8TjzB9e
+=2Gih
+-----END PGP PUBLIC KEY BLOCK-----