.\" Automatically generated by Podwrapper::Man 1.24.1 (Pod::Simple 3.40) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "nbdkit-release-notes-1.22 1" .TH nbdkit-release-notes-1.22 1 "2021-01-20" "nbdkit-1.24.1" "NBDKIT" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" nbdkit\-release\-notes\-1.22 \- release notes for nbdkit 1.22 .SH "DESCRIPTION" .IX Header "DESCRIPTION" These are the release notes for nbdkit stable release 1.22. This describes the major changes since 1.20. .PP nbdkit 1.22.0 was released on \fB27 August 2020\fR. .SS "Security" .IX Subsection "Security" There were no security issues found. All past security issues and information about how to report new ones can be found in \&\fBnbdkit\-security\fR\|(1). .SS "Plugins" .IX Subsection "Plugins" New \fBnbdkit\-cdi\-plugin\fR\|(1) (Containerized Data Importer) lets you export a single layer from a container image, allowing you to access disk images distributed using container registry infrastructure. .PP New \fBnbdkit\-ondemand\-plugin\fR\|(1) creates filesystems for clients on demand. .PP New \fBnbdkit\-torrent\-plugin\fR\|(1) serves a BitTorrent file or magnet link over \s-1NBD.\s0 .PP \&\fBnbdkit\-data\-plugin\fR\|(1) and \fBnbdkit\-memory\-plugin\fR\|(1) have a new \&\f(CW\*(C`allocator\*(C'\fR parameter giving more fine-grained control over the allocation strategy. Currently implemented strategies are: sparse array, sparse array with zstd compression, malloc, and malloc with mlock. .PP \&\fBnbdkit\-data\-plugin\fR\|(1) data format now supports strings and alignment. The \f(CW\*(C`disk2data.pl\*(C'\fR script has been enhanced to detect repeated sequences and produce a more compact output. .PP \&\fBnbdkit\-curl\-plugin\fR\|(1) adds support for arbitrary custom request headers. Also it now supports scripts for generating cookies and custom request headers. This is especially useful when accessing web servers that require authentication which has to be renewed periodically. .PP \&\fBnbdkit\-curl\-plugin\fR\|(1) now supports \s-1HTTP/2\s0 servers (David Edmondson, Pino Toscano, Zi Liu). .PP \&\fBnbdkit\-curl\-plugin\fR\|(1) adds support for the \f(CW\*(C`User\-Agent\*(C'\fR header. .PP \&\fBnbdkit\-file\-plugin\fR\|(1) can export multiple files in a directory as separate exports (Eric Blake). .PP \&\fBnbdkit\-file\-plugin\fR\|(1) supports new \f(CW\*(C`cache=none\*(C'\fR and \&\f(CW\*(C`fadvise=normal|random|sequential\*(C'\fR parameters which can be used to optimize access patterns and avoid filling the page cache. .PP \&\fBnbdkit\-nbd\-plugin\fR\|(1) supports proxying to another \s-1NBD\s0 server over \&\f(CW\*(C`AF_VSOCK\*(C'\fR (Eric Blake). .PP \&\fBnbdkit\-nbd\-plugin\fR\|(1) supports new \f(CW\*(C`command=\*(C'\fR and \f(CW\*(C`socket\-fd=\*(C'\fR parameters which allow you to run a subordinate \s-1NBD\s0 server as a command directly from the plugin, or pass in an already connected \s-1NBD\s0 endpoint. .PP \&\fBnbdkit\-streaming\-plugin\fR\|(1) supports streaming to and from local pipes. .PP \&\fBnbdkit\-vddk\-plugin\fR\|(1) now has support for \s-1VDDK 7.0.\s0 A new and useless \*(L"error\*(R" message printed by \s-1VDDK 7\s0 has been suppressed (thanks Ming Xie, Pino Toscano). .PP nbdkit\-ext2\-plugin has been removed. It was deprecated in nbdkit 1.17.8. All existing uses can be replaced with \&\fBnbdkit\-ext2\-filter\fR\|(1). .PP The \f(CW\*(C`\-\*(C'\fR character is now permitted within plugin and filter names (Eric Blake). .SS "Filters" .IX Subsection "Filters" New \fBnbdkit\-ddrescue\-filter\fR\|(1) lets you test disk images recovered by \fBddrescue\fR\|(1) (François Revol). .PP New \fBnbdkit\-gzip\-filter\fR\|(1) can decompress a plugin that contains gzip-compressed data. It replaces \fBnbdkit\-gzip\-plugin\fR\|(1) which is deprecated and will be removed in nbdkit 1.26. .PP New \fBnbdkit\-pause\-filter\fR\|(1) can temporarily stop and later resume \&\s-1NBD\s0 requests. This can be used when taking snapshots. .PP New \fBnbdkit\-swab\-filter\fR\|(1) swaps bytes in the underlying plugin, which can be used to adjust images that have an incorrect byte order (François Revol). .PP New \fBnbdkit\-tar\-filter\fR\|(1) reads and writes files inside a tar file in the underlying plugin. It replaces \fBnbdkit\-tar\-plugin\fR\|(1) which is deprecated and will be removed in nbdkit 1.26. .PP New \fBnbdkit\-tls\-fallback\-filter\fR\|(1) provides alternate content when a client connects without using \s-1TLS\s0 to a server that permits but does not require \s-1TLS\s0 (Eric Blake). .PP \&\fBnbdkit\-fua\-filter\fR\|(1) has new option \f(CW\*(C`fuamode=pass\*(C'\fR to pass through \&\s-1FUA\s0 and flush requests unchanged (disabling the filter). A new, unsafe \f(CW\*(C`fuamode=discard\*(C'\fR mode was added which discards \s-1FUA\s0 and flush requests. .SS "Language bindings" .IX Subsection "Language bindings" New \fBnbdkit\-cc\-plugin\fR\|(3) lets you write small nbdkit plugins as inline C, \*(C+ or OCaml \*(L"scripts\*(R" (and potentially other ahead-of-time compiled programming languages). .PP \&\fBnbdkit\-rust\-plugin\fR\|(3) bindings have been replaced by higher level and more idiomatic bindings. These also support a greater range of server features (Alan Somers). .PP \&\fBnbdkit\-python\-plugin\fR\|(3) now supports parallel plugins. These cannot run Python code in parallel (because of the Python \s-1GIL\s0), but for Python code that blocks, eg. calling out to external services, requests can now be handled in parallel (thanks Nir Soffer). .PP \&\fBnbdkit\-python\-plugin\fR\|(3) has a greater range of examples (Nir Soffer). .PP \&\fBnbdkit\-python\-plugin\fR\|(3) adds support for getting the client export name, calling \f(CW\*(C`nbdkit_debug\*(C'\fR, and also for extents. .SS "Server" .IX Subsection "Server" \&\f(CW\*(C`nbdkit \-\-dump\-config\*(C'\fR has new fields: \f(CW\*(C`version_major\*(C'\fR and \&\f(CW\*(C`version_minor\*(C'\fR to allow easier version parsing from scripts. \&\f(CW\*(C`host_cpu\*(C'\fR and \f(CW\*(C`host_os\*(C'\fR so you can find out if nbdkit was cross-compiled for another platform. \f(CW\*(C`zstd=(yes|no)\*(C'\fR so you can find out if nbdkit was compiled with zstd compression support. .PP The \fI\-e\fR/\fI\-\-exportname\fR option (which never did anything useful previously) is now used to pass the preferred exportname to the \&\fI\-\-run\fR option. In general you should never use this option except in very limited and exceptional circumstances (Eric Blake). .SS "\s-1API\s0" .IX Subsection "API" New \f(CW\*(C`.after_fork\*(C'\fR callback which can be used for plugins which need to create background threads, since those threads would otherwise be stranded if the server forks into the background. The \s-1VDDK\s0 plugin now defers \s-1VDDK\s0 library initialization til \f(CW\*(C`.after_fork\*(C'\fR because it is thought that the library creates background threads especially when accessing remote servers. .PP New \s-1API\s0 \f(CW\*(C`nbdkit_extents_aligned\*(C'\fR is a helper function for filters that retrieves extents as needed until at least a certain range is covered (Eric Blake). .PP New \f(CW\*(C`nbdkit_is_tls\*(C'\fR can be called to determine if \s-1TLS\s0 was negotiated on the connection. Plugins could use this to hide certain exports from non\-authenticated/non\-encrypted clients (Eric Blake). .PP \&\f(CW\*(C`nbdkit_read_password\*(C'\fR with \f(CW\*(C`password=\-\*(C'\fR will now return an error if the input is not a tty. Also \f(CW\*(C`password=\-FD\*(C'\fR is disallowed if the file descriptor is 0, 1 or 2. .SS "Bug fixes" .IX Subsection "Bug fixes" The \s-1VDDK\s0 plugin was extensively refactored to fix many bugs: Reading passwords from a tty should work again. The plugin should now work properly when daemonized or using the \fI\-\-run\fR option. The threading model has been relaxed to \f(CW\*(C`SERIALIZE_REQUESTS\*(C'\fR which should give small performance improvements when using multiple connections. .PP The \f(CW\*(C`base64\*(C'\fR option of \fBnbdkit\-data\-plugin\fR\|(1) has been fixed so it sets the implicit size correctly. .PP The \f(CW\*(C`