Contents of /trunk/installer/ncurses-gui/diskpartition.sh
Parent Directory | Revision Log
Revision 1034 -
(show 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 | # $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 | $(${INSTALLER_DIR}/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 |