gnu: Add dwarfs.
* gnu/packages/file-systems.scm (dwarfs): New variable.
This commit is contained in:
		
							parent
							
								
									04ade01beb
								
							
						
					
					
						commit
						3a1b18aa45
					
				
					 1 changed files with 99 additions and 0 deletions
				
			
		| 
						 | 
					@ -46,26 +46,36 @@
 | 
				
			||||||
  #:use-module (gnu packages admin)
 | 
					  #:use-module (gnu packages admin)
 | 
				
			||||||
  #:use-module (gnu packages attr)
 | 
					  #:use-module (gnu packages attr)
 | 
				
			||||||
  #:use-module (gnu packages autotools)
 | 
					  #:use-module (gnu packages autotools)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages backup)
 | 
				
			||||||
  #:use-module (gnu packages base)
 | 
					  #:use-module (gnu packages base)
 | 
				
			||||||
  #:use-module (gnu packages bash)
 | 
					  #:use-module (gnu packages bash)
 | 
				
			||||||
  #:use-module (gnu packages bison)
 | 
					  #:use-module (gnu packages bison)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages boost)
 | 
				
			||||||
  #:use-module (gnu packages check)
 | 
					  #:use-module (gnu packages check)
 | 
				
			||||||
  #:use-module (gnu packages compression)
 | 
					  #:use-module (gnu packages compression)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages cpp)
 | 
				
			||||||
  #:use-module (gnu packages crypto)
 | 
					  #:use-module (gnu packages crypto)
 | 
				
			||||||
  #:use-module (gnu packages curl)
 | 
					  #:use-module (gnu packages curl)
 | 
				
			||||||
  #:use-module (gnu packages cyrus-sasl)
 | 
					  #:use-module (gnu packages cyrus-sasl)
 | 
				
			||||||
  #:use-module (gnu packages datastructures)
 | 
					  #:use-module (gnu packages datastructures)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages digest)
 | 
				
			||||||
  #:use-module (gnu packages documentation)
 | 
					  #:use-module (gnu packages documentation)
 | 
				
			||||||
  #:use-module (gnu packages docbook)
 | 
					  #:use-module (gnu packages docbook)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages elf)
 | 
				
			||||||
  #:use-module (gnu packages flex)
 | 
					  #:use-module (gnu packages flex)
 | 
				
			||||||
  #:use-module (gnu packages gawk)
 | 
					  #:use-module (gnu packages gawk)
 | 
				
			||||||
  #:use-module (gnu packages glib)
 | 
					  #:use-module (gnu packages glib)
 | 
				
			||||||
  #:use-module (gnu packages gnupg)
 | 
					  #:use-module (gnu packages gnupg)
 | 
				
			||||||
  #:use-module (gnu packages golang)
 | 
					  #:use-module (gnu packages golang)
 | 
				
			||||||
  #:use-module (gnu packages guile)
 | 
					  #:use-module (gnu packages guile)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages jemalloc)
 | 
				
			||||||
  #:use-module (gnu packages kerberos)
 | 
					  #:use-module (gnu packages kerberos)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages libevent)
 | 
				
			||||||
  #:use-module (gnu packages libffi)
 | 
					  #:use-module (gnu packages libffi)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages libunwind)
 | 
				
			||||||
  #:use-module (gnu packages linux)
 | 
					  #:use-module (gnu packages linux)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages maths)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages man)
 | 
				
			||||||
  #:use-module (gnu packages nfs)
 | 
					  #:use-module (gnu packages nfs)
 | 
				
			||||||
  #:use-module (gnu packages onc-rpc)
 | 
					  #:use-module (gnu packages onc-rpc)
 | 
				
			||||||
  #:use-module (gnu packages openldap)
 | 
					  #:use-module (gnu packages openldap)
 | 
				
			||||||
| 
						 | 
					@ -73,6 +83,8 @@
 | 
				
			||||||
  #:use-module (gnu packages perl)
 | 
					  #:use-module (gnu packages perl)
 | 
				
			||||||
  #:use-module (gnu packages photo)
 | 
					  #:use-module (gnu packages photo)
 | 
				
			||||||
  #:use-module (gnu packages pkg-config)
 | 
					  #:use-module (gnu packages pkg-config)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages popt)
 | 
				
			||||||
 | 
					  #:use-module (gnu packages pretty-print)
 | 
				
			||||||
  #:use-module (gnu packages python)
 | 
					  #:use-module (gnu packages python)
 | 
				
			||||||
  #:use-module (gnu packages python-crypto)
 | 
					  #:use-module (gnu packages python-crypto)
 | 
				
			||||||
  #:use-module (gnu packages python-web)
 | 
					  #:use-module (gnu packages python-web)
 | 
				
			||||||
| 
						 | 
					@ -1863,3 +1875,90 @@ for large btrfs filesystems.  It is an offline dedupe combined with an
 | 
				
			||||||
incremental data scan capability to minimize time data spends on disk from
 | 
					incremental data scan capability to minimize time data spends on disk from
 | 
				
			||||||
