Commit graph

162840 commits

Author SHA1 Message Date
Reepca Russelstein
c659f977bb
daemon: add seccomp filter for slirp4netns.
The container that slirp4netns runs in should already be quite difficult to do
anything malicious in beyond basic denial of service or sending of network
traffic.  There is, however, one hole remaining in the case in which there is
an adversary able to run code locally: abstract unix sockets.  Because these
are governed by network namespaces, not IPC namespaces, and slirp4netns is in
the root network namespace, any process in the root network namespace can
cooperate with the slirp4netns process to take over its user.

To close this, we use seccomp to block the creation of unix-domain sockets by
slirp4netns.  This requires some finesse, since slirp4netns absolutely needs
to be able to create other types of sockets - at minimum AF_INET and AF_INET6

Seccomp has many, many pitfalls.  To name a few:

1. Seccomp provides you with an "arch" field, but this does not uniquely
   determine the ABI being used; the actual meaning of a system call number
   depends on both the number (which is often the result of ORing a related
   system call with a flag for an alternate ABI) and the architecture.

2. Seccomp provides no direct way of knowing what the native value for the
   arch field should be; the user must do configure/compile-time testing for
   every architecture+ABI combination they want to support.  Amusingly enough,
   the linux-internal header files have this exact information
   (SECCOMP_ARCH_NATIVE), but they aren't sharing it.

3. The only system call numbers we naturally have are the native ones in
   asm/unistd.h.  __NR_socket will always refer to the system call number for
   the target system's ABI.

4. Seccomp can only manipulate 32-bit words, but represents every system call
   argument as a uint64.

5. New system call numbers with as-yet-unknown semantics can be added to the
   kernel at any time.

6. Based on this comment in arch/x86/entry/syscalls/syscall_32.tbl:

   # 251 is available for reuse (was briefly sys_set_zone_reclaim)

   previously-invalid system call numbers may later be reused for new system
   calls.

7. Most architecture+ABI combinations have system call tables with many gaps
   in them.  arm-eabi, for example, has 35 such gaps (note: this is just the
   number of distinct gaps, not the number of system call numbers contained in
   those gaps).

8. Seccomp's BPF filters require a fully-acyclic control flow graph.
   Any operation on a data structure must therefore first be fully
   unrolled before it can be run.

9. Seccomp cannot dereference pointers.  Only the raw bits provided to the
   system calls can be inspected.

10. Some architecture+ABI combos have multiplexer system calls.  For example,
    socketcall can perform any socket-related system call.  The arguments to
    the multiplexed system call are passed indirectly, via a pointer to user
    memory.  They therefore cannot be inspected by seccomp.

11. Some valid system calls are not listed in any table in the kernel source.
    For example, __ARM_NR_cacheflush is an "ARM private" system call.  It does
    not appear in any *.tbl file.

12. Conditional branches are limited to relative jumps of at most 256
    instructions forward.

13. Prior to Linux 4.8, any process able to spawn another process and call
    ptrace could bypass seccomp restrictions.

To address (1), (2), and (3), we include preprocessor checks to identify the
native architecture value, and reject all system calls that don't use the
native architecture.

To address (4), we use the AC_C_BIGENDIAN autoconf check to conditionally
define WORDS_BIGENDIAN, and match up the proper portions of any uint64 we test
for with the value in the accumulator being tested against.

To address (5) and (6), we use system call pinning.  That is, we hardcode a
snapshot of all the valid system call numbers at the time of writing, and
reject any system call numbers not in the recorded set.  A set is recorded for
every architecture+ABI combo, and the native one is chosen at compile-time.
This ensures that not only are non-native architectures rejected, but so are
non-native ABIs.  For the sake of conciseness, we represent these sets as sets
of disjoint ranges.  Due to (7), checking each range in turn could add a lot
of overhead to each system call, so we instead binary search through the
ranges.  Due to (8), this binary search has to be fully unrolled, so we do
that too.

It can be tedious and error-prone to manually produce the syscall ranges by
looking at linux's *.tbl files, since the gaps are often small and
uncommented.  To address this, a script, build-aux/extract-syscall-ranges.sh,
is added that will produce them given a *.tbl filename and an ABI regex (some
tables seem to abuse the ABI field with strange values like "memfd_secret").
Note that producing the final values still requires looking at the proper
asm/unistd.h file to find any private numbers and to identify any offsets and
ABI variants used.

