sh: Implement .thread_model callback
[nbdkit/ericb.git] / README
blob597d3910138cc19441bcab7159d89c572c9997cd
1 NBD — Network Block Device — is a protocol for accessing Block Devices
2 (hard disks and disk-like things) over a Network.
4 nbdkit is a toolkit for creating NBD servers.
6 The key features are:
8  * Multithreaded NBD server written in C with good performance.
10  * Minimal dependencies for the basic server.
12  * Liberal license (BSD) allows nbdkit to be linked to proprietary
13    libraries or included in proprietary code.
15  * Well-documented, simple plugin API with a stable ABI guarantee.
16    Lets you export “unconventional” block devices easily.
18  * You can write plugins in C, Lua, Perl, Python, OCaml, Ruby, Rust,
19    shell script or Tcl.
21  * Filters can be stacked in front of plugins to transform the output.
23 For documentation, see the ‘docs/’ directory.
25 For plugins, examples and filters, see the ‘plugins/’ and ‘filters/’
26 directories.
28 LICENSE
29 =======
31 This software is copyright (C) Red Hat Inc. and licensed under a BSD
32 license.  See ‘LICENSE’ for details.
34 BUILDING FROM SOURCE
35 ====================
37 Requirements
38 ------------
40 To build the basic server and some plugins nbdkit needs nothing except
41 Linux, FreeBSD or OpenBSD, and:
43  - GCC or Clang
45  - bash
47  - GNU make
49 Although it is possible to build without it, it’s recommended to
50 enable TLS (authentication and encryption) support for which you will
51 need:
53  - gnutls >= 3.3.0
55 Optional dependencies
56 ---------------------
58 To build the man pages, you will optionally need to install:
60  - Perl
62  - Pod::Man and Pod::Simple (Perl library)
64 For SELinux socket labelling support:
66  - libselinux
68 For the gzip plugin:
70  - zlib
72 For the xz filter:
74  - liblzma
76 For the curl (HTTP/FTP) plugin:
78  - libcurl
80 For the ssh plugin:
82  - libssh >= 0.8.0
83    (this is a different library from libssh2 - that will not work)
85 For the iso plugin:
87  - genisoimage or mkisofs
89 For the floppy plugin:
91  - iconv (on Linux this is built into glibc, on other systems
92    it may be a separate library)
94 For the libvirt plugin:
96  - libvirt
98 For the libguestfs plugin, and to run parts of the test suite:
100  - libguestfs
102  - guestfish (from libguestfs)
104 For the ext2 plugin:
106  - ext2fs
108  - com_err
110 For the linuxdisk plugin:
112  - mke2fs >= 1.42.10 (from e2fsprogs)
114 For the Perl, example4 and tar plugins:
116  - perl interpreter
118  - perl development libraries
120  - perl module ExtUtils::Embed
122 For the Python plugin:
124  - python interpreter
125    (either version 2 or 3 may be used)
127  - python development libraries
129 For the OCaml plugin:
131  - OCaml >= 4.02.2
133 For the Tcl plugin:
135  - Tcl development library and headers
137 For the Lua plugin:
139  - Lua development library and headers
141 For the Rust plugin:
143  - cargo (other dependencies will be downloaded at build time)
145 For bash tab completion:
147  - bash-completion >= 1.99
149 To test for memory leaks (‘make check-valgrind’):
151  - valgrind program and development headers
153 For non-essential enhancements to the test suite:
155  - ip, ss (from iproute package)
157  - jq
159  - losetup (from util-linux package)
161  - mke2fs (from e2fsprogs)
163  - qemu-img, qemu-io, qemu-nbd (usually shipped with qemu)
165  - sfdisk (from util-linux)
167  - socat
169  - ssh-keygen
171  - stat (from coreutils)
173 Building
174 --------
176     To build from tarball:         To build from git:
177     ----------------------         ------------------
178                                    autoreconf -i
179     ./configure                    ./configure
180     make                           make
181     make check                     make check
183 To run nbdkit from the source directory, use the top level ./nbdkit
184 wrapper.  It will run nbdkit and plugins from the locally compiled
185 directory:
187     $ ./nbdkit example1 -f -v
188     ./server/nbdkit ./plugins/example1/.libs/nbdkit-example1-plugin.so -f -v
189     [etc]
191 Optionally run this command as root to install everything:
193     make install
195 Python
196 ------
198 By default nbdkit uses the Python version of the Python interpreter
199 called “python” on the current $PATH.  To use another version of
200 Python you may need to set the PYTHON variable when configuring.  For
201 example:
203     ./configure PYTHON=/usr/bin/python3
205 Running the tests
206 -----------------
208 You will need to install libguestfs to run most of the test suite:
210     make check
212 The test suite is fairly comprehensive.  It runs the newly built
213 nbdkit + plugins as a captive process, and tests them using
214 libguestfs.  If there is a failure, look at the corresponding
215 ‘tests/*.log’ file for debug information.
217 A few tests require root privileges, and are skipped by default.  To
218 run them you must do:
220     sudo make check-root
222 If you have the proprietary VDDK library, you can test
223 nbdkit-vddk-plugin against the library like this:
225     make check-vddk vddkdir=vmware-vix-disklib-distrib
227 DOWNLOAD TARBALLS
228 =================
230 Tarballs are available from:
231 http://libguestfs.org/download/nbdkit
233 DEVELOPERS
234 ==========
236 Install the valgrind program and development headers.
238 Use:
240     ./configure --enable-gcc-warnings --enable-valgrind
242 When testing use:
244     make check
245     make check-valgrind
247 For development ideas, see the TODO file.
249 The upstream git repository is:
250 https://github.com/libguestfs/nbdkit
252 Please send patches to the libguestfs mailing list:
253 https://www.redhat.com/mailman/listinfo/libguestfs
255 For further information, see:
256 http://libguestfs.org/
257 https://github.com/NetworkBlockDevice/nbd/blob/master/doc/proto.md