slitaz-tools view installer/cgi/installer.cgi @ rev 668

tazinst: add web frontend (warning: needs latest httpd_helper.sh from Busybox)
author Dominique Corbex <domcox@slitaz.org>
date Thu Aug 18 17:04:16 2011 +0200 (2011-08-18)
parents
children 7f28451bb0b9
line source
1 #!/bin/sh
2 #
3 # Main CGI interface for Tazinst, the SliTaz installer.
4 #
5 # Copyright (C) 2011 SliTaz GNU/Linux - BSD License
6 #
7 # Authors : Dominique Corbex <domcox@slitaz.org>
8 #
10 VERSION="0.10"
12 # Get parameters with GET, POST and FILE functions
13 . /usr/bin/httpd_helper.sh
14 header
16 # Include gettext helper script.
17 . /usr/bin/gettext.sh
19 # Export package name for gettext.
20 TEXTDOMAIN='installer'
21 export TEXTDOMAIN
23 TITLE="SliTaz Installer"
25 # Tazinst required version
26 TAZINST_REQUIRED_VERSION="3.3"
28 # Tazinst setup file
29 INSTFILE=/var/lib/tazinst.conf
31 get_config()
32 {
33 [ -r /etc/slitaz/installer.conf ] && . /etc/slitaz/installer.conf
34 }
36 read_setup()
37 {
38 [ -e "$INSTFILE" ] && . $INSTFILE || gettext "Tazinst setup file not found!"
39 }
41 write_setup()
42 {
43 if [ -e "$INSTFILE" ]; then
44 # Read vars from URL
45 read_query_string GET
46 # Install type
47 INST_TYPE=$GET_INST_TYPE
48 # Source File
49 case "$INST_TYPE" in
50 usb)
51 SRC_FILE=$GET_SRC_USB ;;
52 iso)
53 SRC_FILE=$GET_SRC_ISO ;;
54 web)
55 SRC_FILE=$GET_SRC_WEB ;;
56 esac
57 SRC_FILE=$(echo "$SRC_FILE" | sed 's/\//\\\//'g)
58 [ -n $GET_URL ] && SRC_WEB=$GET_URL
59 # Main Partition
60 TGT_PARTITION=$(echo "$GET_TGT_PARTITION" | sed 's/\//\\\//'g)
61 [ -n "$GET_MAIN_FMT" ] && TGT_FS=$GET_MAIN_FS || TGT_FS=""
62 # Home Partition
63 if [ -n "$GET_HOME_SPLIT" ] ; then
64 TGT_HOME=$(echo "$GET_HOME_PART" | sed 's/\//\\\//'g)
65 [ -n "$GET_HOME_FMT" ] && TGT_HOME_FS=$GET_HOME_FS
66 else
67 TGT_HOME=""
68 TGT_HOME_FS=""
69 fi
70 # Hostname
71 TGT_HOSTNAME=$GET_TGT_HOSTNAME
72 # Root pwd
73 TGT_ROOT_PWD=$GET_TGT_ROOT_PWD
74 # User Login
75 TGT_USER=$GET_TGT_USER
76 # User Pwd
77 TGT_USER_PWD=$GET_TGT_USER_PWD
78 # Grub
79 TGT_GRUB=$GET_TGT_GRUB
80 [ "$TGT_GRUB" == "yes" ] || TGT_GRUB=no
81 # Win Dual-Boot
82 TGT_WINBOOT=$GET_TGT_WINBOOT
84 # Save changes to INSTFILE
85 sed -i s/"^INST_TYPE=.*"/"INST_TYPE=\"$INST_TYPE\"/" $INSTFILE
86 sed -i s/"^SRC_FILE=.*"/"SRC_FILE=\"$SRC_FILE\"/" $INSTFILE
87 sed -i s/"^TGT_PARTITION=.*"/"TGT_PARTITION=\"$TGT_PARTITION\"/" $INSTFILE
88 sed -i s/"^TGT_FS=.*"/"TGT_FS=\"$TGT_FS\"/" $INSTFILE
89 sed -i s/"^TGT_HOME=.*"/"TGT_HOME=\"$TGT_HOME\"/" $INSTFILE
90 sed -i s/"^TGT_HOME_FS=.*"/"TGT_HOME_FS=\"$TGT_HOME_FS\"/" $INSTFILE
91 sed -i s/"^TGT_HOSTNAME=.*"/"TGT_HOSTNAME=\"$TGT_HOSTNAME\"/" $INSTFILE
92 sed -i s/"^TGT_ROOT_PWD=.*"/"TGT_ROOT_PWD=\"$TGT_ROOT_PWD\"/" $INSTFILE
93 sed -i s/"^TGT_USER=.*"/"TGT_USER=\"$TGT_USER\"/" $INSTFILE
94 sed -i s/"^TGT_USER_PWD=.*"/"TGT_USER_PWD=\"$TGT_USER_PWD\"/" $INSTFILE
95 sed -i s/"^TGT_GRUB=.*"/"TGT_GRUB=\"$TGT_GRUB\"/" $INSTFILE
96 sed -i s/"^TGT_WINBOOT=.*"/"TGT_WINBOOT=\"$TGT_WINBOOT\"/" $INSTFILE
97 fi
98 }
100 check_setup()
101 {
102 local ret
103 IFS=$'\n'
104 for line in $(tazinst check $INSTFILE; ret=$?)
105 do
106 line=$(echo $line | sed 's/\[1m//g')
107 line=$(echo $line | sed 's/\[0m//g')
108 line=$(echo $line | sed 's/\s/\&nbsp;/g')
109 line=$(echo $line | sed 's/</\&lt;/g')
110 line=$(echo $line | sed 's/>/\&gt;/g')
111 echo "<font color=\"red\">$line<br /></font>"
112 done
113 unset IFS
114 return $ret
115 }
117 select_action()
118 {
119 cat <<EOT
120 <div id="wrapper">
121 <h2>$(gettext "SliTaz Installer")</h2>
122 <p>$(gettext "The SliTaz Installer installs or upgrade SliTaz to a hard disk
123 drive from a device like a Live-CD or LiveUSB key, from a SliTaz ISO file, or
124 from the web by downloading an ISO file.")<p>
125 </div>
126 EOT
127 }
129 select_gparted()
130 {
131 cat <<EOT
132 <table>
133 <tr>
134 <td>$(gettext "Before installation, you'll may need to resize partitions
135 on your hard disk drive in order to make space for SlItaz GNU/Linux.")</td>
136 </tr>
137 <tr>
138 <td><a class="button" href="$SCRIPT_NAME?page=gparted">$(gettext "Launch GParted")</a></td>
139 </tr>
140 </table>
141 EOT
142 }
144 select_install()
145 {
146 cat <<EOT
147 </table>
148 <form method="get" action="$SCRIPT_NAME">
149 <table>
150 <tr>
151 <td><h4>$(gettext "Install")</h4></td>
152 </tr>
153 <tr>
154 <td>$(gettext "Install SliTaz on a partition of your hard disk drive. If
155 you decide to format your HDD, all data will be lost. If you do not
156 format, all data except for any existing /home directory will be removed,
157 the home directory will be kept as is.")</td>
158 </tr>
159 <tr>
160 <td><a class="button" href="$SCRIPT_NAME?page=install">$(gettext "Install SliTaz")</a></td>
161 </tr>
162 </table>
163 EOT
164 }
166 select_upgrade()
167 {
168 cat <<EOT
169 <table>
170 <tr>
171 <td><h4>$(gettext "Upgrade")</h4></td>
172 </tr>
173 <tr>
174 <td>$(gettext "Upgrade an already installed SliTaz system on your hard disk
175 drive. Your /home /etc /var/www directories will be kept, all other directories
176 will be removed. Any additional package added to your old Slitaz system
177 will be updated as long you have an active internet connection.")</td>
178 </tr>
179 <tr>
180 <td><a class="button" href="$SCRIPT_NAME?page=upgrade">$(gettext "Upgrade SliTaz")</a></td>
181 </tr>
182 </table>
183 </form>
184 EOT
185 }
187 display_action()
188 {
189 case $1 in
190 install)
191 cat << EOT
192 <div id="wrapper">
193 <h3>$(gettext "Install SliTaz")</h3>
194 <p>$(gettext "You're going to install SliTaz on a partition of your hard disk drive. If
195 you decide to format your HDD, all data will be lost. If you do not
196 format, all data except for any existing /home directory will be removed,
197 the home directory will be kept as is.")<p>
198 </div>
199 <input type="hidden" name="INST_ACTION" value="$1">
200 EOT
201 ;;
202 upgrade)
203 cat << EOT
204 <div id="wrapper">
205 <h2>$(gettext "Upgrade SliTaz")</h2>
206 <p>$(gettext "You're going to upgrade an already installed SliTaz system on your hard disk
207 drive. Your /home /etc /var/www directories will be kept, all other directories
208 will be removed. Any additional package added to your old Slitaz system
209 will be updated as long you have an active internet connection.")<p>
210 </div>
211 <input type="hidden" name="INST_ACTION" value="$1">
212 EOT
213 ;;
214 esac
215 }
217 select_source()
218 {
219 cat <<EOT
220 <a name="source"></a>
221 <h4>$(gettext "Source")</h4>
222 <table>
223 <tr>
224 <td><input type="radio" name="INST_TYPE" value="cdrom" $([ "$INST_TYPE" == "cdrom" ] && echo "checked") id="cdrom" />
225 <label for="cdrom">$(gettext "LiveCD")</td></label>
226 </tr>
227 <tr>
228 <td><input type="radio" name="INST_TYPE" value="usb" $([ "$INST_TYPE" == "usb" ] && echo "checked") id="usb" />
229 <label for="usb">$(gettext "LiveUSB"):</label>
230 <select name="SRC_USB">
231 EOT
232 # List disks if plugged USB device
233 usb=0
234 if [ -d /proc/scsi/usb-storage ]; then
235 for DEV in /sys/block/sd* ; do
236 if readlink $DEV | grep -q usb; then
237 DEV=$(basename $DEV)
238 if [ -d /sys/block/${DEV}/${DEV}1 ]; then
239 for i in $(fdisk -l /dev/$DEV | awk '/^\/dev/ {printf "%s ", $1}') ; do
240 echo "<option value='$i' $([ "$i" == "$SRC_FILE" ] && echo "selected") >$i</option>"
241 usb=$usb+1
242 done
243 fi
244 fi
245 done
246 fi
247 if [ $usb -lt 1 ]; then
248 echo "<option value="">$(gettext "Not found")</option>"
249 fi
250 cat << EOT
251 </select>
252 </td>
253 </tr>
254 <tr>
255 <td><input type="radio" name="INST_TYPE" value="iso" $([ "$INST_TYPE" == "iso" ] && echo "checked") id="iso" />
256 <label for="iso">$(gettext "ISO file"):</label>
257 <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")" />
258 </td>
259 </tr>
260 <tr>
261 <td><input type="radio" name="INST_TYPE" value="web" $([ "$INST_TYPE" == "web" ] && echo "checked" id="web") />
262 <label for="web">$(gettext "Web"):
263 <a class="button" href="$SCRIPT_NAME?page=$GET_page&SRC_WEB=stable">$(gettext "Stable")</a>
264 <a class="button" href="$SCRIPT_NAME?page=$GET_page&SRC_WEB=cooking">$(gettext "Cooking")</a>
265 $(gettext "URL:")</label>
266 EOT
267 case $GET_SRC_WEB in
268 stable|cooking)
269 GET_SRC_WEB=$(tazinst showurl $GET_SRC_WEB) ;;
270 *)
271 [ "$INST_TYPE" == "web" ] && GET_SRC_WEB=$SRC_FILE ;;
272 esac
273 cat <<EOT
274 <input type="url" size="55" name="SRC_WEB" value="$GET_SRC_WEB" placeholder="$(gettext "Full url to an ISO image file")" /></td>
275 </tr>
276 </table>
277 EOT
278 }
280 select_partition()
281 {
282 cat <<EOT
283 <a name="partition"></a>
284 <h4></span>$(gettext "Main Partition")</h4>
285 <table>
286 <tr><td>
287 $(gettext "Partition to use:")
288 <select name="TGT_PARTITION">
289 EOT
290 # List partitions
291 if fdisk -l | grep -q ^/dev/ ; then
292 for i in `blkid | cut -d ":" -f 1`; do
293 echo "<option value='$i' $([ "$i" == "$TGT_PARTITION" ] && echo "selected")>$i</option>"
294 done
295 else
296 echo "<option value="">$(gettext "Not found")</option>"
297 fi
298 cat << EOT
299 </select>
300 <br />
301 <input type="checkbox" name="MAIN_FMT" value="yes" $([ -n "$TGT_FS" ] && echo "checked") id="mainfs" />
302 <label for="mainfs">$(gettext "Format partition as"):</label>
303 <select name="MAIN_FS">
304 EOT
305 scan_mkfs
306 for i in $FS
307 do
308 echo "<option value='$i' $([ "$i" == "$TGT_FS" ] && echo "selected")>$i</option>"
309 done
310 cat <<EOT
311 </select>
312 </td></tr>
313 </table>
314 EOT
315 }
317 select_old_slitaz()
318 {
319 cat <<EOT
320 <a name="partition"></a>
321 <h4></span>$(gettext "Existing SliTaz Partition")</h4>
322 <table>
323 <tr><td>
324 $(gettext "Partition in use:")
325 <select name="TGT_PARTITION">
326 EOT
327 # List partitions
328 if fdisk -l | grep -q ^/dev/ ; then
329 for i in `blkid | cut -d ":" -f 1`; do
330 echo "<option value='$i' $([ "$i" == "$TGT_PARTITION" ] && echo "selected")>$i</option>"
331 done
332 else
333 echo "<option value="">$(gettext "Not found")</option>"
334 fi
335 cat <<EOT
336 </select>
337 </td></tr>
338 </table>
339 EOT
340 }
342 select_home()
343 {
344 cat <<EOT
345 <a name="home"></a>
346 <h4>$(gettext "Home partition")</h4>
347 <input type="checkbox" name="HOME_SPLIT" value="yes" $([ -n "$TGT_HOME" ] && echo "checked") id="homepart" />
348 <label for="homepart">$(gettext "Use a separate partition for /home:")</label>
349 <select name="HOME_PART">
350 EOT
351 # List disk if plugged USB device
352 if fdisk -l | grep -q ^/dev/ ; then
353 for i in `blkid | cut -d ":" -f 1`; do
354 echo "<option value='$i' $([ "$i" == "$TGT_HOME" ] && echo "selected")>$i</option>"
355 done
356 else
357 echo "<option value="">$(gettext "Not found")</option>"
358 fi
359 cat <<EOT
360 </select>
362 <input type="checkbox" name="HOME_FMT" value="yes" $([ -n "$TGT_HOME_FS" ] && echo "checked") id="homefs" />
363 <label for="homefs">$(gettext "Format partition as:")</label>
364 <select name="HOME_FS">"
365 EOT
366 for i in $FS
367 do
368 echo "<option value='$i' $([ "$i" == "$TGT_HOME_FS" ] && echo "selected")>$i</option>"
369 done
370 echo "</select>"
371 }
373 select_hostname()
374 {
375 cat << EOT
376 <a name="hostname"></a>
377 <h4>$(gettext "Host")</h4>
378 $(gettext "Hostname:")
379 <input type="text" name="TGT_HOSTNAME" value="$TGT_HOSTNAME" placeholder="$(gettext "Name of your system")" />
380 EOT
381 }
383 select_root()
384 {
385 cat << EOT
386 <a name="root"></a>
387 <h4>$(gettext "Root")</h4>
388 $(gettext "Root passwd:")
389 <input type="text" name="TGT_ROOT_PWD" value="$TGT_ROOT_PWD" placeholder="$(gettext "Password of root")" />
390 EOT
391 }
393 select_user()
394 {
395 cat << EOT
396 <a name="user"></a>
397 <h4>$(gettext "User")</h4>
398 $(gettext "User login:")
399 <input type="text" name="TGT_USER" value="$TGT_USER" placeholder="$(gettext "Name of the first user")" />
400 $(gettext "User passwd:")
401 <input type="text" name="TGT_USER_PWD" value="$TGT_USER_PWD" placeholder="$(gettext "Password of the first user")" />
402 EOT
403 }
405 select_grub()
406 {
407 cat << EOT
408 <a name="grub"></a>
409 <h4>$(gettext "Grub")</h4>
410 <input type="checkbox" name="TGT_GRUB" value="yes" $([ "$TGT_GRUB" == "yes" ] && echo "checked") id="grub" />
411 <label for="grub">$(gettext "Install Grub bootloader")<br /></label>
412 <input type="checkbox" name="TGT_WINBOOT" value="auto" $([ -n "$TGT_WINBOOT" ] && echo "checked") id="dualboot" />
413 <label for="dualboot">$(gettext "Enable Windows Dual-Boot")</label>
414 EOT
415 }
417 moveto_page()
418 {
419 case $1 in
420 *)
421 page=home
422 title1=$(gettext "Back to Home") ;;
423 esac
424 case $2 in
425 write|run)
426 title2=$(gettext "Proceed to SliTaz installation") ;;
427 reboot)
428 title2=$(gettext "Installation complete. You can now restart (reboot)") ;;
429 failed)
430 title2=$(gettext "Installation failed. See log") ;;
431 *)
432 page=home
433 title2=$(gettext "Back to Home") ;;
434 esac
435 cat <<EOT
436 <script type="text/javascript">
437 function SubmitForm() {
438 var r=confirm("$(gettext "Do you really want to continue?")");
439 if (r==true)
440 {
441 document.ConfigForm.submit();
442 }
443 }
444 </script>
445 <hr />
446 <input type="hidden" name="page" value="$2" />
447 <a class="button" value="$1" href="$SCRIPT_NAME?page=$1" >$title1</a>
448 <a class="button" value="$2" onclick="SubmitForm()">$title2</a>
449 EOT
450 }
452 page_redirection()
453 {
454 cat <<EOT
455 <html>
456 <head>
457 <title>$(gettext "A web page that points a browser to a different page after 2 seconds")</title>
458 <meta http-equiv="refresh" content="0; URL=$SCRIPT_NAME?page=$1">
459 <meta name="keywords" content="automatic redirection">
460 </head>
461 <body>
462 $(gettext "If your browser doesn't automatically go there within a few seconds,
463 you may want to go manually to ")
464 <a href="$SCRIPT_NAME?page=$1">$1</a>
465 </body>
466 </html>
467 EOT
468 }
470 check_ressources()
471 {
472 local code
473 code=0
474 # Check tazinst
475 if ! tazinst usage | grep -q Usage: ; then
476 cat <<EOT
477 <h3>$(gettext "Tazinst Error")</h3>
478 <p><strong>tazinst</strong>, $(gettext "the lightweight SliTaz HDD installer
479 is missing. Any installation can't be done without tazinst.")</p>
480 <p>$(gettext "Check tazinst' permissions, or reinstall the slitaz-tools package:")</p>
481 <code># tazpkg get-install slitaz-tools --forced</code>
482 EOT
483 code=1
484 else
485 # Check tazinst required version
486 v=$(tazinst version | tr -d '[:alpha:]')
487 r=$TAZINST_REQUIRED_VERSION
488 if ! (echo "$v" | awk -v r=$r '{v=$v+0}{ if (v < r) exit 1}') ; then
489 cat <<EOT
490 <h3>$(gettext "Tazinst Error")</h3>
491 <p><strong>tazinst</strong> ($v) $(gettext "is not at the required version ($r),
492 use tazinst in a xterm or reinstall the slitaz-tools package:")</p>
493 <code># tazpkg get-install slitaz-tools --forced</code>
494 EOT
495 code=1
496 fi
497 # Check setup file
498 if [ ! -e "$INSTFILE" ]; then
499 gettext "Creating setup file $INSTFILE."
500 tazinst new $INSTFILE
501 fi
502 if [ ! -e "$INSTFILE" ]; then
503 cat <<EOT
504 <h3>$(gettext "Setup File Error")</h3>
505 <p>$(gettext "The setup file <strong>$INSTFILE</strong> doesn't exists.")</p>
506 EOT
507 code=1
508 else
509 if [ ! -r $INSTFILE ]; then
510 cat <<EOT
511 <h3>$(gettext "Setup File Error")</h3>
512 <p>$(gettext "The setup file <strong>$INSTFILE</strong> is not readable.
513 Check permissions and ownership.")</p>
514 EOT
515 code=1
516 fi
517 fi
518 fi
519 return $code
520 }
522 run_tazinst()
523 {
524 echo "<h4>$(gettext "Proceeding:")</h4>"
525 table_start
526 tazinst $GET_INST_ACTION $INSTFILE | \
527 awk '{print "<tr><td><tt>" $0 "</tt></td></tr>"}'
528 table_end
529 return $(grep -c "cancelled on error" $INSTFILE)
530 }
532 tazinst_log()
533 {
534 echo "<pre>"
535 tazinst log
536 echo "</pre>"
537 }
539 scan_mkfs()
540 {
541 for path in /bin /sbin /usr/bin /usr/sbin
542 do
543 [ -e $path/mkfs.btrfs ] && FS=btrfs
544 [ -e $path/mkfs.cramfs ] && FS="$FS cramfs"
545 [ -e $path/mkfs.ext2 ] && FS="$FS ext2"
546 [ -e $path/mkfs.ext3 ] && FS="$FS ext3"
547 [ -e $path/mkfs.ext4 ] && FS="$FS ext4"
548 [ -e $path/mkfs.vfat ] && FS="$FS fat32"
549 [ -e $path/mkfs.jfs ] && FS="$FS jfs"
550 [ -e $path/mkfs.minix ] && FS="$FS minix"
551 [ -e $path/mkfs.ntfs ] && FS="$FS ntfs"
552 [ -e $path/mkfs.reiserfs ] && FS="$FS reiserfs"
553 [ -e $path/mkfs.xfs ] && FS="$FS xfs"
554 done
555 }
557 xhtml_header()
558 {
559 cat <<EOT
560 <!DOCTYPE html>
561 <html xmlns="http://www.w3.org/1999/xhtml">
562 <head>
563 <title>$TITLE</title>
564 <meta charset="utf-8" />
565 <link rel="shortcut icon" href="/styles/default/favicon.ico" />
566 <link rel="stylesheet" type="text/css" href="style.css" />
567 <!-- Function to hide the loading message when page is generated. -->
568 <script type="text/javascript">
569 function showLoading(){
570 document.getElementById("loading").style.display='none';
571 }
572 </script>
573 </head>
574 <body onload="showLoading()">
576 <!-- Page content -->
577 <div id="content">
578 EOT
579 }
581 xhtml_footer()
582 {
583 cat <<EOT
585 <!-- End of content-->
586 </div>
588 <div id="footer">
589 Copyright &copy; 2011
590 <a href="http://www.slitaz.org/">SliTaz GNU/Linux</a>
591 - <a href="/index.cgi?file=/usr/share/licenses/bsd.txt">BSD License</a>
592 </div>
594 </body>
595 </html>
596 EOT
597 }
599 table_start() {
600 cat << EOT
601 <table>
602 <tbody>
603 EOT
604 }
606 table_end () {
607 cat << EOT
608 </tbody>
609 </table>
610 EOT
612 }
614 form_start()
615 {
616 cat <<EOT
617 <form name="ConfigForm" method="get" action="$SCRIPT_NAME">
618 EOT
619 }
621 form_end()
622 {
623 echo "</form>"
624 }
626 #
627 # Main
628 #
629 get_config
631 read_query_string GET
633 #
634 # Pages
635 #
637 case "$GET_page" in
638 gparted)
639 gparted
640 xhtml_header
641 page_redirection home
642 ;;
643 install)
644 read_setup
645 xhtml_header
646 form_start
647 display_action install
648 check_setup
649 select_source
650 select_partition
651 select_home
652 select_hostname
653 select_root
654 select_user
655 select_grub
656 moveto_page home write
657 form_end
658 ;;
659 upgrade)
660 read_setup
661 xhtml_header
662 form_start
663 display_action upgrade
664 check_setup
665 select_source
666 select_old_slitaz
667 select_grub
668 moveto_page home write
669 form_end
670 ;;
671 write)
672 write_setup
673 xhtml_header
674 if ! (tazinst check $INSTFILE); then
675 page_redirection $GET_INST_ACTION
676 else
677 read_setup
678 form_start
679 display_action $GET_INST_ACTION
680 if run_tazinst; then
681 moveto_page home reboot
682 else
683 moveto_page home failed
684 fi
685 form_end
686 fi
687 ;;
688 reboot)
689 reboot ;;
690 home)
691 xhtml_header
692 select_action
693 select_gparted
694 select_install
695 select_upgrade
696 ;;
697 failed)
698 xhtml_header
699 display_log
700 ;;
701 *)
702 xhtml_header
703 if check_ressources; then
704 page_redirection home
705 fi
706 ;;
707 esac
709 xhtml_footer
711 exit 0