(10) used to have no good solution, but in the past decade most architectures
have gained dedicated system call alternatives to at least socketcall, so we
can (hopefully) just block it entirely.

To address (13), we block ptrace also.

* build-aux/extract-syscall-ranges.sh: new script.
* Makefile.am (EXTRA_DIST): register it.
* config-daemon.ac: use AC_C_BIGENDIAN.
* nix/libutil/spawn.cc (setNoNewPrivsAction, addSeccompFilterAction): new
  functions.
* nix/libutil/spawn.hh (setNoNewPrivsAction, addSeccompFilterAction): new
  declarations.
  (SpawnContext)[setNoNewPrivs, addSeccompFilter]: new fields.
* nix/libutil/seccomp.hh: new header file.
* nix/libutil/seccomp.cc: new file.
* nix/local.mk (libutil_a_SOURCES, libutil_headers): register them.
* nix/libstore/build.cc (slirpSeccompFilter, writeSeccompFilterDot):
  new functions.
  (spawnSlirp4netns): use them, set seccomp filter for slirp4netns.

Change-Id: Ic92c7f564ab12596b87ed0801b22f88fbb543b95
Signed-off-by: John Kehayias <john.kehayias@protonmail.com>
2025-06-24 10:07:58 -04:00
Reepca Russelstein
fb42611b8f
daemon: Use slirp4netns to provide networking to fixed-output derivations.
Previously, the builder of a fixed-output derivation could communicate with an
external process via an abstract Unix-domain socket.  In particular, it could
send an open file descriptor to the store, granting write access to some of
its output files in the store provided the derivation build fails—the fix for
CVE-2024-27297 did not address this specific case.  It could also send an open
file descriptor to a setuid program, which could then be executed using
execveat to gain the privileges of the build user.

With this change, fixed-output derivations other than “builtin:download”
and “builtin:git-download” always run in a separate network namespace
and have network access provided by a TAP device backed by slirp4netns,
thereby closing the abstract Unix-domain socket channel.

* nix/libstore/globals.hh (Settings)[useHostLoopback, slirp4netns]: new
fields.
* config-daemon.ac (SLIRP4NETNS): new C preprocessor definition.
* nix/libstore/globals.cc (Settings::Settings): initialize them to defaults.
* nix/nix-daemon/guix-daemon.cc (options): add --isolate-host-loopback option.
* doc/guix.texi: document it.
* nix/libstore/build.cc (DerivationGoal)[slirp]: New field.
(setupTap, setupTapAction, waitForSlirpReadyAction, enableRouteLocalnetAction,
 prepareSlirpChrootAction, spawnSlirp4netns, haveGlobalIPv6Address,
 remapIdsTo0Action): New functions.
(initializeUserNamespace): allow the guest UID and GID to be specified.
(DerivationGoal::killChild): When ‘slirp’ is not -1, call ‘kill’.
(DerivationGoal::startBuilder): Unconditionally add CLONE_NEWNET to FLAGS.
When ‘fixedOutput’ is true, spawn ‘slirp4netns’.
When ‘fixedOutput’ and ‘useChroot’ are true, add setupTapAction,
waitForSlirpReadyAction, and enableRouteLocalnetAction to builder setup
phases.
Create a /etc/resolv.conf for fixed-output derivations that directs them to
slirp4netns's dns address.
When settings.useHostLoopback is true, supply fixed-output derivations with a
/etc/hosts that resolves "localhost" to slirp4netns's address for accessing
the host loopback.
* nix/libutil/util.cc (keepOnExec, decodeOctalEscaped, sendFD, receiveFD,
  findProgram): New functions.
* nix/libutil/util.hh (keepOnExec, decodeOctalEscaped, sendFD, receiveFD,
  findProgram): New declarations.
* gnu/packages/package-management.scm (guix): add slirp4netns input for linux
  targets.
