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(-) Index: hurd-debian/libdiskfs/boot-start.c =================================================================== --- hurd-debian.orig/libdiskfs/boot-start.c +++ hurd-debian/libdiskfs/boot-start.c @@ -130,8 +130,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 @@ -181,8 +186,15 @@ diskfs_start_bootstrap () &retry, retry_name, &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 { @@ -407,6 +419,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');