summary refs log tree commit diff
path: root/gnu/packages/web.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/web.scm')
-rw-r--r--gnu/packages/web.scm493
1 files changed, 267 insertions, 226 deletions
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 89533d8469..64d747a312 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2013 Aljosha Papsch <misc@rpapsch.de>
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Raoul Jean Pierre Bonnal <ilpuccio.febo@gmail.com>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Eric Bavier <bavier@posteo.net>
@@ -15,8 +15,8 @@
 ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2016 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
-;;; Copyright © 2016, 2017, 2018, 2019, 2021 Arun Isaac <arunisaac@systemreboot.net>
-;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016–2022 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2016–2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 Bake Timmons <b3timmons@speedymail.org>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017, 2018, 2020, 2021, 2022 Marius Bakke <marius@gnu.org>
@@ -56,6 +56,7 @@
 ;;; Copyright © 2021 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
 ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2022 cage <cage-dev@twistfold.it>
+;;; Copyright © 2022 Pradana Aumars <paumars@courrier.dev>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -112,6 +113,7 @@
   #:use-module (gnu packages curl)
   #:use-module (gnu packages cyrus-sasl)
   #:use-module (gnu packages databases)
+  #:use-module (gnu packages django)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages emacs)
@@ -154,6 +156,7 @@
   #:use-module (gnu packages markup)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages networking)
+  #:use-module (gnu packages node)
   #:use-module (gnu packages nss)
   #:use-module (gnu packages openldap)
   #:use-module (gnu packages openstack)
@@ -162,6 +165,8 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
+  #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
@@ -177,7 +182,9 @@
   #:use-module (gnu packages tls)
   #:use-module (gnu packages valgrind)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages video)
   #:use-module (gnu packages vim)
+  #:use-module (gnu packages wget)
   #:use-module (gnu packages xml)
   #:use-module ((srfi srfi-1) #:select (delete-duplicates)))
 
