[systemd-devel] [PATCH 1/2] fstab-generator: Support root on tmpfs (or other deviceless FS)
Zbigniew Jędrzejewski-Szmek
zbyszek at in.waw.pl
Mon Mar 23 21:12:26 PDT 2015
On Tue, Mar 24, 2015 at 12:52:59AM +0100, Tobias Hunger wrote:
> This allows for stateless systems.
> ---
> src/fstab-generator/fstab-generator.c | 21 +++++++++++++--------
> src/shared/util.c | 30 ++++++++++++++++++++++++++++++
> src/shared/util.h | 1 +
> 3 files changed, 44 insertions(+), 8 deletions(-)
>
> diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
> index 2ece12f..77c97fd 100644
> --- a/src/fstab-generator/fstab-generator.c
> +++ b/src/fstab-generator/fstab-generator.c
> @@ -397,15 +397,20 @@ static int add_root_mount(void) {
> _cleanup_free_ char *what = NULL;
> const char *opts;
>
> - if (isempty(arg_root_what)) {
> - log_debug("Could not find a root= entry on the kernel command line.");
> - return 0;
> - }
> + if (fstype_is_deviceless(arg_root_fstype)) {
> + if (free_and_strdup(&what, arg_root_what) < 0)
> + return log_oom();
> + } else {
> + if (isempty(arg_root_what)) {
> + log_debug("Could not find a root= entry on the kernel command line.");
> + return 0;
> + }
>
> - what = fstab_node_to_udev_node(arg_root_what);
> - if (!path_is_absolute(what)) {
> - log_debug("Skipping entry what=%s where=/sysroot type=%s", what, strna(arg_root_fstype));
> - return 0;
> + what = fstab_node_to_udev_node(arg_root_what);
> + if (!path_is_absolute(what)) {
> + log_debug("Skipping entry what=%s where=/sysroot type=%s", what, strna(arg_root_fstype));
> + return 0;
> + }
> }
>
> if (!arg_root_options)
> diff --git a/src/shared/util.c b/src/shared/util.c
> index ad548da..cb03527 100644
> --- a/src/shared/util.c
> +++ b/src/shared/util.c
> @@ -1713,6 +1713,36 @@ bool fstype_is_network(const char *fstype) {
> return nulstr_contains(table, fstype);
> }
>
> +bool fstype_is_deviceless(const char *fstype) {
> + static const char table[] =
> + "autofs\0"
> + "bdev\0"
> + "cgroup\0"
> + "configfs\0"
> + "cpuset\0"
> + "debugfs\0"
> + "devpts\0"
> + "devtmpfs\0"
> + "efivarfs\0"
> + "hugetlbfs\0"
> + "mqueue\0"
> + "nfs\0"
> + "nfs4\0"
> + "overlayfs\0"
> + "pipefs\0"
> + "proc\0"
> + "pstore\0"
> + "ramfs\0"
> + "rootfs\0"
> + "rpc_pipefs\0"
> + "securityfs\0"
> + "sockfs\0"
> + "sysfs\0"
> + "tmpfs\0";
> +
> + return nulstr_contains(table, fstype);
This wouldn't work if fstype was NULL. We also have a list of network filesystems,
whic I assume don't require a device, and we can consult this list instead of including
it here. I pushed the patch with those changes.
This list contains a lot of old cruft... OTOH, this doesn't hurt, so maybe
it's fine.
I wonder if we should support "nodev" fstab option. Then we could remove everything
except overlayfs,ramfs,tmpfs from this list and tell people to use nodev for other
cases.
Zbyszek
> +}
> +
> int chvt(int vt) {
> _cleanup_close_ int fd;
>
> diff --git a/src/shared/util.h b/src/shared/util.h
> index 29e85bb..b5f44b8 100644
> --- a/src/shared/util.h
> +++ b/src/shared/util.h
> @@ -409,6 +409,7 @@ int fd_cloexec(int fd, bool cloexec);
> int close_all_fds(const int except[], unsigned n_except);
>
> bool fstype_is_network(const char *fstype);
> +bool fstype_is_deviceless(const char *fstype);
>
> int chvt(int vt);
>
> --
> 2.3.3
>
>
More information about the systemd-devel
mailing list