gnu: powertop: Update to 2.12.
[jackhill/guix/guix.git] / gnu / packages / linux.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
3 ;;; Copyright © 2013, 2014, 2015, 2016 Andreas Enge <andreas@enge.fr>
4 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
5 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Mark H Weaver <mhw@netris.org>
6 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
7 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
8 ;;; Copyright © 2015, 2016, 2017, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
9 ;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
10 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
11 ;;; Copyright © 2016, 2017 Alex Kost <alezost@gmail.com>
12 ;;; Copyright © 2016 Raymond Nicholson <rain1@openmailbox.org>
13 ;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
14 ;;; Copyright © 2016, 2018, 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
15 ;;; Copyright © 2016, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
16 ;;; Copyright © 2016 David Craven <david@craven.ch>
17 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
18 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
19 ;;; Copyright © 2016, 2018 Rene Saavedra <pacoon@protonmail.com>
20 ;;; Copyright © 2016 Carlos Sánchez de La Lama <csanchezdll@gmail.com>
21 ;;; Copyright © 2016, 2017 ng0 <ng0@n0.is>
22 ;;; Copyright © 2017, 2018 Leo Famulari <leo@famulari.name>
23 ;;; Copyright © 2017 José Miguel Sánchez García <jmi2k@openmailbox.com>
24 ;;; Copyright © 2017 Gábor Boskovits <boskovits@gmail.com>
25 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
26 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
27 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
28 ;;; Copyright © 2017 nee <nee-git@hidamari.blue>
29 ;;; Copyright © 2017 Dave Love <fx@gnu.org>
30 ;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
31 ;;; Copyright © 2018, 2020 Brendan Tildesley <mail@brendan.scot>
32 ;;; Copyright © 2018 Manuel Graf <graf@init.at>
33 ;;; Copyright © 2018 Pierre Langlois <pierre.langlois@gmx.com>
34 ;;; Copyright © 2018 Vasile Dumitrascu <va511e@yahoo.com>
35 ;;; Copyright © 2019 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
36 ;;; Copyright © 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
37 ;;; Copyright © 2019 Stefan Stefanović <stefanx2ovic@gmail.com>
38 ;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
39 ;;; Copyright © 2019, 2020 Brice Waegeneire <brice@waegenei.re>
40 ;;; Copyright © 2019 Kei Kebreau <kkebreau@posteo.net>
41 ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
42 ;;; Copyright © 2020 Pierre Neidhardt <mail@ambrevar.xyz>
43 ;;; Copyright © 2020 Chris Marusich <cmmarusich@gmail.com>
44 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
45 ;;;
46 ;;; This file is part of GNU Guix.
47 ;;;
48 ;;; GNU Guix is free software; you can redistribute it and/or modify it
49 ;;; under the terms of the GNU General Public License as published by
50 ;;; the Free Software Foundation; either version 3 of the License, or (at
51 ;;; your option) any later version.
52 ;;;
53 ;;; GNU Guix is distributed in the hope that it will be useful, but
54 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
55 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
56 ;;; GNU General Public License for more details.
57 ;;;
58 ;;; You should have received a copy of the GNU General Public License
59 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
60
61 (define-module (gnu packages linux)
62 #:use-module (gnu packages)
63 #:use-module (gnu packages acl)
64 #:use-module (gnu packages admin)
65 #:use-module (gnu packages algebra)
66 #:use-module (gnu packages attr)
67 #:use-module (gnu packages audio)
68 #:use-module (gnu packages autotools)
69 #:use-module (gnu packages backup)
70 #:use-module (gnu packages base)
71 #:use-module (gnu packages bash)
72 #:use-module (gnu packages bison)
73 #:use-module (gnu packages calendar)
74 #:use-module (gnu packages check)
75 #:use-module (gnu packages crypto)
76 #:use-module (gnu packages cryptsetup)
77 #:use-module (gnu packages compression)
78 #:use-module (gnu packages dbm)
79 #:use-module (gnu packages datastructures)
80 #:use-module (gnu packages docbook)
81 #:use-module (gnu packages documentation)
82 #:use-module (gnu packages elf)
83 #:use-module (gnu packages flex)
84 #:use-module (gnu packages file)
85 #:use-module (gnu packages freedesktop)
86 #:use-module (gnu packages gcc)
87 #:use-module (gnu packages gettext)
88 #:use-module (gnu packages glib)
89 #:use-module (gnu packages golang)
90 #:use-module (gnu packages gperf)
91 #:use-module (gnu packages gstreamer)
92 #:use-module (gnu packages gtk)
93 #:use-module (gnu packages haskell-apps)
94 #:use-module (gnu packages haskell-xyz)
95 #:use-module (gnu packages libunwind)
96 #:use-module (gnu packages libusb)
97 #:use-module (gnu packages man)
98 #:use-module (gnu packages maths)
99 #:use-module (gnu packages multiprecision)
100 #:use-module (gnu packages ncurses)
101 #:use-module (gnu packages netpbm)
102 #:use-module (gnu packages networking)
103 #:use-module (gnu packages ninja)
104 #:use-module (gnu packages nss)
105 #:use-module (gnu packages perl)
106 #:use-module (gnu packages pciutils)
107 #:use-module (gnu packages pkg-config)
108 #:use-module (gnu packages popt)
109 #:use-module (gnu packages pulseaudio)
110 #:use-module (gnu packages python)
111 #:use-module (gnu packages python-xyz)
112 #:use-module (gnu packages readline)
113 #:use-module (gnu packages rrdtool)
114 #:use-module (gnu packages samba)
115 #:use-module (gnu packages sdl)
116 #:use-module (gnu packages serialization)
117 #:use-module (gnu packages slang)
118 #:use-module (gnu packages texinfo)
119 #:use-module (gnu packages tls)
120 #:use-module (gnu packages valgrind)
121 #:use-module (gnu packages video)
122 #:use-module (gnu packages web)
123 #:use-module (gnu packages xiph)
124 #:use-module (gnu packages xml)
125 #:use-module (gnu packages xdisorg)
126 #:use-module (gnu packages xorg)
127 #:use-module (gnu packages groff)
128 #:use-module (gnu packages rsync)
129 #:use-module (gnu packages selinux)
130 #:use-module (gnu packages swig)
131 #:use-module (guix build-system cmake)
132 #:use-module (guix build-system gnu)
133 #:use-module (guix build-system go)
134 #:use-module (guix build-system meson)
135 #:use-module (guix build-system python)
136 #:use-module (guix build-system trivial)
137 #:use-module (guix build-system linux-module)
138 #:use-module (guix download)
139 #:use-module (guix git-download)
140 #:use-module ((guix licenses) #:prefix license:)
141 #:use-module (guix packages)
142 #:use-module (guix gexp)
143 #:use-module (guix store)
144 #:use-module (guix monads)
145 #:use-module (guix utils)
146 #:use-module (srfi srfi-1)
147 #:use-module (srfi srfi-2)
148 #:use-module (srfi srfi-26)
149 #:use-module (ice-9 match))
150
151 (define-public (system->linux-architecture arch)
152 "Return the Linux architecture name for ARCH, a Guix system name such as
153 \"x86_64-linux\" or a target triplet such as \"arm-linux-gnueabihf\"."
154 (let ((arch (car (string-split arch #\-))))
155 (cond ((string=? arch "i686") "i386")
156 ((string-prefix? "mips" arch) "mips")
157 ((string-prefix? "arm" arch) "arm")
158 ((string-prefix? "aarch64" arch) "arm64")
159 ((string-prefix? "alpha" arch) "alpha")
160 ((string-prefix? "powerpc" arch) "powerpc") ;including "powerpc64le"
161 ((string-prefix? "s390" arch) "s390")
162 ((string-prefix? "riscv" arch) "riscv")
163 (else arch))))
164
165 (define-public (system->defconfig system)
166 "Some systems (notably powerpc-linux) require a special target for kernel
167 defconfig. Return the appropriate make target if applicable, otherwise return
168 \"defconfig\"."
169 (cond ((string-prefix? "powerpc-" system) "pmac32_defconfig")
170 ((string-prefix? "powerpc64le-" system) "ppc64_defconfig")
171 (else "defconfig")))
172
173 \f
174 ;;;
175 ;;; Kernel source code deblobbing.
176 ;;;
177
178 (define (linux-libre-deblob-scripts version
179 deblob-hash
180 deblob-check-hash)
181 (list (version-major+minor version)
182 (origin
183 (method url-fetch)
184 (uri (string-append "https://linux-libre.fsfla.org"
185 "/pub/linux-libre/releases/" version "-gnu/"
186 "deblob-" (version-major+minor version)))
187 (sha256 deblob-hash))
188 (origin
189 (method url-fetch)
190 (uri (string-append "https://linux-libre.fsfla.org"
191 "/pub/linux-libre/releases/" version "-gnu/"
192 "deblob-check"))
193 (sha256 deblob-check-hash))))
194
195 (define deblob-scripts-5.6
196 (linux-libre-deblob-scripts
197 "5.6.7"
198 (base32 "196fdbfy1f8zbmnv0ik720snig2bacsh7hfyvgbmlsfk3cil2zgv")
199 (base32 "1g0bi3c8xzy1vz6w1xbpkb3a26bqn9d1yphcqz2ki4aikra81wid")))
200
201 (define deblob-scripts-5.4
202 (linux-libre-deblob-scripts
203 "5.4.37"
204 (base32 "0ckxn7k5zgcqk30dq943bnamr6a6zjbw2aqjl3x30f4kvh5f6k25")
205 (base32 "10qb890is4z58vr8czh3xx69q62l3b3j38y410kgiw8nii3zx5lr")))
206
207 (define deblob-scripts-4.19
208 (linux-libre-deblob-scripts
209 "4.19.103"
210 (base32 "02zs405awaxydbapka4nz8h6lmnc0dahgczqsrs5s2bmzjyyqkcy")
211 (base32 "1w2wgxblpq09i33qmqgw5v3r5rm9vkkygr6m0sgv4zgczk9s29wr")))
212
213 (define deblob-scripts-4.14
214 (linux-libre-deblob-scripts
215 "4.14.170"
216 (base32 "091jk9jkn9jf39bxpc7395bhcb7p96nkg3a8047380ki06lnfxh6")
217 (base32 "1qij18inijj6c3ma8hv98yjagnzxdxyn134da9fd23ky8q6hbvky")))
218
219 (define deblob-scripts-4.9
220 (linux-libre-deblob-scripts
221 "4.9.213"
222 (base32 "1wvldzlv7q2xdbadas87dh593nxr4a8p5n0f8zpm72lja6w18hmg")
223 (base32 "0fxajshb75siq39lj5h8xvhdj8lcmddkslwlyj65rhlwk6g2r4b2")))
224
225 (define deblob-scripts-4.4
226 (linux-libre-deblob-scripts
227 "4.4.213"
228 (base32 "0x2j1i88am54ih2mk7gyl79g25l9zz4r08xhl482l3fvjj2irwbw")
229 (base32 "0hhin1jpfkd6nwrb6xqxjzl3hdxy4pn8a15hy2d3d83yw6pflbsf")))
230
231 (define* (computed-origin-method gexp-promise hash-algo hash
232 #:optional (name "source")
233 #:key (system (%current-system))
234 (guile (default-guile)))
235 "Return a derivation that executes the G-expression that results
236 from forcing GEXP-PROMISE."
237 (mlet %store-monad ((guile (package->derivation guile system)))
238 (gexp->derivation (or name "computed-origin")
239 (force gexp-promise)
240 #:graft? #f ;nothing to graft
241 #:system system
242 #:guile-for-build guile)))
243
244 (define (make-linux-libre-source version
245 upstream-source
246 deblob-scripts)
247 "Return a 'computed' origin that generates a Linux-libre tarball from the
248 corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
249 (match deblob-scripts
250 ((deblob-version (? origin? deblob) (? origin? deblob-check))
251 (unless (string=? deblob-version (version-major+minor version))
252 ;; The deblob script cannot be expected to work properly on a
253 ;; different version (major+minor) of Linux, even if no errors
254 ;; are signaled during execution.
255 (error "deblob major+minor version mismatch"))
256 (origin
257 (method computed-origin-method)
258 (file-name (string-append "linux-libre-" version "-guix.tar.xz"))
259 (sha256 #f)
260 (uri
261 (delay
262 (with-imported-modules '((guix build utils))
263 #~(begin
264 (use-modules (guix build utils)
265 (srfi srfi-1)
266 (ice-9 match)
267 (ice-9 ftw))
268 (let ((dir (string-append "linux-" #$version)))
269
270 (mkdir "/tmp/bin")
271 (set-path-environment-variable
272 "PATH" '("bin")
273 (list "/tmp"
274 #+(canonical-package bash)
275 #+(canonical-package coreutils)
276 #+(canonical-package diffutils)
277 #+(canonical-package findutils)
278 #+(canonical-package patch)
279 #+(canonical-package xz)
280 #+(canonical-package sed)
281 #+(canonical-package grep)
282 #+(canonical-package bzip2)
283 #+(canonical-package gzip)
284 #+(canonical-package tar)
285 ;; The comments in the 'deblob-check' script
286 ;; claim that it supports Python 2 and 3, but
287 ;; in fact it fails when run in Python 3 as
288 ;; of version 5.1.3.
289 #+python-2))
290
291 (with-directory-excursion "/tmp/bin"
292
293 (copy-file #+deblob "deblob")
294 (chmod "deblob" #o755)
295 (substitute* "deblob"
296 (("/bin/sh") (which "sh")))
297
298 (copy-file #+deblob-check "deblob-check")
299 (chmod "deblob-check" #o755)
300 (substitute* "deblob-check"
301 (("/bin/sh") (which "sh"))
302 (("/bin/sed") (which "sed"))
303 (("/usr/bin/python") (which "python"))))
304
305 (if (file-is-directory? #+upstream-source)
306 (begin
307 (format #t "Copying upstream linux source...~%")
308 (force-output)
309 (invoke "cp" "--archive" #+upstream-source dir)
310 (invoke "chmod" "--recursive" "u+w" dir))
311 (begin
312 (format #t "Unpacking upstream linux tarball...~%")
313 (force-output)
314 (invoke "tar" "xf" #$upstream-source)
315 (match (scandir "."
316 (lambda (name)
317 (and (not (member name '("." "..")))
318 (file-is-directory? name))))
319 ((unpacked-dir)
320 (unless (string=? dir unpacked-dir)
321 (rename-file unpacked-dir dir)))
322 (dirs
323 (error "multiple directories found" dirs)))))
324
325 (with-directory-excursion dir
326 (setenv "PYTHON" (which "python"))
327 (format #t "Running deblob script...~%")
328 (force-output)
329 (invoke "/tmp/bin/deblob"))
330
331 (format #t "~%Packing new Linux-libre tarball...~%")
332 (force-output)
333 (invoke "tar" "cvfa" #$output
334 ;; Avoid non-determinism in the archive.
335 "--mtime=@0"
336 "--owner=root:0"
337 "--group=root:0"
338 "--sort=name"
339 "--hard-dereference"
340 dir))))))))))
341
342 \f
343 ;;;
344 ;;; Kernel sources.
345 ;;;
346
347 (define (linux-libre-urls version)
348 "Return a list of URLs for Linux-Libre VERSION."
349 (list (string-append
350 "https://linux-libre.fsfla.org/pub/linux-libre/releases/"
351 version "-gnu/linux-libre-" version "-gnu.tar.xz")
352
353 ;; XXX: Work around <http://bugs.gnu.org/14851>.
354 (string-append
355 "ftp://alpha.gnu.org/gnu/guix/mirror/linux-libre-"
356 version "-gnu.tar.xz")
357
358 ;; Maybe this URL will become valid eventually.
359 (string-append
360 "mirror://gnu/linux-libre/" version "-gnu/linux-libre-"
361 version "-gnu.tar.xz")))
362
363 (define (%upstream-linux-source version hash)
364 (origin
365 (method url-fetch)
366 (uri (string-append "mirror://kernel.org"
367 "/linux/kernel/v" (version-major version) ".x/"
368 "linux-" version ".tar.xz"))
369 (sha256 hash)))
370
371
372 (define-public linux-libre-5.6-version "5.6.11")
373 (define-public linux-libre-5.6-pristine-source
374 (let ((version linux-libre-5.6-version)
375 (hash (base32 "1ahv4a3mnszqs3qcnwmhbvjgis1jg37anj5jvn70i7s2k6z6rpfn")))
376 (make-linux-libre-source version
377 (%upstream-linux-source version hash)
378 deblob-scripts-5.6)))
379
380 (define-public linux-libre-5.4-version "5.4.39")
381 (define-public linux-libre-5.4-pristine-source
382 (let ((version linux-libre-5.4-version)
383 (hash (base32 "1j35yf1nilb9z7lw8w2drpww7q2zy8zfr0ip8hwcbcd7c5d9chai")))
384 (make-linux-libre-source version
385 (%upstream-linux-source version hash)
386 deblob-scripts-5.4)))
387
388 (define-public linux-libre-4.19-version "4.19.121")
389 (define-public linux-libre-4.19-pristine-source
390 (let ((version linux-libre-4.19-version)
391 (hash (base32 "11bhjdaihhc42xhf4qxdkkjznc0i6igh0ahjbzr3fb8bmq9sirgv")))
392 (make-linux-libre-source version
393 (%upstream-linux-source version hash)
394 deblob-scripts-4.19)))
395
396 (define-public linux-libre-4.14-version "4.14.179")
397 (define-public linux-libre-4.14-pristine-source
398 (let ((version linux-libre-4.14-version)
399 (hash (base32 "10arrj3ppbxkn15yxqpxlz4k8yp2afzbfpp2nwfy6klhjiffp9sx")))
400 (make-linux-libre-source version
401 (%upstream-linux-source version hash)
402 deblob-scripts-4.14)))
403
404 (define-public linux-libre-4.9-version "4.9.222")
405 (define-public linux-libre-4.9-pristine-source
406 (let ((version linux-libre-4.9-version)
407 (hash (base32 "0aajgflf96bj7chbd83rdmgcdwd025c6mz6li4cwbfx7xcb91kjc")))
408 (make-linux-libre-source version
409 (%upstream-linux-source version hash)
410 deblob-scripts-4.9)))
411
412 (define-public linux-libre-4.4-version "4.4.222")
413 (define-public linux-libre-4.4-pristine-source
414 (let ((version linux-libre-4.4-version)
415 (hash (base32 "02zxy5vjxgrqs0mkz5aj70v6pazhif7x5cm26rf8zh4idpmhk2zh")))
416 (make-linux-libre-source version
417 (%upstream-linux-source version hash)
418 deblob-scripts-4.4)))
419
420 (define %boot-logo-patch
421 ;; Linux-Libre boot logo featuring Freedo and a gnu.
422 (origin
423 (method url-fetch)
424 (uri (string-append "http://www.fsfla.org/svn/fsfla/software/linux-libre/"
425 "lemote/gnewsense/branches/3.16/100gnu+freedo.patch"))
426 (sha256
427 (base32
428 "1hk9swxxc80bmn2zd2qr5ccrjrk28xkypwhl4z0qx4hbivj7qm06"))))
429
430 (define %linux-libre-arm-export-__sync_icache_dcache-patch
431 (origin
432 (method url-fetch)
433 (uri (string-append
434 "https://salsa.debian.org/kernel-team/linux"
435 "/raw/34a7d9011fcfcfa38b68282fd2b1a8797e6834f0"
436 "/debian/patches/bugfix/arm/"
437 "arm-mm-export-__sync_icache_dcache-for-xen-privcmd.patch"))
438 (file-name "linux-libre-arm-export-__sync_icache_dcache.patch")
439 (sha256
440 (base32 "1ifnfhpakzffn4b8n7x7w5cps9mzjxlkcfz9zqak2vaw8nzvl39f"))))
441
442 (define (source-with-patches source patches)
443 (origin
444 (inherit source)
445 (patches (append (origin-patches source)
446 patches))))
447
448 (define-public linux-libre-5.6-source
449 (source-with-patches linux-libre-5.6-pristine-source
450 (list %boot-logo-patch
451 %linux-libre-arm-export-__sync_icache_dcache-patch
452 ;; Pinebook Pro patch from linux-next,
453 ;; can be dropped for linux-libre 5.7
454 (search-patch
455 "linux-libre-support-for-Pinebook-Pro.patch"))))
456
457 (define-public linux-libre-5.4-source
458 (source-with-patches linux-libre-5.4-pristine-source
459 (list %boot-logo-patch
460 %linux-libre-arm-export-__sync_icache_dcache-patch
461 ;; Pinebook Pro patch from linux-next,
462 ;; can be dropped for linux-libre 5.7
463 (search-patch
464 "linux-libre-support-for-Pinebook-Pro.patch"))))
465
466 (define-public linux-libre-4.19-source
467 (source-with-patches linux-libre-4.19-pristine-source
468 (list %boot-logo-patch
469 %linux-libre-arm-export-__sync_icache_dcache-patch)))
470
471 (define-public linux-libre-4.14-source
472 (source-with-patches linux-libre-4.14-pristine-source
473 (list %boot-logo-patch)))
474
475 (define-public linux-libre-4.9-source
476 (source-with-patches linux-libre-4.9-pristine-source
477 (list %boot-logo-patch)))
478
479 (define-public linux-libre-4.4-source
480 (source-with-patches linux-libre-4.4-pristine-source
481 (list %boot-logo-patch)))
482
483 \f
484 ;;;
485 ;;; Kernel headers.
486 ;;;
487
488 (define (make-linux-libre-headers version hash-string)
489 (make-linux-libre-headers* version
490 (origin
491 (method url-fetch)
492 (uri (linux-libre-urls version))
493 (sha256 (base32 hash-string)))))
494
495 (define (make-linux-libre-headers* version source)
496 (package
497 (name "linux-libre-headers")
498 (version version)
499 (source source)
500 (build-system gnu-build-system)
501 (native-inputs `(("perl" ,perl)
502 ,@(if (version>=? version "4.16")
503 `(("flex" ,flex)
504 ("bison" ,bison))
505 '())
506 ,@(if (version>=? version "5.3")
507 `(("rsync" ,rsync))
508 '())))
509 (arguments
510 `(#:modules ((guix build gnu-build-system)
511 (guix build utils)
512 (srfi srfi-1))
513 #:phases
514 (modify-phases %standard-phases
515 (delete 'configure)
516 (replace 'build
517 (lambda _
518 (let ((arch ,(system->linux-architecture
519 (or (%current-target-system)
520 (%current-system))))
521 (defconfig ,(system->defconfig
522 (or (%current-target-system)
523 (%current-system)))))
524 (setenv "ARCH" arch)
525 (format #t "`ARCH' set to `~a'~%" (getenv "ARCH"))
526 (invoke "make" defconfig)
527 (invoke "make" "mrproper" "headers_check"))))
528 (replace 'install
529 (lambda* (#:key outputs #:allow-other-keys)
530 (let ((out (assoc-ref outputs "out")))
531 (invoke "make"
532 (string-append "INSTALL_HDR_PATH=" out)
533 "headers_install")
534
535 (mkdir (string-append out "/include/config"))
536 (call-with-output-file
537 (string-append out
538 "/include/config/kernel.release")
539 (lambda (p)
540 (format p "~a-default~%" ,version)))
541
542 ;; Remove the '.install' and '..install.cmd' files; the
543 ;; latter contains store paths, which pulls in bootstrap
544 ;; binaries in the build environment, and prevents bit
545 ;; reproducibility for the bootstrap binaries.
546 (for-each delete-file (find-files out "\\.install"))
547
548 #t))))
549 #:allowed-references ()
550 #:tests? #f))
551 (home-page "https://www.gnu.org/software/linux-libre/")
552 (synopsis "GNU Linux-Libre kernel headers")
553 (description "Headers of the Linux-Libre kernel.")
554 (license license:gpl2)))
555
556 (define-public linux-libre-headers-5.6
557 (make-linux-libre-headers* linux-libre-5.6-version
558 linux-libre-5.6-source))
559
560 (define-public linux-libre-headers-5.4
561 (make-linux-libre-headers* linux-libre-5.4-version
562 linux-libre-5.4-source))
563
564 (define-public linux-libre-headers-4.19
565 (make-linux-libre-headers* linux-libre-4.19-version
566 linux-libre-4.19-source))
567
568 (define-public linux-libre-headers-4.14
569 (make-linux-libre-headers* linux-libre-4.14-version
570 linux-libre-4.14-source))
571
572 (define-public linux-libre-headers-4.9
573 (make-linux-libre-headers* linux-libre-4.9-version
574 linux-libre-4.9-source))
575
576 (define-public linux-libre-headers-4.4
577 (make-linux-libre-headers* linux-libre-4.4-version
578 linux-libre-4.4-source))
579
580 ;; The following package is used in the early bootstrap, and thus must be kept
581 ;; stable and with minimal build requirements.
582 (define-public linux-libre-headers-4.19.56
583 (make-linux-libre-headers "4.19.56"
584 "1zqiic55viy065lhnkmhn33sz3bbbr2ykbm5f92yzd8lpc9zl7yx"))
585
586 (define-public linux-libre-headers linux-libre-headers-4.19.56)
587
588 \f
589 ;;;
590 ;;; Kernel configurations.
591 ;;;
592
593 (define* (kernel-config arch #:key variant)
594 "Return the absolute file name of the Linux-Libre build configuration file
595 for ARCH and optionally VARIANT, or #f if there is no such configuration."
596 (let* ((name (string-append (if variant (string-append variant "-") "")
597 (if (string=? "i386" arch) "i686" arch) ".conf"))
598 (file (string-append "linux-libre/" name)))
599 (search-auxiliary-file file)))
600
601 (define %default-extra-linux-options
602 `(;; Some very mild hardening.
603 ("CONFIG_SECURITY_DMESG_RESTRICT" . #t)
604 ;; All kernels should have NAMESPACES options enabled
605 ("CONFIG_NAMESPACES" . #t)
606 ("CONFIG_UTS_NS" . #t)
607 ("CONFIG_IPC_NS" . #t)
608 ("CONFIG_USER_NS" . #t)
609 ("CONFIG_PID_NS" . #t)
610 ("CONFIG_NET_NS" . #t)
611 ;; Modules required for initrd:
612 ("CONFIG_NET_9P" . m)
613 ("CONFIG_NET_9P_VIRTIO" . m)
614 ("CONFIG_VIRTIO_BLK" . m)
615 ("CONFIG_VIRTIO_NET" . m)
616 ("CONFIG_VIRTIO_PCI" . m)
617 ("CONFIG_VIRTIO_BALLOON" . m)
618 ("CONFIG_VIRTIO_MMIO" . m)
619 ("CONFIG_FUSE_FS" . m)
620 ("CONFIG_CIFS" . m)
621 ("CONFIG_9P_FS" . m)))
622
623 (define (config->string options)
624 (string-join (map (match-lambda
625 ((option . 'm)
626 (string-append option "=m"))
627 ((option . #t)
628 (string-append option "=y"))
629 ((option . #f)
630 (string-append option "=n")))
631 options)
632 "\n"))
633
634 \f
635 ;;;
636 ;;; Kernel package utilities.
637 ;;;
638
639 (define* (make-linux-libre version hash-string supported-systems
640 #:key
641 ;; A function that takes an arch and a variant.
642 ;; See kernel-config for an example.
643 (extra-version #f)
644 (configuration-file #f)
645 (defconfig "defconfig")
646 (extra-options %default-extra-linux-options)
647 (patches (list %boot-logo-patch)))
648 (make-linux-libre* version
649 (origin
650 (method url-fetch)
651 (uri (linux-libre-urls version))
652 (sha256 (base32 hash-string))
653 (patches patches))
654 supported-systems
655 #:extra-version extra-version
656 #:configuration-file configuration-file
657 #:defconfig defconfig
658 #:extra-options extra-options))
659
660 (define* (make-linux-libre* version source supported-systems
661 #:key
662 ;; A function that takes an arch and a variant.
663 ;; See kernel-config for an example.
664 (extra-version #f)
665 (configuration-file #f)
666 (defconfig "defconfig")
667 (extra-options %default-extra-linux-options))
668 (package
669 (name (if extra-version
670 (string-append "linux-libre-" extra-version)
671 "linux-libre"))
672 (version version)
673 (source source)
674 (supported-systems supported-systems)
675 (build-system gnu-build-system)
676 (native-inputs
677 `(("perl" ,perl)
678 ("bc" ,bc)
679 ("openssl" ,openssl)
680 ("elfutils" ,elfutils) ; Needed to enable CONFIG_STACK_VALIDATION
681 ("flex" ,flex)
682 ("bison" ,bison)
683
684 ;; These are needed to compile the GCC plugins.
685 ("gmp" ,gmp)
686 ("mpfr" ,mpfr)
687 ("mpc" ,mpc)
688
689 ,@(match (and configuration-file
690 (configuration-file
691 (system->linux-architecture
692 (or (%current-target-system) (%current-system)))
693 #:variant (version-major+minor version)))
694 (#f ;no config for this platform
695 '())
696 ((? string? config)
697 `(("kconfig" ,config))))))
698 (arguments
699 `(#:modules ((guix build gnu-build-system)
700 (guix build utils)
701 (srfi srfi-1)
702 (srfi srfi-26)
703 (ice-9 ftw)
704 (ice-9 match))
705 #:phases
706 (modify-phases %standard-phases
707 (add-after 'unpack 'patch-/bin/pwd
708 (lambda _
709 (substitute* (find-files "." "^Makefile(\\.include)?$")
710 (("/bin/pwd") "pwd"))
711 #t))
712 (replace 'configure
713 (lambda* (#:key inputs native-inputs target #:allow-other-keys)
714 ;; On AArch64 (at least), we need to remove glibc headers from
715 ;; CPATH (they are still available as "system headers"), so that
716 ;; the kernel can override uint64_t. See
717 ;; <https://bugs.gnu.org/37593>. This is also true when
718 ;; cross-compiling, except in that case, cross-libc must be
719 ;; removed from CROSS_CPATH.
720 (let ((var ,(if (%current-target-system)
721 "CROSS_CPATH"
722 "CPATH"))
723 (libc ,(if (%current-target-system)
724 "cross-libc"
725 "libc")))
726 (setenv var
727 (string-join
728 (remove
729 (cut string-prefix? (assoc-ref inputs libc) <>)
730 (string-split (getenv var) #\:))
731 ":"))
732 (format #t "environment variable `~a' changed to `~a'~%"
733 var (getenv var)))
734
735 ;; Avoid introducing timestamps
736 (setenv "KCONFIG_NOTIMESTAMP" "1")
737 (setenv "KBUILD_BUILD_TIMESTAMP" (getenv "SOURCE_DATE_EPOCH"))
738
739 ;; Set ARCH and CROSS_COMPILE
740 (let ((arch ,(system->linux-architecture
741 (or (%current-target-system)
742 (%current-system)))))
743 (setenv "ARCH" arch)
744 (format #t "`ARCH' set to `~a'~%" (getenv "ARCH"))
745
746 (when target
747 (setenv "CROSS_COMPILE" (string-append target "-"))
748 (format #t "`CROSS_COMPILE' set to `~a'~%"
749 (getenv "CROSS_COMPILE"))))
750
751 (setenv "EXTRA_VERSION" ,extra-version)
752
753 (let ((build (assoc-ref %standard-phases 'build))
754 (config (assoc-ref (or native-inputs inputs) "kconfig")))
755
756 ;; Use a custom kernel configuration file or a default
757 ;; configuration file.
758 (if config
759 (begin
760 (copy-file config ".config")
761 (chmod ".config" #o666))
762 (invoke "make" ,defconfig))
763
764 ;; Appending works even when the option wasn't in the
765 ;; file. The last one prevails if duplicated.
766 (let ((port (open-file ".config" "a"))
767 (extra-configuration ,(config->string extra-options)))
768 (display extra-configuration port)
769 (close-port port))
770
771 (invoke "make" "oldconfig"))))
772 (replace 'install
773 (lambda* (#:key inputs native-inputs outputs #:allow-other-keys)
774 (let* ((out (assoc-ref outputs "out"))
775 (moddir (string-append out "/lib/modules"))
776 (dtbdir (string-append out "/lib/dtbs")))
777 ;; Install kernel image, kernel configuration and link map.
778 (for-each (lambda (file) (install-file file out))
779 (find-files "." "^(\\.config|bzImage|zImage|Image|vmlinuz|System\\.map|Module\\.symvers)$"))
780 ;; Install device tree files
781 (unless (null? (find-files "." "\\.dtb$"))
782 (mkdir-p dtbdir)
783 (invoke "make" (string-append "INSTALL_DTBS_PATH=" dtbdir)
784 "dtbs_install"))
785 ;; Install kernel modules
786 (mkdir-p moddir)
787 (invoke "make"
788 ;; Disable depmod because the Guix system's module directory
789 ;; is an union of potentially multiple packages. It is not
790 ;; possible to use depmod to usefully calculate a dependency
791 ;; graph while building only one of those packages.
792 "DEPMOD=true"
793 (string-append "MODULE_DIR=" moddir)
794 (string-append "INSTALL_PATH=" out)
795 (string-append "INSTALL_MOD_PATH=" out)
796 "INSTALL_MOD_STRIP=1"
797 "modules_install")
798 (let* ((versions (filter (lambda (name)
799 (not (string-prefix? "." name)))
800 (scandir moddir)))
801 (version (match versions
802 ((x) x))))
803 ;; There are symlinks to the build and source directory,
804 ;; both of which will point to target /tmp/guix-build*
805 ;; and thus not be useful in a profile. Delete the symlinks.
806 (false-if-file-not-found
807 (delete-file (string-append moddir "/" version "/build")))
808 (false-if-file-not-found
809 (delete-file (string-append moddir "/" version "/source"))))
810 #t))))
811 #:tests? #f))
812 (home-page "https://www.gnu.org/software/linux-libre/")
813 (synopsis "100% free redistribution of a cleaned Linux kernel")
814 (description
815 "GNU Linux-Libre is a free (as in freedom) variant of the Linux kernel.
816 It has been modified to remove all non-free binary blobs.")
817 (license license:gpl2)))
818
819 \f
820 ;;;
821 ;;; Generic kernel packages.
822 ;;;
823
824 (define-public linux-libre-5.4
825 (make-linux-libre* linux-libre-5.4-version
826 linux-libre-5.4-source
827 '("x86_64-linux" "i686-linux" "armhf-linux" "aarch64-linux" "riscv64-linux")
828 #:configuration-file kernel-config))
829
830 (define-public linux-libre-version linux-libre-5.4-version)
831 (define-public linux-libre-pristine-source linux-libre-5.4-pristine-source)
832 (define-public linux-libre-source linux-libre-5.4-source)
833 (define-public linux-libre linux-libre-5.4)
834
835 (define-public linux-libre-4.19
836 (make-linux-libre* linux-libre-4.19-version
837 linux-libre-4.19-source
838 '("x86_64-linux" "i686-linux" "armhf-linux" "aarch64-linux")
839 #:configuration-file kernel-config))
840
841 (define-public linux-libre-4.14
842 (make-linux-libre* linux-libre-4.14-version
843 linux-libre-4.14-source
844 '("x86_64-linux" "i686-linux" "armhf-linux")
845 #:configuration-file kernel-config))
846
847 (define-public linux-libre-4.9
848 (make-linux-libre* linux-libre-4.9-version
849 linux-libre-4.9-source
850 '("x86_64-linux" "i686-linux")
851 #:configuration-file kernel-config))
852
853 (define-public linux-libre-4.4
854 (make-linux-libre* linux-libre-4.4-version
855 linux-libre-4.4-source
856 '("x86_64-linux" "i686-linux")
857 #:configuration-file kernel-config
858 #:extra-options
859 (append
860 `(;; https://lists.gnu.org/archive/html/guix-devel/2014-04/msg00039.html
861 ;; This option was removed upstream in version 4.7.
862 ("CONFIG_DEVPTS_MULTIPLE_INSTANCES" . #t))
863 %default-extra-linux-options)))
864
865 \f
866 ;;;
867 ;;; Specialized kernel variants.
868 ;;;
869
870 (define-public linux-libre-arm-generic
871 (make-linux-libre* linux-libre-version
872 linux-libre-source
873 '("armhf-linux")
874 #:defconfig "multi_v7_defconfig"
875 #:extra-version "arm-generic"
876 #:extra-options
877 (append
878 `(;; needed to fix the RTC on rockchip platforms
879 ("CONFIG_RTC_DRV_RK808" . #t))
880 %default-extra-linux-options)))
881
882 (define-public linux-libre-arm-generic-5.6
883 (make-linux-libre* linux-libre-5.6-version
884 linux-libre-5.6-source
885 '("armhf-linux")
886 #:defconfig "multi_v7_defconfig"
887 #:extra-version "arm-generic"
888 #:extra-options
889 (append
890 `(;; needed to fix the RTC on rockchip platforms
891 ("CONFIG_RTC_DRV_RK808" . #t))
892 %default-extra-linux-options)))
893
894 (define-public linux-libre-arm-veyron
895 (deprecated-package "linux-libre-arm-veyron" linux-libre-arm-generic))
896
897 (define-public linux-libre-arm-generic-4.19
898 (make-linux-libre* linux-libre-4.19-version
899 linux-libre-4.19-source
900 '("armhf-linux")
901 #:defconfig "multi_v7_defconfig"
902 #:extra-version "arm-generic"))
903
904 (define-public linux-libre-arm-generic-4.14
905 (make-linux-libre* linux-libre-4.14-version
906 linux-libre-4.14-source
907 '("armhf-linux")
908 #:defconfig "multi_v7_defconfig"
909 #:extra-version "arm-generic"))
910
911 (define-public linux-libre-arm-omap2plus
912 (make-linux-libre* linux-libre-version
913 linux-libre-source
914 '("armhf-linux")
915 #:defconfig "omap2plus_defconfig"
916 #:extra-version "arm-omap2plus"))
917
918 (define-public linux-libre-arm-omap2plus-4.19
919 (make-linux-libre* linux-libre-4.19-version
920 linux-libre-4.19-source
921 '("armhf-linux")
922 #:defconfig "omap2plus_defconfig"
923 #:extra-version "arm-omap2plus"))
924
925 (define-public linux-libre-arm-omap2plus-4.14
926 (make-linux-libre* linux-libre-4.14-version
927 linux-libre-4.14-source
928 '("armhf-linux")
929 #:defconfig "omap2plus_defconfig"
930 #:extra-version "arm-omap2plus"))
931
932 (define-public linux-libre-arm64-generic
933 (make-linux-libre* linux-libre-version
934 linux-libre-source
935 '("aarch64-linux")
936 #:defconfig "defconfig"
937 #:extra-version "arm64-generic"
938 #:extra-options
939 (append
940 `(;; needed to fix the RTC on rockchip platforms
941 ("CONFIG_RTC_DRV_RK808" . #t))
942 %default-extra-linux-options)))
943
944 (define-public linux-libre-arm64-generic-5.6
945 (make-linux-libre* linux-libre-5.6-version
946 linux-libre-5.6-source
947 '("aarch64-linux")
948 #:defconfig "defconfig"
949 #:extra-version "arm64-generic"
950 #:extra-options
951 (append
952 `(;; needed to fix the RTC on rockchip platforms
953 ("CONFIG_RTC_DRV_RK808" . #t))
954 %default-extra-linux-options)))
955
956 (define-public linux-libre-riscv64-generic
957 (make-linux-libre* linux-libre-version
958 linux-libre-source
959 '("riscv64-linux")
960 #:extra-version "riscv64-generic"))
961
962 \f
963 ;;;
964 ;;; Linux kernel modules.
965 ;;;
966
967 (define-public acpi-call-linux-module
968 (package
969 (name "acpi-call-linux-module")
970 (version "3.17")
971 (source
972 (origin
973 (method git-fetch)
974 (uri (git-reference
975 (url "https://github.com/teleshoes/acpi_call.git")
976 (commit version)))
977 (file-name (git-file-name name version))
978 (sha256
979 (base32 "04mbv4lasm3vv1j4ndxhnz4hvp5wg8f5fc9q6qxv0nhvwjynmsl3"))))
980 (build-system linux-module-build-system)
981 (arguments
982 `(#:tests? #f ; no tests
983 #:phases
984 (modify-phases %standard-phases
985 (add-after 'unpack 'fix-for-linux-4.12
986 (lambda _
987 (substitute* "acpi_call.c"
988 (("asm/uaccess\\.h")
989 "linux/uaccess.h"))
990 #t))
991 (add-after 'install 'install-documentation
992 (lambda* (#:key outputs #:allow-other-keys)
993 (let* ((out (assoc-ref outputs "out"))
994 (doc (string-append out "/share/doc/" ,name "-" ,version)))
995 (for-each (lambda (file)
996 (let ((target (string-append doc "/" file)))
997 (mkdir-p (dirname target))
998 (copy-recursively file target)))
999 (list "README.md" "examples"))
1000 #t))))))
1001 (home-page "https://github.com/teleshoes/acpi_call")
1002 (synopsis "Linux kernel module to perform ACPI method calls")
1003 (description
1004 "This simple Linux kernel module allows calls from user space to any
1005 @acronym{ACPI, Advanced Configuration and Power Interface} method provided by
1006 your computer's firmware, by writing to @file{/proc/acpi/call}. You can pass
1007 any number of parameters of types @code{ACPI_INTEGER}, @code{ACPI_STRING},
1008 and @code{ACPI_BUFFER}.
1009
1010 It grants direct and undocumented access to your hardware that may cause damage
1011 and should be used with caution, especially on untested models.")
1012 (license license:gpl3+))) ; see README.md (no licence headers)
1013
1014 (define-public rtl8812au-aircrack-ng-linux-module
1015 (let ((commit "945d6ed6505c32f0993b1dba576388e92e78101b")
1016 (revision "0"))
1017 (package
1018 (name "rtl8812au-aircrack-ng-linux-module")
1019 (version (git-version "5.6.4.2" revision commit))
1020 (source
1021 (origin
1022 (method git-fetch)
1023 (uri (git-reference
1024 (url "https://github.com/aircrack-ng/rtl8812au.git")
1025 (commit commit)))
1026 (file-name (git-file-name name version))
1027 (sha256
1028 (base32 "1pjws7qb5l4z9k80vgz4zdxmqhbwxjjrmkpf0hijf821byyddvi7"))
1029 (modules '((guix build utils)))
1030 (snippet
1031 '(begin
1032 ;; Remove bundled tarballs, APKs, word lists, speadsheets,
1033 ;; and other unnecessary unlicenced things.
1034 (for-each delete-file-recursively (list "android"
1035 "docs"
1036 "tools"))
1037 #t))))
1038 (build-system linux-module-build-system)
1039 (arguments
1040 `(#:phases
1041 (modify-phases %standard-phases
1042 (replace 'build
1043 (lambda* (#:key inputs make-flags #:allow-other-keys)
1044 (apply invoke "make"
1045 (string-append "KSRC="
1046 (assoc-ref inputs "linux-module-builder")
1047 "/lib/modules/build")
1048 (or make-flags '())))))
1049 #:tests? #f)) ; no test suite
1050 (supported-systems '("x86_64-linux" "i686-linux"))
1051 (home-page "https://github.com/aircrack-ng/rtl8812au")
1052 (synopsis "Linux driver for Realtek USB wireless network adapters")
1053 (description
1054 "This is Realtek's rtl8812au Linux driver for USB 802.11n wireless
1055 network adapters, modified by the aircrack-ng project to support monitor mode
1056 and frame injection. It provides a @code{88XXau} kernel module that supports
1057 RTL8812AU, RTL8821AU, and RTL8814AU chips.")
1058 (license license:gpl2+))))
1059
1060 (define-public vhba-module
1061 (package
1062 (name "vhba-module")
1063 (version "20200106")
1064 (source (origin
1065 (method url-fetch)
1066 (uri (string-append
1067 "http://downloads.sourceforge.net/cdemu/vhba-module/vhba-module-"
1068 version ".tar.bz2"))
1069 (sha256
1070 (base32
1071 "10rlvsfj0fw6n0qmwcnvhimqnsnhi7n55lyl7fq1pkwggf5218sr"))))
1072 (build-system linux-module-build-system)
1073 (arguments
1074 ;; TODO: No tests?
1075 `(#:tests? #f))
1076 (home-page "https://cdemu.sourceforge.io/")
1077 (synopsis "Kernel module that emulates SCSI devices")
1078 (description "VHBA module provides a Virtual (SCSI) HBA, which is the link
1079 between the CDemu userspace daemon and linux kernel.")
1080 (license license:gpl2+)))
1081
1082 (define-public ddcci-driver-linux
1083 (package
1084 (name "ddcci-driver-linux")
1085 (version "0.3.3")
1086 (source
1087 (origin
1088 (method git-fetch)
1089 (uri
1090 (git-reference
1091 (url "https://gitlab.com/ddcci-driver-linux/ddcci-driver-linux.git")
1092 (commit (string-append "v" version))))
1093 (file-name (git-file-name name version))
1094 (sha256
1095 (base32
1096 "0vkkja3ykjil783zjpwp0vz7jy2fp9ccazzi3afd4fjk8gldin7f"))))
1097 (build-system linux-module-build-system)
1098 (arguments
1099 `(#:tests? #f ; no tests
1100 #:phases
1101 (modify-phases %standard-phases
1102 (replace 'build
1103 (lambda args
1104 (for-each
1105 (lambda (module)
1106 (with-directory-excursion module
1107 (apply (assoc-ref %standard-phases 'build) args)))
1108 '("ddcci" "ddcci-backlight"))
1109 #t))
1110 (replace 'install
1111 (lambda args
1112 (for-each
1113 (lambda (module)
1114 (with-directory-excursion module
1115 (apply (assoc-ref %standard-phases 'install) args)))
1116 '("ddcci" "ddcci-backlight"))
1117 #t)))))
1118 (home-page "https://gitlab.com/ddcci-driver-linux/ddcci-driver-linux")
1119 (synopsis "Pair of Linux kernel drivers for DDC/CI monitors")
1120 (description "This package provides two Linux kernel drivers, ddcci and
1121 ddcci-backlight, that allows the control of DDC/CI monitors through the sysfs
1122 interface. The ddcci module creates a character device for each DDC/CI
1123 monitors in @file{/dev/bus/ddcci/[I²C busnumber]}. While the ddcci-backlight
1124 module allows the control of the backlight level or luminance property when
1125 supported under @file{/sys/class/backlight/}.")
1126 (license license:gpl2+)))
1127
1128 \f
1129 ;;;
1130 ;;; Pluggable authentication modules (PAM).
1131 ;;;
1132
1133 (define-public linux-pam
1134 (package
1135 (name "linux-pam")
1136 (version "1.3.1")
1137 (source
1138 (origin
1139 (method url-fetch)
1140 (uri (string-append
1141 "https://github.com/linux-pam/linux-pam/releases/download/v"
1142 version "/Linux-PAM-" version ".tar.xz"))
1143 (sha256
1144 (base32
1145 "1nyh9kdi3knhxcbv5v4snya0g3gff0m671lnvqcbygw3rm77mx7g"))
1146 (patches (search-patches "linux-pam-no-setfsuid.patch"))))
1147
1148 (build-system gnu-build-system)
1149 (native-inputs
1150 `(("flex" ,flex)
1151
1152 ;; TODO: optional dependencies
1153 ;; ("libxcrypt" ,libxcrypt)
1154 ;; ("cracklib" ,cracklib)
1155 ))
1156 (arguments
1157 `(;; Most users, such as `shadow', expect the headers to be under
1158 ;; `security'.
1159 #:configure-flags (list (string-append "--includedir="
1160 (assoc-ref %outputs "out")
1161 "/include/security")
1162
1163 ;; XXX: <rpc/rpc.h> is missing from glibc when
1164 ;; cross-compiling, so we have to disable NIS
1165 ;; support altogether.
1166 ,@(if (%current-target-system)
1167 '("--disable-nis")
1168 '()))
1169
1170 ;; XXX: Tests won't run in chroot, presumably because /etc/pam.d
1171 ;; isn't available.
1172 #:tests? #f))
1173 (home-page "http://www.linux-pam.org/")
1174 (synopsis "Pluggable authentication modules for Linux")
1175 (description
1176 "A *Free* project to implement OSF's RFC 86.0.
1177 Pluggable authentication modules are small shared object files that can
1178 be used through the PAM API to perform tasks, like authenticating a user
1179 at login. Local and dynamic reconfiguration are its key features.")
1180 (license license:bsd-3)))
1181
1182 (define-public linux-pam-1.2
1183 (package
1184 (inherit linux-pam)
1185 (version "1.2.1")
1186 (source
1187 (origin
1188 (method url-fetch)
1189 (uri (string-append
1190 "http://www.linux-pam.org/library/"
1191 "Linux-PAM-" version ".tar.bz2"))
1192 (sha256
1193 (base32
1194 "1n9lnf9gjs72kbj1g354v1xhi2j27aqaah15vykh7cnkq08i4arl"))
1195 (patches (search-patches "linux-pam-no-setfsuid.patch"))))))
1196
1197
1198 ;;;
1199 ;;; Miscellaneous.
1200 ;;;
1201
1202 (define-public psmisc
1203 (package
1204 (name "psmisc")
1205 (version "23.3")
1206 (source
1207 (origin
1208 (method url-fetch)
1209 (uri (string-append "mirror://sourceforge/psmisc/psmisc/psmisc-"
1210 version ".tar.xz"))
1211 (sha256
1212 (base32 "16i7qzjmm6g0lzha8yzpfrlcxnvkgh95hkq9gdjd4zmzb8d0wxa1"))))
1213 (build-system gnu-build-system)
1214 (arguments
1215 `(,@(if (%current-target-system)
1216 '(#:configure-flags
1217 (list
1218 "ac_cv_func_malloc_0_nonnull=yes"
1219 "ac_cv_func_realloc_0_nonnull=yes"))
1220 '())))
1221 (inputs `(("ncurses" ,ncurses)))
1222 (home-page "https://gitlab.com/psmisc/psmisc")
1223 (synopsis "Small utilities that use the proc file system")
1224 (description
1225 "This PSmisc package is a set of some small useful utilities that
1226 use the proc file system. We're not about changing the world, but
1227 providing the system administrator with some help in common tasks.")
1228 (license license:gpl2+)))
1229
1230 (define-public util-linux
1231 (package
1232 (name "util-linux")
1233 (version "2.34")
1234 (source (origin
1235 (method url-fetch)
1236 (uri (string-append "mirror://kernel.org/linux/utils/"
1237 "util-linux/v" (version-major+minor version) "/"
1238 "util-linux-" version ".tar.xz"))
1239 (sha256
1240 (base32
1241 "1db2kydkwjmvgd1glkcba3adhidxw0f1x735dcjdpdjjf869sgvl"))
1242 (patches (search-patches "util-linux-tests.patch"))
1243 (modules '((guix build utils)))
1244 (snippet
1245 ;; We take 'nologin' from Shadow, the 'logger' program from
1246 ;; GNU Inetutils and 'kill' from GNU Coreutils.
1247 '(begin
1248 (substitute* "configure"
1249 (("build_nologin=yes") "build_nologin=no")
1250 (("build_logger=yes") "build_logger=no")
1251 (("build_kill=yes") "build_kill=no"))
1252 #t))))
1253 (build-system gnu-build-system)
1254 (outputs '("out"
1255 "static")) ;>2 MiB of static .a libraries
1256 (arguments
1257 `(#:configure-flags (list "--disable-use-tty-group"
1258 "--enable-fs-paths-default=/run/current-system/profile/sbin"
1259 ;; Don't try to chown root:root mount and umount
1260 "--disable-makeinstall-chown"
1261 ;; Install completions where our
1262 ;; bash-completion package expects them.
1263 (string-append "--with-bashcompletiondir="
1264 (assoc-ref %outputs "out")
1265 "/etc/bash_completion.d"))
1266 #:phases (modify-phases %standard-phases
1267 (add-before 'build 'set-umount-file-name
1268 (lambda* (#:key outputs #:allow-other-keys)
1269 ;; Tell 'eject' the right file name of 'umount'.
1270 (let ((out (assoc-ref outputs "out")))
1271 (substitute* "sys-utils/eject.c"
1272 (("\"/bin/umount\"")
1273 (string-append "\"" out "/bin/umount\"")))
1274 #t)))
1275 (add-before 'check 'pre-check
1276 (lambda* (#:key inputs outputs #:allow-other-keys)
1277 (let ((out (assoc-ref outputs "out"))
1278 (net (assoc-ref inputs "net-base")))
1279 ;; Change the test to refer to the right file.
1280 (substitute* "tests/ts/misc/mcookie"
1281 (("/etc/services")
1282 (string-append net "/etc/services")))
1283 #t)))
1284 (add-after 'install 'move-static-libraries
1285 (lambda* (#:key outputs #:allow-other-keys)
1286 (let ((out (assoc-ref outputs "out"))
1287 (static (assoc-ref outputs "static")))
1288 (mkdir-p (string-append static "/lib"))
1289 (with-directory-excursion out
1290 (for-each (lambda (file)
1291 (rename-file file
1292 (string-append static "/"
1293 file)))
1294 (find-files "lib" "\\.a$"))
1295
1296 ;; Remove references to the static library from the '.la'
1297 ;; files so that Libtool does the right thing when both
1298 ;; the shared and static library is available.
1299 (substitute* (find-files "lib" "\\.la$")
1300 (("old_library=.*") "old_library=''\n")))
1301
1302 #t))))))
1303 (inputs `(("zlib" ,zlib)
1304 ("ncurses" ,ncurses)
1305
1306 ;; XXX: This is so that the 'pre-check' phase can find it.
1307 ,@(if (%current-target-system)
1308 `(("net-base" ,net-base))
1309 '())))
1310 (native-inputs
1311 `(("perl" ,perl)
1312 ("net-base" ,net-base))) ;for tests
1313 (home-page "https://www.kernel.org/pub/linux/utils/util-linux/")
1314 (synopsis "Collection of utilities for the Linux kernel")
1315 (description "Util-linux is a diverse collection of Linux kernel
1316 utilities. It provides dmesg and includes tools for working with file systems,
1317 block devices, UUIDs, TTYs, and many other tools.")
1318
1319 ;; Note that util-linux doesn't use the same license for all the
1320 ;; code. GPLv2+ is the default license for a code without an
1321 ;; explicitly defined license.
1322 (license (list license:gpl3+ license:gpl2+ license:gpl2 license:lgpl2.0+
1323 license:bsd-4 license:public-domain))))
1324
1325 ;; util-linux optionally supports udev, which allows lsblk to read file system
1326 ;; metadata without special privileges. Add it as a separate package to avoid
1327 ;; a circular dependency, and to keep the size small.
1328 (define-public util-linux+udev
1329 (package/inherit
1330 util-linux
1331 (name "util-linux-with-udev")
1332 (inputs
1333 `(("udev" ,eudev)
1334 ,@(package-inputs util-linux)))))
1335
1336 (define-public ddate
1337 (package
1338 (name "ddate")
1339 (version "0.2.2")
1340 (source (origin
1341 (method url-fetch)
1342 (uri (string-append "https://github.com/bo0ts/ddate/archive/v"
1343 version ".tar.gz"))
1344 (file-name (string-append name "-" version ".tar.gz"))
1345 (sha256
1346 (base32 "1bbqqq8mswj4bp9083gxjaky5ysfznax4cynsqwmy125z053yg6m"))))
1347 (build-system cmake-build-system)
1348 (arguments '(#:tests? #f))
1349 (home-page "https://github.com/bo0ts/ddate")
1350 (synopsis "PERPETUAL DATE CONVERTER FROM GREGORIAN TO POEE CALENDAR")
1351 (description
1352 "ddate displays the Discordian date and holidays of a given date.
1353 The Discordian calendar was made popular by the \"Illuminatus!\" trilogy
1354 by Robert Shea and Robert Anton Wilson.")
1355 (license license:public-domain)))
1356
1357 (define-public fbset
1358 (package
1359 (name "fbset")
1360 (version "2.1")
1361 (source
1362 (origin
1363 (method url-fetch)
1364 (uri (string-append "http://users.telenet.be/geertu/Linux/fbdev/fbset-"
1365 version ".tar.gz"))
1366 (sha256
1367 (base32 "080wnisi0jq7dp0jcwdp83rq8q8s3kw41vc712516xbv4jq4mzs0"))))
1368 (build-system gnu-build-system)
1369 (arguments
1370 '(#:modules ((guix build gnu-build-system)
1371 (guix build utils)
1372 (srfi srfi-26))
1373 #:phases
1374 (modify-phases %standard-phases
1375 (delete 'configure) ; no configure script
1376 (add-before 'install 'pre-install
1377 (lambda* (#:key outputs #:allow-other-keys)
1378 (let ((out (assoc-ref outputs "out")))
1379 (substitute* "Makefile"
1380 (("mknod ") "true ")
1381 ;; The Makefile doesn't honour PREFIX or similar.
1382 (("/usr") out))
1383 (mkdir out)
1384 (with-directory-excursion out
1385 (for-each mkdir-p (list "sbin"
1386 "man/man5"
1387 "man/man8")))
1388 #t)))
1389 (add-after 'install 'install-fb.modes
1390 (lambda* (#:key outputs #:allow-other-keys)
1391 (let* ((out (assoc-ref outputs "out"))
1392 (etc (string-append out "/etc")))
1393 (for-each (cut install-file <> etc)
1394 (find-files "etc" "^fb\\.modes"))
1395 (symlink "fb.modes.ATI"
1396 (string-append etc "/fb.modes"))
1397 #t))))
1398 ;; Parallel building races to create modes.tab.c.
1399 #:parallel-build? #f
1400 #:tests? #f)) ; no test suite
1401 (native-inputs
1402 `(("bison" ,bison)
1403 ("flex" ,flex)))
1404 (home-page "http://users.telenet.be/geertu/Linux/fbdev/")
1405 (synopsis "Show and modify Linux frame buffer settings")
1406 (description
1407 "The kernel Linux's @dfn{frame buffers} provide a simple interface to
1408 different kinds of graphic displays. The @command{fbset} utility can query and
1409 change various device settings such as depth, virtual resolution, and timing
1410 parameters.")
1411 (license license:gpl2)))
1412
1413 (define-public procps
1414 (package
1415 (name "procps")
1416 (version "3.3.16")
1417 (source (origin
1418 (method url-fetch)
1419 (uri (string-append "mirror://sourceforge/procps-ng/Production/"
1420 "procps-ng-" version ".tar.xz"))
1421 (sha256
1422 (base32
1423 "1br0g93ysqhlv13i1k4lfbimsgxnpy5rgs4lxfc9rkzdbpbaqplj"))))
1424 (build-system gnu-build-system)
1425 (arguments
1426 '(#:modules ((guix build utils)
1427 (guix build gnu-build-system)
1428 (srfi srfi-1)
1429 (srfi srfi-26))
1430 #:phases
1431 (modify-phases %standard-phases
1432 (add-after
1433 'install 'post-install
1434 ;; Remove commands and man pages redudant with
1435 ;; Coreutils.
1436 (lambda* (#:key outputs #:allow-other-keys)
1437 (let* ((out (assoc-ref outputs "out"))
1438 (dup (append-map (cut find-files out <>)
1439 '("^kill" "^uptime"))))
1440 (for-each delete-file dup)
1441 #t))))))
1442 (inputs `(("ncurses" ,ncurses)))
1443 (home-page "https://gitlab.com/procps-ng/procps/")
1444 (synopsis "Utilities that give information about processes")
1445 (description
1446 "Procps is the package that has a bunch of small useful utilities
1447 that give information about processes using the Linux /proc file system.
1448 The package includes the programs ps, top, vmstat, w, kill, free,
1449 slabtop, and skill.")
1450 (license license:gpl2)))
1451
1452 (define-public usbutils
1453 (package
1454 (name "usbutils")
1455 (version "012")
1456 (source
1457 (origin
1458 (method url-fetch)
1459 (uri (string-append "mirror://kernel.org/linux/utils/usb/usbutils/"
1460 "usbutils-" version ".tar.xz"))
1461 (sha256
1462 (base32 "0iiy0q7fzikavmdsjsb0sl9kp3gfh701qwyjjccvqh0qz4jlcqw8"))))
1463 (build-system gnu-build-system)
1464 (outputs (list "out" "python"))
1465 (arguments
1466 `(#:phases
1467 (modify-phases %standard-phases
1468 (add-before 'bootstrap 'patch-bootstrap-scripts
1469 (lambda _
1470 (substitute* "usbhid-dump/bootstrap"
1471 (("/bin/bash") (which "bash")))
1472
1473 ;; Don't let autogen.sh run configure with bogus options & CFLAGS.
1474 (substitute* "autogen.sh"
1475 (("^\\./configure.*") ""))
1476 #t))
1477 (add-after 'install 'separate-python-output
1478 ;; Separating one Python script shaves more than 106 MiB from :out.
1479 (lambda* (#:key outputs #:allow-other-keys)
1480 (let ((out (assoc-ref outputs "out"))
1481 (out:python (assoc-ref outputs "python")))
1482 (for-each (lambda (file)
1483 (let ((old (string-append out "/" file))
1484 (new (string-append out:python "/" file)))
1485 (mkdir-p (dirname new))
1486 (rename-file old new)))
1487 (list "bin/lsusb.py"))
1488 #t))))))
1489 (inputs
1490 `(("eudev" ,eudev)
1491 ("libusb" ,libusb)
1492 ("python" ,python)))
1493 (native-inputs
1494 `(("autoconf" ,autoconf)
1495 ("automake" ,automake)
1496 ("libtool" ,libtool)
1497 ("pkg-config" ,pkg-config)))
1498 (home-page "http://www.linux-usb.org/")
1499 (synopsis
1500 "Tools for working with USB devices, such as lsusb")
1501 (description
1502 "Tools for working with USB devices, such as lsusb.")
1503 (license license:gpl2+)))
1504
1505 (define-public e2fsprogs
1506 (package
1507 (name "e2fsprogs")
1508 (version "1.45.6")
1509 (source (origin
1510 (method url-fetch)
1511 (uri (string-append
1512 "mirror://kernel.org/linux/kernel/people/tytso/"
1513 "e2fsprogs/v" version "/"
1514 "e2fsprogs-" version ".tar.xz"))
1515 (sha256
1516 (base32
1517 "0mj2yizwygs7xww8jfy5mxjn8ww4pvc0b1hg1p2vsnirailsx9zz"))))
1518 (build-system gnu-build-system)
1519 (inputs `(("util-linux" ,util-linux)))
1520 (native-inputs `(("pkg-config" ,pkg-config)
1521 ("texinfo" ,texinfo) ;for the libext2fs Info manual
1522
1523 ;; For tests.
1524 ("perl" ,perl)
1525 ("procps" ,procps)))
1526 (arguments
1527 '(;; util-linux is the preferred source for some of the libraries and
1528 ;; commands, so disable them (see, e.g.,
1529 ;; <http://git.buildroot.net/buildroot/commit/?id=e1ffc2f791b33633>.)
1530 #:configure-flags (list "--disable-libblkid"
1531 "--disable-libuuid" "--disable-uuidd"
1532 "--disable-fsck"
1533
1534 ;; Use symlinks instead of hard links for
1535 ;; 'fsck.extN' etc. This makes the resulting nar
1536 ;; smaller and is preserved across copies.
1537 "--enable-symlink-install"
1538
1539 (string-append "LDFLAGS=-Wl,-rpath="
1540 (assoc-ref %outputs "out")
1541 "/lib")
1542
1543 ;; Install libext2fs et al.
1544 "--enable-elf-shlibs")
1545
1546 #:phases
1547 (modify-phases %standard-phases
1548 (add-before 'configure 'patch-shells
1549 (lambda _
1550 (substitute* "configure"
1551 (("/bin/sh (.*)parse-types.sh" _ dir)
1552 (string-append (which "sh") " " dir
1553 "parse-types.sh")))
1554 (substitute* "MCONFIG.in"
1555 (("INSTALL_SYMLINK = /bin/sh")
1556 "INSTALL_SYMLINK = sh"))
1557 (substitute* (find-files "." "^Makefile.in$")
1558 (("#!/bin/sh")
1559 (string-append "#!" (which "sh"))))
1560 #t))
1561 (add-after 'install 'install-libs
1562 (lambda* (#:key outputs #:allow-other-keys)
1563 (let* ((out (assoc-ref outputs "out"))
1564 (lib (string-append out "/lib")))
1565 (invoke "make" "install-libs")
1566
1567 ;; Make the .a writable so that 'strip' works.
1568 ;; Failing to do that, due to debug symbols, we
1569 ;; retain a reference to the final
1570 ;; linux-libre-headers, which refer to the
1571 ;; bootstrap binaries.
1572 (let ((archives (find-files lib "\\.a$")))
1573 (for-each (lambda (file)
1574 (chmod file #o666))
1575 archives))
1576 #t))))))
1577 (home-page "http://e2fsprogs.sourceforge.net/")
1578 (synopsis "Creating and checking ext2/ext3/ext4 file systems")
1579 (description
1580 "This package provides tools for manipulating ext2/ext3/ext4 file systems.")
1581 (license (list license:gpl2 ;programs
1582 license:lgpl2.0 ;libext2fs
1583 license:x11)))) ;libuuid
1584
1585 (define e2fsprogs/static
1586 (static-package
1587 (package (inherit e2fsprogs)
1588 (arguments
1589 ;; Do not build shared libraries.
1590 (substitute-keyword-arguments (package-arguments e2fsprogs)
1591 ((#:configure-flags _)
1592 '(list "--disable-blkid"))
1593 ((#:make-flags _)
1594 '(list)))))))
1595
1596 (define-public e2fsck/static
1597 (package
1598 (name "e2fsck-static")
1599 (version (package-version e2fsprogs))
1600 (build-system trivial-build-system)
1601 (source #f)
1602 (inputs
1603 `(("e2fsprogs" ,e2fsprogs/static)))
1604 (arguments
1605 `(#:modules ((guix build utils))
1606 #:builder
1607 (begin
1608 (use-modules (guix build utils)
1609 (ice-9 ftw)
1610 (srfi srfi-26))
1611
1612 (let ((e2fsck (string-append (assoc-ref %build-inputs "e2fsprogs")
1613 "/sbin/e2fsck"))
1614 (bin (string-append (assoc-ref %outputs "out") "/sbin")))
1615 (mkdir-p bin)
1616 (with-directory-excursion bin
1617 (copy-file e2fsck "e2fsck")
1618 (remove-store-references "e2fsck")
1619 (chmod "e2fsck" #o555))
1620 #t))))
1621 (home-page (package-home-page e2fsprogs))
1622 (synopsis "Statically-linked e2fsck command from e2fsprogs")
1623 (description "This package provides statically-linked e2fsck command taken
1624 from the e2fsprogs package. It is meant to be used in initrds.")
1625 (license (package-license e2fsprogs))))
1626
1627 (define-public extundelete
1628 (package
1629 (name "extundelete")
1630 (version "0.2.4")
1631 (source
1632 (origin
1633 (method url-fetch)
1634 (uri (string-append "mirror://sourceforge/extundelete/"
1635 "extundelete/" version "/extundelete-"
1636 version ".tar.bz2"))
1637 (sha256
1638 (base32
1639 "1x0r7ylxlp9lbj3d7sqf6j2a222dwy2nfpff05jd6mkh4ihxvyd1"))
1640 (patches (search-patches "extundelete-e2fsprogs-1.44.patch"))))
1641 (build-system gnu-build-system)
1642 (inputs `(("e2fsprogs" ,e2fsprogs)))
1643 (home-page "http://extundelete.sourceforge.net/")
1644 (synopsis "Recover deleted files from ext2/3/4 partitions")
1645 (description
1646 "Extundelete is a set of tools that can recover deleted files from an
1647 ext3 or ext4 partition.")
1648 (license license:gpl2)))
1649
1650 (define-public zerofree
1651 (package
1652 (name "zerofree")
1653 (version "1.1.1")
1654 (home-page "https://frippery.org/uml/")
1655 (source (origin
1656 (method url-fetch)
1657 (uri (string-append home-page name "-" version
1658 ".tgz"))
1659 (sha256
1660 (base32
1661 "0rrqfa5z103ws89vi8kfvbks1cfs74ix6n1wb6vs582vnmhwhswm"))))
1662 (build-system gnu-build-system)
1663 (arguments
1664 '(#:phases
1665 (modify-phases %standard-phases
1666 (delete 'configure) ; no configure script
1667 (replace 'install
1668 ;; The Makefile lacks an ‘install’ target.
1669 (lambda* (#:key outputs #:allow-other-keys)
1670 (let* ((out (assoc-ref outputs "out"))
1671 (bin (string-append out "/bin")))
1672 (chmod "zerofree" #o555)
1673 (install-file "zerofree" bin)
1674 #t))))
1675 #:tests? #f)) ; no tests
1676 (inputs `(("libext2fs" ,e2fsprogs)))
1677 (synopsis "Zero non-allocated regions in ext2/ext3/ext4 file systems")
1678 (description
1679 "Zerofree finds the unallocated blocks with non-zero value content in an
1680 ext2, ext3, or ext4 file system and fills them with zeroes (or another value).
1681 This is a simple way to make disk images more compressible.
1682 Zerofree requires the file system to be unmounted or mounted read-only.")
1683 (license license:gpl2)))
1684
1685 (define-public strace
1686 (package
1687 (name "strace")
1688 (version "5.5")
1689 (home-page "https://strace.io")
1690 (source (origin
1691 (method url-fetch)
1692 (uri (string-append home-page "/files/" version
1693 "/strace-" version ".tar.xz"))
1694 (sha256
1695 (base32
1696 "1zrhpzjlgfwfl8dd53llswmmharm5rbi0zch7lln5sjris69an4z"))))
1697 (build-system gnu-build-system)
1698 (arguments
1699 '(#:phases
1700 (modify-phases %standard-phases
1701 (add-after 'unpack 'patch-/bin/sh
1702 (lambda _
1703 (substitute* "strace.c"
1704 (("/bin/sh") (which "sh")))
1705 #t)))
1706 ;; Don't fail if the architecture doesn't support different personalities.
1707 #:configure-flags '("--enable-mpers=check")
1708 ;; See <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=32459>.
1709 #:parallel-tests? #f)) ; undeterministic failures
1710 (native-inputs `(("perl" ,perl)))
1711 (synopsis "System call tracer for Linux")
1712 (description
1713 "strace is a system call tracer, i.e. a debugging tool which prints out a
1714 trace of all the system calls made by a another process/program.")
1715 (license license:lgpl2.1+)))
1716
1717 (define-public ltrace
1718 (package
1719 (name "ltrace")
1720 (version "0.7.3")
1721 (source (origin
1722 (method url-fetch)
1723 (uri (string-append "http://www.ltrace.org/ltrace_" version
1724 ".orig.tar.bz2"))
1725 (sha256
1726 (base32
1727 "00wmbdghqbz6x95m1mcdd3wd46l6hgcr4wggdp049dbifh3qqvqf"))))
1728 (build-system gnu-build-system)
1729 (inputs `(("libelf" ,libelf)))
1730 (arguments
1731 ;; Compilation uses -Werror by default, but it fails.
1732 '(#:configure-flags '("--disable-werror")))
1733 (home-page "https://www.ltrace.org/")
1734 (synopsis "Library call tracer for Linux")
1735 (description
1736 "ltrace intercepts and records dynamic library calls which are called by
1737 an executed process and the signals received by that process. It can also
1738 intercept and print the system calls executed by the program.")
1739 (license license:gpl2+)))
1740
1741 (define-public alsa-lib
1742 (package
1743 (name "alsa-lib")
1744 (version "1.2.2")
1745 (source (origin
1746 (method url-fetch)
1747 (uri (string-append
1748 "ftp://ftp.alsa-project.org/pub/lib/alsa-lib-"
1749 version ".tar.bz2"))
1750 (sha256
1751 (base32
1752 "1v5kb8jyvrpkvvq7dq8hfbmcj68lml97i4s0prxpfx2mh3c57s6q"))))
1753 (build-system gnu-build-system)
1754 (arguments
1755 '(#:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath="
1756 (assoc-ref %outputs "out")
1757 "/lib"))))
1758 (home-page "https://www.alsa-project.org/")
1759 (synopsis "The Advanced Linux Sound Architecture libraries")
1760 (description
1761 "The Advanced Linux Sound Architecture (ALSA) provides audio and
1762 MIDI functionality to the Linux-based operating system.")
1763 (license license:lgpl2.1+)))
1764
1765 (define-public alsa-utils
1766 (package
1767 (name "alsa-utils")
1768 (version "1.2.2")
1769 (source (origin
1770 (method url-fetch)
1771 (uri (string-append "ftp://ftp.alsa-project.org/pub/utils/"
1772 name "-" version ".tar.bz2"))
1773 (sha256
1774 (base32
1775 "1wz460by17rmxrcydn583rd4lhj6wlvqs6x1j5pdzxn5g3app024"))))
1776 (build-system gnu-build-system)
1777 (arguments
1778 ;; XXX: Disable man page creation until we have DocBook.
1779 '(#:configure-flags (list "--disable-xmlto"
1780
1781 ;; The udev rule is responsible for restoring
1782 ;; the volume.
1783 (string-append "--with-udev-rules-dir="
1784 (assoc-ref %outputs "out")
1785 "/lib/udev/rules.d"))
1786 #:phases
1787 (modify-phases %standard-phases
1788 (add-before 'check 'disable-broken-test
1789 (lambda _
1790 ;; XXX: The 1.1.8 release tarball is missing a header that's
1791 ;; required for this test to work. Fixed in 1.1.9.
1792 (substitute* "axfer/test/Makefile"
1793 ((".*container-test.*") ""))
1794 #t))
1795 (add-before
1796 'install 'pre-install
1797 (lambda _
1798 ;; Don't try to mkdir /var/lib/alsa.
1799 (substitute* "Makefile"
1800 (("\\$\\(MKDIR_P\\) .*ASOUND_STATE_DIR.*")
1801 "true\n"))
1802 #t)))))
1803 (inputs
1804 `(("libsamplerate" ,libsamplerate)
1805 ("ncurses" ,ncurses)
1806 ("alsa-lib" ,alsa-lib)
1807 ("xmlto" ,xmlto)
1808 ("gettext" ,gettext-minimal)))
1809 (home-page "http://www.alsa-project.org/")
1810 (synopsis "Utilities for the Advanced Linux Sound Architecture (ALSA)")
1811 (description
1812 "The Advanced Linux Sound Architecture (ALSA) provides audio and
1813 MIDI functionality to the Linux-based operating system.")
1814
1815 ;; This is mostly GPLv2+ but a few files such as 'alsactl.c' are
1816 ;; GPLv2-only.
1817 (license license:gpl2)))
1818
1819 (define-public alsa-plugins
1820 (package
1821 (name "alsa-plugins")
1822 (version "1.2.2")
1823 (source (origin
1824 (method url-fetch)
1825 (uri (string-append "ftp://ftp.alsa-project.org/pub/plugins/"
1826 name "-" version ".tar.bz2"))
1827 (sha256
1828 (base32
1829 "0z9k3ssbfk2ky2w13avgyf202j1drsz9sv3834bp33cj1i2hc3qw"))))
1830 (build-system gnu-build-system)
1831 ;; TODO: Split libavcodec and speex if possible. It looks like they can not
1832 ;; be split, there are references to both in files.
1833 ;; TODO: Remove OSS related plugins, they add support to run native
1834 ;; ALSA applications on OSS however we do not offer OSS and OSS is
1835 ;; obsolete.
1836 (outputs '("out" "pulseaudio" "jack"))
1837 (arguments
1838 `(#:configure-flags '(;; Do not install a "local" configuration targeted
1839 ;; for /etc/alsa. On Guix System plugins are loaded from
1840 ;; the ALSA service, and other distributions likely
1841 ;; won't use these files.
1842 "--with-alsalconfdir=/tmp/noop")
1843 #:phases
1844 (modify-phases %standard-phases
1845 (add-after 'install 'split
1846 (lambda* (#:key inputs outputs #:allow-other-keys)
1847 ;; Distribute the binaries to the various outputs.
1848 (let* ((out (assoc-ref outputs "out"))
1849 (jack (assoc-ref outputs "jack"))
1850 (jacklib (string-append jack "/lib/alsa-lib"))
1851 (pua (assoc-ref outputs "pulseaudio"))
1852 (pualib (string-append pua "/lib/alsa-lib")))
1853 ;; For jack.
1854 (mkdir-p jacklib)
1855 (for-each (lambda (file)
1856 (rename-file file (string-append jacklib "/" (basename file))))
1857 (find-files out ".*jack\\.(la|so)"))
1858 ;; For pulseaudio.
1859 (mkdir-p pualib)
1860 (for-each (lambda (file)
1861 (rename-file file (string-append pualib "/" (basename file))))
1862 (find-files out ".*pulse\\.(la|so)"))
1863 #t))))))
1864 (inputs
1865 `(("alsa-lib" ,alsa-lib)
1866 ("jack" ,jack-1)
1867 ("speex" ,speex) ; libspeexdsp resampling plugin
1868 ("libsamplerate" ,libsamplerate) ; libsamplerate resampling plugin
1869 ("ffmpeg" ,ffmpeg) ; libavcodec resampling plugin, a52 plugin
1870 ("pulseaudio" ,pulseaudio))) ; PulseAudio plugin
1871 (native-inputs
1872 `(("pkg-config" ,pkg-config)))
1873 (home-page "http://www.alsa-project.org/")
1874 (synopsis "Plugins for the Advanced Linux Sound Architecture (ALSA)")
1875 (description
1876 "The Advanced Linux Sound Architecture (ALSA) provides audio and
1877 MIDI functionality to the Linux-based operating system. This package enhances ALSA
1878 by providing additional plugins which include: upmixing, downmixing, jackd and
1879 pulseaudio support for native alsa applications, format conversion (s16 to a52), and
1880 external rate conversion.")
1881 (license (list license:gpl2+
1882 ;; `rate/rate_samplerate.c': LGPL v2.1 or later.
1883 license:lgpl2.1+))))
1884
1885 (define-public iptables
1886 (package
1887 (name "iptables")
1888 (version "1.8.4")
1889 (source (origin
1890 (method url-fetch)
1891 (uri (string-append
1892 "mirror://netfilter.org/iptables/iptables-"
1893 version ".tar.bz2"))
1894 (sha256
1895 (base32
1896 "0z0mgs1ghvn3slc868mgbf2g26njgrzcy5ggyb5w4i55j1a3lflr"))))
1897 (build-system gnu-build-system)
1898 (native-inputs
1899 `(("pkg-config" ,pkg-config)
1900 ("flex" ,flex)
1901 ("bison" ,bison)))
1902 (inputs
1903 `(("libmnl" ,libmnl)
1904 ("libnftnl" ,libnftnl)))
1905 (arguments
1906 '(#:tests? #f ; no test suite
1907 #:configure-flags ; add $libdir to the RUNPATH of executables
1908 (list (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib"))))
1909 (home-page "https://www.netfilter.org/projects/iptables/index.html")
1910 (synopsis "Programs to configure Linux IP packet filtering rules")
1911 (description
1912 "@command{iptables} is the user-space command line program used to
1913 configure the Linux 2.4.x and later IPv4 packet filtering ruleset
1914 (@dfn{firewall}), including @dfn{NAT} (Network Address Translation).
1915
1916 This package also includes @command{ip6tables}, which is used to configure the
1917 IPv6 packet filter.
1918
1919 Both commands are targeted at system administrators.")
1920 (license license:gpl2+)))
1921
1922 (define-public lsscsi
1923 (package
1924 (name "lsscsi")
1925 (version "0.31")
1926 (source (origin
1927 (method url-fetch)
1928 (uri (string-append
1929 "http://sg.danny.cz/scsi/lsscsi-" version ".tar.xz"))
1930 (sha256
1931 (base32
1932 "1ry2y34xmpgxdbfbyvs8cjmbx0fn222yjdab87wj21q60nab5p75"))))
1933 (build-system gnu-build-system)
1934 (synopsis "Lists information about SCSI or NVMe devices in Linux")
1935 (home-page "http://sg.danny.cz/scsi/lsscsi.html")
1936 (description
1937 "@command{lsscsi} lists SCSI logical units or SCSI targets. It can
1938 also list NVMe namespaces or controllers and show the relationship between a
1939 device's primary node name, its SCSI generic (sg) node name and its kernel
1940 name.")
1941 (license license:gpl2)))
1942
1943 (define-public ebtables
1944 (package
1945 (name "ebtables")
1946 (version "2.0.11")
1947 (source (origin
1948 (method url-fetch)
1949 (uri (string-append
1950 "mirror://netfilter.org/ebtables/ebtables-"
1951 version ".tar.gz"))
1952 (sha256
1953 (base32
1954 "0apxgmkhsk3vxn9q3libxn3dgrdljrxyy4mli2gk49m7hi3na7xp"))))
1955 (build-system gnu-build-system)
1956 (inputs
1957 `(("perl" ,perl)
1958 ("iptables" ,iptables)))
1959 (synopsis "Ethernet bridge frame table administration")
1960 (home-page "https://ebtables.netfilter.org/")
1961 (description
1962 "ebtables is an application program used to set up and maintain the
1963 tables of rules (inside the Linux kernel) that inspect Ethernet frames. It is
1964 analogous to the iptables application, but less complicated, due to the fact
1965 that the Ethernet protocol is much simpler than the IP protocol.")
1966 (license license:gpl2+)))
1967
1968 (define-public iproute
1969 (package
1970 (name "iproute2")
1971 (version "5.5.0")
1972 (source (origin
1973 (method url-fetch)
1974 (uri (string-append
1975 "mirror://kernel.org/linux/utils/net/iproute2/iproute2-"
1976 version ".tar.xz"))
1977 (sha256
1978 (base32
1979 "0ywg70f98wgfai35jl47xzpjp45a6n7crja4vc8ql85cbi1l7ids"))))
1980 (build-system gnu-build-system)
1981 (arguments
1982 `( ;; There is a test suite, but it wants network namespaces and sudo.
1983 #:tests? #f
1984 #:make-flags (let ((out (assoc-ref %outputs "out")))
1985 (list "DESTDIR="
1986 (string-append "BASH_COMPDIR=" out
1987 "/etc/bash_completion.d")
1988 (string-append "LIBDIR=" out "/lib")
1989 (string-append "HDRDIR=" out "/include")
1990 (string-append "SBINDIR=" out "/sbin")
1991 (string-append "CONFDIR=" out "/etc")
1992 (string-append "DOCDIR=" out "/share/doc/"
1993 ,name "-" ,version)
1994 (string-append "MANDIR=" out "/share/man")))
1995 #:phases (modify-phases %standard-phases
1996 (add-before 'install 'pre-install
1997 (lambda _
1998 ;; Don't attempt to create /var/lib/arpd.
1999 (substitute* "Makefile"
2000 (("^.*ARPDDIR.*$") ""))
2001 #t)))))
2002 (inputs
2003 `(("db4" ,bdb)
2004 ("iptables" ,iptables)
2005 ("libmnl" ,libmnl)))
2006 (native-inputs
2007 `(("bison" ,bison)
2008 ("flex" ,flex)
2009 ("pkg-config" ,pkg-config)))
2010 ;; For tests.
2011 ;; ("libmnl" ,libmnl)
2012 ;; ("util-linux" ,util-linux)
2013 (home-page
2014 "https://wiki.linuxfoundation.org/networking/iproute2")
2015 (synopsis
2016 "Utilities for controlling TCP/IP networking and traffic in Linux")
2017 (description
2018 "Iproute2 is a collection of utilities for controlling TCP/IP networking
2019 and traffic with the Linux kernel. The most important of these are
2020 @command{ip}, which configures IPv4 and IPv6, and @command{tc} for traffic
2021 control.
2022
2023 Most network configuration manuals still refer to ifconfig and route as the
2024 primary network configuration tools, but ifconfig is known to behave
2025 inadequately in modern network environments, and both should be deprecated.")
2026 (license license:gpl2+)))
2027
2028 (define-public net-tools
2029 ;; XXX: This package is basically unmaintained, but it provides a few
2030 ;; commands not yet provided by Inetutils, such as 'route', so we have to
2031 ;; live with it.
2032 (let ((commit "479bb4a7e11a4084e2935c0a576388f92469225b")
2033 (revision "0"))
2034 (package
2035 (name "net-tools")
2036 (version (string-append "1.60-" revision "." (string-take commit 7)))
2037 (source (origin
2038 (method url-fetch)
2039 (uri (string-append "https://sourceforge.net/code-snapshots/git/"
2040 "n/ne/net-tools/code.git/net-tools-code-"
2041 commit ".zip"))
2042 (file-name (string-append name "-" version ".zip"))
2043 (sha256
2044 (base32
2045 "0hz9fda9d78spp774b6rr5xaxav7cm4h0qcpxf70rvdbrf6qx7vy"))))
2046 (home-page "http://net-tools.sourceforge.net/")
2047 (build-system gnu-build-system)
2048 (arguments
2049 '(#:modules ((guix build gnu-build-system)
2050 (guix build utils)
2051 (srfi srfi-1)
2052 (srfi srfi-26))
2053 #:phases
2054 (modify-phases %standard-phases
2055 (replace 'configure
2056 (lambda* (#:key outputs #:allow-other-keys)
2057 (let ((out (assoc-ref outputs "out")))
2058 (mkdir-p (string-append out "/bin"))
2059 (mkdir-p (string-append out "/sbin"))
2060
2061 ;; Pretend we have everything...
2062 (system "yes | make config")
2063
2064 ;; ... except for the things we don't have.
2065 ;; HAVE_AFDECnet requires libdnet, which we don't have.
2066 ;; HAVE_HWSTRIP and HAVE_HWTR require kernel headers
2067 ;; that have been removed.
2068 ;; XXX SELINUX and AFBLUETOOTH are removed for now, but we should
2069 ;; think about adding them later.
2070 (substitute* '("config.make" "config.h")
2071 (("^.*HAVE_(AFDECnet|HWSTRIP|HWTR|SELINUX|AFBLUETOOTH)[ =]1.*$")
2072 ""))
2073 #t)))
2074 (add-after 'install 'remove-redundant-commands
2075 (lambda* (#:key outputs #:allow-other-keys)
2076 ;; Remove commands and man pages redundant with Inetutils.
2077 (let* ((out (assoc-ref outputs "out"))
2078 (dup (append-map (cut find-files out <>)
2079 '("^hostname"
2080 "^(yp|nis|dns)?domainname"))))
2081 (for-each delete-file dup)
2082 #t))))
2083 ;; Binaries that depend on libnet-tools.a don't declare that
2084 ;; dependency, making it parallel-unsafe.
2085 #:parallel-build? #f
2086
2087 #:tests? #f ; no test suite
2088 #:make-flags (let ((out (assoc-ref %outputs "out")))
2089 (list "CC=gcc"
2090 (string-append "BASEDIR=" out)
2091 (string-append "INSTALLNLSDIR=" out "/share/locale")
2092 (string-append "mandir=/share/man")))))
2093 (native-inputs `(("gettext" ,gettext-minimal)
2094 ("unzip" ,unzip)))
2095 (synopsis "Tools for controlling the network subsystem in Linux")
2096 (description
2097 "This package includes the important tools for controlling the network
2098 subsystem of the Linux kernel. This includes arp, ifconfig, netstat, rarp and
2099 route. Additionally, this package contains utilities relating to particular
2100 network hardware types (plipconfig, slattach) and advanced aspects of IP
2101 configuration (iptunnel, ipmaddr).")
2102 (license license:gpl2+))))
2103
2104 (define-public libcap
2105 (package
2106 (name "libcap")
2107 (version "2.27")
2108 (source (origin
2109 (method url-fetch)
2110 (uri (string-append
2111 "mirror://kernel.org/linux/libs/security/linux-privs/"
2112 "libcap2/libcap-" version ".tar.xz"))
2113 (sha256
2114 (base32
2115 "0sj8kidl7qgf2qwxcbw1vadnlb30y4zvjzxswsmfdghq04npkhfs"))))
2116 (build-system gnu-build-system)
2117 (arguments '(#:phases
2118 (modify-phases %standard-phases
2119 (replace 'configure
2120 ;; Add $libdir to the RUNPATH of executables.
2121 (lambda _
2122 (substitute* "Make.Rules"
2123 (("LDFLAGS := #-g")
2124 (string-append "LDFLAGS := -Wl,-rpath="
2125 %output "/lib")))
2126 #t)))
2127 #:tests? #f ; no 'check' target
2128 #:make-flags (list "lib=lib"
2129 (string-append "prefix="
2130 (assoc-ref %outputs "out"))
2131 "RAISE_SETFCAP=no")))
2132 (native-inputs `(("perl" ,perl)))
2133 (inputs `(("attr" ,attr)))
2134 (home-page "https://sites.google.com/site/fullycapable/")
2135 (synopsis "Library for working with POSIX capabilities")
2136 (description
2137 "Libcap2 provides a programming interface to POSIX capabilities on
2138 Linux-based operating systems.")
2139
2140 ;; License is BSD-3 or GPLv2, at the user's choice.
2141 (license license:gpl2)))
2142
2143 (define-public bridge-utils
2144 (package
2145 (name "bridge-utils")
2146 (version "1.6")
2147 (source
2148 (origin
2149 (method url-fetch)
2150 (uri (string-append "mirror://kernel.org/linux/utils/net/bridge-utils/"
2151 "bridge-utils-" version ".tar.xz"))
2152 (sha256
2153 (base32 "1j16kr44csyr4yqxly26l1yw2bh4nkiasgwvask2i2gvsnsyyryc"))))
2154 (build-system gnu-build-system)
2155
2156 ;; The tarball lacks all the generated files.
2157 (native-inputs `(("autoconf" ,autoconf)
2158 ("automake" ,automake)))
2159 (arguments
2160 '(#:phases
2161 (modify-phases %standard-phases
2162 (add-before 'bootstrap 'patch-stuff
2163 (lambda _
2164 ;; Fix "field ‘ip6’ has incomplete type" errors.
2165 (substitute* "libbridge/libbridge.h"
2166 (("#include <linux/if_bridge.h>")
2167 "#include <linux/in6.h>\n#include <linux/if_bridge.h>"))
2168
2169 ;; Ensure that the entire build fails if one of the
2170 ;; sub-Makefiles fails.
2171 (substitute* "Makefile.in"
2172 (("\\$\\(MAKE\\) \\$\\(MFLAGS\\) -C \\$\\$x ;")
2173 "$(MAKE) $(MFLAGS) -C $$x || exit 1;"))
2174
2175 #t)))
2176 #:tests? #f)) ; no 'check' target
2177
2178 (home-page "https://wiki.linuxfoundation.org/networking/bridge")
2179 (synopsis "Manipulate Ethernet bridges")
2180 (description
2181 "Utilities for Linux's Ethernet bridging facilities. A bridge is a way
2182 to connect two Ethernet segments together in a protocol independent way.
2183 Packets are forwarded based on Ethernet address, rather than IP address (like
2184 a router). Since forwarding is done at Layer 2, all protocols can go
2185 transparently through a bridge.")
2186 (license license:gpl2+)))
2187
2188 (define-public libnl
2189 (package
2190 (name "libnl")
2191 (version "3.5.0")
2192 (source (origin
2193 (method url-fetch)
2194 (uri (string-append
2195 "https://github.com/thom311/libnl/releases/download/"
2196 "libnl" (string-join (string-split version #\.) "_")
2197 "/libnl-" version ".tar.gz"))
2198 (sha256
2199 (base32
2200 "1yh5bqmkivd78x378x34gzb28lvykn6b9k3hgvvpdnj5jpn3689m"))))
2201 (build-system gnu-build-system)
2202 (native-inputs
2203 `(("bison" ,bison)
2204 ("flex" ,flex)
2205 ("pkg-config" ,pkg-config)
2206 ("swig" ,swig)
2207 ("libnl3-doc"
2208 ,(origin
2209 (method url-fetch)
2210 (uri (string-append
2211 "https://github.com/thom311/libnl/releases/download/libnl"
2212 (string-join (string-split version #\.) "_")
2213 "/libnl-doc-" version ".tar.gz"))
2214 (sha256
2215 (base32 "19p5y8q3cm5wqvamqc4s5syxnnkvzxy3gw8ivxk6fv9ybn8jm35h"))))))
2216 (inputs
2217 `(("python-2" ,python-2)
2218 ("python-3" ,python-3)))
2219 (outputs '("out" "doc" "python2" "python3"))
2220 (arguments
2221 `(#:modules ((guix build gnu-build-system)
2222 (guix build utils)
2223 (srfi srfi-1))
2224 #:phases
2225 (modify-phases %standard-phases
2226 (add-after 'install 'install-python
2227 (lambda* (#:key outputs #:allow-other-keys)
2228 (define (python-inst python)
2229 (invoke python "setup.py" "build")
2230 (invoke python "setup.py" "install"
2231 (string-append "--prefix="
2232 (assoc-ref %outputs python)))
2233 (invoke python "setup.py" "clean"))
2234 (setenv "LDFLAGS" (format #f "-Wl,-rpath=~a/lib"
2235 (assoc-ref %outputs "out")))
2236 (with-directory-excursion "./python"
2237 (for-each python-inst '("python2" "python3")))
2238 #t))
2239 (add-after 'install 'install-doc
2240 (lambda* (#:key inputs outputs #:allow-other-keys)
2241 (let ((dest (string-append (assoc-ref outputs "doc")
2242 "/share/doc/libnl")))
2243 (mkdir-p dest)
2244 (invoke "tar" "xf" (assoc-ref inputs "libnl3-doc")
2245 "--strip-components=1" "-C" dest)))))))
2246 (home-page "https://www.infradead.org/~tgr/libnl/")
2247 (synopsis "NetLink protocol library suite")
2248 (description
2249 "The libnl suite is a collection of libraries providing APIs to netlink
2250 protocol based Linux kernel interfaces. Netlink is an IPC mechanism primarily
2251 between the kernel and user space processes. It was designed to be a more
2252 flexible successor to ioctl to provide mainly networking related kernel
2253 configuration and monitoring interfaces.")
2254
2255 ;; Most files are LGPLv2.1-only, but some are GPLv2-only (like
2256 ;; 'nl-addr-add.c'), so the result is GPLv2-only.
2257 (license license:gpl2)))
2258
2259 (define-public iw
2260 (package
2261 (name "iw")
2262 (version "4.14")
2263 (source (origin
2264 (method url-fetch)
2265 (uri (string-append
2266 "mirror://kernel.org/software/network/iw/iw-"
2267 version ".tar.xz"))
2268 (sha256
2269 (base32
2270 "12ddd6vh6vs97135bnlyr0szv7hvpbnmfh48584frzab0z0725ph"))))
2271 (build-system gnu-build-system)
2272 (native-inputs `(("pkg-config" ,pkg-config)))
2273 (inputs `(("libnl" ,libnl)))
2274 (arguments
2275 `(#:make-flags
2276 (let* ((target ,(%current-target-system))
2277 (gcc (if target (string-append target "-gcc") "gcc"))
2278 (pkg-config (if target
2279 (string-append target "-pkg-config")
2280 "pkg-config")))
2281 (list
2282 (string-append "CC=" gcc)
2283 (string-append "PKG_CONFIG="
2284 (assoc-ref %build-inputs "pkg-config")
2285 "/bin/" pkg-config)
2286 (string-append "PREFIX=" (assoc-ref %outputs "out"))))
2287 #:phases (modify-phases %standard-phases (delete 'configure))))
2288 (home-page "https://wireless.wiki.kernel.org/")
2289 (synopsis "Tool for configuring wireless devices")
2290 (description
2291 "iw is a new nl80211 based CLI configuration utility for wireless
2292 devices. It replaces @code{iwconfig}, which is deprecated.")
2293 (license license:isc)))
2294
2295 (define-public powertop
2296 (package
2297 (name "powertop")
2298 (version "2.12")
2299 (source
2300 (origin
2301 (method url-fetch)
2302 (uri (string-append "https://01.org/sites/default/files/downloads/"
2303 "powertop-" version ".tar.gz"))
2304 (sha256
2305 (base32 "1kiiwa5p2r7h1lzcf53xq61ckaa4wk565s9fs6vw4bfk84y3mfsw"))))
2306 (build-system gnu-build-system)
2307 (arguments
2308 '(#:phases
2309 (modify-phases %standard-phases
2310 ;; TODO: Patch some hardcoded "wlan0" in calibrate/calibrate.cpp to
2311 ;; allow calibrating the network interface in Guix System.
2312 (add-after 'unpack 'patch-absolute-file-names
2313 (lambda* (#:key inputs #:allow-other-keys)
2314 (let ((kmod (assoc-ref inputs "kmod")))
2315 (substitute* (find-files "src" "\\.cpp$")
2316 ;; Give the right 'modprobe' file name so that essential
2317 ;; modules such as msr.ko can be loaded.
2318 (("/sbin/modprobe") (string-append kmod "/bin/modprobe"))
2319 ;; These programs are only needed to calibrate, so using
2320 ;; relative file names avoids adding extra inputs. When they
2321 ;; are missing powertop gracefully handles it.
2322 (("/usr/bin/hcitool") "hcitool")
2323 (("/usr/bin/xset") "xset")
2324 (("/usr/sbin/hciconfig") "hciconfig"))
2325 #t))))))
2326 (inputs
2327 `(("kmod" ,kmod)
2328 ("libnl" ,libnl)
2329 ("ncurses" ,ncurses)
2330 ("pciutils" ,pciutils)
2331 ("zlib" ,zlib)))
2332 (native-inputs
2333 `(("pkg-config" ,pkg-config)))
2334 (home-page "https://01.org/powertop/")
2335 (synopsis "Analyze power consumption on Intel-based laptops")
2336 (description
2337 "PowerTOP is a Linux tool to diagnose issues with power consumption and
2338 power management. In addition to being a diagnostic tool, PowerTOP also has
2339 an interactive mode where the user can experiment various power management
2340 settings for cases where the operating system has not enabled these
2341 settings.")
2342 (license license:gpl2)))
2343
2344 (define-public aumix
2345 (package
2346 (name "aumix")
2347 (version "2.9.1")
2348 (source (origin
2349 (method url-fetch)
2350 (uri (string-append
2351 "http://www.jpj.net/~trevor/aumix/releases/aumix-"
2352 version ".tar.bz2"))
2353 (sha256
2354 (base32
2355 "0a8fwyxnc5qdxff8sl2sfsbnvgh6pkij4yafiln0fxgg6bal7knj"))))
2356 (build-system gnu-build-system)
2357 (inputs `(("ncurses" ,ncurses)))
2358 (home-page "http://www.jpj.net/~trevor/aumix.html")
2359 (synopsis "Audio mixer for X and the console")
2360 (description
2361 "Aumix adjusts an audio mixer from X, the console, a terminal,
2362 the command line or a script.")
2363 (license license:gpl2+)))
2364
2365 (define-public iotop
2366 (package
2367 (name "iotop")
2368 (version "0.6")
2369 (source
2370 (origin
2371 (method url-fetch)
2372 (uri (string-append "http://guichaz.free.fr/iotop/files/iotop-"
2373 version ".tar.gz"))
2374 (sha256 (base32
2375 "1kp8mqg2pbxq4xzpianypadfxcsyfgwcaqgqia6h9fsq6zyh4z0s"))))
2376 (build-system python-build-system)
2377 (arguments
2378 '(#:phases
2379 (modify-phases %standard-phases
2380 (add-after 'unpack 'fix-build-with-python3
2381 (lambda _
2382 (substitute* "setup.py"
2383 (("itervalues") "values"))
2384 #t)))
2385 ;; There are currently no checks in the package.
2386 #:tests? #f))
2387 (native-inputs `(("python" ,python)))
2388 (home-page "http://guichaz.free.fr/iotop/")
2389 (synopsis
2390 "Displays the IO activity of running processes")
2391 (description
2392 "Iotop is a Python program with a top like user interface to show the
2393 processes currently causing I/O.")
2394 (license license:gpl2+)))
2395
2396 (define-public fuse
2397 (package
2398 (name "fuse")
2399 (version "2.9.9")
2400 (source (origin
2401 (method url-fetch)
2402 (uri (string-append "https://github.com/libfuse/libfuse/releases/"
2403 "download/fuse-" version
2404 "/fuse-" version ".tar.gz"))
2405 (sha256
2406 (base32
2407 "1ddlq6kzxilccgbvxjfx80jx6kamgw4sv49phks2zhlcc1frvrnh"))
2408 (patches (search-patches "fuse-overlapping-headers.patch"))))
2409 (build-system gnu-build-system)
2410 (inputs `(("util-linux" ,util-linux)))
2411 (arguments
2412 '(#:configure-flags (list (string-append "MOUNT_FUSE_PATH="
2413 (assoc-ref %outputs "out")
2414 "/sbin")
2415 (string-append "INIT_D_PATH="
2416 (assoc-ref %outputs "out")
2417 "/etc/init.d")
2418
2419 ;; The rule makes /dev/fuse 666.
2420 (string-append "UDEV_RULES_PATH="
2421 (assoc-ref %outputs "out")
2422 "/lib/udev/rules.d"))
2423 #:phases
2424 (modify-phases %standard-phases
2425 (add-before 'build 'set-file-names
2426 (lambda* (#:key inputs #:allow-other-keys)
2427 ;; libfuse calls out to mount(8) and umount(8). Make sure
2428 ;; it refers to the right ones.
2429 (substitute* '("lib/mount_util.c" "util/mount_util.c")
2430 (("/bin/(u?)mount" _ maybe-u)
2431 (string-append (assoc-ref inputs "util-linux")
2432 "/bin/" maybe-u "mount")))
2433 (substitute* '("util/mount.fuse.c")
2434 (("/bin/sh")
2435 (which "sh")))
2436
2437 ;; This hack leads libfuse to search for 'fusermount' in
2438 ;; $PATH, where it may find a setuid-root binary, instead of
2439 ;; trying solely $out/sbin/fusermount and failing because
2440 ;; it's not setuid.
2441 (substitute* "lib/Makefile"
2442 (("-DFUSERMOUNT_DIR=[[:graph:]]+")
2443 "-DFUSERMOUNT_DIR=\\\"/var/empty\\\""))
2444 #t)))))
2445 (home-page "https://github.com/libfuse/libfuse")
2446 (synopsis "Support file systems implemented in user space")
2447 (description
2448 "As a consequence of its monolithic design, file system code for Linux
2449 normally goes into the kernel itself---which is not only a robustness issue,
2450 but also an impediment to system extensibility. FUSE, for \"file systems in
2451 user space\", is a kernel module and user-space library that tries to address
2452 part of this problem by allowing users to run file system implementations as
2453 user-space processes.")
2454 (license (list license:lgpl2.1 ;library
2455 license:gpl2+)))) ;command-line utilities
2456
2457 (define-public unionfs-fuse
2458 (package
2459 (name "unionfs-fuse")
2460 (version "2.0")
2461 (source (origin
2462 (method git-fetch)
2463 (uri (git-reference
2464 (url "https://github.com/rpodgorny/unionfs-fuse")
2465 (commit (string-append "v" version))))
2466 (file-name (git-file-name name version))
2467 (sha256
2468 (base32
2469 "0lb8zgdxnjy2fjr2284hvdfn7inc1in44ynzgcr66x54bxzvynj6"))))
2470 (build-system cmake-build-system)
2471 (native-inputs
2472 `(("python" ,python)))
2473 (inputs `(("fuse" ,fuse)))
2474 (arguments
2475 ;; The tests were never actually run ("collected 0 items"), but in recent
2476 ;; versions of pytest that causes an error.
2477 '(#:tests? #f))
2478 (home-page "https://github.com/rpodgorny/unionfs-fuse")
2479 (synopsis "User-space union file system")
2480 (description
2481 "UnionFS-FUSE is a flexible union file system implementation in user
2482 space, using the FUSE library. Mounting a union file system allows you to
2483 \"aggregate\" the contents of several directories into a single mount point.
2484 UnionFS-FUSE additionally supports copy-on-write.")
2485 (license license:bsd-3)))
2486
2487 (define fuse-static
2488 (package (inherit fuse)
2489 (name "fuse-static")
2490 (source (origin (inherit (package-source fuse))
2491 (modules '((guix build utils)))
2492 (snippet
2493 '(begin
2494 ;; Normally libfuse invokes mount(8) so that /etc/mtab is
2495 ;; updated. Change calls to 'mtab_needs_update' to 0 so
2496 ;; that it doesn't do that, allowing us to remove the
2497 ;; dependency on util-linux (something that is useful in
2498 ;; initrds.)
2499 (substitute* '("lib/mount_util.c"
2500 "util/mount_util.c")
2501 (("mtab_needs_update[[:blank:]]*\\([a-z_]+\\)")
2502 "0")
2503 (("/bin/")
2504 ""))
2505 #t))))))
2506
2507 (define-public unionfs-fuse/static
2508 (package (inherit unionfs-fuse)
2509 (synopsis "User-space union file system (statically linked)")
2510 (name (string-append (package-name unionfs-fuse) "-static"))
2511 (source (origin (inherit (package-source unionfs-fuse))
2512 (modules '((guix build utils)))
2513 (snippet
2514 '(begin
2515 ;; Add -ldl to the libraries, because libfuse.a needs that.
2516 (substitute* "src/CMakeLists.txt"
2517 (("target_link_libraries(.*)\\)" _ libs)
2518 (string-append "target_link_libraries"
2519 libs " dl)")))
2520 #t))))
2521 (arguments
2522 '(#:tests? #f
2523 #:configure-flags '("-DCMAKE_EXE_LINKER_FLAGS=-static")
2524 #:phases
2525 (modify-phases %standard-phases
2526 (add-after 'install 'post-install
2527 (lambda* (#:key outputs #:allow-other-keys)
2528 (let* ((out (assoc-ref outputs "out"))
2529 (exe (string-append out "/bin/unionfs")))
2530 ;; By default, 'unionfs' keeps references to
2531 ;; $glibc/share/locale and similar stuff. Remove them.
2532 (remove-store-references exe)
2533
2534 ;; 'unionfsctl' has references to glibc as well. Since
2535 ;; we don't need it, remove it.
2536 (delete-file (string-append out "/bin/unionfsctl"))
2537 #t))))))
2538 (inputs `(("fuse" ,fuse-static)))))
2539
2540 (define-public sshfs
2541 (package
2542 (name "sshfs")
2543 (version "2.10")
2544 (source (origin
2545 (method url-fetch)
2546 (uri (string-append "https://github.com/libfuse/sshfs/releases/"
2547 "download/sshfs-" version "/sshfs-" version
2548 ".tar.gz"))
2549 (sha256
2550 (base32
2551 "00fir2iykdx11g8nv5gijg0zjrp2g3ldypnv0yi6lq3h5pg5v13h"))))
2552 (build-system gnu-build-system)
2553 (inputs
2554 `(("fuse" ,fuse)
2555 ("glib" ,glib)))
2556 (native-inputs
2557 `(("pkg-config" ,pkg-config)))
2558 (home-page "https://github.com/libfuse/sshfs")
2559 (synopsis "Mount remote file systems over SSH")
2560 (description
2561 "This is a file system client based on the SSH File Transfer Protocol.
2562 Since most SSH servers already support this protocol it is very easy to set
2563 up: on the server side there's nothing to do; on the client side mounting the
2564 file system is as easy as logging into the server with an SSH client.")
2565 (license license:gpl2+)))
2566
2567 (define-public sshfs-fuse
2568 (package (inherit sshfs)
2569 (name "sshfs-fuse")
2570 (properties `((superseded . ,sshfs)))))
2571
2572 (define-public archivemount
2573 (package
2574 (name "archivemount")
2575 (version "0.8.12")
2576 (source
2577 (origin
2578 (method url-fetch)
2579 (uri (string-append "https://www.cybernoia.de/software/archivemount/"
2580 "archivemount-" version ".tar.gz"))
2581 (sha256
2582 (base32 "12fb8fcmd1zwvfgzx4pay47md5cr2kgxcgq82cm6skmq75alfzi4"))))
2583 (build-system gnu-build-system)
2584 (inputs `(("fuse" ,fuse)
2585 ("libarchive" ,libarchive)))
2586 (native-inputs `(("pkg-config" ,pkg-config)))
2587 (home-page "https://www.cybernoia.de/software/archivemount.html")
2588 (synopsis "Tool for mounting archive files with FUSE")
2589 (description "archivemount is a FUSE-based file system for Unix variants,
2590 including Linux. Its purpose is to mount archives (i.e. tar, tar.gz, etc.) to a
2591 mount point where it can be read from or written to as with any other file
2592 system. This makes accessing the contents of the archive, which may be
2593 compressed, transparent to other programs, without decompressing them.")
2594 (license license:lgpl2.0+)))
2595
2596 (define-public numactl
2597 (package
2598 (name "numactl")
2599 (version "2.0.13")
2600 (source (origin
2601 (method url-fetch)
2602 (uri (string-append
2603 "https://github.com/numactl/numactl/releases/download/v"
2604 version "/numactl-" version ".tar.gz"))
2605 (sha256
2606 (base32
2607 "16lcypvcmx1ydkpi2s82kqhg13kak7qhpbnj8hd9bdbyhr5ja7lr"))))
2608 (build-system gnu-build-system)
2609 (arguments
2610 '(;; There's a 'test' target, but it requires NUMA support in the kernel
2611 ;; to run, which we can't assume to have.
2612 #:tests? #f))
2613
2614 ;; NUMA is apparently not supported on armhf, see
2615 ;; http://www.spinics.net/lists/linux-numa/msg01157.html
2616 (supported-systems (delete "armhf-linux" %supported-systems))
2617 (home-page "https://github.com/numactl/numactl")
2618 (synopsis "Tools for non-uniform memory access (NUMA) machines")
2619 (description
2620 "NUMA stands for Non-Uniform Memory Access, in other words a system whose
2621 memory is not all in one place. The @command{numactl} program allows you to
2622 run your application program on specific CPUs and memory nodes. It does this
2623 by supplying a NUMA memory policy to the operating system before running your
2624 program.
2625
2626 The package contains other commands, such as @command{numastat},
2627 @command{memhog}, and @command{numademo} which provides a quick overview of
2628 NUMA performance on your system.")
2629 (license (list license:gpl2 ;programs
2630 license:lgpl2.1)))) ;library
2631
2632 (define-public kbd-neo
2633 (package
2634 (name "kbd-neo")
2635 (version "2486")
2636 (source
2637 (origin
2638 (method url-fetch)
2639 (uri (string-append "https://svn.neo-layout.org/!svn/bc/"
2640 version "/linux/console/neo.map"))
2641 (file-name (string-append name "-" version ".map"))
2642 (sha256
2643 (base32
2644 "19mfrd31vzpsjiwc7pshxm0b0sz5dd17xrz6k079cy4im1vf0r4g"))))
2645 (build-system trivial-build-system)
2646 (arguments
2647 `(#:modules ((guix build utils))
2648 #:builder (begin
2649 (use-modules (guix build utils))
2650 (let ((out (string-append %output "/share/keymaps"))
2651 (source (assoc-ref %build-inputs "source")))
2652 (mkdir-p out)
2653 (copy-file source (string-append out "/neo.map"))
2654 #t))))
2655 (home-page "https://neo-layout.org")
2656 (synopsis "Neo2 console layout")
2657 (description
2658 "Kbd-neo provides the Neo2 keyboard layout for use with
2659 @command{loadkeys(1)} from @code{kbd(4)}.")
2660 ;; The file is located in an svn directory, the entire content of
2661 ;; the directory is licensed as GPL3.
2662 (license license:gpl3+)))
2663
2664 (define-public kbd
2665 (package
2666 (name "kbd")
2667 (version "2.0.4")
2668 (source (origin
2669 (method url-fetch)
2670 (uri (string-append "mirror://kernel.org/linux/utils/kbd/kbd-"
2671 version ".tar.xz"))
2672 (sha256
2673 (base32
2674 "124swm93dm4ca0pifgkrand3r9gvj3019d4zkfxsj9djpvv0mnaz"))
2675 (modules '((guix build utils)))
2676 (snippet
2677 '(begin
2678 (substitute* "tests/Makefile.in"
2679 ;; The '%: %.in' rule incorrectly uses @VERSION@.
2680 (("@VERSION@")
2681 "[@]VERSION[@]"))
2682 (substitute* '("src/unicode_start" "src/unicode_stop")
2683 ;; Assume the Coreutils are in $PATH.
2684 (("/usr/bin/tty")
2685 "tty"))
2686 #t))))
2687 (build-system gnu-build-system)
2688 (arguments
2689 '(#:phases
2690 (modify-phases %standard-phases
2691 (add-before 'build 'pre-build
2692 (lambda* (#:key inputs #:allow-other-keys)
2693 (let ((gzip (assoc-ref %build-inputs "gzip"))
2694 (bzip2 (assoc-ref %build-inputs "bzip2")))
2695 (substitute* "src/libkeymap/findfile.c"
2696 (("gzip")
2697 (string-append gzip "/bin/gzip"))
2698 (("bzip2")
2699 (string-append bzip2 "/bin/bzip2")))
2700 #t)))
2701 (add-after 'install 'post-install
2702 (lambda* (#:key outputs #:allow-other-keys)
2703 ;; Make sure these programs find their comrades.
2704 (let* ((out (assoc-ref outputs "out"))
2705 (bin (string-append out "/bin")))
2706 (for-each (lambda (prog)
2707 (wrap-program (string-append bin "/" prog)
2708 `("PATH" ":" prefix (,bin))))
2709 '("unicode_start" "unicode_stop"))
2710 #t))))))
2711 (inputs `(("check" ,check)
2712 ("gzip" ,gzip)
2713 ("bzip2" ,bzip2)
2714 ("pam" ,linux-pam)))
2715 (native-search-paths
2716 (list (search-path-specification
2717 (variable "LOADKEYS_KEYMAP_PATH")
2718 ;; Append ‘/**’ to recursively search all directories. One can then
2719 ;; run (for example) ‘loadkeys en-latin9’ instead of having to find
2720 ;; and type ‘i386/colemak/en-latin9’ on a mislabelled keyboard.
2721 (files (list "share/keymaps/**")))))
2722 (native-inputs `(("pkg-config" ,pkg-config)))
2723 (home-page "http://kbd-project.org/")
2724 (synopsis "Linux keyboard utilities and keyboard maps")
2725 (description
2726 "This package contains keytable files and keyboard utilities compatible
2727 for systems using the Linux kernel. This includes commands such as
2728 @code{loadkeys}, @code{setfont}, @code{kbdinfo}, and @code{chvt}.")
2729 (license license:gpl2+)))
2730
2731 (define-public loadkeys-static
2732 (package
2733 (inherit kbd)
2734 (name "loadkeys-static")
2735 (arguments
2736 (substitute-keyword-arguments (package-arguments kbd)
2737 ((#:configure-flags flags ''())
2738 `(append '("LDFLAGS=-static" "--disable-shared" "--disable-nls"
2739 "--disable-vlock" ;so we don't need libpam
2740 "--disable-libkeymap")
2741 ,flags))
2742 ((#:make-flags flags ''())
2743 `(cons "LDFLAGS=-all-static" ,flags))
2744 ((#:phases phases '%standard-phases)
2745 `(modify-phases ,phases
2746 (replace 'install
2747 (lambda* (#:key outputs #:allow-other-keys)
2748 (let ((out (assoc-ref outputs "out")))
2749 ;; The binary keeps references to gzip, among other things,
2750 ;; which we don't need in the initrd, so strip references.
2751 (remove-store-references "src/loadkeys")
2752
2753 (install-file "src/loadkeys"
2754 (string-append out "/bin"))
2755 #t)))
2756 (delete 'post-install)))
2757 ((#:strip-flags _ '())
2758 ''("--strip-all"))
2759 ((#:allowed-references _ '())
2760 '())))
2761
2762 (synopsis "Statically-linked @command{loadkeys} program")
2763
2764 ;; This package is meant to be used internally in the initrd so don't
2765 ;; expose it.
2766 (properties '((hidden? . #t)))))
2767
2768 (define-public inotify-tools
2769 (package
2770 (name "inotify-tools")
2771 (version "3.20.1")
2772 (source (origin
2773 (method git-fetch)
2774 (uri (git-reference
2775 (url "https://github.com/rvoicilas/inotify-tools.git")
2776 (commit version)))
2777 (file-name (git-file-name name version))
2778 (sha256
2779 (base32
2780 "14dci1i4mhsd5sa33k8h3ayphk19kizynh5ql9ryibdpmcanfiyq"))))
2781 (build-system gnu-build-system)
2782 (native-inputs
2783 `(("autoconf" ,autoconf)
2784 ("automake" ,automake)
2785 ("libtool" ,libtool)))
2786 (home-page "https://github.com/rvoicilas/inotify-tools/wiki")
2787 (synopsis "Monitor file accesses")
2788 (description
2789 "The inotify-tools packages provides a C library and command-line tools
2790 to use Linux' inotify mechanism, which allows file accesses to be monitored.")
2791 (license license:gpl2+)))
2792
2793 (define-public kmod
2794 (package
2795 (name "kmod")
2796 (version "26")
2797 (source (origin
2798 (method url-fetch)
2799 (uri
2800 (string-append "mirror://kernel.org/linux/utils/kernel/kmod/"
2801 "kmod-" version ".tar.xz"))
2802 (sha256
2803 (base32
2804 "17dvrls70nr3b3x1wm8pwbqy4r8a5c20m0dhys8mjhsnpg425fsp"))
2805 (patches (search-patches "kmod-module-directory.patch"))))
2806 (build-system gnu-build-system)
2807 (native-inputs
2808 `(("pkg-config" ,pkg-config)))
2809 (inputs
2810 `(("xz" ,xz)
2811 ("zlib" ,zlib)))
2812 (arguments
2813 `(#:tests? #f ; FIXME: Investigate test failures
2814 #:configure-flags '("--with-xz" "--with-zlib")
2815 #:phases
2816 (modify-phases %standard-phases
2817 (add-after 'install 'install-modprobe&co
2818 (lambda* (#:key outputs #:allow-other-keys)
2819 (let* ((out (assoc-ref outputs "out"))
2820 (bin (string-append out "/bin")))
2821 (for-each (lambda (tool)
2822 (symlink "kmod"
2823 (string-append bin "/" tool)))
2824 '("insmod" "rmmod" "lsmod" "modprobe"
2825 "modinfo" "depmod"))
2826 #t))))))
2827 (home-page "https://www.kernel.org/")
2828 (synopsis "Kernel module tools")
2829 (description "Kmod is a set of tools to handle common tasks with Linux
2830 kernel modules like insert, remove, list, check properties, resolve
2831 dependencies and aliases.
2832
2833 These tools are designed on top of libkmod, a library that is shipped with
2834 kmod. The aim is to be compatible with tools, configurations and indices
2835 from the module-init-tools project.")
2836 (license license:gpl2+))) ; library under lgpl2.1+
2837
2838 (define-public earlyoom
2839 (package
2840 (name "earlyoom")
2841 (version "1.3.1")
2842 (source (origin
2843 (method git-fetch)
2844 (uri (git-reference
2845 (url "https://github.com/rfjakob/earlyoom.git")
2846 (commit (string-append "v" version))))
2847 (file-name (git-file-name name version))
2848 (sha256
2849 (base32
2850 "06sd3jpkdrwqbphsf8jrgs5rxfi7j3xjmygjjvj4xjk4gncz7r2i"))))
2851 (build-system gnu-build-system)
2852 (arguments
2853 `(#:phases (modify-phases %standard-phases
2854 (delete 'configure)
2855 (add-before 'check 'set-home
2856 (lambda _
2857 (setenv "HOME" (getcwd))
2858 #t))
2859 (add-after 'build 'install-contribs
2860 ;; Install what seems useful from the contrib directory.
2861 (lambda* (#:key outputs #:allow-other-keys)
2862 (let* ((out (assoc-ref outputs "out"))
2863 (contrib (string-append
2864 out "/share/earlyoom/contrib")))
2865 (install-file "contrib/notify_all_users.py" contrib)
2866 #t))))
2867 #:make-flags (let* ((prefix (assoc-ref %outputs "out")))
2868 (list "CC=gcc"
2869 (string-append "VERSION=v" ,version)
2870 (string-append "PREFIX=" prefix)
2871 (string-append "SYSCONFDIR=" prefix "/etc")))
2872 #:test-target "test"))
2873 (native-inputs `(("go" ,go) ;for the test suite
2874 ("pandoc" ,ghc-pandoc))) ;to generate the manpage
2875 (home-page "https://github.com/rfjakob/earlyoom")
2876 (synopsis "Simple out of memory (OOM) daemon for the Linux kernel")
2877 (description "Early OOM is a minimalist out of memory (OOM) daemon that
2878 runs in user space and provides a more responsive and configurable alternative
2879 to the in-kernel OOM killer.")
2880 (license license:expat)))
2881
2882 (define-public eudev
2883 ;; The post-systemd fork, maintained by Gentoo.
2884 (package
2885 (name "eudev")
2886 (version "3.2.9")
2887 (source (origin
2888 (method git-fetch)
2889 (uri (git-reference (url "https://github.com/gentoo/eudev")
2890 (commit (string-append "v" version))))
2891 (file-name (git-file-name name version))
2892 (sha256
2893 (base32
2894 "1g9z3d33m0i3hmbhm0wxpvkzf6ac7xj1drwcfrhzlfhhi63sg9h7"))
2895 (patches (search-patches "eudev-rules-directory.patch"))))
2896 (build-system gnu-build-system)
2897 (arguments
2898 '(#:phases
2899 (modify-phases %standard-phases
2900 (add-after 'unpack 'make-source-writable
2901 (lambda _
2902 ;; XXX: Git checkouts are read-only, but this package needs to
2903 ;; modify some of its files.
2904 (for-each make-file-writable (find-files "."))
2905 #t))
2906 (add-before 'bootstrap 'patch-file-names
2907 (lambda* (#:key inputs #:allow-other-keys)
2908 (substitute* "man/make.sh"
2909 (("/usr/bin/xsltproc")
2910 (string-append (assoc-ref inputs "xsltproc")
2911 "/bin/xsltproc")))
2912 #t))
2913 (add-after 'install 'move-static-library
2914 (lambda* (#:key outputs #:allow-other-keys)
2915 (let* ((out (assoc-ref outputs "out"))
2916 (static (assoc-ref outputs "static"))
2917 (source (string-append out "/lib/libudev.a"))
2918 (target (string-append static "/lib/libudev.a")))
2919 (mkdir-p (dirname target))
2920 (link source target)
2921 (delete-file source)
2922 ;; Remove reference to the static library from the .la file
2923 ;; such that Libtool looks for it in the usual places.
2924 (substitute* (string-append out "/lib/libudev.la")
2925 (("old_library=.*")
2926 "old_library=''\n"))
2927 #t)))
2928 (add-after 'install 'build-hwdb
2929 (lambda* (#:key outputs #:allow-other-keys)
2930 ;; Build OUT/etc/udev/hwdb.bin. This allows 'lsusb' and
2931 ;; similar tools to display product names.
2932 (let ((out (assoc-ref outputs "out")))
2933 (invoke (string-append out "/bin/udevadm")
2934 "hwdb" "--update")))))
2935 #:configure-flags (list "--enable-manpages")))
2936 (native-inputs
2937 `(("autoconf" ,autoconf)
2938 ("automake" ,automake)
2939 ("gperf" ,gperf)
2940 ("libtool" ,libtool)
2941 ("pkg-config" ,pkg-config)
2942 ;; For tests.
2943 ("perl" ,perl)
2944 ("python" ,python-wrapper)
2945 ;; For documentation.
2946 ("docbook-xml" ,docbook-xml-4.2)
2947 ("docbook-xsl" ,docbook-xsl)
2948 ("libxml2" ,libxml2) ;for $XML_CATALOG_FILES
2949 ("xsltproc" ,libxslt)))
2950 (inputs
2951 ;; When linked against libblkid, eudev can populate /dev/disk/by-label
2952 ;; and similar; it also installs the '60-persistent-storage.rules' file,
2953 ;; which contains the rules to do that.
2954 `(("util-linux" ,util-linux) ;for blkid
2955 ("kmod" ,kmod)))
2956 (outputs '("out" "static"))
2957 (home-page "https://wiki.gentoo.org/wiki/Project:Eudev")
2958 (synopsis "Userspace device management")
2959 (description "Udev is a daemon which dynamically creates and removes
2960 device nodes from /dev/, handles hotplug events and loads drivers at boot
2961 time.")
2962 (license license:gpl2+)))
2963
2964 ;; TODO: Merge with eudev on the next rebuild cycle.
2965 (define-public eudev/btrfs-fix
2966 (package/inherit
2967 eudev
2968 (version (string-append (package-version eudev) "-1"))
2969 (arguments
2970 (substitute-keyword-arguments (package-arguments eudev)
2971 ((#:phases phases '%standard-phases)
2972 `(modify-phases ,phases
2973 (add-before 'configure 'patch-bindir-in-btrfs-rules
2974 (lambda* (#:key outputs #:allow-other-keys)
2975 ;; The "@bindir@" substitution incorrectly expands to a literal
2976 ;; "${exec_prefix}" (see <https://bugs.gnu.org/39926>). Work
2977 ;; around it.
2978 (let ((out (assoc-ref outputs "out")))
2979 (substitute* "rules/64-btrfs.rules.in"
2980 (("@bindir@")
2981 (string-append out "/bin")))
2982 #t)))))))))
2983
2984 (define-public python-evdev
2985 (package
2986 (name "python-evdev")
2987 (version "1.3.0")
2988 (source
2989 (origin
2990 (method url-fetch)
2991 (uri (pypi-uri "evdev" version))
2992 (sha256
2993 (base32 "0kb3636yaw9l8xi8s184w0r0n9ic5dw3b8hx048jf9fpzss4kimi"))))
2994 (build-system python-build-system)
2995 (native-inputs
2996 `(("kernel-headers" ,linux-libre-headers)))
2997 (arguments
2998 `(#:tests? #f ;no rule for tests
2999 #:phases
3000 (modify-phases %standard-phases
3001 (add-before 'build 'fix-hard-coded-directory
3002 (lambda* (#:key inputs #:allow-other-keys)
3003 (substitute* "setup.py"
3004 (("/usr/include/linux")
3005 (string-append
3006 (assoc-ref inputs "kernel-headers") "/include/linux")))
3007 #t)))))
3008 (home-page "https://github.com/gvalkov/python-evdev")
3009 (synopsis "Bindings to the Linux input handling subsystem")
3010 (description
3011 "Python-evdev provides bindings to the generic input event interface in
3012 Linux. The @code{evdev} interface serves the purpose of passing events
3013 generated in the kernel directly to userspace through character devices that
3014 are typically located in @file{/dev/input/}.
3015
3016 This package also comes with bindings to @code{uinput}, the userspace input
3017 subsystem. @code{uinput} allows userspace programs to create and handle input
3018 devices that can inject events directly into the input subsystem.")
3019 (license license:bsd-3)))
3020
3021 (define-public lvm2
3022 (package
3023 (name "lvm2")
3024 (version "2.03.08")
3025 (source (origin
3026 (method url-fetch)
3027 (uri (list (string-append "ftp://sourceware.org/pub/lvm2/LVM2."
3028 version ".tgz")
3029 (string-append "ftp://sources.redhat.com/pub/lvm2/releases/LVM2."
3030 version ".tgz")))
3031 (sha256
3032 (base32
3033 "1j0yis658564rk1ddabkl8vbavp0fdd10gd6qhgyzc3akzf620kf"))
3034 (modules '((guix build utils)))
3035 (snippet
3036 '(begin
3037 (use-modules (guix build utils))
3038
3039 ;; Honor sysconfdir.
3040 (substitute* "make.tmpl.in"
3041 (("^confdir = .*$")
3042 "confdir = @sysconfdir@\n")
3043 (("DEFAULT_SYS_DIR = @DEFAULT_SYS_DIR@")
3044 "DEFAULT_SYS_DIR = @sysconfdir@"))
3045 #t))
3046 (patches (search-patches "lvm2-static-link.patch"))))
3047 (build-system gnu-build-system)
3048 (native-inputs
3049 `(("pkg-config" ,pkg-config)
3050 ("procps" ,procps))) ;tests use 'pgrep'
3051 (inputs
3052 `(("libaio" ,libaio)
3053 ("udev" ,eudev)))
3054 (arguments
3055 '(#:phases
3056 (modify-phases %standard-phases
3057 (add-after 'configure 'set-makefile-shell
3058 (lambda _
3059 ;; Use 'sh', not 'bash', so that '. lib/utils.sh' works as
3060 ;; expected.
3061 (setenv "SHELL" (which "sh"))
3062
3063 ;; Replace /bin/sh with the right file name.
3064 (patch-makefile-SHELL "make.tmpl")
3065 #t)))
3066
3067 #:configure-flags (list (string-append "--sysconfdir="
3068 (assoc-ref %outputs "out")
3069 "/etc/lvm")
3070 "--enable-udev_sync"
3071 "--enable-udev_rules"
3072 "--enable-pkgconfig"
3073 "--enable-cmdlib"
3074 "--enable-dmeventd" ; Requires '--enable-cmdlib'.
3075
3076 ;; Make sure programs such as 'dmsetup' can
3077 ;; find libdevmapper.so.
3078 (string-append "LDFLAGS=-Wl,-rpath="
3079 (assoc-ref %outputs "out")
3080 "/lib,-rpath="
3081 (assoc-ref %outputs "out")
3082 "/lib/device-mapper"))
3083
3084 ;; The tests use 'mknod', which requires root access.
3085 #:tests? #f))
3086 (home-page "https://sourceware.org/lvm2/")
3087 (synopsis "Logical volume management for Linux")
3088 (description
3089 "LVM2 is the logical volume management tool set for Linux-based systems.
3090 This package includes the user-space libraries and tools, including the device
3091 mapper. Kernel components are part of Linux-libre.")
3092
3093 ;; Libraries (liblvm2, libdevmapper) are LGPLv2.1.
3094 ;; Command-line tools are GPLv2.
3095 (license (list license:gpl2 license:lgpl2.1))))
3096
3097 (define-public lvm2-static
3098 (package
3099 (inherit lvm2)
3100 (name "lvm2-static")
3101
3102 ;; Propagate udev because libdevmapper.a depends on libudev.
3103 (propagated-inputs `(("udev:static" ,eudev "static")))
3104
3105 (arguments
3106 (substitute-keyword-arguments (package-arguments lvm2)
3107 ((#:configure-flags flags '())
3108 ;; LVM2 doesn't use Libtool, hence the custom option.
3109 `(append '("--enable-static_link")
3110 ;; Building dmeventd statically is complicated due to a
3111 ;; requirement on libdevmapper.a, which is being phased out
3112 ;; in favor of libdevice-mapper.a, which in turn is is not
3113 ;; easily made available at dmeventd build time. Just ignore
3114 ;; it until the situation improves.
3115 (delete "--enable-dmeventd" ,flags)))
3116 ((#:phases phases)
3117 `(modify-phases ,phases
3118 (add-before 'configure 'adjust-Makefile
3119 (lambda _
3120 ;; These fixes are related to the upstream libdm->device_mapper
3121 ;; migration and will hopefully be fixed upstream in due time.
3122 (substitute* "tools/Makefile.in"
3123 ;; This variable is empty in a static configuration and causes
3124 ;; an erroneous GCC command line.
3125 (("-L\\$\\(interfacebuilddir\\)") "")
3126 ;; Remove obsolete reference to libdevmapper.a.
3127 (("-ldevmapper") ""))
3128 #t))))))
3129 (synopsis "Logical volume management for Linux (statically linked)")))
3130
3131 (define-public wireless-tools
3132 (package
3133 (name "wireless-tools")
3134 (version "30.pre9")
3135 (source (origin
3136 (method url-fetch)
3137 (uri (string-append "http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/wireless_tools."
3138 version ".tar.gz"))
3139 (sha256
3140 (base32
3141 "0qscyd44jmhs4k32ggp107hlym1pcyjzihiai48xs7xzib4wbndb"))
3142 (snippet
3143 '(begin
3144 ;; Remove the older header files that are not free software.
3145 (for-each (lambda (n)
3146 (delete-file (format #f "wireless.~a.h" n)))
3147 '(10 11 12 13 14 15 16 17 18 19 20))
3148 #t))))
3149 (build-system gnu-build-system)
3150 (arguments
3151 `(#:make-flags
3152 (list (string-append "PREFIX=" %output)
3153 (string-append "INSTALL_MAN=" %output "/share/man")
3154 (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib")
3155 "BUILD_STATIC=")
3156 #:phases
3157 (modify-phases %standard-phases
3158 (replace 'configure
3159 (lambda* (#:key target #:allow-other-keys)
3160 (when ,(%current-target-system)
3161 ;; Cross-compilation: use the cross tools.
3162 (substitute* (find-files "." "Makefile")
3163 (("CC = .*$")
3164 (string-append "CC = " target "-gcc\n"))
3165 (("AR = .*$")
3166 (string-append "AR = " target "-ar\n"))
3167 (("RANLIB = .*$")
3168 (string-append "RANLIB = " target "-ranlib\n"))))
3169 #t)))
3170 #:tests? #f))
3171 (synopsis "Tools for manipulating Linux Wireless Extensions")
3172 (description "Wireless Tools are used to manipulate the now-deprecated
3173 Linux Wireless Extensions; consider using @code{iw} instead. The Wireless
3174 Extension was an interface allowing you to set Wireless LAN specific
3175 parameters and get the specific stats. It is deprecated in favor the nl80211
3176 interface.")
3177 (home-page "https://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html")
3178 ;; wireless.21.h and wireless.22.h are distributed under lgpl2.1+, the
3179 ;; other files are distributed under gpl2.
3180 (license (list license:gpl2 license:lgpl2.1+))))
3181
3182 (define-public crda
3183 (package
3184 (name "crda")
3185 (version "3.18")
3186 (source (origin
3187 (method url-fetch)
3188 (uri (string-append "mirror://kernel.org/software/network/crda/"
3189 "crda-" version ".tar.xz"))
3190 (sha256
3191 (base32
3192 "1gydiqgb08d9gbx4l6gv98zg3pljc984m50hmn3ysxcbkxkvkz23"))
3193 (patches (search-patches "crda-optional-gcrypt.patch"))))
3194 (build-system gnu-build-system)
3195 (arguments
3196 '(#:phases (modify-phases %standard-phases
3197 (delete 'configure)
3198 (add-after 'unpack 'gzip-determinism
3199 (lambda _
3200 (substitute* "Makefile"
3201 (("gzip") "gzip --no-name"))
3202 #t))
3203 (add-before
3204 'build 'no-werror-no-ldconfig
3205 (lambda _
3206 (substitute* "Makefile"
3207 (("-Werror") "")
3208 (("ldconfig") "true"))
3209 #t))
3210 (add-before
3211 'build 'set-regulator-db-file-name
3212 (lambda* (#:key inputs #:allow-other-keys)
3213 ;; Tell CRDA where to find our database.
3214 (let ((regdb (assoc-ref inputs "wireless-regdb")))
3215 (substitute* "crda.c"
3216 (("\"/lib/crda/regulatory.bin\"")
3217 (string-append "\"" regdb
3218 "/lib/crda/regulatory.bin\"")))
3219 #t))))
3220 #:test-target "verify"
3221 #:make-flags (let ((out (assoc-ref %outputs "out"))
3222 (regdb (assoc-ref %build-inputs "wireless-regdb")))
3223 (list "CC=gcc" "V=1"
3224
3225 ;; Disable signature-checking on 'regulatory.bin'.
3226 ;; The reason is that this simplifies maintenance
3227 ;; on our side (no need to manage a distro key
3228 ;; pair), and we can guarantee integrity of
3229 ;; 'regulatory.bin' by other means anyway, such as
3230 ;; 'guix gc --verify'. See
3231 ;; <https://wireless.wiki.kernel.org/en/developers/regulatory/wireless-regdb>
3232 ;; for a discssion.
3233 "USE_OPENSSL=0"
3234
3235 (string-append "PREFIX=" out)
3236 (string-append "SBINDIR=" out "/sbin/")
3237 (string-append "UDEV_RULE_DIR="
3238 out "/lib/udev/rules.d")
3239 (string-append "LDFLAGS=-Wl,-rpath="
3240 out "/lib -L.")
3241 (string-append "REG_BIN=" regdb
3242 "/lib/crda/regulatory.bin")))))
3243 (native-inputs `(("pkg-config" ,pkg-config)
3244 ("wireless-regdb" ,wireless-regdb)))
3245 (inputs `(("libnl" ,libnl)))
3246 (home-page
3247 "https://wireless.wiki.kernel.org/en/developers/Regulatory/CRDA")
3248 (synopsis "Central regulatory domain agent (CRDA) for WiFi")
3249 (description
3250 "The Central Regulatory Domain Agent (CRDA) acts as the udev helper for
3251 communication between the kernel Linux and user space for regulatory
3252 compliance.")
3253 (license license:copyleft-next)))
3254
3255 (define-public wireless-regdb
3256 (package
3257 (name "wireless-regdb")
3258 (version "2019.06.03")
3259 (source (origin
3260 (method url-fetch)
3261 (uri (string-append
3262 "mirror://kernel.org/software/network/wireless-regdb/"
3263 "wireless-regdb-" version ".tar.xz"))
3264 (sha256
3265 (base32
3266 "1gslvh0aqdkv48jyr2ddq153mw28i7qz2ybrjj9qvkk3dgc7x4fd"))
3267
3268 ;; We're building 'regulatory.bin' by ourselves.
3269 (snippet '(begin
3270 (delete-file "regulatory.bin")
3271 #t))))
3272 (build-system gnu-build-system)
3273 (arguments
3274 '(#:phases
3275 (modify-phases %standard-phases
3276 (add-after 'unpack 'gzip-determinism
3277 (lambda _
3278 (substitute* "Makefile"
3279 (("gzip") "gzip --no-name"))
3280 #t))
3281 (add-after 'unpack 'omit-signature
3282 (lambda _
3283 (substitute* "Makefile"
3284 ;; Signing requires a REGDB_PUBCERT and REGDB_PRIVKEY which we
3285 ;; don't provide (see below). Disable it.
3286 ((" regulatory\\.db\\.p7s") "")
3287 ;; regulatory.db is built as a dependency of regulatory.db.p7s,
3288 ;; but ‘make install’ depends only on the latter while installing
3289 ;; both (and failing). Depend on it explicitly.
3290 (("^install: " all) (string-append all "regulatory.db ")))
3291 #t))
3292 (delete 'configure)) ; no configure script
3293
3294 ;; The 'all' target of the makefile depends on $(REGDB_CHANGED), which
3295 ;; is computed and can be equal to 'maintainer-clean'; when that
3296 ;; happens, we can end up deleting the 'regulatory.bin' file that we
3297 ;; just built. Thus, build things sequentially.
3298 #:parallel-build? #f
3299
3300 #:tests? #f ; no tests
3301 #:make-flags
3302 (let ((out (assoc-ref %outputs "out")))
3303 (list (string-append "PREFIX=" out)
3304 (string-append "FIRMWARE_PATH=$(PREFIX)/lib/firmware")
3305
3306 ;; Leave this empty so that db2bin.py doesn't try to sign
3307 ;; ‘regulatory.bin’. This allows us to avoid managing a key
3308 ;; pair for the whole distribution.
3309 (string-append "REGDB_PRIVKEY=")
3310 ;; Don't generate a public key for the same reason. These are
3311 ;; used as Makefile targets and can't be the empty string.
3312 (string-append "REGDB_PUBCERT=/dev/null")
3313 (string-append "REGDB_PUBKEY=/dev/null")))))
3314 (native-inputs
3315 `(("python" ,python-wrapper)))
3316 (home-page
3317 "https://wireless.wiki.kernel.org/en/developers/regulatory/wireless-regdb")
3318 (synopsis "Wireless regulatory database")
3319 (description
3320 "This package contains the wireless regulatory database Central
3321 Regulatory Database Agent (CRDA) daemon. The database contains information on
3322 country-specific regulations for the wireless spectrum.")
3323 (license license:isc)))
3324
3325 (define-public lm-sensors
3326 (package
3327 (name "lm-sensors")
3328 (version "3.6.0")
3329 (source
3330 (origin
3331 (method git-fetch)
3332 (uri (git-reference
3333 (url "https://github.com/groeck/lm-sensors.git")
3334 (commit (string-append "V" (string-join
3335 (string-split version #\.) "-")))))
3336 (file-name (git-file-name name version))
3337 (sha256
3338 (base32 "1ipf6wjx037sqyhy0r5jh4983h216anq9l68ckn2x5c3qc4wfmzn"))
3339 (patches (search-patches "lm-sensors-hwmon-attrs.patch"))))
3340 (build-system gnu-build-system)
3341 (inputs `(("rrdtool" ,rrdtool)
3342 ("perl" ,perl)
3343 ("kmod" ,kmod)
3344 ("gnuplot" ,gnuplot)))
3345 (native-inputs `(("pkg-config" ,pkg-config)
3346 ("flex" ,flex)
3347 ("bison" ,bison)
3348 ("which" ,which)))
3349 (outputs '("lib" ; avoid perl in closure
3350 "out"))
3351 (arguments
3352 `(#:tests? #f ; no 'check' target
3353 #:make-flags (list (string-append "PREFIX=" %output)
3354 (string-append "ETCDIR=" (assoc-ref %outputs "lib") "/etc")
3355 (string-append "INCLUDEDIR="
3356 (assoc-ref %outputs "lib") "/include")
3357 (string-append "MANDIR=" %output "/share/man")
3358 (string-append "LIBDIR=" (assoc-ref %outputs "lib") "/lib"))
3359 #:phases
3360 (modify-phases %standard-phases
3361 (delete 'configure)
3362 (add-before 'build 'patch-exec-paths
3363 (lambda* (#:key inputs outputs #:allow-other-keys)
3364 (substitute* "prog/detect/sensors-detect"
3365 (("`uname")
3366 (string-append "`" (assoc-ref inputs "coreutils")
3367 "/bin/uname"))
3368 (("(`|\")modprobe" all open-quote)
3369 (string-append open-quote
3370 (assoc-ref inputs "kmod")
3371 "/bin/modprobe")))
3372 (substitute* '("prog/pwm/pwmconfig"
3373 "prog/pwm/fancontrol")
3374 (("gnuplot")
3375 (string-append (assoc-ref inputs "gnuplot")
3376 "/bin/gnuplot"))
3377 (("cat ")
3378 (string-append (assoc-ref inputs "coreutils")
3379 "/bin/cat "))
3380 (("grep ")
3381 (string-append (assoc-ref inputs "grep")
3382 "/bin/grep "))
3383 (("sed -e")
3384 (string-append (assoc-ref inputs "sed")
3385 "/bin/sed -e"))
3386 (("cut -d")
3387 (string-append (assoc-ref inputs "coreutils")
3388 "/bin/cut -d"))
3389 (("sleep ")
3390 (string-append (assoc-ref inputs "coreutils")
3391 "/bin/sleep "))
3392 (("readlink -f")
3393 (string-append (assoc-ref inputs "coreutils")
3394 "/bin/readlink -f")))
3395 #t)))))
3396 (home-page "https://hwmon.wiki.kernel.org/lm_sensors")
3397 (synopsis "Utilities to read temperature/voltage/fan sensors")
3398 (description
3399 "Lm-sensors is a hardware health monitoring package for Linux. It allows
3400 you to access information from temperature, voltage, and fan speed sensors.
3401 It works with most newer systems.")
3402 (license license:gpl2+)))
3403
3404 (define-public iucode-tool
3405 (package
3406 (name "iucode-tool")
3407 (version "2.3.1")
3408 (source (origin
3409 (method url-fetch)
3410 (uri (string-append "https://gitlab.com/iucode-tool/releases"
3411 "/raw/latest/iucode-tool_" version ".tar.xz"))
3412 (sha256
3413 (base32
3414 "159gvf6ljgg3g4vlhyy6pyr0wz11rcyhp985vc4az58d9px8xf0j"))))
3415 (build-system gnu-build-system)
3416 (home-page "https://gitlab.com/iucode-tool/iucode-tool/wikis/home")
3417 (synopsis "Manipulate Intel microcode bundles")
3418 (description
3419 "@command{iucode_tool} is a utility to work with microcode packages for
3420 Intel processors. It can convert between formats, extract specific versions,
3421 create a firmware image suitable for the Linux kernel, and more.")
3422 ;; cpuid.h is available for i686, x86_64, and ia64.
3423 (supported-systems '("i686-linux" "x86_64-linux"))
3424 (license license:gpl2+)))
3425
3426 (define-public i2c-tools
3427 (package
3428 (name "i2c-tools")
3429 (version "3.1.1")
3430 (source (origin
3431 (method url-fetch)
3432 (uri (string-append
3433 "http://jdelvare.nerim.net/mirror/i2c-tools/i2c-tools-"
3434 version ".tar.bz2"))
3435 (sha256
3436 (base32
3437 "000pvg995qy1b15ks59gd0klri55hb33kqpg5czy84hw1pbdgm0l"))))
3438 (build-system gnu-build-system)
3439 (arguments
3440 `(#:tests? #f ; no 'check' target
3441 #:make-flags (list (string-append "prefix=" %output)
3442 "CC=gcc")
3443 ;; no configure script
3444 #:phases (modify-phases %standard-phases (delete 'configure))))
3445 (inputs
3446 `(("perl" ,perl)))
3447 (home-page "http://jdelvare.nerim.net/devel.html#i2ctools")
3448 (synopsis "I2C tools for Linux")
3449 (description
3450 "The i2c-tools package contains a heterogeneous set of I2C tools for
3451 Linux: a bus probing tool, a chip dumper, register-level SMBus access helpers,
3452 EEPROM decoding scripts, EEPROM programming tools, and a python module for
3453 SMBus access.")
3454 (license license:gpl2+)))
3455
3456 (define-public xsensors
3457 (package
3458 (name "xsensors")
3459 (version "0.70")
3460 (source (origin
3461 (method url-fetch)
3462 (uri (string-append
3463 "http://www.linuxhardware.org/xsensors/xsensors-"
3464 version ".tar.gz"))
3465 (sha256
3466 (base32
3467 "1siplsfgvcxamyqf44h71jx6jdfmvhfm7mh0y1q8ps4zs6pj2zwh"))))
3468 (build-system gnu-build-system)
3469 (inputs `(("lm-sensors" ,lm-sensors "lib")
3470 ("gtk" ,gtk+-2)))
3471 (native-inputs `(("pkg-config" ,pkg-config)))
3472 (arguments
3473 `(#:phases
3474 (modify-phases %standard-phases
3475 (add-before 'configure 'enable-deprecated
3476 (lambda _
3477 (substitute* "src/Makefile.in"
3478 (("-DGDK_DISABLE_DEPRECATED") "")
3479 (("-DGTK_DISABLE_DEPRECATED") ""))
3480 #t))
3481 (add-before 'configure 'remove-Werror
3482 (lambda _
3483 (substitute* '("configure" "src/Makefile.in")
3484 (("-Werror") ""))
3485 #t)))))
3486 (home-page "http://www.linuxhardware.org/xsensors/")
3487 (synopsis "Hardware health information viewer")
3488 (description
3489 "Xsensors reads data from the libsensors library regarding hardware
3490 health such as temperature, voltage and fan speed and displays the information
3491 in a digital read-out.")
3492 (license license:gpl2+)))
3493
3494 (define-public perf
3495 (package
3496 (name "perf")
3497 (version (package-version linux-libre))
3498 (source (package-source linux-libre))
3499 (build-system gnu-build-system)
3500 (arguments
3501 '(#:phases
3502 (modify-phases %standard-phases
3503 (replace 'configure
3504 (lambda* (#:key inputs #:allow-other-keys)
3505 (setenv "SHELL_PATH" (which "bash"))
3506 (chdir "tools/perf")
3507 #t)))
3508 #:make-flags (list (string-append "prefix="
3509 (assoc-ref %outputs "out"))
3510 ;; Make sure the kernel headers are treated as system
3511 ;; headers to suppress warnings from those.
3512 (string-append "C_INCLUDE_PATH="
3513 (assoc-ref %build-inputs "kernel-headers")
3514 "/include")
3515 "WERROR=0"
3516
3517 ;; By default, 'config/Makefile' uses lib64 on
3518 ;; x86_64. Work around that.
3519 "lib=lib")
3520 #:tests? #f)) ;no tests
3521 (native-inputs
3522 `(("pkg-config" ,pkg-config)
3523 ("bison" ,bison)
3524 ("flex" ,flex)
3525
3526 ;; There are build scripts written in these languages.
3527 ("perl" ,perl)
3528 ("python" ,python-2)))
3529 (inputs
3530 `(("slang" ,slang) ;for the interactive TUI
3531 ;; ("newt" ,newt)
3532 ("python" ,python-2) ;'perf' links against libpython
3533 ("elfutils" ,elfutils)
3534 ("libiberty" ,libiberty) ;used alongside BDF for symbol demangling
3535 ("libunwind" ,libunwind) ;better stack walking
3536 ("numactl" ,numactl) ;for 'perf bench numa mem'
3537
3538 ;; Documentation.
3539 ("libxml2" ,libxml2) ;for $XML_CATALOG_FILES
3540 ("docbook-xsl" ,docbook-xsl)
3541 ("xmlto" ,xmlto)
3542 ("asciidoc" ,asciidoc)))
3543 (home-page "https://perf.wiki.kernel.org/")
3544 (synopsis "Linux profiling with performance counters")
3545 (description
3546 "perf is a tool suite for profiling using hardware performance counters,
3547 with support in the Linux kernel. perf can instrument CPU performance
3548 counters, tracepoints, kprobes, and uprobes (dynamic tracing). It is capable
3549 of lightweight profiling. This package contains the user-land tools and in
3550 particular the @code{perf} command.")
3551 (license (package-license linux-libre))))
3552
3553 (define-public pflask
3554 (package
3555 (name "pflask")
3556 (version "0.2")
3557 (source (origin
3558 (method url-fetch)
3559 (uri (string-append "https://github.com/ghedo/pflask/archive/v"
3560 version ".tar.gz"))
3561 (file-name (string-append name "-" version ".tar.gz"))
3562 (sha256
3563 (base32
3564 "1g8fjj67dfkc2s0852l9vqi1pm61gp4rxbpzbzg780f5s5hd1fys"))))
3565 (build-system cmake-build-system)
3566 (arguments
3567 '(#:tests? #f)) ; no tests
3568 (home-page "https://ghedo.github.io/pflask/")
3569 (synopsis "Simple tool for creating Linux namespace containers")
3570 (description "pflask is a simple tool for creating Linux namespace
3571 containers. It can be used for running a command or even booting an OS inside
3572 an isolated container, created with the help of Linux namespaces. It is
3573 similar in functionality to chroot, although pflask provides better isolation
3574 thanks to the use of namespaces.")
3575 (license license:bsd-2)))
3576
3577 (define-public singularity
3578 (package
3579 (name "singularity")
3580 (version "2.6.1")
3581 (source (origin
3582 (method url-fetch)
3583 (uri (string-append "https://github.com/singularityware/singularity/"
3584 "releases/download/" version
3585 "/singularity-" version ".tar.gz"))
3586 (sha256
3587 (base32
3588 "1whx0hqqi1326scgdxxxa1d94vn95mnq0drid6s8wdp84ni4d3gk"))
3589 (modules '((guix build utils)))
3590 (snippet
3591 '(begin
3592 ;; Do not create directories in /var.
3593 (substitute* "Makefile.in"
3594 (("\\$\\(MAKE\\) .*install-data-hook") ""))
3595
3596 ;; The original source overrides PATH so that it points to
3597 ;; /bin, /usr/local/bin, etc., which obviously doesn't work
3598 ;; on Guix System. Leave PATH unchanged so we refer to the
3599 ;; installed Coreutils, grep, etc.
3600 (substitute* "bin/singularity.in"
3601 (("^PATH=.*" all)
3602 (string-append "#" all "\n")))
3603
3604 (substitute* (find-files "libexec/cli" "\\.exec$")
3605 (("\\$SINGULARITY_libexecdir/singularity/bin/([a-z]+)-suid"
3606 _ program)
3607 (string-append "/run/setuid-programs/singularity-"
3608 program "-helper")))
3609
3610 ;; These squashfs mount options are apparently no longer
3611 ;; supported since Linux-libre 5.4.5.
3612 (substitute* "src/lib/image/squashfs/mount.c"
3613 (("\"errors=remount-ro\"")
3614 "NULL"))
3615 #t))))
3616 (build-system gnu-build-system)
3617 (arguments
3618 `(#:configure-flags '("--localstatedir=/var")
3619 #:phases
3620 (modify-phases %standard-phases
3621 (add-after 'unpack 'patch-reference-to-squashfs-tools
3622 (lambda _
3623 (substitute* "libexec/cli/build.exec"
3624 (("if ! singularity_which mksquashfs") "if 0")
3625 (("if ! mksquashfs")
3626 (string-append "if ! " (which "mksquashfs"))))
3627 #t))
3628 (add-after 'install 'set-PATH
3629 (lambda* (#:key inputs outputs #:allow-other-keys)
3630 ;; Have the 'singularity' and 'run-singularity' self-sufficient.
3631 (let ((out (assoc-ref outputs "out"))
3632 (coreutils (assoc-ref inputs "coreutils")))
3633 (wrap-program (string-append out "/bin/singularity")
3634 `("PATH" ":" = (,(string-append coreutils "/bin"))))
3635 (substitute* (string-append out "/bin/run-singularity")
3636 (("/usr/bin/env singularity")
3637 (string-append (which "env") " "
3638 out "/bin/singularity")))
3639 #t))))))
3640 (inputs
3641 `(("libarchive" ,libarchive)
3642 ("python" ,python-wrapper)
3643 ("zlib" ,zlib)
3644 ("squashfs-tools" ,squashfs-tools)))
3645 (home-page "https://singularity.lbl.gov/")
3646 (synopsis "Container platform")
3647 (description "Singularity is a container platform supporting a number of
3648 container image formats. It can build SquashFS container images or import
3649 existing Docker images. Singularity requires kernel support for container
3650 isolation or root privileges.")
3651 (license license:bsd-3)))
3652
3653 (define-public hdparm
3654 (package
3655 (name "hdparm")
3656 (version "9.58")
3657 (source (origin
3658 (method url-fetch)
3659 (uri (string-append "mirror://sourceforge/hdparm/hdparm/"
3660 "hdparm-" version ".tar.gz"))
3661 (sha256
3662 (base32
3663 "03z1qm8zbgpxagk3994lvp24yqsshjibkwg05v9p3q1w7y48xrws"))))
3664 (build-system gnu-build-system)
3665 (arguments
3666 `(#:make-flags (let ((out (assoc-ref %outputs "out")))
3667 (list (string-append "binprefix=" out)
3668 (string-append "manprefix=" out)
3669 "CC=gcc"))
3670 #:phases
3671 (modify-phases %standard-phases
3672 (delete 'configure)) ; no configure script
3673 #:tests? #f)) ; no test suite
3674 (home-page "https://sourceforge.net/projects/hdparm/")
3675 (synopsis "View and tune ATA disk drive parameters")
3676 (description
3677 "@command{hdparm} is a command-line utility to control ATA controllers and
3678 disk drives. It can increase performance and/or reliability by careful tuning
3679 of hardware settings like power and acoustic management, DMA modes, and caching.
3680 It can also display detailed device information, or be used as a simple
3681 performance benchmarking tool.
3682
3683 @command{hdparm} provides a command line interface to various Linux kernel
3684 interfaces provided by the SATA/ATA/SAS @code{libata} subsystem, and the older
3685 IDE driver subsystem. Many external USB drive enclosures with SCSI-ATA Command
3686 Translation (@dfn{SAT}) are also supported.")
3687 (license (license:non-copyleft "file://LICENSE.TXT"))))
3688
3689 (define-public nvme-cli
3690 (package
3691 (name "nvme-cli")
3692 (version "1.10.1")
3693 (home-page "https://github.com/linux-nvme/nvme-cli")
3694 (source (origin
3695 (method git-fetch)
3696 (uri (git-reference
3697 (url home-page)
3698 (commit (string-append "v" version))))
3699 (sha256
3700 (base32 "12wp2wxmsw2v8m9bhvwvdbhdgx1md8iilhbl19sfzz2araiwi2x8"))
3701 (file-name (git-file-name name version))))
3702 (build-system gnu-build-system)
3703 (arguments
3704 `(#:make-flags (list "CC=gcc")
3705 #:phases (modify-phases %standard-phases
3706 (delete 'configure) ; No ./configure script
3707 (replace 'install
3708 (lambda _
3709 (invoke "make" "install-spec" "PREFIX="
3710 (string-append "DESTDIR=" %output)))))
3711 #:tests? #f)) ; The tests require sysfs, which is not accessible from
3712 ; the build environment
3713 (synopsis "NVM-Express user space tooling for Linux")
3714 (description "Nvme-cli is a utility to provide standards compliant tooling
3715 for NVM-Express drives. It was made specifically for Linux as it relies on the
3716 IOCTLs defined by the mainline kernel driver.")
3717 (license license:gpl2+)))
3718
3719 (define-public rfkill
3720 (package
3721 (name "rfkill")
3722 (version "0.5")
3723 (source (origin
3724 (method url-fetch)
3725 (uri (string-append "mirror://kernel.org/software/network/"
3726 name "/" name "-" version ".tar.xz"))
3727 (sha256
3728 (base32
3729 "0snqj5h0y991lszbigbyyqb8swj0hxajc1vfqg2scfay44231bp0"))))
3730 (build-system gnu-build-system)
3731 (arguments
3732 `(#:make-flags (list "CC=gcc"
3733 (string-append "PREFIX=" %output))
3734 #:phases (modify-phases %standard-phases
3735 (delete 'configure))
3736 #:tests? #f))
3737 (home-page "https://wireless.wiki.kernel.org/en/users/Documentation/rfkill")
3738 (synopsis "Tool for enabling and disabling wireless devices")
3739 (description
3740 "rfkill is a simple tool for accessing the rfkill device interface,
3741 which is used to enable and disable wireless networking devices, typically
3742 WLAN, Bluetooth and mobile broadband.")
3743 (license (license:non-copyleft "file://COPYING"
3744 "See COPYING in the distribution."))
3745 ;; rfkill is part of util-linux as of 2.31.
3746 (properties `((superseded . ,util-linux)))))
3747
3748 (define-public acpi
3749 (package
3750 (name "acpi")
3751 (version "1.7")
3752 (source (origin
3753 (method url-fetch)
3754 (uri (string-append "mirror://sourceforge/acpiclient/acpiclient/"
3755 version "/" name "-" version ".tar.gz"))
3756 (sha256
3757 (base32
3758 "01ahldvf0gc29dmbd5zi4rrnrw2i1ajnf30sx2vyaski3jv099fp"))))
3759 (build-system gnu-build-system)
3760 (home-page "http://acpiclient.sourceforge.net")
3761 (synopsis "Display information on ACPI devices")
3762 (description "@code{acpi} attempts to replicate the functionality of the
3763 \"old\" @code{apm} command on ACPI systems, including battery and thermal
3764 information. It does not support ACPI suspending, only displays information
3765 about ACPI devices.")
3766 (license license:gpl2+)))
3767
3768 (define-public acpid
3769 (package
3770 (name "acpid")
3771 (version "2.0.32")
3772 (source (origin
3773 (method url-fetch)
3774 (uri (string-append "mirror://sourceforge/acpid2/acpid-"
3775 version ".tar.xz"))
3776 (sha256
3777 (base32
3778 "0zhmxnhnhg4v1viw82yjr22kram6k5k1ixznhayk8cnw7q5x7lpj"))))
3779 (build-system gnu-build-system)
3780 (home-page "https://sourceforge.net/projects/acpid2/")
3781 (synopsis "Daemon for delivering ACPI events to user-space programs")
3782 (description
3783 "acpid is designed to notify user-space programs of Advanced
3784 Configuration and Power Interface (ACPI) events. acpid should be started
3785 during the system boot, and will run as a background process. When an ACPI
3786 event is received from the kernel, acpid will examine the list of rules
3787 specified in /etc/acpi/events and execute the rules that match the event.")
3788 (license license:gpl2+)))
3789
3790 (define-public sysfsutils
3791 (package
3792 (name "sysfsutils")
3793 (version "2.1.0")
3794 (source
3795 (origin
3796 (method url-fetch)
3797 (uri
3798 (string-append
3799 "mirror://sourceforge/linux-diag/sysfsutils/" version "/sysfsutils-"
3800 version ".tar.gz"))
3801 (sha256
3802 (base32 "12i0ip11xbfcjzxz4r10cvz7mbzgq1hfcdn97w6zz7sm3wndwrg8"))))
3803 (build-system gnu-build-system)
3804 (home-page "http://linux-diag.sourceforge.net/Sysfsutils.html")
3805 (synopsis "System utilities based on Linux sysfs")
3806 (description
3807 "These are a set of utilities built upon sysfs, a virtual file system in
3808 Linux kernel versions 2.5+ that exposes a system's device tree. The package
3809 also contains the libsysfs library.")
3810 ;; The library is under lgpl2.1+ (all files say "or any later version").
3811 ;; The rest is mostly gpl2, with a few files indicating gpl2+.
3812 (license (list license:gpl2 license:gpl2+ license:lgpl2.1+))))
3813
3814 (define-public sysfsutils-1
3815 (package
3816 (inherit sysfsutils)
3817 (version "1.3.0")
3818 (source
3819 (origin
3820 (method url-fetch)
3821 (uri
3822 (string-append
3823 "mirror://sourceforge/linux-diag/sysfsutils/sysfsutils-" version
3824 "/sysfsutils-" version ".tar.gz"))
3825 (sha256
3826 (base32 "0kdhs07fm8263pxwd5blwn2x211cg4fk63fyf9ijcdkvzmwxrqq3"))
3827 (modules '((guix build utils)))
3828 (snippet
3829 '(begin
3830 (substitute* "Makefile.in"
3831 (("includedir = /usr/include/sysfs")
3832 "includedir = @includedir@"))
3833 (substitute* "configure"
3834 (("includedir='(\\$\\{prefix\\}/include)'" all orig)
3835 (string-append "includedir='" orig "/sysfs'")))
3836 #t))))
3837 (synopsis "System utilities based on Linux sysfs (version 1.x)")))
3838
3839 (define-public cpufrequtils
3840 (package
3841 (name "cpufrequtils")
3842 (version "0.3")
3843 (source
3844 (origin
3845 (method url-fetch)
3846 (uri (string-append "mirror://kernel.org/linux/utils/kernel/cpufreq/"
3847 "cpufrequtils-" version ".tar.gz"))
3848 (sha256
3849 (base32 "0qfqv7nqmjfr3p0bwrdlxkiqwqr7vmx053cadaa548ybqbghxmvm"))
3850 (patches (search-patches "cpufrequtils-fix-aclocal.patch"))))
3851 (build-system gnu-build-system)
3852 (native-inputs
3853 `(("sysfsutils" ,sysfsutils-1)))
3854 (arguments
3855 '(#:make-flags (list (string-append "LDFLAGS=-Wl,-rpath="
3856 (assoc-ref %outputs "out") "/lib"))))
3857 (home-page "https://www.kernel.org/pub/linux/utils/kernel/cpufreq/")
3858 (synopsis "Utilities to get and set CPU frequency on Linux")
3859 (description
3860 "The cpufrequtils suite contains utilities to retrieve CPU frequency
3861 information, and set the CPU frequency if supported, using the cpufreq
3862 capabilities of the Linux kernel.")
3863 (license license:gpl2)))
3864
3865 (define-public libraw1394
3866 (package
3867 (name "libraw1394")
3868 (version "2.1.2")
3869 (source (origin
3870 (method url-fetch)
3871 (uri (string-append
3872 "mirror://kernel.org/linux/libs/ieee1394/"
3873 name "-" version ".tar.xz"))
3874 (sha256
3875 (base32
3876 "0pm5b415j1qdzyw38wdv8h7ff4yx20831z1727mpsb6jc6bwdk03"))))
3877 (build-system gnu-build-system)
3878 (home-page "https://ieee1394.wiki.kernel.org/index.php/Main_Page")
3879 (synopsis "Interface library for the Linux IEEE1394 drivers")
3880 (description
3881 "Libraw1394 is the only supported interface to the kernel side raw1394 of
3882 the Linux IEEE-1394 subsystem, which provides direct access to the connected
3883 1394 buses to user space. Through libraw1394/raw1394, applications can directly
3884 send to and receive from other nodes without requiring a kernel driver for the
3885 protocol in question.")
3886 (license license:lgpl2.1+)))
3887
3888 (define-public libavc1394
3889 (package
3890 (name "libavc1394")
3891 (version "0.5.4")
3892 (source (origin
3893 (method url-fetch)
3894 (uri (string-append "mirror://sourceforge/libavc1394/libavc1394/"
3895 name "-" version ".tar.gz"))
3896 (sha256
3897 (base32
3898 "0lsv46jdqvdx5hx92v0z2cz3yh6212pz9gk0k3513sbaa04zzcbw"))))
3899 (build-system gnu-build-system)
3900 (native-inputs
3901 `(("pkg-config" ,pkg-config)))
3902 (propagated-inputs
3903 `(("libraw1394" ,libraw1394))) ; required by libavc1394.pc
3904 (home-page "https://sourceforge.net/projects/libavc1394/")
3905 (synopsis "AV/C protocol library for IEEE 1394")
3906 (description
3907 "Libavc1394 is a programming interface to the AV/C specification from
3908 the 1394 Trade Association. AV/C stands for Audio/Video Control.")
3909 (license license:lgpl2.1+)))
3910
3911 (define-public libiec61883
3912 (package
3913 (name "libiec61883")
3914 (version "1.2.0")
3915 (source (origin
3916 (method url-fetch)
3917 (uri (string-append
3918 "mirror://kernel.org/linux/libs/ieee1394/"
3919 name "-" version ".tar.xz"))
3920 (sha256
3921 (base32
3922 "17ph458zya2l8dr2xwqnzy195qd9swrir31g78qkgb3g4xz2rq6i"))))
3923 (build-system gnu-build-system)
3924 (native-inputs
3925 `(("pkg-config" ,pkg-config)))
3926 (propagated-inputs
3927 `(("libraw1394" ,libraw1394))) ; required by libiec61883.pc
3928 (home-page "https://ieee1394.wiki.kernel.org/index.php/Main_Page")
3929 (synopsis "Isochronous streaming media library for IEEE 1394")
3930 (description
3931 "The libiec61883 library provides a higher level API for streaming DV,
3932 MPEG-2 and audio over Linux IEEE 1394.")
3933 (license license:lgpl2.1+)))
3934
3935 (define-public mdadm
3936 (package
3937 (name "mdadm")
3938 (version "4.1")
3939 (source (origin
3940 (method url-fetch)
3941 (uri (string-append
3942 "mirror://kernel.org/linux/utils/raid/mdadm/mdadm-"
3943 version ".tar.xz"))
3944 (sha256
3945 (base32
3946 "0jjgjgqijpdp7ijh8slzzjjw690kydb1jjadf0x5ilq85628hxmb"))))
3947 (build-system gnu-build-system)
3948 (inputs
3949 `(("udev" ,eudev)))
3950 (arguments
3951 `(#:make-flags (let ((out (assoc-ref %outputs "out")))
3952 (list "CC=gcc"
3953 "INSTALL=install"
3954 "CHECK_RUN_DIR=0"
3955 ;; TODO: tell it where to find 'sendmail'
3956 ;; (string-append "MAILCMD=" <???> "/sbin/sendmail")
3957 (string-append "BINDIR=" out "/sbin")
3958 (string-append "MANDIR=" out "/share/man")
3959 (string-append "UDEVDIR=" out "/lib/udev")))
3960 #:phases
3961 (modify-phases %standard-phases
3962 (add-before 'build 'patch-program-paths
3963 (lambda* (#:key inputs #:allow-other-keys)
3964 (let ((coreutils (assoc-ref inputs "coreutils")))
3965 (substitute* "udev-md-raid-arrays.rules"
3966 (("/usr/bin/(readlink|basename)" all program)
3967 (string-append coreutils "/bin/" program))))
3968 #t))
3969 (add-before 'build 'remove-W-error
3970 (lambda _
3971 ;; We cannot build with -Werror on i686 due to a
3972 ;; 'sign-compare' warning in util.c.
3973 (substitute* "Makefile"
3974 (("-Werror") ""))
3975 #t))
3976 (delete 'configure))
3977 ;;tests must be done as root
3978 #:tests? #f))
3979 (home-page "http://neil.brown.name/blog/mdadm")
3980 (synopsis "Tool for managing Linux Software RAID arrays")
3981 (description
3982 "mdadm is a tool for managing Linux Software RAID arrays. It can create,
3983 assemble, report on, and monitor arrays. It can also move spares between raid
3984 arrays when needed.")
3985 (license license:gpl2+)))
3986
3987 (define-public mdadm-static
3988 (package
3989 (inherit mdadm)
3990 (name "mdadm-static")
3991 (arguments
3992 (substitute-keyword-arguments (package-arguments mdadm)
3993 ((#:make-flags flags)
3994 `(cons "LDFLAGS = -static" ,flags))
3995 ((#:phases phases)
3996 `(modify-phases ,phases
3997 (add-after 'install 'remove-cruft
3998 (lambda* (#:key outputs #:allow-other-keys)
3999 (let* ((out (assoc-ref outputs "out"))
4000 (precious? (lambda (file)
4001 (member file '("." ".." "sbin"))))
4002 (directories (scandir out (negate precious?))))
4003 (with-directory-excursion out
4004 (for-each delete-file-recursively directories)
4005 (remove-store-references "sbin/mdadm")
4006 (delete-file "sbin/mdmon")
4007 #t))))))
4008 ((#:modules modules %gnu-build-system-modules)
4009 `((ice-9 ftw) ,@modules))
4010 ((#:strip-flags _ '())
4011 ''("--strip-all")) ;strip a few extra KiB
4012 ((#:allowed-references _ '("out"))
4013 '("out")))) ;refer only self
4014 (synopsis "Statically-linked 'mdadm' command for use in an initrd")))
4015
4016 (define-public multipath-tools
4017 (package
4018 (name "multipath-tools")
4019 (version "0.8.3")
4020 (source (origin
4021 (method url-fetch)
4022 (uri (string-append "https://git.opensvc.com/?p=multipath-tools/"
4023 ".git;a=snapshot;h=" version ";sf=tgz"))
4024 (file-name (string-append name "-" version ".tar.gz"))
4025 (sha256
4026 (base32
4027 "1c6ay97wlfv1fl0y8hcfpxhkps14hlnw9gzmj7884micsp7pa9yv"))
4028 (modules '((guix build utils)))
4029 (snippet
4030 '(begin
4031 ;; Drop bundled valgrind headers.
4032 (delete-file-recursively "third-party")
4033 (substitute* '("multipathd/main.c"
4034 "libmultipath/debug.c")
4035 (("#include \"../third-party/")
4036 "#include \""))
4037 #t))))
4038 (build-system gnu-build-system)
4039 (arguments
4040 '(#:tests? #f ; no tests
4041 #:make-flags (list "CC=gcc"
4042 (string-append "DESTDIR="
4043 (assoc-ref %outputs "out"))
4044 "SYSTEMDPATH=lib"
4045 ;; Add the libaio headers to GCCs system header
4046 ;; search path to suppress -Werror=cast-qual on
4047 ;; the included headers.
4048 (string-append "C_INCLUDE_PATH="
4049 (assoc-ref %build-inputs "libaio")
4050 "/include")
4051 (string-append "LDFLAGS=-Wl,-rpath="
4052 (assoc-ref %outputs "out")
4053 "/lib"))
4054 #:phases
4055 (modify-phases %standard-phases
4056 (add-after 'unpack 'patch-source
4057 (lambda* (#:key inputs #:allow-other-keys)
4058 (let ((lvm2 (assoc-ref inputs "lvm2"))
4059 (udev (assoc-ref inputs "udev")))
4060 (substitute* "Makefile.inc"
4061 (("\\$\\(prefix\\)/usr") "$(prefix)")
4062 ;; Do not save timestamp to avoid gzip "timestamp
4063 ;; out-of-range" warnings.
4064 (("gzip -9") "gzip -9n"))
4065 (substitute* '("kpartx/Makefile" "libmultipath/Makefile")
4066 (("/usr/include/libdevmapper.h")
4067 (string-append lvm2 "/include/libdevmapper.h"))
4068 (("/usr/include/libudev.h")
4069 (string-append udev "/include/libudev.h")))
4070 #t)))
4071 (delete 'configure)))) ; no configure script
4072 (native-inputs
4073 `(("perl" ,perl)
4074 ("pkg-config" ,pkg-config)
4075 ("valgrind" ,valgrind)))
4076 (inputs
4077 `(("json-c" ,json-c)
4078 ("libaio" ,libaio)
4079 ("liburcu" ,liburcu)
4080 ("lvm2" ,lvm2)
4081 ("readline" ,readline)
4082 ("udev" ,eudev)))
4083 (home-page "http://christophe.varoqui.free.fr/")
4084 (synopsis "Access block devices through multiple paths")
4085 (description
4086 "This package provides the following binaries to drive the
4087 Linux Device Mapper multipathing driver:
4088 @enumerate
4089 @item @command{multipath} - Device mapper target autoconfig.
4090 @item @command{multipathd} - Multipath daemon.
4091 @item @command{mpathpersist} - Manages SCSI persistent reservations on
4092 @code{dm} multipath devices.
4093 @item @command{kpartx} - Create device maps from partition tables.
4094 @end enumerate")
4095 (license (list license:gpl2+ ; main distribution
4096 license:lgpl2.0+)))) ; libmpathcmd/mpath_cmd.h
4097
4098 (define-public libaio
4099 (package
4100 (name "libaio")
4101 (version "0.3.112")
4102 (source (origin
4103 (method url-fetch)
4104 (uri (list
4105 (string-append "https://releases.pagure.org/libaio/"
4106 name "-" version ".tar.gz")))
4107 (sha256
4108 (base32
4109 "14mlqdapjqq1dhpkdgy5z83mvsaz36fcxca7a4z6hinmr7r6415b"))))
4110 (build-system gnu-build-system)
4111 (arguments
4112 '(#:make-flags
4113 (list "CC=gcc" (string-append "prefix=" %output))
4114 #:test-target "partcheck" ; need root for a full 'check'
4115 #:phases
4116 (modify-phases %standard-phases (delete 'configure)))) ; no configure script
4117 (home-page "https://pagure.io/libaio")
4118 (synopsis "Linux-native asynchronous I/O access library")
4119 (description
4120 "This library enables userspace to use Linux kernel asynchronous I/O
4121 system calls, important for the performance of databases and other advanced
4122 applications.")
4123 (license license:lgpl2.1+)))
4124
4125 (define-public blktrace
4126 ;; Take a newer commit to get the fix for CVE-2018-10689.
4127 (let ((commit "db4f6340e04716285ea56fe26d76381c3adabe58")
4128 (revision "1"))
4129 (package
4130 (name "blktrace")
4131 (version (git-version "1.2.0" revision commit))
4132 (home-page
4133 "https://git.kernel.org/pub/scm/linux/kernel/git/axboe/blktrace.git")
4134 (source (origin
4135 (method git-fetch)
4136 (uri (git-reference
4137 (url home-page)
4138 (commit commit)))
4139 (sha256
4140 (base32 "0ah7xn4qnx09k6bm39p69av7d0c8cl6863drv6a1nf914sq1kpgp"))
4141 (file-name (git-file-name name version))))
4142 (build-system gnu-build-system)
4143 (arguments
4144 '(#:make-flags
4145 (list "CC=gcc" (string-append "prefix=" %output))
4146 #:tests? #f ; no tests
4147 #:phases
4148 (modify-phases %standard-phases
4149 (delete 'configure) ; no configure script
4150 (add-after 'unpack 'fix-gnuplot-path
4151 (lambda* (#:key inputs #:allow-other-keys)
4152 (let ((gnuplot (assoc-ref inputs "gnuplot")))
4153 (substitute* "btt/bno_plot.py"
4154 (("gnuplot %s")
4155 (string-append gnuplot "/bin/gnuplot %s")))
4156 #t))))))
4157 (inputs
4158 `(("libaio" ,libaio)
4159 ("gnuplot" ,gnuplot)
4160 ("python" ,python-wrapper))) ;for 'bno_plot.py'
4161 (synopsis "Block layer IO tracing mechanism")
4162 (description "Blktrace is a block layer IO tracing mechanism which provides
4163 detailed information about request queue operations to user space. It extracts
4164 event traces from the kernel (via the relaying through the debug file system).")
4165 (license license:gpl2))))
4166
4167 (define-public sbc
4168 (package
4169 (name "sbc")
4170 (version "1.4")
4171 (source (origin
4172 (method url-fetch)
4173 (uri (string-append "mirror://kernel.org/linux/bluetooth/sbc-"
4174 version ".tar.xz"))
4175 (sha256
4176 (base32
4177 "1jal98pnrjkzxlkiqy0ykh4qmgnydz9bmsp1jn581p5kddpg92si"))))
4178 (build-system gnu-build-system)
4179 (inputs
4180 `(("libsndfile" ,libsndfile)))
4181 (native-inputs
4182 `(("pkg-config" ,pkg-config)))
4183 (home-page "https://www.kernel.org/pub/linux/bluetooth/")
4184 (synopsis "Bluetooth subband audio codec")
4185 (description
4186 "The SBC is a digital audio encoder and decoder used to transfer data to
4187 Bluetooth audio output devices like headphones or loudspeakers.")
4188 (license license:gpl2+)))
4189
4190 (define-public bluez
4191 (package
4192 (name "bluez")
4193 (replacement bluez/fixed)
4194 (version "5.53")
4195 (source (origin
4196 (method url-fetch)
4197 (uri (string-append
4198 "mirror://kernel.org/linux/bluetooth/bluez-"
4199 version ".tar.xz"))
4200 (sha256
4201 (base32
4202 "1g1qg6dz6hl3csrmz75ixr12lwv836hq3ckb259svvrg62l2vaiq"))))
4203 (build-system gnu-build-system)
4204 (arguments
4205 `(#:configure-flags
4206 (let ((out (assoc-ref %outputs "out")))
4207 (list "--sysconfdir=/etc"
4208 "--localstatedir=/var"
4209 "--enable-library"
4210 "--disable-systemd"
4211 ;; Install dbus/udev files to the correct location.
4212 (string-append "--with-dbusconfdir=" out "/etc")
4213 (string-append "--with-udevdir=" out "/lib/udev")))
4214 #:phases
4215 (modify-phases %standard-phases
4216 ;; Test unit/test-gatt fails unpredictably. Seems to be a timing
4217 ;; issue (discussion on upstream mailing list:
4218 ;; https://marc.info/?t=149578476300002&r=1&w=2)
4219 (add-before 'check 'skip-wonky-test
4220 (lambda _
4221 (substitute* "unit/test-gatt.c"
4222 (("tester_init\\(&argc, &argv\\);") "return 77;"))
4223 #t))
4224 (add-after 'install 'post-install
4225 (lambda* (#:key inputs outputs #:allow-other-keys)
4226 (let* ((out (assoc-ref outputs "out"))
4227 (servicedir (string-append out "/share/dbus-1/services"))
4228 (service "obexd/src/org.bluez.obex.service")
4229 (rule (string-append
4230 out "/lib/udev/rules.d/97-hid2hci.rules")))
4231 ;; Install the obex dbus service file.
4232 (substitute* service
4233 (("/bin/false")
4234 (string-append out "/libexec/bluetooth/obexd")))
4235 (install-file service servicedir)
4236 ;; Fix paths in the udev rule.
4237 (substitute* rule
4238 (("hid2hci --method")
4239 (string-append out "/lib/udev/hid2hci --method"))
4240 (("/sbin/udevadm")
4241 (string-append (assoc-ref inputs "eudev") "/bin/udevadm")))
4242 #t))))))
4243 (native-inputs
4244 `(("pkg-config" ,pkg-config)
4245 ("gettext" ,gettext-minimal)))
4246 (inputs
4247 `(("glib" ,glib)
4248 ("dbus" ,dbus)
4249 ("eudev" ,eudev)
4250 ("libical" ,libical)
4251 ("readline" ,readline)))
4252 (home-page "http://www.bluez.org/")
4253 (synopsis "Linux Bluetooth protocol stack")
4254 (description
4255 "BlueZ provides support for the core Bluetooth layers and protocols. It
4256 is flexible, efficient and uses a modular implementation.")
4257 (license license:gpl2+)))
4258
4259 (define bluez/fixed
4260 (package
4261 (inherit bluez)
4262 (source (origin
4263 (inherit (package-source bluez))
4264 (patches (append (origin-patches (package-source bluez))
4265 (search-patches "bluez-CVE-2020-0556.patch")))))))
4266
4267 (define-public fuse-exfat
4268 (package
4269 (name "fuse-exfat")
4270 (version "1.3.0")
4271 (source (origin
4272 (method url-fetch)
4273 (uri (string-append
4274 "https://github.com/relan/exfat/releases/download/v"
4275 version "/" name "-" version ".tar.gz"))
4276 (sha256
4277 (base32
4278 "1lz00q8g4590mrdqmf13ba1s9zrqq645ymgm5p9y99ad0qv22r87"))))
4279 (build-system gnu-build-system)
4280 (native-inputs
4281 `(("pkg-config" ,pkg-config)))
4282 (inputs
4283 `(("fuse" ,fuse)))
4284 (home-page "https://github.com/relan/exfat")
4285 (synopsis "Mount exFAT file systems")
4286 (description
4287 "This package provides a FUSE-based file system that provides read and
4288 write access to exFAT devices.")
4289 (license license:gpl2+)))
4290
4291 (define-public fuseiso
4292 (package
4293 (name "fuseiso")
4294 (version "20070708")
4295 (source (origin
4296 (method url-fetch)
4297 (uri (string-append "mirror://sourceforge/fuseiso/fuseiso/"
4298 version "/fuseiso-" version ".tar.bz2"))
4299 (sha256
4300 (base32
4301 "127xql52dcdhmh7s5m9xc6q39jdlj3zhbjar1j821kb6gl3jw94b"))))
4302 (build-system gnu-build-system)
4303 (native-inputs
4304 `(("pkg-config" ,pkg-config)))
4305 (inputs
4306 `(("fuse" ,fuse)
4307 ("glib" ,glib)
4308 ("zlib" ,zlib)))
4309 (home-page "https://sourceforge.net/projects/fuseiso/")
4310 (synopsis "Mount ISO file system images")
4311 (description
4312 "FuseISO is a FUSE module to mount ISO file system images (.iso, .nrg,
4313 .bin, .mdf and .img files). It supports plain ISO9660 Level 1 and 2, Rock
4314 Ridge, Joliet, and zisofs.")
4315 (license license:gpl2)))
4316
4317 (define-public gpm
4318 (package
4319 (name "gpm")
4320 (version "1.20.7")
4321 (source (origin
4322 (method url-fetch)
4323 (uri (string-append
4324 "http://www.nico.schottelius.org/software/gpm/archives/gpm-"
4325 version ".tar.bz2"))
4326 (patches (search-patches "gpm-glibc-2.26.patch"))
4327 (sha256
4328 (base32
4329 "13d426a8h403ckpc8zyf7s2p5rql0lqbg2bv0454x0pvgbfbf4gh"))))
4330 (build-system gnu-build-system)
4331 (arguments
4332 '(#:phases (modify-phases %standard-phases
4333 (replace 'bootstrap
4334 (lambda _
4335 ;; The tarball was not generated with 'make dist' so we
4336 ;; need to bootstrap things ourselves.
4337 (substitute* "autogen.sh"
4338 (("/bin/sh") (which "sh")))
4339 (invoke "./autogen.sh")
4340 (patch-makefile-SHELL "Makefile.include.in")
4341 #t)))
4342
4343 ;; Make sure programs find libgpm.so.
4344 #:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath="
4345 (assoc-ref %outputs "out")
4346 "/lib"))))
4347 (native-inputs
4348 `(("texinfo" ,texinfo)
4349 ("bison" ,bison)
4350 ("flex" ,flex)
4351 ("autoconf" ,autoconf)
4352 ("automake" ,automake)
4353 ("libtool" ,libtool)))
4354 (home-page "http://www.nico.schottelius.org/software/gpm/")
4355 (synopsis "Mouse support for the Linux console")
4356 (description
4357 "The GPM (general-purpose mouse) daemon is a mouse server for
4358 applications running on the Linux console. It allows users to select items
4359 and copy/paste text in the console and in xterm.")
4360 (license license:gpl2+)))
4361
4362 (define-public btrfs-progs
4363 (package
4364 (name "btrfs-progs")
4365 (version "5.6")
4366 (source (origin
4367 (method url-fetch)
4368 (uri (string-append "mirror://kernel.org/linux/kernel/"
4369 "people/kdave/btrfs-progs/"
4370 "btrfs-progs-v" version ".tar.xz"))
4371 (sha256
4372 (base32
4373 "0srg276yccfmqz0skmmga3vbqx4wiqsk1l6h86n6ryhxa9viqcm1"))))
4374 (build-system gnu-build-system)
4375 (outputs '("out"
4376 "static")) ; static versions of the binaries in "out"
4377 (arguments
4378 '(#:phases (modify-phases %standard-phases
4379 (add-after 'unpack 'patch-makefile
4380 (lambda* (#:key outputs #:allow-other-keys)
4381 (substitute* "Makefile"
4382 (("\\$\\(DESTDIR\\)\\$\\(udevruledir\\)")
4383 (string-append (assoc-ref outputs "out")
4384 "/lib/udev/rules.d")))
4385 #t))
4386 (add-after 'build 'build-static
4387 (lambda _ (invoke "make" "static")))
4388 (add-after 'install 'install-bash-completion
4389 (lambda* (#:key outputs #:allow-other-keys)
4390 (let* ((out (assoc-ref outputs "out"))
4391 (bashcomp (string-append out "/etc/bash_completion.d")))
4392 (mkdir-p bashcomp)
4393 (copy-file "btrfs-completion"
4394 (string-append bashcomp "/btrfs"))
4395 #t)))
4396 (add-after 'install 'install-static
4397 (let ((staticbin (string-append (assoc-ref %outputs "static")
4398 "/bin")))
4399 (lambda _
4400 (invoke "make"
4401 (string-append "bindir=" staticbin)
4402 "install-static")))))
4403 #:tests? #f ; XXX: require the 'btrfs' kernel module.
4404 #:test-target "test"
4405 #:parallel-tests? #f)) ; tests fail when run in parallel
4406 (inputs `(("e2fsprogs" ,e2fsprogs) ; for btrfs-convert
4407 ("libblkid" ,util-linux)
4408 ("libblkid:static" ,util-linux "static")
4409 ("libuuid" ,util-linux)
4410 ("libuuid:static" ,util-linux "static")
4411 ("lzo" ,lzo)
4412 ("zlib" ,zlib)
4413 ("zlib:static" ,zlib "static")
4414 ("zstd" ,zstd "lib")
4415 ("zstd:static" ,zstd "static")))
4416 (native-inputs `(("pkg-config" ,pkg-config)
4417 ("asciidoc" ,asciidoc)
4418 ("python" ,python)
4419 ("xmlto" ,xmlto)
4420 ;; For building documentation.
4421 ("libxml2" ,libxml2)
4422 ("docbook-xsl" ,docbook-xsl)
4423 ;; For tests.
4424 ("acl" ,acl)
4425 ("which" ,which)
4426 ("dmsetup" ,lvm2)
4427 ("udevadm" ,eudev)
4428 ;; The tests need 'grep' with perl regexp support.
4429 ("grep" ,grep)))
4430 (home-page "https://btrfs.wiki.kernel.org/index.php/Main_Page")
4431 (synopsis "Create and manage btrfs copy-on-write file systems")
4432 (description "Btrfs is a @dfn{copy-on-write} (CoW) file system for Linux
4433 aimed at implementing advanced features while focusing on fault tolerance,
4434 repair and easy administration.")
4435 ;; GPL2+: crc32.c, radix-tree.c, raid6.c, rbtree.c.
4436 ;; GPL2: Everything else.
4437 (license (list license:gpl2 license:gpl2+))))
4438
4439 (define-public btrfs-progs/static
4440 (package
4441 (name "btrfs-progs-static")
4442 (version (package-version btrfs-progs))
4443 (source #f)
4444 (build-system trivial-build-system)
4445 (inputs
4446 `(("btrfs-progs:static" ,btrfs-progs "static")))
4447 (arguments
4448 `(#:modules ((guix build utils))
4449 #:builder
4450 (begin
4451 (use-modules (guix build utils)
4452 (ice-9 ftw)
4453 (srfi srfi-26))
4454
4455 (let* ((btrfs (assoc-ref %build-inputs "btrfs-progs:static"))
4456 (out (assoc-ref %outputs "out"))
4457 (source (string-append btrfs "/bin/btrfs.static"))
4458 (target (string-append out "/bin/btrfs")))
4459 (mkdir-p (dirname target))
4460 (copy-file source target)
4461 (remove-store-references target)
4462 (chmod target #o555)
4463 #t))))
4464 (home-page (package-home-page btrfs-progs))
4465 (synopsis "Statically-linked btrfs command from btrfs-progs")
4466 (description "This package provides the statically-linked @command{btrfs}
4467 from the btrfs-progs package. It is meant to be used in initrds.")
4468 (license (package-license btrfs-progs))))
4469
4470 (define-public cramfs-tools
4471 (package
4472 (name "cramfs-tools")
4473 (home-page "https://github.com/npitre/cramfs-tools")
4474 (version "2.1")
4475 (source (origin
4476 (method git-fetch)
4477 (uri (git-reference
4478 (url home-page)
4479 (commit (string-append "v" version))))
4480 (sha256
4481 (base32 "183rfqqyzx52q0vxicdgf0p984idh3rqkvzfb93gjvyzfhc15c0p"))
4482 (file-name (git-file-name name version))))
4483 (build-system gnu-build-system)
4484 (arguments
4485 '(#:tests? #f ; No tests.
4486 #:phases
4487 (modify-phases %standard-phases
4488 (delete 'configure)
4489 (replace 'install
4490 (lambda* (#:key outputs #:allow-other-keys)
4491 (let ((out (assoc-ref outputs "out")))
4492 (install-file "mkcramfs" (string-append out "/sbin"))
4493 (install-file "cramfsck" (string-append out "/sbin")))
4494 #t)))))
4495 (inputs
4496 `(("zlib" ,zlib)))
4497 (synopsis "Tools to manage Cramfs file systems")
4498 (description "Cramfs is a Linux file system designed to be simple, small,
4499 and to compress things well. It is used on a number of embedded systems and
4500 small devices. This version has additional features such as uncompressed
4501 blocks and random block placement.")
4502 (license license:gpl2+)))
4503
4504 (define-public compsize
4505 (package
4506 (name "compsize")
4507 (version "1.3")
4508 (home-page "https://github.com/kilobyte/compsize")
4509 (source (origin
4510 (method git-fetch)
4511 (uri (git-reference
4512 (url home-page)
4513 (commit (string-append "v" version))))
4514 (sha256
4515 (base32 "1c69whla844nwis30jxbj00zkpiw3ccndhkmzjii8av5358mjn43"))
4516 (file-name (git-file-name name version))))
4517 (build-system gnu-build-system)
4518 (inputs
4519 `(("btrfs-progs" ,btrfs-progs)))
4520 (arguments
4521 `(#:tests? #f ; No tests.
4522 #:make-flags (list "CC=gcc")
4523 #:phases
4524 (modify-phases %standard-phases
4525 (delete 'configure)
4526 (replace 'install
4527 (lambda* (#:key outputs #:allow-other-keys)
4528 (let ((out (assoc-ref outputs "out")))
4529 (install-file "compsize" (string-append out "/bin"))
4530 (install-file "compsize.8" (string-append out "/share/man/man8"))))))))
4531 (synopsis "Find compression type/ratio on Btrfs files")
4532 (description "@command{compsize} takes a list of files (given as
4533 arguments) on a Btrfs file system and measures used compression types and
4534 effective compression ratio, producing a report.
4535
4536 A directory has no extents but has a (recursive) list of files. A non-regular
4537 file is silently ignored.
4538
4539 As it makes no sense to talk about compression ratio of a partial extent,
4540 every referenced extent is counted whole, exactly once -- no matter if you use
4541 only a few bytes of a 1GB extent or reflink it a thousand times. Thus, the
4542 uncompressed size will not match the number given by @command{tar} or
4543 @command{du}. On the other hand, the space used should be accurate (although
4544 obviously it can be shared with files outside our set).")
4545 (license license:gpl2+)))
4546
4547 (define-public f2fs-tools-1.7
4548 (package
4549 (name "f2fs-tools")
4550 (version "1.7.0")
4551 (source (origin
4552 (method url-fetch)
4553 (uri (string-append
4554 "https://git.kernel.org/cgit/linux/kernel/git/jaegeuk"
4555 "/f2fs-tools.git/snapshot/f2fs-tools-" version ".tar.gz"))
4556 (sha256
4557 (base32
4558 "1m6bn1ibq0p53m0n97il91xqgjgn2pzlz74lb5bfzassx7159m1k"))))
4559
4560 (build-system gnu-build-system)
4561 (arguments
4562 `(#:phases
4563 (modify-phases %standard-phases
4564 (add-after 'install 'install-headers
4565 (lambda* (#:key outputs #:allow-other-keys)
4566 (let* ((out (assoc-ref outputs "out"))
4567 (out-include (string-append out "/include")))
4568 (install-file "include/f2fs_fs.h" out-include)
4569 (install-file "mkfs/f2fs_format_utils.h" out-include)
4570 #t))))))
4571 (native-inputs
4572 `(("autoconf" ,autoconf)
4573 ("automake" ,automake)
4574 ("libtool" ,libtool)
4575 ("pkg-config" ,pkg-config)))
4576 (inputs
4577 `(("libuuid" ,util-linux)
4578 ("libselinux" ,libselinux)))
4579 (home-page "https://f2fs.wiki.kernel.org/")
4580 (synopsis "Userland tools for f2fs")
4581 (description
4582 "F2FS, the Flash-Friendly File System, is a modern file system
4583 designed to be fast and durable on flash devices such as solid-state
4584 disks and SD cards. This package provides the userland utilities.")
4585 ;; The formatting utility, libf2fs and include/f2fs_fs.h is dual
4586 ;; GPL2/LGPL2.1, everything else is GPL2 only. See 'COPYING'.
4587 (license (list license:gpl2 license:lgpl2.1))))
4588
4589 (define-public f2fs-tools
4590 (package
4591 (inherit f2fs-tools-1.7)
4592 (name "f2fs-tools")
4593 (version "1.13.0")
4594 (source (origin
4595 (method url-fetch)
4596 (uri (string-append
4597 "https://git.kernel.org/cgit/linux/kernel/git/jaegeuk"
4598 "/f2fs-tools.git/snapshot/f2fs-tools-" version ".tar.gz"))
4599 (sha256
4600 (base32
4601 "0z9c0y3qq75iyqknl5k0v7v46l8c3pcifpqb0yqalrs24blkm7dk"))))
4602 (inputs
4603 `(("libuuid" ,util-linux)))))
4604
4605 (define-public f2fs-tools/static
4606 (static-package
4607 (package
4608 (inherit f2fs-tools)
4609 (name "f2fs-tools-static")
4610 (arguments
4611 `(#:configure-flags
4612 (let ((libuuid-static (assoc-ref %build-inputs "libuuid:static"))
4613 (libuuid (assoc-ref %build-inputs "libuuid")))
4614 (list
4615 (string-append "libuuid_CFLAGS=-I" libuuid "/include")
4616 (string-append "libuuid_LIBS=-L" libuuid-static "/lib -luuid")
4617 (string-append "libblkid_CFLAGS=-I" libuuid "/include")
4618 (string-append "libblkid_LIBS=-L" libuuid-static "/lib -lblkid")))
4619 #:disallowed-references (,util-linux)
4620 #:phases
4621 (modify-phases %standard-phases ; TODO: f2fs phases.
4622 (add-after 'unpack 'make-static
4623 (lambda _
4624 (define (append-to-file name body)
4625 (let ((file (open-file name "a")))
4626 (display body file)
4627 (close-port file)))
4628 (append-to-file "mkfs/Makefile.am" "\nmkfs_f2fs_LDFLAGS = -all-static\n")
4629 (append-to-file "fsck/Makefile.am" "\nfsck_f2fs_LDFLAGS = -all-static\n")
4630 (append-to-file "tools/Makefile.am" "\nf2fscrypt_LDFLAGS = -all-static -luuid\n")
4631 #t))
4632 (add-after 'install 'remove-store-references
4633 (lambda* (#:key outputs #:allow-other-keys)
4634 ;; Work around bug in our util-linux.
4635 ;; <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=41019>.
4636 (remove-store-references (string-append (assoc-ref outputs "out")
4637 "/sbin/mkfs.f2fs"))
4638 #t)))))
4639 (inputs
4640 `(("libuuid:static" ,util-linux "static")
4641 ("libuuid" ,util-linux)))))) ; for include files
4642
4643 (define-public f2fs-fsck/static
4644 (package
4645 (name "f2fs-fsck-static")
4646 (version (package-version f2fs-tools/static))
4647 (source #f)
4648 (build-system trivial-build-system)
4649 (arguments
4650 `(#:modules ((guix build utils))
4651 #:builder
4652 (begin
4653 (use-modules (guix build utils)
4654 (ice-9 ftw)
4655 (srfi srfi-26))
4656 (let* ((f2fs-tools (assoc-ref %build-inputs "f2fs-tools-static"))
4657 (fsck "fsck.f2fs")
4658 (out (assoc-ref %outputs "out"))
4659 (sbin (string-append out "/sbin")))
4660 (mkdir-p sbin)
4661 (with-directory-excursion sbin
4662 (install-file (string-append f2fs-tools "/sbin/" fsck)
4663 ".")
4664 (remove-store-references fsck)
4665 (chmod fsck #o555))
4666 #t))))
4667 (inputs
4668 `(("f2fs-tools-static" ,f2fs-tools/static)))
4669 (home-page (package-home-page f2fs-tools/static))
4670 (synopsis "Statically-linked fsck.f2fs command from f2fs-tools")
4671 (description "This package provides statically-linked fsck.f2fs command taken
4672 from the f2fs-tools package. It is meant to be used in initrds.")
4673 (license (package-license f2fs-tools/static))))
4674
4675 (define-public freefall
4676 (package
4677 (name "freefall")
4678 (version (package-version linux-libre))
4679 (source (package-source linux-libre))
4680 (build-system gnu-build-system)
4681 (arguments
4682 '(#:phases (modify-phases %standard-phases
4683 (add-after 'unpack 'enter-subdirectory
4684 (lambda _
4685 (chdir "tools/laptop/freefall")
4686 #t))
4687 (delete 'configure)
4688 (add-before 'build 'increase-timeout
4689 (lambda _
4690 ;; The default of 2 seconds is too low: it assumes an
4691 ;; open lid and AC power without actually checking.
4692 (substitute* "freefall.c"
4693 (("alarm\\(2\\)") "alarm(5)"))
4694 #t)))
4695 #:make-flags (list (string-append "PREFIX="
4696 (assoc-ref %outputs "out"))
4697 "CC=gcc")
4698 #:tests? #f)) ;no tests
4699 (home-page (package-home-page linux-libre))
4700 (synopsis "Free-fall protection for spinning laptop hard drives")
4701 (description
4702 "Prevents shock damage to the internal spinning hard drive(s) of some
4703 HP and Dell laptops. When sudden movement is detected, all input/output
4704 operations on the drive are suspended and its heads are parked on the ramp,
4705 where they are less likely to cause damage to the spinning disc. Requires a
4706 drive that supports the ATA/ATAPI-7 IDLE IMMEDIATE command with unload
4707 feature, and a laptop with an accelerometer. It has no effect on SSDs.")
4708 (license license:gpl2)))
4709
4710 (define-public thinkfan
4711 (package
4712 (name "thinkfan")
4713 (version "1.1")
4714 (source
4715 (origin
4716 (method git-fetch)
4717 (uri (git-reference
4718 (url "https://github.com/vmatare/thinkfan.git")
4719 (commit version)))
4720 (file-name (git-file-name name version))
4721 (sha256
4722 (base32 "1fxd1w3z65glw6y04myn7ihgswkx6sqnkky159mik4n96pfrsvr5"))))
4723 (build-system cmake-build-system)
4724 (arguments
4725 `(#:modules ((guix build cmake-build-system)
4726 (guix build utils)
4727 (srfi srfi-26))
4728 #:tests? #f ; no test target
4729 #:configure-flags
4730 ;; Enable reading temperatures from hard disks via S.M.A.R.T.
4731 ;; Upstream ‘defaults to OFF because libatasmart seems to be horribly
4732 ;; inefficient’.
4733 `("-DUSE_ATASMART:BOOL=ON")
4734 #:phases
4735 (modify-phases %standard-phases
4736 (add-after 'unpack 'create-init-scripts
4737 ;; CMakeLists.txt relies on build-time symptoms of OpenRC and
4738 ;; systemd to patch and install their service files. Fake their
4739 ;; presence rather than duplicating the build system below. Leave
4740 ;; things like ‘/bin/kill’ because they're not worth a dependency.
4741 ;; The sysvinit needs manual patching, but since upstream doesn't
4742 ;; even provide the option to install it: don't.
4743 (lambda* (#:key outputs #:allow-other-keys)
4744 (let* ((out (assoc-ref outputs "out"))
4745 (share (string-append out "/share/" ,name)))
4746 (substitute* "CMakeLists.txt"
4747 (("pkg_check_modules\\((OPENRC|SYSTEMD) .*" _ package)
4748 (format #f "option(~a_FOUND \"Faked\" ON)\n" package))
4749 ;; That was easy! Now we just need to fix the destinations.
4750 (("/etc" directory)
4751 (string-append out directory)))
4752 #t))))))
4753 (native-inputs
4754 `(("pkg-config" ,pkg-config)))
4755 (inputs
4756 `(("libatasmart" ,libatasmart)
4757 ("yaml-cpp" ,yaml-cpp)))
4758 (home-page "http://thinkfan.sourceforge.net/")
4759 (synopsis "Simple fan control program")
4760 (description
4761 "Thinkfan is a simple fan control program. It reads temperatures,
4762 checks them against configured limits and switches to appropriate (also
4763 pre-configured) fan level. It requires a working @code{thinkpad_acpi} or any
4764 other @code{hwmon} driver that enables temperature reading and fan control
4765 from userspace.")
4766 (license license:gpl3+)))
4767
4768 (define-public tpacpi-bat
4769 (package
4770 (name "tpacpi-bat")
4771 (version "3.1")
4772 (source
4773 (origin
4774 (method git-fetch)
4775 (uri (git-reference
4776 (url "https://github.com/teleshoes/tpacpi-bat.git")
4777 (commit (string-append "v" version))))
4778 (file-name (git-file-name name version))
4779 (sha256
4780 (base32 "0wbaz34z99gqx721alh5vmpxpj2yxg3x9m8jqyivfi1wfpwc2nd5"))))
4781 (build-system gnu-build-system)
4782 (arguments
4783 `(#:tests? #f ; no test target
4784 #:phases
4785 (modify-phases %standard-phases
4786 (add-after 'unpack 'refer-to-inputs
4787 (lambda _
4788 (substitute* "tpacpi-bat"
4789 (("cat ")
4790 (format #f "~a " (which "cat")))
4791 ;; tpacpi-bat modprobes the acpi_call kernel module if it's not
4792 ;; loaded. That's the administrator's prerogative; disable it.
4793 (("system \"(modprobe .*)\"" _ match)
4794 (format #f "die \"Please run ‘~a’ first.\\n\"" match)))
4795 #t))
4796 (delete 'configure) ; nothing to configure
4797 (delete 'build) ; nothing to build
4798 (replace 'install
4799 (lambda* (#:key outputs #:allow-other-keys)
4800 (let* ((out (assoc-ref outputs "out"))
4801 (bin (string-append out "/bin"))
4802 (doc (string-append out "/share/doc/" ,name "-" ,version)))
4803 (install-file "tpacpi-bat" bin)
4804
4805 ;; There's no man page. Install other forms of documentation.
4806 (for-each (lambda (file)
4807 (let ((target (string-append doc "/" file)))
4808 (mkdir-p (dirname target))
4809 (copy-recursively file target)))
4810 (list "battery_asl" "examples" "README.md"))
4811 #t))))))
4812 (inputs
4813 `(("perl" ,perl)))
4814 (home-page "https://github.com/teleshoes/tpacpi-bat")
4815 (synopsis "ThinkPad battery charge controller")
4816 (description
4817 "Tpacpi-bat is a command-line interface to control battery charging on
4818 @uref{https://github.com/teleshoes/tpacpi-bat/wiki/Supported-Hardware, Lenovo
4819 ThinkPad models released after 2011}, starting with the xx20 series. It can
4820 query and set the thresholds at which one or both batteries will start and stop
4821 charging, inhibit charging batteries for a set period of time, or force them to
4822 discharge when they otherwise would not.
4823
4824 This tool merely exposes ACPI calls provided by the @code{acpi_call} Linux
4825 kernel module provided by the @code{acpi-call-linux-module} package, which must
4826 be installed and loaded separately. Only the original vendor firmware is
4827 supported.")
4828 (license license:gpl3+)))
4829
4830 (define-public ntfs-3g
4831 (package
4832 (name "ntfs-3g")
4833 (version "2017.3.23")
4834 (source (origin
4835 (method url-fetch)
4836 (uri (string-append "https://tuxera.com/opensource/"
4837 "ntfs-3g_ntfsprogs-" version ".tgz"))
4838 (patches (search-patches "ntfs-3g-CVE-2019-9755.patch"))
4839 (sha256
4840 (base32
4841 "1mb228p80hv97pgk3myyvgp975r9mxq56c6bdn1n24kngcfh4niy"))
4842 (modules '((guix build utils)))
4843 (snippet '(begin
4844 ;; Install under $prefix.
4845 (substitute* '("src/Makefile.in" "ntfsprogs/Makefile.in")
4846 (("/sbin")
4847 "@sbindir@"))
4848 #t))))
4849 (build-system gnu-build-system)
4850 (inputs `(("util-linux" ,util-linux)
4851 ("fuse" ,fuse))) ;libuuid
4852 (native-inputs `(("pkg-config" ,pkg-config)))
4853 (arguments
4854 '(#:configure-flags (list "--exec-prefix=${prefix}"
4855 "--with-fuse=external" ;use our own FUSE
4856 "--enable-mount-helper"
4857 "--enable-posix-acls"
4858 "--enable-xattr-mappings")
4859 #:phases
4860 (modify-phases %standard-phases
4861 ;; If users install ntfs-3g, they probably want to make it the
4862 ;; default driver as well, so we opt for sensible defaults and link
4863 ;; mount.ntfs to mount.ntfs-3g. (libmount tries to run mount.ntfs to
4864 ;; mount NTFS file systems.)
4865 (add-after 'install 'install-link
4866 (lambda* (#:key outputs #:allow-other-keys)
4867 (let* ((out (assoc-ref outputs "out"))
4868 (sbin (string-append out "/sbin")))
4869 (symlink "mount.ntfs-3g"
4870 (string-append sbin "/mount.ntfs")))
4871 #t)))))
4872 (home-page "https://www.tuxera.com/community/open-source-ntfs-3g/")
4873 (synopsis "Read-write access to NTFS file systems")
4874 (description
4875 "NTFS-3G provides read-write access to NTFS file systems, which are
4876 commonly found on Microsoft Windows. It is implemented as a FUSE file system.
4877 The package provides additional NTFS tools.")
4878 (license license:gpl2+)))
4879
4880 (define-public rdma-core
4881 (package
4882 (name "rdma-core")
4883 (version "26.0")
4884 (source (origin
4885 (method url-fetch)
4886 (uri (string-append "https://github.com/linux-rdma/rdma-core"
4887 "/releases/download/v" version "/rdma-core-"
4888 version ".tar.gz"))
4889 (sha256
4890 (base32
4891 "14raqwx4pkzghiwkx1v0dq338f7xqqx8rnsxlpdnngvjy1p5l79j"))))
4892 (build-system cmake-build-system)
4893 (arguments
4894 `(#:tests? #f ; no tests
4895 ;; Upstream uses the "ninja" build system and encourage distros
4896 ;; to do the same for consistency. They also recommend using the
4897 ;; "Release" build type.
4898 #:build-type "Release"
4899 #:configure-flags (list "-GNinja"
4900
4901 (string-append "-DRST2MAN_EXECUTABLE="
4902 (assoc-ref %build-inputs
4903 "python-docutils")
4904 "/bin/rst2man.py")
4905
4906 ;; On some configurations, the
4907 ;; IB_USER_MAD_REGISTER_AGENT ioctl, which is
4908 ;; used by default, would return ENODEV. To
4909 ;; avoid that, use 'write' instead of ioctls,
4910 ;; as suggested in 'CMakeList.txt'.
4911 "-DIOCTL_MODE=write")
4912 #:phases
4913 (modify-phases %standard-phases
4914 (replace 'build
4915 (lambda _
4916 (invoke "ninja"
4917 "-j" (number->string (parallel-job-count)))))
4918 (replace 'install
4919 (lambda _
4920 (invoke "ninja" "install"))))))
4921 (native-inputs
4922 `(("ninja" ,ninja)
4923 ("pkg-config" ,pkg-config)
4924 ("python" ,python-wrapper)
4925 ("python-docutils" ,python-docutils))) ;for 'rst2man'
4926 (inputs
4927 `(("libnl" ,libnl)
4928 ("udev" ,eudev)))
4929 (home-page "https://github.com/linux-rdma/rdma-core")
4930 (synopsis "Utilities and libraries for working with RDMA devices")
4931 (description
4932 "This package provides userspace components for the InfiniBand
4933 subsystem of the Linux kernel. Specifically it contains userspace
4934 libraries for the following device nodes:
4935
4936 @enumerate
4937 @item @file{/dev/infiniband/uverbsX} (@code{libibverbs})
4938 @item @file{/dev/infiniband/rdma_cm} (@code{librdmacm})
4939 @item @file{/dev/infiniband/umadX} (@code{libibumad})
4940 @end enumerate
4941
4942 The following service daemons are also provided:
4943 @enumerate
4944 @item @code{srp_daemon} (for the @code{ib_srp} kernel module)
4945 @item @code{iwpmd} (for iWARP kernel providers)
4946 @item @code{ibacm} (for InfiniBand communication management assistant)
4947 @end enumerate")
4948 ;; All library code is dual licensed under GPL2 and a custom MIT
4949 ;; variant. The package also includes some components covered by
4950 ;; other licenses. Consult COPYING.md for full details.
4951 (license
4952 (list license:gpl2
4953 (license:x11-style "See COPYING.BSD_MIT in the distribution")
4954 license:bsd-2 ; Files referring to COPYING.BSD_FB
4955 license:cc0 ; most files in ccan/
4956 license:bsd-3)))) ; providers/hfi1verbs are dual GPL2/BSD-3
4957
4958 (define-public perftest
4959 (package
4960 (name "perftest")
4961 (version "4.4-0.4")
4962 (source
4963 (origin
4964 (method url-fetch)
4965 (uri (string-append "https://github.com/linux-rdma/perftest/releases/download/v"
4966 version "/perftest-" version ".g0927198.tar.gz"))
4967 (sha256
4968 (base32 "11ix4h0rrmqqyi84y55a9xnkvwsmwq0sywr46hvxzm4rqz4ma8vq"))))
4969 (build-system gnu-build-system)
4970 (arguments
4971 `(#:phases
4972 (modify-phases %standard-phases
4973 (add-after 'unpack 'patch-header-paths
4974 (lambda _
4975 (substitute* '("src/raw_ethernet_fs_rate.c"
4976 "src/raw_ethernet_resources.c"
4977 "src/raw_ethernet_resources.h"
4978 "src/raw_ethernet_send_burst_lat.c"
4979 "src/raw_ethernet_send_bw.c"
4980 "src/raw_ethernet_send_lat.c")
4981 (("/usr/include/netinet/ip.h") "netinet/ip.h"))
4982 #t)))))
4983 (inputs `(("rdma-core" ,rdma-core)))
4984 (home-page "https://github.com/linux-rdma/perftest/")
4985 (synopsis "Open Fabrics Enterprise Distribution (OFED) Performance Tests")
4986 (description "This is a collection of tests written over uverbs intended for
4987 use as a performance micro-benchmark. The tests may be used for hardware or
4988 software tuning as well as for functional testing.
4989
4990 The collection contains a set of bandwidth and latency benchmark such as:
4991 @enumerate
4992 @item Send - @code{ib_send_bw} and @code{ib_send_lat}
4993 @item RDMA Read - @code{ib_read_bw} and @code{ib_read_lat}
4994 @item RDMA Write - @code{ib_write_bw} and @code{ib_wriet_lat}
4995 @item RDMA Atomic - @code{ib_atomic_bw} and @code{ib_atomic_lat}
4996 @item Native Ethernet (when working with MOFED2) - @code{raw_ethernet_bw}, @code{raw_ethernet_lat}
4997 @end enumerate")
4998 (license license:gpl2)))
4999
5000 (define-public rng-tools
5001 (package
5002 (name "rng-tools")
5003 (home-page "https://github.com/nhorman/rng-tools")
5004 (version "6.9")
5005 (source (origin
5006 (method git-fetch)
5007 (uri (git-reference (url home-page)
5008 (commit (string-append "v" version))))
5009 (file-name (git-file-name name version))
5010 (sha256
5011 (base32
5012 "065jf26s8zkicb95zc9ilksjdq9gqrh5vcx3mhi6mypbnamn6w98"))))
5013 (build-system gnu-build-system)
5014 (arguments
5015 `(;; Avoid using OpenSSL, curl, and libxml2, reducing the closure by 166 MiB.
5016 #:configure-flags '("--without-nistbeacon"
5017 "--without-pkcs11")))
5018 (native-inputs
5019 `(("autoconf" ,autoconf)
5020 ("automake" ,automake)
5021 ("pkg-config" ,pkg-config)))
5022 (inputs
5023 `(("libsysfs" ,sysfsutils)))
5024 (synopsis "Random number generator daemon")
5025 (description
5026 "Monitor a hardware random number generator, and supply entropy
5027 from that to the system kernel's @file{/dev/random} machinery.")
5028 ;; The source package is offered under the GPL2+, but the files
5029 ;; 'rngd_rdrand.c' and 'rdrand_asm.S' are only available under the GPL2.
5030 (license (list license:gpl2 license:gpl2+))))
5031
5032 (define-public cpupower
5033 (package
5034 (name "cpupower")
5035 (version (package-version linux-libre))
5036 (source (package-source linux-libre))
5037 (build-system gnu-build-system)
5038 (arguments
5039 '(#:phases (modify-phases %standard-phases
5040 (add-after 'unpack 'enter-subdirectory
5041 (lambda _
5042 (chdir "tools/power/cpupower")
5043 #t))
5044 (delete 'configure)
5045 (add-before 'build 'fix-makefiles
5046 (lambda _
5047 (substitute* "Makefile"
5048 (("/usr/") "/")
5049 (("/bin/(install|pwd)" _ command) command))
5050 (substitute* "bench/Makefile"
5051 (("\\$\\(CC\\) -o") "$(CC) $(LDFLAGS) -o"))
5052 #t)))
5053 #:make-flags (let ((out (assoc-ref %outputs "out")))
5054 (list (string-append "DESTDIR=" out)
5055 (string-append "LDFLAGS=-Wl,-rpath=" out "/lib")
5056 "libdir=/lib"
5057 "docdir=/share/doc/cpupower"
5058 "confdir=$(docdir)/examples"
5059 ;; The Makefile recommends the following changes
5060 "DEBUG=false"
5061 "PACKAGE_BUGREPORT=bug-guix@gnu.org"))
5062 #:tests? #f)) ;no tests
5063 (native-inputs `(("gettext" ,gettext-minimal)))
5064 (inputs `(("pciutils" ,pciutils)))
5065 (home-page (package-home-page linux-libre))
5066 (synopsis "CPU frequency and voltage scaling tools for Linux")
5067 (description
5068 "cpupower is a set of user-space tools that use the cpufreq feature of the
5069 Linux kernel to retrieve and control processor features related to power saving,
5070 such as frequency and voltage scaling.")
5071 (license license:gpl2)))
5072
5073 (define-public x86-energy-perf-policy
5074 (package
5075 (name "x86-energy-perf-policy")
5076 (version (package-version linux-libre))
5077 (source (package-source linux-libre))
5078 (build-system gnu-build-system)
5079 (arguments
5080 '(#:tests? #f
5081 #:phases
5082 (modify-phases %standard-phases
5083 (add-after 'unpack 'enter-subdirectory
5084 (lambda _
5085 (chdir "tools/power/x86/x86_energy_perf_policy")
5086 #t))
5087 (delete 'configure)
5088 (add-before 'build 'fix-makefile
5089 (lambda _
5090 (substitute* "Makefile" (("/usr") ""))
5091 #t)))
5092 #:make-flags
5093 (let ((out (assoc-ref %outputs "out")))
5094 (list (string-append "DESTDIR=" out)
5095 (string-append "LDFLAGS=-Wl,-rpath=" out "/lib")))))
5096 (supported-systems '("i686-linux" "x86_64-linux"))
5097 (home-page (package-home-page linux-libre))
5098 (synopsis "Display and update Intel-CPU energy-performance policy")
5099 (description
5100 "@command{x86_energy_perf_policy} displays and updates energy-performance
5101 policy settings specific to Intel Architecture Processors. Settings are
5102 accessed via Model Specific Register (MSR) updates, no matter if the Linux
5103 cpufreq sub-system is enabled or not.")
5104 (license license:gpl2)))
5105
5106 (define-public haveged
5107 (package
5108 (name "haveged")
5109 (version "1.9.8")
5110 (source
5111 (origin
5112 (method git-fetch)
5113 (uri (git-reference
5114 (url "https://github.com/jirka-h/haveged.git")
5115 (commit (string-append "v" version))))
5116 (file-name (git-file-name name version))
5117 (sha256
5118 (base32 "1znr58fb3faq4nmrvc3c5whkc1f3chivm4vhicdwr9pdsyqqsd51"))))
5119 (build-system gnu-build-system)
5120 (home-page "https://www.issihosts.com/haveged")
5121 (synopsis "Entropy source for the Linux random number generator")
5122 (description
5123 "haveged generates an unpredictable stream of random numbers for use by
5124 Linux's @file{/dev/random} and @file{/dev/urandom} devices. The kernel's
5125 standard mechanisms for filling the entropy pool may not be sufficient for
5126 systems with high needs or limited user interaction, such as headless servers.
5127
5128 @command{haveged} runs as a privileged daemon, harvesting randomness from the
5129 indirect effects of hardware events on hidden processor state using the
5130 @acronym{HAVEGE, HArdware Volatile Entropy Gathering and Expansion} algorithm.
5131 It tunes itself to its environment and provides the same built-in test suite
5132 for the output stream as used on certified hardware security devices.
5133
5134 The quality of the randomness produced by this algorithm has not been proven.
5135 It is recommended to run it together with another entropy source like rngd, and
5136 not as a replacement for it.")
5137 (license (list (license:non-copyleft "file://nist/mconf.h")
5138 (license:non-copyleft "file://nist/packtest.c")
5139 license:public-domain ; nist/dfft.c
5140 license:gpl3+)))) ; everything else
5141
5142 (define-public ecryptfs-utils
5143 (package
5144 (name "ecryptfs-utils")
5145 (version "111")
5146 (source
5147 (origin
5148 (method url-fetch)
5149 (uri (string-append "https://launchpad.net/ecryptfs/trunk/"
5150 version "/+download/ecryptfs-utils_"
5151 version ".orig.tar.gz"))
5152 (sha256
5153 (base32
5154 "0zwq19siiwf09h7lwa7n7mgmrr8cxifp45lmwgcfr8c1gviv6b0i"))))
5155 (build-system gnu-build-system)
5156 (arguments
5157 `(#:configure-flags (list "--disable-pywrap")
5158 #:phases
5159 (modify-phases %standard-phases
5160 (add-after 'patch-source-shebangs 'patch-hardcoded-paths
5161 (lambda* (#:key inputs outputs #:allow-other-keys)
5162 (let ((out (assoc-ref outputs "out"))
5163 (utils-linux (assoc-ref inputs "utils-linux"))
5164 (cryptsetup (assoc-ref inputs "cryptsetup"))
5165 (linux-pam (assoc-ref inputs "linux-pam"))
5166 (lvm2 (assoc-ref inputs "lvm2")))
5167 (substitute* '("src/utils/ecryptfs-mount-private"
5168 "src/utils/ecryptfs-umount-private"
5169 "src/utils/ecryptfs-setup-private"
5170 "src/utils/ecryptfs-setup-swap"
5171 "src/utils/mount.ecryptfs.c"
5172 "src/utils/umount.ecryptfs.c"
5173 "src/pam_ecryptfs/pam_ecryptfs.c"
5174 "src/desktop/ecryptfs-mount-private.desktop.in"
5175 "src/desktop/ecryptfs-setup-private.desktop.in")
5176 (("/bin/mount")
5177 (string-append utils-linux "/bin/mount"))
5178 (("/bin/umount")
5179 (string-append utils-linux "/bin/umount"))
5180 (("/sbin/mount.ecryptfs_private")
5181 (string-append out "/sbin/mount.ecryptfs_private"))
5182 (("/sbin/umount.ecryptfs_private")
5183 (string-append out "/sbin/umount.ecryptfs_private"))
5184 (("/usr/bin/ecryptfs-mount-private")
5185 (string-append out "/bin/ecryptfs-mount-private"))
5186 (("/usr/bin/ecryptfs-rewrite-file")
5187 (string-append out "/bin/ecryptfs-rewrite-file"))
5188 (("/usr/bin/ecryptfs-setup-private")
5189 (string-append out "/bin/ecryptfs-setup-private"))
5190 (("/sbin/cryptsetup")
5191 (string-append cryptsetup "/sbin/cryptsetup"))
5192 (("/sbin/unix_chkpwd")
5193 (string-append linux-pam "/sbin/unix_chkpwd"))
5194 (("/sbin/dmsetup")
5195 (string-append lvm2 "/sbin/dmsetup")))))))))
5196 (native-inputs
5197 `(("intltool" ,intltool)
5198 ("perl" ,perl) ; for pod2man
5199 ("pkg-config" ,pkg-config)))
5200 (inputs
5201 `(("keyutils" ,keyutils)
5202 ("linux-pam" ,linux-pam)
5203 ("utils-linux" ,util-linux)
5204 ("cryptsetup" ,cryptsetup)
5205 ("lvm2" ,lvm2)
5206 ("nss" ,nss)))
5207 (home-page "https://ecryptfs.org/")
5208 (synopsis "eCryptfs cryptographic file system utilities")
5209 (description
5210 "eCryptfs is a POSIX-compliant stacked cryptographic file system for Linux.
5211 Each file's cryptographic meta-data is stored inside the file itself, along
5212 with the encrypted contents. This allows individual encrypted files to be
5213 copied between hosts and still be decrypted with the proper key. eCryptfs is a
5214 native Linux file system, and has been part of the Linux kernel since version
5215 2.6.19. This package contains the userland utilities to manage it.")
5216 ;; The files src/key_mod/ecryptfs_key_mod_{openssl,pkcs11_helper,tspi}.c
5217 ;; grant additional permission to link with OpenSSL.
5218 (license license:gpl2+)))
5219
5220 (define-public libnfsidmap
5221 (package
5222 (name "libnfsidmap")
5223 (version "0.27")
5224 (source
5225 (origin
5226 (method url-fetch)
5227 (uri (string-append "https://fedorapeople.org/~steved/"
5228 name "/" version "/" name "-" version ".tar.bz2"))
5229 (sha256
5230 (base32 "0bg2bcii424mf1bnp3fssr8jszbvhdxl7wvifm1yf6g596v8b8i5"))))
5231 (build-system gnu-build-system)
5232 (arguments
5233 `(#:configure-flags (list
5234 (string-append "--with-pluginpath="
5235 (assoc-ref %outputs "out")
5236 "/lib/libnfsidmap"))))
5237 (native-inputs
5238 `(("autoconf" ,autoconf))) ; 0.27 still needs autoheader
5239 (home-page
5240 "http://www.citi.umich.edu/projects/nfsv4/crossrealm/libnfsidmap_config.html")
5241 (synopsis "NFSv4 support library for name/ID mapping")
5242 (description "Libnfsidmap is a library holding mulitiple methods of
5243 mapping names to ids and visa versa, mainly for NFSv4. It provides an
5244 extensible array of mapping functions, currently consisting of two choices:
5245 the default @code{nsswitch} and the experimental @code{umich_ldap}.")
5246 (license (license:non-copyleft "file://COPYING"
5247 "See COPYING in the distribution."))))
5248
5249 (define-public module-init-tools
5250 (package
5251 (name "module-init-tools")
5252 (version "3.16")
5253 (source (origin
5254 (method url-fetch)
5255 (uri (string-append
5256 "mirror://kernel.org/linux/utils/kernel/module-init-tools/"
5257 "module-init-tools-" version ".tar.bz2"))
5258 (sha256
5259 (base32
5260 "0jxnz9ahfic79rp93l5wxcbgh4pkv85mwnjlbv1gz3jawv5cvwp1"))
5261 (patches (search-patches "module-init-tools-moduledir.patch"))))
5262 (build-system gnu-build-system)
5263 (arguments
5264 ;; FIXME: The upstream tarball lacks man pages, and building them would
5265 ;; require DocBook & co. We used to use Gentoo's pre-built man pages,
5266 ;; but they vanished. In the meantime, fake it.
5267 '(#:phases
5268 (modify-phases %standard-phases
5269 (add-before 'configure 'fake-docbook
5270 (lambda _
5271 (substitute* "Makefile.in"
5272 (("^DOCBOOKTOMAN.*$")
5273 "DOCBOOKTOMAN = true\n"))
5274 #t)))))
5275 (home-page "https://www.kernel.org/pub/linux/utils/kernel/module-init-tools/")
5276 (synopsis "Tools for loading and managing Linux kernel modules")
5277 (description
5278 "Tools for loading and managing Linux kernel modules, such as
5279 @code{modprobe}, @code{insmod}, @code{lsmod}, and more.")
5280 (license license:gpl2+)))
5281
5282 (define-public mcelog
5283 (package
5284 (name "mcelog")
5285 (version "168")
5286 (source (origin
5287 (method url-fetch)
5288 (uri (string-append "https://git.kernel.org/cgit/utils/cpu/mce/"
5289 "mcelog.git/snapshot/v" version ".tar.gz"))
5290 (sha256
5291 (base32
5292 "1c4faayg1gcm3002b2fdrfnv76z92mvfzccvx8w9crjp0d17sp24"))
5293 (file-name (string-append name "-" version ".tar.gz"))
5294 (modules '((guix build utils)))
5295 (snippet
5296 `(begin
5297 ;; The snapshots lack a .git directory,
5298 ;; breaking ‘git describe’.
5299 (substitute* "Makefile"
5300 (("\"unknown\"") (string-append "\"v" ,version "\"")))
5301 #t))))
5302 (build-system gnu-build-system)
5303 (arguments
5304 `(#:phases (modify-phases %standard-phases
5305 (delete 'configure)) ; no configure script
5306 #:make-flags (let ((out (assoc-ref %outputs "out")))
5307 (list "CC=gcc"
5308 (string-append "prefix=" out)
5309 (string-append "DOCDIR=" out "/share/doc/mcelog")
5310 "etcprefix=$(DOCDIR)/examples"))
5311 ;; The tests will only run as root on certain supported CPU models.
5312 #:tests? #f))
5313 (supported-systems (list "i686-linux" "x86_64-linux"))
5314 (home-page "https://mcelog.org/")
5315 (synopsis "Machine check monitor for x86 Linux systems")
5316 (description
5317 "The mcelog daemon is required by the Linux kernel to log memory, I/O, CPU,
5318 and other hardware errors on x86 systems. It can also perform user-defined
5319 tasks, such as bringing bad pages off-line, when configurable error thresholds
5320 are exceeded.")
5321 (license license:gpl2)))
5322
5323 (define-public mtd-utils
5324 (package
5325 (name "mtd-utils")
5326 (version "2.1.1")
5327 (source (origin
5328 (method url-fetch)
5329 (uri (string-append
5330 "ftp://ftp.infradead.org/pub/mtd-utils/"
5331 "mtd-utils-" version ".tar.bz2"))
5332 (sha256
5333 (base32
5334 "1lijl89l7hljx8xx70vrz9srd3h41v5gh4b0lvqnlv831yvyh5cd"))))
5335 (arguments
5336 '(#:configure-flags '("--enable-unit-tests")))
5337 (native-inputs
5338 `(("cmocka" ,cmocka)
5339 ("pkg-config" ,pkg-config)))
5340 (inputs
5341 `(("acl" ,acl) ; extended attributes (xattr)
5342 ("libuuid" ,util-linux)
5343 ("lzo" ,lzo)
5344 ("openssl" ,openssl) ; optional crypto support
5345 ("zlib" ,zlib)
5346 ("zstd" ,zstd "lib")))
5347 (build-system gnu-build-system)
5348 (synopsis "MTD Flash Storage Utilities")
5349 (description "This package provides utilities for testing, partitioning, etc
5350 of flash storage.")
5351 (home-page "http://www.linux-mtd.infradead.org/")
5352 (license
5353 (list license:gpl2 ; Almost everything is gpl2 or gpl2+
5354 license:mpl1.1 ; All ftl* files
5355 license:expat)))) ; libiniparser
5356
5357 (define-public libseccomp
5358 (package
5359 (name "libseccomp")
5360 (version "2.4.3")
5361 (source (origin
5362 (method url-fetch)
5363 (uri (string-append "https://github.com/seccomp/libseccomp/"
5364 "releases/download/v" version
5365 "/libseccomp-" version ".tar.gz"))
5366 (sha256
5367 (base32
5368 "07crwxqzvl5k2b90a47ii9wgvi09s9hsy5b5jddw9ylp351d25fg"))))
5369 (build-system gnu-build-system)
5370 (native-inputs
5371 `(("which" ,which)))
5372 (synopsis "Interface to Linux's seccomp syscall filtering mechanism")
5373 (description "The libseccomp library provides an easy to use, platform
5374 independent, interface to the Linux Kernel's syscall filtering mechanism. The
5375 libseccomp API is designed to abstract away the underlying BPF based syscall
5376 filter language and present a more conventional function-call based filtering
5377 interface that should be familiar to, and easily adopted by, application
5378 developers.")
5379 (home-page "https://github.com/seccomp/libseccomp")
5380 (license license:lgpl2.1)))
5381
5382 (define-public radeontop
5383 (package
5384 (name "radeontop")
5385 (version "1.2")
5386 (source
5387 (origin
5388 (method git-fetch)
5389 (uri (git-reference
5390 (url "https://github.com/clbr/radeontop.git")
5391 (commit (string-append "v" version))))
5392 (file-name (git-file-name name version))
5393 (sha256
5394 (base32 "1b1m30r2nfwqkajqw6m01xmfhlq83z1qylyijxg7962mp9x2k0gw"))))
5395 (build-system gnu-build-system)
5396 (arguments
5397 `(#:phases (modify-phases %standard-phases
5398 ;; getver.sh uses ‘git --describe’, isn't worth an extra git
5399 ;; dependency, and doesn't even work on release(!) tarballs.
5400 (add-after 'unpack 'report-correct-version
5401 (lambda _
5402 (substitute* "getver.sh"
5403 (("ver=unknown")
5404 (string-append "ver=" ,version)))
5405 #t))
5406 (delete 'configure)) ; no configure script
5407 #:make-flags (list "CC=gcc"
5408 (string-append "PREFIX=" %output))
5409 #:tests? #f)) ; no tests
5410 (native-inputs
5411 `(("gettext" ,gettext-minimal)
5412 ("pkg-config" ,pkg-config)))
5413 (inputs
5414 `(("libdrm" ,libdrm)
5415 ("libpciaccess" ,libpciaccess)
5416 ("libxcb" ,libxcb)
5417 ("ncurses" ,ncurses)))
5418 (home-page "https://github.com/clbr/radeontop/")
5419 (synopsis "Usage monitor for AMD Radeon graphics")
5420 (description "RadeonTop monitors resource consumption on supported AMD
5421 Radeon Graphics Processing Units (GPUs), either in real time as bar graphs on
5422 a terminal or saved to a file for further processing. It measures both the
5423 activity of the GPU as a whole, which is also accurate during OpenCL
5424 computations, as well as separate component statistics that are only meaningful
5425 under OpenGL graphics workloads.")
5426 (license license:gpl3)))
5427
5428 (define-public efivar
5429 (package
5430 (name "efivar")
5431 (version "37")
5432 (source (origin
5433 (method url-fetch)
5434 (uri (string-append "https://github.com/rhboot/" name
5435 "/releases/download/" version "/" name
5436 "-" version ".tar.bz2"))
5437 (sha256
5438 (base32
5439 "17vvfivhsrszh7q39b6npjsrhrhsjf1cmmcpp3xrh6wh7ywzwrrw"))))
5440 (build-system gnu-build-system)
5441 (arguments
5442 `(;; Tests require a UEFI system and is not detected in the chroot.
5443 #:tests? #f
5444 #:make-flags (list (string-append "prefix=" %output)
5445 (string-append "libdir=" %output "/lib")
5446 "CC_FOR_BUILD=gcc"
5447 (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib"))
5448 #:phases
5449 (modify-phases %standard-phases
5450 (delete 'configure)
5451 (add-before 'build 'kernel-headers-are-system-headers
5452 (lambda* (#:key inputs #:allow-other-keys)
5453 (let ((kernel-headers (assoc-ref inputs "kernel-headers")))
5454 ;; Make sure the kernel headers are treated as system headers
5455 ;; to suppress a conflict between "util.h" and <linux/fs.h>.
5456 (setenv "C_INCLUDE_PATH" (string-append kernel-headers "/include"))
5457 #t))))))
5458 (native-inputs
5459 `(("pkg-config" ,pkg-config)))
5460 (inputs
5461 `(("popt" ,popt)))
5462 (home-page "https://github.com/rhboot/efivar")
5463 (synopsis "Tool and library to manipulate EFI variables")
5464 (description "This package provides a library and a command line
5465 interface to the variable facility of UEFI boot firmware.")
5466 (license license:lgpl2.1+)))
5467
5468 (define-public efibootmgr
5469 (package
5470 (name "efibootmgr")
5471 (version "16")
5472 (source (origin
5473 (method url-fetch)
5474 (uri (string-append "https://github.com/rhinstaller/efibootmgr"
5475 "/releases/download/" version "/efibootmgr"
5476 "-" version ".tar.bz2"))
5477 (sha256
5478 (base32
5479 "0pzn67vxxaf7jna4cd0i4kqm60h04kb21hckksv9z82q9gxra1wm"))))
5480 (build-system gnu-build-system)
5481 (arguments
5482 `(#:tests? #f ;no tests
5483 #:make-flags (list (string-append "prefix=" %output)
5484 (string-append "libdir=" %output "/lib")
5485 ;; EFIDIR denotes a subdirectory relative to the
5486 ;; EFI System Partition where the loader will be
5487 ;; installed (known as OS_VENDOR in the code).
5488 ;; GRUB overrides this, as such it's only used if
5489 ;; nothing else is specified on the command line.
5490 "EFIDIR=gnu"
5491 ;; Treat kernel headers as system headers to prevent
5492 ;; warnings about conflicting types.
5493 (string-append "C_INCLUDE_PATH="
5494 (assoc-ref %build-inputs "kernel-headers")
5495 "/include"))
5496 #:phases (modify-phases %standard-phases (delete 'configure))))
5497 (native-inputs
5498 `(("pkg-config" ,pkg-config)))
5499 (inputs
5500 `(("efivar" ,efivar)
5501 ("popt" ,popt)))
5502 (home-page "https://github.com/rhinstaller/efibootmgr")
5503 (synopsis "Modify the Extensible Firmware Interface (EFI) boot manager")
5504 (description
5505 "@code{efibootmgr} is a user-space application to modify the Intel
5506 Extensible Firmware Interface (EFI) Boot Manager. This application can
5507 create and destroy boot entries, change the boot order, change the next
5508 running boot option, and more.")
5509 (license license:gpl2+)))
5510
5511 (define-public sysstat
5512 (package
5513 (name "sysstat")
5514 (version "12.3.1")
5515 (source (origin
5516 (method url-fetch)
5517 (uri (string-append "http://pagesperso-orange.fr/sebastien.godard/"
5518 "sysstat-" version ".tar.xz"))
5519 (sha256
5520 (base32
5521 "1hf1sy7akribmgavadqccxpy49yv0zfb3m81d2bj6jf8pyzwcrbq"))))
5522 (build-system gnu-build-system)
5523 (arguments
5524 `(#:tests? #f ; No test suite.
5525 ;; Without this flag, it tries to install the man pages with group 'root'
5526 ;; and fails because /etc/passwd lacks an entry for the root user.
5527 #:configure-flags
5528 (list "--disable-file-attr"
5529 (string-append "conf_dir=" (assoc-ref %outputs "out") "/etc"))
5530 #:phases
5531 (modify-phases %standard-phases
5532 ;; The build process tries to create '/var/lib/sa', so we skip that
5533 ;; instruction.
5534 (add-after 'build 'skip-touching-var
5535 (lambda _
5536 (substitute* "Makefile"
5537 (("mkdir -p \\$\\(DESTDIR\\)\\$\\(SA_DIR\\)")
5538 ""))
5539 #t)))))
5540 (home-page "http://sebastien.godard.pagesperso-orange.fr/")
5541 (synopsis "Performance monitoring tools for Linux")
5542 (description "The sysstat utilities are a collection of performance
5543 monitoring tools for Linux. These include @code{mpstat}, @code{iostat},
5544 @code{tapestat}, @code{cifsiostat}, @code{pidstat}, @code{sar}, @code{sadc},
5545 @code{sadf} and @code{sa}.")
5546 (license license:gpl2+)))
5547
5548 (define-public light
5549 (package
5550 (name "light")
5551 (version "1.2.2")
5552 (source
5553 (origin
5554 (method git-fetch)
5555 (uri (git-reference
5556 (url "https://github.com/haikarainen/light.git")
5557 (commit (string-append "v" version))))
5558 (sha256
5559 (base32 "1a70zcf88ifsnwll486aicjnh48zisdf8f7vi34ihw61kdadsq9s"))
5560 (file-name (git-file-name name version))))
5561 (build-system gnu-build-system)
5562 (arguments
5563 `(#:phases
5564 (modify-phases %standard-phases
5565 (add-after 'unpack 'patch-udev-rules-absolute-path-bins
5566 (lambda* (#:key inputs #:allow-other-keys)
5567 (substitute* "90-backlight.rules"
5568 (("/bin/chgrp") (which "chgrp"))
5569 (("/bin/chmod") (which "chmod")))
5570 #t))
5571 (add-after 'install 'install-udev-rules
5572 (lambda* (#:key outputs #:allow-other-keys)
5573 (let ((out (assoc-ref outputs "out")))
5574 (install-file
5575 "90-backlight.rules" (string-append out "/lib/udev/rules.d"))
5576 #t))))))
5577 (native-inputs
5578 `(("autoconf" ,autoconf)
5579 ("automake" ,automake)))
5580 (home-page "https://haikarainen.github.io/light/")
5581 (synopsis "GNU/Linux application to control backlights")
5582 (description
5583 "Light is a program to send commands to screen backlight controllers
5584 under GNU/Linux. Features include:
5585
5586 @itemize
5587 @item It does not rely on X.
5588 @item Light can automatically figure out the best controller to use, making
5589 full use of underlying hardware.
5590 @item It is possible to set a minimum brightness value, as some controllers
5591 set the screen to be pitch black at a vaĺue of 0 (or higher).
5592 @end itemize
5593
5594 Light is the successor of lightscript.")
5595 (license license:gpl3+)))
5596
5597 (define-public brightnessctl
5598 (let ((commit "6a791e7694aeeb5d027f71c6098e5182cf03371c"))
5599 (package
5600 (name "brightnessctl")
5601 (version (git-version "0.4" "0" commit))
5602 (source (origin
5603 (method git-fetch)
5604 (uri (git-reference
5605 (url "https://github.com/Hummer12007/brightnessctl/")
5606 (commit commit)))
5607 (file-name (git-file-name name version))
5608 (sha256
5609 (base32
5610 "1n1gb8ldgqv3vs565yhk1w4jfvrviczp94r8wqlkv5q6ab43c8w9"))))
5611 (build-system gnu-build-system)
5612 (arguments
5613 '(#:tests? #f ; no tests
5614 #:make-flags (list "CC=gcc"
5615 (string-append "PREFIX=" %output)
5616 (string-append "UDEVDIR=" %output "/lib/udev/rules.d/"))
5617 #:phases
5618 (modify-phases %standard-phases
5619 (delete 'configure)
5620 (add-after 'unpack 'adjust-udev-rules
5621 (lambda _
5622 (substitute* "90-brightnessctl.rules"
5623 (("/bin/") "/run/current-system/profile/bin/"))
5624 #t)))))
5625 (home-page "https://github.com/Hummer12007/brightnessctl")
5626 (synopsis "Backlight and LED brightness control")
5627 (description
5628 "This program allows you read and control device brightness. Devices
5629 include backlight and LEDs. It can also preserve current brightness before
5630 applying the operation, such as on lid close.
5631
5632 The appropriate permissions must be set on the backlight or LED control
5633 interface in sysfs, which can be accomplished with the included udev rules.")
5634 (license license:expat))))
5635
5636 (define-public tlp
5637 (package
5638 (name "tlp")
5639 (version "1.3.1")
5640 (source
5641 (origin
5642 (method git-fetch)
5643 (uri (git-reference
5644 (url "https://github.com/linrunner/TLP.git")
5645 (commit version)))
5646 (file-name (git-file-name name version))
5647 (sha256
5648 (base32 "14fcnaz9pw534v4d8dddqq4wcvpf1kghr8zlrk62r5lrl46sp1p5"))))
5649 (native-inputs
5650 `(("shellcheck" ,shellcheck)))
5651 (inputs
5652 `(("bash" ,bash)
5653 ("dbus" ,dbus)
5654 ("ethtool" ,ethtool)
5655 ("eudev" ,eudev)
5656 ("grep" ,grep)
5657 ("hdparm" ,hdparm)
5658 ("inetutils" ,inetutils)
5659 ("iw" ,iw)
5660 ("kmod" ,kmod)
5661 ("pciutils" ,pciutils)
5662 ("perl" ,perl)
5663 ("rfkill" ,rfkill)
5664 ("sed" ,sed)
5665 ("usbutils" ,usbutils)
5666 ("util-linux" ,util-linux)
5667 ("wireless-tools" ,wireless-tools)
5668 ,@(if (let ((system (or (%current-target-system)
5669 (%current-system))))
5670 (or (string-prefix? "i686-" system)
5671 (string-prefix? "x86_64-" system)))
5672 `(("x86-energy-perf-policy" ,x86-energy-perf-policy))
5673 '())))
5674 (build-system gnu-build-system)
5675 (arguments
5676 ;; XXX: The full test suite is run with "checkall" but it requires
5677 ;; "checkbashisms" and "perlcritic", not yet packaged in Guix.
5678 `(#:test-target "shellcheck"
5679 #:modules ((guix build gnu-build-system)
5680 (guix build utils)
5681 (srfi srfi-1))
5682 #:phases
5683 (modify-phases %standard-phases
5684 (delete 'configure) ; no configure script
5685 (add-before 'build 'setenv
5686 (lambda* (#:key outputs #:allow-other-keys)
5687 (let ((out (assoc-ref outputs "out")))
5688 (setenv "TLP_WITH_SYSTEMD" "0")
5689 (setenv "TLP_NO_INIT" "1")
5690 (setenv "TLP_NO_PMUTILS" "1")
5691 (setenv "TLP_SBIN" (string-append out "/bin"))
5692 (setenv "TLP_BIN" (string-append out "/bin"))
5693 (setenv "TLP_TLIB" (string-append out "/share/tlp"))
5694 (setenv "TLP_FLIB" (string-append out "/share/tlp/func.d"))
5695 (setenv "TLP_ULIB" (string-append out "/lib/udev"))
5696 (setenv "TLP_CONFDEF"
5697 (string-append out "/share/tlp/defaults.conf"))
5698 (setenv "TLP_CONFDIR" (string-append out "/etc/tlp.d"))
5699 (setenv "TLP_ELOD"
5700 (string-append out "/lib/elogind/system-sleep"))
5701 (setenv "TLP_SHCPL"
5702 (string-append out "/share/bash-completion/completions"))
5703 (setenv "TLP_MAN" (string-append out "/share/man"))
5704 (setenv "TLP_META" (string-append out "/share/metainfo"))
5705 #t)))
5706 (add-before 'install 'fix-installation
5707 (lambda _
5708 ;; Stop the Makefile from trying to create system directories.
5709 (substitute* "Makefile"
5710 (("\\[ -f \\$\\(_CONFUSR\\) \\]") "#")
5711 (("install -d -m 755 \\$\\(_VAR\\)") "#"))
5712 #t))
5713 (replace 'install
5714 (lambda _ (invoke "make" "install-tlp" "install-man-tlp")))
5715 (add-after 'install 'wrap
5716 (lambda* (#:key inputs outputs #:allow-other-keys)
5717 (let* ((bin (string-append (assoc-ref outputs "out") "/bin"))
5718 (bin-files (find-files bin ".*")))
5719 (define (bin-directory input-name)
5720 (let ((p (assoc-ref inputs input-name)))
5721 (and p (string-append p "/bin"))))
5722 (define (sbin-directory input-name)
5723 (string-append (assoc-ref inputs input-name) "/sbin"))
5724 (for-each (lambda (program)
5725 (wrap-program program
5726 `("PATH" ":" prefix
5727 ,(append
5728 (filter-map bin-directory
5729 '("bash"
5730 "coreutils"
5731 "dbus"
5732 "eudev"
5733 "grep"
5734 "inetutils"
5735 "kmod"
5736 "perl"
5737 "sed"
5738 "usbutils"
5739 "util-linux"
5740 "x86-energy-perf-policy"))
5741 (filter-map sbin-directory
5742 '("ethtool"
5743 "hdparm"
5744 "iw"
5745 "pciutils"
5746 "rfkill"
5747 "wireless-tools"))))))
5748 bin-files)
5749 #t))))))
5750 (home-page "https://linrunner.de/en/tlp/tlp.html")
5751 (synopsis "Power management tool for Linux")
5752 (description "TLP is a power management tool for Linux. It comes with
5753 a default configuration already optimized for battery life. Nevertheless,
5754 TLP is customizable to fulfil system requirements. TLP settings are applied
5755 every time the power supply source is changed.")
5756 ;; 'COPYING' is a custom version that says that one file is GPLv3+ and the
5757 ;; rest is GPLv2+.
5758 (license (list license:gpl2+ license:gpl3+))))
5759
5760 (define-public lshw
5761 (package
5762 (name "lshw")
5763 (version "B.02.18")
5764 (source (origin
5765 (method url-fetch)
5766 (uri (string-append "https://www.ezix.org/software/"
5767 "files/lshw-" version
5768 ".tar.gz"))
5769 (sha256
5770 (base32
5771 "0brwra4jld0d53d7jsgca415ljglmmx1l2iazpj4ndilr48yy8mf"))))
5772 (build-system gnu-build-system)
5773 (arguments
5774 `(#:phases (modify-phases %standard-phases (delete 'configure))
5775 #:tests? #f ; no tests
5776 #:make-flags
5777 (list (string-append "PREFIX=" (assoc-ref %outputs "out")))))
5778 (synopsis "List hardware information")
5779 (description
5780 "@command{lshw} (Hardware Lister) is a small tool to provide
5781 detailed information on the hardware configuration of the machine.
5782 It can report exact memory configuration, firmware version, mainboard
5783 configuration, CPU version and speed, cache configuration, bus speed,
5784 and more on DMI-capable x86 or EFI (IA-64) systems and on some PowerPC
5785 machines (PowerMac G4 is known to work).")
5786 (home-page "https://www.ezix.org/project/wiki/HardwareLiSter")
5787 (license license:gpl2+)))
5788
5789 (define-public libmnl
5790 (package
5791 (name "libmnl")
5792 (version "1.0.4")
5793 (source
5794 (origin
5795 (method url-fetch)
5796 (uri (string-append "mirror://netfilter.org/libmnl/"
5797 "libmnl-" version ".tar.bz2"))
5798 (sha256
5799 (base32
5800 "108zampspaalv44zn0ar9h386dlfixpd149bnxa5hsi8kxlqj7qp"))))
5801 (build-system gnu-build-system)
5802 (home-page "https://www.netfilter.org/projects/libmnl/")
5803 (synopsis "Netlink utility library")
5804 (description "Libmnl is a minimalistic user-space library oriented to
5805 Netlink developers. There are a lot of common tasks in parsing, validating,
5806 constructing of both the Netlink header and TLVs that are repetitive and easy to
5807 get wrong. This library aims to provide simple helpers that allows you to
5808 re-use code and to avoid re-inventing the wheel.")
5809 (license license:lgpl2.1+)))
5810
5811 (define-public libnftnl
5812 (package
5813 (name "libnftnl")
5814 (version "1.1.5")
5815 (source
5816 (origin
5817 (method url-fetch)
5818 (uri (string-append "mirror://netfilter.org/libnftnl/"
5819 "libnftnl-" version ".tar.bz2"))
5820 (sha256
5821 (base32 "1wqlxf76bkqf3qhka9sw32qhb2ni20q1k6rn3iril2kw482lvpk6"))
5822 (patches
5823 (search-patches "libnftnl-dont-check-NFTNL_FLOWTABLE_SIZE.patch"))))
5824 (build-system gnu-build-system)
5825 (native-inputs
5826 `(("pkg-config" ,pkg-config)))
5827 (inputs
5828 `(("libmnl" ,libmnl)))
5829 (home-page "https://www.netfilter.org/projects/libnftnl/index.html")
5830 (synopsis "Netlink programming interface to the Linux nf_tables subsystem")
5831 (description "Libnftnl is a userspace library providing a low-level netlink
5832 programming interface to the in-kernel nf_tables subsystem. The library
5833 libnftnl has been previously known as libnftables. This library is currently
5834 used by nftables.")
5835 (license license:gpl2+)))
5836
5837 (define-public nftables
5838 (package
5839 (name "nftables")
5840 (version "0.9.3")
5841 (source
5842 (origin
5843 (method url-fetch)
5844 (uri (list (string-append "mirror://netfilter.org/nftables/nftables-"
5845 version ".tar.bz2")
5846 (string-append "https://www.nftables.org/projects/nftables"
5847 "/files/nftables-" version ".tar.bz2")))
5848 (sha256
5849 (base32 "0y6vbqp6x8w165q65h4n9sba1406gaz0d4744gqszbm7w9f92swm"))))
5850 (build-system gnu-build-system)
5851 (arguments `(#:configure-flags
5852 '("--disable-man-doc"))) ; FIXME: Needs docbook2x.
5853 (inputs `(("gmp" ,gmp)
5854 ("libmnl" ,libmnl)
5855 ("libnftnl" ,libnftnl)
5856 ("readline" ,readline)))
5857 (native-inputs `(("pkg-config" ,pkg-config)
5858 ("bison" ,bison)
5859 ("flex" ,flex)))
5860 (home-page "https://www.nftables.org")
5861 (synopsis "Userspace utility for Linux packet filtering")
5862 (description "nftables is the project that aims to replace the existing
5863 {ip,ip6,arp,eb}tables framework. Basically, this project provides a new packet
5864 filtering framework, a new userspace utility and also a compatibility layer for
5865 {ip,ip6}tables. nftables is built upon the building blocks of the Netfilter
5866 infrastructure such as the existing hooks, the connection tracking system, the
5867 userspace queueing component and the logging subsystem.")
5868 (license license:gpl2)))
5869
5870 (define-public proot
5871 (package
5872 (name "proot")
5873 (version "5.1.0")
5874 (source
5875 (origin
5876 (method git-fetch)
5877 (uri (git-reference
5878 (url "https://github.com/proot-me/PRoot.git")
5879 (commit (string-append "v" version))))
5880 (file-name (git-file-name name version))
5881 (sha256
5882 (base32 "0azsqis99gxldmbcg43girch85ysg4hwzf0h1b44bmapnsm89fbz"))
5883 (patches (search-patches "proot-test-fhs.patch"))))
5884 (build-system gnu-build-system)
5885 (arguments
5886 '(#:make-flags '("-C" "src")
5887
5888 #:phases (modify-phases %standard-phases
5889 (delete 'configure)
5890 (add-before 'build 'set-shell-file-name
5891 (lambda* (#:key inputs #:allow-other-keys)
5892 (substitute* (find-files "src" "\\.[ch]$")
5893 (("\"/bin/sh\"")
5894 (string-append "\""
5895 (assoc-ref inputs "bash")
5896 "/bin/sh\"")))
5897 #t))
5898 (add-before 'check 'fix-fhs-assumptions-in-tests
5899 (lambda _
5900 (substitute* "tests/test-c6b77b77.mk"
5901 (("/bin/bash") (which "bash"))
5902 (("/usr/bin/test") (which "test")))
5903 (substitute* '("tests/test-16573e73.c")
5904 (("/bin/([a-z-]+)" _ program)
5905 (which program)))
5906
5907 (substitute* (find-files "tests" "\\.sh$")
5908 ;; Some of the tests try to "bind-mount" /bin/true.
5909 (("-b /bin/true:")
5910 (string-append "-b " (which "true") ":"))
5911 ;; Likewise for /bin.
5912 (("-b /bin:") "-b /gnu:")
5913 ;; Others try to run /bin/sh.
5914 (("/bin/sh") (which "sh"))
5915 ;; Others assume /etc/fstab exists.
5916 (("/etc/fstab") "/etc/passwd"))
5917
5918 (substitute* "tests/GNUmakefile"
5919 (("-b /bin:") "-b /gnu:"))
5920
5921 ;; XXX: This test fails in an obscure corner case, just
5922 ;; skip it.
5923 (delete-file "tests/test-kkkkkkkk.c")
5924
5925 #t))
5926 (replace 'check
5927 (lambda _
5928 (let ((n (parallel-job-count)))
5929 ;; For some reason we get lots of segfaults with
5930 ;; seccomp support (x86_64, Linux-libre 4.11.0).
5931 (setenv "PROOT_NO_SECCOMP" "1")
5932
5933 ;; Most of the tests expect "/bin" to be in $PATH so
5934 ;; they can run things that live in $ROOTFS/bin.
5935 (setenv "PATH"
5936 (string-append (getenv "PATH") ":/bin"))
5937
5938 (invoke "make" "check" "-C" "tests"
5939 ;;"V=1"
5940 "-j" (number->string n)))))
5941 (replace 'install
5942 (lambda* (#:key outputs #:allow-other-keys)
5943 ;; The 'install' rule does nearly nothing.
5944 (let* ((out (assoc-ref outputs "out"))
5945 (man1 (string-append out "/share/man/man1")))
5946 ;; TODO: 'make install-care' (does not even
5947 ;; build currently.)
5948 (invoke "make" "-C" "src" "install"
5949 (string-append "PREFIX=" out))
5950
5951 (mkdir-p man1)
5952 (copy-file "doc/proot/man.1"
5953 (string-append man1 "/proot.1"))
5954 #t))))))
5955 (native-inputs `(("which" ,which)
5956
5957 ;; For 'mcookie', used by some of the tests.
5958 ("util-linux" ,util-linux)))
5959 (inputs `(("talloc" ,talloc)))
5960 (home-page "https://github.com/proot-me/PRoot")
5961 (synopsis "Unprivileged chroot, bind mount, and binfmt_misc")
5962 (description
5963 "PRoot is a user-space implementation of @code{chroot}, @code{mount --bind},
5964 and @code{binfmt_misc}. This means that users don't need any privileges or
5965 setup to do things like using an arbitrary directory as the new root
5966 file system, making files accessible somewhere else in the file system
5967 hierarchy, or executing programs built for another CPU architecture
5968 transparently through QEMU user-mode. Also, developers can use PRoot as a
5969 generic process instrumentation engine thanks to its extension mechanism.
5970 Technically PRoot relies on @code{ptrace}, an unprivileged system-call
5971 available in the kernel Linux.")
5972 (license license:gpl2+)))
5973
5974 (define-public proot-static
5975 (package
5976 (inherit proot)
5977 (name "proot-static")
5978 (synopsis
5979 "Unprivileged chroot, bind mount, and binfmt_misc (statically linked)")
5980 (inputs `(("talloc" ,talloc/static)))
5981 (arguments
5982 (substitute-keyword-arguments (package-arguments proot)
5983 ((#:make-flags flags)
5984 `(cons "LDFLAGS = -ltalloc -static -static-libgcc" ,flags))
5985 ((#:phases phases)
5986 `(modify-phases ,phases
5987 (add-after 'strip 'remove-store-references
5988 (lambda* (#:key outputs #:allow-other-keys)
5989 (let* ((out (assoc-ref outputs "out")))
5990 (with-directory-excursion out
5991 (remove-store-references "bin/proot")
5992 #t))))))
5993 ((#:allowed-references _ '("out"))
5994 '("out"))))))
5995
5996 (define-public cpuid
5997 (package
5998 (name "cpuid")
5999 (version "20200211")
6000 (source (origin
6001 (method url-fetch)
6002 (uri (string-append "http://www.etallen.com/cpuid/cpuid-"
6003 version ".src.tar.gz"))
6004 (sha256
6005 (base32
6006 "06sjbqqp80l7nhsp6khglkzdp9qy4vhbvjxbfilznhsmrqiwlw55"))))
6007 (build-system gnu-build-system)
6008 (arguments
6009 '(#:make-flags '("CC=gcc")
6010 #:tests? #f ; no tests
6011 #:phases (modify-phases %standard-phases
6012 (delete 'configure) ; no configure script
6013 (add-before 'install 'fix-makefile
6014 (lambda* (#:key outputs #:allow-other-keys)
6015 (substitute* "Makefile"
6016 (("\\$\\(BUILDROOT\\)/usr") (assoc-ref outputs "out")))
6017 ;; Make the compressed manpages writable so that the
6018 ;; reset-gzip-timestamps phase does not error out.
6019 (substitute* "Makefile"
6020 (("-m 444") "-m 644"))
6021 #t)))))
6022 (inputs `(("perl" ,perl)))
6023 (supported-systems '("i686-linux" "x86_64-linux"))
6024 (home-page "http://www.etallen.com/cpuid.html")
6025 (synopsis "Linux tool to dump x86 CPUID information about the CPU(s)")
6026 (description "cpuid dumps detailed information about the CPU(s) gathered
6027 from the CPUID instruction, and also determines the exact model of CPU(s). It
6028 supports Intel, AMD, and VIA CPUs, as well as older Transmeta, Cyrix, UMC,
6029 NexGen, Rise, and SiS CPUs.")
6030 (license license:gpl2+)))
6031
6032 (define-public jmtpfs
6033 (package
6034 (name "jmtpfs")
6035 (version "0.5")
6036 (source
6037 (origin
6038 (method url-fetch)
6039 (uri (string-append "https://github.com/JasonFerrara/jmtpfs/archive/v"
6040 version ".tar.gz"))
6041 (file-name (string-append name "-" version ".tar.gz"))
6042 (sha256
6043 (base32
6044 "10v8d7mmx8b8123x5f9y9zaaa428ms6wkngwn2ra71n5a53wrjn0"))))
6045 (build-system gnu-build-system)
6046 (inputs
6047 `(("file" ,file)
6048 ("fuse" ,fuse)
6049 ("libmtp" ,libmtp)))
6050 (native-inputs
6051 `(("pkg-config" ,pkg-config)))
6052 (home-page "https://github.com/JasonFerrara/jmtpfs")
6053 (synopsis "Use a FUSE file system to access data over MTP")
6054 (description "jmtpfs uses FUSE (file system in userspace) to provide access
6055 to data over the Media Transfer Protocol (MTP). Unprivileged users can mount
6056 the MTP device as a file system.")
6057 (license license:gpl3)))
6058
6059 (define-public procenv
6060 (package
6061 (name "procenv")
6062 (version "0.51")
6063 (source
6064 (origin
6065 (method url-fetch)
6066 (uri (string-append "https://github.com/jamesodhunt/procenv/archive/"
6067 version ".tar.gz"))
6068 (file-name (string-append name "-" version ".tar.gz"))
6069 (sha256
6070 (base32 "1javw97yw0qvjmj14js8vw6nsfyf2xc0kfiyq5f2hsp0553w2cdq"))))
6071 (build-system gnu-build-system)
6072 (arguments `(#:configure-flags '("--disable-silent-rules")))
6073 (native-inputs `(("groff" ,groff) ; for tests
6074 ("pkg-config" ,pkg-config)))
6075 (inputs `(("check" ,check)
6076 ("expat" ,expat)
6077 ("libcap" ,libcap)
6078 ("libselinux" ,libselinux)))
6079 (synopsis "Utility to show process environment")
6080 (description "Procenv is a command-line tool that displays as much detail about
6081 itself and its environment as possible. It can be used as a test
6082 tool, to understand the type of environment a process runs in, and for
6083 comparing system environments.")
6084 (home-page "http://github.com/jamesodhunt/procenv/")
6085 (license license:gpl3+)))
6086
6087 (define-public libfabric
6088 (package
6089 (name "libfabric")
6090 (version "1.4.1")
6091 (source
6092 (origin
6093 (method url-fetch)
6094 (uri
6095 (string-append "https://github.com/ofiwg/libfabric/releases/download/v"
6096 version "/libfabric-" version ".tar.bz2"))
6097 (sha256
6098 (base32 "19l2m1frna1l765z4j7wl8hp4rb9wrh0hy5496685hd183hmy5pv"))))
6099 (build-system gnu-build-system)
6100 (inputs `(("rdma-core" ,rdma-core)
6101 ,@(match (%current-system)
6102 ((member (package-supported-systems psm))
6103 `(("psm" ,psm)))
6104 (_ `()))
6105 ("libnl" ,libnl)))
6106 (home-page "https://ofiwg.github.io/libfabric/")
6107 (synopsis "Open Fabric Interfaces")
6108 (description
6109 "OpenFabrics Interfaces (OFI) is a framework focused on exporting fabric
6110 communication services to applications. OFI is best described as a collection
6111 of libraries and applications used to export fabric services. The key
6112 components of OFI are: application interfaces, provider libraries, kernel
6113 services, daemons, and test applications.
6114
6115 Libfabric is a core component of OFI. It is the library that defines and
6116 exports the user-space API of OFI, and is typically the only software that
6117 applications deal with directly. It works in conjunction with provider
6118 libraries, which are often integrated directly into libfabric.")
6119 (license (list license:bsd-2 license:gpl2)))) ;dual
6120
6121 (define-public psm
6122 (package
6123 (name "psm")
6124 (version "3.3.20170428")
6125 (home-page "https://github.com/intel/psm")
6126 (source
6127 (origin
6128 (method git-fetch)
6129 (uri (git-reference (url home-page)
6130 (commit "604758e76dc31e68d1de736ccf5ddf16cb22355b")))
6131 (file-name (string-append "psm-" version ".tar.gz"))
6132 (sha256
6133 (base32 "0nsb325dmhn5ia3d2cnksqr0gdvrrx2hmvlylfgvmaqdpq76zm85"))
6134 (patches (search-patches
6135 "psm-arch.patch" ; uname -p returns "unknown" on Debian 9
6136 "psm-ldflags.patch" ; build shared lib with LDFLAGS
6137 "psm-repro.patch" ; reproducibility
6138 "psm-disable-memory-stats.patch"))))
6139 (build-system gnu-build-system)
6140 (outputs '("out" "debug"))
6141 (inputs `(("libuuid" ,util-linux)))
6142 (arguments
6143 '(#:make-flags `("PSM_USE_SYS_UUID=1" "CC=gcc" "WERROR="
6144 ,(string-append "INSTALL_PREFIX=" %output)
6145 ,(string-append "LDFLAGS=-Wl,-rpath=" %output "/lib"))
6146 #:tests? #f
6147 #:phases (modify-phases %standard-phases
6148 (delete 'configure)
6149 (add-after 'unpack 'patch-/usr/include
6150 (lambda _
6151 (substitute* "Makefile"
6152 (("\\$\\{DESTDIR}/usr/include")
6153 (string-append %output "/include")))
6154 (substitute* "Makefile"
6155 (("/lib64") "/lib"))
6156 #t))
6157 (add-after 'unpack 'patch-sysmacros
6158 (lambda _
6159 (substitute* "ipath/ipath_proto.c"
6160 (("#include <sys/poll.h>" m)
6161 (string-append m "\n"
6162 "#include <sys/sysmacros.h>")))
6163 #t)))))
6164 (synopsis "Intel Performance Scaled Messaging (PSM) Libraries")
6165 (description
6166 "The PSM Messaging API, or PSM API, is Intel's low-level user-level
6167 communications interface for the True Scale family of products. PSM users are
6168 enabled with mechanisms necessary to implement higher level communications
6169 interfaces in parallel environments.")
6170 ;; Only Intel-compatable processors are supported.
6171 (supported-systems '("i686-linux" "x86_64-linux"))
6172 (license (list license:bsd-2 license:gpl2)))) ;dual
6173
6174 (define-public snapscreenshot
6175 (package
6176 (name "snapscreenshot")
6177 (version "1.0.14.3")
6178 (source
6179 (origin
6180 (method url-fetch)
6181 (uri (string-append "http://bisqwit.iki.fi/src/arch/"
6182 name "-" version ".tar.bz2"))
6183 (sha256
6184 (base32 "0gzvqsbf6a2sbd1mqvj1lbm57i2bm5k0cr6ncr821d1f32gw03mk"))))
6185 (build-system gnu-build-system)
6186 (arguments
6187 `(#:make-flags
6188 (let ((out (assoc-ref %outputs "out")))
6189 (list (string-append "BINDIR=" out "/bin")
6190 (string-append "MANDIR=" out "/share/man")))
6191 #:tests? #f ; no test suite
6192 #:phases
6193 (modify-phases %standard-phases
6194 (delete 'configure) ; ./configure is a snarky no-op
6195 (add-before 'install 'fix-ownership
6196 ;; Install binaries owned by ‘root’ instead of the nonexistent ‘bin’.
6197 (lambda _
6198 (substitute* "depfun.mak"
6199 ((" -o bin -g bin ") " "))
6200 #t))
6201 (add-before 'install 'create-output-directories
6202 (lambda* (#:key outputs #:allow-other-keys)
6203 (let ((out (assoc-ref outputs "out")))
6204 (mkdir-p (string-append out "/share/man/man1"))
6205 #t))))))
6206 (home-page "https://bisqwit.iki.fi/source/snapscreenshot.html")
6207 (synopsis "Take screenshots of one or more Linux text consoles")
6208 (description
6209 "snapscreenshot saves a screenshot of one or more Linux text consoles as a
6210 Targa (@dfn{.tga}) image. It can be used by anyone with read access to the
6211 relevant @file{/dev/vcs*} file(s).")
6212 (license license:gpl2)))
6213
6214 (define-public fbcat
6215 (package
6216 (name "fbcat")
6217 (version "0.5.1")
6218 (source
6219 (origin
6220 (method url-fetch)
6221 (uri (string-append "https://github.com/jwilk/fbcat/releases/download/"
6222 version "/" name "-" version ".tar.gz"))
6223 (sha256
6224 (base32 "0pj9hxmwhbz6kmd7847yx2jh1scl9l25zgndyi8s9vlzdkq2q8d7"))))
6225 (build-system gnu-build-system)
6226 (inputs
6227 ;; The ‘fbgrab’ wrapper can use one of several PPM-to-PNG converters. We
6228 ;; choose netpbm simply because it's the smallest. It still adds ~94 MiB
6229 ;; to an otherwise tiny package, so we put ‘fbgrab’ in its own output.
6230 `(("pnmtopng" ,netpbm)))
6231 (outputs (list "out" "fbgrab"))
6232 (arguments
6233 `(#:make-flags
6234 (list "CC=gcc"
6235 (string-append "PREFIX=" (assoc-ref %outputs "out")))
6236 #:tests? #f ; no tests
6237 #:phases
6238 (modify-phases %standard-phases
6239 (delete 'configure) ; no configure script
6240 (add-after 'build 'qualify-references
6241 (lambda* (#:key inputs outputs #:allow-other-keys)
6242 (let* ((pnmtopng (assoc-ref inputs "pnmtopng"))
6243 (out (assoc-ref outputs "out")))
6244 (substitute* "fbgrab"
6245 (("fbcat" all)
6246 (string-append out "/bin/" all))
6247 (("pnmtopng" all)
6248 (string-append pnmtopng "/bin/" all)))
6249 #t)))
6250 (add-after 'install 'split-fbgrab-output
6251 (lambda* (#:key outputs #:allow-other-keys)
6252 (let* ((out (assoc-ref outputs "out"))
6253 (out:fbgrab (assoc-ref outputs "fbgrab")))
6254 (for-each (lambda (file)
6255 (let ((old (string-append out "/" file))
6256 (new (string-append out:fbgrab "/" file)))
6257 (mkdir-p (dirname new))
6258 (rename-file old new)))
6259 (list "bin/fbgrab"
6260 "share/man/man1/fbgrab.1"))
6261 #t))))))
6262 (home-page "https://jwilk.net/software/fbcat")
6263 (synopsis "Take a screenshot of the contents of the Linux framebuffer")
6264 (description
6265 "fbcat saves the contents of the Linux framebuffer (@file{/dev/fb*}), or
6266 a dump therof. It supports a wide range of drivers and pixel formats.
6267 @command{fbcat} can take screenshots of virtually any application that can be
6268 made to write its output to the framebuffer, including (but not limited to)
6269 text-mode or graphical applications that don't use a display server.
6270
6271 Also included is @command{fbgrab}, a wrapper around @command{fbcat} that
6272 emulates the behaviour of Gunnar Monell's older fbgrab utility.")
6273 (license license:gpl2)))
6274
6275 (define-public libcgroup
6276 (package
6277 (name "libcgroup")
6278 (version "0.41")
6279 (source
6280 (origin
6281 (method url-fetch)
6282 (uri (string-append
6283 "mirror://sourceforge/libcg/" name "/"
6284 version "/" name "-" version ".tar.bz2"))
6285 (sha256
6286 (base32 "0lgvyq37gq84sk30sg18admxaj0j0p5dq3bl6g74a1ppgvf8pqz4"))))
6287 (build-system gnu-build-system)
6288 (arguments
6289 `(#:tests? #f))
6290 (native-inputs
6291 `(("bison" ,bison)
6292 ("flex" ,flex)))
6293 (inputs
6294 `(("linux-pam" ,linux-pam)))
6295 (home-page "https://sourceforge.net/projects/libcg/")
6296 (synopsis "Control groups management tools")
6297 (description "Control groups is Linux kernel method for process resource
6298 restriction, permission handling and more. This package provides userspace
6299 interface to this kernel feature.")
6300 (license license:lgpl2.1)))
6301
6302 (define-public mbpfan
6303 (package
6304 (name "mbpfan")
6305 (version "2.1.1")
6306 (source
6307 (origin
6308 (method git-fetch)
6309 (uri (git-reference
6310 (url "https://github.com/dgraziotin/mbpfan.git")
6311 (commit (string-append "v" version))))
6312 (file-name (git-file-name name version))
6313 (sha256
6314 (base32 "0aijyxrqh01x0s80yr4cgxgd001iiqqph65pxvby7f0wz8lnxnqj"))))
6315 (build-system gnu-build-system)
6316 (arguments
6317 '(#:tests? #f ; tests ask to be run as root
6318 #:make-flags (let ((out (assoc-ref %outputs "out")))
6319 (list (string-append "DESTDIR=" out)
6320 "CC=gcc"))
6321 #:phases
6322 (modify-phases %standard-phases
6323 (add-after 'unpack 'patch-paths
6324 (lambda _
6325 (substitute* "Makefile"
6326 (("/usr") ""))
6327 #t))
6328 (delete 'configure)))) ; there's no configure phase
6329 (home-page "https://github.com/dgraziotin/mbpfan")
6330 (synopsis "Control fan speed on Macbooks")
6331 (description
6332 "mbpfan is a fan control daemon for Apple Macbooks. It uses input from
6333 the @code{coretemp} module and sets the fan speed using the @code{applesmc}
6334 module. It can be executed as a daemon or in the foreground with root
6335 privileges.")
6336 (license license:gpl3+)))
6337
6338 (define-public psm2
6339 (package
6340 (name "psm2")
6341 (version "11.2.86")
6342 (source (origin
6343 (method git-fetch)
6344 (uri (git-reference
6345 (url "https://github.com/intel/opa-psm2.git")
6346 (commit (string-append "PSM2_" version))))
6347 (file-name (git-file-name name version))
6348 (sha256
6349 (base32
6350 "1hiqzcmc97lzhaqjva82vf8irgg038cciypsv2brw90ak09n6vwf"))))
6351 (build-system gnu-build-system)
6352 (arguments
6353 '(#:make-flags
6354 `(,(string-append "LDFLAGS=-Wl,-rpath=" %output "/lib"))
6355 #:tests? #f
6356 #:phases (modify-phases %standard-phases
6357 (delete 'configure)
6358 (add-after 'unpack 'patch-Makefiles
6359 (lambda _
6360 (substitute* "Makefile"
6361 (("/lib64") "/lib")
6362 (("/usr") ""))
6363 (substitute* "compat/Makefile"
6364 (("/lib64") "/lib")
6365 (("/usr") ""))
6366 #t))
6367 (replace 'install
6368 (lambda _
6369 (setenv "DESTDIR" %output)
6370 (invoke "make" "install")
6371 #t)))))
6372 (inputs
6373 `(("rdma-core" ,rdma-core)
6374 ("numactl" ,numactl)))
6375 (synopsis "Intel Performance Scaled Messaging 2 (PSM2) library")
6376 (description
6377 "This package is low-level user-level Intel's communications interface.
6378 The PSM2 API is a high-performance vendor-specific protocol that provides a
6379 low-level communications interface for the Intel Omni-Path family of
6380 high-speed networking devices.")
6381 (home-page "https://github.com/intel/opa-psm2")
6382 ;; Only the x86_64 architecure is supported.
6383 (supported-systems '("x86_64-linux"))
6384 (license (list license:bsd-3 license:gpl2)))) ; dual
6385
6386 (define-public libpfm4
6387 (package
6388 (name "libpfm4")
6389 (version "4.9.0")
6390 (source (origin
6391 (method url-fetch)
6392 (uri (string-append "mirror://sourceforge/perfmon2/"
6393 name "/libpfm-" version ".tar.gz"))
6394 (sha256
6395 (base32
6396 "1qp4g4n6dw42p2w5rkwzdb7ynk8h7g5vg01ybpmvxncgwa7bw3yv"))))
6397 (build-system gnu-build-system)
6398 (arguments
6399 '(#:modules ((guix build utils)
6400 (guix build gnu-build-system))
6401 #:phases (modify-phases %standard-phases
6402 (delete 'configure)
6403 (delete 'check)
6404 (replace 'build
6405 (lambda* (#:key inputs outputs #:allow-other-keys)
6406 (let* ((out (assoc-ref outputs "out")))
6407 (setenv "CC" "gcc")
6408 (invoke "make")
6409 #t)))
6410 (replace 'install
6411 (lambda* (#:key outputs #:allow-other-keys)
6412 (let* ((out (assoc-ref outputs "out")))
6413 (invoke "make"
6414 (string-append "PREFIX=" out)
6415 "install")
6416 #t))))))
6417 (synopsis "Performance event monitoring library")
6418 (description
6419 "This package provides a library called libpfm4, which is used to develop
6420 monitoring tools exploiting the performance monitoring events such as those
6421 provided by the Performance Monitoring Unit (PMU) of modern processors.
6422
6423 Libpfm4 helps convert from an event name, expressed as a string, to the event
6424 encoding that is either the raw event as documented by the hardware vendor or
6425 the OS-specific encoding. In the latter case, the library is able to prepare
6426 the OS-specific data structures needed by the kernel to setup the event.
6427
6428 libpfm4 provides support for the @code{perf_events} interface, which was
6429 introduced in Linux 2.6.31.")
6430 (home-page "http://perfmon2.sourceforge.net/")
6431 (license license:expat)))
6432
6433 (define-public libnfnetlink
6434 (package
6435 (name "libnfnetlink")
6436 (version "1.0.1")
6437 (source (origin
6438 (method url-fetch)
6439 (uri (string-append
6440 "https://www.netfilter.org/projects/libnfnetlink/files/"
6441 "libnfnetlink-" version ".tar.bz2"))
6442 (sha256
6443 (base32
6444 "06mm2x4b01k3m7wnrxblk9j0mybyr4pfz28ml7944xhjx6fy2w7j"))))
6445 (build-system gnu-build-system)
6446 (home-page "https://www.netfilter.org/projects/libnfnetlink/")
6447 (synopsis "Low-level netfilter netlink communication library")
6448 (description
6449 "@code{libnfnetlink} is the low-level library for netfilter related
6450 kernel/userspace communication. It provides a generic messaging
6451 infrastructure for in-kernel netfilter subsystems (such as nfnetlink_log,
6452 nfnetlink_queue, nfnetlink_conntrack) and their respective users and/or
6453 management tools in userspace.")
6454 (license license:gpl2)))
6455
6456 (define-public go-netlink
6457 (package
6458 (name "go-netlink")
6459 (version "1.0.0")
6460 (source (origin
6461 (method git-fetch)
6462 (uri (git-reference
6463 (url "https://github.com/vishvananda/netlink.git")
6464 (commit (string-append "v" version))))
6465 (file-name (git-file-name name version))
6466 (sha256
6467 (base32
6468 "0hpzghf1a4cwawzhkiwdzin80h6hd09fskl77d5ppgc084yvj8x0"))))
6469 (build-system go-build-system)
6470 (arguments
6471 `(#:import-path "github.com/vishvananda/netlink"))
6472 (native-inputs
6473 `(("go-golang-org-x-sys" ,go-golang-org-x-sys)
6474 ("go-netns" ,go-netns)))
6475 (home-page "https://github.com/vishvananda/netlink")
6476 (synopsis "Simple netlink library for Go")
6477 (description "The netlink package provides a simple netlink library for
6478 Go. Netlink is the interface a user-space program in Linux uses to
6479 communicate with the kernel. It can be used to add and remove interfaces, set
6480 IP addresses and routes, and configure IPsec.")
6481 (license license:asl2.0)))
6482
6483 (define-public xfsprogs
6484 (package
6485 (name "xfsprogs")
6486 (version "5.2.1")
6487 (source (origin
6488 (method url-fetch)
6489 (uri (string-append
6490 "mirror://kernel.org/linux/utils/fs/xfs/xfsprogs/"
6491 "xfsprogs-" version ".tar.gz"))
6492 (sha256
6493 (base32
6494 "0q5xd4gb9g83h82mg68cx616ifzl8qkzzlgg5xna698117ph3wky"))))
6495 (build-system gnu-build-system)
6496 (outputs (list "out" "python"))
6497 (arguments
6498 `(#:tests? #f ; kernel/user integration tests are in package "xfstests"
6499 #:phases
6500 (modify-phases %standard-phases
6501 (add-after 'install 'separate-python-output
6502 (lambda* (#:key outputs #:allow-other-keys)
6503 (let ((out (assoc-ref outputs "out"))
6504 (python (assoc-ref outputs "python")))
6505 (for-each
6506 (lambda (script)
6507 (mkdir-p (string-append python (dirname script)))
6508 (rename-file (string-append out script)
6509 (string-append python script)))
6510 (list "/sbin/xfs_scrub_all"))
6511 #t)))
6512 (add-after 'install 'install-headers
6513 (lambda _
6514 (invoke "make" "install-dev"))))))
6515 (native-inputs
6516 `(("gettext" ,gettext-minimal)))
6517 (inputs
6518 `(("libuuid" ,util-linux)
6519 ("python" ,python-wrapper)))
6520 (home-page "https://xfs.wiki.kernel.org/")
6521 (synopsis "XFS file system tools")
6522 (description "This package provides commands to create and check XFS
6523 file systems.")
6524 ;; The library "libhandle" and the headers in "xfslibs-dev" are
6525 ;; licensed under lgpl2.1. the other stuff is licensed under gpl2.
6526 (license (list license:gpl2 license:lgpl2.1))))
6527
6528 (define-public genext2fs
6529 (package
6530 (name "genext2fs")
6531 (version "1.4.1-4")
6532 (source (origin
6533 (method git-fetch)
6534 (uri (git-reference
6535 (url "https://github.com/jeremie-koenig/genext2fs.git")
6536 ;; 1.4.1-3 had a VCS tag but 1.4.1-4 doesn't.
6537 (commit "9ee43894634998b0b2b309d636f25c64314c9421")))
6538 (file-name (git-file-name name version))
6539 (sha256
6540 (base32 "0ib5icn78ciz00zhc1bgdlrwaxvsdz7wnplwblng0jirwi9ml7sq"))))
6541 (build-system gnu-build-system)
6542 (arguments
6543 `(#:phases
6544 (modify-phases %standard-phases
6545 (add-after 'unpack 'apply-debian-patches
6546 ;; Debian changes (the revision after ‘-’ in VERSION) are
6547 ;; maintained as separate patches. Apply those relevant to us.
6548 (lambda _
6549 (for-each
6550 (lambda (file-name)
6551 (invoke "patch" "-p1" "-i"
6552 (string-append "debian/patches/" file-name)))
6553 (list "blocksize+creator.diff" ; add -B/-o options
6554 "byteswap_fix.diff"))
6555 #t)))))
6556 (native-inputs
6557 `(("autoconf" ,autoconf)
6558 ("automake" ,automake)))
6559 (home-page "https://github.com/jeremie-koenig/genext2fs")
6560 (synopsis "Generate ext2 file system as a normal user")
6561 (description "This package provides a program to generate an ext2
6562 file system as a normal (non-root) user. It does not require you to mount
6563 the image file to copy files on it, nor does it require that you become
6564 the superuser to make device nodes.")
6565 (license license:gpl2)))
6566
6567 (define-public fakeroot
6568 (package
6569 (name "fakeroot")
6570 (version "1.24")
6571 (source (origin
6572 (method url-fetch)
6573 (uri (string-append "https://deb.debian.org/debian/pool/main/f/"
6574 "fakeroot/fakeroot_" version ".orig.tar.gz"))
6575 (file-name (string-append name "-" version ".tar.gz"))
6576 (sha256
6577 (base32
6578 "1vb6f93hjyqnwx8dc8mm3dgma7axgqk8s7sdsjs8l2rpc0qmn11f"))))
6579 (build-system gnu-build-system)
6580 (arguments
6581 `(#:phases
6582 (modify-phases %standard-phases
6583 (add-after 'configure 'patch-Makefile
6584 (lambda _
6585 ;; Note: The root of the problem is already in "Makefile.am".
6586 (substitute* "Makefile"
6587 (("/bin/sh") (which "sh")))
6588 #t))
6589 (add-after 'unpack 'patch-getopt
6590 (lambda* (#:key inputs #:allow-other-keys)
6591 (substitute* "scripts/fakeroot.in"
6592 (("getopt")
6593 (string-append (assoc-ref inputs "util-linux")
6594 "/bin/getopt")))
6595 #t))
6596 (add-before 'configure 'setenv
6597 (lambda _
6598 (setenv "LIBS" "-lacl")
6599 #t))
6600 (add-before 'check 'prepare-check
6601 (lambda _
6602 (setenv "SHELL" (which "bash"))
6603 (setenv "VERBOSE" "1")
6604 (substitute* "test/t.touchinstall"
6605 ;; We don't have the name of the root user, so use ID=0.
6606 (("grep root") "grep \"\\<0\\>\""))
6607 (substitute* "test/tartest"
6608 ;; We don't have the name of the root group, so use ID=0.
6609 (("ROOTGROUP=root") "ROOTGROUP=0")
6610 ;; We don't have the name of the daemon user, so use IDs.
6611 (("daemon:sys") "1:3")
6612 (("daemon:") "1:"))
6613 ;; We don't have an /etc/passwd entry for "root" - use numeric IDs.
6614 (substitute* "test/compare-tar"
6615 (("tar -tvf") "tar --numeric-owner -tvf"))
6616 #t)))))
6617 (native-inputs
6618 `(("acl" ,acl)
6619 ("sharutils" ,sharutils) ; for the tests
6620 ("xz" ,xz))) ; for the tests
6621 (inputs
6622 `(("libcap" ,libcap)
6623 ("util-linux" ,util-linux)))
6624 (synopsis "Provides a fake root environment")
6625 (description "@command{fakeroot} runs a command in an environment where
6626 it appears to have root privileges for file manipulation. This is useful
6627 for allowing users to create archives (tar, ar, .deb etc.) with files in
6628 them with root permissions/ownership. Without fakeroot one would have to
6629 have root privileges to create the constituent files of the archives with
6630 the correct permissions and ownership, and then pack them up, or one would
6631 have to construct the archives directly, without using the archiver.")
6632 (home-page "http://freshmeat.sourceforge.net/projects/fakeroot")
6633 (license license:gpl3+)))
6634
6635 (define-public inputattach
6636 (package
6637 (name "inputattach")
6638 (version "0.42.0")
6639 (source (origin
6640 (method git-fetch)
6641 (uri (git-reference
6642 (url "https://github.com/linuxwacom/input-wacom.git")
6643 (commit (string-append "input-wacom-" version))))
6644 (file-name (git-file-name name version))
6645 (sha256
6646 (base32 "04lnn7v0rm4ppbya140im5d4igcl6c1nrqpgbsr0i8wkral0nv7j"))))
6647 (build-system gnu-build-system)
6648 (arguments
6649 `(#:phases
6650 (modify-phases %standard-phases
6651 (delete 'bootstrap)
6652 (delete 'configure)
6653 (replace 'build
6654 (lambda* (#:key inputs #:allow-other-keys)
6655 (with-directory-excursion "inputattach"
6656 (invoke (string-append (assoc-ref inputs "gcc")
6657 "/bin/gcc")
6658 "-O2" "-o" "inputattach" "inputattach.c"))
6659 #t))
6660 (delete 'check)
6661 (replace 'install
6662 (lambda* (#:key outputs #:allow-other-keys)
6663 (let ((target-dir (string-append
6664 (assoc-ref outputs "out")
6665 "/bin/")))
6666 (mkdir-p target-dir)
6667 (copy-file "inputattach/inputattach"
6668 (string-append target-dir
6669 "inputattach"))
6670 #t))))))
6671 (home-page "https://linuxwacom.github.io/")
6672 (synopsis "Dispatch input peripherals events to a device file")
6673 (description "inputattach dispatches input events from several device
6674 types and interfaces and translates so that the X server can use them.")
6675 (license license:gpl2+)))
6676
6677 (define-public pipewire
6678 (package
6679 (name "pipewire")
6680 (version "0.2.7")
6681 (source (origin
6682 (method git-fetch)
6683 (uri (git-reference
6684 (url "https://github.com/PipeWire/pipewire")
6685 (commit version)))
6686 (file-name (git-file-name name version))
6687 (sha256
6688 (base32
6689 "1q5wrqnhhs6r49p8yvkw1pl0cnsd4rndxy4h5lvdydwgf1civcwc"))))
6690 (build-system meson-build-system)
6691 (arguments
6692 '(#:configure-flags '("-Dsystemd=false")))
6693 (native-inputs
6694 `(("pkg-config" ,pkg-config)))
6695 (inputs
6696 `(("alsa-lib" ,alsa-lib)
6697 ("dbus" ,dbus)
6698 ("eudev" ,eudev)
6699 ("ffmpeg" ,ffmpeg)
6700 ("gstreamer" ,gstreamer)
6701 ("gst-plugins-base" ,gst-plugins-base)
6702 ("libva" ,libva)
6703 ("sbc" ,sbc)
6704 ("sdl2" ,sdl2)))
6705 (home-page "https://pipewire.org/")
6706 (synopsis "Server and user space API to deal with multimedia pipelines")
6707 (description
6708 "PipeWire is a project that aims to greatly improve handling of audio and
6709 video under Linux. It aims to support the usecases currently handled by both
6710 PulseAudio and Jack and at the same time provide same level of powerful handling
6711 of Video input and output. It also introduces a security model that makes
6712 interacting with audio and video devices from containerized applications easy,
6713 with supporting Flatpak applications being the primary goal. Alongside Wayland
6714 and Flatpak we expect PipeWire to provide a core building block for the future
6715 of Linux application development.")
6716 (license license:lgpl2.0+)))
6717
6718 (define-public ell
6719 (package
6720 (name "ell")
6721 (version "0.23")
6722 (source (origin
6723 (method git-fetch)
6724 (uri (git-reference
6725 (url "https://git.kernel.org/pub/scm/libs/ell/ell.git")
6726 (commit version)))
6727 (file-name (git-file-name name version))
6728 (sha256
6729 (base32
6730 "1qhlcwhn0gj877yss2ymx1aczghlddzb5v9mm1dgp2zliii3jy10"))))
6731 (build-system gnu-build-system)
6732 (arguments
6733 `(#:phases
6734 (modify-phases %standard-phases
6735 (add-after 'unpack 'fix-dbus-tests
6736 (lambda _
6737 (substitute* '("unit/test-dbus-message-fds.c"
6738 "unit/test-dbus-properties.c"
6739 "unit/test-dbus.c")
6740 (("/usr/bin/dbus-daemon") (which "dbus-daemon")))
6741 #t)))))
6742 (inputs
6743 `(("dbus" ,dbus)))
6744 (native-inputs
6745 `(("autoconf" ,autoconf)
6746 ("libtool" ,libtool)
6747 ("pkgconfig" ,pkg-config)
6748 ("automake" ,automake)))
6749 (home-page "https://01.org/ell")
6750 (synopsis "Embedded Linux Library")
6751 (description "The Embedded Linux* Library (ELL) provides core, low-level
6752 functionality for system daemons. It typically has no dependencies other than
6753 the Linux kernel, C standard library, and libdl (for dynamic linking). While
6754 ELL is designed to be efficient and compact enough for use on embedded Linux
6755 platforms, it is not limited to resource-constrained systems.")
6756 (license license:lgpl2.1+)))
6757
6758 (define-public lttng-ust
6759 (package
6760 (name "lttng-ust")
6761 (version "2.11.0")
6762 (source (origin
6763 (method url-fetch)
6764 (uri (string-append "https://lttng.org/files/lttng-ust/"
6765 "lttng-ust-" version ".tar.bz2"))
6766 (sha256
6767 (base32
6768 "1n646yz7882svf5a4ay3vqiiz3qjn3pgkkij9kk22871wp7q0ck8"))))
6769 (build-system gnu-build-system)
6770 (inputs
6771 `(("liburcu" ,liburcu)
6772 ("numactl" ,numactl)))
6773 (native-inputs
6774 `(("python" ,python-3)))
6775 (home-page "https://lttng.org/")
6776 (synopsis "LTTng userspace tracer libraries")
6777 (description "The user space tracing library, liblttng-ust, is the LTTng
6778 user space tracer. It receives commands from a session daemon, for example to
6779 enable and disable specific instrumentation points, and writes event records
6780 to ring buffers shared with a consumer daemon.")
6781 (license license:lgpl2.1+)))
6782
6783 (define-public kexec-tools
6784 (package
6785 (name "kexec-tools")
6786 (version "2.0.20")
6787 (source (origin
6788 (method url-fetch)
6789 (uri (string-append "mirror://kernel.org/linux/utils/kernel"
6790 "/kexec/kexec-tools-" version ".tar.xz"))
6791 (sha256
6792 (base32
6793 "1j7qlhxk1rbv9jbj8wd6hb7zl8p2mp29ymrmccgmsi0m0dzhgn6s"))))
6794 (build-system gnu-build-system)
6795 (arguments
6796 ;; There are no automated tests.
6797 '(#:tests? #f))
6798 (home-page "https://projects.horms.net/projects/kexec/")
6799 (synopsis "Tools for booting directly into different kernels")
6800 (description "This package provides the @code{kexec} program and ancillary
6801 utilities. Using @code{kexec}, it is possible to boot directly into a new
6802 kernel from the context of an already-running kernel, bypassing the normal
6803 system boot process.")
6804 (license license:gpl2)))