Magellan Linux

Contents of /trunk/installer/ncurses-gui/diskpartition.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1032 - (show annotations) (download) (as text)
Sun May 30 18:21:06 2010 UTC (13 years, 11 months ago) by niro
File MIME type: application/x-sh
File size: 6302 byte(s)
-fixed header
-make use of debug() function
1 # $Id$
2
3 adjust_column()
4 {
5 local maxlen="$1"
6 local var="$2"
7 local len
8 local space
9 local i
10
11 # get len of var
12 len="${#var}"
13
14 for ((i=len; i < maxlen; i++))
15 do
16 space+=" "
17 done
18
19 echo "${var}${space}"
20 }
21
22 get_list()
23 {
24 :> ${mylist}
25
26 # print dialog setup
27 echo "--extra-button --extra-label Done --ok-label Edit --colors \\" >> ${mylist}
28 # highlite
29 echo "--default-item \"${highlite}\" \\" >> ${mylist}
30 echo "--menu \"Select a disk or partition:\" \\" >> ${mylist}
31 echo "30 70 25 \\" >> ${mylist}
32
33 # print header
34 echo "\"$(adjust_column 5 disk) $(adjust_column 10 partition)\" \"\Zb\Z4$(adjust_column 11 size) $(adjust_column 8 fstype) $(adjust_column 4 flag) \Zb\Z6$(adjust_column 10 mountpoint) \Zb\Z6$(adjust_column 8 format)\"" >> ${mylist}
35 echo "\"\" \"\"" >> ${mylist}
36
37 OLDIFS="${IFS}"
38 IFS="|"
39 declare -i count=0
40 while read disk partition size fstype boot mount format
41 do
42 # line is a disk
43 if [[ ${disk} = ${partition} ]]
44 then
45 if [[ ${count} -gt 0 ]]
46 then
47 echo "\"\" \"\" ${off}" >> ${mylist}
48 fi
49 echo "\"${disk}\" \"\Zb\Z3[setup partition table]\"" >> ${mylist}
50 # line is a partition
51 else
52 echo "\"$(adjust_column 5 "") $(adjust_column 10 ${partition})\" \"$(adjust_column 11 ${size}) $(adjust_column 8 ${fstype}) $(adjust_column 4 ${boot}) \Zb\Z6$(adjust_column 10 ${mount}) \Zb\Z6$(adjust_column 8 ${format})\"" >> ${mylist}
53 fi
54 ((count++))
55 done << EOF
56 $(include/read_disk.sh)
57 EOF
58 IFS="${OLDIFS}"
59 }
60
61 partition_drive_list()
62 {
63 local mylist=$(mktemp)
64 local retval
65
66 # get partition list and write dialog file
67 get_list
68 # show dialog
69 dialog --stdout --file ${mylist}
70 retval="$?"
71 # remove temp files
72 rm ${mylist}
73
74 return ${retval}
75 }
76
77 setup_partition_filesystem()
78 {
79 dialog \
80 --stdout \
81 --colors \
82 --title "${SELECTED_DISK}" \
83 --backtitle "${TITLE}" \
84 --ok-label "Next" \
85 --menu "Select a filesystem:" 20 40 10 \
86 "keep-as-is" "" \
87 "ext2" "" \
88 "ext3" "" \
89 "reiserfs" "" \
90 "swap" ""
91 }
92
93 setup_partition_mountpoint()
94 {
95 dialog \
96 --stdout \
97 --colors \
98 --title "${SELECTED_DISK}" \
99 --backtitle "${TITLE}" \
100 --ok-label "Next" \
101 --menu "Select a mountpoint:" 20 40 10 \
102 "/" "" \
103 "/boot" "" \
104 "/home" "" \
105 "/tmp" "" \
106 "/usr" "" \
107 "/var" "" \
108 "/svr" "" \
109 "/opt" ""
110 }
111
112 setup_partition()
113 {
114 FILESYSTEM="$(setup_partition_filesystem)"
115 case $? in
116 -1) die "Error!" ;;
117 255) die "aborted by user" ;;
118
119 1)
120 partition_drive_list
121 # aborted, delete settings for sure
122 FILESYSTEM=""
123 ;;
124 0)
125 if [[ ${FILESYSTEM} = swap ]]
126 then
127 MOUNTPOINT="swap"
128 else
129 MOUNTPOINT="$(setup_partition_mountpoint)"
130 case $? in
131 -1) die "Error!" ;;
132 255) die "aborted by user" ;;
133
134 1)
135 partition_drive_list
136 # aborted, delete settings for sure
137 MOUNTPOINT=""
138 ;;
139 0)
140 true
141 ;;
142 esac
143 fi
144 ;;
145 esac
146
147 export FILESYSTEM
148 export MOUNTPOINT
149 }
150
151 query_partition_disk_setup()
152 {
153 local i
154 local partition
155 local filesystem
156 local mountpoint
157 local command="$1"
158 local given_partition="$2"
159
160 #
161 #--overwrite
162
163 for i in ${PARTITION_DISK_SETUP}
164 do
165 partition=$(echo ${i} | cut -d: -f1)
166 filesystem=$(echo ${i} | cut -d: -f2)
167 mountpoint=$(echo ${i} | cut -d: -f3)
168
169 if [[ ${partition} = ${given_partition} ]]
170 then
171 case ${command} in
172 --filesystem) echo "${filesystem}"; return 0;;
173 --mountpoint) echo "${mountpoint}"; return 0;;
174 --delete) export PARTITION_DISK_SETUP="${PARTITION_DISK_SETUP/${i}/}"; return 0;;
175 esac
176 fi
177 done
178 }
179
180 edit_disk_or_partition()
181 {
182 if [[ ! -z ${SELECTED_DISK} ]]
183 then
184 ${sudo} cfdisk ${SELECTED_DISK}
185 rundialog_partition_drive_list
186 else
187 rundialog_setup_partition
188 fi
189 }
190
191 rundialog_partition_drive_list()
192 {
193 local retval
194 SELECTED_DISK=$(partition_drive_list)
195 retval=$?
196
197 # highlite the current item
198 highlite="${SELECTED_DISK}"
199
200 # fix partitions, remove trailing empty spaces
201 SELECTED_DISK="$(trim ${SELECTED_DISK})"
202
203 # save given variables in env
204 # they will be shown as default on error
205 export SELECTED_DISK
206 export PARTITION_DISK_SETUP
207
208 # convert to some useable vars
209 local disk
210 local mount
211 local fs
212 for disk in ${PARTITION_DISK_SETUP}
213 do
214 disk="$(echo ${disk} | cut -d: -f1)"
215 mount=$(query_partition_disk_setup --mountpoint ${disk})
216 fs=$(query_partition_disk_setup --filesystem ${disk})
217
218 case ${mount} in
219 /)
220 export PARTITION_DISK_ROOT="${disk}"
221 export PARTITION_FS_ROOT="${fs}"
222 ;;
223 /boot)
224 export PARTITION_DISK_BOOT="${disk}"
225 export PARTITION_FS_BOOT="${fs}"
226 ;;
227 /home)
228 export PARTITION_DISK_HOME="${disk}"
229 export PARTITION_FS_HOME="${fs}"
230 ;;
231 /tmp)
232 export PARTITION_DISK_TMP="${disk}"
233 export PARTITION_FS_TMP="${fs}"
234 ;;
235 /usr)
236 export PARTITION_DISK_USER="${disk}"
237 export PARTITION_FS_USER="${fs}"
238 ;;
239 /var)
240 export PARTITION_DISK_VAR="${disk}"
241 export PARTITION_FS_VAR="${fs}"
242 ;;
243 /svr)
244 export PARTITION_DISK_SVR="${disk}"
245 export PARTITION_FS_SVR="${fs}"
246 ;;
247 /opt)
248 export PARTITION_DISK_OPT="${disk}"
249 export PARTITION_FS_OPT="${fs}"
250 ;;
251 swap)
252 export PARTITION_DISK_SWAP="${disk}"
253 export PARTITION_FS_SWAP="swap"
254 ;;
255 esac
256 done
257
258 case ${retval} in
259 -1) die "Error!" ;;
260 255) die "aborted by user" ;;
261
262 1)
263 partition_drive_list
264 ;;
265
266 3)
267 if [[ -z ${PARTITION_DISK_ROOT} ]] || [[ -z ${PARTITION_DISK_SWAP} ]]
268 then
269 messagebox "Warning" "You must at least select root (/) and a swap (SWAP) partition!" 10 40
270 rundialog_partition_drive_list
271 fi
272 ;;
273
274 0)
275 # do nothing if header or emptylines where selected
276 if [[ -z ${SELECTED_DISK} ]] || [[ ${SELECTED_DISK} = disk* ]]
277 then
278 rundialog_partition_drive_list
279
280 # a partition without a number must be the disk
281 elif [[ ${SELECTED_DISK/[0-9]/} = ${SELECTED_DISK} ]]
282 then
283 ${sudo} cfdisk ${SELECTED_DISK}
284 rundialog_partition_drive_list
285 else
286 rundialog_setup_partition
287 fi
288 ;;
289 esac
290
291 debug "SELECTED_DISK='${SELECTED_DISK}'"
292 }
293
294 rundialog_setup_partition()
295 {
296 setup_partition
297
298 # delete stanza
299 query_partition_disk_setup --delete "${SELECTED_DISK}"
300 # set the new
301 export PARTITION_DISK_SETUP="${PARTITION_DISK_SETUP} ${SELECTED_DISK}:${FILESYSTEM}:${MOUNTPOINT}"
302
303 rundialog_partition_drive_list
304 }
305
306 main_diskpartition()
307 {
308 rundialog_partition_drive_list
309 }

Properties

Name Value
svn:keywords Id