summaryrefslogtreecommitdiff
path: root/debian/patches/tmp_exec_startup.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/tmp_exec_startup.patch')
-rw-r--r--debian/patches/tmp_exec_startup.patch54
1 files changed, 54 insertions, 0 deletions
diff --git a/debian/patches/tmp_exec_startup.patch b/debian/patches/tmp_exec_startup.patch
new file mode 100644
index 00000000..bd605718
--- /dev/null
+++ b/debian/patches/tmp_exec_startup.patch
@@ -0,0 +1,54 @@
+Also try /tmp/exec as it's used for installation.
+
+TODO: not used by d-i. Is it used by crosshurd?
+---
+ libdiskfs/boot-start.c | 24 ++++++++++++++++++++----
+ 1 file changed, 20 insertions(+), 4 deletions(-)
+
+--- a/libdiskfs/boot-start.c
++++ b/libdiskfs/boot-start.c
+@@ -126,8 +126,13 @@ diskfs_start_bootstrap ()
+ assert (_hurd_ports);
+ assert (_hurd_ports[INIT_PORT_CRDIR].port != MACH_PORT_NULL);
+ diskfs_exec = file_name_lookup (_SERVERS_EXEC, 0, 0);
+- if (diskfs_exec == MACH_PORT_NULL)
+- error (1, errno, "%s", _SERVERS_EXEC);
++ if (diskfs_exec == MACH_PORT_NULL)
++ {
++ /* Debian specifc work-around for install bootstrapping. */
++ diskfs_exec = file_name_lookup ("/tmp/exec", 0, 0);
++ if (diskfs_exec == MACH_PORT_NULL)
++ error (1, errno, "%s", _SERVERS_EXEC);
++ }
+ else
+ {
+ #ifndef NDEBUG
+@@ -177,8 +182,15 @@ diskfs_start_bootstrap ()
+ &retry, pathbuf, &execnode);
+ if (err)
+ {
+- error (0, err, "cannot set translator on %s", _SERVERS_EXEC);
+- mach_port_deallocate (mach_task_self (), diskfs_exec_ctl);
++ /* If /servers/exec is not available (which is the case during
++ installation, try /tmp/exec as well. */
++ err = dir_lookup (root_pt, "/tmp/exec", O_NOTRANS, 0,
++ &retry, pathbuf, &execnode);
++ if (err)
++ {
++ error (0, err, "cannot set translator on %s", _SERVERS_EXEC);
++ mach_port_deallocate (mach_task_self (), diskfs_exec_ctl);
++ }
+ }
+ else
+ {
+@@ -393,6 +405,10 @@ diskfs_execboot_fsys_startup (mach_port_
+
+ err = dir_lookup (rootport, _SERVERS_EXEC, flags|O_NOTRANS, 0,
+ &retry, pathbuf, real);
++ if (err)
++ /* Try /tmp/exec as well, in case we're installing. */
++ err = dir_lookup (rootport, "/tmp/exec", flags|O_NOTRANS|O_CREAT, 0,
++ &retry, pathbuf, real);
+ assert_perror (err);
+ assert (retry == FS_RETRY_NORMAL);
+ assert (pathbuf[0] == '\0');