source: trunk/package/block-mount/files/block.sh @ 19877

Last change on this file since 19877 was 19877, checked in by nbd, 6 years ago

add the block-mount package by Daniel Dickinson (cshore), replacing existing automount functionality

File size: 6.4 KB
Line 
1#!/bin/sh
2# Copyright 2010 Vertical Communications
3# This is free software, licensed under the GNU General Public License v2.
4# See /LICENSE for more information.
5#
6
7. /etc/functions.sh
8
9reset_block_cb() {
10        mount_cb() { 
11                dmc_mount_cfg="$1"
12                shift # skip optional param
13                dmc_target="$2"
14                dmc_mount_device="$3"
15                dmc_fstype="$4"
16                dmc_options="$5"
17                dmc_enabled="$6"
18                dmc_enabled_fsck="$7"
19                dmc_uuid="$8"
20                dmc_label="$9"
21                shift
22                dmc_is_rootfs="$9"
23                return 0
24        }
25        swap_cb() { 
26                dsc_swap_cfg="$1"
27                shift # skip optional param
28                dsc_swap_device="$2"
29                dsc_enabled="$3"
30                dsc_uuid="$4"
31                dsc_label="$5"
32                return 0
33        }
34}
35reset_block_cb
36
37reset_dev_section_cb() {
38        mount_dev_section_cb() {
39                dmds_mount_cfg="$1"
40                dmds_mount_target="$2"
41                dmds_mount_device="$3"
42                dmds_mount_fstype="$4"
43                dmds_mount_options="$5"
44                dmds_mount_enabled="$6"
45                dmds_mount_enabled_fsck="$7"
46                dmds_mount_uuid="$8"
47                dmds_mount_label="$9"
48                shift
49                dmds_is_rootfs="$9"
50                return 0
51        }
52        swap_dev_section_cb() { 
53                dsds_swap_cfg="$1"
54                dsds_swap_device="$2"
55                dsds_swap_enabled="$3"
56                dsds_swap_uuid="$4"
57                dsds_swap_label="$5"
58                return 0
59        }
60}
61reset_dev_section_cb
62
63config_get_mount() {
64        local gm_cfg="$1"
65        local gm_param="$2"
66        local gm_target
67        local gm_device
68        local gm_fstype
69        local gm_options
70        local gm_enabled
71        local gm_enabled_fsck
72        local gm_uuid
73        local gm_label
74        local gm_is_rootfs
75        config_get gm_target "$1" target
76        config_get gm_device "$1" device
77        config_get gm_fstype "$1" fstype 'auto'
78        config_get gm_options "$1" options 'rw'
79        config_get_bool gm_enabled "$1" enabled 1
80        config_get_bool gm_enabled_fsck "$1" enabled_fsck 0
81        config_get gm_uuid "$1" uuid
82        config_get gm_label "$1" label
83        config_get_bool gm_is_rootfs "$1" is_rootfs 0
84        mount_cb "$gm_cfg" "$gm_param" "$gm_target" "$gm_device" "$gm_fstype" "$gm_options" "$gm_enabled" "$gm_enabled_fsck" "$gm_uuid" "$gm_label" "$gm_is_rootfs"
85}
86
87config_get_swap() {
88        local gs_cfg="$1"
89        local gs_param="$2"
90        local gs_device
91        local gs_enabled
92        local gs_uuid
93        local gs_label
94        config_get gs_device "$1" device
95        config_get_bool gs_enabled "$1" enabled 1
96        config_get gs_uuid "$1" uuid
97        config_get gs_label "$1" label
98
99        swap_cb "$gs_cfg" "$gs_param" "$gs_device" "$gs_enabled" "$gs_uuid" "$gs_label"
100}
101
102config_get_automount() {
103        config_load fstab
104        config_get_bool from_fstab "automount" from_fstab 1
105        config_get_bool anon_mount "automount" anon_mount 1
106        config_get_bool anon_fsck "automount" anon_fsck 0
107}
108
109config_get_autoswap() {
110        config_load fstab
111        config_get_bool from_fstab "autoswap" from_fstab 1
112        config_get_bool anon_swap "autoswap" anon_swap 0
113}
114
115config_create_swap_fstab_entry() {
116        local device="$1"
117        local enabled="$2"
118
119        [ -n "$device" ] || return 0
120
121        local fstabnew="$(mktemp -t '.fstab.XXXXXXXX')"
122       
123        mkdir -p /var/lock
124        lock /var/lock/fstab.lck
125        cat /tmp/fstab | grep -E -v "^$device[[:blank:]]" >>"$fstabnew"
126        [ "$enabled" -eq 1 ] && echo "$device   none    swap    sw      0       0" >> "$fstabnew"
127        cat "$fstabnew" >/tmp/fstab
128        lock -u /var/lock/fstab.lck
129        rm -f $fstabnew
130}
131
132config_create_mount_fstab_entry() {
133        local device="$1"
134        local target="$2"
135        local fstype="$3"
136        local options="$4"
137        local enabled="$5"
138        options="${options:-rw}"
139        [ "$enabled" -eq 0 ] && options="noauto,$options"
140        [ -n "$target" ] || return 0
141        [ -n "$device" ] || return 0
142
143        local fstabnew="$(mktemp -t '.fstab.XXXXXXXX')"
144       
145        mkdir -p /var/lock
146        lock /var/lock/fstab.lck
147        cat /tmp/fstab | grep -E -v "^$device[[:blank:]]" | grep -v "$target" >>"$fstabnew"
148        echo "$device   $target $fstype $options        0       0" >>"$fstabnew"
149        cat "$fstabnew" >/tmp/fstab             
150        lock -u /var/lock/fstab.lck
151        rm -f $fstabnew
152}
153
154libmount_find_token() {
155        local token="$1"
156        local value="$2"
157        local device
158        device="$(blkid | grep "$token=\"$value\"" | cut -f1 -d:)"
159        echo "$device"
160}
161
162libmount_find_device_by_id() {
163        local uuid="$1"
164        local label="$2"
165        local device="$3"
166        local cfg_device="$4"
167        local found_device
168       
169        if [ -n "$uuid" ]; then
170                found_device="$(libmount_find_token "UUID" "$uuid")"
171        elif [ -n "$label" ]; then
172                found_device="$(libmount_find_token "LABEL" "$label")"
173        elif [ "$device" = "$cfg_device" ]; then
174                found_device="$device"
175        elif [ -z "$device" ] && [ -e "$cfg_device" ]; then
176                found_device="$cfg_device"
177        fi
178        [ -n "$device" ] && [ "$device" != "$found_device" ] && {
179                found_device=""
180        }
181        echo "$found_device"
182}
183
184config_get_mount_section_by_device() {
185        local msbd_device="$1"
186        local msbd_mount_cfg=
187        local msbd_target=
188        local msbd_mount_device=
189        local msbd_fstype=
190        local msbd_options=
191        local msbd_enabled=
192        local msbd_enabled_fsck=
193        local msbd_uuid=
194        local msbd_label=
195        local msbd_is_rootfs
196        local msbd_blkid_fstype_match=
197        mount_cb() {
198                local mc_cfg="$1"
199                local mc_device="$2"
200                shift
201                local mc_target="$2"
202                local mc_cfgdevice="$3"
203                local mc_fstype="$4"
204                local mc_uuid="$8"
205                local mc_label="$9"
206                shift
207                local mc_is_rootfs="$9"
208                local mc_found_device=""
209               
210                mc_found_device="$(libmount_find_device_by_id "$mc_uuid" "$mc_label" "$mc_device" "$mc_cfgdevice")"
211                if [ -n "$mc_found_device" ]; then
212                        msbd_mount_cfg="$mc_cfg"
213                        msbd_target="$mc_target"
214                        msbd_mount_device="$mc_found_device"
215                        msbd_fstype="$mc_fstype"
216                        msbd_options="$4"
217                        msbd_enabled="$5"
218                        msbd_enabled_fsck="$6"
219                        msbd_uuid="$7"
220                        msbd_label="$8"
221                        msbd_is_rootfs="$9"
222                fi
223                return 0       
224        }
225        config_foreach config_get_mount mount "$msbd_device"
226        [ -n "$msbd_mount_device" ] && config_create_mount_fstab_entry "$msbd_mount_device" "$msbd_target" "$msbd_fstype" "$msbd_options" "$msbd_enabled" 
227        mount_dev_section_cb "$msbd_mount_cfg" "$msbd_target" "$msbd_mount_device" "$msbd_fstype" "$msbd_options" "$msbd_enabled" "$msbd_enabled_fsck" "$msbd_uuid" "$msbd_label" "$msbd_is_rootfs"
228        reset_block_cb
229}
230
231config_get_swap_section_by_device() {
232        local ssbd_device="$1"
233        local ssbd_swap_cfg=
234        local ssbd_swap_device=
235        local ssbd_enabled=
236        local ssbd_uuid=
237        local ssbd_label=
238        swap_cb() {
239                local sc_cfg="$1"
240                local sc_device="$2"
241                local sc_uuid="$5"
242                local sc_label="$6"
243                local sc_cfgdevice="$3"
244                local sc_found_device
245
246                sc_found_device="$(libmount_find_device_by_id "$sc_uuid" "$sc_label" "$sc_device" "$sc_cfgdevice")"
247                if [ -n "$sc_found_device" ]; then
248                        ssbd_swap_cfg="$sc_cfg"
249                        ssbd_swap_device="$sc_found_device"
250                        ssbd_enabled="$4"
251                        ssbd_uuid="$5"
252                        ssbd_label="$6"
253                fi
254                return 0       
255        }
256        config_foreach config_get_swap swap "$ssbd_device"
257        [ -n "$ssbd_swap_device" ] && config_create_swap_fstab_entry "$ssbd_swap_device" "$ssbd_enabled"
258        swap_dev_section_cb "$ssbd_swap_cfg" "$ssbd_swap_device" "$ssbd_enabled" "$ssbd_uuid" "$ssbd_label"
259        reset_block_cb
260}
261
262
Note: See TracBrowser for help on using the repository browser.