[pve-devel] [PATCH dab 1/1] add support for repositories, used only for template generation

Stoiko Ivanov s.ivanov at proxmox.com
Tue Sep 30 16:51:27 CEST 2025


One use-case are the proxmox-mail-gateway container templates, which
ship the correct enterprise-repsitory entry.

Currently the used entry is removed via `sed` during container
creation. With deb822 sources the `sed` command would become a bit
unwieldy, so just add the option to define sources which are only
used for the container preparation

Signed-off-by: Stoiko Ivanov <s.ivanov at proxmox.com>
---
 PVE/DAB.pm | 31 ++++++++++++++++++++++++++++---
 dab        |  6 ++++++
 2 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/PVE/DAB.pm b/PVE/DAB.pm
index f74d363..59397f2 100644
--- a/PVE/DAB.pm
+++ b/PVE/DAB.pm
@@ -222,7 +222,7 @@ sub read_config {
 	    chomp $res->{description};	    
 	} elsif ($rec =~ s/^([^:]+):\s*(.*\S)\s*\n//) {
 	    my ($key, $value) = (lc ($1), $2);
-	    if ($key eq 'source' || $key eq 'mirror') {
+	    if ($key eq 'source' || $key eq 'mirror' || $key eq 'install-source') {
 		push @{$res->{$key}}, $value;
 	    } else {
 		die "duplicate key '$key'\n" if defined ($res->{$key});
@@ -507,9 +507,33 @@ sub new {
 		source => $url,
 		comp => $ca,
 		suite => $su,
+		keep => 1,
 	    };
 	} else {
-	    die "syntax error in source spezification '$s'\n";
+	    die "syntax error in source specification '$s'\n";
+	}
+    }
+
+    foreach my $is (@{$config->{'install-source'}}) {
+	if ($is =~ m@^\s*((https?|ftp)://\S+)\s+(\S+)((\s+(\S+))+)$@) {
+	    my ($url, $su, $components) = ($1, $3, $4);
+	    $su =~ s/SUITE/$suite/;
+	    $components =~ s/^\s+//;
+	    $components =~ s/\s+$//;
+	    my $ca;
+	    foreach my $co (split (/\s+/, $components)) {
+		push @$ca, $co;
+	    }
+	    $ca = ['main'] if !$ca;
+
+	    push @$sources, {
+		source => $url,
+		comp => $ca,
+		suite => $su,
+		keep => 0,
+	    };
+	} else {
+	    die "syntax error in install-source specification '$is'\n";
 	}
     }
 
@@ -1380,7 +1404,8 @@ sub bootstrap {
 	mkdir "$rootdir/etc/apt/sources.list.d";
 	my $origin = lc($suiteinfo->{origin});
 	my $keyring = $suiteinfo->{keyring} or die "missing keyring for origin '$origin'";
-	my $uris = { map { $_->{source} => 1 } $self->{sources}->@* };
+	my @keep_sources = grep { $_->{keep} } $self->{sources}->@*;
+	my $uris = { map { $_->{source} => 1 } @keep_sources };
 
 	for my $uri (keys $uris->%*) {
 	    my $sources = [ grep { $_->{source} eq $uri } $self->{sources}->@* ];
diff --git a/dab b/dab
index d79afe6..c01c513 100755
--- a/dab
+++ b/dab
@@ -451,6 +451,12 @@ Note: SUITE is a variable and will be substituted.
 There are also reasonable defaults for Ubuntu. If you do not specify any source
 the defaults are used.
 
+=item B<Install-Source:> I<URL [components]>
+
+Defines a source location used only during appliance creation. It is
+not added to the sources.list entries in the resulting templates. Else behaves
+like a B<Source:> entry.
+
 =item B<Depends:> I<dependencies>
 
 Debian like package dependencies. This can be used to make sure that speific
-- 
2.39.5





More information about the pve-devel mailing list