@@ -373,89 +380,86 @@ the same, being completely separated from the Internet.")
     ;; Track the ‘mainline’ branch.  Upstream considers it more reliable than
     ;; ’stable’ and recommends that “in general you deploy the NGINX mainline
     ;; branch at all times” (https://www.nginx.com/blog/nginx-1-6-1-7-released/)
-    (version "1.21.5")
+    (version "1.21.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://nginx.org/download/nginx-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1fygvl19cch100d15k74666jcbc7xpz7v5m7ygqac6556gskn3xj"))))
+                "1bh52jqqcaj5wlh2kvhxr00jhk2hnk8k97ki4pwyj4c8920p1p36"))))
     (build-system gnu-build-system)
     (inputs (list libxml2 libxslt openssl pcre zlib))
     (arguments
-     `(#:tests? #f                      ; no test target
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'patch-/bin/sh
-           (lambda _
-             (substitute* "auto/feature"
-               (("/bin/sh") (which "sh")))
-             #t))
-         (replace 'configure
-           ;; The configure script is hand-written, not from GNU autotools.
-           (lambda* (#:key configure-flags inputs outputs #:allow-other-keys)
-             (let ((flags
-                    (append (list (string-append "--prefix=" (assoc-ref outputs "out"))
-                                  "--with-http_ssl_module"
-                                  "--with-http_v2_module"
-                                  "--with-http_xslt_module"
-                                  "--with-http_gzip_static_module"
-                                  "--with-http_gunzip_module"
-                                  "--with-http_addition_module"
-                                  "--with-http_sub_module"
-                                  "--with-pcre-jit"
-                                  "--with-debug"
-                                  "--with-stream"
-                                  ;; Even when not cross-building, we pass the
-                                  ;; --crossbuild option to avoid customizing for the
-                                  ;; kernel version on the build machine.
-                                  ,(let ((system "Linux")    ; uname -s
-                                         (release "3.2.0")   ; uname -r
-                                         ;; uname -m
-                                         (machine (match (or (%current-target-system)
-                                                             (%current-system))
-                                                    ("x86_64-linux"   "x86_64")
-                                                    ("i686-linux"     "i686")
-                                                    ("mips64el-linux" "mips64")
-                                                    ;; Prevent errors when querying
-                                                    ;; this package on unsupported
-                                                    ;; platforms, e.g. when running
-                                                    ;; "guix package --search="
-                                                    (_                "UNSUPPORTED"))))
-                                     (string-append "--crossbuild="
-                                                    system ":" release ":" machine)))
-                            configure-flags)))
-               (setenv "CC" ,(cc-for-target))
-               ;; Fix ./configure test for ‘#include <libxml/parser.h>’.
-               (setenv "CFLAGS"         ; CPPFLAGS is not respected
-                       (string-append "-I" (assoc-ref inputs "libxml2")
-                                      "/include/libxml2"))
-               (format #t "configure flags: ~s~%" flags)
-               (apply invoke "./configure" flags)
-               #t)))
-         (add-after 'install 'install-man-page
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (man (string-append out "/share/man")))
-               (install-file "objs/nginx.8" (string-append man "/man8"))
-               #t)))
-         (add-after 'install 'fix-root-dirs
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; 'make install' puts things in strange places, so we need to
-             ;; clean it up ourselves.
-             (let* ((out (assoc-ref outputs "out"))
-                    (share (string-append out "/share/nginx")))
-               ;; This directory is empty, so get rid of it.
-               (rmdir (string-append out "/logs"))
-               ;; Example configuration and HTML files belong in
-               ;; /share.
-               (mkdir-p share)
-               (rename-file (string-append out "/conf")
-                            (string-append share "/conf"))
-               (rename-file (string-append out "/html")
-                            (string-append share "/html"))
-               #t))))))
+     (list
+      #:tests? #f                       ; no test target
+      #:configure-flags
+      #~(list "--with-http_ssl_module"
+              "--with-http_v2_module"
+              "--with-http_xslt_module"
+              "--with-http_gzip_static_module"
+              "--with-http_gunzip_module"
+              "--with-http_addition_module"
+              "--with-http_sub_module"
+              "--with-pcre-jit"
+              "--with-debug"
+              "--with-stream"
+              ;; Even when not cross-building, we pass the
+              ;; --crossbuild option to avoid customizing for the
+              ;; kernel version on the build machine.
+              #$(let ((system "Linux")  ; uname -s
+                      (release "3.2.0") ; uname -r
+                      ;; uname -m
+                      (machine (match (or (%current-target-system)
+                                          (%current-system))
+                                 ("x86_64-linux"   "x86_64")
+                                 ("i686-linux"     "i686")
+                                 ("mips64el-linux" "mips64")
+                                 ;; Prevent errors when querying
+                                 ;; this package on unsupported
+                                 ;; platforms, e.g. when running
+                                 ;; "guix package --search="
+                                 (_                "UNSUPPORTED"))))
+                  (string-append "--crossbuild="
+                                 system ":" release ":" machine)))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'configure 'patch-/bin/sh
+            (lambda _
+              (substitute* "auto/feature"
+                (("/bin/sh") (which "sh")))))
+          (replace 'configure
+            ;; The configure script is hand-written, not from GNU autotools.
+            (lambda* (#:key configure-flags inputs #:allow-other-keys)
+              (setenv "CC" #$(cc-for-target))
+              ;; Fix ./configure test for ‘#include <libxml/parser.h>’.
+              (setenv "CFLAGS"          ; CPPFLAGS is not respected
+                      (string-append "-O2 -g "
+                                     "-I" (search-input-directory
+                                           inputs "/include/libxml2")))
+              (format #t "configure flags: ~s~%" configure-flags)
+              (apply invoke "./configure"
+                     (string-append "--prefix=" #$output)
+                     configure-flags)))
+          (add-after 'install 'install-man-page
+            (lambda _
+              (let ((man (string-append #$output "/share/man")))
+                (install-file "objs/nginx.8" (string-append man "/man8")))))
+          (add-after 'install 'fix-root-dirs
+            (lambda _
+              ;; 'make install' puts things in strange places, so we need to
+              ;; clean it up ourselves.
+              (let* ((out #$output)
+                     (share (string-append out "/share/nginx")))
+                ;; This directory is empty, so get rid of it.
+                (rmdir (string-append out "/logs"))
+                ;; Example configuration and HTML files belong in
+                ;; /share.
+                (mkdir-p share)
+                (rename-file (string-append out "/conf")
+                             (string-append share "/conf"))
+                (rename-file (string-append out "/html")
+                             (string-append share "/html"))))))))
     (home-page "https://nginx.org")
     (synopsis "HTTP and reverse proxy server")
     (description
@@ -471,9 +475,9 @@ and as a proxy to reduce the load on back-end HTTP or mail servers.")
 
 (define-public nginx-documentation
   ;; This documentation should be relevant for the current nginx package.
-  (let ((version "1.21.5")
-        (revision 2816)
-        (changeset "ae1d713a06e2"))
+  (let ((version "1.21.6")
+        (revision 2829)
+        (changeset "1ecf0e0526da"))
     (package
       (name "nginx-documentation")
       (version (simple-format #f "~A-~A-~A" version revision changeset))
@@ -485,7 +489,7 @@ and as a proxy to reduce the load on back-end HTTP or mail servers.")
                (file-name (string-append name "-" version))
                (sha256
                 (base32
-                 "03j85wj6qb32q5xhq9nvcjzarq98802gaq6n3f7k85aqj731bml0"))))
+                 "1r3y9wv4bhji5b16ljb557llf6ih3z2mzgwbia79h7223468w3fg"))))
       (build-system gnu-build-system)
       (arguments
        '(#:tests? #f                    ; no test suite
@@ -729,42 +733,42 @@ documentation.")
        ,@(package-inputs nginx)))
     (arguments
      (substitute-keyword-arguments
-         `(#:configure-flags '("--add-dynamic-module=.")
-           #:make-flags '("modules")
+         `(#:make-flags '("modules")
            #:modules ((guix build utils)
                       (guix build gnu-build-system)
                       (ice-9 popen)
                       (ice-9 regex)
                       (ice-9 textual-ports))
-           ,@(package-arguments nginx))
+           ,@(package-arguments nginx)
+           #:configure-flags '("--add-dynamic-module=."))
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'unpack-nginx-sources
-             (lambda* (#:key inputs native-inputs #:allow-other-keys)
-               (begin
-                 ;; The nginx source code is part of the module’s source.
-                 (format #t "decompressing nginx source code~%")
-                 (let ((tar (assoc-ref inputs "tar"))
-                       (nginx-srcs (assoc-ref inputs "nginx-sources")))
-                   (invoke (string-append tar "/bin/tar")
-                           "xvf" nginx-srcs "--strip-components=1"))
-                 #t)))
-           (add-before 'configure 'set-luajit-env
-             (lambda* (#:key inputs #:allow-other-keys)
-               (let ((luajit (assoc-ref inputs "luajit")))
-                 (setenv "LUAJIT_LIB"
-                         (string-append luajit "/lib"))
-                 (setenv "LUAJIT_INC"
-                         (string-append luajit "/include/luajit-2.1"))
-                 #t)))
-           (replace 'install
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((modules-dir (string-append (assoc-ref outputs "out")
-                                                 "/etc/nginx/modules")))
-                 (install-file "objs/ngx_http_lua_module.so" modules-dir)
-                 #t)))
-           (delete 'fix-root-dirs)
-           (delete 'install-man-page)))))
+        #~(modify-phases #$phases
+            (add-after 'unpack 'unpack-nginx-sources
+              (lambda* (#:key inputs native-inputs #:allow-other-keys)
+                (begin
+                  ;; The nginx source code is part of the module’s source.
+                  (format #t "decompressing nginx source code~%")
+                  (let ((tar (assoc-ref inputs "tar"))
+                        (nginx-srcs (assoc-ref inputs "nginx-sources")))
+                    (invoke (string-append tar "/bin/tar")
+                            "xvf" nginx-srcs "--strip-components=1"))
+                  #t)))
+            (add-before 'configure 'set-luajit-env
+              (lambda* (#:key inputs #:allow-other-keys)
+                (let ((luajit (assoc-ref inputs "luajit")))
+                  (setenv "LUAJIT_LIB"
+                          (string-append luajit "/lib"))
+                  (setenv "LUAJIT_INC"
+                          (string-append luajit "/include/luajit-2.1"))
+                  #t)))
+            (replace 'install
+              (lambda* (#:key outputs #:allow-other-keys)
+                (let ((modules-dir (string-append (assoc-ref outputs "out")
+                                                  "/etc/nginx/modules")))
+                  (install-file "objs/ngx_http_lua_module.so" modules-dir)
+                  #t)))
+            (delete 'fix-root-dirs)
+            (delete 'install-man-page)))))
     (synopsis "NGINX module for Lua programming language support")
     (description "This NGINX module provides a scripting support with Lua
 programming language.")))
@@ -789,34 +793,31 @@ programming language.")))
        ,@(package-inputs nginx)))
     (arguments
      (substitute-keyword-arguments
-         `(#:configure-flags '("--add-dynamic-module=.")
-           #:make-flags '("modules")
-           #:modules ((guix build utils)
-                      (guix build gnu-build-system))
+         `(#:make-flags '("modules") ;Only build this module not all of nginx.
            ,@(package-arguments nginx))
+       ((#:configure-flags flags)
+        #~(cons "--add-dynamic-module=." #$flags))
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'unpack-nginx-sources
-             (lambda* (#:key inputs native-inputs #:allow-other-keys)
-               (begin
-                 ;; The nginx source code is part of the module’s source.
-                 (format #t "decompressing nginx source code~%")
-                 (invoke "tar" "xvf" (assoc-ref inputs "nginx-sources")
-                         ;; This package's LICENSE file would be
-                         ;; overwritten with the one from nginx when
-                         ;; unpacking the nginx source, so rename the nginx
-                         ;; one when unpacking.
-                         "--transform=s,/LICENSE$,/LICENSE.nginx,"
-                         "--strip-components=1")
-                 #t)))
-           (replace 'install
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((modules-dir (string-append (assoc-ref outputs "out")
-                                                 "/etc/nginx/modules")))
-                 (install-file "objs/ngx_rtmp_module.so" modules-dir)
-                 #t)))
-           (delete 'fix-root-dirs)
-           (delete 'install-man-page)))))
+        #~(modify-phases #$phases
+            (add-after 'unpack 'unpack-nginx-sources
+              (lambda _
+                (begin
+                  ;; The nginx source code is part of the module’s source.
+                  (format #t "decompressing nginx source code~%")
+                  (invoke "tar" "xvf" #$(this-package-input "nginx-sources")
+                          ;; This package's LICENSE file would be
+                          ;; overwritten with the one from nginx when
+                          ;; unpacking the nginx source, so rename the nginx
+                          ;; one when unpacking.
+                          "--transform=s,/LICENSE$,/LICENSE.nginx,"
+                          "--strip-components=1"))))
+            (replace 'install
+              (lambda _
+                (let ((modules-dir (string-append #$output
+                                                  "/etc/nginx/modules")))
+                  (install-file "objs/ngx_rtmp_module.so" modules-dir))))
+            (delete 'fix-root-dirs)
+            (delete 'install-man-page)))))
     (home-page "https://github.com/arut/nginx-rtmp-module")
     (synopsis "NGINX module for audio and video streaming with RTMP")
     (description "This NGINX module provides streaming with the @acronym{RTMP,
@@ -830,7 +831,7 @@ stream.  Remote control of the module is possible over HTTP.")
 (define-public lighttpd
   (package
     (name "lighttpd")
-    (version "1.4.59")
+    (version "1.4.64")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://download.lighttpd.net/lighttpd/"
@@ -838,43 +839,51 @@ stream.  Remote control of the module is possible over HTTP.")
                                   "lighttpd-" version ".tar.xz"))
               (sha256
                (base32
-                "1mc421yrbnq3k6yrc708svp0fgcamrn5a0p2nvnhivysffr3v5gv"))))
+                "09hf3cp4ivy9a9z9drgi4f6d60137dcqncqw0wpbyvs9lygrsj71"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags
-       (list "--with-krb5"
-             "--with-ldap"
-             "--with-libev"
-             "--with-libunwind"
-             "--with-openssl"
-             "--with-pam"
-             "--with-sasl")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'embed-/bin/sh-reference
-           (lambda _
-             (substitute* "src/mod_ssi.c"
-               (("/bin/sh") (which "sh")))
-             #t))
-         (add-after 'unpack 'fix-tests
-           (lambda _
-             (setenv "SHELL" (which "sh"))
-             ;; gethostbyaddr fails
-             (substitute* "tests/LightyTest.pm"
-               (("\\{HOSTNAME\\} = \\$name;")
-                "{HOSTNAME} = \"127.0.0.1\";"))
-             #t)))))
+     (list #:configure-flags
+           #~(list "--with-krb5"
+                   "--with-ldap"
+                   "--with-libev"
+                   "--with-libunwind"
+                   "--with-openssl"
+                   "--with-pam"
+                   "--with-sasl")
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'embed-/bin/sh-reference
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (substitute* "src/mod_ssi.c"
+                     (("/bin/sh") (search-input-file inputs "/bin/sh")))))
+               (add-after 'unpack 'fix-tests
+                 (lambda _
+                   (setenv "SHELL" (which "sh"))
+                   ;; gethostbyaddr fails
+                   (substitute* "tests/LightyTest.pm"
+                     (("\\{HOSTNAME\\} = \\$name;")
+                      "{HOSTNAME} = \"127.0.0.1\";"))))
+               (add-after 'unpack 'skip-failing-tests
+                 ;; XXX It would be wonderful if you, reader, felt suddenly and
+                 ;; irresistibly compelled to investigate & fix these failures.
+                 (lambda _
+                   ;; Throws a bunch of ‘connect failed: Connection refused’.
+                   (delete-file "tests/mod-scgi.t")
+
+                   ;; test_mod_ssi_read_fd: Assertion `cq->first' failed.
+                   (substitute* "src/t/test_mod.c"
+                     ((".*\\btest_mod_ssi\\b.*") "")))))))
     (inputs
-     `(("cyrus-sasl" ,cyrus-sasl)
-       ("libev" ,libev)
-       ("libunwind" ,libunwind)
-       ("linux-pam" ,linux-pam)
-       ("mit-krb5" ,mit-krb5)
-       ("openldap" ,openldap)
-       ("openssl" ,openssl)
-       ("pcre" ,pcre)
-       ("pcre:bin" ,pcre "bin")
-       ("zlib" ,zlib)))
+     (list bash-minimal
+           cyrus-sasl
+           libev
+           libunwind
+           linux-pam
+           mit-krb5
+           openldap
+           openssl
+           pcre2
+           zlib))
     (native-inputs
      (list perl ; for tests
            pkg-config which))
@@ -2258,17 +2267,17 @@ instance of a component on each request.")
 (define-public perl-catalyst-devel
   (package
     (name "perl-catalyst-devel")
-    (version "1.41")
+    (version "1.42")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://cpan/authors/id/H/HA/HAARG/"
                            "Catalyst-Devel-" version ".tar.gz"))
        (sha256
-        (base32 "1r8arq7sw37d0mjyfzkc3pg1a9plgydqbscryc8qpvba4swpljls"))))
+        (base32 "1gcaqivyxwsdq87v9za1ijjibh6llirzqsbpwjbw1f5mravg1iky"))))
     (build-system perl-build-system)
     (native-inputs
-     (list perl-test-fatal))
+     (list perl-file-sharedir-install perl-test-fatal))
     (propagated-inputs
      (list perl-catalyst-action-renderview
            perl-catalyst-plugin-configloader
@@ -4643,33 +4652,9 @@ CDF, Atom 0.3, and Atom 1.0 feeds.")
     (license (list license:bsd-2           ; source code
                    license:freebsd-doc)))) ; documentation
 
-(define-public python2-feedparser
-  (package
-    (name "python2-feedparser")
-    (version "5.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "feedparser" version ".tar.bz2"))
-       (sha256
-        (base32
-         "00hb4qg2am06g81mygfi1jsbx8830024jm45g6qp9g8fr6am91yf"))))
-    (build-system python-build-system)
-    (arguments
-     `(#:tests? #f
-       #:python ,python-2))
-    (home-page
-     "https://github.com/kurtmckee/feedparser")
-    (synopsis "Parse feeds in Python")
-    (description
-     "Universal feed parser which handles RSS 0.9x, RSS 1.0, RSS 2.0,
-CDF, Atom 0.3, and Atom 1.0 feeds.")
-    (license (list license:bsd-2 ; source code
-                   license:freebsd-doc)))) ; documentation
-
 (define-public guix-data-service
-  (let ((commit "27c34a9ca5ea010f207a4acad597ce98e84d3567")
-        (revision "30"))
+  (let ((commit "198b6ef719745a48918e703990d1e846ffcd65b0")
+        (revision "31"))
     (package
       (name "guix-data-service")
       (version (string-append "0.0.1-" revision "." (string-take commit 7)))
@@ -4681,7 +4666,7 @@ CDF, Atom 0.3, and Atom 1.0 feeds.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1jjdvld3gp711dp8qd4rnhicbl7322jjzx4plizkg89k7j4x0xhx"))))
+                  "00ma74v9nrza5xpgpgr757hfdlp1cd9rnrpks99mqpjkz73sj1m6"))))
       (build-system gnu-build-system)
       (arguments
        '(#:modules ((guix build utils)
@@ -4889,10 +4874,14 @@ It uses the uwsgi protocol for all the networking/interprocess communications.")
     (inputs
      (list oniguruma))
     (native-inputs
-     (list ;; TODO fix gems to generate documentation
-           ;;("ruby" ,ruby)
-           ;;("bundler" ,bundler)
-           valgrind))
+     (append
+       ;; TODO: fix gems to generate documentation
+       ;(list ruby bundler)
+       '()
+       (if (member (%current-system)
+                   (package-supported-systems valgrind))
+         (list valgrind)
+         '())))
     (build-system gnu-build-system)
     (home-page "https://stedolan.github.io/jq/")
     (synopsis "Command-line JSON processor")
@@ -5537,6 +5526,12 @@ w3c webidl files and a binding configuration file.")
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
+         (add-after 'unpack 'remove-timestamps
+           ;; Avoid embedding timestamp for reproducible builds
+           (lambda _
+             (substitute* "utils/git-testament.pl"
+               (("WT_COMPILEDATE ..$compiledate")
+                "WT_COMPILEDATE \\\""))))
          (add-after 'build 'adjust-welcome
            (lambda _
              (substitute* "frontends/gtk/res/welcome.html"
@@ -6240,14 +6235,14 @@ inspired by Ruby's @code{fakeweb}.")
 (define-public jo
   (package
     (name "jo")
-    (version "1.4")
+    (version "1.6")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/jpmens/jo/releases/download/"
                            version "/jo-" version ".tar.gz"))
        (sha256
-        (base32 "18jna9xlpxci3cak3z85c448zv2zr41baclgym3hk433p0p4vii4"))))
+        (base32 "18fizi0368jgajrmy13xpdiks76jwch8lhx1d1sagmd63cpmj5gb"))))
     (build-system gnu-build-system)
     (home-page "https://github.com/jpmens/jo")
     (synopsis "Output JSON from a shell")
@@ -6365,9 +6360,6 @@ internetarchive python module for programmatic access to archive.org.")
 snippets on @url{https://commandlinefu.com}.")
       (license license:expat))))
 
