Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1013 - (hide annotations) (download) (as text)
Sun May 30 17:33:29 2010 UTC (14 years ago) by niro
File MIME type: application/x-sh
File size: 6430 byte(s)
-added ncurses-gui
1 niro 1013 # $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