write to dedupe.")
 | 
					write to dedupe.")
 | 
				
			||||||
    (license license:gpl3+)))
 | 
					    (license license:gpl3+)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define-public dwarfs
 | 
				
			||||||
 | 
					  (package
 | 
				
			||||||
 | 
					    (name "dwarfs")
 | 
				
			||||||
 | 
					    (version "0.6.2")
 | 
				
			||||||
 | 
					    (source (origin
 | 
				
			||||||
 | 
					              (method url-fetch)
 | 
				
			||||||
 | 
					              ;; The release archive is needed so that version.h is included.
 | 
				
			||||||
 | 
					              (uri (string-append "https://github.com/mhx/dwarfs/releases/download/v"
 | 
				
			||||||
 | 
					                                  version "/dwarfs-" version ".tar.xz"))
 | 
				
			||||||
 | 
					              (sha256
 | 
				
			||||||
 | 
					               (base32
 | 
				
			||||||
 | 
					                "1kncxf85gsj3anck8ccjmxn2azp5ifqbgkiky2kharmvphkbmfcv"))
 | 
				
			||||||
 | 
					              (snippet
 | 
				
			||||||
 | 
					               #~(begin
 | 
				
			||||||
 | 
					                   (use-modules (guix build utils))
 | 
				
			||||||
 | 
					                   ;; Prefer system libraries instead of submodules.
 | 
				
			||||||
 | 
					                   ;; TODO: Package fbthrift.
 | 
				
			||||||
 | 
					                   ;; TODO: Can we use Guix own folly?  There is no CMake option for it.
 | 
				
			||||||
 | 
					                   ;; TODO: Package parallel-hashmap.
 | 
				
			||||||
 | 
					                   (for-each delete-file-recursively
 | 
				
			||||||
 | 
					                             '(;; "fbthrift"
 | 
				
			||||||
 | 
					                               ;; "folly"
 | 
				
			||||||
 | 
					                               ;; "parallel-hashmap"
 | 
				
			||||||
 | 
					                               "xxHash"
 | 
				
			||||||
 | 
					                               "zstd"))))))
 | 
				
			||||||
 | 
					    (build-system cmake-build-system)
 | 
				
			||||||
 | 
					    (arguments
 | 
				
			||||||
 | 
					     '(#:tests? #f ; TODO: 1 test fails because 'modprobe fuse' needs privileged access.
 | 
				
			||||||
 | 
					       #:configure-flags
 | 
				
			||||||
 | 
					       (list "-DPREFER_SYSTEM_ZSTD=ON"
 | 
				
			||||||
 | 
					             "-DPREFER_SYSTEM_XXHASH=ON"
 | 
				
			||||||
 | 
					             "-DPREFER_SYSTEM_GTEST=ON"
 | 
				
			||||||
 | 
					             "-DWITH_TESTS=ON"
 | 
				
			||||||
 | 
					             ;; Disable man pages since ronn fails to run without hpricot.
 | 
				
			||||||
 | 
					             "-DWITH_MAN_PAGES=OFF")))
 | 
				
			||||||
 | 
					    (native-inputs
 | 
				
			||||||
 | 
					     (list
 | 
				
			||||||
 | 
					      ;; FIXME: Building with ronn fails because hpricot is missing from Guix.
 | 
				
			||||||
 | 
					      folly googletest libdwarf libevent pkg-config))
 | 
				
			||||||
 | 
					    (inputs
 | 
				
			||||||
 | 
					     (list
 | 
				
			||||||
 | 
					      boost
 | 
				
			||||||
 | 
					      double-conversion
 | 
				
			||||||
 | 
					      fmt
 | 
				
			||||||
 | 
					      fuse-3
 | 
				
			||||||
 | 
					      gflags
 | 
				
			||||||
 | 
					      jemalloc
 | 
				
			||||||
 | 
					      libarchive
 | 
				
			||||||
 | 
					      libunwind
 | 
				
			||||||
 | 
					      lz4
 | 
				
			||||||
 | 
					      openssl
 | 
				
			||||||
 | 
					      xxhash
 | 
				
			||||||
 | 
					      xz
 | 
				
			||||||
 | 
					      `(,zstd "lib")))
 | 
				
			||||||
 | 
					    (home-page "https://github.com/mhx/dwarfs")
 | 
				
			||||||
 | 
					    (synopsis "Fast high compression read-only file system")
 | 
				
			||||||
 | 
					    (description "DwarFS is a read-only file system with a focus on achieving
 | 
				
			||||||
 | 
					very high compression ratios in particular for very redundant data.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DwarFS also doesn't compromise on speed and for some cases it is on par with
 | 
				
			||||||
 | 
					or performs better than SquashFS.  For the primary use case, DwarFS
 | 
				
			||||||
 | 
					compression is an order of magnitude better than SquashFS compression, it's 6
 | 
				
			||||||
 | 
					times faster to build the file system, it's typically faster to access files
 | 
				
			||||||
 | 
					on DwarFS and it uses less CPU resources.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Distinct features of DwarFS are:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@itemize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@item Clustering of files by similarity using a similarity hash function.  This
 | 
				
			||||||
 | 
					makes it easier to exploit the redundancy across file boundaries.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@item Segmentation analysis across file system blocks in order to reduce the
 | 
				
			||||||
 | 
					size of the uncompressed file system.  This saves memory when using the
 | 
				
			||||||
 | 
					compressed file system and thus potentially allows for higher cache hit rates
 | 
				
			||||||
 | 
					as more data can be kept in the cache.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@item Highly multi-threaded implementation.  Both the file system creation tool
 | 
				
			||||||
 | 
					as well as the FUSE driver are able to make good use of the many cores of your
 | 
				
			||||||
 | 
					system.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@item Optional experimental Python scripting support to provide custom
 | 
				
			||||||
 | 
					filtering and ordering functionality.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end itemize\n")
 | 
				
			||||||
 | 
					    (license license:gpl3)))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Reference in a new issue