rev |
line source |
slaxemulator@0
|
1 #!/bin/bash
|
slaxemulator@0
|
2
|
slaxemulator@0
|
3 # Functions library :: for Linux Live scripts 6
|
slaxemulator@0
|
4 # Author: Tomas M. <http://www.linux-live.org>
|
slaxemulator@0
|
5 #
|
slaxemulator@0
|
6
|
slaxemulator@0
|
7 # ===========================================================
|
slaxemulator@0
|
8 # GLOBAL variables
|
slaxemulator@0
|
9 # ===========================================================
|
slaxemulator@0
|
10
|
slaxemulator@0
|
11 # linux live flag to fstab, if fstab line doesn't contain it,
|
slaxemulator@0
|
12 # never remove it from fstab automatically (user added it)
|
slaxemulator@0
|
13 FSTABLLFLAG="# AutoUpdate"
|
slaxemulator@0
|
14
|
slaxemulator@0
|
15 # We have to set these variables very carefully
|
slaxemulator@0
|
16 UNION=union
|
slaxemulator@0
|
17 MEMORY=memory
|
slaxemulator@0
|
18 MOUNTDIR=mnt
|
slaxemulator@0
|
19 CHANGES=$MEMORY/changes
|
slaxemulator@0
|
20 XINO=$MEMORY/xino
|
slaxemulator@0
|
21 COPY2RAM=$MEMORY/copy2ram
|
slaxemulator@0
|
22 IMAGES=$MEMORY/images
|
slaxemulator@0
|
23 INITRAMDISK=$MOUNTDIR/live
|
slaxemulator@0
|
24 LOOPMOUNT=$MOUNTDIR/tmp
|
slaxemulator@0
|
25 FINDISOMNT=$MOUNTDIR/findiso
|
slaxemulator@0
|
26
|
slaxemulator@0
|
27 # this will be replaced by build script, so never change the following line!
|
slaxemulator@0
|
28 LIVECDNAME="slitaz"
|
slaxemulator@0
|
29
|
slaxemulator@0
|
30 # =================================================================
|
slaxemulator@0
|
31 # debug and output functions
|
slaxemulator@0
|
32 # =================================================================
|
slaxemulator@0
|
33
|
slaxemulator@0
|
34 # global variable
|
slaxemulator@0
|
35 DEBUG_IS_ENABLED=$(cat /proc/cmdline 2>/dev/null | grep debug)
|
slaxemulator@0
|
36
|
slaxemulator@0
|
37 debug_log()
|
slaxemulator@0
|
38 {
|
slaxemulator@0
|
39 if [ "$DEBUG_IS_ENABLED" ]; then
|
slaxemulator@0
|
40 echo "- debug: $*" >&2
|
slaxemulator@0
|
41 log "- debug: $*"
|
slaxemulator@0
|
42 fi
|
slaxemulator@0
|
43 }
|
slaxemulator@0
|
44
|
slaxemulator@0
|
45 # echogreen will echo $@ in green color
|
slaxemulator@0
|
46 # $1 = text
|
slaxemulator@0
|
47 #
|
slaxemulator@0
|
48 echogreen()
|
slaxemulator@0
|
49 {
|
slaxemulator@0
|
50 echo -ne " [1;34m""$@""[0;39m"
|
slaxemulator@0
|
51 }
|
slaxemulator@0
|
52
|
slaxemulator@0
|
53 # echolog
|
slaxemulator@0
|
54 # $1 = text to show and to write to /var/log/messages
|
slaxemulator@0
|
55 #
|
slaxemulator@0
|
56 echolog()
|
slaxemulator@0
|
57 {
|
slaxemulator@0
|
58 if [ "$1" != "" ]; then
|
slaxemulator@0
|
59 echogreen "* "
|
slaxemulator@0
|
60 log "LIVECD:" "$@"
|
slaxemulator@0
|
61 echo "$@"
|
slaxemulator@0
|
62 fi
|
slaxemulator@0
|
63 }
|
slaxemulator@0
|
64
|
slaxemulator@0
|
65 # log
|
slaxemulator@0
|
66 # store given text in /var/log/livedbg
|
slaxemulator@0
|
67 log()
|
slaxemulator@0
|
68 {
|
slaxemulator@0
|
69 echo "$@" 2>/dev/null >>/var/log/livedbg
|
slaxemulator@0
|
70 }
|
slaxemulator@0
|
71
|
slaxemulator@0
|
72 # show information about the debug shell
|
slaxemulator@0
|
73 show_debug_banner()
|
slaxemulator@0
|
74 {
|
slaxemulator@0
|
75 echo
|
slaxemulator@0
|
76 echo "====="
|
slaxemulator@0
|
77 echo ": Debugging started. Here is the root shell for you."
|
slaxemulator@0
|
78 echo ": Type your desired commands or hit Ctrl+D to continue booting."
|
slaxemulator@0
|
79 echo
|
slaxemulator@0
|
80 }
|
slaxemulator@0
|
81
|
slaxemulator@0
|
82 # debug_shell
|
slaxemulator@0
|
83 # executed when debug boot parameter is present
|
slaxemulator@0
|
84 #
|
slaxemulator@0
|
85 debug_shell()
|
slaxemulator@0
|
86 {
|
slaxemulator@0
|
87 if [ "$DEBUG_IS_ENABLED" ]; then
|
slaxemulator@0
|
88 show_debug_banner
|
slaxemulator@0
|
89 ash < /dev/console
|
slaxemulator@0
|
90 echo
|
slaxemulator@0
|
91 fi
|
slaxemulator@0
|
92 }
|
slaxemulator@0
|
93
|
slaxemulator@0
|
94 # header
|
slaxemulator@0
|
95 # $1 = text to show
|
slaxemulator@0
|
96 #
|
slaxemulator@0
|
97 header()
|
slaxemulator@0
|
98 {
|
slaxemulator@0
|
99 echo "[0;1m""$@""[0;0m"
|
slaxemulator@0
|
100 }
|
slaxemulator@0
|
101
|
slaxemulator@0
|
102 fatal()
|
slaxemulator@0
|
103 {
|
slaxemulator@0
|
104 echolog
|
slaxemulator@0
|
105 header "Fatal error occured - $1"
|
slaxemulator@0
|
106 echolog "Something went wrong and we can't continue. This should never happen."
|
slaxemulator@0
|
107 echolog "Please reboot your computer with Ctrl+Alt+Delete ..."
|
slaxemulator@0
|
108 echolog
|
slaxemulator@0
|
109 ash < /dev/console
|
slaxemulator@0
|
110 }
|
slaxemulator@0
|
111
|
slaxemulator@0
|
112 allow_only_root()
|
slaxemulator@0
|
113 {
|
slaxemulator@0
|
114 # test if the script is started by root user. If not, exit
|
slaxemulator@0
|
115 if [ "0$UID" -ne 0 ]; then
|
slaxemulator@0
|
116 echo "Only root can run $(basename $0)"; exit 1
|
slaxemulator@0
|
117 fi
|
slaxemulator@0
|
118 }
|
slaxemulator@0
|
119
|
slaxemulator@0
|
120 # ===========================================================
|
slaxemulator@0
|
121 # text processing functions
|
slaxemulator@0
|
122 # ===========================================================
|
slaxemulator@0
|
123
|
slaxemulator@0
|
124 # look into cmdline and echo $1 back if $1 is set
|
slaxemulator@0
|
125 # $1 = value name, case sensitive, for example 'debug'
|
slaxemulator@0
|
126 #
|
slaxemulator@0
|
127 cmdline_parameter()
|
slaxemulator@0
|
128 {
|
slaxemulator@0
|
129 debug_log "cmdline_parameter" "$*"
|
slaxemulator@0
|
130 log "searching for bootparam: $1"
|
slaxemulator@0
|
131 egrep -o "(^|[[:space:]])$1([[:space:]]|\$)" /proc/cmdline | tr -d " " | tail -n 1
|
slaxemulator@0
|
132 }
|
slaxemulator@0
|
133
|
slaxemulator@0
|
134 # look into cmdline and echo value of $1 option
|
slaxemulator@0
|
135 # $1 = value name, case sensitive, for example 'changes'
|
slaxemulator@0
|
136 #
|
slaxemulator@0
|
137 cmdline_value()
|
slaxemulator@0
|
138 {
|
slaxemulator@0
|
139 debug_log "cmdline_value" "$*"
|
slaxemulator@0
|
140 log "searching for bootparam value: $1"
|
slaxemulator@0
|
141 egrep -o "(^|[[:space:]])$1=[^[:space:]]+" /proc/cmdline | cut -d "=" -f 2- | tail -n 1
|
slaxemulator@0
|
142 }
|
slaxemulator@0
|
143
|
slaxemulator@0
|
144 # Make sure the part of a script after 'mutex_lock' call is atomic,
|
slaxemulator@0
|
145 # that means the 'locked' part of the script can never be execuetd
|
slaxemulator@0
|
146 # from several processes at the same time, in parallel.
|
slaxemulator@0
|
147 # Every script waits until it gathers the lock.
|
slaxemulator@0
|
148 # The lock directory is saved in /dev instead of /tmp, because /tmp may be
|
slaxemulator@0
|
149 # readonly at the time when the lock is needed (eg. when udev is starting)
|
slaxemulator@0
|
150 # $1 = name of the lock
|
slaxemulator@0
|
151 #
|
slaxemulator@0
|
152 mutex_lock()
|
slaxemulator@0
|
153 {
|
slaxemulator@0
|
154 debug_log "mutex_lock" "$*"
|
slaxemulator@0
|
155 while ! mkdir "/dev/ll-mutex-lock-$1" 2>/dev/null; do
|
slaxemulator@0
|
156 usleep 100000;
|
slaxemulator@0
|
157 done
|
slaxemulator@0
|
158 }
|
slaxemulator@0
|
159
|
slaxemulator@0
|
160 # Unlock the lock so another waiting process can reusse it and continue
|
slaxemulator@0
|
161 # $1 = name of the lock
|
slaxemulator@0
|
162 #
|
slaxemulator@0
|
163 mutex_unlock()
|
slaxemulator@0
|
164 {
|
slaxemulator@0
|
165 debug_log "mutex_unlock" "$*"
|
slaxemulator@0
|
166 rmdir "/dev/ll-mutex-lock-$1" 2>/dev/null
|
slaxemulator@0
|
167 }
|
slaxemulator@0
|
168
|
slaxemulator@0
|
169 # ===========================================================
|
slaxemulator@0
|
170 # system functions
|
slaxemulator@0
|
171 # ===========================================================
|
slaxemulator@0
|
172
|
slaxemulator@0
|
173 # setup /usr from /usr.lzm inside initrd
|
slaxemulator@0
|
174 mount_initrd_loops()
|
slaxemulator@0
|
175 {
|
slaxemulator@0
|
176 debug_log "mount_initrd_loops" "$*"
|
slaxemulator@0
|
177 if [ -e /usr.lzm ]; then
|
slaxemulator@0
|
178 mount_device /usr.lzm /usr loop,ro squashfs
|
slaxemulator@0
|
179 fi
|
slaxemulator@0
|
180 if [ -e /drivers.lzm ]; then
|
slaxemulator@0
|
181 mount_device /drivers.lzm /lib/modules/*/kernel/drivers loop,ro squashfs
|
slaxemulator@0
|
182 fi
|
slaxemulator@0
|
183 }
|
slaxemulator@0
|
184
|
slaxemulator@0
|
185 # modprobe module $1, including all dependencies, suppress all messages
|
slaxemulator@0
|
186 # This was own function, because modprobe in busybox didn't support
|
slaxemulator@0
|
187 # neither gzipped modules nor dependencies. Seems to be fixed now, though.
|
slaxemulator@0
|
188 # $1 = module name, eg. ehci-hcd
|
slaxemulator@0
|
189 # $* = optional arguments
|
slaxemulator@0
|
190 #
|
slaxemulator@0
|
191 modprobe_module()
|
slaxemulator@0
|
192 {
|
slaxemulator@0
|
193 debug_log "modprobe_module" "$*"
|
slaxemulator@0
|
194 local MODULE
|
slaxemulator@0
|
195
|
slaxemulator@0
|
196 MODULE="$1"
|
slaxemulator@0
|
197 shift
|
slaxemulator@0
|
198
|
slaxemulator@0
|
199 if [ ! "$MODULE" ]; then return 1; fi
|
slaxemulator@0
|
200 modprobe "$MODULE" $* 2>/dev/null
|
slaxemulator@0
|
201 }
|
slaxemulator@0
|
202
|
slaxemulator@0
|
203 cdname()
|
slaxemulator@0
|
204 {
|
slaxemulator@0
|
205 if [ "$(cmdline_value cdname)" != "" ]; then
|
slaxemulator@0
|
206 LIVECDNAME="$(cmdline_value cdname)"
|
slaxemulator@0
|
207 else
|
slaxemulator@0
|
208 LIVECDNAME="${LIVECDNAME}"
|
slaxemulator@0
|
209 fi
|
slaxemulator@0
|
210 }
|
slaxemulator@0
|
211
|
slaxemulator@0
|
212 cdname
|
slaxemulator@0
|
213
|
slaxemulator@0
|
214 # mknod next loop device
|
slaxemulator@0
|
215 # - find biggest loop device in /dev/loop/, assume it to be used
|
slaxemulator@0
|
216 # - preallocate (mknod) 20 more loop devices in one round
|
slaxemulator@0
|
217 mknod_next_loop_dev()
|
slaxemulator@0
|
218 {
|
slaxemulator@0
|
219 debug_log "mknod_next_loop_dev" "$*"
|
slaxemulator@0
|
220 local i NR END PFX
|
slaxemulator@0
|
221
|
slaxemulator@0
|
222 mutex_lock mknod_next_loop_dev
|
slaxemulator@0
|
223
|
slaxemulator@0
|
224 if [ -d /dev/loop ]; then
|
slaxemulator@0
|
225 NR=$(find /dev/loop/ -maxdepth 1 | sed -r 's/[^0-9]+//' | sort -n | tail -n 1)
|
slaxemulator@0
|
226 PFX="/"
|
slaxemulator@0
|
227 else
|
slaxemulator@0
|
228 NR=$(find /dev/ -maxdepth 1 | grep loop | sed -r 's/[^0-9]+//' | sort -n | tail -n 1)
|
slaxemulator@0
|
229 PFX=""
|
slaxemulator@0
|
230 fi
|
slaxemulator@0
|
231 NR=$(expr 0$NR + 1)
|
slaxemulator@0
|
232 END=$(expr 0$NR + 20)
|
slaxemulator@0
|
233 for i in $(seq $NR $END); do
|
slaxemulator@0
|
234 mknod /dev/loop$PFX$i b 7 $i 2>/dev/null
|
slaxemulator@0
|
235 done
|
slaxemulator@0
|
236 echo /dev/loop$PFX$NR
|
slaxemulator@0
|
237
|
slaxemulator@0
|
238 mutex_unlock mknod_next_loop_dev
|
slaxemulator@0
|
239 }
|
slaxemulator@0
|
240
|
slaxemulator@0
|
241 # ===========================================================
|
slaxemulator@0
|
242 # Filesystem functions
|
slaxemulator@0
|
243 # ===========================================================
|
slaxemulator@0
|
244
|
slaxemulator@0
|
245 # Find out what locale is requested
|
slaxemulator@0
|
246 # If no locale is given, use the firts one available (if any)
|
slaxemulator@0
|
247 # $1 = locale (optional argument, if exists, no autodetection is made)
|
slaxemulator@0
|
248 locale_id()
|
slaxemulator@0
|
249 {
|
slaxemulator@0
|
250 debug_log "locale_id" "$*"
|
slaxemulator@0
|
251 local LOCALE i
|
slaxemulator@0
|
252
|
slaxemulator@0
|
253 # first try to find out locale from boot parameters
|
slaxemulator@0
|
254 LOCALE="$1"
|
slaxemulator@0
|
255 if [ "$LOCALE" = "" ]; then LOCALE=$(cmdline_value locale); fi
|
slaxemulator@0
|
256 if [ "$LOCALE" = "" ]; then LOCALE=$(cmdline_value language); fi
|
slaxemulator@0
|
257 if [ "$LOCALE" = "" ]; then LOCALE=$(cmdline_value lang); fi
|
slaxemulator@0
|
258
|
slaxemulator@0
|
259 # if not found, set it to locale from usr/lib/locale,
|
slaxemulator@0
|
260 # but only if there is just ONE directory, nothing more
|
slaxemulator@0
|
261 # (so we are sure which one to use)
|
slaxemulator@0
|
262 if [ "$LOCALE" = "" ]; then
|
slaxemulator@0
|
263 for LOCALE in $(ls -A1p /usr/lib/locale 2>/dev/null | grep / | sed -r "s:[/]|[.].*::"); do
|
slaxemulator@0
|
264 i="1$i"
|
slaxemulator@0
|
265 done
|
slaxemulator@0
|
266 if [ "$i" != "1" ]; then LOCALE=""; fi
|
slaxemulator@0
|
267 fi
|
slaxemulator@0
|
268
|
slaxemulator@0
|
269 if [ "$LOCALE" != "" -a -e /usr/share ]; then
|
slaxemulator@0
|
270 cat /usr/share/locale/locale.alias | sed -r "s/#.*//" | egrep "$LOCALE|$LOCALE""_" | tail -n 1 | tr -s "[[:space:]]" " " | cut -d " " -f 2- | tr -d " "
|
slaxemulator@0
|
271 fi
|
slaxemulator@0
|
272 }
|
slaxemulator@0
|
273
|
slaxemulator@0
|
274 # Find out what iocharset to use
|
slaxemulator@0
|
275 iocharset()
|
slaxemulator@0
|
276 {
|
slaxemulator@0
|
277 debug_log "iocharset" "$*"
|
slaxemulator@0
|
278 local CHARSET IOCHARSET
|
slaxemulator@0
|
279
|
slaxemulator@0
|
280 # if iocharset is explicitly set at the boot prompt,
|
slaxemulator@0
|
281 # return it regardless the locale settings
|
slaxemulator@0
|
282 IOCHARSET=$(cmdline_value iocharset)
|
slaxemulator@0
|
283 if [ "$IOCHARSET" != "" ]; then
|
slaxemulator@0
|
284 echo $IOCHARSET
|
slaxemulator@0
|
285 return 0;
|
slaxemulator@0
|
286 fi
|
slaxemulator@0
|
287
|
slaxemulator@0
|
288 # else find out the iocharset from locale_id output, it should match
|
slaxemulator@0
|
289 # some kernel module (after stripping out few of the dashes)
|
slaxemulator@0
|
290 IOCHARSET=$(locale_id | cut -d . -f 2- | tr "[[:upper:]]" "[[:lower:]]" | tr -d -)
|
slaxemulator@0
|
291 if [ "$IOCHARSET" = "" ]; then return 0; fi
|
slaxemulator@0
|
292
|
slaxemulator@0
|
293 find /lib/modules -name "nls_*" | sed -r 's:^.*/|[.]ko$::g' | cut -b 5- | while read CHARSET; do
|
slaxemulator@0
|
294 if [ "$(echo $CHARSET | tr "[[:upper:]]" "[[:lower:]]" | tr -d -)" = "$IOCHARSET" ]; then
|
slaxemulator@0
|
295 echo "$CHARSET"
|
slaxemulator@0
|
296 return 0
|
slaxemulator@0
|
297 fi
|
slaxemulator@0
|
298 done
|
slaxemulator@0
|
299 return 1
|
slaxemulator@0
|
300 }
|
slaxemulator@0
|
301
|
slaxemulator@0
|
302 # Get filesystem options
|
slaxemulator@0
|
303 # $1 = filesystem
|
slaxemulator@0
|
304 # $2 = 'fstab' or 'mount' ... 'auto'/'noauto' string is enabled (fstab) or disabled (mount)
|
slaxemulator@0
|
305 #
|
slaxemulator@0
|
306
|
slaxemulator@0
|
307 fs_options()
|
slaxemulator@0
|
308 {
|
slaxemulator@0
|
309 debug_log "fs_options" "$*"
|
slaxemulator@0
|
310 local NOAUTO IOCHARSET
|
slaxemulator@0
|
311
|
slaxemulator@0
|
312 NOAUTO=$(cmdline_parameter noauto)
|
slaxemulator@0
|
313 if [ "$NOAUTO" = "" ]; then NOAUTO="auto"; fi
|
slaxemulator@0
|
314 if [ "$2" = "fstab" ]; then echo -n "$NOAUTO," ; fi
|
slaxemulator@0
|
315 if [ "$1" = "swap" ]; then echo "defaults,pri=1"; return 0; fi
|
slaxemulator@0
|
316 echo -n "noatime,users,suid,dev,exec"
|
slaxemulator@0
|
317
|
slaxemulator@0
|
318 IOCHARSET=$(iocharset)
|
slaxemulator@0
|
319
|
slaxemulator@0
|
320 if [ "$1" = "vfat" ]; then
|
slaxemulator@0
|
321 echo -n ",quiet,umask=0,check=s,shortname=mixed"
|
slaxemulator@0
|
322 if [ "$IOCHARSET" ]; then
|
slaxemulator@0
|
323 echo ",iocharset=$IOCHARSET"
|
slaxemulator@0
|
324 fi
|
slaxemulator@0
|
325 fi
|
slaxemulator@0
|
326
|
slaxemulator@0
|
327 if [ "$1" = "iso9660" -o "$1" = "iso9660,udf" ]; then
|
slaxemulator@0
|
328 echo -n ",ro"
|
slaxemulator@0
|
329 if [ "$IOCHARSET" ]; then
|
slaxemulator@0
|
330 echo ",iocharset=$IOCHARSET"
|
slaxemulator@0
|
331 fi
|
slaxemulator@0
|
332 fi
|
slaxemulator@0
|
333
|
slaxemulator@0
|
334 if [ "$1" = "ntfs" ]; then
|
slaxemulator@0
|
335 echo -n ",ro"
|
slaxemulator@0
|
336 if [ "$IOCHARSET" ]; then
|
slaxemulator@0
|
337 echo ",nls=$IOCHARSET"
|
slaxemulator@0
|
338 fi
|
slaxemulator@0
|
339 fi
|
slaxemulator@0
|
340
|
slaxemulator@0
|
341 if [ "$1" = "ntfs-3g" ]; then
|
slaxemulator@0
|
342 echo ",locale=$(locale_id)"
|
slaxemulator@0
|
343 fi
|
slaxemulator@0
|
344
|
slaxemulator@0
|
345 if [ "$1" = "ext3" -o "$1" = "ext4" ]; then
|
slaxemulator@0
|
346 echo ",barrier=1,data=ordered"
|
slaxemulator@0
|
347 fi
|
slaxemulator@0
|
348
|
slaxemulator@0
|
349 }
|
slaxemulator@0
|
350
|
slaxemulator@0
|
351 # discover filesystem used on the given device
|
slaxemulator@0
|
352 # Use vfat for msdos filesystem. Use ntfs-3g for ntfs if ntfs-3g exists.
|
slaxemulator@0
|
353 # $1 = device, eg. /dev/hda1
|
slaxemulator@0
|
354 #
|
slaxemulator@0
|
355 device_filesystem()
|
slaxemulator@0
|
356 {
|
slaxemulator@0
|
357 debug_log "device_filesystem" "$*"
|
slaxemulator@0
|
358 local NTFS
|
slaxemulator@0
|
359
|
slaxemulator@0
|
360 if [ -e /bin/ntfs-3g ]; then NTFS="ntfs-3g"; else NTFS="ntfs"; fi
|
slaxemulator@0
|
361 blkid -s TYPE "$1" -o value | sed "s/msdos/vfat/" | sed "s/ntfs/$NTFS/"
|
slaxemulator@0
|
362 }
|
slaxemulator@0
|
363
|
slaxemulator@0
|
364 # tell us if the given filesystem is supported
|
slaxemulator@0
|
365 # (eg. it's in /proc/filesystems or we know it)
|
slaxemulator@0
|
366 # $1 = filesystem name
|
slaxemulator@0
|
367 #
|
slaxemulator@0
|
368 is_supported_filesystem()
|
slaxemulator@0
|
369 {
|
slaxemulator@0
|
370 debug_log "is_supported_filesystem" "$*"
|
slaxemulator@0
|
371
|
slaxemulator@0
|
372 if [ -e /bin/ntfs-3g -a "$1" = "ntfs-3g" ]; then
|
slaxemulator@0
|
373 return 0
|
slaxemulator@0
|
374 fi
|
slaxemulator@0
|
375
|
slaxemulator@0
|
376 # the following command will set the return value
|
slaxemulator@0
|
377 egrep -q "[[:space:]]$1\$" /proc/filesystems
|
slaxemulator@0
|
378 }
|
slaxemulator@0
|
379
|
slaxemulator@0
|
380 # Mount device $1 to $2
|
slaxemulator@0
|
381 # If the device is using vfat or ntfs filesystem, use iocharset as a mount option
|
slaxemulator@0
|
382 # $1 = /dev device to mount, eg. /dev/hda1, or loop file, or directory
|
slaxemulator@0
|
383 # $2 = mountpoint, eg. /mnt/hda1
|
slaxemulator@0
|
384 # $3 = optional mount options, for example "ro", or "remount,rw"
|
slaxemulator@0
|
385 # $4 = optional filesystem name, in order to skip autodetection
|
slaxemulator@0
|
386 #
|
slaxemulator@0
|
387 mount_device()
|
slaxemulator@0
|
388 {
|
slaxemulator@0
|
389 debug_log "mount_device" "$*"
|
slaxemulator@0
|
390 local FS DEV LOOPDEV OPTIONS FILESYSTEM ERR
|
slaxemulator@0
|
391
|
slaxemulator@0
|
392 # make sure we have enough arguments
|
slaxemulator@0
|
393 if [ "$2" = "" ]; then return 1; fi
|
slaxemulator@0
|
394 if [ "$1" = "" ]; then rmdir "$2" 2>/dev/null; return 1; fi
|
slaxemulator@0
|
395 mkdir -p "$2"
|
slaxemulator@0
|
396
|
slaxemulator@0
|
397 DEV="$1"
|
slaxemulator@0
|
398 if [ "$4" != "" ]; then FS="$4"; else FS=$(device_filesystem "$1"); fi
|
slaxemulator@0
|
399 if [ "$FS" ]; then OPTIONS=$(fs_options $FS mount); FS="-t $FS"; fi
|
slaxemulator@0
|
400 if [ "$OPTIONS" ]; then OPTIONS="$OPTIONS"; else OPTIONS=""; fi
|
slaxemulator@0
|
401 if [ -f "$DEV" ]; then OPTIONS="$OPTIONS,loop"; fi
|
slaxemulator@0
|
402 if [ -d "$DEV" ]; then OPTIONS="$OPTIONS,rbind"; fi
|
slaxemulator@0
|
403 if [ "$3" ]; then OPTIONS="$OPTIONS,$3"; fi
|
slaxemulator@0
|
404 OPTIONS=$(echo "$OPTIONS" | sed -r "s/^,+//")
|
slaxemulator@0
|
405
|
slaxemulator@0
|
406 if [ "$FS" = "-t ntfs-3g" ]; then
|
slaxemulator@0
|
407 ntfs-3g "$DEV" "$2" -o $OPTIONS >/dev/null 2>&1
|
slaxemulator@0
|
408 ERR=$?
|
slaxemulator@0
|
409 else
|
slaxemulator@0
|
410 mount -n -o $OPTIONS $FS "$DEV" "$2" >/dev/null 2>&1
|
slaxemulator@0
|
411 ERR=$?
|
slaxemulator@0
|
412 fi
|
slaxemulator@0
|
413
|
slaxemulator@0
|
414 # not enough loop devices? try to create one.
|
slaxemulator@0
|
415 if [ $ERR -eq 2 ]; then
|
slaxemulator@0
|
416 LOOPDEV=$(mknod_next_loop_dev)
|
slaxemulator@0
|
417 OPTIONS=$(echo "$OPTIONS" | sed -r "s/,loop//g")
|
slaxemulator@0
|
418 losetup "$LOOPDEV" "$DEV" 2>/dev/null # busybox's losetup doesn't support -r
|
slaxemulator@0
|
419 if [ $? -ne 0 ]; then
|
slaxemulator@0
|
420 losetup -r "$LOOPDEV" "$DEV" 2>/dev/null # force read-only in case of error
|
slaxemulator@0
|
421 fi
|
slaxemulator@0
|
422 mount -n -o $OPTIONS $FS "$LOOPDEV" "$2" >/dev/null 2>&1
|
slaxemulator@0
|
423 ERR=$?
|
slaxemulator@0
|
424 fi
|
slaxemulator@0
|
425
|
slaxemulator@0
|
426 # if nothing works, try to force read-only mount
|
slaxemulator@0
|
427 if [ $ERR -ne 0 ]; then
|
slaxemulator@0
|
428 mount -n -r -o $OPTIONS $FS "$DEV" "$2" >/dev/null 2>&1
|
slaxemulator@0
|
429 ERR=$?
|
slaxemulator@0
|
430 fi
|
slaxemulator@0
|
431
|
slaxemulator@0
|
432 if [ $ERR -ne 0 ]; then rmdir $2 2>/dev/null; fi
|
slaxemulator@0
|
433 return $ERR
|
slaxemulator@0
|
434 }
|
slaxemulator@0
|
435
|
slaxemulator@0
|
436 # unmount all parameters. If the parameter is not mountpoint but
|
slaxemulator@0
|
437 # it's a file or directory, umount the device where the file/dir is stored.
|
slaxemulator@0
|
438 #
|
slaxemulator@0
|
439 # First try normal umount, if that fails then remount read-only
|
slaxemulator@0
|
440 # If -l parameter is specified, do lazy-umount when normal umount fails
|
slaxemulator@0
|
441 # $1..$n = files/directories/devices to be unmounted
|
slaxemulator@0
|
442 #
|
slaxemulator@0
|
443 fumount()
|
slaxemulator@0
|
444 {
|
slaxemulator@0
|
445 debug_log "fumount" "$*"
|
slaxemulator@0
|
446 local TARGET LAZY
|
slaxemulator@0
|
447
|
slaxemulator@0
|
448 while [ "$1" ]; do
|
slaxemulator@0
|
449 if [ "$1" = "-l" ]; then LAZY="yes"; shift; fi
|
slaxemulator@0
|
450 TARGET=$(readlink -f "$1")
|
slaxemulator@0
|
451 if ! ismountpoint "$TARGET"; then
|
slaxemulator@0
|
452 if [ -f "$TARGET" -o -d "$TARGET" ]; then
|
slaxemulator@0
|
453 TARGET=$(df "$TARGET" | tail -n 1 | tr -s " " | cut -d " " -f 6)
|
slaxemulator@0
|
454 fi
|
slaxemulator@0
|
455 fi
|
slaxemulator@0
|
456
|
slaxemulator@0
|
457 if [ "$TARGET" != "" ]; then
|
slaxemulator@0
|
458 umount -n "$TARGET" >/dev/null 2>&1
|
slaxemulator@0
|
459 if [ $? -ne 0 ]; then
|
slaxemulator@0
|
460 mount -n -o remount,ro -t ignored ignored "$TARGET" >/dev/null 2>&1
|
slaxemulator@0
|
461 if [ "$LAZY" ]; then umount -n -l "$TARGET" >/dev/null 2>&1; fi
|
slaxemulator@0
|
462 fi
|
slaxemulator@0
|
463 fi
|
slaxemulator@0
|
464 shift
|
slaxemulator@0
|
465 done
|
slaxemulator@0
|
466 }
|
slaxemulator@0
|
467
|
slaxemulator@0
|
468 # ===========================================================
|
slaxemulator@0
|
469 # live module functions
|
slaxemulator@0
|
470 # ===========================================================
|
slaxemulator@0
|
471
|
slaxemulator@0
|
472 # Create module
|
slaxemulator@0
|
473 # call mksquashfs with apropriate arguments
|
slaxemulator@0
|
474 # $1 = directory which will be compressed to squashfs module
|
slaxemulator@0
|
475 # $2 = output filesystem module file
|
slaxemulator@0
|
476 # $3..$9 = optional arguments like -keep-as-directory or -b 123456789
|
slaxemulator@0
|
477 #
|
slaxemulator@0
|
478 create_module()
|
slaxemulator@0
|
479 {
|
slaxemulator@0
|
480 debug_log "create_module" "$*"
|
slaxemulator@0
|
481 rm -f "$2" # overwrite, never append to existing file
|
slaxemulator@0
|
482 mksquashfs "$1" "$2" -b 256K $3 $4 $5 $6 $7 $8 $9>/dev/null
|
slaxemulator@0
|
483 if [ $? -ne 0 ]; then return 1; fi
|
slaxemulator@0
|
484 chmod a-wx "$2" # remove execute and write attrib
|
slaxemulator@0
|
485 chmod a+r "$2" # add read for everyone
|
slaxemulator@0
|
486 }
|
slaxemulator@0
|
487
|
slaxemulator@0
|
488 # ismountpoint exits with 0 if $1 is mountpoint, else exits with 1
|
slaxemulator@0
|
489 # $1 = directory or loop_file
|
slaxemulator@0
|
490 #
|
slaxemulator@0
|
491 ismountpoint()
|
slaxemulator@0
|
492 {
|
slaxemulator@0
|
493 debug_log "ismountpoint" "$*"
|
slaxemulator@0
|
494 local MDIR
|
slaxemulator@0
|
495
|
slaxemulator@0
|
496 MDIR=$(readlink -f "$1")
|
slaxemulator@0
|
497 cat /proc/mounts | cut -d " " -f 2 | egrep "^$MDIR\$" >/dev/null 2>&1
|
slaxemulator@0
|
498 }
|
slaxemulator@0
|
499
|
slaxemulator@0
|
500 # Mount filesystem module to destination directory
|
slaxemulator@0
|
501 # $1 = path to the compressed module
|
slaxemulator@0
|
502 # $2 = destination folder
|
slaxemulator@0
|
503 #
|
slaxemulator@0
|
504 mount_module()
|
slaxemulator@0
|
505 {
|
slaxemulator@0
|
506 debug_log "mount_module" "$*"
|
slaxemulator@0
|
507 mount_device "$1" "$2" loop,ro squashfs
|
slaxemulator@0
|
508 }
|
slaxemulator@0
|
509
|
slaxemulator@0
|
510 # Insert a directory tree $2 to an union specified by $1
|
slaxemulator@0
|
511 # Top-level read-write branch is specified by it's index 0
|
slaxemulator@0
|
512 # Using =rr enables aufs to optimize real readonly branches
|
slaxemulator@0
|
513 # $1 = union absolute path (starting with /)
|
slaxemulator@0
|
514 # $2 = path to data directory
|
slaxemulator@0
|
515 #
|
slaxemulator@0
|
516 union_insert_dir()
|
slaxemulator@0
|
517 {
|
slaxemulator@0
|
518 debug_log "union_insert_dir" "$*"
|
slaxemulator@0
|
519 mount -n -o remount,add:1:$2=rr aufs $1
|
slaxemulator@0
|
520 }
|
slaxemulator@0
|
521
|
slaxemulator@0
|
522 # Find LZM modules in given dir
|
slaxemulator@0
|
523 # $1 = root directory of mounted DATAdir
|
slaxemulator@0
|
524 #
|
slaxemulator@0
|
525 find_modules()
|
slaxemulator@0
|
526 {
|
slaxemulator@0
|
527 debug_log "find_modules" "$*"
|
slaxemulator@0
|
528 if [ "$(cmdline_parameter baseonly)" ]; then
|
slaxemulator@0
|
529 find "$1/base" "$1/optional" -name "*.sqfs" 2>/dev/null | sort
|
slaxemulator@0
|
530 find "$1/base" "$1/optional" -name "*.lzm" 2>/dev/null | sort
|
slaxemulator@0
|
531 else
|
slaxemulator@0
|
532 find "$1/base" "$1/modules" "$1/optional" "$1/tmp" -name "*.sqfs" 2>/dev/null | sort
|
slaxemulator@0
|
533 find "$1/base" "$1/modules" "$1/optional" "$1/tmp" -name "*.lzm" 2>/dev/null | sort
|
slaxemulator@0
|
534 fi
|
slaxemulator@0
|
535 }
|
slaxemulator@0
|
536
|
slaxemulator@0
|
537 # List all modules in all directories (base, modules, optional)
|
slaxemulator@0
|
538 # and filter out unneeded optional modules (not specified by load= kernel parameter)
|
slaxemulator@0
|
539 # separator for load and noload arguments is "," or ";"
|
slaxemulator@0
|
540 # $1 = root directory of mounted DATAdir
|
slaxemulator@0
|
541 #
|
slaxemulator@0
|
542 list_modules()
|
slaxemulator@0
|
543 {
|
slaxemulator@0
|
544 debug_log "list_modules" "$*"
|
slaxemulator@0
|
545 local LOAD NOLOAD
|
slaxemulator@0
|
546
|
slaxemulator@0
|
547 LOAD=$(cmdline_value load | sed -r 's/\*/.\*/g' | sed -r 's/,|;/|/g')
|
slaxemulator@0
|
548 NOLOAD=$(cmdline_value noload | sed -r 's/\*/.\*/g' | sed -r 's/,|;/|/g')
|
slaxemulator@0
|
549 find_modules "$1" | while read LINE; do
|
slaxemulator@0
|
550 MODNAME=$(echo $LINE | cut -b ${#1}- | cut -b 2-)
|
slaxemulator@0
|
551 if [ "$(echo $LINE | grep /optional/)" ]; then
|
slaxemulator@0
|
552 if [ ! "$LOAD" -o ! "$(echo $MODNAME | egrep -i "$LOAD")" ]; then continue; fi
|
slaxemulator@0
|
553 fi
|
slaxemulator@0
|
554 if [ "$NOLOAD" -a "$(echo $MODNAME | egrep -i "$NOLOAD")" ]; then continue; fi
|
slaxemulator@0
|
555 echo $LINE
|
slaxemulator@0
|
556 done
|
slaxemulator@0
|
557 }
|
slaxemulator@0
|
558
|
slaxemulator@0
|
559 # Insert one single filesystem module to the union
|
slaxemulator@0
|
560 # $1 = union absolute path
|
slaxemulator@0
|
561 # $2 = module full path
|
slaxemulator@0
|
562 # $3 = destination folder, where images will be mounted to
|
slaxemulator@0
|
563 # $4 = preffix length strip (number of characters)
|
slaxemulator@0
|
564 #
|
slaxemulator@0
|
565 union_insert_module()
|
slaxemulator@0
|
566 {
|
slaxemulator@0
|
567 debug_log "union_insert_module" "$*"
|
slaxemulator@0
|
568 local TARGET
|
slaxemulator@0
|
569
|
slaxemulator@0
|
570 TARGET="$3/$(basename $2)"
|
slaxemulator@0
|
571 if ismountpoint $TARGET; then return 1; fi # skip already used modules
|
slaxemulator@0
|
572 mkdir -p $TARGET
|
slaxemulator@0
|
573 mount_module $2 $TARGET
|
slaxemulator@0
|
574 if [ $? -ne 0 ]; then echo "Cannot read module data. corrupted download?" >&2; return 1; fi
|
slaxemulator@0
|
575 union_insert_dir $1 $TARGET
|
slaxemulator@0
|
576 if [ $? -ne 0 ]; then echo "can't insert module to union" >&2; return 2; fi
|
slaxemulator@0
|
577 echo "$2" | cut -b $(($4+1))-
|
slaxemulator@0
|
578 echolog "$2" >/dev/null
|
slaxemulator@0
|
579 return 0
|
slaxemulator@0
|
580 }
|
slaxemulator@0
|
581
|
slaxemulator@0
|
582 # Insert all filesystem modules from $2 directory and subdirectories, to the union
|
slaxemulator@0
|
583 # $1 = union absolute path (starting with /)
|
slaxemulator@0
|
584 # $2 = LiveCD data dir (with directories /base, /modules, etc.)
|
slaxemulator@0
|
585 # $3 = destination folder, where images will be mounted to
|
slaxemulator@0
|
586 #
|
slaxemulator@0
|
587 union_insert_modules()
|
slaxemulator@0
|
588 {
|
slaxemulator@0
|
589 debug_log "union_insert_modules" "$*"
|
slaxemulator@0
|
590 local INSERTED
|
slaxemulator@0
|
591
|
slaxemulator@0
|
592 list_modules $2 | while read MODULE; do
|
slaxemulator@0
|
593 INSERTED=$(union_insert_module $1 $MODULE $3 ${#2})
|
slaxemulator@0
|
594 if [ "$INSERTED" != "" ]; then echolog " -> $(echo $INSERTED | sed -r s:^/::)"; fi
|
slaxemulator@0
|
595 done
|
slaxemulator@0
|
596 }
|
slaxemulator@0
|
597
|
slaxemulator@0
|
598 # Copy LiveCD modules to RAM directory
|
slaxemulator@0
|
599 # will copy only /boot, and module files from $1
|
slaxemulator@0
|
600 # $1 = data directory
|
slaxemulator@0
|
601 # $2 = target directory in RAM
|
slaxemulator@0
|
602 #
|
slaxemulator@0
|
603 copy_to_ram()
|
slaxemulator@0
|
604 {
|
slaxemulator@0
|
605 debug_log "copy_to_ram" "$*"
|
slaxemulator@0
|
606 cp -a "$1/rootcopy" "$2" 2>/dev/null # could be empty
|
slaxemulator@0
|
607 list_modules "$1" | while read MODULE; do
|
slaxemulator@0
|
608 TARGET=$(dirname "$MODULE" | cut -b ${#1}- | cut -b 2-)
|
slaxemulator@0
|
609 mkdir -p "$2/$TARGET"
|
slaxemulator@0
|
610 cp "$MODULE" "$2/$TARGET"
|
slaxemulator@0
|
611 if [ $? -ne 0 ]; then fatal "Not enough memory. Using ramsize=$RAMSIZE"; fi
|
slaxemulator@0
|
612 done
|
slaxemulator@0
|
613 }
|
slaxemulator@0
|
614
|
slaxemulator@0
|
615 # ===========================================================
|
slaxemulator@0
|
616 # discovery functions
|
slaxemulator@0
|
617 # ===========================================================
|
slaxemulator@0
|
618
|
slaxemulator@0
|
619 # List all supported network drivers
|
slaxemulator@0
|
620 #
|
slaxemulator@0
|
621 list_network_drivers()
|
slaxemulator@0
|
622 {
|
slaxemulator@0
|
623 debug_log "list_network_drivers" "$*"
|
slaxemulator@0
|
624
|
slaxemulator@0
|
625 # these drivers are probed in Slackware's initrd
|
slaxemulator@0
|
626 # (see initrd.img/scripts/network.sh).
|
slaxemulator@0
|
627 # I don't have personal experiences with most of these drivers
|
slaxemulator@0
|
628 # so I'll be happy if you report any particular one to be not working
|
slaxemulator@0
|
629 # (eg. causing hangups) in order to remove it from this list.
|
slaxemulator@0
|
630
|
slaxemulator@0
|
631 echo 3c59x acenic atl1 de4x5 dgrs eepro100 e1000 epic100 hp100 ne2k-pci \
|
slaxemulator@0
|
632 olympic pcnet32 r8169 rcpci 8139too 8139cp sktr skge sky2 tulip via-rhine \
|
slaxemulator@0
|
633 yellowfin tg3 dl2k ns83820 depca ibmtr 3c501 3c503 3c505 3c507 3c509 3c515 \
|
slaxemulator@0
|
634 ac3200 acenic at1700 cosa cs89x0 de4x5 de600 de620 e2100 eepro eexpress \
|
slaxemulator@0
|
635 es3210 eth16i ewrk3 fmv18x forcedeth hostess_sv11 hp-plus hp lne390 ne3210 \
|
slaxemulator@0
|
636 ni5010 ni52 ni65 sb1000 sealevel smc-ultra sis900 smc-ultra32 smc9194 wd \
|
slaxemulator@0
|
637 | tr " " "\n"
|
slaxemulator@0
|
638 }
|
slaxemulator@0
|
639
|
slaxemulator@0
|
640 # List all CD-ROMs
|
slaxemulator@0
|
641 # by using /proc entries
|
slaxemulator@0
|
642 #
|
slaxemulator@0
|
643 list_cdrom_devices()
|
slaxemulator@0
|
644 {
|
slaxemulator@0
|
645 debug_log "list_cdrom_devices" "$*"
|
slaxemulator@0
|
646 local CDDEVICE
|
slaxemulator@0
|
647
|
slaxemulator@0
|
648 for CDDEVICE in $(cat /proc/sys/dev/cdrom/info 2>/dev/null | head -n 3 | tail -n 1 | cut -d ":" -f 2); do
|
slaxemulator@0
|
649 echo "/dev/$CDDEVICE"
|
slaxemulator@0
|
650 done
|
slaxemulator@0
|
651 }
|
slaxemulator@0
|
652
|
slaxemulator@0
|
653 # List all mounted directories
|
slaxemulator@0
|
654 #
|
slaxemulator@0
|
655 list_mounted_directories()
|
slaxemulator@0
|
656 {
|
slaxemulator@0
|
657 debug_log "list_mounted_directories" "$*"
|
slaxemulator@0
|
658 if [ "$MOUNTDIR" ]; then
|
slaxemulator@0
|
659 ls -1 $MOUNTDIR | while read DIR; do
|
slaxemulator@0
|
660 if ismountpoint $MOUNTDIR/$DIR; then echo $DIR; fi
|
slaxemulator@0
|
661 done
|
slaxemulator@0
|
662 fi
|
slaxemulator@0
|
663 }
|
slaxemulator@0
|
664
|
slaxemulator@0
|
665 # List all devices with filesystems
|
slaxemulator@0
|
666 # Return empty result when nohd parameter was given.
|
slaxemulator@0
|
667 #
|
slaxemulator@0
|
668 list_partition_devices()
|
slaxemulator@0
|
669 {
|
slaxemulator@0
|
670 debug_log "list_partition_devices" "$*"
|
slaxemulator@0
|
671 if [ "$(cmdline_parameter nohd)" != "" ]; then return 1; fi
|
slaxemulator@0
|
672 cat /proc/partitions | grep -v loop | grep -v major | grep -v '^$' | sed -r "s:^[0-9 ]+:/dev/:"
|
slaxemulator@0
|
673 if [ -e /dev/mapper/control ]; then # list LVM partitions if available
|
slaxemulator@0
|
674 ls -1 /dev/mapper/ | grep -v "^control\$" | sed -r "s:^:/dev/mapper/:"
|
slaxemulator@0
|
675 fi
|
slaxemulator@0
|
676 }
|
slaxemulator@0
|
677
|
slaxemulator@0
|
678 # List all disk devices
|
slaxemulator@0
|
679 #
|
slaxemulator@0
|
680 list_disk_devices()
|
slaxemulator@0
|
681 {
|
slaxemulator@0
|
682 debug_log "list_disk_devices" "$*"
|
slaxemulator@0
|
683 list_partition_devices | egrep -v "[0-9]"
|
slaxemulator@0
|
684 }
|
slaxemulator@0
|
685
|
slaxemulator@0
|
686 # List all partitions marked as Linux Swap
|
slaxemulator@0
|
687 #
|
slaxemulator@0
|
688 list_swap_devices()
|
slaxemulator@0
|
689 {
|
slaxemulator@0
|
690 debug_log "list_swap_devices" "$*"
|
slaxemulator@0
|
691 if [ "$(cmdline_parameter nohd)" != "" -o "$(cmdline_parameter noswap)" != "" ]; then return 1; fi
|
slaxemulator@0
|
692 blkid -t TYPE="swap" -o device
|
slaxemulator@0
|
693 }
|
slaxemulator@0
|
694
|
slaxemulator@0
|
695 # List all block devices
|
slaxemulator@0
|
696 #
|
slaxemulator@0
|
697 list_block_devices()
|
slaxemulator@0
|
698 {
|
slaxemulator@0
|
699 debug_log "list_block_devices" "$*"
|
slaxemulator@0
|
700 if [ "$(cmdline_parameter nocd)" = "" ]; then
|
slaxemulator@0
|
701 list_cdrom_devices
|
slaxemulator@0
|
702 fi
|
slaxemulator@0
|
703 list_partition_devices
|
slaxemulator@0
|
704 }
|
slaxemulator@0
|
705
|
slaxemulator@0
|
706 # Format mountdir for device. This function used to append _cdrom or _removable
|
slaxemulator@0
|
707 # suffix to the directory name so KDE was able to assign a nice icon for evey
|
slaxemulator@0
|
708 # device, but this should be done using HAL in KDE nowadays, so we do not
|
slaxemulator@0
|
709 # support these stupid suffixes anymore. Many people will be happy :)
|
slaxemulator@0
|
710 # $1 = device full path, eg. /dev/hda1
|
slaxemulator@0
|
711 #
|
slaxemulator@0
|
712 device_mountdir()
|
slaxemulator@0
|
713 {
|
slaxemulator@0
|
714 debug_log "device_mountdir" "$*"
|
slaxemulator@0
|
715 echo "/$MOUNTDIR/$(basename "$1")" | tr -s /
|
slaxemulator@0
|
716 }
|
slaxemulator@0
|
717
|
slaxemulator@0
|
718 # Find file-path on given device
|
slaxemulator@0
|
719 # First it mounts the device read-only. If then the 'path' is found,
|
slaxemulator@0
|
720 # then remount without RO flag (causes it to be mounted read-write if possible)
|
slaxemulator@0
|
721 # and return the path, else unmount and exit.
|
slaxemulator@0
|
722 # If the device/dev_directory is already mounted, preserve it mounted
|
slaxemulator@0
|
723 # $1 = device
|
slaxemulator@0
|
724 # $2 = path/filename
|
slaxemulator@0
|
725 #
|
slaxemulator@0
|
726 find_filepath()
|
slaxemulator@0
|
727 {
|
slaxemulator@0
|
728 debug_log "find_filepath" "$*"
|
slaxemulator@0
|
729 local DIR FOUND PRESERVE
|
slaxemulator@0
|
730
|
slaxemulator@0
|
731 DIR=$(device_mountdir $1)
|
slaxemulator@0
|
732 ismountpoint $DIR
|
slaxemulator@0
|
733 if [ $? -eq 0 ]; then
|
slaxemulator@0
|
734 PRESERVE="true"
|
slaxemulator@0
|
735 else
|
slaxemulator@0
|
736 mount_device $1 $DIR ro
|
slaxemulator@0
|
737 if [ $? -ne 0 ]; then rmdir $DIR 2>/dev/null; return 1; fi
|
slaxemulator@0
|
738 PRESERVE=""
|
slaxemulator@0
|
739 fi
|
slaxemulator@0
|
740
|
slaxemulator@0
|
741 FOUND=$(ls -A1d $DIR/$2 2>/dev/null | head -n 1 | tr -s '/')
|
slaxemulator@0
|
742
|
slaxemulator@0
|
743 if [ "$FOUND" = "" ]; then
|
slaxemulator@0
|
744 if [ "$PRESERVE" != "true" ]; then
|
slaxemulator@0
|
745 fumount $DIR
|
slaxemulator@0
|
746 rmdir $DIR 2>/dev/null
|
slaxemulator@0
|
747 fi
|
slaxemulator@0
|
748 return 1
|
slaxemulator@0
|
749 else
|
slaxemulator@0
|
750 # remount without the 'ro' option now, so use rw or defaults
|
slaxemulator@0
|
751 # Only in the case it was not mounted already before.
|
slaxemulator@0
|
752 if [ "$PRESERVE" != "true" ]; then
|
slaxemulator@0
|
753 fumount $DIR
|
slaxemulator@0
|
754 mount_device $1 $DIR
|
slaxemulator@0
|
755 if [ $? -ne 0 ]; then
|
slaxemulator@0
|
756 rmdir $DIR 2>/dev/null
|
slaxemulator@0
|
757 return 2
|
slaxemulator@0
|
758 fi
|
slaxemulator@0
|
759 fi
|
slaxemulator@0
|
760 echo "$FOUND"
|
slaxemulator@0
|
761 return 0
|
slaxemulator@0
|
762 fi
|
slaxemulator@0
|
763 }
|
slaxemulator@0
|
764
|
slaxemulator@0
|
765 # Find file in computer by mounting disks or other storage devices
|
slaxemulator@0
|
766 # and searching for $1 in the mounted directory
|
slaxemulator@0
|
767 # $1 = filename or device-path or devicepath/filename
|
slaxemulator@0
|
768 #
|
slaxemulator@0
|
769 find_file()
|
slaxemulator@0
|
770 {
|
slaxemulator@0
|
771 debug_log "find_file" "$*"
|
slaxemulator@0
|
772 local FIND DEVICE DEVPART PATHPART
|
slaxemulator@0
|
773
|
slaxemulator@0
|
774 # allow using /mnt/... as well as /dev/...
|
slaxemulator@0
|
775 FIND=$(echo "$1" | sed -r "s:^/mnt/:/dev/:")
|
slaxemulator@0
|
776
|
slaxemulator@0
|
777 # if parameter is just a device, echo it and exit
|
slaxemulator@0
|
778 if [ -b "$FIND" -o -c "$FIND" -o "$FIND" = "" ]; then echo "$FIND"; return; fi
|
slaxemulator@0
|
779
|
slaxemulator@0
|
780 # If path doesn't start with /dev/, try to find the exact path on all devices
|
slaxemulator@0
|
781 # First, split DEV/PATH parts
|
slaxemulator@0
|
782 DEVPART=$(echo "$FIND" | egrep -o "^/dev/[^/]+")
|
slaxemulator@0
|
783
|
slaxemulator@0
|
784 if [ "$DEVPART" = "" ]; then
|
slaxemulator@0
|
785 # no device is specified. Search all devices for filename $FIND
|
slaxemulator@0
|
786 PATHPART="$FIND";
|
slaxemulator@0
|
787 for DEVICE in $(list_mounted_directories) $(list_block_devices); do
|
slaxemulator@0
|
788 if ! grep -q ":$DEVICE@$PATHPART:" /tmp/_findfile 2>/dev/null; then
|
slaxemulator@0
|
789 find_filepath "$DEVICE" "$PATHPART"
|
slaxemulator@0
|
790 if [ $? -eq 0 ]; then return 0; fi
|
slaxemulator@0
|
791 echo ":$DEVICE@$PATHPART:" >>/tmp/_findfile
|
slaxemulator@0
|
792 fi
|
slaxemulator@0
|
793 done
|
slaxemulator@0
|
794 else
|
slaxemulator@0
|
795 # try to find PATHPART only on the given device
|
slaxemulator@0
|
796 PATHPART=$(echo "$FIND" | sed -r 's:^/dev/[^/]+(.*):\1:')
|
slaxemulator@0
|
797 find_filepath $DEVPART $PATHPART
|
slaxemulator@0
|
798 fi
|
slaxemulator@0
|
799 }
|
slaxemulator@0
|
800
|
slaxemulator@0
|
801 # Find In Computer
|
slaxemulator@0
|
802 # use 'find_file' function to find the given file/dir
|
slaxemulator@0
|
803 # if nothing found, sleep for a while to allow devices to settle and try again.
|
slaxemulator@0
|
804 # (is there any way to find out if there are devices queued through /sys?)
|
slaxemulator@0
|
805 # $1 = file or directory to find
|
slaxemulator@0
|
806 #
|
slaxemulator@0
|
807 find_in_computer()
|
slaxemulator@0
|
808 {
|
slaxemulator@0
|
809 debug_log "find_in_computer" "$*"
|
slaxemulator@0
|
810 local TIMEOUT RESULT
|
slaxemulator@0
|
811
|
slaxemulator@0
|
812 TIMEOUT=$(cmdline_value scantimeout | sed -r 's/[^0-9]*([0-9]+).*/\1/')
|
slaxemulator@0
|
813 if [ "$TIMEOUT" = "" ]; then TIMEOUT=10; fi
|
slaxemulator@0
|
814
|
slaxemulator@0
|
815 RESULT=$(find_file "$1")
|
slaxemulator@0
|
816
|
slaxemulator@0
|
817 while [ $TIMEOUT -gt 0 -a "$RESULT" = "" ]; do
|
slaxemulator@0
|
818 echo -ne "- wait a while\r" >&2
|
slaxemulator@0
|
819 sleep 1
|
slaxemulator@0
|
820 TIMEOUT=$((TIMEOUT-1))
|
slaxemulator@0
|
821 RESULT=$(find_file "$1")
|
slaxemulator@0
|
822 done
|
slaxemulator@0
|
823
|
slaxemulator@0
|
824 echo $RESULT
|
slaxemulator@0
|
825 }
|
slaxemulator@0
|
826
|
slaxemulator@0
|
827 # Find and run all scripts from the given module
|
slaxemulator@0
|
828 # This function is used by the activate and deactivate script when the distro
|
slaxemulator@0
|
829 # is already started, not during live setup
|
slaxemulator@0
|
830 # $1 = mounted module full path
|
slaxemulator@0
|
831 # $2..$n = optional arguments for the scripts, eg. 'start'
|
slaxemulator@0
|
832 #
|
slaxemulator@0
|
833 find_n_run_scripts()
|
slaxemulator@0
|
834 {
|
slaxemulator@0
|
835 debug_log "find_n_run_scripts" "$*"
|
slaxemulator@0
|
836 local MOD
|
slaxemulator@0
|
837
|
slaxemulator@0
|
838 MOD="$1"
|
slaxemulator@0
|
839 shift
|
slaxemulator@0
|
840
|
slaxemulator@0
|
841 if [ -d $MOD/etc/rc.d -o -d $MOD/etc/rc.d/init.d -o -d $MOD/etc/init.d ]; then
|
slaxemulator@0
|
842 ( find $MOD/etc/rc.d -type f -maxdepth 1 2>/dev/null ; \
|
slaxemulator@0
|
843 find $MOD/etc/init.d -type f -maxdepth 1 2>/dev/null ; \
|
slaxemulator@0
|
844 find $MOD/etc/rc.d/init.d -type f -maxdepth 1 2>/dev/null \
|
slaxemulator@0
|
845 ) | cut -b ${#MOD}- | cut -b 2- | xargs -n 1 -r readlink -f | sort -u | while read SCRIPT; do
|
slaxemulator@0
|
846 if [ "$SCRIPT" != "" -a -x "$SCRIPT" -a ! -d "$SCRIPT" ]; then
|
slaxemulator@0
|
847 # call the script by real path, not from the module
|
slaxemulator@0
|
848 log "starting '$SCRIPT $@'"
|
slaxemulator@0
|
849 ${SCRIPT} "$@"
|
slaxemulator@0
|
850 fi
|
slaxemulator@0
|
851 done
|
slaxemulator@0
|
852 fi
|
slaxemulator@0
|
853 }
|
slaxemulator@0
|
854
|
slaxemulator@0
|
855 # ===========================================================
|
slaxemulator@0
|
856 # hardware preparation functions
|
slaxemulator@0
|
857 # ===========================================================
|
slaxemulator@0
|
858
|
slaxemulator@0
|
859 # Create block devices to /dev described by /sys entries
|
slaxemulator@0
|
860 #
|
slaxemulator@0
|
861 mdev_start_hotplug()
|
slaxemulator@0
|
862 {
|
slaxemulator@0
|
863 debug_log "mdev_start_hotplug" "$*"
|
slaxemulator@0
|
864 echolog "Creating /dev entries for block devices"
|
slaxemulator@0
|
865 mdev -s
|
slaxemulator@0
|
866 #rm /dev/pty??* /dev/tty??* # remove unneeded pty and tty devices
|
slaxemulator@0
|
867 echo /bin/mdev > /proc/sys/kernel/hotplug # use mdev as a hotplug handler
|
slaxemulator@0
|
868 }
|
slaxemulator@0
|
869
|
slaxemulator@0
|
870 # Modprobe kernel modules needed for the LiveCD
|
slaxemulator@0
|
871 #
|
slaxemulator@0
|
872 modprobe_essential_modules()
|
slaxemulator@0
|
873 {
|
slaxemulator@0
|
874 debug_log "modprobe_essential_modules" "$*"
|
slaxemulator@0
|
875
|
slaxemulator@0
|
876 echolog "Loading filesystems modules ..."
|
slaxemulator@0
|
877 modprobe_module loop
|
slaxemulator@0
|
878 modprobe_module isofs
|
slaxemulator@0
|
879 #modprobe_module sqlzma
|
slaxemulator@0
|
880 modprobe_module squashfs
|
slaxemulator@0
|
881 #modprobe_module unlzma
|
slaxemulator@0
|
882 modprobe_module aufs brs=1
|
slaxemulator@0
|
883 modprobe_module ext2
|
slaxemulator@0
|
884 modprobe_module ext3
|
slaxemulator@0
|
885 modprobe_module ext4
|
slaxemulator@0
|
886 modprobe_module btrfs
|
slaxemulator@0
|
887 modprobe_module reiserfs
|
slaxemulator@0
|
888 modprobe_module xfs
|
slaxemulator@0
|
889 modprobe_module vfat
|
slaxemulator@0
|
890 modprobe_module fuse # for ntfs-3g
|
slaxemulator@0
|
891 modprobe_module ntfs # for ro driver
|
slaxemulator@0
|
892 }
|
slaxemulator@0
|
893
|
slaxemulator@0
|
894 # Modprobe kernel modules needed for USB masstorage devices
|
slaxemulator@0
|
895 #
|
slaxemulator@0
|
896 modprobe_usb_modules()
|
slaxemulator@0
|
897 {
|
slaxemulator@0
|
898 debug_log "modprobe_usb_modules" "$*"
|
slaxemulator@0
|
899 local LSPCI
|
slaxemulator@0
|
900
|
slaxemulator@0
|
901 # skip module loading if nohotplug bootparam is present
|
slaxemulator@0
|
902 if [ "$(cmdline_parameter nohotplug)" ]; then return 0; fi
|
slaxemulator@0
|
903
|
slaxemulator@0
|
904 LSPCI=$(lspci -v | grep -i prog-if)
|
slaxemulator@0
|
905 if [ "$(echo $LSPCI | egrep -i [eou]hci)" = "" ]; then
|
slaxemulator@0
|
906 return 0
|
slaxemulator@0
|
907 fi
|
slaxemulator@0
|
908
|
slaxemulator@0
|
909 echolog "Loading USB modules ..."
|
slaxemulator@0
|
910 if [ "$(echo $LSPCI | grep -i ehci)" != "" ]; then
|
slaxemulator@0
|
911 modprobe_module ehci-hcd
|
slaxemulator@0
|
912 fi
|
slaxemulator@0
|
913 if [ "$(echo $LSPCI | grep -i ohci)" != "" ]; then
|
slaxemulator@0
|
914 modprobe_module ohci-hcd
|
slaxemulator@0
|
915 fi
|
slaxemulator@0
|
916 if [ "$(echo $LSPCI | grep -i uhci)" != "" ]; then
|
slaxemulator@0
|
917 modprobe_module uhci-hcd
|
slaxemulator@0
|
918 fi
|
slaxemulator@0
|
919 modprobe_module usb-storage
|
slaxemulator@0
|
920 }
|
slaxemulator@0
|
921
|
slaxemulator@0
|
922 # Load drivers for PCMCIA CardBus devices
|
slaxemulator@0
|
923 #
|
slaxemulator@0
|
924 modprobe_pcmcia_modules()
|
slaxemulator@0
|
925 {
|
slaxemulator@0
|
926 debug_log "modprobe_pcmcia_modules" "$*"
|
slaxemulator@0
|
927
|
slaxemulator@0
|
928 # skip module loading if nohotplug bootparam is present
|
slaxemulator@0
|
929 if [ "$(cmdline_parameter nohotplug)" ]; then return 0; fi
|
slaxemulator@0
|
930
|
slaxemulator@0
|
931 echolog "Loading PCMCIA CardBus modules ..."
|
slaxemulator@0
|
932 modprobe_module pcmcia_core
|
slaxemulator@0
|
933 modprobe_module pcmcia
|
slaxemulator@0
|
934 modprobe_module rsrc_nonstatic
|
slaxemulator@0
|
935 modprobe_module yenta_socket
|
slaxemulator@0
|
936 }
|
slaxemulator@0
|
937
|
slaxemulator@0
|
938 # Load network drivers unless eth[0-9] is found
|
slaxemulator@0
|
939 #
|
slaxemulator@0
|
940 modprobe_network_modules()
|
slaxemulator@0
|
941 {
|
slaxemulator@0
|
942 debug_log "modprobe_network_modules" "$*"
|
slaxemulator@0
|
943 local ETH
|
slaxemulator@0
|
944
|
slaxemulator@0
|
945 # skip module loading if nohotplug bootparam is present
|
slaxemulator@0
|
946 if [ "$(cmdline_parameter nohotplug)" ]; then return 0; fi
|
slaxemulator@0
|
947
|
slaxemulator@0
|
948 # probe all drivers. Start by the ones mentioned in pcimodules' output
|
slaxemulator@0
|
949 for module in $(list_network_drivers | egrep "$(pcimodules | tr "\n" "|")!") $(list_network_drivers); do
|
slaxemulator@0
|
950 modprobe_module $module
|
slaxemulator@0
|
951 ETH=$(cat /proc/net/dev | grep : | grep -v lo: | cut -d : -f 1 | tr -d " ")
|
slaxemulator@0
|
952 if [ "$ETH" != "" ]; then
|
slaxemulator@0
|
953 echo $ETH
|
slaxemulator@0
|
954 return 0
|
slaxemulator@0
|
955 fi
|
slaxemulator@0
|
956 rmmod $module 2>/dev/null
|
slaxemulator@0
|
957 done
|
slaxemulator@0
|
958 }
|
slaxemulator@0
|
959
|
slaxemulator@0
|
960 # Start udhcpc to get IP address from DHCP server
|
slaxemulator@0
|
961 # $1 = interface to use (optional)
|
slaxemulator@0
|
962 #
|
slaxemulator@0
|
963 init_dhcp()
|
slaxemulator@0
|
964 {
|
slaxemulator@0
|
965 debug_log "start_dhcp_client" "$*"
|
slaxemulator@0
|
966
|
slaxemulator@0
|
967 if [ "$1" != "" ]; then
|
slaxemulator@0
|
968 ifconfig $1 up
|
slaxemulator@0
|
969 udhcpc -i $1 -q
|
slaxemulator@0
|
970 else
|
slaxemulator@0
|
971 ifconfig eth0 up
|
slaxemulator@0
|
972 udhcpc -q
|
slaxemulator@0
|
973 fi
|
slaxemulator@0
|
974 }
|
slaxemulator@0
|
975
|
slaxemulator@0
|
976 # Mount http filesystem from the given server
|
slaxemulator@0
|
977 # $1 = server
|
slaxemulator@0
|
978 # $2 = mountdir
|
slaxemulator@0
|
979 #
|
slaxemulator@0
|
980 mount_httpfs()
|
slaxemulator@0
|
981 {
|
slaxemulator@0
|
982 debug_log "mount_httpfs" "$*"
|
slaxemulator@0
|
983
|
slaxemulator@0
|
984 mkdir -p $2
|
slaxemulator@0
|
985 httpfs $1 $2
|
slaxemulator@0
|
986 }
|
slaxemulator@0
|
987
|
slaxemulator@0
|
988
|
slaxemulator@0
|
989 # Unload modules loaded to kernel which are not used
|
slaxemulator@0
|
990 # This function used to unload more modules, but it may cause
|
slaxemulator@0
|
991 # problems to auto-remove some of them (eg. a network module
|
slaxemulator@0
|
992 # can seem unneeded even if network is to be used very soon.
|
slaxemulator@0
|
993 #
|
slaxemulator@0
|
994 rmmod_unused_modules()
|
slaxemulator@0
|
995 {
|
slaxemulator@0
|
996 debug_log "rmmod_unused_modules" "$*"
|
slaxemulator@0
|
997 rmmod usb-storage uhci-hcd ohci-hcd ehci-hcd 2>/dev/null
|
slaxemulator@0
|
998 rmmod yenta_socket rsrc_nonstatic pcmcia pcmcia_core 2>/dev/null
|
slaxemulator@0
|
999 }
|
slaxemulator@0
|
1000
|
slaxemulator@0
|
1001 # kill all unneeded processes, which have bigger PID then the PID of
|
slaxemulator@0
|
1002 # current shell. We can't use killall5, as it would kill some processes
|
slaxemulator@0
|
1003 # which may be currently needed, for example ntfs-3g.
|
slaxemulator@0
|
1004 # $1 = maximum pid (kill all lower)
|
slaxemulator@0
|
1005 #
|
slaxemulator@0
|
1006 killall_unneeded()
|
slaxemulator@0
|
1007 {
|
slaxemulator@0
|
1008 debug_log "killall_unneeded" "$*"
|
slaxemulator@0
|
1009 local LIST PID
|
slaxemulator@0
|
1010
|
slaxemulator@0
|
1011 PID=$1
|
slaxemulator@0
|
1012 for pid in $(ps | grep -v "PID" | egrep -v "\[.*\]" | fgrep -v mount | fgrep -v posixovl | fgrep -v ntfs | sed -r "s/^[[:space:]]*([0-9]+).*/\\1/"); do
|
slaxemulator@0
|
1013 if [ $pid -lt $PID ]; then
|
slaxemulator@0
|
1014 LIST="$LIST $pid"
|
slaxemulator@0
|
1015 fi
|
slaxemulator@0
|
1016 done
|
slaxemulator@0
|
1017
|
slaxemulator@0
|
1018 kill -SIGTERM $LIST 2>/dev/null # SIGTERM
|
slaxemulator@0
|
1019 sleep 2
|
slaxemulator@0
|
1020 kill -SIGKILL $LIST 2>/dev/null # SIGKILL
|
slaxemulator@0
|
1021 }
|
slaxemulator@0
|
1022
|
slaxemulator@0
|
1023 # enable/disable CD autoejecting when unmounted
|
slaxemulator@0
|
1024 # $1 = 1|0 ... enable|disable
|
slaxemulator@0
|
1025 #
|
slaxemulator@0
|
1026 cd_autoeject()
|
slaxemulator@0
|
1027 {
|
slaxemulator@0
|
1028 debug_log "cd_autoeject" "$*"
|
slaxemulator@0
|
1029 echo $1 >/proc/sys/dev/cdrom/autoeject
|
slaxemulator@0
|
1030 }
|
slaxemulator@0
|
1031
|
slaxemulator@0
|
1032 # ===========================================================
|
slaxemulator@0
|
1033 # FSTAB functions
|
slaxemulator@0
|
1034 # ===========================================================
|
slaxemulator@0
|
1035
|
slaxemulator@0
|
1036 # $1 = fstab file
|
slaxemulator@0
|
1037 # $2 = device name
|
slaxemulator@0
|
1038 dev_is_in_fstab()
|
slaxemulator@0
|
1039 {
|
slaxemulator@0
|
1040 debug_log "dev_is_in_fstab" "$*"
|
slaxemulator@0
|
1041 cat "$1" | sed -r "s/#.*//" | egrep -q "^[[:space:]]*$2[[:space:]]"
|
slaxemulator@0
|
1042 }
|
slaxemulator@0
|
1043
|
slaxemulator@0
|
1044 # update given line in fstab, add new values only if the device is not found
|
slaxemulator@0
|
1045 # $1 = fstab file to parse
|
slaxemulator@0
|
1046 # $2 = device name
|
slaxemulator@0
|
1047 # $3 = mountpoint
|
slaxemulator@0
|
1048 # $4 = filesystem
|
slaxemulator@0
|
1049 # $5 = mount options
|
slaxemulator@0
|
1050 #
|
slaxemulator@0
|
1051 fstab_add_line()
|
slaxemulator@0
|
1052 {
|
slaxemulator@0
|
1053 debug_log "fstab_add_line" "$*"
|
slaxemulator@0
|
1054 local DIR
|
slaxemulator@0
|
1055
|
slaxemulator@0
|
1056 if [ "$4" != "swap" ]; then DIR="$3"; else DIR="none"; fi
|
slaxemulator@0
|
1057 if ! dev_is_in_fstab "$1" "$2"; then
|
slaxemulator@0
|
1058 echo "$2" "$DIR" "$4" "$5" 0 0 "$FSTABLLFLAG" >>$1
|
slaxemulator@0
|
1059 fi
|
slaxemulator@0
|
1060 }
|
slaxemulator@0
|
1061
|
slaxemulator@0
|
1062 # create correct fstab file in $1/etc/fstab and create apropriate
|
slaxemulator@0
|
1063 # mount directories in $1/mnt. This function is only calld once,
|
slaxemulator@0
|
1064 # during liveCD startup (even before init from the distro is started).
|
slaxemulator@0
|
1065 # $1 = root directory (union)
|
slaxemulator@0
|
1066 #
|
slaxemulator@0
|
1067 fstab_update()
|
slaxemulator@0
|
1068 {
|
slaxemulator@0
|
1069 debug_log "fstab_update" "$*"
|
slaxemulator@0
|
1070 local FSTAB FSTABTMP
|
slaxemulator@0
|
1071
|
slaxemulator@0
|
1072 FSTAB="$1/etc/fstab"
|
slaxemulator@0
|
1073 FSTABTMP=$FSTAB$$
|
slaxemulator@0
|
1074 mkdir -p $1/etc $1/mnt
|
slaxemulator@0
|
1075 cat $FSTAB 2>/dev/null | grep -v "$FSTABLLFLAG" >$FSTABTMP
|
slaxemulator@0
|
1076
|
slaxemulator@0
|
1077 fstab_add_line $FSTABTMP none / unionfs defaults
|
slaxemulator@0
|
1078 fstab_add_line $FSTABTMP none /proc proc defaults
|
slaxemulator@0
|
1079 fstab_add_line $FSTABTMP none /sys sysfs defaults
|
slaxemulator@0
|
1080 fstab_add_line $FSTABTMP none /dev/pts devpts gid=5,mode=620
|
slaxemulator@0
|
1081 fstab_add_line $FSTABTMP tmpfs /dev/shm tmpfs defaults
|
slaxemulator@0
|
1082
|
slaxemulator@0
|
1083 list_cdrom_devices | while read DEVICE; do
|
slaxemulator@0
|
1084 MNT=$(device_mountdir $DEVICE)
|
slaxemulator@0
|
1085 FS=$(device_filesystem $DEVICE)
|
slaxemulator@0
|
1086 if [ "$FS" = "" ]; then FS=iso9660,udf; fi
|
slaxemulator@0
|
1087 mkdir -p "$1/$MNT"
|
slaxemulator@0
|
1088 fstab_add_line $FSTABTMP $DEVICE $MNT $FS $(fs_options $FS fstab)
|
slaxemulator@0
|
1089 done
|
slaxemulator@0
|
1090 list_partition_devices | while read DEVICE; do
|
slaxemulator@0
|
1091 MNT=$(device_mountdir $DEVICE)
|
slaxemulator@0
|
1092 FS=$(device_filesystem $DEVICE)
|
slaxemulator@0
|
1093 OPT=$(fs_options $FS fstab)
|
slaxemulator@0
|
1094
|
slaxemulator@0
|
1095 if [ "$FS" = "swap" ]; then
|
slaxemulator@0
|
1096 fstab_add_line $FSTABTMP $DEVICE $MNT $FS $OPT
|
slaxemulator@0
|
1097 fi
|
slaxemulator@0
|
1098
|
slaxemulator@0
|
1099 # If the partition has a valid filesystem, add it to fstab
|
slaxemulator@0
|
1100 if is_supported_filesystem "$FS"; then
|
slaxemulator@0
|
1101 fstab_add_line $FSTABTMP $DEVICE $MNT $FS $OPT
|
slaxemulator@0
|
1102 mkdir -p "$1/$MNT"
|
slaxemulator@0
|
1103 fi
|
slaxemulator@0
|
1104 done
|
slaxemulator@0
|
1105
|
slaxemulator@0
|
1106 mv -f $FSTABTMP $FSTAB
|
slaxemulator@0
|
1107 }
|
slaxemulator@0
|
1108
|
slaxemulator@0
|
1109 # create correct fstab file in $1/etc/fstab only with aufs,proc,sysfs and devpts
|
slaxemulator@0
|
1110 # No partition will be mounted and mount point created
|
slaxemulator@0
|
1111 # HAL is going to manage mount points and medias
|
slaxemulator@0
|
1112 fstab_clean()
|
slaxemulator@0
|
1113 {
|
slaxemulator@0
|
1114 debug_log "fstab_update" "$*"
|
slaxemulator@0
|
1115 local FSTAB FSTABTMP
|
slaxemulator@0
|
1116
|
slaxemulator@0
|
1117 FSTAB="$1/etc/fstab"
|
slaxemulator@0
|
1118 FSTABTMP=$FSTAB$$
|
slaxemulator@0
|
1119 mkdir -p $1/etc $1/mnt
|
slaxemulator@0
|
1120 cat $FSTAB 2>/dev/null | grep -v "$FSTABLLFLAG" >$FSTABTMP
|
slaxemulator@0
|
1121
|
slaxemulator@0
|
1122 fstab_add_line $FSTABTMP aufs / aufs defaults
|
slaxemulator@0
|
1123 fstab_add_line $FSTABTMP proc /proc proc defaults
|
slaxemulator@0
|
1124 fstab_add_line $FSTABTMP sysfs /sys sysfs defaults
|
slaxemulator@0
|
1125 fstab_add_line $FSTABTMP devpts /dev/pts devpts gid=5,mode=620
|
slaxemulator@0
|
1126 fstab_add_line $FSTABTMP tmpfs /dev/shm tmpfs defaults
|
slaxemulator@0
|
1127 mv -f $FSTABTMP $FSTAB
|
slaxemulator@0
|
1128 }
|