]> git.proxmox.com Git - dab.git/commitdiff
allow compressing final archive with zstd
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 25 Aug 2020 19:01:04 +0000 (21:01 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 25 Aug 2020 19:01:04 +0000 (21:01 +0200)
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
DAB.pm
dab

diff --git a/DAB.pm b/DAB.pm
index cb04f7e005a139350a6ee3606ed53cedca988158..8dd89ec059bdd4d749e220e3dbaf92d4241b51f1 100644 (file)
--- a/DAB.pm
+++ b/DAB.pm
@@ -776,13 +776,23 @@ sub finalize {
     $self->logmsg ("creating final appliance archive\n");
 
     my $target = "$self->{targetname}.tar";
-    my $final_archive = "${target}.gz";
+
+    my $compressor = $opts->{compressor} // 'gz';
+    my $compressor2cmd_map = {
+       gz => 'gzip',
+       zst => 'zstd',
+    };
+    my $compressor_cmd = $compressor2cmd_map->{$compressor};
+    die "unkown compressor '$compressor', use one of: ". join(', ', sort keys %$compressor2cmd_map)
+       if !defined($compressor_cmd);
+
+    my $final_archive = "${target}.${compressor}";
     unlink $target;
     unlink $final_archive;
 
     $self->run_command ("tar cpf $target --numeric-owner -C '$rootdir' ./etc/appliance.info");
     $self->run_command ("tar rpf $target --numeric-owner -C '$rootdir' --exclude ./etc/appliance.info .");
-    $self->run_command ("gzip $target");
+    $self->run_command ("$compressor_cmd $target");
 
     $self->logmsg ("detecting final commpressed appliance size: ");
     $size = $get_path_size->($final_archive);
diff --git a/dab b/dab
index 6ca953ac8081e08c556c2221f31e5cb6899e7820..f1f63e8e7baf9a0a233a51f428300d99a2c9ee8f 100755 (executable)
--- a/dab
+++ b/dab
@@ -12,7 +12,7 @@ $ENV{'LC_ALL'} = 'C';
 my $commands = {
     'init' => '',
     'bootstrap' => '[--exim] [--minimal]',
-    'finalize' => '[--keepmycnf]',
+    'finalize' => '[--keepmycnf] [--compressor <gz (default)|zst>]',
     'veid' => '',
     'basedir' => '',
     'packagefile' => '',
@@ -93,7 +93,7 @@ eval {
 
     } elsif ($cmd eq 'finalize') {
        my $opts = {};
-       if (!GetOptions ($opts, 'keepmycnf')) {
+       if (!GetOptions ($opts, 'keepmycnf', 'compressor=s')) {
            print_usage();
            exit (-1);
        }