-(define-public python2-clf
-  (package-with-python2 python-clf))
-
 (define-public rss-bridge
   (package
     (name "rss-bridge")
@@ -7710,14 +7702,27 @@ bookmarks directly.  It can also present them in a web interface with
 (define-public anonip
   (package
     (name "anonip")
-    (version "1.0.0")
+    (version "1.1.0")
+    ;; The version on PyPi does not include fixture definitions for tests.
     (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "anonip" version))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/DigitaleGesellschaft/Anonip")
+                    (commit "beab328945547b0147a53655f32c5cc76ab4488b")))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "0ckn9nnfhpdnz8b92q8pkysdqj6pdh71ckfqvfj0z01cq0hzbhd2"))))
+                "0cssdcridadjzichz1vv1ng7jwphqkn8ihh83hpz9mcjmxyb94qc"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "-vv" "tests.py" "anonip.py")))))))
+    (native-inputs
+     (list python-pytest python-pytest-cov))
     (home-page "https://github.com/DigitaleGesellschaft/Anonip")
     (synopsis "Anonymize IP addresses in log files")
     (description
@@ -7842,7 +7847,7 @@ solution for any project's interface needs:
 (define-public gmid
   (package
     (name "gmid")
-    (version "1.8.1")
+    (version "1.8.3")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -7850,7 +7855,7 @@ solution for any project's interface needs:
                     version "/gmid-" version ".tar.gz"))
               (sha256
                (base32
-                "0m4809mwy888bqsacmyck68grqfvynq74kswm109al6wjbvd61bn"))))
+                "1qbzlrzhyj7gvhgbm057zs1g5ajw1w6499qz61154v7ax8fwrdpp"))))
     (build-system gnu-build-system)
     (arguments
      (list #:test-target "regress"
@@ -7865,8 +7870,7 @@ solution for any project's interface needs:
                          coreutils
                          flex
                          pkg-config
-                         procps
-                         which))
+                         procps))
     (inputs (list libevent libressl))
     (home-page "https://git.omarpolo.com/gmid/about/")
     (synopsis "Simple and secure Gemini server")
