1nbdkit(1) NBDKIT nbdkit(1)
2
3
4
6 nbdkit - toolkit for creating NBD servers
7
9 nbdkit [-4|--ipv4-only] [-6|--ipv6-only]
10 [-D|--debug PLUGIN|FILTER|nbdkit.FLAG=N]
11 [-e|--exportname EXPORTNAME] [--exit-with-parent]
12 [--filter FILTER ...] [-f|--foreground]
13 [-g|--group GROUP] [-i|--ipaddr IPADDR]
14 [--log stderr|syslog|null]
15 [-n|--newstyle] [--mask-handshake MASK] [--no-sr] [-o|--oldstyle]
16 [-P|--pidfile PIDFILE]
17 [-p|--port PORT] [-r|--readonly]
18 [--run CMD] [-s|--single] [--selinux-label LABEL] [--swap]
19 [-t|--threads THREADS]
20 [--tls off|on|require]
21 [--tls-certificates /path/to/certificates]
22 [--tls-psk /path/to/pskfile] [--tls-verify-peer]
23 [-U|--unix SOCKET] [-u|--user USER]
24 [-v|--verbose] [-V|--version] [--vsock]
25 PLUGIN [[KEY=]VALUE [KEY=VALUE [...]]]
26
27 nbdkit --dump-config
28
29 nbdkit PLUGIN --dump-plugin
30
31 nbdkit --help
32
34 Network Block Device (NBD) is a network protocol for accessing block
35 devices over the network. Block devices are hard disks and things that
36 behave like hard disks such as disk images and virtual machines.
37
38 nbdkit is both a toolkit for creating NBD servers from “unconventional”
39 sources, and the name of an NBD server. nbdkit ships with many plugins
40 for performing common tasks like serving local files.
41
42 Plugins and filters
43 nbdkit is different from other NBD servers because you can easily
44 create new Network Block Device sources by writing a few glue
45 functions, possibly in C, or perhaps in a high level language like Perl
46 or Python. The liberal licensing of nbdkit is meant to allow you to
47 link nbdkit with proprietary libraries or to include nbdkit in
48 proprietary code.
49
50 If you want to write your own nbdkit plugin you should read
51 nbdkit-plugin(3).
52
53 nbdkit also has a concept of filters which can be layered on top of
54 plugins. Several filters are provided with nbdkit and if you want to
55 write your own you should read nbdkit-filter(3).
56
58 Basic file serving
59 • Serve file disk.img on port 10809 using nbdkit-file-plugin(1), and
60 connect to it using guestfish(1):
61
62 nbdkit file disk.img
63 guestfish --rw --format=raw -a nbd://localhost
64
65 • Serve file disk.img on port 10809, requiring clients to use
66 encrypted (TLS) connections:
67
68 nbdkit --tls=require file disk.img
69
70 Other nbdkit plugins
71 • Create a small disk containing test patterns using
72 nbdkit-data-plugin(1):
73
74 nbdkit data ' ( 0x55 0xAA )*2048 '
75
76 • Forward an NBD connection to a remote server over HTTPS or SSH
77 using nbdkit-curl-plugin(1) or nbdkit-ssh-plugin(1):
78
79 nbdkit -r curl https://example.com/disk.img
80
81 nbdkit ssh host=example.com /var/tmp/disk.img
82
83 • Create a sparse 1 terabyte RAM disk using nbdkit-memory-plugin(1)
84 and use it as a loop device (nbdkit-loop(1)):
85
86 nbdkit memory 1T
87 nbd-client localhost /dev/nbd0
88
89 • Create a floppy disk image containing files from a local directory
90 using nbdkit-floppy-plugin(1):
91
92 nbdkit floppy dir/
93
94 Combining plugins and filters
95 • Serve only the first partition from compressed disk image
96 disk.img.xz, combining nbdkit-partition-filter(1),
97 nbdkit-xz-filter(1) and nbdkit-file-plugin(1).
98
99 nbdkit --filter=partition --filter=xz file disk.img.xz partition=1
100
101 To understand this command line:
102
103 plugin name and plugin parameter
104 │
105 ┌───────┴──────┐
106 │ │
107 nbdkit --filter=partition --filter=xz file disk.img.xz partition=1
108 │ │ │
109 └──────────────┴────┬─────────────────────┘
110 │
111 filters and filter parameter
112
113 • Create a scratch, empty nbdkit device and inject errors and delays,
114 for testing clients, using nbdkit-memory-plugin(1),
115 nbdkit-error-filter(1) and nbdkit-delay-filter(1):
116
117 nbdkit --filter=error --filter=delay memory 100M \
118 error-rate=10% rdelay=1 wdelay=1
119
120 Writing plugins in shell script
121 • Write a simple, custom plugin in shell script using
122 nbdkit-sh-plugin(3):
123
124 nbdkit sh - <<'EOF'
125 case "$1" in
126 get_size) echo 1M ;;
127 pread) dd if=/dev/zero count=$3 iflag=count_bytes ;;
128 *) exit 2 ;;
129 esac
130 EOF
131
132 • The same example as above can be written entirely on the command
133 line using nbdkit-eval-plugin(1):
134
135 nbdkit eval get_size='echo 1M' \
136 pread='dd if=/dev/zero count=$3 iflag=count_bytes'
137
138 Display information
139 Display information about nbdkit or a specific plugin:
140
141 nbdkit --help
142 nbdkit --version
143 nbdkit --dump-config
144 nbdkit example1 --help
145 nbdkit example1 --dump-plugin
146
148 --help
149 Display brief command line usage information and exit.
150
151 -4
152 --ipv4-only
153 -6
154 --ipv6-only
155 When a non-numeric argument is passed to the -i option (such as a
156 Fully Qualified Domain Name, or a host name from "/etc/hosts"),
157 restrict the name resolution to IPv4 or IPv6 addresses.
158
159 When the -i option is omitted, listen on only the IPv4 or IPv6
160 address of all interfaces (0.0.0.0 or "::", respectively).
161
162 When both -4 and -6 options are present on the command line, the
163 last one takes effect.
164
165 -D PLUGIN.FLAG=N
166 -D FILTER.FLAG=N
167 --debug PLUGIN.FLAG=N
168 --debug FILTER.FLAG=N
169 Set the plugin or filter Debug Flag called "FLAG" to the integer
170 value "N". See "Debug Flags" in nbdkit-plugin(3).
171
172 -D nbdkit.FLAG=N
173 --debug nbdkit.FLAG=N
174 (nbdkit ≥ 1.18)
175
176 Set the nbdkit server Debug Flag called "FLAG" to the integer value
177 "N". See "SERVER DEBUG FLAGS" below.
178
179 --dump-config
180 Dump out the compile-time configuration values and exit. See
181 nbdkit-probing(1).
182
183 --dump-plugin
184 Dump out information about the plugin and exit. See
185 nbdkit-probing(1).
186
187 --exit-with-parent
188 If the parent process exits, we exit. This can be used to avoid
189 complicated cleanup or orphaned nbdkit processes. There are some
190 important caveats with this, see "EXIT WITH PARENT" in
191 nbdkit-captive(1).
192
193 An alternative to this is "CAPTIVE NBDKIT" in nbdkit-captive(1).
194
195 This option implies --foreground.
196
197 -e EXPORTNAME
198 --export EXPORTNAME
199 --export-name EXPORTNAME
200 --exportname EXPORTNAME
201 Set a preferred exportname to expose in the shell environment
202 created during --run. The use of this option without --run has no
203 effect. This option does not change what nbdkit advertises as a
204 server, but can aid in writing a captive client that wants to
205 access particular content from a plugin that differentiates content
206 based on the client's choice of export name.
207
208 If not set, the --run environment is set to access the default
209 exportname "" (empty string).
210
211 -f
212 --foreground
213 --no-fork
214 Don't fork into the background.
215
216 --filter FILTER
217 Add a filter before the plugin. This option may be given one or
218 more times to stack filters in front of the plugin. They are
219 processed in the order they appear on the command line. See
220 "FILTERS" and nbdkit-filter(3).
221
222 -g GROUP
223 --group GROUP
224 Change group to "GROUP" after starting up. A group name or numeric
225 group ID can be used.
226
227 The server needs sufficient permissions to be able to do this.
228 Normally this would mean starting the server up as root.
229
230 See also -u.
231
232 -i IPADDR
233 --ip-addr IPADDR
234 --ipaddr IPADDR
235 Listen on the specified interface. The default is to listen on all
236 interfaces. See also -4, -6, and -p.
237
238 --log=stderr
239 --log=syslog
240 --log=null
241 Send error messages to standard error (--log=stderr), or to the
242 system log (--log=syslog), or discard them completely (--log=null,
243 not recommended for normal use).
244
245 The default is to send error messages to stderr, unless nbdkit
246 forks into the background in which case they are sent to syslog.
247
248 For more details see "LOGGING" in nbdkit-service(1).
249
250 -n
251 --new-style
252 --newstyle
253 Use the newstyle NBD protocol. This is the default in nbdkit ≥
254 1.3. In earlier versions the default was oldstyle. See
255 nbdkit-protocol(1).
256
257 --no-sr
258 Do not advertise structured replies. A client must request
259 structured replies to take advantage of block status and potential
260 sparse reads; however, as structured reads are not a mandatory part
261 of the newstyle NBD protocol, this option can be used to debug
262 client fallbacks for dealing with older servers. See
263 nbdkit-protocol(1).
264
265 -o
266 --old-style
267 --oldstyle
268 Use the oldstyle NBD protocol. This was the default in nbdkit ≤
269 1.2, but now the default is newstyle. Note this is incompatible
270 with newer features such as export names and TLS. See
271 nbdkit-protocol(1).
272
273 -P PIDFILE
274 --pid-file PIDFILE
275 --pidfile PIDFILE
276 Write "PIDFILE" (containing the process ID of the server) after
277 nbdkit becomes ready to accept connections.
278
279 If the file already exists, it is overwritten. nbdkit does not
280 delete the file when it exits.
281
282 -p PORT
283 --port PORT
284 Change the TCP/IP port number on which nbdkit serves requests. The
285 default is 10809. See also -i.
286
287 -r
288 --read-only
289 --readonly
290 The export will be read-only. If a client writes, then it will get
291 an error.
292
293 Note that some plugins inherently don't support writes. With those
294 plugins the -r option is added implicitly.
295
296 nbdkit-cow-filter(1) can be placed over read-only plugins to
297 provide copy-on-write (or "snapshot") functionality. If you are
298 using qemu as a client then it also supports snapshots.
299
300 --run CMD
301 Run nbdkit as a captive subprocess of "CMD". When "CMD" exits,
302 nbdkit is killed. See "CAPTIVE NBDKIT" in nbdkit-captive(1).
303
304 Note that the command is executed by /bin/sh. On some platforms
305 like Debian this might not be a full-featured shell.
306
307 This option implies --foreground.
308
309 -s
310 --single
311 --stdin
312 Don't fork. Handle a single NBD connection on stdin/stdout. After
313 stdin closes, the server exits.
314
315 You can use this option to run nbdkit from inetd or similar
316 superservers; or just for testing; or if you want to run nbdkit in
317 a non-conventional way. Note that if you want to run nbdkit from
318 systemd, then it may be better to use "SOCKET ACTIVATION" in
319 nbdkit-service(1) instead of this option.
320
321 This option implies --foreground.
322
323 --selinux-label SOCKET-LABEL
324 Apply the SELinux label "SOCKET-LABEL" to the nbdkit listening
325 socket.
326
327 The common — perhaps only — use of this option is to allow libvirt
328 guests which are using SELinux and sVirt confinement to access
329 nbdkit Unix domain sockets. The example below shows how to do
330 this. Note that the socket and filesystem labels are different.
331
332 nbdkit -U /tmp/sock --selinux-label=system_u:object_r:svirt_socket_t:s0 ...
333 chcon system_u:object_r:svirt_image_t:s0 /tmp/sock
334
335 --swap
336 (nbdkit ≥ 1.18)
337
338 Specifies that the NBD device will be used as swap space loop
339 mounted on the same machine which is running nbdkit. To avoid
340 deadlocks this locks the whole nbdkit process into memory using
341 mlockall(2). This may require additional permissions, such as
342 starting the server as root or raising the "RLIMIT_MEMLOCK"
343 (ulimit(1) -l) limit on the process.
344
345 -t THREADS
346 --threads THREADS
347 Set the number of threads to be used per connection, which in turn
348 controls the number of outstanding requests that can be processed
349 at once. Only matters for plugins with thread_model=parallel
350 (where it defaults to 16). To force serialized behavior (useful if
351 the client is not prepared for out-of-order responses), set this to
352 1.
353
354 --tls=off
355 --tls=on
356 --tls=require
357 Disable, enable or require TLS (authentication and encryption
358 support). See nbdkit-tls(1).
359
360 --tls-certificates /path/to/certificates
361 Set the path to the TLS certificates directory. If not specified,
362 some built-in paths are checked. See nbdkit-tls(1) for more
363 details.
364
365 --tls-psk /path/to/pskfile
366 Set the path to the pre-shared keys (PSK) file. If used, this
367 overrides certificate authentication. There is no built-in path.
368 See nbdkit-tls(1) for more details.
369
370 --tls-verify-peer
371 Enables TLS client certificate verification. The default is not to
372 check the client's certificate.
373
374 -U SOCKET
375 --unix SOCKET
376 -U -
377 --unix -
378 Accept connections on the Unix domain socket "SOCKET" (which is a
379 path).
380
381 nbdkit creates this socket, but it will probably have incorrect
382 permissions (too permissive). If it is a problem that some
383 unauthorized user could connect to this socket between the time
384 that nbdkit starts up and the authorized user connects, then put
385 the socket into a directory that has restrictive permissions.
386
387 nbdkit does not delete the socket file when it exits. The caller
388 should delete the socket file after use (else if you try to start
389 nbdkit up again you will get an "Address already in use" error).
390
391 If the socket name is - then nbdkit generates a randomly named
392 private socket. This is useful with "CAPTIVE NBDKIT" in
393 nbdkit-captive(1).
394
395 -u USER
396 --user USER
397 Change user to "USER" after starting up. A user name or numeric
398 user ID can be used.
399
400 The server needs sufficient permissions to be able to do this.
401 Normally this would mean starting the server up as root.
402
403 See also -g.
404
405 -v
406 --verbose
407 Enable verbose messages.
408
409 It's a good idea to use -f as well so the process does not fork
410 into the background (but not required).
411
412 -V
413 --version
414 Print the version number of nbdkit and exit.
415
416 The --dump-config option provides separate major and minor numbers
417 and may be easier to parse from shell scripts.
418
419 --vsock
420 (nbdkit ≥ 1.16)
421
422 Use the AF_VSOCK protocol (instead of TCP/IP). You must use this
423 in conjunction with -p/--port. See "AF_VSOCK" in
424 nbdkit-service(1).
425
427 You can give the full path to the plugin, like this:
428
429 nbdkit $libdir/nbdkit/plugins/nbdkit-file-plugin.so [...]
430
431 but it is usually more convenient to use this equivalent syntax:
432
433 nbdkit file [...]
434
435 $libdir is set at compile time. To print it out, do:
436
437 nbdkit --dump-config
438
440 After specifying the plugin name you can (optionally, it depends on the
441 plugin) give plugin configuration on the command line in the form of
442 "key=value". For example:
443
444 nbdkit file file=disk.img
445
446 To list all the options supported by a plugin, do:
447
448 nbdkit --help file
449
450 To dump information about a plugin, do:
451
452 nbdkit file --dump-plugin
453
454 Magic parameters
455 Some plugins declare a special "magic config key". This is a key which
456 is assumed if no "key=" part is present. For example:
457
458 nbdkit file disk.img
459
460 is assumed to be "file=disk.img" because the file plugin declares
461 "file" as its magic config key. There can be ambiguity in the parsing
462 of magic config keys if the value might look like a "key=value". If
463 there could be ambiguity then modify the value, eg. by prefixing it
464 with "./"
465
466 There is also a special exception for plugins which do not declare a
467 magic config key, but where the first plugin argument does not contain
468 an '=' character: it is assumed to be "script=value". This is used by
469 scripting language plugins:
470
471 nbdkit perl foo.pl [args...]
472
473 has the same meaning as:
474
475 nbdkit perl script=foo.pl [args...]
476
477 Shebang scripts
478 You can use "#!" to run nbdkit plugins written in most scripting
479 languages. The file should be executable. For example:
480
481 #!/usr/sbin/nbdkit perl
482 sub open {
483 # etc
484 }
485
486 (see nbdkit-perl-plugin(3) for a full example).
487
489 As well as enabling or disabling debugging in the server using
490 --verbose you can control extra debugging in the server using the
491 -D nbdkit.* flags listed in this section. Note these flags are an
492 internal implementation detail of the server and may be changed or
493 removed at any time in the future.
494
495 -D nbdkit.backend.controlpath=0
496 -D nbdkit.backend.controlpath=1
497 -D nbdkit.backend.datapath=0
498 -D nbdkit.backend.datapath=1
499 These flags control the verbosity of nbdkit backend debugging
500 messages (the ones which show every request processed by the
501 server). The default for both settings is 1 (normal debugging) but
502 you can set them to 0 to suppress these messages.
503
504 -D nbdkit.backend.datapath=0 is the more useful setting which lets
505 you suppress messages about pread, pwrite, zero, trim, etc.
506 commands. When transferring large amounts of data these messages
507 are numerous and not usually very interesting.
508
509 -D nbdkit.backend.controlpath=0 suppresses the non-datapath
510 commands (config, open, close, can_write, etc.)
511
512 -D nbdkit.tls.log=N
513 Enable TLS logging. "N" can be in the range 0 (no logging) to 99.
514 See gnutls_global_set_log_level(3).
515
516 -D nbdkit.tls.session=1
517 Print additional information about the TLS session, such as the
518 type of authentication and encryption, and client certificate
519 information.
520
522 nbdkit responds to the following signals:
523
524 "SIGINT"
525 "SIGQUIT"
526 "SIGTERM"
527 The server exits cleanly.
528
529 "SIGPIPE"
530 This signal is ignored.
531
533 "LISTEN_FDS"
534 "LISTEN_PID"
535 If present in the environment when nbdkit starts up, these trigger
536 "SOCKET ACTIVATION" in nbdkit-service(1).
537
539 Other topics
540 nbdkit-captive(1) — Run nbdkit under another process and have it
541 reliably cleaned up.
542
543 nbdkit-client(1) — How to mount NBD filesystems on a client machine.
544
545 nbdkit-loop(1) — Use nbdkit with the Linux kernel client to create loop
546 devices and loop mounts.
547
548 nbdkit-probing(1) — How to probe for nbdkit configuration and plugins.
549
550 nbdkit-protocol(1) — Which parts of the NBD protocol nbdkit supports.
551
552 nbdkit-security(1) — Lists past security issues in nbdkit.
553
554 nbdkit-service(1) — Running nbdkit as a service, and systemd socket
555 activation.
556
557 nbdkit-tls(1) — Authentication and encryption of NBD connections
558 (sometimes incorrectly called "SSL").
559
560 Plugins
561 nbdkit-cdi-plugin(1), nbdkit-curl-plugin(1), nbdkit-data-plugin(1),
562 nbdkit-eval-plugin(1), nbdkit-example1-plugin(1),
563 nbdkit-example2-plugin(1), nbdkit-example3-plugin(1),
564 nbdkit-example4-plugin(1), nbdkit-file-plugin(1),
565 nbdkit-floppy-plugin(1), nbdkit-full-plugin(1),
566 nbdkit-guestfs-plugin(1), nbdkit-info-plugin(1), nbdkit-iso-plugin(1),
567 nbdkit-libvirt-plugin(1), nbdkit-linuxdisk-plugin(1),
568 nbdkit-memory-plugin(1), nbdkit-nbd-plugin(1), nbdkit-null-plugin(1),
569 nbdkit-ondemand-plugin(1), nbdkit-partitioning-plugin(1),
570 nbdkit-pattern-plugin(1), nbdkit-random-plugin(1), nbdkit-S3-plugin(1),
571 nbdkit-sparse-random-plugin(1), nbdkit-split-plugin(1),
572 nbdkit-ssh-plugin(1), nbdkit-tmpdisk-plugin(1),
573 nbdkit-torrent-plugin(1), nbdkit-vddk-plugin(1), nbdkit-zero-plugin(1)
574 ; nbdkit-cc-plugin(3), nbdkit-golang-plugin(3), nbdkit-lua-plugin(3),
575 nbdkit-ocaml-plugin(3), nbdkit-perl-plugin(3), nbdkit-python-plugin(3),
576 nbdkit-ruby-plugin(3), nbdkit-rust-plugin(3), nbdkit-sh-plugin(3),
577 nbdkit-tcl-plugin(3) .
578
579 Filters
580 nbdkit-blocksize-filter(1), nbdkit-blocksize-policy-filter(1),
581 nbdkit-cache-filter(1), nbdkit-cacheextents-filter(1),
582 nbdkit-checkwrite-filter(1), nbdkit-cow-filter(1),
583 nbdkit-ddrescue-filter(1), nbdkit-delay-filter(1),
584 nbdkit-error-filter(1), nbdkit-exitlast-filter(1),
585 nbdkit-exitwhen-filter(1), nbdkit-exportname-filter(1),
586 nbdkit-ext2-filter(1), nbdkit-extentlist-filter(1),
587 nbdkit-fua-filter(1), nbdkit-gzip-filter(1), nbdkit-ip-filter(1),
588 nbdkit-limit-filter(1), nbdkit-log-filter(1),
589 nbdkit-multi-conn-filter(1), nbdkit-nocache-filter(1),
590 nbdkit-noextents-filter(1), nbdkit-nofilter-filter(1),
591 nbdkit-noparallel-filter(1), nbdkit-nozero-filter(1),
592 nbdkit-offset-filter(1), nbdkit-partition-filter(1),
593 nbdkit-pause-filter(1), nbdkit-protect-filter(1),
594 nbdkit-rate-filter(1), nbdkit-readahead-filter(1),
595 nbdkit-retry-filter(1), nbdkit-retry-request-filter(1),
596 nbdkit-stats-filter(1), nbdkit-swab-filter(1), nbdkit-tar-filter(1),
597 nbdkit-tls-fallback-filter(1), nbdkit-truncate-filter(1),
598 nbdkit-xz-filter(1) .
599
600 For developers
601 nbdkit-plugin(3), nbdkit-filter(3).
602
603 Writing plugins in other programming languages
604 nbdkit-cc-plugin(3), nbdkit-golang-plugin(3), nbdkit-lua-plugin(3),
605 nbdkit-ocaml-plugin(3), nbdkit-perl-plugin(3), nbdkit-python-plugin(3),
606 nbdkit-ruby-plugin(3), nbdkit-rust-plugin(3), nbdkit-sh-plugin(3),
607 nbdkit-tcl-plugin(3) .
608
609 Release notes for previous releases of nbdkit
610 nbdkit-release-notes-1.30(1), nbdkit-release-notes-1.28(1),
611 nbdkit-release-notes-1.26(1), nbdkit-release-notes-1.24(1),
612 nbdkit-release-notes-1.22(1), nbdkit-release-notes-1.20(1),
613 nbdkit-release-notes-1.18(1), nbdkit-release-notes-1.16(1),
614 nbdkit-release-notes-1.14(1), nbdkit-release-notes-1.12(1),
615 nbdkit-release-notes-1.10(1), nbdkit-release-notes-1.8(1),
616 nbdkit-release-notes-1.6(1), nbdkit-release-notes-1.4(1).
617
618 NBD clients
619 guestfish(1), libnbd(3), nbd-client(1), nbdcopy(1), nbdfuse(1),
620 nbdinfo(1), nbdsh(1), qemu(1).
621
622 nbdkit links
623 http://gitlab.com/nbdkit/nbdkit — Source code.
624
625 Other NBD servers
626 qemu-nbd(1), nbd-server(1), https://bitbucket.org/hirofuchi/xnbd.
627
628 Documentation for the NBD protocol
629 https://github.com/NetworkBlockDevice/nbd/blob/master/doc/proto.md,
630 https://nbd.sourceforge.io/.
631
632 Similar protocols
633 https://en.wikipedia.org/wiki/iSCSI,
634 https://en.wikipedia.org/wiki/ATA_over_Ethernet,
635 https://en.wikipedia.org/wiki/Fibre_Channel_over_Ethernet.
636
637 Other manual pages of interest
638 gnutls_priority_init(3), qemu-img(1), psktool(1), systemd.socket(5).
639
641 Eric Blake
642
643 Richard W.M. Jones
644
645 Yann E. MORIN
646
647 Nir Soffer
648
649 Pino Toscano
650
652 Copyright (C) 2013-2020 Red Hat Inc.
653
655 Redistribution and use in source and binary forms, with or without
656 modification, are permitted provided that the following conditions are
657 met:
658
659 • Redistributions of source code must retain the above copyright
660 notice, this list of conditions and the following disclaimer.
661
662 • Redistributions in binary form must reproduce the above copyright
663 notice, this list of conditions and the following disclaimer in the
664 documentation and/or other materials provided with the
665 distribution.
666
667 • Neither the name of Red Hat nor the names of its contributors may
668 be used to endorse or promote products derived from this software
669 without specific prior written permission.
670
671 THIS SOFTWARE IS PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND ANY
672 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
673 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
674 PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR CONTRIBUTORS BE
675 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
676 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
677 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
678 BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
679 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
680 OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
681 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
682
683
684
685nbdkit-1.30.7 2022-07-10 nbdkit(1)