summaryrefslogtreecommitdiff
path: root/md/notes/xos/nmount.md
blob: 0600233e6d546b56a7e1e504db97934dccbe7f74 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
title:nmount - alternative mount
keywords:linux,qemu,mount.linux,

# nmount - alternative mount

## Intro

So simple mount utility, to mount files and give params to mount syscall.


## Ideas

Busybox needs /etc/fstab to work, minibase where using predefined locations.
If this is all removed then its become portable tool.

Minibase - 
https://github.com/arsv/minibase/blob/master/src/root/kmount.c  

Mount syscall -
https://man7.org/linux/man-pages/man2/mount.2.html  

```c
#include <sys/mount.h>

int mount(
    const char*     source, 
    const char*     target,
    const char*     filesystemtype, 
    unsigned long   mountflags,
    const void*     data);
```

Syscall looks pretty simple

So comamnd looks simple to check with filesystems kernel supports check
procfs /proc/filesystems


Run:
```
cat /proc/filesystems
```
Output:
```
nodev   sysfs
nodev   tmpfs
nodev   bdev
nodev   proc
nodev   cgroup
nodev   cgroup2
nodev   cpuset
nodev   devtmpfs
nodev   binfmt_misc
nodev   configfs
nodev   debugfs
nodev   tracefs
nodev   securityfs
nodev   sockfs
nodev   bpf
nodev   pipefs
nodev   ramfs
nodev   hugetlbfs
nodev   devpts
nodev   autofs
nodev   mqueue
nodev   pstore
        ext3
        ext2
        ext4
nodev   vboxsf
        vfat
        fuseblk
nodev   fuse
nodev   fusectl
```

## Use

Currently help is supproted for procfs,devtmpfs and sysfs. Next to add is ext4

```
#mount proc
nmount_static -v -t proc -d /Process -f nosuid,nodev,noexec,realtime

#mount dev
nmount_static -v -t devtmpfs -d /Devices -f nosuid

#mount sys
nmount_static -v -t sysfs -d /System -f nosuid,nodev,nosuid,realtime

#mount ext4

#mount mqueue
nmount_static -v -t mqueue -d /Queue -f rw,nodev,nosuid,realtime

#mount tmpfs
nmount_static -v -t tmpfs -d /Ram -f rw,nodev,nosuid,realtime
```

available options
```
Usage: ./nmount [OPTS]

Version: 0.0.1 
-s source directory
-d target directory
-t filesystem type
-f mount flags
-o mount fs options
-v verbose output
-h help options
-a helper for filetype options
```

output help thats shows all availiable options, for fs
```
./nmount -f proc -a
devtmpfs /Device
mqueue /Queue/
proc /Process
    hidepid=%u 
        0 Everybody may access all proc
        1 User can access only their own proc, not other /proc/[pid]
        2 As for mode 1, extra hides pid directories of others
    gid=%u user group that can access process
        gid usergroup who sees /proc in mode 0
tmpfs /Ram
sysfs /System
ext4 (null)
ext3 (null)
ext2 (null)
vfat (null)
msdos (null)
ntfs (null)


```

Its create directory if its not excist

## Source

http://git.main.lv/cgit.cgi/nmount.git/

Compile:
```
make
```

create one dynamic and one static binary


## Links
https://man7.org/linux/man-pages/man2/mount.2.html
https://github.com/arsv/minibase/blob/master/src/root/kmount.c