mirror of
https://github.com/troglobit/finit.git
synced 2026-10-02 05:52:48 +07:00
Follow-up to 4febd28: bring back /dev, /proc, and /sys
We need /proc for rs_remount_root() and conf_parse_cmdline(), /dev for early multi-console support, and /sys for the cgroups support. All of these may be in the system /etc/fstab, which fs_mount() later remounts. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
+31
-12
@@ -160,8 +160,7 @@ static void fs_remount_root(int fsckerr)
|
||||
break;
|
||||
}
|
||||
|
||||
/* If / is not listed in fstab, or listed as 'ro', leave it
|
||||
* alone. */
|
||||
/* If / is not listed in fstab, or listed as 'ro', leave it alone */
|
||||
if (!fs || !strcmp(fs->fs_type, "ro"))
|
||||
goto out;
|
||||
|
||||
@@ -185,16 +184,10 @@ static void fs_remount_root(int fsckerr)
|
||||
}
|
||||
#endif /* SYSROOT */
|
||||
|
||||
static void fs_init(void)
|
||||
static void fs_mount(void)
|
||||
{
|
||||
if (!rescue) {
|
||||
/*
|
||||
* /etc/fstab may mount over this later, we need /proc
|
||||
* to be able to remount / as read-write --Jocke
|
||||
*/
|
||||
mount("none", "/proc", "proc", 0, NULL);
|
||||
if (!rescue)
|
||||
fs_remount_root(fsck_all());
|
||||
}
|
||||
|
||||
_d("Root FS up, calling hooks ...");
|
||||
plugin_run_hooks(HOOK_ROOTFS_UP);
|
||||
@@ -209,6 +202,27 @@ static void fs_init(void)
|
||||
umask(0022);
|
||||
}
|
||||
|
||||
/*
|
||||
* We need /proc for rs_remount_root() and conf_parse_cmdline(), /dev
|
||||
* for early multi-console, and /sys for the cgroups support. Any
|
||||
* occurrence of these file systems in /etc/fstab will replace these
|
||||
* mounts later in fs_mount()
|
||||
*/
|
||||
static void fs_init(void)
|
||||
{
|
||||
struct {
|
||||
char *spec, *file, *type;
|
||||
} fs[] = {
|
||||
{ "proc", "/proc", "proc" },
|
||||
{ "devtmpfs", "/dev", "devtmpfs" },
|
||||
{ "sysfs", "/sys", "sysfs" },
|
||||
};
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < NELEMS(fs); i++)
|
||||
mount(fs[i].spec, fs[i].file, fs[i].type, 0, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* If everything goes south we can use this to give the operator an
|
||||
* emergency shell to debug the problem -- Finit should not crash!
|
||||
@@ -362,7 +376,12 @@ int main(int argc, char *argv[])
|
||||
return client(argc, argv);
|
||||
|
||||
/*
|
||||
* Parse kernel command line (debug, rescue, splash, etc.)
|
||||
* Need /dev, /proc, and /sys for console=, remount and cgroups
|
||||
*/
|
||||
fs_init();
|
||||
|
||||
/*
|
||||
* Parse /proc/cmdline (debug, rescue, splash, console=, etc.)
|
||||
* Also calls log_init() to set correct log level
|
||||
*/
|
||||
conf_parse_cmdline(argc, argv);
|
||||
@@ -412,7 +431,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
|
||||
/* Check and mount filesystems. */
|
||||
fs_init();
|
||||
fs_mount();
|
||||
|
||||
/*
|
||||
* Initialize .conf system and load static /etc/finit.conf.
|
||||
|
||||
Reference in New Issue
Block a user