Skip to content
  • Jonas Witschel's avatar
    makepkg: use bsdtar --no-read-sparse for archive creation if available · a1837fa5
    Jonas Witschel authored and Allan McRae's avatar Allan McRae committed
    
    
    bsdtar uses the "pax" TAR archive format by default, which has support for
    storing sparse file information in the archive. Unfortunately this is a source
    of unreproducibility because the sparse encoding is taken from the file system
    and different file systems handle sparse files differently: some file systems
    have no support for sparsely encoded files at all, and even file systems with
    sparse file support can report different file information for identical files
    due to differing implementations.
    
    As a real world example where this happens, consider the Arch Linux package
    "brotli-testdata 1.0.9-7", which contains a sparsely encoded all-zeros file
    "usr/share/brotli/testdata/zeros". Building this package on a btrfs file system
    yields a different package than building it on tmpfs or ext4 solely due to
    different sparse file information that gets recorded in the package tarball.
    
    To improve the reproducibility of archives containing sparsely encoded files,
    libarchive version 3.6.0 introduces a new --no-read-sparse option. This skips
    reading sparse file information from disk entirely and therefore stores files
    "expanded" in the archive, which is the only way to make them reliably
    reproducible across file systems.
    
    makepkg will use this option if libarchive is recent enough to support it,
    which is detected at build time.
    
    Signed-off-by: default avatarAllan McRae <allan@archlinux.org>
    (cherry picked from commit f5f9e0f4)
    a1837fa5