mirror of
https://git.savannah.gnu.org/git/guix.git
synced 2025-01-31 14:56:54 +01:00
b25d2ad5c7
This avoids hanging upon second boot and ensures a declarative /hurd and /dev. * gnu/packages/patches/hurd-startup.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/hurd.scm (hurd): Use it. [arguments]: In stage create-runsystem remove /dev/urandom. Change-Id: Ifcca5562c297204735c35132820a32ca0f273677
82 lines
2.3 KiB
Diff
82 lines
2.3 KiB
Diff
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
|
|
|