Magellan Linux

Annotation of /tags/installer-0_1_1/ncurses-gui/diskpartition.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1050 - (hide annotations) (download) (as text)
Sun May 30 23:12:53 2010 UTC (14 years ago) by niro
File MIME type: application/x-sh
File size: 6319 byte(s)
tagged 'installer-0_1_1'
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