diff --git a/go.mod b/go.mod index c90300f..0a3b056 100644 --- a/go.mod +++ b/go.mod @@ -4,5 +4,6 @@ go 1.16 require ( github.com/cavaliercoder/go-cpio v0.0.0-20180626203310-925f9528c45e + github.com/klauspost/compress v1.15.12 golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c ) diff --git a/go.sum b/go.sum index 521fae3..a30279f 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,6 @@ github.com/cavaliercoder/go-cpio v0.0.0-20180626203310-925f9528c45e h1:hHg27A0RSSp2Om9lubZpiMgVbvn39bsUmW9U5h0twqc= github.com/cavaliercoder/go-cpio v0.0.0-20180626203310-925f9528c45e/go.mod h1:oDpT4efm8tSYHXV5tHSdRvBet/b/QzxZ+XyyPehvm3A= +github.com/klauspost/compress v1.15.12 h1:YClS/PImqYbn+UILDnqxQCZ3RehC9N318SU3kElDUEM= +github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/internal/archive/archive.go b/internal/archive/archive.go index bafafb6..922732c 100644 --- a/internal/archive/archive.go +++ b/internal/archive/archive.go @@ -17,6 +17,7 @@ import ( "syscall" "github.com/cavaliercoder/go-cpio" + "github.com/klauspost/compress/zstd" "gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/filelist" "gitlab.com/postmarketOS/postmarketos-mkinitfs/internal/osutil" ) @@ -25,6 +26,7 @@ type CompressFormat string const ( FormatGzip CompressFormat = "gzip" + FormatZstd CompressFormat = "zstd" ) type Archive struct { @@ -233,6 +235,11 @@ func (archive *Archive) writeCompressed(path string, mode os.FileMode) error { switch archive.compress_format { case FormatGzip: compressor = gzip.NewWriter(fd) + case FormatZstd: + compressor, err = zstd.NewWriter(fd) + if err != nil { + return err + } default: log.Print("Unknown or no compression format set, using gzip") compressor = gzip.NewWriter(fd)