File dwarfs.changes of Package dwarfs
-------------------------------------------------------------------
Wed Nov 26 18:45:57 UTC 2025 - Mia Herkt <mia@0x0.st>
- Update to version 0.14.1:
Bugfixes:
* The metadata_builder now recomputes all total sizes
(total_fs_size, total_allocated_fs_size, and
total_hardlink_size) as part of the build() function. This not
only ensures that the totals are correct even if the allocated
size changes between scanning and segmenting (which has been
happening at least on ZFS volumes), but it also allows images
affected by a related bug in Windows builds of DwarFS to be
fixed by rebuilding the metadata.
* Instead of making the FUSE drivers fail hard when seeing the
options that were removed in v0.14.0, they now just log a
warning and ignore them. The options may still be fully removed
in a future release.
gh#mhx/dwarfs#303.
* The pcmaudio categorizer had two minor issues when compressing
a large number of WAV files. One was reporting an unsupported
format: 3/0 or unsupported format: 65,534/3 warning, which
isn't very useful for the end user. These format codes
correspond to IEEE floating point formats, which are indeed
unsupported. However, the format appears to be quite common,
so the warning has been downgraded to an info message that
explicitly mentions the floating point format. The second issue
was an unexpected fmt chunk size of 20 bytes, which caused the
file to be rejected as a PCM audio file (meaning it was added
using a generic compressor instead of FLAC). It turns out that
these non-conforming fmt chunks are also quite common in
practice, so the code has been changed to accept the
non-conforming file, but also logging an info message
mentioning the non-conformance.
gh#mhx/dwarfs#309.
* The help text for the mkdwarfs compress level option (-l) was
misleading in combination with the manual page as neither
mentioned that the table with details was shown only by
-H / --long-help.
gh#mhx/dwarfs#312.
Features:
* Added shell completion for dwarfsck and dwarfsextract.
* Added sample desktop unmount handlers.
- Changes in 0.14.0:
Bugfixes:
* Leading dots in --input-list file paths were incorrectly
treated as literal directory names instead of being expanded.
gh#mhx/dwarfs#292.
* The SPDX license identifier in GPL-licensed source files was
incorrectly specified as GPL-3.0-only instead of
GPL-3.0-or-later.
gh#mhx/dwarfs#275.
* Fixed an off-by-one error when recovering self_index fields in
metadata, which could cause the sentinel directory to have a
non-zero self_entry. While harmless by itself (since that entry
is never actually used), this would cause the metadata
consistency check to fail. The fix covers three aspects:
correcting the off-by-one error; ensuring the self_entry
recovery code does not run for the sentinel directory;
and changing the metadata consistency check to only warn about
a non-zero self_entry rather than fail. Running mkdwarfs with
--rebuild-metadata will also reset a non-zero sentinel
self_entry to zero.
* Fixed the implementation of the read operation in the FUSE
driver to send positive error code values to libfuse. This was
likely never triggered in practice, but in cases where parts of
the filesystem image vanish while being accessed (which
previously caused SIGBUS crashes), libfuse would not understand
the negative error codes.
* When setting CPU thread affinity for worker group threads via
DWARFS_WORKER_GROUP_AFFINITY, the code did not CPU_ZERO the
cpu_set_t structure before setting individual CPUs. This could
pin threads to random CPUs in addition to the requested ones.
* The FITS categorizer would scan entire files for the
end-of-header marker if their size was a multiple of
2880 bytes, causing significant slowdowns on large non-FITS
files. Additional checks now ensure scanning only continues if
the data truly looks like a standards-compliant FITS header.
* GCC caught a potential null-pointer dereference on error when
opening a file in mkdwarfs. This has been fixed.
* Numerous fixes for 32-bit architectures, mostly related to
integer overflows with file sizes larger than 4 GiB.
* Another off-by-one error caused the first regular file inode to
be excluded from the file-size cache. This would be hard to
notice unless that file was highly fragmented. The cache will
be fixed when rebuilding the metadata.
* The FUSE driver’s enable_nlink option is now the default
behavior and cannot be disabled. The previous optimization
skipped building a table of hardlink counts, which produced
inherently incorrect file status information (hardlinked files
share an inode, so reporting a link count of 1 is wrong).
The hardlink table is now stored in the metadata by default;
if there are no hardlinks, it consumes no space. You can still
omit the hardlink table with --no-hardlink-table, at the cost
of building it on-the-fly when the filesystem image is loaded
(typically fast — e.g., ~300 ms for 14 million files).
Features:
* New I/O layer abstraction that supports “classic” mmap-based
file access, granular mmap-based access on 32-bit systems, and
fully mmap-less access if desired. This applies to all DwarFS
tools. By default, tools use the most efficient
method—memory-mapping whole files on 64-bit systems and
mapping file segments on 32-bit systems (to conserve address
space). This can be controlled via the new DWARFS_IOLAYER_OPTS
environment variable described in dwarfs-env(7).
* Full support for sparse files. mkdwarfs now detects and
efficiently processes sparse files, skipping holes where
possible and preserving them in the filesystem image.
dwarfsextract extracts sparse files as such and preserves
sparse representations when extracting to archive formats that
support them (e.g., tar).
Note: Sparse file support is not backwards compatible; images
containing sparse files cannot be processed by DwarFS versions
prior to 0.14.0. By default, mkdwarfs enables sparse file
support if it detects sparse input. Use --no-sparse-files to
disable it and ensure compatibility with older versions.
* Support for subsecond timestamp resolution. The default remains
one second, but finer resolutions (down to nanoseconds) can be
specified with --time-resolution. mkdwarfs will warn if the
requested resolution is finer than the native filesystem
resolution. This is fully backwards compatible: older DwarFS
versions will handle such images but ignore the subsecond
parts.
gh#mhx/dwarfs#294.
* Desktop integration for Linux. A new --auto-mountpoint option
automatically creates or selects a mount-point directory,
making it easier to mount DwarFS images from file managers.
Desktop files and MIME type definitions are now installed to
enable double-click mounting of .dwarfs files.
* Shell completion for mkdwarfs (bash and zsh).
* Improved error handling when DwarFS tools encounter SIGBUS
(usually caused by accessing memory-mapped files on unreliable
or faulty storage like network shares or flaky USB drives).
When SIGBUS is caught, tools now print an error suggesting
switching from mmap- to read-based I/O via DWARFS_IOLAYER_OPTS.
* dwarfsck now checks metadata consistency by default (unless
--no-check is given), improving detection of filesystem image
corruption.
* The FUSE driver exposes new options cache_sparse and
no_cache_sparse to control whether sparse files should be
cached in the kernel page cache. See dwarfs(1) for details.
* The JSON output from dwarfsck now contains a complete raw
metadata dump when the detail level includes
metadata_full_dump.
* dwarfsck no longer artificially limits string sizes when
dumping metadata.
* Accelerated search for the start of a DwarFS image in files
with custom headers; the new code is about four times faster,
scanning at more than 6 GiB/s on a modern CPU.
* The cache size can now be configured for dwarfsck, useful with
the --checksum option.
* Both dwarfsck and dwarfsextract now limit the amount of data
requested from the filesystem image at once to avoid exhausting
memory (and virtual address space on 32-bit systems).
* Improved self-extracting binary stub with better compatibility
for qemu, binfmt_misc, and old kernels. The stub now works on
Linux kernels as old as 2.6.21 (and possibly older), and it now
uses nanoprintf to further reduce binary size.
* The FUSE driver will now show the name of the mounted file
system image in the mount point listing (e.g., in df or mount
output).
Compatibility:
* The accepted minor version for the DwarFS image format has been
incremented. Release v0.16.0 will also increment the written
minor version. This means images produced with v0.16.0 will not
be readable by DwarFS tools prior to v0.14.0.
See the “Features” section in dwarfs-format(7) for details.
* The (no_)cache_image option has been removed from the FUSE
driver.
Build:
* Removed the hard dependency on the date library, which caused
build issues on distributions that no longer bundle it
(e.g., openSUSE).
- Drop remove_hhdate_dependency.patch
- Drop folly-remove-boost_system-dependency.patch
-------------------------------------------------------------------
Fri Oct 3 13:38:35 UTC 2025 - Filippo Bonazzi <filippo.bonazzi@suse.com>
- Remove hhdate dependency
- Add remove_hhdate_dependency.patch: replace date library usage with
C++20 std::chrono
- Add %check section and run tests
- Add test dependencies gtest and gmock
-------------------------------------------------------------------
Thu Oct 2 17:25:56 UTC 2025 - Mia Herkt <mia@0x0.st>
- Remove libboost_system-devel from BuildRequires
- Add folly-remove-boost_system-dependency.patch
Fixes build with Boost >=1.89.0
gh#mhx/dwarfs#288
gh#facebook/folly#2489
-------------------------------------------------------------------
Tue Sep 2 22:55:02 UTC 2025 - Mia Herkt <mia@0x0.st>
- Update to version 0.13.0:
Bugfixes:
* Made section index discovery more robust.
gh#mhx/dwarfs#264
* A recent kernel change (https://lkml.org/lkml/2025/5/5/2868)
caused the tools_test to fail on Linux 6.14 and later.
This has been fixed by accepting both EPERM and ENOSYS as
valid error codes for link() calls.
Features:
* Support for big-endian architectures.
This is still experimental, even though all unit tests pass
with QEMU, and the benchmark suite runs fine on real hardware.
This currently requires forked versions of folly and fsst.
The changes are small and the pull requests will hopefully be
merged upstream soon.
* Experimental support for 32-bit architectures.
While DwarFS should mostly "just work" on 32-bit when using
small images (a few hundred megabytes), the limited address
space is a problem for the extensive use of memory-mapped
files inside DwarFS. There will be changes to limit the use of
mmap in the future (mainly due to other issues), which should
help 32-bit compatibility as a side-effect.
gh#mhx/dwarfs#268.
* The category metadata for categorized blocks is now stored in
the metadata block by default. This allows re-compressing the
blocks with a metadata-dependent algorithm (e.g. FLAC) even if
they were previously compressed using a metadata-independent
algorithm.
This can be disabled using the --no-category-metadata option.
See the mkdwarfs man page for more details.
* The --no-category-names and --no-category-metadata options can
be used to reduce the size of the metadata. However, this will
make it impossible to use metadata-dependent compression
algorithms (e.g. FLAC), or even select category-specific
compression, when recompressing the image.
* Metadata rebuilding is now supported in mkdwarfs using the
--rebuild-metadata option. Previously, the metadata could only
be recompressed, but it was impossible to change it. With the
new option, it is now possible to change metadata packing and
apply operations like --set-owner, --set-group, --set-time,
--time-resolution, --chmod, or --no-create-timestamp.
Note that these are potentially lossy operations that may be
irreversible. By default, the history of metadata rebuilds is
tracked in the metadata itself, but this can be disabled using
--no-metadata-version-history.
* In addition to metadata rebuilding, it is now also possible to
change the block size of an existing image using the
--change-block-size option. This implies --rebuild-metadata
and --recompress=all. This can be useful for tuning the
performance of an existing image without having to re-create
it from scratch.
* mkdwarfs now shows its current memory usage while running.
Note that -L/--memory-limit still only limits the memory used
for the block queue, not the overall memory usage. Fixing this
is on the roadmap, there's no need to file an issue.
* dwarfsextract has new options to control the output format:
--format-options and --format-filters. There is also
--format=auto to automatically "guess" the format and filters
based on the output file name.
* dwarfsck has a new frozen_details detail level that will show
the frozen_analysis content ordered by memory location instead
of memory usage and also shows the address range of each
section.
-------------------------------------------------------------------
Sun Aug 24 12:05:51 UTC 2025 - Jan Engelhardt <jengelh@inai.de>
- Replace wrong BuildRequires pkgconfig(clzma) -> pkgconfig(liblzma);
build only succeeded previously by accident.
-------------------------------------------------------------------
Sat Jun 21 12:19:45 UTC 2025 - Mia Herkt <mia@0x0.st>
- Update to version 0.12.4:
Bugfixes
* Segfault on bad_compression_ratio_error. When recompressing a
filesystem where some blocks cannot be compressed using the
selected algorithm because of a bad_compression_ratio_error,
the resulting block was left empty.
* Add history unless --no-history is given when rewriting a file
system image.
* Allow dumping frozen_layout w/o frozen_analysis in dwarfsck.
* Logging timestamps should show local time.
Features
* More complete breakdown of metadata in dwarfsck.
* Add schema_raw_dump flag to dwarfsck --detail.
Build
* Update folly/fbthrift/fsst.
-------------------------------------------------------------------
Mon Apr 21 19:50:12 UTC 2025 - Mia Herkt <mia@0x0.st>
- Update to version 0.12.3:
Bugfixes
* Automatic image offset detection (for images using a custom
header) did not work correctly if the header contained a
string that would be identified as the start of a v1 section
header (these were only used before dwarfs-0.3.0).
If there was either "DWARFS\x02\x00" or "DWARFS\x02\x01" in
the header, offset detection would fail. The check has been
modified to peek further into the data and ensure this really
is a v1 section header, and also checking if the next section
header position can be derived from the length field.
It is still possible to construct a file system image where
offset detection will ultimately fail, but it is much less
likely with the change.
- Changes in version 0.12.2:
Bugfixes
*The dwarfs-0.12.0 release introduced a performance regression
where FLAC compression took more than twice as long as in the
previous releases. This has been fixed. FLAC decompression was
unaffected.
-------------------------------------------------------------------
Sun Apr 13 19:46:34 UTC 2025 - Mia Herkt <mia@0x0.st>
- Update to version 0.12.1:
Features
* Added --memory-limit=auto to mkdwarfs to use a more reasonable
(hopefully) default for the block queue. The old default of
1 GiB was quite arbitrary and definitely not suitable for
low-end systems. The new auto default will determine the limit
based on the number of workers (which in turn is based on the
number of CPUs), the block size, and the amount of physical
memory of the system.
* Replaced vector_byte_buffer with malloc_byte_buffer, which is
internally based around a simple buffer that doesn't incur the
cost of initializing each element like std::vector. Especially
for large blocks which are known to be overwritten immediately,
this can save a few CPU cycles.
- Changes in version 0.12.0:
* New Licensing Conditions: Instead of being all GPL-3.0 like all
the previous releases, this release changes the license of a
large fraction of the DwarFS code to MIT. All tools and
libraries that only read DwarFS images are now MIT-licensed.
Everything else (e.g. mkdwarfs) is still GPL-3.0 for the time
being.
Bugfixes
* Changes for compatibility with Boost.Process v2.
Features
* Re-licensed all libraries required for reading DwarFS images
under the MIT license. The source of all tools that just read
DwarFS images (i.e. everything except for mkdwarfs) are also
under the MIT license now. Everything else is still GPL-3.0.
gh#mhx/dwarfs#255
* New hotness categorizer in mkdwarfs that allows a list of "hot"
files to be stored in distinct file system blocks.
* New explicit ordering mode in mkdwarfs that allows files to be
ordered accoring to the order in a given list file.
* dwarfs now shows the version of the FUSE library used.
* New dwarfs options preload_all and preload_category to populate
the block cache immediately after mounting.
* New dwarfs option analysis_file that can be used for profiling
and as input to mkdwarfs new hotness categorizer and explicit
ordering mode.
* New dwarfs option block_allocator that allows the user to
switch from a malloc-based block allocator to an mmap-based
one. This can help with returning memory back to the system if
the blocks are evicted from the cache.
-------------------------------------------------------------------
Fri Apr 4 07:31:03 UTC 2025 - Jan Engelhardt <jengelh@inai.de>
- Use SRPM base name for devel subpackage
-------------------------------------------------------------------
Tue Apr 1 03:25:25 UTC 2025 - Mia Herkt <mia@0x0.st>
- Initial package, version 0.11.3