* tests/derivations.scm (builder-network-isolated?): new variable.
  ("fixed-output derivation, network access, localhost", "fixed-output
  derivation, network access, external host"):
  skip test case if fixed output derivations are isolated from the network.

Change-Id: Ia3fea2ab7add56df66800071cf15cdafe7bfab96
Signed-off-by: John Kehayias <john.kehayias@protonmail.com>
2025-06-24 10:07:57 -04:00
Reepca Russelstein
be8aca0651
daemon: add and use spawn.cc and spawn.hh.
This adds a mechanism for manipulating and running "spawn phases" similarly to
how builder-side code manipulates "build phases".  The main difference is that
spawn phases take a (reference to a) single structure that they can both read
from and write to, with their writes being visible to subsequent phases.  The
base structure type for this is SpawnContext.

It also adds some predefined phase sequences, namely basicSpawnPhases and
cloneSpawnPhases, and exposes each of the actions performed by these phases.

Finally, it modifies build.cc to replace runChild() with use of this new code.

* nix/libutil/util.cc (keepOnExec, waitForMessage): new functions.
* nix/libutil.util.hh (keepOnExec, waitForMessage): add prototypes.
* nix/libutil/spawn.cc, nix/libutil/spawn.hh: new files.
  (addPhaseAfter, addPhaseBefore, prependPhase, appendPhase, deletePhase,
  replacePhase, reset_writeToStderrAction, restoreAffinityAction,
  setsidAction, earlyIOSetupAction, dropAmbientCapabilitiesAction,
  chrootAction, chdirAction, closeMostFDsAction, setPersonalityAction,
  oomSacrificeAction, setIDsAction, restoreSIGPIPEAction, setupSuccessAction,
  execAction, getBasicSpawnPhases, usernsInitSyncAction, usernsSetIDsAction,
  initLoopbackAction, setHostAndDomainAction, makeFilesystemsPrivateAction,
  makeChrootSeparateFilesystemAction, statfsToMountFlags, bindMount,
  mountIntoChroot, mountIntoChrootAction, mountProcAction, mountDevshmAction,
  mountDevptsAction, pivotRootAction, lockMountsAction, getCloneSpawnPhases,
  runChildSetup, runChildSetupEntry, cloneChild, idMapToIdentityMap,
  unshareAndInitUserns): new procedures.
* nix/local.mk (libutil_a_SOURCES): add spawn.cc.
  (libutil_headers): add spawn.hh.
* nix/libstore/build.cc (restoreSIGPIPE, DerivationGoal::runChild,
  childEntry): removed procedures.
  (DerivationGoal::{dirsInChroot,env,readiness}): removed.
  (execBuilderOrBuiltin, execBuilderOrBuiltinAction,
  clearRootWritePermsAction): new procedures.
  (DerivationGoal::startBuilder): modified to use a CloneSpawnContext if
  chroot builds are available, otherwise a SpawnContext.

Change-Id: Ifd50110de077378ee151502eda62b99973d083bf

Change-Id: I76e10d3f928cc30566e1e6ca79077196972349f8

spawn.cc, util.cc, util.hh changes

Change-Id: I287320e63197cb4f65665ee5b3fdb3a0e125ebac
Signed-off-by: John Kehayias <john.kehayias@protonmail.com>
2025-06-24 10:07:56 -04:00
Reepca Russelstein
7173c2c0ca
daemon: Implement ‘deletePath’ in terms of the *at functions.
deletePath needs to be able to operate securely in unfriendly environments,
where adversaries may be concurrently modifying the files being operated on.
For example, directories that we are currently recursing through may be
replaced with symbolic links.

We err on the side of early failure here: if a file or directory is
concurrently modified in a way that causes one of the system calls to fail, we
throw an exception immediately instead of trying to adapt to the change.

Note that we use fstat instead of fstatat for verifying the directory's
st_mode field because AT_EMPTY_PATH is linux-specific.

* nix/libutil/util.cc (_deletePathAt): new procedure.
(_deletePath): use it.

Change-Id: I7ccfe6f1f74dbab95617b24034494e0f63030582
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
Signed-off-by: John Kehayias <john.kehayias@protonmail.com>
2025-06-24 10:07:55 -04:00
Ludovic Courtès
a183afa8e2
tests: Test network access from fixed-output derivations.
* tests/derivations.scm ("fixed-output derivation, network access, localhost")
("fixed-output derivation, network access, external host"): New tests.

Change-Id: Iec164981a12ffef1bcb6a63ed9c2f1f363c53d80
Signed-off-by: John Kehayias <john.kehayias@protonmail.com>
2025-06-24 10:07:52 -04:00
Yelninei
6f1c5aed8a
gnu: screen: Fix build with gcc-14.
* gnu/packages/screen.scm (screen):
[#:configure-flags]: Add -Wno-error=int-conversions and
-Wno-error=incompatible-pointer-types to CFLAGS.

Change-Id: I14166477ff104ed1e64b9deebb89e032b50f69f9
Signed-off-by: Zheng Junjie <z572@z572.online>
2025-06-24 21:42:16 +08:00
fanquake
8e874ded5c
gnu: mingw-w64-tools: Update to 13.0.0.
* gnu/packages/mingw.scm (mingw-w64-tools): Update to 13.0.0.

Change-Id: Ie83c32f24eb6028864c96267b48a795a266269cf
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-24 12:54:25 +01:00
fanquake
a1d2015184
gnu: mingw-w64: Update to 13.0.0.
* gnu/packages/mingw.scm (make-mingw-w64): Update to 13.0.0.

Change-Id: I5d4f639c20828202eca82a396588fcde6d79511d
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-24 12:54:21 +01:00
Dariqq
141f96127e
gnu: power-profiles-daemon: Update to 0.30.
Fixing #506.

* gnu/packages/freedesktop.scm (power-profiles-daemon): Update to 0.30.
[#:phases]: In 'wrap-program add GI_TYPELIB_PATH to the wrapper.

Change-Id: Ie5d45a8326d8925a5fb790c8effb6365a82e1b71
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-24 12:48:39 +01:00
Ashish SHUKLA
63405dce98
gnu: libcgroup: Update to 3.2.0.
* gnu/packages/linux.scm (libcgroup): Update to 3.2.0.

Change-Id: Ib92d482f15af39d6e908414c345b3677479c3288
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-24 12:44:52 +01:00
Sharlatan Hellseher
9f31f50ad3
gnu: python-cantools: Update to 40.2.3.
Fixing #787.

* gnu/packages/python-xyz.scm (python-cantools): Update to 40.2.3.
[arguments] <phases>: Remove 'build-doc and 'install-doc; add
'set-version.
[propagated-inputs]: Remove python-parameterized.
[native-inputs]: Remove python-sphinx and texinfo; add
python-parameterized, python-pytest, python-setuptools,
python-setuptools-scm, and python-wheel.

Change-Id: I57b20e8df1406795c8a22a38bec470e6294dabbf
2025-06-24 12:38:21 +01:00
Sharlatan Hellseher
8a8da2a0f4
gnu: python-bitstruct: Update to 8.21.0.
* gnu/packages/python-xyz.scm (python-bitstruct): Update to 8.21.0.
[build-system]: Use pyproject.
[native-inputs]: Add python-pytest, python-setuptools-next, and
python-wheel.
[description]: Start from a new line, apply fill-column indentation.

Change-Id: I669b99d5687d173e9d9667d3e7339a2d5bf62006
2025-06-24 12:38:21 +01:00
Maxim Cournoyer
c1d307d80a
gnu: Add emacs-defaultencrypt.
* gnu/packages/emacs-xyz.scm (emacs-defaultencrypt): New variable.
(emacs-default-encrypt): Mark it as deprecated by the above.

Change-Id: I391e8edb489aa463344401fd691727734a47e428
Signed-off-by: Andreas Enge <andreas@enge.fr>
2025-06-24 12:10:18 +02:00
Cayetano Santos
04d8217436
gnu: pass-tomb: Correct completions path.
* gnu/packages/password-utils.scm (pass-tomb): Correct completions path.

Change-Id: I487b723e3e8f5616001d80491bf595c48b0a46e2
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-24 10:54:14 +01:00
Cayetano Santos
b46e2f8012
gnu: pass-tomb: Use G-expressions.
* gnu/packages/password-utils.scm (pass-tomb): Use G-expressions.

Change-Id: Ic0eae41184d0beffe08caa47c3cafdcb58fa7480
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-24 10:54:05 +01:00
Cayetano Santos
09950f17e7
gnu: pass-tomb: Update to 1.3-0.f4f34f4.
* gnu/packages/password-utils.scm (pass-tomb): Update to 1.3-0.f4f34f4.

Change-Id: I45ead3c1e8475d38e76627f334afc2eb7440c8ec
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-24 10:53:39 +01:00
Maxim Cournoyer
51533dfc9b
gnu: Add git-repo-go.
* gnu/packages/version-control.scm (git-repo-go): New variable.

Change-Id: I8b7b45bdd24eabf8f30cb4febeb9338ffadbb0d9
Modified-by: Sharlatan Hellseher <sharlatanus@gmail.com>
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-24 10:50:08 +01:00
Maxim Cournoyer
13d4df966c
gnu: Add go-github-com-h2non-gock.
* gnu/packages/golang-check.scm (go-github-com-h2non-gock): New variable.

Change-Id: I9d441873043d474110c3e723222da2ef02bed9a0
Modified-by: Sharlatan Hellseher <sharlatanus@gmail.com>
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-24 10:35:29 +01:00
Maxim Cournoyer
ceb72c6a40
gnu: Add go-github-com-nbio-st.
* gnu/packages/golang-check.scm (go-github-com-nbio-st): New variable.

Change-Id: I7a2b0d463c5a8d784b6e50814eacb45352cda590
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-24 10:30:06 +01:00
Maxim Cournoyer
99ff113083
gnu: Add go-github-com-h2non-parth.
* gnu/packages/golang-xyz.scm (go-github-com-h2non-parth): New variable.

Change-Id: I5ef3d0b600295aef0764de93363c01a8c27822a5
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-24 10:30:06 +01:00
Maxim Cournoyer
e869996a33
gnu: Add go-github-com-jiangxin-multi-log.
* gnu/packages/golang-xyz.scm (go-github-com-jiangxin-multi-log): New variable.

Change-Id: I0dea0ad989acfca443c836dedc7abdc5a2ae6332
Modified-by: Sharlatan Hellseher <sharlatanus@gmail.com>
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-24 10:30:00 +01:00
Maxim Cournoyer
b586469706
gnu: Add go-github-com-jiangxin-goconfig.
* gnu/packages/golang-vcs.scm (go-github-com-jiangxin-goconfig): New variable.

Change-Id: I16784102273da77fb76697c3344e4912e83cb30f
Modified-by: Sharlatan Hellseher <sharlatanus@gmail.com>
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-24 10:26:34 +01:00
Maxim Cournoyer
847b3dacd3
gnu: Add go-github-com-jiu2015-gotestspace.
* gnu/packages/golang-check.scm (go-github-com-jiu2015-gotestspace): New variable.

Change-Id: I4a7c627f14eb5d392c66a04e8e2c2aef7ca8921f
Modified-by: Sharlatan Hellseher <sharlatanus@gmail.com>
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-24 10:20:41 +01:00
Ashish SHUKLA
2b179d6a86
gnu: zfs: Update to 2.3.3.
* gnu/packages/file-systems.scm (zfs): Update to 2.3.3.

Change-Id: If6afca963e4de757d6163e2247a18e08f374c941
Signed-off-by: Zheng Junjie <z572@z572.online>
2025-06-24 14:46:56 +08:00
jgart
5c779b837c
gnu: lem: Update to 0025e1c.
* gnu/packages/text-editors.scm (lem): Update to 0025e1c.

Change-Id: I02ef7ea08ec985845eba16afcad1fc56b593b5f7
2025-06-24 02:42:23 -04:00
Mark Walker
4def93b9d4
gnu: Add ghc-hcodecs.
* gnu/packages/haskell-xyz.scm (ghc-hcodecs): New variable.

Change-Id: I3b03f9eb430e076f1055f17e28ae161925795c56
Signed-off-by: jgart <jgart@dismail.de>
2025-06-24 02:37:04 -04:00
jgart
e6dfa60b0b
gnu: trealla: Update to 2.75.0.
* gnu/packages/prolog.scm (trealla): Update to 2.75.0.

Change-Id: I29748a9864eee07d698e055eab50a3c458b2814c
2025-06-24 02:37:04 -04:00
Anderson Torres
9e5644ae68
gnu: icewm: Update to 3.8.0.
* gnu/packages/wm.scm (icewm): Update to 3.8.0.

Change-Id: I446a5a4b3ac4e53837cbd9b2d20caf8a893a68dc
Signed-off-by: Zheng Junjie <z572@z572.online>
2025-06-24 14:13:10 +08:00
Janneke Nieuwenhuizen
994b24e875
gnu: gcc-14: Update to 14.3.0.
* gnu/packages/gcc.scm (gcc-14): Update to 14.3.0.

Change-Id: I50b3c47f1e1c80129e2aee7a37e0fa6c57a3f9fc
Signed-off-by: Zheng Junjie <z572@z572.online>
2025-06-24 09:28:11 +08:00
Adrien 'neox' Bourmault
5d96ad23ed
gnu: speed-dreams: Update to 2.4.2.
* gnu/packages/games.scm (speed-dreams): Update to 2.4.2.

Change-Id: I7f9eb4ac45faa098da323ea3d9a9402e0a410bb2
Signed-off-by: Adrien 'neox' Bourmault <neox@gnu.org>
Signed-off-by: jgart <jgart@dismail.de>
2025-06-23 20:11:30 -04:00
Adrien 'neox' Bourmault
292faf9484
gnu: speed-dreams-data: Update to 2.4.2.
* gnu/packages/games.scm (speed-dreams-data): Update to 2.4.2.

Change-Id: I78207633d2a9eec0f8a1df5faa9d336ba6d19ab2
Signed-off-by: Adrien 'neox' Bourmault <neox@gnu.org>
Signed-off-by: jgart <jgart@dismail.de>
2025-06-23 20:11:30 -04:00
Maxim Cournoyer
256cbc1347
gnu: Add pls.
* gnu/packages/perl.scm (pls): New variable.

Change-Id: I76938567bbaedf355a49fb84e4d5964cea253d09
Signed-off-by: jgart <jgart@dismail.de>
2025-06-23 20:06:59 -04:00
Maxim Cournoyer
3f91b6221e
gnu: Add perl-tidy.
* gnu/packages/perl.scm (perl-tidy): New variable.

Change-Id: Ie5a7686c64331119d4432d001630eb29df10e4fe
Signed-off-by: jgart <jgart@dismail.de>
2025-06-23 20:06:59 -04:00
Maxim Cournoyer
89274de654
gnu: Add perl-io-async.
* gnu/packages/perl.scm (perl-io-async): New variable.

Change-Id: Ib44bcdfaef11ee81898aca8be30d59a3369575d5
Signed-off-by: jgart <jgart@dismail.de>
2025-06-23 20:06:59 -04:00
Maxim Cournoyer
ee9982cec1
gnu: Add perl-future-queue.
* gnu/packages/perl.scm (perl-future-queue): New variable.

Change-Id: I18203e511e09f928e19f2813e23e6adc486211c7
Signed-off-by: jgart <jgart@dismail.de>
2025-06-23 20:06:59 -04:00
Maxim Cournoyer
be65fc39fb
gnu: Add perl-future.
* gnu/packages/perl.scm (perl-future): New variable.

Change-Id: Idf22bd2ba31c01da6bee9756f5fba337e8f7aedb
Signed-off-by: jgart <jgart@dismail.de>
2025-06-23 20:06:59 -04:00
Maxim Cournoyer
a2723f3c94
gnu: Add perl-test-metrics-any.
* gnu/packages/perl-check.scm (perl-test-metrics-any): New variable.

Change-Id: Ief6b39d8a48907df8a2f0c34b09462ad3eba17ca
Signed-off-by: jgart <jgart@dismail.de>
2025-06-23 20:06:58 -04:00
Maxim Cournoyer
db4d3110b4
gnu: Add perl-test-future-io-impl.
* gnu/packages/perl-check.scm (perl-test-future-io-impl): New variable.

Change-Id: I7e3421f12c5f62ad3da2da13b01d40431736498c
Signed-off-by: jgart <jgart@dismail.de>
2025-06-23 20:06:58 -04:00
Maxim Cournoyer
071de28f36
gnu: Add perl-struct-dumb.
* gnu/packages/perl-check.scm (perl-struct-dumb): New variable.

Change-Id: Id5e384d1b174b0626cff093d43e18e551a67df73
Signed-off-by: jgart <jgart@dismail.de>
2025-06-23 20:06:58 -04:00
Maxim Cournoyer
84929efaba
gnu: Add perl-metrics-any.
* gnu/packages/perl.scm (perl-metrics-any): New variable.

Change-Id: I0df9c005d5cf8d0214c52bce9c504c7d2de8d5fe
Signed-off-by: jgart <jgart@dismail.de>
2025-06-23 20:06:58 -04:00
Maxim Cournoyer
597119f739
gnu: Add perl-pod-markdown.
* gnu/packages/perl.scm (perl-pod-markdown): New variable.

Change-Id: Ic298dbd9a1257d7d7cfb66d61897fa972c1078e2
Signed-off-by: jgart <jgart@dismail.de>
2025-06-23 20:06:58 -04:00
Maxim Cournoyer
87b786649a
gnu: Add perl-ppr.
* gnu/packages/perl.scm (perl-ppr): New variable.

Change-Id: I9a0ea9aa0c7eb6fb4faad3bac717b69e019d45aa
Signed-off-by: jgart <jgart@dismail.de>
2025-06-23 20:06:58 -04:00
Danny Milosavljevic
fd256bb786
gnu: mono@2.4.2.3: Make it reproducible.
* gnu/packages/patches/mono-2.4.2.3-fix-parallel-builds.patch: New file.
* gnu/packages/patches/mono-2.4.2.3-reproducibility.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add references to those patches.
* gnu/packages/dotnet.scm (mono-2.4.2.3)[source]: Use those patches.
[arguments]<#:phases>[disable-mono-mini-timestamps]: New phase.

Change-Id: Ib0a57d2e93b8b72c10fa9854a77eadeee578266c
Reviewed-by: Ludovic Courtès <ludo@gnu.org>
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-23 23:05:44 +01:00
Danny Milosavljevic
4f10384b54
gnu: mono@1.9.1: Make it reproducible.
* gnu/packages/patches/mono-1.9.1-reproducibility.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it.
* gnu/packages/dotnet.scm (mono-1.9.1)[source]: Add it.
[arguments]<#:make-flags>: Add NO_SIGN_ASSEMBLY.
<#:phases>[delete-mdb]: New phase.
[disable-signing]: New phase.

Change-Id: I094692a1aa74d7737fa781e88582e8a0a3a27dbb
Reviewed-by: Ludovic Courtès <ludo@gnu.org>
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-23 23:05:27 +01:00
Nico Rikken
d0ba40a7a5
gnu: ansel: Update to 0.0.0-1.b51cfa3.
* gnu/packages/photo.scm (ansel): Update to 0.0.0-1.b51cfa3.
[source]: Omit the redundant .git suffix.

Change-Id: Ied9b4acada8c18543a251dd74eb402d2deffb4c6
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-23 21:56:53 +01:00
John Kehayias
14fb6ad4bf
gnu: pass-git-helper: Update to 3.3.0.
* gnu/packages/password-utils.scm (pass-git-helper): Update to 3.3.0.
[build-system]: Switch to pyproject-build-system.
[arguments]<#phases>: Don't replace check phase but make a pre-check phase to
just to set HOME.
[native-inputs]: Add python-pytest-cov, python-setuptools, and python-wheel.

Change-Id: I2d06c647b6edd7ec83d611b398ca3faa6a22480c
2025-06-23 16:55:07 -04:00
Thomas Zdyrski
c16785a11e
gnu: perl-pdf-api2: Update to 2.047.
* gnu/packages/perl.scm (perl-pdf-api2): Update to 2.047.

Change-Id: Ifb756e19c1525cb7d2609a2680ab4ac59d12f602
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-23 21:11:37 +01:00
Cayetano Santos
7876cc4480
gnu: tomb: Update to 2.11.
* gnu/packages/crypto.scm (tomb): Update to 2.11. Use G-expressions.
[home-page]: Fix URL.
[phases]{check}: Respect #:tests? parameter.
[native-inputs]: Remove sudo; add which. Remove labels.
[inputs]: Add argon2. Remove labels.

Change-Id: I01c24feac7f5b9088469f0f3ac982557293223db
Modified-by: Sharlatan Hellseher <sharlatanus@gmail.com>
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-23 21:05:06 +01:00
Danny Milosavljevic
6f71a2a3a0
gnu: emacs-aio: Source from maintained fork.
The upstream emacs-aio repository is unmaintained with numerous open
issues.  Notably, native compilation is broken on Emacs 30.  Change the
package source to a fork merging several open PRs and fixing native
compilation.

* gnu/packages/emacs-xyz.scm (emacs-aio)[source]: Switch to recent fork.

Change-Id: Idc6a344595690bf7688c7571abd67b1c5a81faa0
2025-06-23 21:56:11 +02:00
Ashish SHUKLA
43de32782f
gnu: tuxedo-keyboard: Update to 4.14.1.
* gnu/packages/linux.scm (tuxedo-keyboard): Update to 4.14.1.

Change-Id: Ie2da4824051bd7fb14e0a52acf808e9dcecc5e30
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2025-06-23 20:44:16 +01:00