Contents of /tags/installer-0_1_2/ncurses-gui/diskpartition.sh
Parent Directory | Revision Log
Revision 1013 -
(show annotations)
(download)
(as text)
Sun May 30 17:33:29 2010 UTC (14 years, 4 months ago) by niro
Original Path: trunk/installer/ncurses-gui/diskpartition.sh
File MIME type: application/x-sh
File size: 6430 byte(s)
Sun May 30 17:33:29 2010 UTC (14 years, 4 months ago) by niro
Original Path: trunk/installer/ncurses-gui/diskpartition.sh
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 |