From 48ed58c3ed8f0e7817e1c4b558cc6f235f88c015 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Sat, 1 Apr 2023 23:29:13 -0700 Subject: [PATCH] Convert README* and NEWS to Markdown This is the usual convention for new projects. --- Makefile.am | 2 +- NEWS | 1190 -------------------------------------- NEWS.md | 1214 +++++++++++++++++++++++++++++++++++++++ README | 256 --------- README.WINDOWS | 134 ----- README.WINDOWS.md | 133 +++++ README.md | 282 +++++++++ include/wimlib.h | 2 +- tools/update-version.sh | 4 +- tools/windows-build.sh | 6 +- 10 files changed, 1636 insertions(+), 1587 deletions(-) delete mode 100644 NEWS create mode 100644 NEWS.md delete mode 100644 README delete mode 100644 README.WINDOWS create mode 100644 README.WINDOWS.md create mode 100644 README.md diff --git a/Makefile.am b/Makefile.am index 6c3f43e1..f11542f5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -17,7 +17,7 @@ AM_CFLAGS = -std=gnu99 $(PLATFORM_CFLAGS) -fno-common \ AM_LDFLAGS = $(PLATFORM_LDFLAGS) -EXTRA_DIST = README README.WINDOWS \ +EXTRA_DIST = README.md README.WINDOWS.md NEWS.md \ COPYING COPYING.GPLv3 COPYING.LGPLv3 \ examples \ tools/get-version-number.sh tools/windows-build.sh diff --git a/NEWS b/NEWS deleted file mode 100644 index 68e2a86c..00000000 --- a/NEWS +++ /dev/null @@ -1,1190 +0,0 @@ -Version 1.14.0-BETA2: - Removed libxml2 and libcrypto (OpenSSL) as dependencies of wimlib. - Also removed winpthreads as a dependency of wimlib on Windows. - - Improved the performance of the Windows binaries on CPUs that have SHA-1 - instructions. - - Fixed a bug in 'wimsplit' where it didn't accept part sizes of 4 GiB or - larger on Windows and on 32-bit platforms. - - The README.WINDOWS file and the tools/windows-build.sh script (renamed - from 'make-windows-release') have been improved to make it easier to - build wimlib on Windows. The instructions now use MSYS2 (instead of - Cygwin as they did before), and both gcc and clang are supported. - Windows ARM64 builds are now supported (experimentally) as well. - - Removed support for Windows XP. - -Version 1.13.6: - wimsplit no longer prints a success message on failure. - - wimlib_iterate_dir_tree() no longer hashes files that haven't yet been - written to the WIM file. - - Reduced the maximum number of file descriptors that wimlib can use when - extracting files from a WIM image on macOS. - - The files that used the CC0 public domain dedication now use the MIT - license instead. - - Removed some configuration options (--disable-assertions, - --disable-error-messages, and --disable-multithreaded-compression) - that probably weren't being used by anyone. - -Version 1.13.5: - Exporting "all" images from a WIM file no longer fails if multiple - images in that WIM file have the same name. - - wimlib now warns rather than aborts if two files have the same SHA-1 - hash but different sizes. - - Fixed build errors with the latest version of Mingw-w64. - -Version 1.13.4: - wimsplit now prints progress messages regularly rather than just once - per WIM part. - - Added support for a data recovery mode which causes files to be - extracted even if they are corrupted. The option is --recover-data for - wimapply and wimextract, and WIMLIB_EXTRACT_FLAG_RECOVER_DATA for the - library. Note that this option won't help with all types of corruption; - some types of corruption will still cause a fatal error. - -Version 1.13.3: - On Windows, improved performance of capturing an entire drive in some - cases. - - On Windows, fixed leaking a directory handle (or triggering a SEH - exception when running under a debugger) when referencing WIM files. - - On Windows, when applying a Windows OS image using the --compact flag, - bootloader files can now be compressed with stronger compression - algorithms if the version of Windows is recent enough to support it. - - Clarified the license text. - -Version 1.13.2: - Prevented miscompilation with gcc 10 at -O3 - (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94994). - - Avoided some compiler warnings with gcc 9 and later. - - The 'mkwinpeimg' script now also looks for syslinux modules in - /usr/share/syslinux, to handle where openSUSE installs them. - - Removed obsolete packaging files from the source tree. - -Version 1.13.1: - Fixed a crash or incorrect output during LZMS compression with a - compression level greater than 50 and a chunk size greater than 64 MiB. - This affected wimlib v1.8.0 and later. In the unlikely event that you - used all these non-default compression settings in combination, e.g. - 'wimcapture --solid --solid-compress=LZMS:100 --solid-chunk-size=128M', - run 'wimverify' on your archives to verify your data is intact. - -Version 1.13.0: - On Windows, wimlib now supports capturing and applying extended - attributes (EAs). It is compatible with DISM with the /EA option, - available since Windows 10 version 1607. wimlib's EA support is on by - default and works on older versions of Windows too. - - Partially fixed a bug where [ExclusionException] entries didn't take - effect when the containing directory is matched by [ExclusionList]. It - now works when the [ExclusionException] patterns are absolute. For - example, listing "/dir/file" in [ExclusionException] now works even if - "/dir" is matched by [ExclusionList]. - - Added a '--create' option to 'wimappend' which makes it create the WIM - file (like 'wimcapture') if it doesn't exist yet. - - Added an '--include-integrity' option to various wimlib-imagex commands. - '--include-integrity' is like '--check', but it will just include an - integrity table in the output WIM(s), while skipping verification of any - existing integrity tables. This can be useful to avoid unwanted - verification of large WIM files, e.g. WIMs given by '--delta-from'. - - 'wimextract' now reads a pathlist file from standard input when "@-" is - given as an argument. - - wimsplit (API: wimlib_split()) now correctly handles a dot in the path - to the first split WIM part, prior to the filename extension. - - 'wimlib-imagex --version' now shows the version of the library it is - actually using (in case it is different from wimlib-imagex's version). - -Version 1.12.0: - Fixed a bug that was causing the LZMS decompressor to be miscompiled - with GCC 7 (this broke extracting "solid" archives). - - The Windows 10 Recycle Bin directory (\$RECYCLE.BIN) has been added to - the default exclusion list. - - Added a '--quiet' option to wimlib-imagex. - - The 'mkwinpeimg' script now also looks for the syslinux BIOS modules in - the directory /usr/lib/syslinux/modules/bios. - - Files with timestamps before the year 1970 are now extracted correctly - to UNIX-style filesystems, are displayed correctly by - 'wimdir --detailed', and show up correctly in mounted WIM images. - - Files with timestamps after the year 2038 are now displayed correctly by - the 32-bit Windows build of wimlib. - -Version 1.11.0: - Fixed a data corruption bug (incorrect compression) when storing an - already highly-compressed file in an LZX-compressed WIM with a chunk - size greater than or equal to 64K. Note that this is not the default - setting and such WIMs are not supported by Microsoft's WIM software, so - only users who used the --chunk-size option to wimlib-imagex or the - wimlib_set_output_chunk_size() API function may have been affected. - This bug was introduced in wimlib v1.10.0. See - https://wimlib.net/forums/viewtopic.php?f=1&t=300 for more details. - - On all platforms, sparse files are now extracted as sparse. - - Sparse files captured from UNIX-style filesystems are now marked as - sparse in the resulting WIM image. - - Added support for storing Linux-style extended attributes in WIM images. - When the --unix-data option is used on Linux, wimlib-imagex now captures - and applies extended attributes, in addition to the already-supported - standard UNIX file permissions (owner/group/mode) and special files. - - --delta-from is now supported by wimappend. (Previously it was only - supported by wimcapture.) - - On Windows, improved the way in which files deduplicated with Windows' - Data Deduplication feature are captured. - - The development files needed to link with wimlib using Visual Studio are - now included in the Windows release archives. - - wimlib.h can now be included by Visual Studio without errors. - - The example programs can now be compiled in C++ mode, and they also now - work on Windows. - - Updated 'mkwinpeimg' to work correctly on images that have a "windows" - (lower case) directory rather than a "Windows" (upper case) directory. - - Fixed configuring with --enable-ssse3-sha1 from release tarball - (the file nasm_lt.sh was missing). - - Made some documentation improvements. - -Version 1.10.0: - The LZX compression ratio has been slightly improved. The default mode, - LZX level 50, is now almost as good as the old LZX level 100, while - being nearly the same speed as before. - - Decompression performance has been slightly improved. - - Filenames are now always listed in NTFS collation order. - - On UNIX-like systems, wimlib can now process Windows filenames that are - not valid Unicode due to the presence of unpaired surrogates. - - On UNIX-like systems, wimlib now always assumes UTF-8 encoding with the - addition of surrogate codepoints. Consequently, the environmental - variable WIMLIB_IMAGEX_USE_UTF8 and the flag - WIMLIB_INIT_FLAG_ASSUME_UTF8 no longer have any effect. - - wimlib no longer depends on iconv. - - Reduced memory usage slightly. - - When a WIM image is applied in NTFS-3G mode, security descriptors are - now created in NTFS v3.0 format when supported by the volume. - - Workarounds for bugs in libntfs-3g version 2013.1.13 and earlier have - been removed. Users are advised to upgrade to a later version of - libntfs-3g. - - On Windows, wimlib now supports case-sensitive filename extraction when - supported by the underlying operating system and filesystem (operating - system support requires a registry setting). - -Version 1.9.2: - On UNIX, wimlib can now overwrite readonly files when extracting. - - On Windows, fixed a bug where wimlib could leave a null DACL (a.k.a. "no - NTFS permissions") set on some existing directories after extraction. - - On Windows, when applying a WIM image in "WIMBoot mode" when the WOF - driver is not loaded, wimlib can now correctly register a new WIM file - with the target volume when the target volume previously had had WIM - files unregistered. - - Added a new testing program. - - Clarified the main license text and updated public domain dedications - for certain files to be more thorough. - -Version 1.9.1: - Object IDs are now saved and restored on Windows and in NTFS-3G mode. - - Reduced memory usage when exporting large numbers of WIM images. - - Non UTF-8 locales are now detected correctly. - - Addressed compiler warnings and enabled "silent" make rules by default. - - Windows-specific updates: - Fixed a bug where duplicate backslashes could be generated in - link targets when extracting symbolic links and junctions. - - Fixed a bug where the .cmd shortcuts for wimlib-imagex wouldn't - work if their full path contained a space. - - Fixed bugs related to scanning SMB filesystems. - - Added warning message about known issue with WindowsApps folder. - - Added instructions for building from source on Windows. - - VSS support is no longer marked "experimental". - - Added missing license file for libdivsufsort-lite. - -Version 1.9.0: - Added experimental support for Windows VSS (Volume Shadow Copy Service). - The new '--snapshot' argument to 'wimcapture' makes wimlib automatically - create and use a temporary VSS snapshot when capturing a WIM image. - - Implemented setting of Windows-specific XML information, such as - architecture, system root, and version details. This information is now - automatically set in newly captured WIM images, when appropriate. - - Improved performance of directory tree scans on Windows. - - On Windows, to improve capture performance, wimlib now sometimes opens - files by inode number rather than by path. This is enabled for - wimcapture and wimappend, but for now other applications have to opt-in. - - The progress messages printed by wimlib-imagex while writing WIM files - have been slightly tweaked. - - Progress information for directory tree scans now counts all hard links. - Also, on Windows "\\?\" is no longer stripped from the current path. - - Added a new '--image-property' option to 'wimcapture', 'wimappend', and - 'wiminfo'. This option lets you assign values to elements in a WIM - file's XML document by name. - - The wimlib_get_image_property() and wimlib_set_image_property() API - functions now support numerically indexed elements. - - Fixed a bug where, on Windows, wimlib would change the security - descriptor of the target directory of an extraction even when the - '--no-acls' option was specified. - -Version 1.8.3: - Fixed a bug with libntfs-3g extraction present since v1.8.1. Sometimes, - some Microsoft software would not correctly recognize data in the - resulting filesystem. - - Made some small improvements to the compression algorithms: - LZX compression ratio was slightly improved. - XPRESS compression ratio and speed was slightly improved. - LZMS compression speed was slightly improved. - - Improved handling of WIM XML data. wimlib no longer drops unrecognized - elements when exporting images. In addition, two API functions were - added for better access to elements in the XML document: - wimlib_get_image_property() and wimlib_set_image_property(). - - Added support for (unsafe) in-place compaction of WIM files. - - Improved performance of image export by reusing metadata resources - instead of always rebuilding and recompressing them. - - Improved performance of wimlib_update_image() by delaying the update to - the WIM's XML document until a write is requested. - - On Windows, the target of an extraction may now be a reparse point - (which will be dereferenced). - - On Windows, wimlib now correctly restores non-Microsoft reparse points. - However, this remains broken in NTFS-3g mode due to a libntfs-3g bug. - - On Windows, wimlib now has improved performance when archiving files - from a filesystem backed by a WIM (a "WIMBoot" setup). - - Several improvements to System Compression (compact mode) support: - - wof.sys (or wofadk.sys) is now automatically attached to the - target volume if needed. - - Compact-mode extractions now work correctly with wofadk.sys on - older versions of Windows. - - For compatibility with the Windows bootloader, the requested - compression format now is overridden on certain files. - - Other minor bugfixes. - -Version 1.8.2: - This release primarily contains various minor bug fixes and - improvements, including: - - Improved handling of deep directory structures. - - Fixed a bug where on 32-bit systems, the library could enter an - infinite loop if a WIM file was malformed in a specific way. - - Added a workaround for a case where libntfs-3g may report - duplicate streams in an NTFS file. - - Windows symbolic links and junctions in mounted WIM images are - now automatically rewritten to be valid in the mounted location. - - Reparse point fixes: correctly handle the "ReparseReserved" - field, and correctly handle "empty" (data-less) reparse points. - - On Windows, wimlib now acquires SeManageVolumePrivilege, which - is needed to create externally backed files using the - "wofadk.sys" driver. - - Improved validation of filenames. - - Improved LZMS decompression speed. - - The configure script now honors alternate pkg-config settings. - - Links have been updated to point to the new website. - - In addition, experimental support has been added for compressing - extracted files using System Compression on Windows 10. This - functionality is available through the new '--compact' option to - 'wimapply' and 'wimextract' as well as new library flags. - -Version 1.8.1: - Fixed a bug in the LZX decompressor: malicious input data could cause - out of bounds writes to memory (since wimlib v1.2.2). - - The output of the 'wiminfo' command now consolidates various boolean - flags (such as "Relative path junction") into a single line. - - A file can now have both an unnamed data stream ("file contents") and a - reparse point stream. Such files can exist as a result of the use of - certain Windows features, such as offline storage, including "OneDrive". - wimlib will now store and restore both streams on Windows as well as in - NTFS-3g mode. Microsoft's WIMGAPI also has this behavior. - - On Windows, named data streams of encrypted files are no longer stored - twice in WIM archives. - - On Windows, named data streams are now correctly extracted to existing - "readonly" directories. Before, an error would be reported. - - On Windows, it is now possible to do a "WIMBoot mode" extraction with - non-standalone WIMs such as delta WIMs. - - On Windows, when doing an extraction in "WIMBoot mode", files larger - than 4 gigabytes are now never extracted as externally backed. This - works around a bug in Microsoft's "WOF" driver. - - The '--enable-verify-compression' configure option has been removed. If - you want to verify a WIM file, use the 'wimverify' program. - - The way the "file count", "directory count", "total bytes", and "hard - link bytes" image statistics (stored in the WIM XML data) is calculated - has been slightly changed. - - In mounted WIM images, the disk usage provided for each file (st_blocks) - is now the compressed size rather than the uncompressed size. - - The performance of the NTFS-3g and Windows capture modes has been - slightly improved. - - On UNIX-like systems, symbolic links whose targets contain the backslash - character are now handled correctly (losslessly). - -Version 1.8.0: - Improved the LZX compressor. It is now 15-20% faster than before and - provides a slightly better compression ratio. - - Improved the LZMS compressor. It now provides a compression ratio - slightly better than WIMGAPI while still being faster and using slightly - less memory. - - The compression chunk size in solid resources, e.g. when capturing or - exporting a WIM file using the '--solid' option, now defaults to 64 MiB - (67108864 bytes) instead of 32 MiB (33554432 bytes). This provides a - better compression ratio and is the same value that WIMGAPI uses. The - memory usage is less than 50% higher than wimlib v1.7.4 and is slightly - lower than WIMGAPI's memory usage, but if it is too much, it is still - possible to choose a lower value, e.g. with the '--solid-chunk-size' - option to wimlib-imagex. - - The '--chunk-size' and '--solid-chunk-size' options to wimlib-imagex now - accept the 'K', 'M', and 'G' suffixes. - - Files are now sorted by name extension when creating a solid WIM file. - - Fixed various issues related to capture/apply of EFS-encrypted files on - Windows. - - The file list printed by 'wimdir' is now sorted by the platform-specific - case sensitivity setting, rather than always case sensitively. This - also affects the library function wimlib_iterate_dir_tree(). - - On Windows, some error and warning messages have been improved. - -Version 1.7.4: - The Windows binary distribution no longer contains third party DLLs. - These dependencies are instead compiled directly into the libwim DLL. - - Added more fixes for wimlib on non-x86 architectures such as ARM. - - Extracting files to a Windows PE in-memory filesystem no longer fails if - the target files do not yet exist. - - Improved the performance of XPRESS compression and LZMS decompression. - - Enabled SSSE3 accelerated SHA-1 computation in x86_64 Windows builds. - It will automatically be faster on newer Intel and AMD processors. - - Removed the --with-imagex-progname and --enable-more-assertions - configure options. - -Version 1.7.3: - Fix for very slow export from solid WIM / ESD files. - - Fix for LZX and LZMS algorithms on non-x86 architectures, such as ARM. - - New progress message: WIMLIB_PROGRESS_MSG_HANDLE_ERROR. Applications - may use this to treat some types of errors as non-fatal. - - The library now permits making in-memory changes to a WIMStruct backed - by a read-only WIM file. - - Fixes for "WIMBoot" extraction mode (Windows only): - - When not using the WOF driver, extraction no longer fails if the - disk containing the WIM file has too many partitions. - - When matching patterns in [PrepopulateList], all hard links of - each file are now considered. - - The system registry files are now automatically treated as being - in [PrepopulateList]. - - Added a hack to try to work around an intermittent bug in - Microsoft's WOF (Windows Overlay Filesystem) driver. - -Version 1.7.2: - Made more improvements to the XPRESS, LZX, and LZMS compressors. - - A number of improvements to the Windows port: - - Fixes for setting short filenames. - - Faster "WIMBoot" extraction. - - Updated and slimmed down the dependent DLLs. - - ACL inheritence bits are now restored. - - Mandatory integrity labels are now backed up and restored. - - Added a workaround for an issue where in rare cases, wimlib could create - a compressed data stream that could not be read correctly by Windows - after an extraction in "WIMBoot" mode. - - Library changes: - Added file count progress data for - WIMLIB_PROGRESS_MSG_EXTRACT_FILE_STRUCTURE and - WIMLIB_PROGRESS_MSG_EXTRACT_METADATA. - - Added support for testing file exclusions via the user-provided - progress function. - - Some documentation improvements. - - Made some clarifications to the license text in the COPYING file. - -Version 1.7.1: - Made more improvements to the XPRESS, LZX, and LZMS compressors. - - The default compression mode for wimcapture is now LZX compression in - its default mode, which is the same as '--compress=maximum'. - - You can now specify an optional integer compression level to the - '--compress' option; e.g. '--compress=lzx:75'. - - Made a minor change to the LZMS compressor and decompressor to fix an - incompatibility with the Microsoft implementation. In the unlikely - event that you created an LZMS-compressed WIM with wimlib v1.7.0 or - earlier and a checksum error is reported when extracting files from it - with wimlib v1.7.1, decompress it with v1.7.0 then compress it with - v1.7.1. - - Added 'verify' subcommand to wimlib-imagex. - - Notable library changes: - - Custom compressor parameters have been removed from the library - in favor of the simpler level-based API. - - Decompressor parameters have been removed entirely. - - Library users can now specify a custom file for warning and - error messages to be sent to, rather than the default of - standard error. - - New progress messages: - WIMLIB_PROGRESS_MSG_EXTRACT_FILE_STRUCTURE, - WIMLIB_PROGRESS_MSG_EXTRACT_METADATA. - - New function: wimlib_verify_wim(). - -Version 1.7.0: - Improved compression, decompression, and extraction performance. - - Improved compatibility with version 3584 WIM / ESD files: - - Add support for reading and writing multiple solid blocks per - archive, which WIMGAPI/DISM can create when appending an image. - - Correctly create solid blocks larger than 4 GiB. - - 'add' commands passed to wimupdate will now replace existing - nondirectory files by default. Use the --no-replace option to get the - old behavior. - - The license for the library now contains an exception that allows using - it under the LGPL. See the COPYING file for details. - - In reparse-point fixup mode (the default for capture), symbolic links - and junctions that point outside the tree being captured are no longer - excluded from capture. - - Added support for "WIMBoot" capture and extraction. See the - documentation for the new '--wimboot' option to wimcapture and wimapply - for more information. - - On UNIX-like systems, you can now backup and restore device nodes, named - pipes, and sockets. In addition, 32-bit user and group IDs are now - supported. - - The way that UNIX data is stored in WIM files has been changed. If you - captured any WIMs with the --unix-data option, to upgrade them you'll - need to apply them with --unix-data using wimlib-imagex v1.6.2, then - re-capture them with --unix-data using this version. - - wimlib now understands tagged metadata items, such as object IDs, that - can be stored in WIM directory entries. - - Removed the --hardlink and --symlink options to wimapply, since I don't - think they are too useful and they got in the way of improving the code. - - WIMs will now retain their GUIDs when rebuilt (e.g. with wimoptimize). - - The 'mkwinpeimg' script now supports writing the ISO image to standard - output. - - The element in WIM XML data is now exported correctly. - - On Windows, sparse file attributes are no longer set on extracted files. - Oddly enough, this actually saves disk space in some cases. - - On UNIX, configuring with --disable-xattr or --enable-xattr is no longer - supported. Mounting WIM images now always requires extended attribute - support. Use --without-fuse to disable support for mounting WIM images; - this will also disable the need for extended attribute support. - - Configuring with --enable-ssse3-sha1 now works correctly. - - The shared library version has been bumped up. The main - incompatibilities are: - - - WIMLIB_COMPRESSION_TYPE_XPRESS is now 1 and - WIMLIB_COMPRESSION_TYPE_LZX is now 2 (so it's the same as - WIMGAPI). - - - User-provided progress functions are now registered using a - separate function, wimlib_register_progress_function(). The - 'progress_func' argument to many functions no longer exists. - - - The return value from user-provided progress functions is now - significant. - - - A context argument has been added to the prototype of - user-provided progress functions. - - - 'struct wimlib_capture_config' has been removed. The library - now takes the path to the configuration file directly. This - affects wimlib_add_image(), wimlib_add_image_multisource(), - and wimlib_update_image(). However, a NULL value passed in - the argument retains the same meaning. - - - Removed deprecated functions: some (de)compression functions, - wimlib_extract_files(), and wimlib_print_metadata(). - - - Removed extraction flags: WIMLIB_EXTRACT_FLAG_HARDLINK, - WIMLIB_EXTRACT_FLAG_SYMLINK, WIMLIB_EXTRACT_FLAG_FILE_ORDER, - and WIMLIB_EXTRACT_FLAG_SEQUENTIAL. - - - Removed some progress messages: - WIMLIB_PROGRESS_MSG_APPLY_TIMESTAMPS, - WIMLIB_PROGRESS_MSG_EXTRACT_DIR_STRUCTURE_BEGIN, - WIMLIB_PROGRESS_MSG_EXTRACT_DIR_STRUCTURE_END. Numbering - stays the same. - - - Removed some error codes. Numbering stays the same. - - - Replaced WIMLIB_UNMOUNT_FLAG_LAZY with - WIMLIB_UNMOUNT_FLAG_FORCE. - - - WIM paths passed to progress functions now have a leading - slash. - -Version 1.6.2: - Case-insensitive comparisons of strings (e.g. filenames) containing - UTF-16 codepoints above 32767 are now done correctly. - - Fixed build failure on Mac OS X. - - wimunmount now provides the '--new-image' option to cause changes to a - read-write mounted image to be committed as a new image rather than as - an update of the mounted image. (The corresponding new library flag is - WIMLIB_UNMOUNT_FLAG_NEW_IMAGE.) - - The LZMS ("recovery") compression chunk size, or "dictionary size", may - now be up to 1 GiB (1,073,741,824 bytes). - - The performance of LZX ("maximum") and LZMS ("recovery") compression - with large chunk sizes has been slightly improved. - -Version 1.6.1: - Stored files with size exactly 4 GiB (4,294,967,296 bytes) are now - decompressed correctly. - - Fixed a bug in the LZX compressor introduced in v1.5.3. The bug - occurred in an unlikely case, and due to validity checks it did not - affect successfully created archives. - - Fixed a minor compatibility issue with the LZMS compressor and - decompressor. This is *not* the default compression type and was only - introduced in v1.6.0. In the unlikely event that you created an - LZMS-compressed WIM with v1.6.0 and a checksum error is reported when - applying it with v1.6.1, decompress it with v1.6.0 then compress it with - v1.6.1. - - Memory usage for LZMS and LZX compression has been decreased. - - wimextract now allows wildcard characters in paths specified on the - command line. Also, the '--strict-wildcards' option has been removed - and replaced with the inverse option '--nullglob'. See the - documentation for wimextract for more details and changes. - - The wimlib_extract_files() function is now considered deprecated in - favor of wimlib_extract_paths(). - - Fixed more permissions problems when extracting files on Windows. - - A new '--no-attributes' option has been added to wimapply and - wimextract. The library flag is WIMLIB_EXTRACT_FLAG_NO_ATTRIBUTES. - - The default chunk size is now set correctly when changing the - compression type of a WIM, for example with 'wimoptimize'. - - The '--metadata' option to wiminfo has been replaced with the - '--detailed' option to wimdir. - - In relevant wimlib-imagex commands, '--solid' may now be used as an - alias for '--pack-streams'. - -Version 1.6.0: - Support for extracting and updating the new version 3584 WIMs has been - added. These WIMs typically pack many streams ("files") together into a - single compressed resource, thereby saving space. This degrades the - performance of random access (such as that which occurs on a mounted - image), but optimizations have been implemented for extraction. These - new WIM files also typically use a new compression format (LZMS), which - is similar to LZMA and can offer a better compression ratio than LZX. - These new WIM files can be created using `wimcapture' with - the '--compress=lzms --pack-streams' options. Note: this new WIM format - is used by the Windows 8 web downloader, but important segments of the - raw '.esd' files are encrypted, so wimlib will not be able to extract - such files until they are first decrypted. - - wimlib now supports extracting files and directories from a WIM image - based on a "listfile" that itself contains the list of paths to extract. - For `wimextract', the syntax is to specify @LISTFILE instead of a PATH, - and for the library itself, the new APIs are wimlib_extract_pathlist() - and wimlib_extract_paths(). Path globs containing wildcard characters - are supported. - - For searching WIM files, wimlib now has configurable case sensitivity. - The default on Windows is still case-insensitive and the default on - UNIX-like systems is still case-sensitive, but this can be overridden - on either platform through flags to wimlib_global_init(). For - `wimlib-imagex', the environmental variable WIMLIB_IMAGEX_IGNORE_CASE - can be set to 1 or 0 for case-insensitive or case-sensitive behavior, - respectively. - - Support for compression chunk sizes greater than the default of 32768 - bytes has been added. A larger chunk size typically results in a better - compression ratio. However, the MS implementation is seemingly not - compatible with all chunk sizes, especially for LZX compression, so the - defaults remain unchanged, with the exception of the new LZMS-compressed - WIMs, which use a larger chunk size by default. - - The compression/decompression API exported by wimlib has been changed. - Now one set of functions handles all supported compression formats. - - `wimcapture' and `wimappend' will now display the progress of scanning - the directory tree to capture, in addition to the progress of writing - data to the WIM. The '--verbose' option no longer does anything. The - library API change for this is the addition of several members to - `struct wimlib_progress_info_scan' available to progress callbacks. - - `mkwinpeimg' now correctly handles the '--start-script' option when the - start script is not in the working directory. - - Sequential extraction, previously requested by using - WIMLIB_EXTRACT_FLAG_SEQUENTIAL, is now the default. - WIMLIB_EXTRACT_FLAG_FILE_ORDER can be used to get the old default - behavior (extract in file order). - -Version 1.5.3: - The new LZX compressor added in v1.5.2 has been improved and is now - enabled by default, except when `wimcapture' or `wimappend' is run - *without* the '--compress' option, in which case the faster LZX - compressor is used (the same as before). This behavior is reasonably - consistent with ImageX which actually uses "fast" (XPRESS) compression - by default. In those cases, use '--compress=maximum' to explicitly - capture a WIM image using the new (slower but better) LZX compressor. - - The '--compress-slow' option still exists to `wimlib-imagex optimize', - but its new behavior is to tweak the new LZX compressor even more to - produce an even better compression ratio at the cost of more time spent - compressing. - - `wimlib-imagex optimize' now supports the '--compress=TYPE' option, - which recompresses the WIM file using the specified compression TYPE. - The new library API function used for this is - wimlib_set_output_compression_type(). - - Added the wimlib_get_xml_data() function to allow library clients to - easily retrieve the raw XML data from a WIM file if needed. - - Fixed a bug that could cause an error code to be incorrectly returned - when writing XML data containing a element. - - Mounted WIM images will now correctly show the default file stream even - if appears in the alternate data stream entries of the corresponding WIM - directory entry. - -Version 1.5.2: - Added a new experimental LZX compressor which can be enabled by passing - '--compress-slow' to `wimlib-imagex capture' or `wimlib-imagex - optimize'. (The latter is only applicable if the WIM is already - LZX-compressed and the '--recompress' option is also given.) The - experimental compressor is much slower but compresses the data slightly - more --- currently usually to within a fraction of a percent of the - results from WIMGAPI/ImageX. - - A workaround has been added for compatibility with versions of WinPE - that interpret alternate data stream entries in the boot WIM - incorrectly. - - An alignment bug that caused a crash in the LZX decompressor on some - builds was fixed. - - wimlib now attempts to clear the WIM_HDR_FLAG_WRITE_IN_PROGRESS flag in - the WIM header when restoring the previous state of a WIM it failed to - successfully update. - - Added a workaround to avoid an access denied error on Windows when - replacing a WIM file that another process has opened. - -Version 1.5.1: - wimlib can now open WinPE WIMs from WAIK v2.1, which had a quirk that - needed to be handled. - - A bug in the interpretation of negative IMAGE indices in the - --update-of=[WIMFILE:]IMAGE option to `wimlib-imagex capture' and - `wimlib-imagex append' has been fixed. - - A workaround has been added to successfully apply security descriptors - with empty DACLs when the NTFS-3g apply mode is being used with NTFS-3g - 2013.1.13 or earlier. - - `wimlib-imagex capture' can now accept the '--delta-from' option - multiple times. - -Version 1.5.0: - Added support for "pipable" WIMs. Pipable WIMs allow capturing images - to standard output and applying images from standard input, but they are - not compatible with Microsoft's software and are not created by default. - See the documentation for --pipable flag of `wimlib-imagex capture' for - more information. - - To better support incremental backups, added support for declaring an - image as a modified form of another image. See the documentation for - the '--update-of' option of `wimlib-imagex append' and `wimlib-imagex - capture'. - - Added supported for "delta" WIMs. See the documentation for the - '--delta-from' option of `wimlib-imagex capture'. - - The library support for managing split WIMs has been changed to support - other arrangements, such as delta WIMs, and be easier to use. This - change is visible in `wimlib-imagex', which also can now accept the - '--ref' option multiple times, and also now supports "delta" WIMs as - mentioned above. - - wimlib now preserves WIM integrity tables by default, even if - WIMLIB_WRITE_FLAG_CHECK_INTEGRITY is not specified. This changes the - behavior of `wimlib-imagex' whenever the WIM being operated on contains - an integrity table and the '--check' option is not specified. - - `wimlib-imagex capture' now creates LZX-compressed WIMs by default - (when --compress is not specified). This provides the best compression - ratio by default, which is usually what is desired, at a cost of some - speed. - - `wimlib-imagex' now supports being invoked as wimCOMMAND, where COMMAND - is the command as in `wimlib-imagex COMMAND'; for example, it can be - invoked as `wimapply' as an alternative to `wimlib-imagex apply'. The - appropriate hard links are created in UNIX installations of - `wimlib-imagex', while for the Windows distribution of `wimlib-imagex', - batch files that emulate this behavior are generated. - - Security descriptors are now extracted correctly on Windows. - - Fixed archiving DOS names in NTFS-3g capture mode. - - The extraction code has been rewritten and it will now be easier to - support new features on all supported backends (currently Win32, UNIX, - and NTFS-3g). For example, hard-linked extraction mode (--hardlink) is - now supported on all backends, not just UNIX. - - `mkwinpeimg' now supports grabbing files from the WAIK supplement rather - than the WAIK itself. - - wimlib_global_init() now, by default, attempts to acquire additional - privileges on Windows, so library clients need not do this. - - This update bumps the shared library version number up to 9, since it is - not binary compatibible with previous releases. - -Version 1.4.2: - Fixed bug in `wimlib-imagex export' that made it impossible to export an - image from a WIM that is readonly at the filesystem level. - - Return error code rather than segfaulting when trying to list files from - a non-first part of a split WIM. - - Joining a WIM will now preserve the RP_FIX and READONLY flags. - -Version 1.4.1: - On Windows, paths given to wimlib-imagex are now treated case - insensitively. - - Improved behavior regarding invalid filenames; in particular, on - Windows, wimlib-imagex will, when extracting, now omit (with an option - to override this default) filenames differing only in case, or filenames - containing characters not valid on Windows. - - On Windows, wimlib now supports capturing and extracting long paths - (longer than the so-called MAX_PATH). - - On Windows, `wimlib-imagex update' now acquires proper privileges when - running as an Administrator. - - `wimlib-imagex update' will now complain if no image is specified when - trying to update a multi-image WIM. - - `wimlib-imagex update' now supports specifying a single update command - directly on the command line using the --command option. - - wimlib-imagex will now choose different units for progress messages, - depending on the amount of data that needs to be processed. - - `wimlib-imagex append' will now generate a unique WIM image name if no - name is specified and the defaulted name already exists in the WIM. - - wimlib now allows you to create unnamed WIM images, which can then only - be referred to by index. - - wimlib now allows you to explicitly declare you want write access to a - WIM by providing the WIMLIB_OPEN_FLAG_WRITE_ACCESS flag to - wimlib_open_wim(). - - wimlib now respects the WIM_HDR_FLAG_READONLY flag when set in the WIM - header. - - Progress callbacks have been added to wimlib's wimlib_update_image() - function. - - Added wimlib_get_wim_info(), wimlib_set_wim_info(), - wimlib_iterate_dir_tree(), and wimlib_iterate_lookup_table() functions - to the library. - - NTFS-3g capture now only warns about two conditions previously treated - as errors. - - Fixed a couple issues with using wimlib-imagex on UDF filesystems on - Windows. - - wimlib now correctly detects and returns an error when reading a WIM - image with a cyclic directory structure. (Fun fact: such a WIM will - crash Microsoft's software.) - -Version 1.4.0: - Added new "extract" and "update" subcommands to wimlib-imagex, along - with associated APIs in the library. These commands are intended mainly - for Windows use but can be used on UNIX as well. - - Many documentation improvements. - - Fixed a bug in the Windows build where relative symbolic links were not - captured in reparse-point fixup mode. - - Fixed a bug in the Windows build where file handles were left open to - the WIM file, causing `wimlib_imagex optimize' to fail in some cases. - - Fixed a bug in the Windows build of wimlib-imagex where globbing - split-WIM parts could cause the program to crash. - - Fixed a bug where the creation time of WIM images would be shown instead - of the last modification time. - - With the Windows build it is now possible to restore a WIM containing - symbolic links as a non-Administrator; however you will receive warnings - about not being able to extract the symbolic links. - -Version 1.3.3: - Capturing a WIM image should now be significantly faster in most cases - due to improved use of the operating system's cache and avoiding reading - files twice whenever possible. - - The Windows build should now work on Windows XP. - - The Windows build now supports capturing and restoring hidden, - compressed, sparse, and encrypted files. - - The Windows build now supports capturing and applying WIM images from - filesystems other than NTFS (with some reduced functionality). - - The Windows build now extracts short names correctly. - - Added support for "reparse-point" fixups (i.e. fixing up of symbolic - links). See docs for --rpfix and --norpfix flags of `wimlib-imagex - capture' and `wimlib-imagex apply'. - - The performance of splitting and joining WIMs should be slightly - improved. - - The LZX and XPRESS compression and decompression functions are now - exported from the library. - -Version 1.3.2: - Improvements and bugfixes for the Windows build. - - Added --strict-acls options. - - Fixed the way that wimlib determines the order of images in the WIM. - -Version 1.3.1: - Since wimlib can now be used on Windows, wimlib's implementation of - ImageX has been renamed to wimlib-imagex to avoid confusion with - Microsoft's implementation of ImageX, which would have the same file - name ("imagex.exe"). If you really don't like this you can pass the - --with-imagex-progname option to `configure' to choose a different name, - or even simply rename the binary yourself (but the former way will - configure the man pages to use the chosen name). - - Various bugs fixed in the Windows build. Mainly to do with capturing - and restoring alternate data streams correctly in weird cases, and - requesting the correct privileges when opening files. Also added the - --noacls options to wimlib-imagex capture, append, and apply. - - Windows build again: FindFirstStreamW() and FindNextStreamW() are now - dynamically loaded, so this may make the library compatible with Windows - XP (however, there may still be other problems). - -Version 1.3.0: - Added experimental support for native Windows builds. Binaries can be - downloaded from the SourceForge page. - - --source-list option added to `imagex capture' and `imagex append'. - - Better support for different character encodings. - -Version 1.2.6: - Storing UNIX file owners, groups, and modes in WIM images is now - possible using `imagex capture' with the --unix-data flag. - - Minor bug fixes and documentation fixes. - -Version 1.2.5: - NTFS capture: Fixed capturing duplicate reparse points. - - NTFS capture: Capture first unnamed stream if there are more than one - (print warning instead of error). - - Allow multiple test cases to execute concurrently (e.g. make -j2 check). - -Version 1.2.4: - Added --arch switch to mkwinpeimg script to support getting AMD64 WinPE - from the WAIK. - - Update to work with ntfs-3g version 2013.1.13. - -Version 1.2.3: - Fixed truncating file to shorter but non-zero length on read-write - mounted WIM image. - - Various code cleanups and minor documentation fixes. - -Version 1.2.2: - LZX and XPRESS decompression have received some additional optimizations - and should now be even faster. (Although, they were already pretty - fast--- much faster than typical I/O speeds.) - - Fixed a bug introduced in v1.2.1 that would cause a directory tree - containing hard links to be captured incorrectly in some cases. - -Version 1.2.1: - By default, unmounting a read-write mounted WIM with 'imagex unmount - --commit' will now change the WIM in-place without needing to write the - entire WIM again. Use 'imagex unmount --commit --rebuild' to get the - old behavior. - - 'imagex unmount' no longer has a hard-coded limit of 10 minutes to wait - for a response from the daemon servicing the mounted WIM. Instead, - every second 'imagex unmount' will check if the daemon is still alive, - and keep waiting if so, otherwise terminate with an error. - - 'imagex unmount --commit' on a read-write mounted WIM will now print - progress information regarding the writing of new or modified streams - the WIM, just like when capturing or appending a WIM. - - A small change has been made to XPRESS compression and it should improve - the compression ratio slightly. - - A change was made that may improve performance slightly when applying a - WIM image to a NTFS volume. - - Microsoft has managed to introduce even more bugs into their software, - and now the WIMs for Windows 8 have incorrect (too low) reference counts - for some streams. This is unsafe because such streams can be removed - when they are in actuality still referenced in the WIM (perhaps by a - different image). wimlib will now work around this problem by fixing - the stream reference counts. This is only done when wimlib_delete_image() is - called ('imagex delete') or when wimlib_mount_image() is called with - WIMLIB_MOUNT_FLAG_READWRITE ('imagex mountrw'). Please note that this - requires reading the metadata for all images in the WIM, so this will - make these operations noticably slower on WIMs with multiple images. - - Various other bugfixes. - -Version 1.2.0: - Appending images to a WIM is now be done by default without re-building - the whole WIM. Use the --rebuild flag to get the old behavior (which - was to re-build the entire WIM when a new image is appended). - - A new command `imagex optimize' is now available to manually re-build a - WIM that has wasted space due to repeated appends. - - Progress information has been improved, and now arbitrary callback - functions can be used to show the progress of a WIM operation. - - A possible bug with changing the bootable image of a WIM was fixed. - - Some advisory locking is now done to prevent two processes from - modifying a WIM at the same time (but only in some cases). For example, - you cannot mount two images from a WIM read-write at the same time. - - Some functions have been reorganized: - * wimlib_mount() renamed to wimlib_mount_image(). - * wimlib_unmount() renamed to wimlib_unmount_image(). - * wimlib_overwrite_xml_and_header() removed as - wimlib_overwrite() suffices now. - * wimlib_apply_image_to_ntfs_volume() removed as - wimlib_extract_image() suffices now. - * wimlib_add_image_from_ntfs_volume() removed as - * wimlib_add_image() suffices now. - - Previously, the soname of libwim.so has been 0.0.0, despite many - interface changes. The soname is now updated to 1.0.0 and will now be - updated each release. - -Version 1.1.0: - Resources will now be compressed using multiple threads by default. - (This applies to `imagex capture', `imagex append', and `imagex - export'). - - Some performance improvements in mounted WIMs. - - More progress information is shown when capturing a WIM. - -Version 1.0.4: - Lots of minor fixes, code cleanups, and some documentation updates. - Nothing in particular is really noteworthy. - -Version 1.0.3: - LZX and XPRESS compression improvements. - - Fixed calculation of Directory Count, File Count, Total Bytes, and Hard - Link Bytes of the WIM. - -Version 1.0.2: - Fixed bug when capturing NTFS file with multiple named data streams. - - Internally, we are now using inode structures, even though these don't - appear literally in the WIM file. This simplifies some of the code - (mainly for WIM mounting) and likely fixed a few problems, although it - needs more testing. - -Version 1.0.1: - Fixed problem when exporting images from XPRESS to LZX compressed WIM or - vice versa - -Version 1.0.0: - Enough changes to call it version 1.0.0! - - Capturing a WIM directly from a NTFS volume, and applying a WIM directly - to a NTFS volume, is now supported. - - Hard links and symbolic links have much improved support. They are - supported for WIM capture, WIM application, and mounted WIMs (you can - even make them on read-write mounted WIMs). - - Alternate data streams are now supported on mounted WIMs through an - xattr or a Windows-style stream interface. Also they are supported when - capturing a WIM from NTFS or applying a WIM to NTFS. - - Split WIMs are better supported. You may now apply an image directly - from a split WIM, mount an image from a split WIM read-only, or export - an image from a split WIM. - - Using a capture configuration file is now supported (but not fully yet). - - SHA1 message digests are checked in more places, so we can make sure - applied and captured data is correct. - - Man pages have been updated and consolidated. - -Version 0.7.2: - Fixed segfault when unmounting read-only WIM. - -Version 0.7.1: - Support for joining and splitting WIMs. - Also, security data is now preserved by default. - -Version 0.6.3: - Can now build with older gcc and system headers, like on CentOS 5. - -Version 0.6.2: - Fixed bug that made it impossible to overwrite files in read-write - mount. - -Version 0.6.1: - Write byte-order mark before WIM XML data. (imagex.exe requires this to - be there.) diff --git a/NEWS.md b/NEWS.md new file mode 100644 index 00000000..cab3d7d6 --- /dev/null +++ b/NEWS.md @@ -0,0 +1,1214 @@ +# wimlib release notes + +## Version 1.14.0-BETA2 + +- Removed libxml2 and libcrypto (OpenSSL) as dependencies of wimlib. Also + removed winpthreads as a dependency of wimlib on Windows. + +- The README.WINDOWS file and the `windows-build.sh` script (renamed from + `make-windows-release`) have been improved to make it easier to build wimlib + on Windows. The instructions now use MSYS2 (instead of Cygwin as they did + before), and both gcc and clang are supported. Windows ARM64 builds are now + supported (experimentally) as well. + +- Improved the performance of the Windows binaries on CPUs that have SHA-1 + instructions. + +- Fixed a bug in `wimsplit` where it didn't accept part sizes of 4 GiB or larger + on Windows and on 32-bit platforms. + +- Removed support for Windows XP. + +## Version 1.13.6 + +- `wimsplit` no longer prints a success message on failure. + +- `wimlib_iterate_dir_tree()` no longer hashes files that haven't yet been + written to the WIM file. + +- Reduced the maximum number of file descriptors that wimlib can use when + extracting files from a WIM image on macOS. + +- The files that used the CC0 public domain dedication now use the MIT license + instead. + +- Removed some configuration options (`--disable-assertions`, + `--disable-error-messages`, and `--disable-multithreaded-compression`) that + probably weren't being used by anyone. + +## Version 1.13.5 + +- Exporting "all" images from a WIM file no longer fails if multiple + images in that WIM file have the same name. + +- wimlib now warns rather than aborts if two files have the same SHA-1 + hash but different sizes. + +- Fixed build errors with the latest version of MinGW-w64. + +## Version 1.13.4 + +- wimsplit now prints progress messages regularly rather than just once per WIM + part. + +- Added support for a data recovery mode which causes files to be extracted even + if they are corrupted. The option is `--recover-data` for `wimapply` and + `wimextract`, and `WIMLIB_EXTRACT_FLAG_RECOVER_DATA` for the library. Note + that this option won't help with all types of corruption; some types of + corruption will still cause a fatal error. + +## Version 1.13.3 + +- On Windows, improved performance of capturing an entire drive in some cases. + +- On Windows, fixed leaking a directory handle (or triggering a SEH exception + when running under a debugger) when referencing WIM files. + +- On Windows, when applying a Windows OS image using the `--compact` flag, + bootloader files can now be compressed with stronger compression algorithms if + the version of Windows is recent enough to support it. + +- Clarified the license text. + +## Version 1.13.2 + +- Prevented miscompilation with gcc 10 at -O3 due to [a gcc + bug](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94994). + +- Avoided some compiler warnings with gcc 9 and later. + +- The `mkwinpeimg` script now also looks for syslinux modules in + `/usr/share/syslinux`, to handle where openSUSE installs them. + +- Removed obsolete packaging files from the source tree. + +## Version 1.13.1 + +- Fixed a crash or incorrect output during LZMS compression with a compression + level greater than 50 and a chunk size greater than 64 MiB. This affected + wimlib v1.8.0 and later. In the unlikely event that you used all these + non-default compression settings in combination, e.g. `wimcapture --solid + --solid-compress=LZMS:100 --solid-chunk-size=128M`, run `wimverify` on your + archives to verify your data is intact. + +## Version 1.13.0 + +- On Windows, wimlib now supports capturing and applying extended attributes + (EAs). It is compatible with DISM with the `/EA` option, available since + Windows 10 version 1607. wimlib's EA support is on by default and works on + older versions of Windows too. + +- Partially fixed a bug where `[ExclusionException]` entries didn't take effect + when the containing directory is matched by `[ExclusionList]`. It now works + when the `[ExclusionException]` patterns are absolute. For example, listing + `/dir/file` in `[ExclusionException]` now works even if `/dir` is matched by + `[ExclusionList]`. + +- Added a `--create` option to `wimappend` which makes it create the WIM + file (like `wimcapture`) if it doesn't exist yet. + +- Added an `--include-integrity` option to various `wimlib-imagex` commands. + `--include-integrity` is like `--check`, but it will just include an integrity + table in the output WIM(s), while skipping verification of any existing + integrity tables. This can be useful to avoid unwanted verification of large + WIM files, e.g. WIMs given by `--delta-from`. + +- `wimextract` now reads a pathlist file from standard input when `@-` is given + as an argument. + +- `wimsplit` (API: `wimlib_split()`) now correctly handles a dot in the path to + the first split WIM part, prior to the filename extension. + +- `wimlib-imagex --version` now shows the version of the library it is actually + using (in case it is different from `wimlib-imagex`'s version). + +## Version 1.12.0 + +- Fixed a bug that was causing the LZMS decompressor to be miscompiled with GCC + 7 (this broke extracting "solid" archives). + +- The Windows 10 Recycle Bin directory (`\$RECYCLE.BIN`) has been added to the + default exclusion list. + +- Added a `--quiet` option to `wimlib-imagex`. + +- The `mkwinpeimg` script now also looks for the syslinux BIOS modules in the + directory `/usr/lib/syslinux/modules/bios`. + +- Files with timestamps before the year 1970 are now extracted correctly to + UNIX-style filesystems, are displayed correctly by `wimdir --detailed`, and + show up correctly in mounted WIM images. + +- Files with timestamps after the year 2038 are now displayed correctly by the + 32-bit Windows build of wimlib. + +## Version 1.11.0 + +- Fixed a data corruption bug (incorrect compression) when storing an already + highly-compressed file in an LZX-compressed WIM with a chunk size greater than + or equal to 64K. Note that this is not the default setting and such WIMs are + not supported by Microsoft's WIM software, so only users who used the + `--chunk-size` option to `wimlib-imagex` or the + `wimlib_set_output_chunk_size()` API function may have been affected. This + bug was introduced in wimlib v1.10.0. See [this forum + thread](https://wimlib.net/forums/viewtopic.php?f=1&t=300) for more details. + +- On all platforms, sparse files are now extracted as sparse. + +- Sparse files captured from UNIX-style filesystems are now marked as sparse in + the resulting WIM image. + +- Added support for storing Linux-style extended attributes in WIM images. When + the `--unix-data` option is used on Linux, `wimlib-imagex` now captures and + applies extended attributes, in addition to the already-supported standard + UNIX file permissions (owner/group/mode) and special files. + +- `--delta-from` is now supported by `wimappend`. (Previously it was only + supported by `wimcapture`.) + +- On Windows, improved the way in which files deduplicated with Windows' Data + Deduplication feature are captured. + +- The development files needed to link with wimlib using Visual Studio are now + included in the Windows release archives. + +- `wimlib.h` can now be included by Visual Studio without errors. + +- The example programs can now be compiled in C++ mode, and they also now work + on Windows. + +- Updated `mkwinpeimg` to work correctly on images that have a `windows` + (lower case) directory rather than a `Windows` (upper case) directory. + +- Fixed configuring with `--enable-ssse3-sha1` from release tarball (the file + `nasm_lt.sh` was missing). + +- Made some documentation improvements. + +## Version 1.10.0 + +- The LZX compression ratio has been slightly improved. The default mode, LZX + level 50, is now almost as good as the old LZX level 100, while being nearly + the same speed as before. + +- Decompression performance has been slightly improved. + +- Filenames are now always listed in NTFS collation order. + +- On UNIX-like systems, wimlib can now process Windows filenames that are + not valid Unicode due to the presence of unpaired surrogates. + +- On UNIX-like systems, wimlib now always assumes UTF-8 encoding with the + addition of surrogate codepoints. Consequently, the environmental variable + `WIMLIB_IMAGEX_USE_UTF8` and the flag `WIMLIB_INIT_FLAG_ASSUME_UTF8` no longer + have any effect. + +- wimlib no longer depends on iconv. + +- Reduced memory usage slightly. + +- When a WIM image is applied in NTFS-3G mode, security descriptors are now + created in NTFS v3.0 format when supported by the volume. + +- Workarounds for bugs in libntfs-3g version 2013.1.13 and earlier have been + removed. Users are advised to upgrade to a later version of libntfs-3g. + +- On Windows, wimlib now supports case-sensitive filename extraction when + supported by the underlying operating system and filesystem (operating system + support requires a registry setting). + +## Version 1.9.2 + +- On UNIX, wimlib can now overwrite readonly files when extracting. + +- On Windows, fixed a bug where wimlib could leave a null DACL (a.k.a. "no NTFS + permissions") set on some existing directories after extraction. + +- On Windows, when applying a WIM image in "WIMBoot mode" when the WOF driver is + not loaded, wimlib can now correctly register a new WIM file with the target + volume when the target volume previously had had WIM files unregistered. + +- Added a new testing program. + +- Clarified the main license text and updated public domain dedications for + certain files to be more thorough. + +## Version 1.9.1 + +- Object IDs are now saved and restored on Windows and in NTFS-3G mode. + +- Reduced memory usage when exporting large numbers of WIM images. + +- Non UTF-8 locales are now detected correctly. + +- Addressed compiler warnings and enabled "silent" make rules by default. + +- Windows-specific updates: + + - Fixed a bug where duplicate backslashes could be generated in link targets + when extracting symbolic links and junctions. + + - Fixed a bug where the `.cmd` shortcuts for `wimlib-imagex` wouldn't work if + their full path contained a space. + + - Fixed bugs related to scanning SMB filesystems. + + - Added warning message about known issue with WindowsApps folder. + + - Added instructions for building from source on Windows. + + - VSS support is no longer marked "experimental". + + - Added missing license file for libdivsufsort-lite. + +## Version 1.9.0 + +- Added experimental support for Windows VSS (Volume Shadow Copy Service). The + new `--snapshot` argument to `wimcapture` makes wimlib automatically create + and use a temporary VSS snapshot when capturing a WIM image. + +- Implemented setting of Windows-specific XML information, such as architecture, + system root, and version details. This information is now automatically set + in newly captured WIM images, when appropriate. + +- Improved performance of directory tree scans on Windows. + +- On Windows, to improve capture performance, wimlib now sometimes opens files + by inode number rather than by path. This is enabled for `wimcapture` and + `wimappend`, but for now other applications have to opt-in. + +- The progress messages printed by `wimlib-imagex` while writing WIM files have + been slightly tweaked. + +- Progress information for directory tree scans now counts all hard links. + Also, on Windows `\\?\` is no longer stripped from the current path. + +- Added a new `--image-property` option to `wimcapture`, `wimappend`, and + `wiminfo`. This option lets you assign values to elements in a WIM file's XML + document by name. + +- The `wimlib_get_image_property()` and `wimlib_set_image_property()` API + functions now support numerically indexed elements. + +- Fixed a bug where, on Windows, wimlib would change the security descriptor of + the target directory of an extraction even when the `--no-acls` option was + specified. + +## Version 1.8.3 + +- Fixed a bug with libntfs-3g extraction present since v1.8.1. Sometimes, some + Microsoft software would not correctly recognize data in the resulting + filesystem. + +- Made some small improvements to the compression algorithms: + - LZX compression ratio was slightly improved. + - XPRESS compression ratio and speed was slightly improved. + - LZMS compression speed was slightly improved. + +- Improved handling of WIM XML data. wimlib no longer drops unrecognized + elements when exporting images. In addition, two API functions were added for + better access to elements in the XML document: `wimlib_get_image_property()` + and `wimlib_set_image_property()`. + +- Added support for (unsafe) in-place compaction of WIM files. + +- Improved performance of image export by reusing metadata resources + instead of always rebuilding and recompressing them. + +- Improved performance of `wimlib_update_image()` by delaying the update to the + WIM's XML document until a write is requested. + +- On Windows, the target of an extraction may now be a reparse point + (which will be dereferenced). + +- On Windows, wimlib now correctly restores non-Microsoft reparse points. + However, this remains broken in NTFS-3G mode due to a libntfs-3g bug. + +- On Windows, wimlib now has improved performance when archiving files + from a filesystem backed by a WIM (a "WIMBoot" setup). + +- Several improvements to System Compression (compact mode) support: + + - `wof.sys` (or `wofadk.sys`) is now automatically attached to the target + volume if needed. + + - Compact-mode extractions now work correctly with `wofadk.sys` on older + versions of Windows. + + - For compatibility with the Windows bootloader, the requested compression + format now is overridden on certain files. + +- Other minor bugfixes. + +## Version 1.8.2 + +- This release primarily contains various minor bug fixes and improvements, + including: + + - Improved handling of deep directory structures. + + - Fixed a bug where on 32-bit systems, the library could enter an infinite + loop if a WIM file was malformed in a specific way. + + - Added a workaround for a case where libntfs-3g may report duplicate streams + in an NTFS file. + + - Windows symbolic links and junctions in mounted WIM images are now + automatically rewritten to be valid in the mounted location. + + - Reparse point fixes: correctly handle the "ReparseReserved" field, and + correctly handle "empty" (data-less) reparse points. + + - On Windows, wimlib now acquires SeManageVolumePrivilege, which is needed to + create externally backed files using the `wofadk.sys` driver. + + - Improved validation of filenames. + + - Improved LZMS decompression speed. + + - The configure script now honors alternate pkg-config settings. + + - Links have been updated to point to the new website. + +- In addition, experimental support has been added for compressing extracted + files using System Compression on Windows 10. This functionality is available + through the new `--compact` option to `wimapply` and `wimextract` as well as + new library flags. + +## Version 1.8.1 + +- Fixed a bug in the LZX decompressor: malicious input data could cause out of + bounds writes to memory (since wimlib v1.2.2). + +- The output of the `wiminfo` command now consolidates various boolean flags + (such as "Relative path junction") into a single line. + +- A file can now have both an unnamed data stream ("file contents") and a + reparse point stream. Such files can exist as a result of the use of certain + Windows features, such as offline storage, including "OneDrive". wimlib will + now store and restore both streams on Windows as well as in NTFS-3G mode. + Microsoft's WIMGAPI also has this behavior. + +- On Windows, named data streams of encrypted files are no longer stored twice + in WIM archives. + +- On Windows, named data streams are now correctly extracted to existing + "readonly" directories. Before, an error would be reported. + +- On Windows, it is now possible to do a "WIMBoot mode" extraction with + non-standalone WIMs such as delta WIMs. + +- On Windows, when doing an extraction in "WIMBoot mode", files larger + than 4 gigabytes are now never extracted as externally backed. This + works around a bug in Microsoft's "WOF" driver. + +- The `--enable-verify-compression` configure option has been removed. If you + want to verify a WIM file, use the `wimverify` program. + +- The way the "file count", "directory count", "total bytes", and "hard link + bytes" image statistics (stored in the WIM XML data) is calculated has been + slightly changed. + +- In mounted WIM images, the disk usage provided for each file (`st_blocks`) is + now the compressed size rather than the uncompressed size. + +- The performance of the NTFS-3G and Windows capture modes has been slightly + improved. + +- On UNIX-like systems, symbolic links whose targets contain the backslash + character are now handled correctly (losslessly). + +## Version 1.8.0 + +- Improved the LZX compressor. It is now 15-20% faster than before and provides + a slightly better compression ratio. + +- Improved the LZMS compressor. It now provides a compression ratio slightly + better than WIMGAPI while still being faster and using slightly less memory. + +- The compression chunk size in solid resources, e.g. when capturing or + exporting a WIM file using the `--solid` option, now defaults to 64 MiB + (67108864 bytes) instead of 32 MiB (33554432 bytes). This provides a better + compression ratio and is the same value that WIMGAPI uses. The memory usage + is less than 50% higher than wimlib v1.7.4 and is slightly lower than + WIMGAPI's memory usage, but if it is too much, it is still possible to choose + a lower value, e.g. with the `--solid-chunk-size` option to `wimlib-imagex`. + +- The `--chunk-size` and `--solid-chunk-size` options to `wimlib-imagex` now + accept the 'K', 'M', and 'G' suffixes. + +- Files are now sorted by name extension when creating a solid WIM file. + +- Fixed various issues related to capture/apply of EFS-encrypted files on + Windows. + +- The file list printed by `wimdir` is now sorted by the platform-specific + case sensitivity setting, rather than always case sensitively. This + also affects the library function `wimlib_iterate_dir_tree()`. + +- On Windows, some error and warning messages have been improved. + +## Version 1.7.4 + +- The Windows binary distribution no longer contains third party DLLs. These + dependencies are instead compiled directly into the libwim DLL. + +- Added more fixes for wimlib on non-x86 architectures such as ARM. + +- Extracting files to a Windows PE in-memory filesystem no longer fails if + the target files do not yet exist. + +- Improved the performance of XPRESS compression and LZMS decompression. + +- Enabled SSSE3 accelerated SHA-1 computation in `x86_64` Windows builds. It + will automatically be faster on newer Intel and AMD processors. + +- Removed the `--with-imagex-progname` and `--enable-more-assertions` configure + options. + +## Version 1.7.3 + +- Fix for very slow export from solid WIM / ESD files. + +- Fix for LZX and LZMS algorithms on non-x86 architectures, such as ARM. + +- New progress message: `WIMLIB_PROGRESS_MSG_HANDLE_ERROR`. Applications may + use this to treat some types of errors as non-fatal. + +- The library now permits making in-memory changes to a WIMStruct backed by a + read-only WIM file. + +- Fixes for "WIMBoot" extraction mode (Windows only): + + - When not using the WOF driver, extraction no longer fails if the disk + containing the WIM file has too many partitions. + + - When matching patterns in `[PrepopulateList]`, all hard links of each file + are now considered. + + - The system registry files are now automatically treated as being in + `[PrepopulateList]`. + + - Added a hack to try to work around an intermittent bug in Microsoft's WOF + (Windows Overlay Filesystem) driver. + +## Version 1.7.2 + +- Made more improvements to the XPRESS, LZX, and LZMS compressors. + +- A number of improvements to the Windows port: + + - Fixes for setting short filenames. + + - Faster "WIMBoot" extraction. + + - Updated and slimmed down the dependent DLLs. + + - ACL inheritence bits are now restored. + + - Mandatory integrity labels are now backed up and restored. + +- Added a workaround for an issue where in rare cases, wimlib could create a + compressed data stream that could not be read correctly by Windows after an + extraction in "WIMBoot" mode. + +- Library changes: + + - Added file count progress data for + `WIMLIB_PROGRESS_MSG_EXTRACT_FILE_STRUCTURE` and + `WIMLIB_PROGRESS_MSG_EXTRACT_METADATA`. + + - Added support for testing file exclusions via the user-provided progress + function. + + - Some documentation improvements. + +- Made some clarifications to the license text in the COPYING file. + +## Version 1.7.1 + +- Made more improvements to the XPRESS, LZX, and LZMS compressors. + +- The default compression mode for wimcapture is now LZX compression in its + default mode, which is the same as `--compress=maximum`. + +- You can now specify an optional integer compression level to the + `--compress` option; e.g. `--compress=lzx:75`. + +- Made a minor change to the LZMS compressor and decompressor to fix an + incompatibility with the Microsoft implementation. In the unlikely event that + you created an LZMS-compressed WIM with wimlib v1.7.0 or earlier and a + checksum error is reported when extracting files from it with wimlib v1.7.1, + decompress it with v1.7.0 then compress it with v1.7.1. + +- Added `verify` subcommand to `wimlib-imagex`. + +- Notable library changes: + + - Custom compressor parameters have been removed from the library in favor of + the simpler level-based API. + + - Decompressor parameters have been removed entirely. + + - Library users can now specify a custom file for warning and error messages + to be sent to, rather than the default of standard error. + + - New progress messages: `WIMLIB_PROGRESS_MSG_EXTRACT_FILE_STRUCTURE`, + `WIMLIB_PROGRESS_MSG_EXTRACT_METADATA`. + + New function: `wimlib_verify_wim()`. + +## Version 1.7.0 + +- Improved compression, decompression, and extraction performance. + +- Improved compatibility with version 3584 WIM / ESD files: + + - Add support for reading and writing multiple solid blocks per archive, which + WIMGAPI/DISM can create when appending an image. + + - Correctly create solid blocks larger than 4 GiB. + +- `add` commands passed to wimupdate will now replace existing nondirectory + files by default. Use the `--no-replace` option to get the old behavior. + +- The license for the library now contains an exception that allows using it + under the LGPL. See the COPYING file for details. + +- In reparse-point fixup mode (the default for capture), symbolic links and + junctions that point outside the tree being captured are no longer excluded + from capture. + +- Added support for "WIMBoot" capture and extraction. See the documentation for + the new `--wimboot` option to wimcapture and wimapply for more information. + +- On UNIX-like systems, you can now backup and restore device nodes, named + pipes, and sockets. In addition, 32-bit user and group IDs are now supported. + +- The way that UNIX data is stored in WIM files has been changed. If you + captured any WIMs with the `--unix-data` option, to upgrade them you'll need + to apply them with `--unix-data` using `wimlib-imagex` v1.6.2, then re-capture + them with `--unix-data` using this version. + +- wimlib now understands tagged metadata items, such as object IDs, that + can be stored in WIM directory entries. + +- Removed the `--hardlink` and `--symlink` options to wimapply, since I don't + think they are too useful and they got in the way of improving the code. + +- WIMs will now retain their GUIDs when rebuilt (e.g. with wimoptimize). + +- The `mkwinpeimg` script now supports writing the ISO image to standard output. + +- The `` element in WIM XML data is now exported correctly. + +- On Windows, sparse file attributes are no longer set on extracted files. + Oddly enough, this actually saves disk space in some cases. + +- On UNIX, configuring with `--disable-xattr` or `--enable-xattr` is no longer + supported. Mounting WIM images now always requires extended attribute + support. Use `--without-fuse` to disable support for mounting WIM images; + this will also disable the need for extended attribute support. + +- Configuring with `--enable-ssse3-sha1` now works correctly. + +- The shared library version has been bumped up. The main incompatibilities + are: + + - `WIMLIB_COMPRESSION_TYPE_XPRESS` is now 1 and `WIMLIB_COMPRESSION_TYPE_LZX` + is now 2 (so it's the same as WIMGAPI). + + - User-provided progress functions are now registered using a separate + function, `wimlib_register_progress_function()`. The `progress_func` + argument to many functions no longer exists. + + - The return value from user-provided progress functions is now significant. + + - A context argument has been added to the prototype of user-provided progress + functions. + + - `struct wimlib_capture_config` has been removed. The library now takes the + path to the configuration file directly. This affects `wimlib_add_image()`, + `wimlib_add_image_multisource()`, and `wimlib_update_image()`. However, a + NULL value passed in the argument retains the same meaning. + + - Removed deprecated functions: some (de)compression functions, + `wimlib_extract_files()`, and `wimlib_print_metadata()`. + + - Removed extraction flags: `WIMLIB_EXTRACT_FLAG_HARDLINK`, + `WIMLIB_EXTRACT_FLAG_SYMLINK`, `WIMLIB_EXTRACT_FLAG_FILE_ORDER`, and + `WIMLIB_EXTRACT_FLAG_SEQUENTIAL`. + + - Removed some progress messages: `WIMLIB_PROGRESS_MSG_APPLY_TIMESTAMPS`, + `WIMLIB_PROGRESS_MSG_EXTRACT_DIR_STRUCTURE_BEGIN`, + `WIMLIB_PROGRESS_MSG_EXTRACT_DIR_STRUCTURE_END`. Numbering stays the same. + + - Removed some error codes. Numbering stays the same. + + - Replaced `WIMLIB_UNMOUNT_FLAG_LAZY` with `WIMLIB_UNMOUNT_FLAG_FORCE`. + + - WIM paths passed to progress functions now have a leading slash. + +## Version 1.6.2 + +- Case-insensitive comparisons of strings (e.g. filenames) containing UTF-16 + codepoints above 32767 are now done correctly. + +- Fixed build failure on Mac OS X. + +- `wimunmount` now provides the `--new-image` option to cause changes to a + read-write mounted image to be committed as a new image rather than as an + update of the mounted image. (The corresponding new library flag is + `WIMLIB_UNMOUNT_FLAG_NEW_IMAGE`.) + +- The LZMS ("recovery") compression chunk size, or "dictionary size", may now be + up to 1 GiB (1,073,741,824 bytes). + +- The performance of LZX ("maximum") and LZMS ("recovery") compression with + large chunk sizes has been slightly improved. + +## Version 1.6.1 + +- Stored files with size exactly 4 GiB (4,294,967,296 bytes) are now + decompressed correctly. + +- Fixed a bug in the LZX compressor introduced in v1.5.3. The bug occurred in + an unlikely case, and due to validity checks it did not affect successfully + created archives. + +- Fixed a minor compatibility issue with the LZMS compressor and decompressor. + This is *not* the default compression type and was only introduced in v1.6.0. + In the unlikely event that you created an LZMS-compressed WIM with v1.6.0 and + a checksum error is reported when applying it with v1.6.1, decompress it with + v1.6.0 then compress it with v1.6.1. + +- Memory usage for LZMS and LZX compression has been decreased. + +- wimextract now allows wildcard characters in paths specified on the command + line. Also, the `--strict-wildcards` option has been removed and replaced + with the inverse option `--nullglob`. See the documentation for wimextract + for more details and changes. + +- The `wimlib_extract_files()` function is now considered deprecated in favor of + `wimlib_extract_paths()`. + +- Fixed more permissions problems when extracting files on Windows. + +- A new `--no-attributes` option has been added to `wimapply` and `wimextract`. + The library flag is `WIMLIB_EXTRACT_FLAG_NO_ATTRIBUTES`. + +- The default chunk size is now set correctly when changing the compression type + of a WIM, for example with `wimoptimize`. + +- The `--metadata` option to `wiminfo` has been replaced with the `--detailed` + option to `wimdir`. + +- In relevant `wimlib-imagex` commands, `--solid` may now be used as an alias + for `--pack-streams`. + +## Version 1.6.0 + +- Support for extracting and updating the new version 3584 WIMs has been added. + These WIMs typically pack many streams ("files") together into a single + compressed resource, thereby saving space. This degrades the performance of + random access (such as that which occurs on a mounted image), but + optimizations have been implemented for extraction. These new WIM files also + typically use a new compression format (LZMS), which is similar to LZMA and + can offer a better compression ratio than LZX. These new WIM files can be + created using `wimcapture` with the `--compress=lzms --pack-streams` options. + Note: this new WIM format is used by the Windows 8 web downloader, but + important segments of the raw `.esd` files are encrypted, so wimlib will not + be able to extract such files until they are first decrypted. + +- wimlib now supports extracting files and directories from a WIM image based on + a "listfile" that itself contains the list of paths to extract. For + `wimextract`, the syntax is to specify `@LISTFILE` instead of a `PATH`, and + for the library itself, the new APIs are `wimlib_extract_pathlist()` and + `wimlib_extract_paths()`. Path globs containing wildcard characters are + supported. + +- For searching WIM files, wimlib now has configurable case sensitivity. The + default on Windows is still case-insensitive and the default on UNIX-like + systems is still case-sensitive, but this can be overridden on either platform + through flags to `wimlib_global_init()`. For `wimlib-imagex`, the + environmental variable `WIMLIB_IMAGEX_IGNORE_CASE` can be set to 1 or 0 for + case-insensitive or case-sensitive behavior, respectively. + +- Support for compression chunk sizes greater than the default of 32768 + bytes has been added. A larger chunk size typically results in a better + compression ratio. However, the MS implementation is seemingly not + compatible with all chunk sizes, especially for LZX compression, so the + defaults remain unchanged, with the exception of the new LZMS-compressed + WIMs, which use a larger chunk size by default. + +- The compression/decompression API exported by wimlib has been changed. Now + one set of functions handles all supported compression formats. + +- `wimcapture` and `wimappend` will now display the progress of scanning the + directory tree to capture, in addition to the progress of writing data to the + WIM. The `--verbose` option no longer does anything. The library API change + for this is the addition of several members to `struct + wimlib_progress_info_scan` available to progress callbacks. + +- `mkwinpeimg` now correctly handles the `--start-script` option when the start + script is not in the working directory. + +- Sequential extraction, previously requested by using + `WIMLIB_EXTRACT_FLAG_SEQUENTIAL`, is now the default. + `WIMLIB_EXTRACT_FLAG_FILE_ORDER` can be used to get the old default behavior + (extract in file order). + +## Version 1.5.3 + +- The new LZX compressor added in v1.5.2 has been improved and is now enabled by + default, except when `wimcapture` or `wimappend` is run *without* the + `--compress` option, in which case the faster LZX compressor is used (the same + as before). This behavior is reasonably consistent with ImageX which actually + uses "fast" (XPRESS) compression by default. In those cases, use + `--compress=maximum` to explicitly capture a WIM image using the new (slower + but better) LZX compressor. + + The `--compress-slow` option still exists to `wimlib-imagex optimize`, but its + new behavior is to tweak the new LZX compressor even more to produce an even + better compression ratio at the cost of more time spent compressing. + +- `wimlib-imagex optimize` now supports the `--compress=TYPE` option, which + recompresses the WIM file using the specified compression TYPE. The new + library API function used for this is `wimlib_set_output_compression_type()`. + +- Added the `wimlib_get_xml_data()` function to allow library clients to easily + retrieve the raw XML data from a WIM file if needed. + +- Fixed a bug that could cause an error code to be incorrectly returned when + writing XML data containing a `` element. + +- Mounted WIM images will now correctly show the default file stream even if + appears in the alternate data stream entries of the corresponding WIM + directory entry. + +## Version 1.5.2 + +- Added a new experimental LZX compressor which can be enabled by passing + `--compress-slow` to `wimlib-imagex capture` or `wimlib-imagex optimize`. + (The latter is only applicable if the WIM is already LZX-compressed and the + `--recompress` option is also given.) The experimental compressor is much + slower but compresses the data slightly more --- currently usually to within a + fraction of a percent of the results from WIMGAPI/ImageX. + +- A workaround has been added for compatibility with versions of WinPE that + interpret alternate data stream entries in the boot WIM incorrectly. + +- An alignment bug that caused a crash in the LZX decompressor on some builds + was fixed. + +- wimlib now attempts to clear the `WIM_HDR_FLAG_WRITE_IN_PROGRESS` flag in the + WIM header when restoring the previous state of a WIM it failed to + successfully update. + +- Added a workaround to avoid an access denied error on Windows when replacing a + WIM file that another process has opened. + +## Version 1.5.1 + +- wimlib can now open WinPE WIMs from WAIK v2.1, which had a quirk that needed + to be handled. + +- A bug in the interpretation of negative `IMAGE` indices in the + `--update-of=[WIMFILE:]IMAGE` option to `wimlib-imagex capture` and + `wimlib-imagex append` has been fixed. + +- A workaround has been added to successfully apply security descriptors with + empty DACLs when the NTFS-3G apply mode is being used with NTFS-3G 2013.1.13 + or earlier. + +- `wimlib-imagex capture` can now accept the `--delta-from` option multiple + times. + +## Version 1.5.0 + +- Added support for "pipable" WIMs. Pipable WIMs allow capturing images to + standard output and applying images from standard input, but they are not + compatible with Microsoft's software and are not created by default. See the + documentation for `--pipable` flag of `wimlib-imagex capture` for more + information. + +- To better support incremental backups, added support for declaring an image as + a modified form of another image. See the documentation for the `--update-of` + option of `wimlib-imagex append` and `wimlib-imagex capture`. + +- Added supported for "delta" WIMs. See the documentation for the + `--delta-from` option of `wimlib-imagex capture`. + +- The library support for managing split WIMs has been changed to support other + arrangements, such as delta WIMs, and be easier to use. This change is + visible in `wimlib-imagex`, which also can now accept the `--ref` option + multiple times, and also now supports "delta" WIMs as mentioned above. + +- wimlib now preserves WIM integrity tables by default, even if + `WIMLIB_WRITE_FLAG_CHECK_INTEGRITY` is not specified. This changes the + behavior of `wimlib-imagex` whenever the WIM being operated on contains + an integrity table and the `--check` option is not specified. + +- `wimlib-imagex capture` now creates LZX-compressed WIMs by default (when + `--compress` is not specified). This provides the best compression ratio by + default, which is usually what is desired, at a cost of some speed. + +- `wimlib-imagex` now supports being invoked as `wimCOMMAND`, where `COMMAND` is + the command as in `wimlib-imagex COMMAND`; for example, it can be invoked as + `wimapply` as an alternative to `wimlib-imagex apply`. The appropriate hard + links are created in UNIX installations of `wimlib-imagex`, while for the + Windows distribution of `wimlib-imagex`, batch files that emulate this + behavior are generated. + +- Security descriptors are now extracted correctly on Windows. + +- Fixed archiving DOS names in NTFS-3G capture mode. + +- The extraction code has been rewritten and it will now be easier to support + new features on all supported backends (currently Win32, UNIX, and NTFS-3G). + For example, hard-linked extraction mode (`--hardlink`) is now supported on + all backends, not just UNIX. + +- `mkwinpeimg` now supports grabbing files from the WAIK supplement rather + than the WAIK itself. + +- `wimlib_global_init()` now, by default, attempts to acquire additional + privileges on Windows, so library clients need not do this. + +- This update bumps the shared library version number up to 9, since it is not + binary compatibible with previous releases. + +## Version 1.4.2 + +- Fixed bug in `wimlib-imagex export` that made it impossible to export an image + from a WIM that is readonly at the filesystem level. + +- Return error code rather than segfaulting when trying to list files from a + non-first part of a split WIM. + +- Joining a WIM will now preserve the `RP_FIX` and `READONLY` flags. + +## Version 1.4.1 + +- On Windows, paths given to `wimlib-imagex` are now treated case insensitively. + +- Improved behavior regarding invalid filenames; in particular, on Windows, + `wimlib-imagex` will, when extracting, now omit (with an option to override + this default) filenames differing only in case, or filenames containing + characters not valid on Windows. + +- On Windows, wimlib now supports capturing and extracting long paths (longer + than the so-called `MAX_PATH`). + +- On Windows, `wimlib-imagex update` now acquires proper privileges when running + as an Administrator. + +- `wimlib-imagex update` will now complain if no image is specified when trying + to update a multi-image WIM. + +- `wimlib-imagex update` now supports specifying a single update command + directly on the command line using the `--command` option. + +- `wimlib-imagex` will now choose different units for progress messages, + depending on the amount of data that needs to be processed. + +- `wimlib-imagex append` will now generate a unique WIM image name if no name is + specified and the defaulted name already exists in the WIM. + +- wimlib now allows you to create unnamed WIM images, which can then only be + referred to by index. + +- wimlib now allows you to explicitly declare you want write access to a WIM by + providing the `WIMLIB_OPEN_FLAG_WRITE_ACCESS` flag to `wimlib_open_wim()`. + +- wimlib now respects the `WIM_HDR_FLAG_READONLY` flag when set in the WIM header. + +- Progress callbacks have been added to wimlib's `wimlib_update_image()` + function. + +- Added `wimlib_get_wim_info()`, `wimlib_set_wim_info()`, + `wimlib_iterate_dir_tree()`, and `wimlib_iterate_lookup_table()` functions to + the library. + +- NTFS-3G capture now only warns about two conditions previously treated as + errors. + +- Fixed a couple issues with using `wimlib-imagex` on UDF filesystems on + Windows. + +- wimlib now correctly detects and returns an error when reading a WIM image + with a cyclic directory structure. (Fun fact: such a WIM will crash + Microsoft's software.) + +## Version 1.4.0 + +- Added new "extract" and "update" subcommands to `wimlib-imagex`, along with + associated APIs in the library. These commands are intended mainly for + Windows use but can be used on UNIX as well. + +- Many documentation improvements. + +- Fixed a bug in the Windows build where relative symbolic links were not + captured in reparse-point fixup mode. + +- Fixed a bug in the Windows build where file handles were left open to the WIM + file, causing `wimlib-imagex optimize` to fail in some cases. + +- Fixed a bug in the Windows build of `wimlib-imagex` where globbing split-WIM + parts could cause the program to crash. + +- Fixed a bug where the creation time of WIM images would be shown instead of + the last modification time. + +- With the Windows build it is now possible to restore a WIM containing symbolic + links as a non-Administrator; however you will receive warnings about not + being able to extract the symbolic links. + +## Version 1.3.3 + +- Capturing a WIM image should now be significantly faster in most cases due to + improved use of the operating system's cache and avoiding reading files twice + whenever possible. + +- The Windows build should now work on Windows XP. + +- The Windows build now supports capturing and restoring hidden, compressed, + sparse, and encrypted files. + +- The Windows build now supports capturing and applying WIM images from + filesystems other than NTFS (with some reduced functionality). + +- The Windows build now extracts short names correctly. + +- Added support for "reparse-point" fixups (i.e. fixing up of symbolic links). + See docs for `--rpfix` and `--norpfix` flags of `wimlib-imagex capture` and + `wimlib-imagex apply`. + +- The performance of splitting and joining WIMs should be slightly improved. + +- The LZX and XPRESS compression and decompression functions are now exported + from the library. + +## Version 1.3.2 + +- Improvements and bugfixes for the Windows build. + +- Added `--strict-acls` options. + +- Fixed the way that wimlib determines the order of images in the WIM. + +## Version 1.3.1 + +- Since wimlib can now be used on Windows, wimlib's implementation of ImageX has + been renamed to `wimlib-imagex` to avoid confusion with Microsoft's + implementation of ImageX, which would have the same file name (`imagex.exe`). + If you really don't like this you can pass the `--with-imagex-progname` option + to `configure` to choose a different name, or even simply rename the binary + yourself (but the former way will configure the man pages to use the chosen + name). + +- Various bugs fixed in the Windows build. Mainly to do with capturing and + restoring alternate data streams correctly in weird cases, and requesting the + correct privileges when opening files. Also added the `--noacls` options to + `wimlib-imagex` capture, append, and apply. + +- Windows build again: `FindFirstStreamW()` and `FindNextStreamW()` are now + dynamically loaded, so this may make the library compatible with Windows XP + (however, there may still be other problems). + +## Version 1.3.0 + +- Added experimental support for native Windows builds. Binaries can be + downloaded from the SourceForge page. + +- `--source-list` option added to `imagex capture` and `imagex append`. + +- Better support for different character encodings. + +## Version 1.2.6 + +- Storing UNIX file owners, groups, and modes in WIM images is now +- possible using `imagex capture` with the `--unix-data` flag. + +- Minor bug fixes and documentation fixes. + +## Version 1.2.5 + +- NTFS capture: Fixed capturing duplicate reparse points. + +- NTFS capture: Capture first unnamed stream if there are more than one (print + warning instead of error). + +- Allow multiple test cases to execute concurrently (e.g. `make -j2 check`). + +## Version 1.2.4 + +- Added `--arch` switch to mkwinpeimg script to support getting AMD64 WinPE from + the WAIK. + +- Update to work with ntfs-3g version 2013.1.13. + +## Version 1.2.3 + +- Fixed truncating file to shorter but non-zero length on read-write mounted WIM + image. + +- Various code cleanups and minor documentation fixes. + +## Version 1.2.2 + +- LZX and XPRESS decompression have received some additional optimizations and + should now be even faster. (Although, they were already pretty fast --- much + faster than typical I/O speeds.) + +- Fixed a bug introduced in v1.2.1 that would cause a directory tree containing + hard links to be captured incorrectly in some cases. + +## Version 1.2.1 + +- By default, unmounting a read-write mounted WIM with `imagex unmount --commit` + will now change the WIM in-place without needing to write the entire WIM + again. Use `imagex unmount --commit --rebuild` to get the old behavior. + +- `imagex unmount` no longer has a hard-coded limit of 10 minutes to wait for a + response from the daemon servicing the mounted WIM. Instead, every second + `imagex unmount` will check if the daemon is still alive, and keep waiting if + so, otherwise terminate with an error. + +- `imagex unmount --commit` on a read-write mounted WIM will now print progress + information regarding the writing of new or modified streams the WIM, just + like when capturing or appending a WIM. + +- A small change has been made to XPRESS compression and it should improve the + compression ratio slightly. + +- A change was made that may improve performance slightly when applying a WIM + image to a NTFS volume. + +- Microsoft has managed to introduce even more bugs into their software, and now + the WIMs for Windows 8 have incorrect (too low) reference counts for some + streams. This is unsafe because such streams can be removed when they are in + actuality still referenced in the WIM (perhaps by a different image). wimlib + will now work around this problem by fixing the stream reference counts. This + is only done when `wimlib_delete_image()` is called (`imagex delete`) or when + `wimlib_mount_image()` is called with `WIMLIB_MOUNT_FLAG_READWRITE` (`imagex + mountrw`). Please note that this requires reading the metadata for all images + in the WIM, so this will make these operations noticably slower on WIMs with + multiple images. + +- Various other bugfixes. + +## Version 1.2.0 + +- Appending images to a WIM is now be done by default without re-building the + whole WIM. Use the `--rebuild` flag to get the old behavior (which was to + re-build the entire WIM when a new image is appended). + +- A new command `imagex optimize` is now available to manually re-build a WIM + that has wasted space due to repeated appends. + +- Progress information has been improved, and now arbitrary callback functions + can be used to show the progress of a WIM operation. + +- A possible bug with changing the bootable image of a WIM was fixed. + +- Some advisory locking is now done to prevent two processes from modifying a + WIM at the same time (but only in some cases). For example, you cannot mount + two images from a WIM read-write at the same time. + +- Some functions have been reorganized: + - `wimlib_mount()` renamed to `wimlib_mount_image()`. + - `wimlib_unmount()` renamed to `wimlib_unmount_image()`. + - `wimlib_overwrite_xml_and_header()` removed as `wimlib_overwrite()` suffices + now. + - `wimlib_apply_image_to_ntfs_volume()` removed as `wimlib_extract_image()` + suffices now. + - `wimlib_add_image_from_ntfs_volume()` removed as `wimlib_add_image()` + suffices now. + +- Previously, the soname of libwim.so has been 0.0.0, despite many interface + changes. The soname is now updated to 1.0.0 and will now be updated each + release. + +## Version 1.1.0 + +- Resources will now be compressed using multiple threads by default. (This + applies to `imagex capture`, `imagex append`, and `imagex export`). + +- Some performance improvements in mounted WIMs. + +- More progress information is shown when capturing a WIM. + +## Version 1.0.4 + +- Lots of minor fixes, code cleanups, and some documentation updates. Nothing + in particular is really noteworthy. + +## Version 1.0.3 + +- LZX and XPRESS compression improvements. + +- Fixed calculation of Directory Count, File Count, Total Bytes, and Hard Link + Bytes of the WIM. + +## Version 1.0.2 + +- Fixed bug when capturing NTFS file with multiple named data streams. + +- Internally, we are now using inode structures, even though these don't appear + literally in the WIM file. This simplifies some of the code (mainly for WIM + mounting) and likely fixed a few problems, although it needs more testing. + +## Version 1.0.1 + +- Fixed problem when exporting images from XPRESS to LZX compressed WIM or vice + versa + +## Version 1.0.0 + +- Enough changes to call it version 1.0.0! + +- Capturing a WIM directly from a NTFS volume, and applying a WIM directly to a + NTFS volume, is now supported. + +- Hard links and symbolic links have much improved support. They are supported + for WIM capture, WIM application, and mounted WIMs (you can even make them on + read-write mounted WIMs). + +- Alternate data streams are now supported on mounted WIMs through an xattr or a + Windows-style stream interface. Also they are supported when capturing a WIM + from NTFS or applying a WIM to NTFS. + +- Split WIMs are better supported. You may now apply an image directly from a + split WIM, mount an image from a split WIM read-only, or export an image from + a split WIM. + +- Using a capture configuration file is now supported (but not fully yet). + +- SHA1 message digests are checked in more places, so we can make sure applied + and captured data is correct. + +- Man pages have been updated and consolidated. + +## Version 0.7.2 + +- Fixed segfault when unmounting read-only WIM. + +## Version 0.7.1 + +- Support for joining and splitting WIMs. + +- Also, security data is now preserved by default. + +## Version 0.6.3 + +- Can now build with older gcc and system headers, like on CentOS 5. + +## Version 0.6.2 + +- Fixed bug that made it impossible to overwrite files in read-write mount. + +## Version 0.6.1 + +- Write byte-order mark before WIM XML data. (`imagex.exe` requires this to be + there.) diff --git a/README b/README deleted file mode 100644 index f9447c93..00000000 --- a/README +++ /dev/null @@ -1,256 +0,0 @@ - INTRODUCTION - -This is wimlib version 1.14.0-BETA2 (March 2023). wimlib is a C library for -creating, modifying, extracting, and mounting files in the Windows Imaging -Format (WIM files). wimlib and its command-line frontend 'wimlib-imagex' -provide a free and cross-platform alternative to Microsoft's WIMGAPI, ImageX, -and DISM. - - INSTALLATION - -To install wimlib and wimlib-imagex on UNIX-like systems, you can compile from -source (e.g. './configure && make && sudo make install'). Alternatively, check -if a package has already been prepared for your operating system. - -To install wimlib and wimlib-imagex on Windows, just download and extract the -ZIP file containing the latest binaries. See README.WINDOWS for more details. - -All official wimlib releases are available from https://wimlib.net. - - WIM FILES - -A Windows Imaging (WIM) file is an archive designed primarily for archiving -Windows filesystems. However, it can be used on other platforms as well, with -some limitations. Like some other archive formats such as ZIP, files in WIM -archives may be compressed. WIM archives support multiple compression formats, -including LZX, XPRESS, and LZMS. All these formats are supported by wimlib. - -A WIM archive contains one or more "images", each of which is a logically -independent directory tree. Each image has a 1-based index and usually a name. - -WIM archives provide data deduplication at the level of full file contents. In -other words, each unique "file contents" is only stored once in the archive, -regardless of how many files have that contents across all images. - -A WIM archive may be either stand-alone or split into multiple parts. - -An update of the WIM format --- first added by Microsoft for Windows 8 --- -supports solid-mode compression. This refers to files being compressed together -(e.g. as in a .tar.xz or .7z archive) rather than separately (e.g. as in a .zip -archive). This usually produces a much better compression ratio. Solid -archives are sometimes called "ESD files" by Microsoft and may have the ".esd" -file extension rather than ".wim". They are supported in wimlib since v1.6.0. - - IMAGEX IMPLEMENTATION - -wimlib itself is a C library, and it provides a documented public API (See: -https://wimlib.net/apidoc) for other programs to use. However, it is also -distributed with a command-line program called "wimlib-imagex" that uses this -library to implement an imaging tool similar to Microsoft's ImageX. -wimlib-imagex supports almost all the capabilities of Microsoft's ImageX as well -as additional capabilities. wimlib-imagex works on both UNIX-like systems and -Windows, although some features differ between the platforms. - -Run `wimlib-imagex' with no arguments to see an overview of the available -commands and their syntax. Note that the commands have both long and short -forms, e.g. `wimlib-imagex apply' is equivalent to `wimapply'. For additional -documentation: - - * If you have installed wimlib-imagex on a UNIX-like system, you will find - further documentation in the man pages; run `man wimlib-imagex' to get - started. - - * If you have downloaded the Windows binary distribution, you will find the - documentation for wimlib-imagex in PDF format in the "doc" directory. Note - that although the documentation is written in the style of UNIX manual - pages, it does document Windows-specific behavior when relevant. - - COMPRESSION - -wimlib (and wimlib-imagex) can create XPRESS, LZX, and LZMS compressed WIM -archives. wimlib's compression codecs usually outperform and outcompress their -closed-source Microsoft equivalents. Multiple compression levels and chunk -sizes as well as solid mode compression are supported. Compression is -multithreaded by default. Detailed benchmark results and descriptions of the -algorithms used can be found at https://wimlib.net/compression.html. - - NTFS SUPPORT - -WIM images may contain data, such as named data streams and -compression/encryption flags, that are best represented on the NTFS filesystem -used on Windows. Also, WIM images may contain security descriptors which are -specific to Windows and cannot be represented on other operating systems. -wimlib handles this NTFS-specific or Windows-specific data in a -platform-dependent way: - - * In the Windows version of wimlib and wimlib-imagex, NTFS-specific and - Windows-specific data are supported natively. - - * In the UNIX version of wimlib and wimlib-imagex, NTFS-specific and - Windows-specific data are ordinarily ignored; however, there is also special - support for capturing and extracting images directly to/from unmounted NTFS - volumes. This was made possible with the help of libntfs-3g from the - NTFS-3G project. - -For both platforms the code for NTFS capture and extraction is complete enough -that it is possible to apply an image from the "install.wim" contained in recent -Windows installation media (Vista or later) directly to an NTFS filesystem, and -then boot Windows from it after preparing the Boot Configuration Data. In -addition, a Windows installation can be captured (or backed up) into a WIM file, -and then re-applied later. - - WINDOWS PE - -wimlib can also be used to create customized images of Windows PE on either -UNIX-like systems or Windows. Windows PE (Preinstallation Environment) is a -lightweight version of Windows that runs entirely from memory and can be used to -perform maintenance or to install Windows. It is the operating system that runs -when you boot from the Windows installation media. - -A copy of Windows PE can be found on the installation media for Windows (Vista -or later) as the file `sources/boot.wim', or in the Windows Automated -Installation Kit (WAIK), which is free to download from Microsoft. - -A shell script `mkwinpeimg' is provided with wimlib on UNIX-like systems to -simplify the process of creating and customizing a bootable Windows PE image, -sourcing the needed files from the Windows installation media or from the WAIK. - - DEPENDENCIES - -This section documents the dependencies of wimlib and the programs distributed -with it, when building for a UNIX-like system from source. If you have -downloaded the Windows binary distribution of wimlib and wimlib-imagex then all -dependencies were already included and this section is irrelevant. - -* libfuse3 (optional but recommended) - Unless configured --without-fuse, wimlib requires libfuse3, for the - support for mounting WIM images. Most Linux distributions already - include this, but make sure you have the fuse3 package installed, and - also libfuse3-dev if your distribution distributes development files - separately. FUSE also requires a kernel module. If the kernel module - is available it should automatically be loaded if you try to mount a WIM - image. For more information, see https://github.com/libfuse/libfuse/. - -* libntfs-3g (optional but recommended) - Unless configured --without-ntfs-3g, wimlib requires the library and - headers for libntfs-3g to be installed. The minimum required version is - 2011-4-12, but newer versions contain important bug fixes. - -* cdrkit (optional) -* mtools (optional) -* syslinux (optional) -* cabextract (optional) - The `mkwinpeimg' shell script will look for several other programs - depending on what options are given to it. Depending on your Linux - distribution, you may already have these programs installed, or they may - be in the software repository. Making an ISO filesystem requires - `mkisofs' from `cdrkit' (https://www.cdrkit.org). Making a disk image - requires `mtools' (https://www.gnu.org/software/mtools) and `syslinux' - (https://www.syslinux.org). Retrieving files from the Windows Automated - Installation Kit requires `cabextract' (https://www.cabextract.org.uk). - - CONFIGURATION - -This section documents the most important options that may be passed to the -"configure" script when building from source: - ---without-ntfs-3g - If libntfs-3g is not available or is not version 2011-4-12 or later, - wimlib can be built without it, in which case it will not be possible to - capture or apply WIM images directly from/to NTFS volumes. - - The default is --with-ntfs-3g when building for any UNIX-like system, - and --without-ntfs-3g when building for Windows. - ---without-fuse - The --without-fuse option disables support for mounting WIM images. - This removes dependencies on libfuse and librt. The wimmount, - wimmountrw, and wimunmount commands will not work. - - The default is --with-fuse when building for Linux, and --without-fuse - otherwise. - - PORTABILITY - -wimlib works on both UNIX-like systems (Linux, Mac OS X, FreeBSD, etc.) and -Windows (Vista and later). - -As much code as possible is shared among all supported platforms, but there -necessarily are some differences in what features are supported on each platform -and how they are implemented. Most notable is that file tree scanning and -extraction are implemented separately for Windows, UNIX, and UNIX (NTFS-3G -mode), to ensure a fast and feature-rich implementation of each platform/mode. - -wimlib is mainly used on x86 and x86_64 CPUs, but it should also work on a -number of other GCC-supported 32-bit or 64-bit architectures. It has been -tested on the ARM and MIPS architectures. - -Currently, gcc and clang are the only supported compilers. A few nonstandard -extensions are used in the code. - - REFERENCES - -The WIM file format is partially specified in a document that can be found in -the Microsoft Download Center. However, this document really only provides an -overview of the format and is not a formal specification. It also does not -cover later extensions of the format, such as solid resources. - -With regards to the supported compression formats: - -- Microsoft has official documentation for XPRESS that is of reasonable quality. -- Microsoft has official documentation for LZX, but in two different documents, - neither of which is completely applicable to its use in the WIM format, and - the first of which contains multiple errors. -- There does not seem to be any official documentation for LZMS, so my comments - and code in src/lzms_decompress.c may in fact be the best documentation - available for this particular compression format. - -The algorithms used by wimlib's compression and decompression codecs are -inspired by a variety of sources, including open source projects and computer -science papers. - -The code in ntfs-3g_apply.c and ntfs-3g_capture.c uses the NTFS-3G library, -which is a library for reading and writing to NTFS filesystems (the filesystem -used by recent versions of Windows). For more information about NTFS-3G, see -https://github.com/tuxera/ntfs-3g/. - -A limited number of other free programs can handle some parts of the WIM -file format: - - * 7-Zip is able to extract and create WIMs (as well as files in many - other archive formats). However, wimlib is designed specifically to handle - WIM files and provides features previously only available in Microsoft's - implementation, such as the ability to mount WIMs read-write as well as - read-only, the ability to create compressed WIMs, the correct handling of - security descriptors and hard links, support for LZMS compression, and - support for solid archives. - * ImagePyX (https://github.com/maxpat78/ImagePyX) is a Python program that - provides some capabilities of wimlib-imagex, with the help of external - compression codecs. - -If you are looking for an archive format that provides features similar to WIM -but was designed primarily for UNIX, you may want to consider SquashFS -(https://docs.kernel.org/filesystems/squashfs.html). However, you may find that -wimlib works surprisingly well on UNIX. It will store hard links and symbolic -links, and it supports storing standard UNIX file permissions (owners, groups, -and modes); special files such as device nodes and FIFOs; and extended -attributes. Actually, I use it to back up my own files on Linux! - - HISTORY - -wimlib was originally a project started by Carl Thijssen for use on Linux in the -Ultimate Deployment Appliance (https://www.ultimatedeployment.org/). Since then -the code has been entirely rewritten and improved (main author: Eric Biggers). -Windows support has been available since version 1.3.0 (March 2013). A list of -version-to-version changes can be found in the NEWS file. - - NOTICES - -wimlib is free software that comes with NO WARRANTY, to the extent permitted by -law. See the COPYING file for more details. - -Bug reports, suggestions, and other contributions are appreciated and may be -posted to https://wimlib.net/forums/. - -wimlib is independently developed and does not contain any code, data, or files -copyrighted by Microsoft. It is not known to be affected by any patents. diff --git a/README.WINDOWS b/README.WINDOWS deleted file mode 100644 index dbbf3a07..00000000 --- a/README.WINDOWS +++ /dev/null @@ -1,134 +0,0 @@ - - INTRODUCTION - -wimlib is free and open source software that is available on both UNIX-like -systems and Windows. This file provides additional information specifically -about the Windows version of wimlib and the command line tool "wimlib-imagex" -that is distributed with it. It does not obsolete the generic README.txt, which -you should read too. - - WINDOWS DISTRIBUTION - -The Windows distribution of wimlib is a ZIP file containing the following items: - - * wimlib-imagex.exe, a command-line tool to deal with WIM (.wim), split WIM - (.swm), and ESD (.esd) files that is inspired by Microsoft's ImageX and - DISM. This is a ready-to-run executable and not an installer. - - * Very short batch scripts (e.g. wimapply.cmd) which are shortcuts to the - corresponding wimlib-imagex commands (e.g. `wimlib-imagex apply'). - - * The library itself in DLL format (libwim-15.dll). wimlib-imagex.exe - requires this to run. - - * The documentation, including this file, the generic README.txt, and - PDF documentation for wimlib-imagex in the 'doc' folder. - - * License files for all software included. These are all free software - licenses. COPYING.txt is the main license, and it refers to - COPYING.GPLv3.txt and COPYING.LGPLv3.txt. The other licenses are for - third-party software included in the library. - - * Development files in the 'devel' folder. These are only needed if you - are developing C or C++ applications that use wimlib. - -Note that there are separate ZIP files for 32-bit (i686) and 64-bit (x86_64) -binaries. They are both fully supported, but you should prefer the 64-bit -binaries when possible as they can be noticeably faster. - - WIMLIB-IMAGEX - -wimlib-imagex supports most features of Microsoft's ImageX as well as some -features that are supported by DISM but not by ImageX. wimlib-imagex also -supports some features that neither ImageX nor DISM support. Some of the -advantages of wimlib-imagex compared to ImageX and DISM are: - - * wimlib-imagex provides "extract" and "update" commands which allow - you to quickly work with WIM images without mounting them. - - * wimlib-imagex provides an easy-to-use "optimize" command which removes - wasted space from a WIM file and optionally recompresses it with stronger - compression. - - * wimlib includes advanced implementations of all compression algorithms used - in WIM files. They usually outperform and outcompress their Microsoft - equivalents. - - * wimlib-imagex supports solid WIM files and LZMS compression, for example as - used in ESD (.esd) files. (These are partially supported by recent DISM - versions but not by ImageX.) - - * wimlib-imagex supports imaging a live Windows system. Just use the - --snapshot option. - - * In many cases, wimlib-imagex has simpler command-line syntax than either - ImageX or DISM. - - * Whenever possible, wimlib-imagex includes improved documentation and - informational output compared to Microsoft's software. - - * wimlib and wimlib-imagex are free software, so you can modify and/or audit - the source code. - -However, some limitations of wimlib-imagex compared to ImageX and DISM are: - - * On Windows, wimlib-imagex does not support mounting WIM images. - - * wimlib-imagex has no awareness of Windows "packages". - - ADDITIONAL NOTES - -It's recommended to use wimlib-imagex in scripts to avoid having to -interactively enter commands. However, note that wimlib-imagex is largely just -a command-line front-end for wimlib, and it's possible to use wimlib's API in -other front-ends or applications. Currently there is no official graphical user -interface available for wimlib or wimlib-imagex. However, an unofficial -Windows-only graphical user interface that provides a thin wrapper around -wimlib-imagex can be downloaded at -https://reboot.pro/files/file/588-wimlib-clc/. - - BUILDING FROM SOURCE - -As with other open source software, advanced users may choose to build wimlib -from source, potentially with customizations. Currently, wimlib depends on -MinGW-w64 for its Windows support; Visual Studio is not supported. The Windows -binaries can be cross-compiled on Linux, or built on Windows using MSYS2 or -Cygwin. The following instructions show the MSYS2 method. - -First, install MSYS2 by running the installer from https://www.msys2.org/. - -Then, open any MSYS2 shell and run the following command: - - pacman -Syu --noconfirm - -After that, open any MSYS2 shell again and run the following commands: - - pacman -Syu --noconfirm git - git clone git://wimlib.net/wimlib - -Note: By default the git repository will be on the "master" branch, which is the -latest development snapshot. Optionally, you can check out a specific version, -e.g. 'cd wimlib && git checkout v1.14.0'. For old versions, please refer to the -documentation for that version, as things may have changed. It is also possible -to use a release tarball (e.g. wimlib-1.14.0.tar.gz) instead of the git repo. - -Finally, to actually do a build, close the MSYS2 shell you have open, then open -one of the following from the Start menu: - - * "MSYS2 MINGW64" - for x86_64 binaries, built with gcc - * "MSYS2 CLANG64" - for x86_64 binaries, built with clang - * "MSYS2 MINGW32" - for i686 binaries, built with gcc - * "MSYS2 CLANG32" - for i686 binaries, built with clang - * "MSYS2 CLANGARM64" - for ARM64 binaries (EXPERIMENTAL) - -(If unsure, use "MSYS2 MINGW64".) Then run the following commands: - - cd wimlib - tools/windows-build.sh --install-prerequisites - -The script will automatically download and install the packages needed to build -wimlib in the chosen MSYS2 environment, then build wimlib. The output will be -in a folder named similarly to "wimlib-1.14.0-windows-x86_64-bin". Note that -your "home" folder within MSYS2 is C:\msys64\home\%USERNAME% by default. -Therefore, the full path to the output folder will be similar to -C:\msys64\home\%USERNAME%\wimlib\wimlib-1.14.0-windows-x86_64-bin. diff --git a/README.WINDOWS.md b/README.WINDOWS.md new file mode 100644 index 00000000..54527e1e --- /dev/null +++ b/README.WINDOWS.md @@ -0,0 +1,133 @@ +# Introduction + +wimlib is free and open source software that is available on both UNIX-like +systems and Windows. This file provides additional information specifically +about the Windows version of wimlib and the command line tool `wimlib-imagex` +that is distributed with it. It does not obsolete the generic +[README](README.md), which you should read too. + +# Windows distribution + +The Windows distribution of wimlib is a ZIP file containing the following items: + +- `wimlib-imagex.exe`, a command-line tool to deal with WIM (.wim), split WIM + (.swm), and ESD (.esd) files that is inspired by Microsoft's ImageX and DISM. + This is a ready-to-run executable and not an installer. + +- Very short batch scripts (e.g. `wimapply.cmd`) which are shortcuts to the + corresponding `wimlib-imagex` commands (e.g. `wimlib-imagex apply`). + +- The library itself in DLL format (`libwim-15.dll`). `wimlib-imagex.exe` + requires this to run. + +- The documentation, including this file, the generic README, and PDF + documentation for `wimlib-imagex` in the `doc` folder. + +- License files for all software included. These are all free software + licenses. `COPYING.txt` is the main license, and it refers to + `COPYING.GPLv3.txt` and `COPYING.LGPLv3.txt`. The other licenses are for + third-party software included in the library. + +- Development files in the `devel` folder. These are only needed if you are + developing C or C++ applications that use wimlib. + +Note that there are separate ZIP files for 32-bit `i686` and 64-bit `x86_64` +binaries. They are both fully supported, but you should prefer the 64-bit +binaries when possible as they can be noticeably faster. + +# wimlib-imagex + +`wimlib-imagex` supports most features of Microsoft's ImageX as well as some +features that are supported by DISM but not by ImageX. wimlib-imagex also +supports some features that neither ImageX nor DISM support. Some of the +advantages of `wimlib-imagex` compared to ImageX and DISM are: + +- `wimlib-imagex` provides "extract" and "update" commands which allow you to + quickly work with WIM images without mounting them. + +- `wimlib-imagex` provides an easy-to-use "optimize" command which removes + wasted space from a WIM file and optionally recompresses it with stronger + compression. + +- wimlib includes advanced implementations of all compression algorithms used in + WIM files. They usually outperform and outcompress their Microsoft + equivalents. + +- `wimlib-imagex` supports solid WIM files and LZMS compression, for example as + used in ESD (.esd) files. (These are partially supported by recent DISM + versions but not by ImageX.) + +- `wimlib-imagex` supports imaging a live Windows system. Just use the + `--snapshot` option. + +- In many cases, `wimlib-imagex` has simpler command-line syntax than either + ImageX or DISM. + +- Whenever possible, `wimlib-imagex` includes improved documentation and + informational output compared to Microsoft's software. + +- wimlib and `wimlib-imagex` are free software, so you can modify and/or audit + the source code. + +However, some limitations of `wimlib-imagex` compared to ImageX and DISM are: + +- On Windows, `wimlib-imagex` does not support mounting WIM images. + +- `wimlib-imagex` has no awareness of Windows "packages". + +# Additional notes + +It's recommended to use `wimlib-imagex` in scripts to avoid having to +interactively enter commands. However, note that `wimlib-imagex` is largely +just a command-line front-end for wimlib, and it's possible to use wimlib's API +in other front-ends or applications. Currently there is no official graphical +user interface available for wimlib or `wimlib-imagex`. However, +[Wimlib-clc](https://reboot.pro/files/file/588-wimlib-clc/) is an unofficial, +Windows-only graphical user interface for `wimlib-imagex`. + +# Building from source + +As with other open source software, advanced users may choose to build wimlib +from source, potentially with customizations. Currently, wimlib depends on +MinGW-w64 for its Windows support; Visual Studio is not supported. The Windows +binaries can be cross-compiled on Linux, or built on Windows using MSYS2 or +Cygwin. The following instructions show the MSYS2 method. + +First, install MSYS2 by running the installer from +[msys2.org](https://www.msys2.org). + +Then, open any MSYS2 shell and run the following command: + + pacman -Syu --noconfirm + +After that, open any MSYS2 shell again and run the following commands: + + pacman -Syu --noconfirm git + git clone git://wimlib.net/wimlib + +Note: By default the git repository will be on the `master` branch, which is the +latest development snapshot. Optionally, you can check out a specific version, +e.g. `cd wimlib && git checkout v1.14.0`. For old versions, please refer to the +documentation for that version, as things may have changed. It is also possible +to use a release tarball (e.g. `wimlib-1.14.0.tar.gz`) instead of the git repo. + +Finally, to actually do a build, close the MSYS2 shell you have open, then open +one of the following from the Start menu: + +- "MSYS2 MINGW64" - for `x86_64` binaries, built with gcc +- "MSYS2 CLANG64" - for `x86_64` binaries, built with clang +- "MSYS2 MINGW32" - for `i686` binaries, built with gcc +- "MSYS2 CLANG32" - for `i686` binaries, built with clang +- "MSYS2 CLANGARM64" - for ARM64 binaries (EXPERIMENTAL) + +(If unsure, use "MSYS2 MINGW64".) Then run the following commands: + + cd wimlib + tools/windows-build.sh --install-prerequisites + +The script will automatically download and install the packages needed to build +wimlib in the chosen MSYS2 environment, then build wimlib. The output will be +in a folder named similarly to `wimlib-1.14.0-windows-x86_64-bin`. Note that +your "home" folder within MSYS2 is `C:\msys64\home\%USERNAME%` by default. +Therefore, the full path to the output folder will be similar to +`C:\msys64\home\%USERNAME%\wimlib\wimlib-1.14.0-windows-x86_64-bin`. diff --git a/README.md b/README.md new file mode 100644 index 00000000..a15ee091 --- /dev/null +++ b/README.md @@ -0,0 +1,282 @@ +# Introduction + +This is wimlib version 1.14.0-BETA2 (March 2023). wimlib is a C library for +creating, modifying, extracting, and mounting files in the Windows Imaging +Format (WIM files). wimlib and its command-line frontend `wimlib-imagex` +provide a free and cross-platform alternative to Microsoft's WIMGAPI, ImageX, +and DISM. + +For the release notes, see the [NEWS file](NEWS.md). + +# Table of Contents + +- [Installation](#installation) +- [WIM files](#wim-files) +- [ImageX implementation](#imagex-implementation) +- [Compression](#compression) +- [NTFS support](#ntfs-support) +- [Windows PE](#windows-pe) +- [Dependencies](#dependencies) +- [Configuration](#configuration) +- [Portability](#portability) +- [References](#references) +- [History](#history) +- [Notices](#notices) + +# Installation + +To install wimlib and `wimlib-imagex` on UNIX-like systems, you can compile from +source (e.g. `./configure && make && sudo make install`). Alternatively, check +if a package has already been prepared for your operating system. + +To install wimlib and `wimlib-imagex` on Windows, just download and extract the +ZIP file containing the latest binaries. For more details, see +[README.WINDOWS.md](README.WINDOWS.md). + +All official wimlib releases are available from +[wimlib.net](https://wimlib.net). + +# WIM files + +A Windows Imaging (WIM) file is an archive designed primarily for archiving +Windows filesystems. However, it can be used on other platforms as well, with +some limitations. Like some other archive formats such as ZIP, files in WIM +archives may be compressed. WIM archives support multiple compression formats, +including LZX, XPRESS, and LZMS. All these formats are supported by wimlib. + +A WIM archive contains one or more "images", each of which is a logically +independent directory tree. Each image has a 1-based index and usually a name. + +WIM archives provide data deduplication at the level of full file contents. In +other words, each unique "file contents" is only stored once in the archive, +regardless of how many files have that contents across all images. + +A WIM archive may be either stand-alone or split into multiple parts. + +An update of the WIM format --- first added by Microsoft for Windows 8 --- +supports solid-mode compression. This refers to files being compressed together +(e.g. as in a .tar.xz or .7z archive) rather than separately (e.g. as in a .zip +archive). This usually produces a much better compression ratio. Solid +archives are sometimes called "ESD files" by Microsoft and may have the ".esd" +file extension rather than ".wim". They are supported in wimlib since v1.6.0. + +# ImageX implementation + +wimlib itself is a C library, and it provides a [documented public +API](https://wimlib.net/apidoc) for other programs to use. However, it is also +distributed with a command-line program called `wimlib-imagex` that uses this +library to implement an imaging tool similar to Microsoft's `ImageX`. +`wimlib-imagex` supports almost all the capabilities of Microsoft's `ImageX` as +well as additional capabilities. `wimlib-imagex` works on both UNIX-like +systems and Windows, although some features differ between the platforms. + +Run `wimlib-imagex` with no arguments to see an overview of the available +commands and their syntax. Note that the commands have both long and short +forms, e.g. `wimlib-imagex apply` is equivalent to `wimapply`. For additional +documentation: + +- If you have installed `wimlib-imagex` on a UNIX-like system, you will find + further documentation in the man pages; run `man wimlib-imagex` to get + started. + +- If you have downloaded the Windows binary distribution, you will find the + documentation for `wimlib-imagex` in PDF format in the `doc` directory. Note + that although the documentation is written in the style of UNIX manual pages, + it does document Windows-specific behavior when relevant. + +# Compression + +wimlib (and `wimlib-imagex`) can create XPRESS, LZX, and LZMS compressed WIM +archives. wimlib's compression codecs usually outperform and outcompress their +closed-source Microsoft equivalents. Multiple compression levels and chunk +sizes as well as solid mode compression are supported. Compression is +multithreaded by default. Detailed benchmark results and descriptions of the +algorithms used can be found at +[wimlib.net](https://wimlib.net/compression.html). + +# NTFS support + +WIM images may contain data, such as named data streams and +compression/encryption flags, that are best represented on the NTFS filesystem +used on Windows. Also, WIM images may contain security descriptors which are +specific to Windows and cannot be represented on other operating systems. +wimlib handles this NTFS-specific or Windows-specific data in a +platform-dependent way: + +- In the Windows version of wimlib and `wimlib-imagex`, NTFS-specific and + Windows-specific data are supported natively. + +- In the UNIX version of wimlib and `wimlib-imagex`, NTFS-specific and + Windows-specific data are ordinarily ignored; however, there is also special + support for capturing and extracting images directly to/from unmounted NTFS + volumes. This was made possible with the help of libntfs-3g from the NTFS-3G + project. + +For both platforms the code for NTFS capture and extraction is complete enough +that it is possible to apply an image from the `install.wim` contained in recent +Windows installation media (Vista or later) directly to an NTFS filesystem, and +then boot Windows from it after preparing the Boot Configuration Data. In +addition, a Windows installation can be captured (or backed up) into a WIM file, +and then re-applied later. + +# Windows PE + +wimlib can also be used to create customized images of Windows PE on either +UNIX-like systems or Windows. Windows PE (Preinstallation Environment) is a +lightweight version of Windows that runs entirely from memory and can be used to +perform maintenance or to install Windows. It is the operating system that runs +when you boot from the Windows installation media. + +A copy of Windows PE can be found on the installation media for Windows (Vista +or later) as the file `sources/boot.wim`, or in the Windows Automated +Installation Kit (WAIK), which is free to download from Microsoft. + +A shell script `mkwinpeimg` is provided with wimlib on UNIX-like systems to +simplify the process of creating and customizing a bootable Windows PE image, +sourcing the needed files from the Windows installation media or from the WAIK. + +# Dependencies + +This section documents the dependencies of wimlib and the programs distributed +with it, when building for a UNIX-like system from source. If you have +downloaded the Windows binary distribution of wimlib and `wimlib-imagex` then +all dependencies were already included and this section is irrelevant. + +- `libfuse3` (optional but recommended) + + Unless configured `--without-fuse`, wimlib requires `libfuse3`, for mounting + WIM images using [FUSE](https://github.com/libfuse/libfuse). Most Linux + distributions already include this, but make sure you have the `fuse3` package + installed, and also `libfuse3-dev` if your distribution distributes + development files separately. FUSE also requires a kernel module. If the + kernel module is available it should automatically be loaded if you try to + mount a WIM image. + +- `libntfs-3g` (optional but recommended) + + Unless configured `--without-ntfs-3g`, wimlib requires the library and headers + for libntfs-3g to be installed. The minimum required version is 2011-4-12, + but newer versions contain important bug fixes. + +- `cdrkit` (optional) +- `mtools` (optional) +- `syslinux` (optional) +- `cabextract` (optional) + + The `mkwinpeimg` shell script will look for several other programs depending + on what options are given to it. Depending on your Linux distribution, you + may already have these programs installed, or they may be in the software + repository. Making an ISO filesystem requires `mkisofs` from + [`cdrkit`](https://www.cdrkit.org). Making a disk image requires + [`mtools`](https://www.gnu.org/software/mtools) and + [`syslinux`](https://www.syslinux.org). Retrieving files from the Windows + Automated Installation Kit requires + [`cabextract`](https://www.cabextract.org.uk). + +# Configuration + +This section documents the most important options that may be passed to the +"configure" script when building from source: + +- `--without-ntfs-3g` + + If libntfs-3g is not available or is not version 2011-4-12 or later, wimlib + can be built without it, in which case it will not be possible to capture or + apply WIM images directly from/to NTFS volumes. + + The default is `--with-ntfs-3g` when building for any UNIX-like system, and + `--without-ntfs-3g` when building for Windows. + +- `--without-fuse` + + The `--without-fuse` option disables support for mounting WIM images. This + removes dependencies on libfuse and librt. The `wimmount`, `wimmountrw`, and + `wimunmount` commands will not work. + + The default is `--with-fuse` when building for Linux, and `--without-fuse` + otherwise. + +# Portability + +wimlib works on both UNIX-like systems (Linux, Mac OS X, FreeBSD, etc.) and +Windows (Vista and later). + +As much code as possible is shared among all supported platforms, but there +necessarily are some differences in what features are supported on each platform +and how they are implemented. Most notable is that file tree scanning and +extraction are implemented separately for Windows, UNIX, and UNIX (NTFS-3G +mode), to ensure a fast and feature-rich implementation of each platform/mode. + +wimlib is mainly used on x86 and x86\_64 CPUs, but it should also work on a +number of other GCC-supported 32-bit or 64-bit architectures. It has been +tested on the ARM and MIPS architectures. + +Currently, gcc and clang are the only supported compilers. A few nonstandard +extensions are used in the code. + +# References + +The WIM file format is partially specified in a document that can be found in +the Microsoft Download Center. However, this document really only provides an +overview of the format and is not a formal specification. It also does not +cover later extensions of the format, such as solid resources. + +With regards to the supported compression formats: + +- Microsoft has official documentation for XPRESS that is of reasonable quality. +- Microsoft has official documentation for LZX, but in two different documents, + neither of which is completely applicable to its use in the WIM format, and + the first of which contains multiple errors. +- There does not seem to be any official documentation for LZMS, so my comments + and code in `src/lzms_decompress.c` may in fact be the best documentation + available for this particular compression format. + +The algorithms used by wimlib's compression and decompression codecs are +inspired by a variety of sources, including open source projects and computer +science papers. + +The code in `ntfs-3g_apply.c` and `ntfs-3g_capture.c` uses the [NTFS-3G +library](https://github.com/tuxera/ntfs-3g), which is a library for reading and +writing to NTFS filesystems (the filesystem used by recent versions of Windows). + +A limited number of other free programs can handle some parts of the WIM +file format: + +- 7-Zip is able to extract and create WIMs (as well as files in many other + archive formats). However, wimlib is designed specifically to handle WIM + files and provides features previously only available in Microsoft's + implementation, such as the ability to mount WIMs read-write as well as + read-only, the ability to create compressed WIMs, the correct handling of + security descriptors and hard links, support for LZMS compression, and support + for solid archives. + +- [`ImagePyX`](https://github.com/maxpat78/ImagePyX) is a Python program that + provides some capabilities of `wimlib-imagex`, with the help of external + compression codecs. + +If you are looking for an archive format that provides features similar to WIM +but was designed primarily for UNIX, you may want to consider +[SquashFS](https://docs.kernel.org/filesystems/squashfs.html). However, you may +find that wimlib works surprisingly well on UNIX. It will store hard links and +symbolic links, and it supports storing standard UNIX file permissions (owners, +groups, and modes); special files such as device nodes and FIFOs; and extended +attributes. Actually, I use it to back up my own files on Linux! + +# History + +wimlib was originally a project started by Carl Thijssen for use on Linux in the +[Ultimate Deployment Appliance](https://www.ultimatedeployment.org). Since then +the code has been entirely rewritten and improved (main author: Eric Biggers). +Windows support has been available since version 1.3.0 (March 2013). A list of +version-to-version changes can be found in the [NEWS file](NEWS.md). + +# Notices + +wimlib is free software that comes with NO WARRANTY, to the extent permitted by +law. For full details, see the [COPYING file](COPYING). + +Bug reports, suggestions, and other contributions are appreciated and should be +posted to [the forums](https://wimlib.net/forums/). + +wimlib is independently developed and does not contain any code, data, or files +copyrighted by Microsoft. It is not known to be affected by any patents. diff --git a/include/wimlib.h b/include/wimlib.h index c899ca88..b4f145b3 100644 --- a/include/wimlib.h +++ b/include/wimlib.h @@ -16,7 +16,7 @@ * Windows Imaging (WIM) format. This documentation is intended for developers * only. If you have installed wimlib and want to know how to use the @b * wimlib-imagex program, please see the manual pages and also the README file. + * href="https://wimlib.net/git/?p=wimlib;a=blob;f=README.md">README file. * * @section sec_installing Installing * diff --git a/tools/update-version.sh b/tools/update-version.sh index a62b3b89..3e9b49ba 100755 --- a/tools/update-version.sh +++ b/tools/update-version.sh @@ -21,9 +21,9 @@ newyear=$(date +%Y) newver="${newmajor}.${newminor}.${newpatch}" pat='This is wimlib version [^[:space:]]\+ ([^[:space:]]\+ [^[:space:]]\+)' -sed -i "s/$pat/This is wimlib version $newver ($newmonth $newyear)/" README +sed -i "s/$pat/This is wimlib version $newver ($newmonth $newyear)/" README.md -sed -i "s/$oldver/$newver/" tools/get-version-number.sh README.WINDOWS +sed -i "s/$oldver/$newver/" tools/get-version-number.sh README.WINDOWS.md sed -i -e 's/\(#define WIMLIB_MAJOR_VERSION[[:space:]]\+\)[[:digit:]]\+/\1'"$newmajor"'/' \ -e 's/\(#define WIMLIB_MINOR_VERSION[[:space:]]\+\)[[:digit:]]\+/\1'"$newminor"'/' \ diff --git a/tools/windows-build.sh b/tools/windows-build.sh index 92449c65..e6ce4a08 100755 --- a/tools/windows-build.sh +++ b/tools/windows-build.sh @@ -256,15 +256,15 @@ install_binaries() install_text_files() { echo "Installing NEWS, README, and licenses..." - cp NEWS README* COPYING* "$DESTDIR" + cp NEWS* README* COPYING* "$DESTDIR" sed -n '/^#/q; s/^[\/\* ]*//; p' src/divsufsort.c > "$DESTDIR"/COPYING.libdivsufsort-lite if ! grep -q 'Copyright' "$DESTDIR"/COPYING.libdivsufsort-lite; then echo 1>&2 "ERROR: failed to extract libdivsufsort-lite license text" exit 1 fi cd "$DESTDIR" - for fil in NEWS README* COPYING*; do - sed < "$fil" > "${fil}".txt -e 's/$/\r/g' + for fil in NEWS* README* COPYING*; do + sed < "$fil" > "${fil%.md}".txt -e 's/$/\r/g' rm "$fil" done cd .. -- 2.43.0