rev |
line source |
pascal@208
|
1 #!/bin/sh
|
pascal@208
|
2 #
|
pascal@208
|
3 # Main CGI interface for Tazinst, the SliTaz installer.
|
pascal@208
|
4 #
|
pankso@254
|
5 # Copyright (C) 2012 SliTaz GNU/Linux - BSD License
|
pascal@208
|
6 #
|
pascal@208
|
7 # Authors : Dominique Corbex <domcox@slitaz.org>
|
pascal@208
|
8 #
|
pascal@208
|
9
|
domcox@294
|
10 VERSION=0.30
|
pascal@208
|
11
|
pascal@208
|
12 # Common functions from libtazpanel
|
pascal@208
|
13 . lib/libtazpanel
|
pascal@208
|
14 header
|
pascal@208
|
15 get_config
|
pascal@208
|
16
|
pascal@208
|
17 # Include gettext helper script.
|
pascal@208
|
18 . /usr/bin/gettext.sh
|
pascal@208
|
19
|
pascal@208
|
20 # Export package name for gettext.
|
al@303
|
21 #TEXTDOMAIN='installer'
|
al@303
|
22 #export TEXTDOMAIN
|
pascal@208
|
23
|
domcox@295
|
24 TITLE=$(gettext 'TazPanel - Installer')
|
pascal@208
|
25
|
pascal@208
|
26 # Tazinst required version
|
pascal@208
|
27 TAZINST_REQUIRED_VERSION="3.3"
|
pascal@208
|
28
|
pascal@208
|
29 # Tazinst setup file
|
pascal@208
|
30 INSTFILE=/var/lib/tazinst.conf
|
pascal@208
|
31
|
pascal@208
|
32
|
pascal@208
|
33 write_setup()
|
pascal@208
|
34 {
|
pascal@208
|
35 if [ -e "$INSTFILE" ]; then
|
pascal@208
|
36 # Install type
|
pascal@208
|
37 INST_TYPE=$(GET INST_TYPE)
|
pascal@208
|
38 # Source File
|
pascal@208
|
39 case "$INST_TYPE" in
|
pascal@208
|
40 usb)
|
pascal@208
|
41 SRC_FILE=$(GET SRC_USB) ;;
|
pascal@208
|
42 iso)
|
pascal@208
|
43 SRC_FILE=$(GET SRC_ISO) ;;
|
pascal@208
|
44 web)
|
pascal@208
|
45 SRC_FILE=$(GET SRC_WEB) ;;
|
pascal@208
|
46 esac
|
pascal@208
|
47 SRC_FILE=$(echo "$SRC_FILE" | sed 's/\//\\\//'g)
|
pascal@208
|
48 [ -n $(GET URL) ] && SRC_WEB=$(GET URL)
|
pascal@208
|
49 # Main Partition
|
pascal@208
|
50 TGT_PARTITION=$(echo "$(GET TGT_PARTITION)" | sed 's/\//\\\//'g)
|
pascal@208
|
51 [ -n "$(GET MAIN_FMT)" ] && TGT_FS=$(GET MAIN_FS) || TGT_FS=""
|
pascal@208
|
52 # Home Partition
|
domcox@258
|
53 if [ -n "$(GET HOME_SELECT)" ] ; then
|
domcox@258
|
54 TGT_HOME=$(echo "$(GET TGT_HOME)" | sed 's/\//\\\//'g)
|
domcox@294
|
55 [ -n "$(GET HOME_FMT)" ] && TGT_HOME_FS=$(GET HOME_FS) || TGT_HOME_FS=""
|
pascal@208
|
56 else
|
pascal@208
|
57 TGT_HOME=""
|
pascal@208
|
58 TGT_HOME_FS=""
|
pascal@208
|
59 fi
|
pascal@208
|
60 # Hostname
|
pascal@208
|
61 TGT_HOSTNAME=$(GET TGT_HOSTNAME)
|
pascal@208
|
62 # Root pwd
|
pascal@208
|
63 TGT_ROOT_PWD=$(GET TGT_ROOT_PWD)
|
pascal@208
|
64 # User Login
|
pascal@208
|
65 TGT_USER=$(GET TGT_USER)
|
pascal@208
|
66 # User Pwd
|
pascal@208
|
67 TGT_USER_PWD=$(GET TGT_USER_PWD)
|
pascal@208
|
68 # Grub
|
pascal@208
|
69 TGT_GRUB=$(GET TGT_GRUB)
|
pascal@208
|
70 [ "$TGT_GRUB" == "yes" ] || TGT_GRUB=no
|
pascal@208
|
71 # Win Dual-Boot
|
pascal@208
|
72 TGT_WINBOOT=$(GET TGT_WINBOOT)
|
pascal@208
|
73
|
pascal@208
|
74 # Save changes to INSTFILE
|
pascal@208
|
75 sed -i s/"^INST_TYPE=.*"/"INST_TYPE=\"$INST_TYPE\"/" $INSTFILE
|
pascal@208
|
76 sed -i s/"^SRC_FILE=.*"/"SRC_FILE=\"$SRC_FILE\"/" $INSTFILE
|
pascal@208
|
77 sed -i s/"^TGT_PARTITION=.*"/"TGT_PARTITION=\"$TGT_PARTITION\"/" $INSTFILE
|
pascal@208
|
78 sed -i s/"^TGT_FS=.*"/"TGT_FS=\"$TGT_FS\"/" $INSTFILE
|
pascal@208
|
79 sed -i s/"^TGT_HOME=.*"/"TGT_HOME=\"$TGT_HOME\"/" $INSTFILE
|
pascal@208
|
80 sed -i s/"^TGT_HOME_FS=.*"/"TGT_HOME_FS=\"$TGT_HOME_FS\"/" $INSTFILE
|
pascal@208
|
81 sed -i s/"^TGT_HOSTNAME=.*"/"TGT_HOSTNAME=\"$TGT_HOSTNAME\"/" $INSTFILE
|
pascal@208
|
82 sed -i s/"^TGT_ROOT_PWD=.*"/"TGT_ROOT_PWD=\"$TGT_ROOT_PWD\"/" $INSTFILE
|
pascal@208
|
83 sed -i s/"^TGT_USER=.*"/"TGT_USER=\"$TGT_USER\"/" $INSTFILE
|
pascal@208
|
84 sed -i s/"^TGT_USER_PWD=.*"/"TGT_USER_PWD=\"$TGT_USER_PWD\"/" $INSTFILE
|
pascal@208
|
85 sed -i s/"^TGT_GRUB=.*"/"TGT_GRUB=\"$TGT_GRUB\"/" $INSTFILE
|
pascal@208
|
86 sed -i s/"^TGT_WINBOOT=.*"/"TGT_WINBOOT=\"$TGT_WINBOOT\"/" $INSTFILE
|
pascal@208
|
87 fi
|
pascal@208
|
88 }
|
pascal@208
|
89
|
domcox@258
|
90 read_setup()
|
pascal@208
|
91 {
|
domcox@258
|
92 # various checks on setup file
|
domcox@258
|
93 if [ -e "$INSTFILE" ]; then
|
domcox@258
|
94 # validity check + reformat output
|
domcox@266
|
95 tazinst check $INSTFILE | awk '
|
domcox@266
|
96 BEGIN{
|
domcox@266
|
97 fmt1="<span class=\"msg-nok\">"
|
domcox@266
|
98 fmt2="<br /></span>"
|
domcox@266
|
99 OFS=""
|
domcox@266
|
100 }
|
domcox@266
|
101 {
|
domcox@266
|
102 # make html compliant
|
domcox@266
|
103 str=$0
|
domcox@266
|
104 gsub(/\[1m/,"",str)
|
domcox@266
|
105 gsub(/\[0m/,"",str)
|
domcox@266
|
106 gsub(/\s/,"\\ ",str)
|
domcox@266
|
107 gsub(/</,"\\<",str)
|
domcox@266
|
108 gsub(/>/,"\\>",str)
|
domcox@266
|
109 a[i++]=str
|
domcox@266
|
110 } END {
|
domcox@266
|
111 {print fmt1,a[i-1],fmt2}
|
domcox@266
|
112 {for (j=0; j<i-1;) print fmt1,substr(a[j++],3),fmt2}
|
domcox@266
|
113 }'
|
domcox@258
|
114 else
|
domcox@258
|
115 # no setup file found: creating
|
al@303
|
116 eval_gettext 'Creating setup file $INSTFILE.'
|
domcox@258
|
117 tazinst new $INSTFILE
|
domcox@258
|
118 if [ ! -e "$INSTFILE" ]; then
|
domcox@258
|
119 cat <<EOT
|
al@303
|
120 <span class="msg-nok">$(gettext 'Setup File Error')<br />
|
al@303
|
121 $(eval_gettext "The setup file <strong>\$INSTFILE</strong> doesn't \
|
al@303
|
122 exist.")</span><br />
|
domcox@258
|
123 EOT
|
domcox@258
|
124 else
|
domcox@258
|
125 if [ ! -r $INSTFILE ]; then
|
domcox@258
|
126 cat <<EOT
|
al@303
|
127 <span class="msg-nok">$(gettext 'Setup File Error')<br />
|
al@303
|
128 $(eval_gettext "The setup file <strong>$INSTFILE</strong> is not readable. \
|
domcox@265
|
129 Check permissions and ownership.")</span><br />
|
domcox@258
|
130 EOT
|
al@303
|
131 fi
|
domcox@258
|
132 fi
|
domcox@258
|
133 fi
|
domcox@258
|
134 # read setup file
|
domcox@258
|
135 . $INSTFILE
|
pascal@208
|
136 }
|
pascal@208
|
137
|
pascal@208
|
138 select_action()
|
pascal@208
|
139 {
|
pascal@208
|
140 cat <<EOT
|
pascal@208
|
141 <div id="wrapper">
|
al@303
|
142 <h2>$(gettext 'SliTaz Installer')</h2>
|
al@303
|
143
|
al@303
|
144 <p>$(gettext "The SliTaz Installer installs or upgrades SliTaz to a hard disk \
|
al@303
|
145 drive from a device like a Live-CD or LiveUSB key, from a SliTaz ISO file, or \
|
al@303
|
146 from the web by downloading an ISO file.")</p>
|
pascal@208
|
147 </div>
|
pascal@208
|
148 EOT
|
pascal@208
|
149 }
|
pascal@208
|
150
|
pascal@208
|
151 select_install()
|
pascal@208
|
152 {
|
pascal@208
|
153 cat <<EOT
|
al@312
|
154 <section>
|
al@303
|
155 <h4>$(gettext 'Install')</h4>
|
al@303
|
156
|
al@303
|
157 <p>$(gettext "Install SliTaz on a partition of your hard disk drive. If you \
|
al@303
|
158 decide to format your partition, all data will be lost. If you do not format, \
|
al@303
|
159 all data except for any existing /home directory will be removed, the home \
|
al@303
|
160 directory will be kept as is.")</p>
|
al@303
|
161
|
al@303
|
162 <p>$(gettext "Before installation, you may need to create or resize partitions \
|
al@303
|
163 on your hard disk drive in order to make space for SliTaz GNU/Linux. You can \
|
al@303
|
164 graphically manage your partitions with Gparted")</p>
|
al@312
|
165
|
al@312
|
166 <a class="button" href="$SCRIPT_NAME?page=partitioning">$(gettext "Install \
|
al@303
|
167 SliTaz")</a>
|
al@312
|
168 </section>
|
pascal@208
|
169 EOT
|
pascal@208
|
170 }
|
pascal@208
|
171
|
pascal@208
|
172 select_upgrade()
|
pascal@208
|
173 {
|
pascal@208
|
174 cat <<EOT
|
al@312
|
175 <section>
|
al@303
|
176 <h4>$(gettext 'Upgrade')</h4>
|
al@303
|
177
|
al@303
|
178 <p>$(gettext "Upgrade an already installed SliTaz system on your hard disk \
|
al@303
|
179 drive. Your /home /etc /var/www directories will be kept, all other \
|
al@303
|
180 directories will be removed. Any additional packages added to your old Slitaz \
|
al@303
|
181 system will be updated as long you have an active internet connection.")</p>
|
al@312
|
182
|
al@312
|
183 <a class="button" href="$SCRIPT_NAME?page=upgrade">$(gettext "Upgrade \
|
al@312
|
184 SliTaz")</a>
|
al@312
|
185 </section>
|
pascal@208
|
186 EOT
|
pascal@208
|
187 }
|
pascal@208
|
188
|
domcox@277
|
189 select_gparted()
|
domcox@277
|
190 {
|
domcox@277
|
191 cat <<EOT
|
al@303
|
192 <h4>$(gettext 'Partitioning')</h4>
|
domcox@277
|
193 <div class="box">
|
al@303
|
194
|
al@303
|
195 <p>$(gettext "On most used systems, the hard drive is already dedicated to \
|
al@303
|
196 partitions for Windows<sup>™</sup>, or Linux, or another operating \
|
al@303
|
197 system. You'll need to resize these partitions in order to make space for \
|
al@303
|
198 SliTaz GNU/Linux. SliTaz will co-exist with other operating systems already \
|
al@303
|
199 installed on your hard drive.")</p>
|
al@303
|
200
|
al@303
|
201 <p>$(gettext "The amount of space needed depends on how much software you plan \
|
al@303
|
202 to install and how much space you require for users. It's conceivable that you \
|
al@303
|
203 could run a minimal SliTaz system in 300 megs or less, but 2 gigs is indeed \
|
al@303
|
204 more comfy.")</p>
|
al@303
|
205
|
al@303
|
206 <p>$(gettext "A separate home partition, and a partition that will be used as \
|
al@303
|
207 Linux swap space may be created if needed. Slitaz detects and uses swap \
|
al@303
|
208 partitions automatically.")</p>
|
al@303
|
209
|
domcox@277
|
210 </div>
|
al@303
|
211
|
domcox@277
|
212 <div class="box">
|
al@303
|
213
|
al@303
|
214 <p>$(gettext "You can graphically manage your partitions with Gparted. GParted \
|
al@303
|
215 is a partition editor for graphically managing your disk partitions. Gparted \
|
al@303
|
216 allows you to create, destroy, resize and copy partitions without data loss.")</p>
|
al@303
|
217
|
al@303
|
218 <p>$(gettext "Gparted supports ext2, ext3, ext4, linux swap, ntfs and fat32 \
|
al@303
|
219 filesystems right out of the box. Support for xjs, jfs, hfs and other \
|
al@303
|
220 filesystems is available as well but you first need to add drivers for these \
|
al@303
|
221 filesystems by installing the related packages xfsprogs, jfsutils, linux-hfs \
|
al@303
|
222 and so on.")</p>
|
domcox@277
|
223 </div>
|
al@303
|
224
|
al@303
|
225 <a class="button" href="$SCRIPT_NAME?page=gparted">$(gettext 'Execute Gparted')</a>
|
al@303
|
226
|
al@303
|
227 <h5>$(gettext 'Continue installation')</h5>
|
al@303
|
228
|
al@303
|
229 <p>$(gettext "Once you've made room for SliTaz on your drive, you should be \
|
al@303
|
230 able to continue installation.")
|
domcox@277
|
231
|
domcox@277
|
232 <hr />
|
domcox@277
|
233 <a class="button" value="$1" href="$SCRIPT_NAME?page=home" >
|
al@303
|
234 $(gettext 'Back to Installer Start Page')</a>
|
domcox@277
|
235 <a class="button" value="$2" href="$SCRIPT_NAME?page=install">
|
al@303
|
236 $(gettext 'Continue Installation')</a>
|
domcox@277
|
237 EOT
|
domcox@277
|
238 }
|
domcox@277
|
239
|
pascal@208
|
240 display_action()
|
pascal@208
|
241 {
|
pascal@208
|
242 case $1 in
|
pascal@208
|
243 install)
|
pascal@208
|
244 cat << EOT
|
pascal@208
|
245 <div id="wrapper">
|
al@303
|
246 <h3>$(gettext 'Install SliTaz')</h3>
|
al@303
|
247
|
al@303
|
248 <p>$(gettext "You're going to install SliTaz on a partition of your hard disk \
|
al@303
|
249 drive. If you decide to format your HDD, all data will be lost. If you do not \
|
al@303
|
250 format, all data except for any existing /home directory will be removed, the \
|
al@303
|
251 home directory will be kept as is.")<p>
|
pascal@208
|
252 </div>
|
pascal@208
|
253 <input type="hidden" name="INST_ACTION" value="$1">
|
pascal@208
|
254 EOT
|
pascal@208
|
255 ;;
|
pascal@208
|
256 upgrade)
|
pascal@208
|
257 cat << EOT
|
pascal@208
|
258 <div id="wrapper">
|
al@303
|
259 <h2>$(gettext 'Upgrade SliTaz')</h2>
|
al@303
|
260
|
al@303
|
261 <p>$(gettext "You're going to upgrade an already installed SliTaz system on \
|
al@303
|
262 your hard disk drive. Your /home /etc /var/www directories will be kept, all \
|
al@303
|
263 other directories will be removed. Any additional packages added to your old \
|
al@303
|
264 Slitaz system will be updated as long you have an active internet connection.")<p>
|
pascal@208
|
265 </div>
|
pascal@208
|
266 <input type="hidden" name="INST_ACTION" value="$1">
|
pascal@208
|
267 EOT
|
pascal@208
|
268 ;;
|
pascal@208
|
269 esac
|
pascal@208
|
270 }
|
pascal@208
|
271
|
pascal@208
|
272 select_source()
|
pascal@208
|
273 {
|
pascal@208
|
274 cat <<EOT
|
al@303
|
275 <h4 id="source">$(gettext 'Slitaz source media')</h4>
|
al@303
|
276
|
domcox@260
|
277 <div class="box">
|
domcox@260
|
278 <input type="radio" name="INST_TYPE" value="cdrom" $([ "$INST_TYPE" == "cdrom" ] && echo "checked") id="cdrom" />
|
al@303
|
279 <label for="cdrom">$(gettext 'LiveCD')</label>
|
domcox@260
|
280 <br />
|
domcox@260
|
281 <input type="radio" name="INST_TYPE" value="usb" $([ "$INST_TYPE" == "usb" ] && echo "checked") id="usb" />
|
al@303
|
282 <label for="usb">$(gettext 'LiveUSB:')
|
domcox@260
|
283 <select name="SRC_USB">
|
pascal@208
|
284 EOT
|
pascal@208
|
285 # List disks if plugged USB device
|
pascal@208
|
286 usb=0
|
pascal@208
|
287 if [ -d /proc/scsi/usb-storage ]; then
|
pascal@208
|
288 for DEV in /sys/block/sd* ; do
|
pascal@208
|
289 if readlink $DEV | grep -q usb; then
|
pascal@208
|
290 DEV=$(basename $DEV)
|
pascal@208
|
291 if [ -d /sys/block/${DEV}/${DEV}1 ]; then
|
pascal@208
|
292 for i in $(fdisk -l /dev/$DEV | awk '/^\/dev/ {printf "%s ", $1}') ; do
|
al@303
|
293 echo "<option value='$i' $([ "$i" == "$SRC_FILE" ] && echo 'selected') >$i</option>"
|
pascal@208
|
294 usb=$usb+1
|
pascal@208
|
295 done
|
pascal@208
|
296 fi
|
pascal@208
|
297 fi
|
pascal@208
|
298 done
|
pascal@208
|
299 fi
|
pascal@208
|
300 if [ $usb -lt 1 ]; then
|
al@303
|
301 echo "<option value="">$(gettext 'Not found')</option>"
|
pascal@208
|
302 fi
|
pascal@208
|
303 cat << EOT
|
domcox@260
|
304 </select>
|
domcox@260
|
305 </label>
|
domcox@260
|
306 <br />
|
domcox@260
|
307 <input type="radio" name="INST_TYPE" value="iso" $([ "$INST_TYPE" == "iso" ] && echo "checked") id="iso" />
|
al@303
|
308 <label for="iso">$(gettext 'ISO file:')</label>
|
al@303
|
309 <input type="url" size="50" name="SRC_ISO" $([ "$INST_TYPE" == "iso" ] && echo -e "value=\"$SRC_FILE\"") placeholder="$(gettext 'Full path to the ISO image file')" />
|
domcox@260
|
310 <br />
|
domcox@260
|
311 <input type="radio" name="INST_TYPE" value="web" $([ "$INST_TYPE" == "web" ] && echo "checked") id="web" />
|
al@303
|
312 <label for="web">$(gettext 'Web:')
|
al@303
|
313 <a class="button" onclick="document.forms['ConfigForm'].url.value = '$(tazinst showurl stable)'; return true;">$(gettext 'Stable')</a>
|
al@303
|
314 <a class="button" onclick="document.forms['ConfigForm'].url.value = '$(tazinst showurl cooking)'; return true;">$(gettext 'Cooking')</a>
|
al@303
|
315
|
al@303
|
316 $(gettext 'URL:')
|
al@303
|
317 <input id="url" type="url" size="55" name="SRC_WEB" $([ "$INST_TYPE" == "web" ] && echo -e "value=\"$SRC_FILE\"") placeholder="$(gettext 'Full url to an ISO image file')" />
|
domcox@260
|
318 </label>
|
domcox@260
|
319 </div>
|
pascal@208
|
320 EOT
|
pascal@208
|
321 }
|
pascal@208
|
322
|
domcox@277
|
323 select_hdd()
|
domcox@277
|
324 {
|
domcox@277
|
325 cat <<EOT
|
al@303
|
326 <h4 id="hdd">$(gettext 'Hard Disk Drive')</h4>
|
domcox@277
|
327 EOT
|
domcox@277
|
328 }
|
domcox@277
|
329
|
pascal@208
|
330 select_partition()
|
pascal@208
|
331 {
|
domcox@260
|
332 cat <<EOT
|
domcox@277
|
333 <div class="box">
|
pascal@208
|
334 <a name="partition"></a>
|
al@303
|
335 $(gettext 'Install Slitaz to partition:')
|
domcox@260
|
336 <select name="TGT_PARTITION">
|
pascal@208
|
337 EOT
|
pascal@208
|
338 # List partitions
|
pascal@208
|
339 if fdisk -l | grep -q ^/dev/ ; then
|
al@303
|
340 echo "<option value="">$(gettext 'None')</option>"
|
pascal@208
|
341 for i in $(fdisk -l | awk '/^\/dev/ {printf "%s " $1}'); do
|
al@303
|
342 echo "<option value='$i' $([ "$i" == "$TGT_PARTITION" ] && echo 'selected')>$i</option>"
|
pascal@208
|
343 done
|
pascal@208
|
344 else
|
al@303
|
345 echo "<option value="">$(gettext 'Not found')</option>"
|
pascal@208
|
346 fi
|
pascal@208
|
347 cat << EOT
|
domcox@277
|
348 </select>
|
domcox@260
|
349 <br />
|
domcox@260
|
350 <input type="checkbox" name="MAIN_FMT" value="yes" $([ -n "$TGT_FS" ] && echo "checked") id="mainfs" />
|
al@303
|
351 <label for="mainfs">$(gettext 'Format partition as:')</label>
|
domcox@260
|
352 <select name="MAIN_FS">
|
pascal@208
|
353 EOT
|
pascal@208
|
354 scan_mkfs
|
pascal@208
|
355 for i in $FS
|
pascal@208
|
356 do
|
al@303
|
357 echo "<option value='$i' $([ "$i" == "$TGT_FS" ] && echo 'selected')>$i</option>"
|
pascal@208
|
358 done
|
pascal@208
|
359 cat <<EOT
|
pascal@208
|
360 </select>
|
domcox@260
|
361 </div>
|
pascal@208
|
362 EOT
|
pascal@208
|
363 }
|
pascal@208
|
364
|
pascal@208
|
365 select_old_slitaz()
|
pascal@208
|
366 {
|
domcox@260
|
367 cat <<EOT
|
domcox@277
|
368 <div class="box">
|
pascal@208
|
369 <a name="partition"></a>
|
al@303
|
370 $(gettext 'Existing SliTaz partition to upgrade:')
|
domcox@260
|
371 <select name="TGT_PARTITION">
|
pascal@208
|
372 EOT
|
pascal@208
|
373 # List partitions
|
pascal@208
|
374 if fdisk -l | grep -q ^/dev/ ; then
|
al@303
|
375 echo "<option value="">$(gettext 'None')</option>"
|
al@303
|
376 for i in $(blkid | cut -d ":" -f 1); do
|
al@303
|
377 echo "<option value='$i' $([ "$i" == "$TGT_PARTITION" ] && echo 'selected')>$i</option>"
|
pascal@208
|
378 done
|
pascal@208
|
379 else
|
al@303
|
380 echo "<option value="">$(gettext 'Not found')</option>"
|
pascal@208
|
381 fi
|
pascal@208
|
382 cat <<EOT
|
pascal@208
|
383 </select>
|
domcox@260
|
384 </div>
|
pascal@208
|
385 EOT
|
pascal@208
|
386 }
|
pascal@208
|
387
|
domcox@277
|
388 select_options()
|
domcox@277
|
389 {
|
domcox@277
|
390 cat <<EOT
|
al@303
|
391 <h4 id="options">$(gettext 'Options')</h4>
|
domcox@277
|
392 EOT
|
domcox@277
|
393 }
|
domcox@277
|
394
|
pascal@208
|
395 select_home()
|
pascal@208
|
396 {
|
pascal@208
|
397 cat <<EOT
|
domcox@277
|
398 <div>
|
al@303
|
399 <h5 id="home">$(gettext 'home partition')</h5>
|
al@303
|
400
|
domcox@258
|
401 <input type="checkbox" name="HOME_SELECT" value="yes" $([ -n "$TGT_HOME" ] && echo "checked") id="homepart" />
|
al@303
|
402 <label for="homepart">$(gettext 'Use a separate partition for /home:')</label>
|
domcox@260
|
403 <select name="TGT_HOME">
|
pascal@208
|
404 EOT
|
pascal@208
|
405 # List disk if plugged USB device
|
pascal@208
|
406 if fdisk -l | grep -q ^/dev/ ; then
|
al@303
|
407 echo "<option value="">$(gettext 'None')</option>"
|
pascal@208
|
408 for i in $(fdisk -l | awk '/^\/dev/ {printf "%s " $1}'); do
|
al@303
|
409 echo "<option value='$i' $([ "$i" == "$TGT_HOME" ] && echo 'selected')>$i</option>"
|
pascal@208
|
410 done
|
pascal@208
|
411 else
|
al@303
|
412 echo "<option value="">$(gettext 'Not found')</option>"
|
pascal@208
|
413 fi
|
pascal@208
|
414 cat <<EOT
|
domcox@260
|
415 </select>
|
al@303
|
416
|
domcox@260
|
417 <input type="checkbox" name="HOME_FMT" value="yes" $([ -n "$TGT_HOME_FS" ] && echo "checked") id="homefs" />
|
al@303
|
418 <label for="homefs">$(gettext 'Format partition as:')</label>
|
domcox@260
|
419 <select name="HOME_FS">"
|
pascal@208
|
420 EOT
|
pascal@208
|
421 for i in $FS
|
pascal@208
|
422 do
|
al@303
|
423 echo "<option value='$i' $([ "$i" == "$TGT_HOME_FS" ] && echo 'selected')>$i</option>"
|
pascal@208
|
424 done
|
domcox@277
|
425 cat <<EOT
|
domcox@277
|
426 </select>
|
domcox@277
|
427 </div>
|
domcox@277
|
428 EOT
|
pascal@208
|
429 }
|
pascal@208
|
430
|
pascal@208
|
431 select_hostname()
|
pascal@208
|
432 {
|
pascal@208
|
433 cat << EOT
|
domcox@277
|
434 <div>
|
al@303
|
435 <h5 id="hostname">$(gettext 'Hostname')</h5>
|
al@303
|
436
|
al@303
|
437 $(gettext 'Set Hostname to:')
|
al@303
|
438 <input type="text" id="hostname" name="TGT_HOSTNAME" value="$TGT_HOSTNAME" placeholder="$(gettext 'Name of your system')" onkeyup="checkLogin('hostname','msgHostname'); return false;" />
|
al@303
|
439 <span id="msgHostname"></span>
|
domcox@277
|
440 </div>
|
pascal@208
|
441 EOT
|
pascal@208
|
442 }
|
pascal@208
|
443
|
pascal@208
|
444 select_root()
|
pascal@208
|
445 {
|
pascal@208
|
446 cat << EOT
|
domcox@277
|
447 <div class="box2">
|
al@303
|
448 <h5 id="root">$(gettext 'Root')</h5>
|
al@303
|
449
|
al@303
|
450 $(gettext 'Root passwd:')
|
al@303
|
451 <input type="password" id="rootPwd1" name="TGT_ROOT_PWD" value="$TGT_ROOT_PWD" placeholder="$(gettext 'Password of root')" onkeyup="checkPwd('rootPwd1','rootPwd2','msgRootPwd'); return false;" />
|
al@303
|
452
|
al@303
|
453 $(gettext 'Confirm password:')
|
al@303
|
454 <input type="password" id="rootPwd2" value="$TGT_ROOT_PWD" placeholder="$(gettext 'Password of root')" onkeyup="checkPwd('rootPwd1','rootPwd2','msgRootPwd'); return false;" />
|
al@303
|
455
|
al@303
|
456 <span id="msgRootPwd"></span>
|
domcox@277
|
457 </div>
|
pascal@208
|
458 EOT
|
pascal@208
|
459 }
|
pascal@208
|
460
|
pascal@208
|
461 select_user()
|
pascal@208
|
462 {
|
pascal@208
|
463 cat << EOT
|
domcox@277
|
464 <div class="box2">
|
al@303
|
465 <h5 id="user">$(gettext 'User')</h5>
|
al@303
|
466
|
al@303
|
467 $(gettext 'User login:')
|
al@303
|
468 <input type="text" id="user" name="TGT_USER" value="$TGT_USER" placeholder="$(gettext 'Name of the first user')" onkeyup="checkLogin('user','msgUser'); return false;" />
|
al@303
|
469 <span id="msgUser"></span>
|
al@303
|
470 <br /><br />
|
al@303
|
471
|
al@303
|
472 $(gettext 'User passwd:')
|
al@303
|
473 <input type="password" id="userPwd1" name="TGT_USER_PWD" value="$TGT_USER_PWD" placeholder="$(gettext 'Password of the first user')" onkeyup="checkPwd('userPwd1','userPwd2','msgUserPwd'); return false;" />
|
al@303
|
474
|
al@303
|
475 $(gettext 'Confirm password:')
|
al@303
|
476 <input class="confirm" type="password" id="userPwd2" value="$TGT_USER_PWD" placeholder="$(gettext 'Password of the first user')" onkeyup="checkPwd('userPwd1','userPwd2','msgUserPwd'); return false;" />
|
al@303
|
477 <span id="msgUserPwd"></span>
|
domcox@277
|
478 </div>
|
pascal@208
|
479 EOT
|
pascal@208
|
480 }
|
pascal@208
|
481
|
pascal@208
|
482 select_grub()
|
pascal@208
|
483 {
|
pascal@208
|
484 cat << EOT
|
domcox@277
|
485 <div>
|
al@303
|
486 <h5 id="grub">$(gettext 'Grub')</h5>
|
al@303
|
487
|
al@303
|
488 <input type="checkbox" name="TGT_GRUB" value="yes" $([ "$TGT_GRUB" == "yes" ] && echo "checked") id="grub" />
|
al@303
|
489 <label for="grub">$(gettext "Install Grub bootloader. Usually you should \
|
al@303
|
490 answer yes, unless you want to install grub by hand yourself.")<br /></label>
|
al@303
|
491 <input type="checkbox" name="TGT_WINBOOT" value="auto" $([ -n "$TGT_WINBOOT" ] && echo "checked") id="dualboot" />
|
al@303
|
492 <label for="dualboot">$(gettext 'Enable Windows Dual-Boot.')</label>
|
domcox@277
|
493 </div>
|
pascal@208
|
494 EOT
|
pascal@208
|
495 }
|
pascal@208
|
496
|
pascal@208
|
497 moveto_page()
|
pascal@208
|
498 {
|
pascal@208
|
499 case $1 in
|
domcox@277
|
500 partitioning)
|
al@303
|
501 title1=$(gettext 'Back to partitioning') ;;
|
pascal@208
|
502 *)
|
pascal@208
|
503 page=home
|
al@303
|
504 title1=$(gettext 'Back to Installer Start Page') ;;
|
pascal@208
|
505 esac
|
pascal@208
|
506 case $2 in
|
pascal@208
|
507 write|run)
|
al@303
|
508 title2=$(gettext 'Proceed to SliTaz installation') ;;
|
pascal@208
|
509 reboot)
|
al@303
|
510 title2=$(gettext 'Installation complete. You can now restart (reboot)') ;;
|
pascal@208
|
511 failed)
|
al@303
|
512 title2=$(gettext 'Installation failed. See log') ;;
|
pascal@208
|
513 *)
|
pascal@208
|
514 page=home
|
al@303
|
515 title2=$(gettext 'Back to Installer Start Page') ;;
|
pascal@208
|
516 esac
|
pascal@208
|
517 cat <<EOT
|
pascal@208
|
518 <hr />
|
pascal@208
|
519 <input type="hidden" name="page" value="$2" />
|
pascal@208
|
520 <a class="button" value="$1" href="$SCRIPT_NAME?page=$1" >$title1</a>
|
domcox@277
|
521 <input type="submit" value="$title2">
|
pascal@208
|
522 EOT
|
pascal@208
|
523 }
|
pascal@208
|
524
|
pascal@208
|
525 page_redirection()
|
pascal@208
|
526 {
|
pascal@208
|
527 cat <<EOT
|
al@303
|
528 <!DOCTYPE html>
|
pascal@208
|
529 <html>
|
pascal@208
|
530 <head>
|
al@303
|
531 <meta charset="utf-8">
|
al@303
|
532 <title>$(gettext "A web page that points a browser to a different page after \
|
al@303
|
533 2 seconds")</title>
|
pascal@208
|
534 <meta http-equiv="refresh" content="0; URL=$SCRIPT_NAME?page=$1">
|
pascal@208
|
535 <meta name="keywords" content="automatic redirection">
|
pascal@208
|
536 </head>
|
pascal@208
|
537 <body>
|
al@303
|
538 <p>$(gettext "If your browser doesn't automatically redirect within a few \
|
al@303
|
539 seconds, you may want to go there manually")</p>
|
al@303
|
540 <p><a href="$SCRIPT_NAME?page=$1">$1</a></p>
|
pascal@208
|
541 </body>
|
pascal@208
|
542 </html>
|
pascal@208
|
543 EOT
|
pascal@208
|
544 }
|
pascal@208
|
545
|
pascal@208
|
546 check_ressources()
|
pascal@208
|
547 {
|
al@303
|
548 local code
|
pascal@208
|
549 code=0
|
pascal@208
|
550 # Check tazinst
|
domcox@296
|
551 if ! [ -x /usr/sbin/tazinst ] ; then
|
pascal@208
|
552 cat <<EOT
|
al@303
|
553 <h3>$(gettext 'Tazinst Error')</h3>
|
al@303
|
554 <p>$(gettext "<strong>tazinst</strong>, the lightweight SliTaz HDD installer \
|
paul@209
|
555 is missing. Any installation can not be done without tazinst.")</p>
|
al@303
|
556
|
al@303
|
557 <p>$(gettext "Check tazinst' permissions, or reinstall the slitaz-tools \
|
al@303
|
558 package:")</p>
|
pascal@208
|
559 <code># tazpkg get-install slitaz-tools --forced</code>
|
pascal@208
|
560 EOT
|
pascal@208
|
561 code=1
|
pascal@208
|
562 else
|
pascal@208
|
563 # Check tazinst required version
|
pascal@208
|
564 v=$(tazinst version | tr -d '[:alpha:]')
|
pascal@208
|
565 r=$TAZINST_REQUIRED_VERSION
|
pascal@208
|
566 if ! (echo "$v" | awk -v r=$r '{v=$v+0}{ if (v < r) exit 1}') ; then
|
pascal@208
|
567 cat <<EOT
|
al@303
|
568 <h3>$(gettext 'Tazinst Error')</h3>
|
al@303
|
569
|
al@303
|
570 <p>$(eval_gettext "<strong>tazinst</strong> ($v) is not at the required \
|
al@303
|
571 version ($r), use tazinst in a xterm or reinstall the slitaz-tools package:")</p>
|
pascal@208
|
572 <code># tazpkg get-install slitaz-tools --forced</code>
|
pascal@208
|
573 EOT
|
pascal@208
|
574 code=1
|
pascal@208
|
575 fi
|
pascal@208
|
576 fi
|
pascal@208
|
577 return $code
|
pascal@208
|
578 }
|
pascal@208
|
579
|
pascal@208
|
580 run_tazinst()
|
pascal@208
|
581 {
|
al@303
|
582 cat << EOT
|
al@303
|
583 <h4>$(gettext 'Proceeding: ()')</h4>
|
al@303
|
584 <p>$(gettext 'Please wait until processing is complete')</p>
|
al@303
|
585 EOT
|
pascal@208
|
586 table_start
|
pascal@208
|
587 tazinst $(GET INST_ACTION) $INSTFILE | \
|
pascal@208
|
588 awk '{print "<tr><td><tt>" $0 "</tt></td></tr>"}'
|
pascal@208
|
589 table_end
|
al@303
|
590 echo "<p>$(gettext 'Completed.')</p>"
|
pascal@208
|
591 return $(grep -c "cancelled on error" $INSTFILE)
|
pascal@208
|
592 }
|
pascal@208
|
593
|
pascal@208
|
594 tazinst_log()
|
pascal@208
|
595 {
|
al@303
|
596 echo "<pre>$(tazinst log)</pre>"
|
pascal@208
|
597 }
|
pascal@208
|
598
|
pascal@208
|
599 scan_mkfs()
|
pascal@208
|
600 {
|
pascal@208
|
601 for path in /bin /sbin /usr/bin /usr/sbin
|
pascal@208
|
602 do
|
pascal@208
|
603 [ -e $path/mkfs.btrfs ] && FS=btrfs
|
pascal@208
|
604 [ -e $path/mkfs.cramfs ] && FS="$FS cramfs"
|
pascal@208
|
605 [ -e $path/mkfs.ext2 ] && FS="$FS ext2"
|
pascal@208
|
606 [ -e $path/mkfs.ext3 ] && FS="$FS ext3"
|
pascal@208
|
607 [ -e $path/mkfs.ext4 ] && FS="$FS ext4"
|
pascal@208
|
608 [ -e $path/mkfs.jfs ] && FS="$FS jfs"
|
pascal@208
|
609 [ -e $path/mkfs.minix ] && FS="$FS minix"
|
pascal@208
|
610 [ -e $path/mkfs.reiserfs ] && FS="$FS reiserfs"
|
pascal@208
|
611 [ -e $path/mkfs.xfs ] && FS="$FS xfs"
|
pascal@208
|
612 done
|
pascal@208
|
613 }
|
pascal@208
|
614
|
pascal@208
|
615 form_start()
|
pascal@208
|
616 {
|
pascal@208
|
617 cat <<EOT
|
domcox@277
|
618 <script src="lib/user.js"></script>
|
domcox@277
|
619 <script type="text/javascript">
|
domcox@277
|
620 function Validate(page) {
|
domcox@277
|
621 if (page == "install") {
|
domcox@277
|
622 // hostname
|
domcox@277
|
623 if (false == checkLogin('hostname','msgHostname')) {
|
al@303
|
624 alert("$(gettext 'Hostname error')");
|
domcox@277
|
625 return false;
|
domcox@277
|
626 // root pwd
|
domcox@277
|
627 } else if (false == checkPwd('rootPwd1','rootPwd2','msgRootPwd')) {
|
al@303
|
628 alert("$(gettext 'Root password error')");
|
domcox@277
|
629 return false;
|
domcox@277
|
630 // user
|
domcox@277
|
631 } else if (false == checkLogin('user','msgUser')) {
|
al@303
|
632 alert("$(gettext 'User login error')");
|
domcox@277
|
633 return false;
|
domcox@277
|
634 // user pwd
|
domcox@277
|
635 } else if (false == checkPwd('userPwd1','userPwd2','msgUserPwd')) {
|
al@303
|
636 alert("$(gettext 'User password error')");
|
domcox@277
|
637 return false;
|
domcox@277
|
638 } else {
|
al@303
|
639 var r=confirm("$(gettext 'Do you really want to continue?')");
|
domcox@277
|
640 if (r==true)
|
domcox@277
|
641 {
|
domcox@277
|
642 document.ConfigForm.submit();
|
domcox@277
|
643 } else {
|
domcox@277
|
644 return false;
|
domcox@277
|
645 }
|
domcox@277
|
646 }
|
domcox@277
|
647 } else if (page == "write") {
|
domcox@277
|
648 return true;
|
domcox@277
|
649 } else {
|
al@303
|
650 var r=confirm("$(gettext 'Do you really want to continue?')");
|
domcox@277
|
651 if (r==true)
|
domcox@277
|
652 {
|
domcox@277
|
653 document.ConfigForm.submit();
|
domcox@277
|
654 } else {
|
domcox@277
|
655 return false;
|
domcox@277
|
656 }
|
domcox@277
|
657 }
|
domcox@277
|
658 }
|
domcox@277
|
659 </script>
|
domcox@277
|
660 <form name="ConfigForm" method="get" onsubmit="return Validate('$1')" action="$SCRIPT_NAME">
|
pascal@208
|
661 EOT
|
pascal@208
|
662 }
|
pascal@208
|
663
|
pascal@208
|
664 form_end()
|
pascal@208
|
665 {
|
pascal@208
|
666 echo "</form>"
|
pascal@208
|
667 }
|
pascal@208
|
668
|
pascal@208
|
669 #
|
pascal@208
|
670 # Main
|
pascal@208
|
671 #
|
pascal@208
|
672
|
pascal@208
|
673 case "$(GET page)" in
|
domcox@277
|
674 home)
|
domcox@277
|
675 xhtml_header
|
domcox@277
|
676 select_action
|
domcox@277
|
677 select_install
|
domcox@277
|
678 select_upgrade
|
domcox@277
|
679 ;;
|
domcox@277
|
680 partitioning)
|
domcox@277
|
681 xhtml_header
|
domcox@277
|
682 display_action install
|
domcox@277
|
683 select_gparted
|
domcox@277
|
684 ;;
|
pascal@208
|
685 gparted)
|
domcox@272
|
686 su - -c "exec env DISPLAY=':0.0' XAUTHORITY='/var/run/slim.auth' /usr/sbin/gparted"
|
pascal@208
|
687 xhtml_header
|
domcox@277
|
688 page_redirection partitioning
|
pascal@208
|
689 ;;
|
pascal@208
|
690 install)
|
pascal@208
|
691 xhtml_header
|
domcox@277
|
692 form_start install
|
pascal@208
|
693 display_action install
|
domcox@258
|
694 read_setup
|
pascal@208
|
695 select_source
|
domcox@277
|
696 select_hdd
|
pascal@208
|
697 select_partition
|
domcox@277
|
698 select_options
|
pascal@208
|
699 select_home
|
pascal@208
|
700 select_hostname
|
pascal@208
|
701 select_root
|
pascal@208
|
702 select_user
|
pascal@208
|
703 select_grub
|
domcox@277
|
704 moveto_page partitioning write
|
pascal@208
|
705 form_end
|
pascal@208
|
706 ;;
|
pascal@208
|
707 upgrade)
|
pascal@208
|
708 xhtml_header
|
domcox@277
|
709 form_start upgrade
|
pascal@208
|
710 display_action upgrade
|
domcox@258
|
711 read_setup
|
pascal@208
|
712 select_source
|
domcox@277
|
713 select_hdd
|
pascal@208
|
714 select_old_slitaz
|
domcox@277
|
715 select_options
|
pascal@208
|
716 select_grub
|
pascal@208
|
717 moveto_page home write
|
pascal@208
|
718 form_end
|
pascal@208
|
719 ;;
|
pascal@208
|
720 write)
|
pascal@208
|
721 write_setup
|
pascal@208
|
722 xhtml_header
|
pascal@208
|
723 if ! (tazinst check $INSTFILE); then
|
pascal@208
|
724 page_redirection $(GET INST_ACTION)
|
pascal@208
|
725 else
|
pascal@208
|
726 read_setup
|
domcox@277
|
727 form_start write
|
pascal@208
|
728 display_action $(GET INST_ACTION)
|
pascal@208
|
729 if run_tazinst; then
|
pascal@208
|
730 moveto_page home reboot
|
pascal@208
|
731 else
|
pascal@208
|
732 moveto_page home failed
|
pascal@208
|
733 fi
|
pascal@208
|
734 form_end
|
pascal@208
|
735 fi
|
pascal@208
|
736 ;;
|
pascal@208
|
737 reboot)
|
pascal@208
|
738 reboot ;;
|
pascal@208
|
739 failed)
|
pascal@208
|
740 xhtml_header
|
pascal@208
|
741 display_log
|
pascal@208
|
742 ;;
|
domcox@234
|
743 menu_install)
|
domcox@234
|
744 xhtml_header
|
domcox@234
|
745 if check_ressources; then
|
domcox@277
|
746 page_redirection partitioning
|
domcox@234
|
747 fi
|
domcox@234
|
748 ;;
|
domcox@234
|
749 menu_upgrade)
|
domcox@234
|
750 xhtml_header
|
domcox@234
|
751 if check_ressources; then
|
domcox@258
|
752 page_redirection upgrade
|
domcox@234
|
753 fi
|
domcox@234
|
754 ;;
|
pascal@208
|
755 *)
|
pascal@208
|
756 xhtml_header
|
pascal@208
|
757 if check_ressources; then
|
pascal@208
|
758 page_redirection home
|
pascal@208
|
759 fi
|
pascal@208
|
760 ;;
|
pascal@208
|
761 esac
|
pascal@208
|
762
|
pascal@208
|
763 xhtml_footer
|
pascal@208
|
764
|
pascal@208
|
765 exit 0
|