Annotation of /trunk/installer/ncurses-gui/diskpartition.sh
Parent Directory | Revision Log
Revision 1034 -
(hide annotations)
(download)
(as text)
Sun May 30 18:29:43 2010 UTC (14 years, 4 months ago) by niro
File MIME type: application/x-sh
File size: 6319 byte(s)
Sun May 30 18:29:43 2010 UTC (14 years, 4 months ago) by niro
File MIME type: application/x-sh
File size: 6319 byte(s)
-added ncurses-gui
1 | niro | 1013 | # $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 | niro | 1034 | $(${INSTALLER_DIR}/include/read_disk.sh) |
57 | niro | 1013 | 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 |