aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages/linux.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/linux.scm')
-rw-r--r--gnu/packages/linux.scm446
1 files changed, 246 insertions, 200 deletions
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index fc7d64e2c2..64e8bfbf06 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -85,7 +85,7 @@
(define-public (system->linux-architecture arch)
"Return the Linux architecture name for ARCH, a Guix system name such as
-\"x86_64-linux\"."
+\"x86_64-linux\" or a target triplet such as \"arm-linux-gnueabihf\"."
(let ((arch (car (string-split arch #\-))))
(cond ((string=? arch "i686") "i386")
((string-prefix? "mips" arch) "mips")
@@ -166,62 +166,6 @@
(description "Headers of the Linux-Libre kernel.")
(license license:gpl2)))
-(define-public module-init-tools
- (package
- (name "module-init-tools")
- (version "3.16")
- (source (origin
- (method url-fetch)
- (uri (string-append
- "mirror://kernel.org/linux/utils/kernel/module-init-tools/module-init-tools-"
- version ".tar.bz2"))
- (sha256
- (base32
- "0jxnz9ahfic79rp93l5wxcbgh4pkv85mwnjlbv1gz3jawv5cvwp1"))
- (patches (search-patches "module-init-tools-moduledir.patch"))))
- (build-system gnu-build-system)
- (arguments
- ;; FIXME: The upstream tarball lacks man pages, and building them would
- ;; require DocBook & co. We used to use Gentoo's pre-built man pages,
- ;; but they vanished. In the meantime, fake it.
- '(#:phases (alist-cons-before
- 'configure 'fake-docbook
- (lambda _
- (substitute* "Makefile.in"
- (("^DOCBOOKTOMAN.*$")
- "DOCBOOKTOMAN = true\n")))
- %standard-phases)))
- (home-page "http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/")
- (synopsis "Tools for loading and managing Linux kernel modules")
- (description
- "Tools for loading and managing Linux kernel modules, such as `modprobe',
-`insmod', `lsmod', and more.")
- (license license:gpl2+)))
-
-(define-public libnfsidmap
- (package
- (name "libnfsidmap")
- (version "0.25")
- (source (origin
- (method url-fetch)
- (uri (string-append
- "http://www.citi.umich.edu/projects/nfsv4/linux/"
- name "/" name "-" version ".tar.gz"))
- (sha256
- (base32
- "1kzgwxzh83qi97rblcm9qj80cdvnv8kml2plz0q103j0hifj8vb5"))))
- (build-system gnu-build-system)
- (home-page
- "http://www.citi.umich.edu/projects/nfsv4/crossrealm/libnfsidmap_config.html")
- (synopsis
- "NFSv4 support library for name/ID mapping")
- (description "Libnfsidmap is a library holding mulitiple methods of
-mapping names to ids and visa versa, mainly for NFSv4. It provides an
-extensible array of mapping functions, currently consisting of two choices:
-the default @code{nsswitch} and the experimental @code{umich_ldap}.")
- (license (license:non-copyleft "file://COPYING"
- "See COPYING in the distribution."))))
-
(define %boot-logo-patch
;; Linux-Libre boot logo featuring Freedo and a gnu.
(origin
@@ -232,171 +176,178 @@ the default @code{nsswitch} and the experimental @code{umich_ldap}.")
(base32
"1hk9swxxc80bmn2zd2qr5ccrjrk28xkypwhl4z0qx4hbivj7qm06"))))
-(define* (kernel-config system #:key variant)
+(define* (kernel-config arch #:key variant)
"Return the absolute file name of the Linux-Libre build configuration file
-for SYSTEM and optionally VARIANT, or #f if there is no such configuration."
- (and-let* ((arch (match system
- ("i686-linux"
- "i686")
- ("x86_64-linux"
- "x86_64")
- (_
- #f)))
- (name (string-append "linux-libre-"
- (if variant
- (string-append variant "-")
- "")
- arch
- ".conf"))
- (file (string-append "gnu/packages/" name)))
+for ARCH and optionally VARIANT, or #f if there is no such configuration."
+ (let* ((name (string-append "linux-libre-"
+ (if variant (string-append variant "-") "")
+ (if (string=? "i386" arch) "i686" arch) ".conf"))
+ (file (string-append "gnu/packages/" name)))
(search-path %load-path file)))
-(define-public linux-libre
- (let* ((version "4.7.2")
- (build-phase
- '(lambda* (#:key system inputs #:allow-other-keys #:rest args)
+(define %default-extra-linux-options
+ `(;; https://lists.gnu.org/archive/html/guix-devel/2014-04/msg00039.html
+ ("CONFIG_DEVPTS_MULTIPLE_INSTANCES" . #t)
+ ;; Modules required for initrd:
+ ("CONFIG_NET_9P" . m)
+ ("CONFIG_NET_9P_VIRTIO" . m)
+ ("CONFIG_VIRTIO_BLK" . m)
+ ("CONFIG_VIRTIO_NET" . m)
+ ("CONFIG_VIRTIO_PCI" . m)
+ ("CONFIG_VIRTIO_BALLOON" . m)
+ ("CONFIG_VIRTIO_MMIO" . m)
+ ("CONFIG_FUSE_FS" . m)
+ ("CONFIG_CIFS" . m)
+ ("CONFIG_9P_FS" . m)))
+
+(define (config->string options)
+ (string-join (map (match-lambda
+ ((option . 'm)
+ (string-append option "=m"))
+ ((option . #t)
+ (string-append option "=y"))
+ ((option . #f)
+ (string-append option "=n")))
+ options)
+ "\n"))
+
+(define* (make-linux-libre version hash supported-systems
+ #:key
+ ;; A function that takes an arch and a variant.
+ ;; See kernel-config for an example.
+ (extra-version #f)
+ (configuration-file #f)
+ (defconfig "defconfig")
+ (extra-options %default-extra-linux-options))
+ (package
+ (name (if extra-version
+ (string-append "linux-libre-" extra-version)
+ "linux-libre"))
+ (version version)
+ (source (origin
+ (method url-fetch)
+ (uri (linux-libre-urls version))
+ (sha256 (base32 hash))
+ (patches (list %boot-logo-patch))))
+ (supported-systems supported-systems)
+ (build-system gnu-build-system)
+ (native-inputs
+ `(("perl" ,perl)
+ ("bc" ,bc)
+ ("openssl" ,openssl)
+ ("kmod" ,kmod)
+ ,@(if configuration-file
+ `(("kconfig" ,(configuration-file
+ (system->linux-architecture
+ (or (%current-target-system)
+ (%current-system)))
+ #:variant (version-major+minor version))))
+ '())))
+ (arguments
+ `(#:modules ((guix build gnu-build-system)
+ (guix build utils)
+ (srfi srfi-1)
+ (ice-9 match))
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'configure
+ (lambda* (#:key inputs native-inputs target #:allow-other-keys)
;; Avoid introducing timestamps
(setenv "KCONFIG_NOTIMESTAMP" "1")
(setenv "KBUILD_BUILD_TIMESTAMP" (getenv "SOURCE_DATE_EPOCH"))
- ;; Apply the neat patch.
- (system* "patch" "-p1" "--force"
- "-i" (assoc-ref inputs "patch/freedo+gnu"))
+ ;; Set ARCH and CROSS_COMPILE
+ (let ((arch ,(system->linux-architecture
+ (or (%current-target-system)
+ (%current-system)))))
+ (setenv "ARCH" arch)
+ (format #t "`ARCH' set to `~a'~%" (getenv "ARCH"))
+
+ (when target
+ (setenv "CROSS_COMPILE" (string-append target "-"))
+ (format #t "`CROSS_COMPILE' set to `~a'~%"
+ (getenv "CROSS_COMPILE"))))
- (let ((arch (car (string-split system #\-))))
- (setenv "ARCH"
- (cond ((string=? arch "i686") "i386")
- ((string=? arch "mips64el") "mips")
- (else arch)))
- (format #t "`ARCH' set to `~a'~%" (getenv "ARCH")))
+ (setenv "EXTRA_VERSION" ,extra-version)
(let ((build (assoc-ref %standard-phases 'build))
(config (assoc-ref inputs "kconfig")))
- ;; Use the architecture-specific config if available, and
- ;; 'defconfig' otherwise.
+ ;; Use a custom kernel configuration file or a default
+ ;; configuration file.
(if config
(begin
(copy-file config ".config")
(chmod ".config" #o666))
- (system* "make" "defconfig"))
+ (system* "make" ,defconfig))
;; Appending works even when the option wasn't in the
;; file. The last one prevails if duplicated.
- (let ((port (open-file ".config" "a")))
- (display (string-append "CONFIG_NET_9P=m\n"
- "CONFIG_NET_9P_VIRTIO=m\n"
- "CONFIG_VIRTIO_BLK=m\n"
- "CONFIG_VIRTIO_NET=m\n"
- ;; https://lists.gnu.org/archive/html/guix-devel/2014-04/msg00039.html
- "CONFIG_DEVPTS_MULTIPLE_INSTANCES=y\n"
- "CONFIG_VIRTIO_PCI=m\n"
- "CONFIG_VIRTIO_BALLOON=m\n"
- "CONFIG_VIRTIO_MMIO=m\n"
- "CONFIG_FUSE_FS=m\n"
- "CONFIG_CIFS=m\n"
- "CONFIG_9P_FS=m\n")
- port)
+ (let ((port (open-file ".config" "a"))
+ (extra-configuration ,(config->string extra-options)))
+ (display extra-configuration port)
(close-port port))
- (zero? (system* "make" "oldconfig"))
-
- ;; Call the default `build' phase so `-j' is correctly
- ;; passed.
- (apply build #:make-flags "all" args))))
- (install-phase
- `(lambda* (#:key inputs outputs #:allow-other-keys)
+ (zero? (system* "make" "oldconfig")))))
+ (replace 'install
+ (lambda* (#:key inputs native-inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(moddir (string-append out "/lib/modules"))
- (mit (assoc-ref inputs "module-init-tools")))
+ (dtbdir (string-append out "/lib/dtbs"))
+ (kmod (assoc-ref (or native-inputs inputs) "kmod")))
+ ;; Install kernel image, kernel configuration and link map.
+ (for-each (lambda (file) (install-file file out))
+ (find-files "." "^(\\.config|bzImage|zImage|vmlinuz|System\\.map)$"))
+ ;; Install device tree files
+ (for-each (lambda (file) (install-file file dtbdir))
+ (find-files "." "\\.dtb$"))
+ ;; Install kernel modules
(mkdir-p moddir)
- (for-each (lambda (file)
- (copy-file file
- (string-append out "/" (basename file))))
- (find-files "." "^(bzImage|vmlinuz|System\\.map)$"))
- (copy-file ".config" (string-append out "/config"))
(zero? (system* "make"
- (string-append "DEPMOD=" mit "/sbin/depmod")
+ (string-append "DEPMOD=" kmod "/bin/depmod")
(string-append "MODULE_DIR=" moddir)
(string-append "INSTALL_PATH=" out)
(string-append "INSTALL_MOD_PATH=" out)
"INSTALL_MOD_STRIP=1"
"modules_install"))))))
- (package
- (name "linux-libre")
- (version version)
- (source (origin
- (method url-fetch)
- (uri (linux-libre-urls version))
- (sha256
- (base32
- "1rp09y2hv0hvdybm2n2im9717kzxmklpgzs8k1bmdfzqxyg8cb85"))))
- (build-system gnu-build-system)
- (supported-systems '("x86_64-linux" "i686-linux"))
- (native-inputs `(("perl" ,perl)
- ("bc" ,bc)
- ("openssl" ,openssl)
- ("module-init-tools" ,module-init-tools)
- ("patch/freedo+gnu" ,%boot-logo-patch)
-
- ,@(let ((conf (kernel-config
- (or (%current-target-system)
- (%current-system))
- #:variant (version-major+minor version))))
- (if conf
- `(("kconfig" ,conf))
- '()))))
- (arguments
- `(#:modules ((guix build gnu-build-system)
- (guix build utils)
- (srfi srfi-1)
- (ice-9 match))
- #:phases (alist-replace
- 'build ,build-phase
- (alist-replace
- 'install ,install-phase
- (alist-delete 'configure %standard-phases)))
#:tests? #f))
+ (home-page "http://www.gnu.org/software/linux-libre/")
(synopsis "100% free redistribution of a cleaned Linux kernel")
(description
"GNU Linux-Libre is a free (as in freedom) variant of the Linux kernel.
It has been modified to remove all non-free binary blobs.")
- (license license:gpl2)
- (home-page "http://www.gnu.org/software/linux-libre/"))))
+ (license license:gpl2)))
+
+(define %intel-compatible-systems '("x86_64-linux" "i686-linux"))
+
+(define-public linux-libre
+ (make-linux-libre "4.7.5"
+ "1v5xzagc7zmf0dszq623h83rzhn2qwcapg2fwlihrrb6h9317xqx"
+ %intel-compatible-systems
+ #:configuration-file kernel-config))
(define-public linux-libre-4.4
- (package
- (inherit linux-libre)
- (version "4.4.19")
- (source (origin
- (method url-fetch)
- (uri (linux-libre-urls version))
- (sha256
- (base32
- "0nddjs7prmb0g7g3w2k4qfyq02a9szm5nvsgflxcaarbq1slibb5"))))
- (native-inputs
- (let ((conf (kernel-config (or (%current-target-system)
- (%current-system))
- #:variant "4.4")))
- `(,@(alist-delete "kconfig" (package-native-inputs linux-libre))
- ("kconfig" ,conf))))))
+ (make-linux-libre "4.4.22"
+ "0pwqp5hain26p3wmiqgq3qasyp4j7nl2ai49sq2n8xdi3g2vnmii"
+ %intel-compatible-systems
+ #:configuration-file kernel-config))
(define-public linux-libre-4.1
- (package
- (inherit linux-libre)
- (version "4.1.31")
- (source (origin
- (method url-fetch)
- (uri (linux-libre-urls version))
- (sha256
- (base32
- "0grffah921k136w1qwcswxv6m810s8q54nr2rk7kyqka3a1b81yw"))))
- (native-inputs
- (let ((conf (kernel-config (or (%current-target-system)
- (%current-system))
- #:variant "4.1")))
- `(,@(alist-delete "kconfig" (package-native-inputs linux-libre))
- ("kconfig" ,conf))))))
+ (make-linux-libre "4.1.33"
+ "1s45vymx7zp7qwj4rx63dpj9xwm8hv5fd9nm27wqvmgnmd3q548h"
+ %intel-compatible-systems
+ #:configuration-file kernel-config))
+
+;; Avoid rebuilding kernel variants when there is a minor version bump.
+(define %linux-libre-version "4.7.5")
+(define %linux-libre-hash "1v5xzagc7zmf0dszq623h83rzhn2qwcapg2fwlihrrb6h9317xqx")
+
+(define-public linux-libre-arm-generic
+ (make-linux-libre %linux-libre-version
+ %linux-libre-hash
+ '("armhf-linux")
+ #:defconfig "multi_v7_defconfig"
+ #:extra-version "arm-generic"))
;;;
@@ -481,10 +432,10 @@ at login. Local and dynamic reconfiguration are its key features.")
(inputs `(("ncurses" ,ncurses)))
(home-page "http://psmisc.sourceforge.net/")
(synopsis
- "Small utilities that use the proc filesystem")
+ "Small utilities that use the proc file system")
(description
"This PSmisc package is a set of some small useful utilities that
-use the proc filesystem. We're not about changing the world, but
+use the proc file system. We're not about changing the world, but
providing the system administrator with some help in common tasks.")
(license license:gpl2+)))
@@ -562,7 +513,7 @@ providing the system administrator with some help in common tasks.")
(home-page "https://www.kernel.org/pub/linux/utils/util-linux/")
(synopsis "Collection of utilities for the Linux kernel")
(description "Util-linux is a diverse collection of Linux kernel
-utilities. It provides dmesg and includes tools for working with filesystems,
+utilities. It provides dmesg and includes tools for working with file systems,
block devices, UUIDs, TTYs, and many other tools.")
;; Note that util-linux doesn't use the same license for all the
@@ -711,7 +662,7 @@ slabtop, and skill.")
;; FIXME: Tests work by comparing the stdout/stderr of programs, that
;; they fail because we get an extra line that says "Can't check if
- ;; filesystem is mounted due to missing mtab file".
+ ;; file system is mounted due to missing mtab file".
#:tests? #f))
(home-page "http://e2fsprogs.sourceforge.net/")
(synopsis "Creating and checking ext2/ext3/ext4 file systems")
@@ -1923,20 +1874,16 @@ country-specific regulations for the wireless spectrum.")
(define-public lm-sensors
(package
(name "lm-sensors")
- (version "3.3.5")
+ (version "3.4.0")
(source (origin
(method url-fetch)
(uri (list (string-append
- "ftp://ftp.netroedge.com/pub/lm-sensors/"
- "lm_sensors-" version ".tar.bz2")
- (string-append
- "http://pkgs.fedoraproject.org/repo/pkgs/"
- "lm_sensors/lm_sensors-3.3.5.tar.bz2/"
- "da506dedceb41822e64865f6ba34828a/"
- "lm_sensors-3.3.5.tar.bz2")))
+ "https://github.com/groeck/lm-sensors/archive/V"
+ (string-join (string-split version #\.) "-")
+ ".tar.gz")))
(sha256
(base32
- "1ksgrynxgrq590nb2fwxrl1gwzisjkqlyg3ljfd1al0ibrk6mbjx"))
+ "0knb09s9lvx0wzfsaizx3xq58q6kllqf7nkbwvir0wkgn31c2d73"))
(patches (search-patches "lm-sensors-hwmon-attrs.patch"))))
(build-system gnu-build-system)
(inputs `(("rrdtool" ,rrdtool)
@@ -2253,7 +2200,7 @@ specified in /etc/acpi/events and execute the rules that match the event.")
(home-page "http://linux-diag.sourceforge.net/Sysfsutils.html")
(synopsis "System utilities based on Linux sysfs")
(description
- "These are a set of utilities built upon sysfs, a virtual filesystem in
+ "These are a set of utilities built upon sysfs, a virtual file system in
Linux kernel versions 2.5+ that exposes a system's device tree. The package
also contains the libsysfs library.")
;; The library is under lgpl2.1+ (all files say "or any later version").
@@ -2648,7 +2595,7 @@ and copy/paste text in the console and in xterm.")
(define-public btrfs-progs
(package
(name "btrfs-progs")
- (version "4.7.1")
+ (version "4.7.3")
(source (origin
(method url-fetch)
(uri (string-append "mirror://kernel.org/linux/kernel/"
@@ -2656,7 +2603,7 @@ and copy/paste text in the console and in xterm.")
"btrfs-progs-v" version ".tar.xz"))
(sha256
(base32
- "15jsa12ijc6z49v1csc62x9zidrgcf307lwy1rbffdwk3gsrczww"))))
+ "073pvx8vz6rkw2d8mm1m60b3i8743pc712pasvydbgm8wl66zkch"))))
(build-system gnu-build-system)
(outputs '("out"
"static")) ; static versions of binaries in "out" (~16MiB!)
@@ -2691,7 +2638,7 @@ and copy/paste text in the console and in xterm.")
("which" ,which)))
(home-page "https://btrfs.wiki.kernel.org/")
(synopsis "Create and manage btrfs copy-on-write file systems")
- (description "Btrfs is a copy-on-write (CoW) filesystem for Linux aimed at
+ (description "Btrfs is a copy-on-write (CoW) file system for Linux aimed at
implementing advanced features while focusing on fault tolerance, repair and
easy administration.")
;; GPL2+: crc32.c, radix-tree.c, raid6.c, rbtree.c.
@@ -2946,3 +2893,102 @@ native Linux file system, and has been part of the Linux kernel since version
;; The files src/key_mod/ecryptfs_key_mod_{openssl,pkcs11_helper,tspi}.c
;; grant additional permission to link with OpenSSL.
(license license:gpl2+)))
+
+(define-public libnfsidmap
+ (package
+ (name "libnfsidmap")
+ (version "0.25")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "http://www.citi.umich.edu/projects/nfsv4/linux/"
+ name "/" name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1kzgwxzh83qi97rblcm9qj80cdvnv8kml2plz0q103j0hifj8vb5"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:configure-flags (list
+ (string-append "--with-pluginpath="
+ (assoc-ref %outputs "out")
+ "/lib/libnfsidmap"))))
+ (home-page
+ "http://www.citi.umich.edu/projects/nfsv4/crossrealm/libnfsidmap_config.html")
+ (synopsis
+ "NFSv4 support library for name/ID mapping")
+ (description "Libnfsidmap is a library holding mulitiple methods of
+mapping names to ids and visa versa, mainly for NFSv4. It provides an
+extensible array of mapping functions, currently consisting of two choices:
+the default @code{nsswitch} and the experimental @code{umich_ldap}.")
+ (license (license:non-copyleft "file://COPYING"
+ "See COPYING in the distribution."))))
+
+(define-public module-init-tools
+ (package
+ (name "module-init-tools")
+ (version "3.16")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://kernel.org/linux/utils/kernel/module-init-tools/"
+ "module-init-tools-" version ".tar.bz2"))
+ (sha256
+ (base32
+ "0jxnz9ahfic79rp93l5wxcbgh4pkv85mwnjlbv1gz3jawv5cvwp1"))
+ (patches (search-patches "module-init-tools-moduledir.patch"))))
+ (build-system gnu-build-system)
+ (arguments
+ ;; FIXME: The upstream tarball lacks man pages, and building them would
+ ;; require DocBook & co. We used to use Gentoo's pre-built man pages,
+ ;; but they vanished. In the meantime, fake it.
+ '(#:phases (alist-cons-before
+ 'configure 'fake-docbook
+ (lambda _
+ (substitute* "Makefile.in"
+ (("^DOCBOOKTOMAN.*$")
+ "DOCBOOKTOMAN = true\n")))
+ %standard-phases)))
+ (home-page "http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/")
+ (synopsis "Tools for loading and managing Linux kernel modules")
+ (description
+ "Tools for loading and managing Linux kernel modules, such as `modprobe',
+`insmod', `lsmod', and more.")
+ (license license:gpl2+)))
+
+(define-public mcelog
+ (package
+ (name "mcelog")
+ (version "141")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://git.kernel.org/cgit/utils/cpu/mce/"
+ "mcelog.git/snapshot/v" version ".tar.gz"))
+ (sha256
+ (base32
+ "0ws8blq0prj7slcaljyaxxq20kgmlakzac0ri1pvh24xs1jn2xxg"))
+ (file-name (string-append name "-" version ".tar.gz"))
+ (modules '((guix build utils)))
+ (snippet
+ ;; The snapshots lack a .git directory, breaking ‘git describe’.
+ `(substitute* "Makefile"
+ (("\"unknown\"") (string-append "\"v" ,version "\""))))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:phases (modify-phases %standard-phases
+ (delete 'configure)) ; no configure script
+ #:make-flags (let ((out (assoc-ref %outputs "out")))
+ (list "CC=gcc"
+ (string-append "prefix=" out)
+ (string-append "DOCDIR=" out "/share/doc/mcelog")
+ "etcprefix=$(DOCDIR)/examples"))
+ ;; The tests will only run as root on certain supported CPU models.
+ #:tests? #f))
+ (supported-systems (list "i686-linux" "x86_64-linux"))
+ (home-page "http://mcelog.org/")
+ (synopsis "Machine check monitor for x86 Linux systems")
+ (description
+ "The mcelog daemon is required by the Linux kernel to log memory, I/O, CPU,
+and other hardware errors on x86 systems. It can also perform user-defined
+tasks, such as bringing bad pages off-line, when configurable error thresholds
+are exceeded.")
+ (license license:gpl2)))