@@ -8178,13 +8182,13 @@ Unicode.")
                   "1znvnr30xi5vgd6n3wvgv9pwj992zpzzjk0fmq28ydf1l6kqvkm7"))))
       (build-system gnu-build-system)
       (arguments
-       `(#:tests? #f ; no tests
-         #:make-flags
-         (list (string-append "CC=" ,(cc-for-target))
-               (string-append "PREFIX=" %output))
-         #:phases
-         (modify-phases %standard-phases
-           (delete 'configure)))) ; no configure script
+       (list #:tests? #f ; no tests
+             #:make-flags
+             #~(list (string-append "CC=" #$(cc-for-target))
+                     (string-append "PREFIX=" (assoc-ref %outputs "out")))
+             #:phases
+             #~(modify-phases %standard-phases
+                 (delete 'configure)))) ; no configure script
       (home-page "https://tools.suckless.org/quark/")
       (synopsis "Small and simple HTTP GET/HEAD-only web server for static
 content")
@@ -8197,3 +8201,40 @@ provided by a TLS reverse proxy (e.g. tlstunnel, hitch or stunnel).")
       ;; "cpe:2.3:a:comelz:quark" package.  The proper fix is for (guix cve)
       ;; to account for "vendor names".
       (properties '((lint-hidden-cve . ("CVE-2019-15520")))))))
+
+(define-public archivebox
+  (package
+    (name "archivebox")
+    (version "0.6.2")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri name version))
+              (sha256
+               (base32
+                "1mnq82ynq01l7vx957bbx4bvgwdh59qsnx6pdydaqszbakp74yyc"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list curl
+           node))
+    (inputs
+     (list python
+           youtube-dl
+           wget
+           git
+           python-w3lib
+           python-ipython
+           python-croniter
+           python-crontab
+           python-dateparser
+           python-django-extensions
+           python-django-3.1.14
+           python-mypy-extensions))
+    (native-inputs
+     (list python-wheel))
+    (synopsis "Self-hosted Web archiving")
+    (description "ArchiveBox is a powerful, self-hosted Web archiving
+solution to collect, save, and view sites you want to preserve offline.
+You can feed it URLs one at a time, or schedule regular imports.  It saves
+snapshots of the URLs you feed it in several formats.")
+    (home-page "https://archivebox.io/")
+    (license license:expat)))