~ruther/guix-local

ref: 3d2703cc075f4a06ab0d11bbd583aa348fdd6ec8 guix-local/gnu/packages/patches/hurd-startup.patch -rw-r--r-- 2.3 KiB
3d2703cc — Sharlatan Hellseher gnu: Add go-github-com-containerd-errdefs-pkg. 1 year, 1 month ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
This avoids hanging upon second boot and ensures a declarative /dev.

Upstream status: Not presented upstream.

From a15d281ea012ee360c45376e964d35f6292ac549 Mon Sep 17 00:00:00 2001
From: Janneke Nieuwenhuizen <janneke@gnu.org>
Date: Sat, 27 May 2023 17:28:22 +0200
Subject: [PATCH] startup: Remove /hurd, /dev, create /servers.

This avoids hanging upon second boot and ensures a declarative /hurd
and /dev.

* startup/startup.c (rm_r, create_servers): New functions.
(main): Use them to remove /dev and create /servers.  Remove /hurd
symlink.
---
 startup/startup.c | 42 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git a/startup/startup.c b/startup/startup.c
index feb7d265..5f380194 100644
--- a/startup/startup.c
+++ b/startup/startup.c
@@ -732,6 +732,42 @@ parse_opt (int key, char *arg, struct argp_state *state)
   return 0;
 }
 
+#include <ftw.h>
+static int
+rm_r (char const *file_name)
+{
+  int callback (char const *file_name, struct stat64 const *stat_buffer,
+                int type_flag, struct FTW *ftw_buffer)
+  {
+    fprintf (stderr, "startup: removing: %s\n", file_name);
+    return remove (file_name);
+  }
+
+  return nftw64 (file_name, callback, 0, FTW_DEPTH | FTW_MOUNT | FTW_PHYS);
+}
+
+void
+create_servers (void)
+{
+  char const *servers[] = {
+    "/servers/startup",
+    "/servers/exec",
+    "/servers/proc",
+    "/servers/password",
+    "/servers/default-pager",
+    "/servers/crash-dump-core",
+    "/servers/kill",
+    "/servers/suspend",
+    0,
+  };
+  mkdir ("/servers", 0755);
+  for (char const **p = servers; *p; p++)
+    open (*p, O_WRONLY | O_APPEND | O_CREAT, 0444);
+  mkdir ("/servers/socket", 0755);
+  mkdir ("/servers/bus", 0755);
+  mkdir ("/servers/bus/pci", 0755);
+}
+
 int
 main (int argc, char **argv, char **envp)
 {
@@ -741,6 +777,12 @@ main (int argc, char **argv, char **envp)
   mach_port_t consdev;
   struct argp argp = { options, parse_opt, 0, doc };
 
+  /* GNU Guix creates fresh ones in boot-hurd-system. */
+  unlink ("/hurd");
+  rm_r ("/dev");
+  mkdir ("/dev", 0755);
+  create_servers ();
+
   /* Parse the arguments.  We don't want the vector reordered, we
      should pass on to our child the exact arguments we got and just
      ignore any arguments that aren't flags for us.  ARGP_NO_ERRS
-- 
2.40.1