~ruther/guix-local

ref: 64668f7c15fa639831209f25e313c99a1047de7b guix-local/gnu/packages/patches/hurd-startup.patch -rw-r--r-- 2.3 KiB
64668f7c — Rutherther etc: release: Add spare space to the release VM image. a 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