Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords Id