tazpanel annotate boot.cgi @ rev 496

boot.cgi: look for 'daemon'd.conf too
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed May 13 15:51:06 2015 +0200 (2015-05-13)
parents e6181f0521c8
children 3117717c007d
rev   line source
pankso@50 1 #!/bin/sh
pankso@50 2 #
paul@82 3 # Boot CGI script - All what happens before login (grub, rcS, slim)
pankso@50 4 #
al@419 5 # Copyright (C) 2011-2015 SliTaz GNU/Linux - BSD License
pankso@50 6 #
pankso@50 7
al@419 8
pankso@50 9 # Common functions from libtazpanel and source main boot config file.
al@419 10
pankso@50 11 . lib/libtazpanel
pankso@50 12 . /etc/rcS.conf
al@419 13 get_config
pascal@81 14 header
pankso@50 15
al@443 16 TITLE=$(_ 'TazPanel - Boot')
pankso@50 17
al@419 18
al@419 19 # Print last 40 lines of given file with "more" link
al@419 20
al@426 21 loghead() {
al@419 22 case $2 in
al@419 23 htmlize) tail -n40 $1 | htmlize;;
al@426 24 *) tail -n40;;
al@419 25 esac
pascal@411 26 [ $(wc -l < $1) -gt 40 ] && cat <<EOT
al@443 27 <hr/><a data-icon="view" href="index.cgi?file=$1">$(_ 'Show more...')</a>
pascal@411 28 EOT
pascal@411 29 }
pascal@411 30
al@419 31
pankso@50 32 #
pankso@50 33 # Commands
pankso@50 34 #
pankso@50 35
pascal@81 36 case " $(GET) " in
pascal@451 37 *\ syslog\ *)
pascal@451 38 logtype="$(GET syslog)"
pascal@454 39 [ "${logtype:-syslog}" == "syslog" ] && logtype=messages
pascal@451 40 xhtml_header
al@472 41
al@472 42 cat <<EOT
al@472 43 <section>
al@472 44 <header>
al@472 45 $(_ 'System logs')
al@472 46 EOT
al@472 47
pascal@453 48 [ -w /etc/syslog.conf ] && cat <<EOT
al@472 49 <form action="index.cgi">
al@472 50 <input type="hidden" name="file" value="/etc/syslog.conf"/>
al@472 51 <button name="action" value="edit" data-icon="edit">syslog.conf</button>
al@472 52 </form>
pascal@453 53 EOT
al@472 54
pascal@451 55 cat <<EOT
al@472 56 </header>
pascal@451 57
pascal@451 58 <ul id="tabs">
pascal@451 59 EOT
pascal@451 60 for i in $(sed '/var\/log/!d;s|.*/log/||' /etc/syslog.conf); do
pascal@451 61 unset act
pascal@451 62 [ "$i" == "$logtype" ] && act=' class="active"'
pascal@451 63 cat <<EOT
pascal@451 64 <li$act><a href="?syslog=$i" title="$(sed "/$i$/!d;s/[\t ].*//" /etc/syslog.conf)">$i</a></li>
pascal@451 65 EOT
pascal@451 66 done
pascal@451 67 cat <<EOT
pascal@451 68 </ul>
pascal@451 69
al@472 70 <pre style="overflow-x: auto">$(syntax_highlighter kernel < /var/log/$logtype | \
al@472 71 loghead /var/log/$logtype)</pre>
pascal@451 72 </section>
pascal@451 73 EOT
pascal@451 74 ;;
al@472 75
al@472 76
pascal@130 77 *\ log\ *)
al@419 78 unset actboot actslim actxlog actkernel colors
pascal@411 79 case "$(GET log)" in
al@419 80 boot)
al@419 81 actboot=' class="active"'
al@419 82 output="$(filter_taztools_msgs < /var/log/boot.log)"
al@419 83 colors=' class="term log"';;
al@419 84 slim)
al@419 85 actslim=' class="active"'
al@419 86 output="$(loghead /var/log/slim.log htmlize)" ;;
al@419 87 xlog)
al@419 88 actxlog=' class="active"'
al@419 89 output="$(syntax_highlighter xlog < /var/log/Xorg.0.log | loghead /var/log/Xorg.0.log)" ;;
al@419 90 *)
al@419 91 actkernel=' class="active"'
al@419 92 output="$(syntax_highlighter kernel < /var/log/dmesg.log | loghead /var/log/dmesg.log)" ;;
pascal@411 93 esac
pascal@130 94 xhtml_header
al@419 95 cat <<EOT
al@443 96 <h2>$(_ 'Boot log files')</h2>
al@419 97
pascal@411 98 <ul id="tabs">
al@443 99 <li$actkernel><a href="?log=kernel">$(_ 'Kernel messages')</a></li>
al@443 100 <li$actboot ><a href="?log=boot" >$(_ 'Boot scripts' )</a></li>
al@443 101 <li$actxlog ><a href="?log=xlog" >$(_ 'X server' )</a></li>
al@443 102 <li$actslim ><a href="?log=slim" >$(_ 'X session' )</a></li>
pascal@411 103 </ul>
al@419 104
al@419 105 <section>
al@419 106 <div>
al@472 107 <pre$colors style="overflow-x: auto">$output</pre>
al@419 108 </div>
al@419 109 </section>
pascal@130 110 EOT
pascal@130 111 ;;
al@419 112
al@419 113
pascal@81 114 *\ daemons\ *)
pankso@51 115 #
pankso@51 116 # Everything until user login
pankso@51 117 #
al@419 118 # Start and stop a daemon.
al@419 119 # (I think we don't need a 'restart' since 2 clicks and you are done)
pankso@51 120 . /etc/rcS.conf
pankso@51 121 xhtml_header
al@292 122
al@419 123 cat <<EOT
al@443 124 <h2>$(_ 'Manage daemons')</h2>
al@419 125
al@443 126 <p>$(_ 'Check, start and stop daemons on SliTaz')</p>
pankso@51 127 EOT
pascal@143 128 daemon=$(GET daemons)
pascal@143 129 case "$daemon" in
pascal@143 130 start=*)
pascal@143 131 sleep 1
pascal@143 132 /etc/init.d/${daemon#start=} start | log ;;
pascal@143 133 stop=*)
pascal@143 134 /etc/init.d/${daemon#stop=} stop | log ;;
pascal@143 135 pid=*)
pascal@143 136 echo "<pre>"
pascal@383 137 ps ww | sed 1q
pascal@383 138 for i in $(echo ${daemon#pid=} | sed 's/%20/ /g'); do
pascal@383 139 ps ww | sed "/^ $i /!d"
pascal@383 140 done
pascal@143 141 echo "</pre>" ;;
pascal@143 142 esac
al@419 143
paul@205 144 # Daemon list
al@419 145 cat <<EOT
al@419 146 <section>
al@419 147 <table class="zebra wide daemons">
al@419 148 <thead>
al@419 149 <tr>
al@443 150 <td>$(_ 'Name')</td>
al@443 151 <td>$(_ 'Description')</td>
al@443 152 <td>$(_ 'Configuration')</td>
al@443 153 <td>$(_ 'Status')</td>
al@443 154 <td>$(_ 'Action')</td>
al@443 155 <td>$(_ 'PID')</td>
al@419 156 </tr>
al@419 157 </thead>
al@419 158 <tbody>
pankso@51 159 EOT
pankso@51 160 cd /etc/init.d
al@419 161 list="$(ls | sed -e /.sh/d -e /rc./d -e /RE/d -e /daemon/d -e /firewall/d)"
al@419 162 for name in $list; do
al@419 163 unset pkg pid status SHORT_DESC boot cfg
pankso@51 164 echo '<tr>'
pankso@51 165 # Name
pankso@51 166 echo "<td>$name</td>"
al@419 167 # First check if daemon is started at boottime
pankso@51 168 [ echo "RUN_DAEMONS" | fgrep $name ] && boot="on boot"
paul@52 169 # Standard SliTaz busybox daemons and firewall
al@303 170 echo -n "<td>"
pascal@364 171 grep -qi "^${name}_OPTIONS=" /etc/daemons.conf && cfg="options|$cfg"
pascal@373 172 for i in /etc/slitaz /etc /etc/$name ; do
pascal@496 173 for j in $i/$name.conf $i/${name}d.conf ; do
pascal@496 174 [ -s $j ] && cfg="edit::$j|$cfg"
pascal@496 175 done
pascal@373 176 done
pascal@364 177 [ -n "$(which $name)" ] && cfg="man|help|$cfg"
pankso@51 178 case "$name" in
pankso@51 179 firewall)
al@443 180 _ 'SliTaz Firewall with iptable rules' ;;
pankso@51 181 httpd)
al@443 182 _ 'Small and fast web server with CGI support' ;;
pankso@51 183 ntpd)
pascal@475 184 cfg="man|help|edit::/etc/ntp.conf|options"
al@443 185 _ 'Network time protocol daemon' ;;
pankso@51 186 ftpd)
pascal@364 187 cfg="man|help|edit::/etc/inetd.conf"
al@443 188 _ 'Anonymous FTP server' ;;
pankso@51 189 udhcpd)
pascal@475 190 cfg="man|help|edit|options"
al@443 191 _ 'Busybox DHCP server' ;;
pankso@51 192 syslogd|klogd)
pascal@475 193 cfg="man|help|edit::/etc/syslog.conf|options"
al@443 194 _ 'Linux Kernel log daemon' ;;
pankso@76 195 crond)
pascal@364 196 # FIXME crontab
al@443 197 _ 'Execute scheduled commands' ;;
pankso@76 198 dnsd)
pascal@364 199 cfg="man|help|edit|options::-d"
al@443 200 _ 'Small static DNS server daemon' ;;
pankso@76 201 tftpd)
pascal@475 202 cfg="man|help|edit::/etc/inetd.conf|options"
al@443 203 _ 'Transfer a file on tftp request' ;;
pascal@475 204 lpd)
pascal@475 205 cfg="man|help|options"
pascal@475 206 _ 'Printer daemon' ;;
pankso@76 207 inetd)
al@443 208 _ 'Listen for network connections and launch programs' ;;
pankso@76 209 zcip)
pascal@364 210 cfg="man|help|edit:Script:/etc/zcip.script|options::eth0 /etc/zcip.script"
al@443 211 _ 'Manage a ZeroConf IPv4 link-local address' ;;
pankso@51 212 *)
paul@205 213 # Description from receipt
pankso@51 214 [ -d "$LOCALSTATE/installed/$name" ] && pkg=$name
pankso@51 215 [ -d "$LOCALSTATE/installed/${name%d}" ] && pkg=${name%d}
pankso@51 216 [ -d "$LOCALSTATE/installed/${name}-pam" ] && pkg=${name}-pam
pankso@51 217 if [ "$pkg" ]; then
pascal@364 218 unset SHORT_DESC TAZPANEL_DAEMON
al@419 219 #FIXME $PKGS_DB
pankso@51 220 . $LOCALSTATE/installed/$pkg/receipt
al@303 221 echo -n "$SHORT_DESC"
pascal@366 222 cfg="${TAZPANEL_DAEMON:-$cfg|web::$WEB_SITE}"
pankso@51 223 else
al@303 224 echo -n "----"
pankso@51 225 fi ;;
pankso@51 226 esac
al@303 227 echo "</td>"
paul@205 228 # Attempt to get daemon status
al@303 229 pidfile=$(find /var/run -name *$name*.pid)
al@303 230 [ "$pidfile" ] && pid=$(cat $pidfile)
al@419 231 # Dbus
al@303 232 [ -f /var/run/${name}/pid ] && pid=$(cat /var/run/${name}/pid)
al@419 233 # Apache
al@303 234 [ "$name" = "apache" ] && pid=$(cat /var/run/$name/httpd.pid)
paul@205 235 # Pidof works for many daemons
al@303 236 [ "$pid" ] || pid=$(pidof $name)
al@419 237
al@419 238 echo -n "<td style='white-space: nowrap'>"
al@419 239 if [ -n "$cfg" ]; then
pascal@364 240 IFS="|"
pascal@364 241 for i in $cfg ; do
pascal@364 242 IFS=":"
pascal@364 243 set -- $i
pascal@364 244 case "$1" in
al@419 245 edit)
al@419 246 cat <<EOT
pascal@496 247 <a href="index.cgi?file=${3:-/etc/$name.conf}&amp;action=edit" title="${2:-$name configuration} in ${3:-/etc/$name.conf}" data-img="conf"></a>
pascal@364 248 EOT
pascal@364 249 ;;
pascal@364 250 options)
al@419 251 key=$(echo -n $name | tr [a-z] [A-Z])_OPTIONS
pascal@364 252 cat <<EOT
al@419 253 <a href="index.cgi?file=/etc/daemons.conf&amp;action=setvar&amp;var=$key&amp;default=$3" title="${2:-$key}" data-img="opt"></a>
pascal@364 254 EOT
pascal@364 255 ;;
al@419 256 man)
al@419 257 cat <<EOT
al@419 258 <a href="index.cgi?exec=man ${3:-$name}&amp;back=boot.cgi%3Fdaemons" title="${2:-$name Manual}" data-img="man"></a>
pascal@364 259 EOT
pascal@364 260 ;;
al@419 261 help)
al@419 262 help='--help'
al@419 263 case $name in
al@419 264 cupsd|dropbear|gpm|slim|wpa_supplicant) help='-h'
al@419 265 esac
al@419 266 cat <<EOT
al@419 267 <a href="index.cgi?exec=$(which ${3:-$name}) $help&amp;back=boot.cgi%3Fdaemons" title="${2:-$name Help}" data-img="help"></a>
pascal@364 268 EOT
pascal@364 269 ;;
pascal@364 270 web) cat <<EOT
al@419 271 <a href="${i#$1:$2:}" title="${2:-$name website:} ${i#$1:$2:}" target="_blank" data-img="web"></a>
pascal@364 272 EOT
pascal@364 273 ;;
pascal@364 274 esac
pascal@364 275 done
pascal@364 276 fi
pascal@364 277 echo "</td>"
pankso@51 278 if [ "$pid" ]; then
al@419 279 cat <<EOT
al@443 280 <td><span title="$(_ 'Started')" data-img="on"></span></td>
al@443 281 <td><a href="?daemons=stop=$name" title="$(_ 'Stop')" data-img="stop"></a></td>
pascal@143 282 <td>
pascal@143 283 EOT
pascal@143 284 for i in $pid; do
al@419 285 cat <<EOT
al@406 286 <a href="?daemons=pid=$i">$i</a>
pascal@143 287 EOT
pascal@143 288 done
pankso@51 289 else
al@419 290 cat <<EOT
al@443 291 <td><span title="$(_ 'Stopped')" data-img="off"></span></td>
al@443 292 <td><a href="?daemons=start=$name" title="$(_ 'Start')" data-img="start"></a></td>
pascal@143 293 <td>-----
pascal@143 294 EOT
pankso@51 295 fi
pascal@143 296 echo '</td></tr>'
pankso@51 297 done
al@419 298 echo '</thead></table></section>' ;;
al@419 299
al@303 300
pankso@151 301 *\ grub\ *)
al@303 302 GRUBMENU="/boot/grub/menu.lst"
pankso@151 303 if [ "$(GET splash)" ]; then
pankso@151 304 default=$(GET default)
pankso@151 305 timeout=$(GET timeout)
pankso@151 306 splash=$(GET splash)
pankso@151 307 sed -i \
al@303 308 -e s"|default .*|default $default # new|" \
al@303 309 -e s"|timeout .*|timeout $timeout|" \
al@303 310 -e s"|splashimage=.*|splashimage=$splash|" \
al@303 311 $GRUBMENU
pankso@151 312 fi
al@419 313 default=$(cat $GRUBMENU | grep ^default | cut -d' ' -f2)
al@419 314 timeout=$(cat $GRUBMENU | grep ^timeout | cut -d' ' -f2)
al@419 315 splash=$(cat $GRUBMENU | grep ^splashimage | cut -d' ' -f2)
pankso@151 316 xhtml_header
al@419 317 cat <<EOT
al@443 318 <h2>$(_ 'GRUB Boot loader')</h2>
al@303 319
al@443 320 <p>$(_ 'The first application started when the computer powers on')</p>
pankso@151 321
al@419 322 <form class="wide">
al@419 323 <section>
al@419 324 <div>
al@419 325 <input type="hidden" name="grub"/>
al@419 326 <table>
al@443 327 <tr><td>$(_ 'Default entry:')</td>
al@419 328 <td><input type="text" name="default" value="${default##*=}"/></td></tr>
al@443 329 <tr><td>$(_ 'Timeout:')</td>
al@419 330 <td><input type="text" name="timeout" value="${timeout##*=}"/></td></tr>
al@443 331 <tr><td>$(_ 'Splash image:')</td>
al@419 332 <td><input type="text" name="splash" value="${splash##*=}" size="40"/></td></tr>
al@419 333 </table>
al@419 334 </div>
al@419 335 <footer>
al@443 336 <button type="submit" data-icon="ok">$(_ 'Change')</button>
al@419 337 </footer>
al@419 338 </section>
pankso@151 339 </form>
pankso@151 340
al@419 341 <form action="index.cgi">
al@419 342 <input type="hidden" name="file" value="$GRUBMENU"/>
al@443 343 <button data-icon="text">$(_ 'View or edit menu.lst')</button>
al@419 344 </form>
al@419 345
al@419 346
al@419 347 <section>
al@443 348 <header>$(_ 'Boot entries')</header>
al@419 349 <div>
pankso@151 350 EOT
al@303 351
al@303 352
al@419 353 menu=$(tail -q -n +$(grep -n ^title $GRUBMENU | head -n1 | cut -d: -f1) $GRUBMENU | \
al@419 354 sed -e "s|^$||g" | \
al@443 355 sed -e "s|^title|</pre></div>\n</section>\n\n<section>\n\t<header>$(_ 'Entry') #</header>\n<div><pre style=\"white-space:pre-wrap\">\0|g" | \
al@419 356 sed '/^[ \t]*$/d' | \
al@419 357 tail -q -n +2)"</pre>"
al@303 358
pankso@151 359 entry='-1'
al@303 360 echo "$menu" | while read line
pankso@151 361 do
al@419 362 if [ -n "$(echo $line | grep '#</header>')" ]; then
al@303 363 entry=$(($entry + 1))
al@303 364 fi
al@419 365 echo $line | sed "s|#</header>|$entry</header>|"
pankso@151 366 done
al@303 367
al@419 368 echo '</section>'
al@419 369
al@419 370
pankso@151 371 # Here we could check if an entry for gpxe is present if not
pankso@151 372 # display a form to add it.
al@419 373 [ -f "/boot/gpxe" ] && cat <<EOT
al@419 374 <section>
al@419 375 <header>gPXE</header>
al@443 376 <div>$(_ 'Web boot is available with gPXE')</div>
al@419 377 </section>
al@419 378 EOT
pankso@151 379 ;;
al@419 380
al@419 381
pascal@454 382 *\ iso\ *)
pascal@454 383 xhtml_header
al@456 384 iso=$(POST iso); [ -s "$iso" ] || unset iso
al@456 385 action=$(POST action); [ "$action" ] || action=$(GET action)
pascal@454 386 workdir=$(POST workdir)
pascal@454 387 [ -d $workdir ] || workdir=$(dirname $workdir)
pascal@454 388 [ -w $workdir -a "$workdir" ] || workdir=/tmp
al@456 389
pascal@454 390 echo "<h2>$(_ 'ISO mine')</h2>"
al@456 391
al@456 392 [ "$iso" ] || msg err 'Invalid ISO image.'
al@456 393
pascal@454 394 if [ "$iso" -a "$action" -a "$action" != "nop" ]; then
pascal@454 395 case "$action" in
al@456 396 install*) dev=$(POST instdev) ;;
al@456 397 *) dev=$(POST usbkeydev) ;;
pascal@454 398 esac
pascal@455 399 cd $workdir
pascal@454 400 cat <<EOT
pascal@454 401 <section>
pascal@454 402 <pre>
pascal@455 403 $(taziso $iso $action $dev 2>&1)
pascal@454 404 </pre>
pascal@454 405 </section>
pascal@454 406 EOT
pascal@454 407 fi
pascal@454 408 cat <<EOT
pascal@454 409 <section>
al@456 410 <form method="post" action="?iso" class="wide">
pascal@454 411 EOT
pascal@454 412 cat <<EOT
al@456 413 <table>
al@456 414 <tr><td>ISO image file full path
al@456 415 <span data-img="info" title="set /dev/cdrom for a physical CD-ROM"></span>
al@456 416 </td>
al@456 417 <td><input type="text" name="iso" value="$iso" size="50"/></td></tr>
al@456 418 <tr><td>Working directory</td>
pascal@458 419 <td><input type="text" name="workdir" value="$workdir" size="50"/></td></tr>
pascal@458 420 <tr><td>Target partition
pascal@458 421 <span data-img="info" title="For hard disk installation only. Will create /slitaz tree and keep other files. No partitioning and no formatting."></span>
pascal@458 422 </td>
al@456 423 <td><select name="instdev">
al@456 424 <option value="/dev/null">Choose a partition (optional)</option>
pascal@454 425 EOT
pascal@458 426 blkid | grep -iE "(msdos|vfat|ntfs|ext[234]|xfs|btrfs)" | \
pascal@490 427 sed -e 's|[A-Z]*ID="[^"]*"||g;s| SEC[^ ]*||;s|LABEL=||;s|:||' \
pascal@490 428 -e 's|TYPE="\([^"]*\)"|\1|;s|/dev/||' | \
pascal@458 429 while read dev label type; do
pascal@490 430 echo -n "<option value=\"/dev/$dev\">/dev/$dev $label $type "
pascal@490 431 echo "$(blk2h < /sys/block/${dev:0:3}/$dev/size)</option>"
pascal@454 432 done
pascal@454 433 cat <<EOT
al@456 434 </select></td></tr>
pascal@458 435 <tr><td>USB key device
pascal@458 436 <span data-img="info" title="For USB boot key only. Will erase the full device."></span>
pascal@458 437 </td>
al@456 438 <td><select name="usbkeydev">
al@456 439 <option value="/dev/null">Choose a USB key (optional)</option>
pascal@454 440 EOT
pascal@454 441 grep -l 1 /sys/block/*/removable | \
pascal@454 442 sed 's|/sys/block/\(.*\)/removable|\1|' | while read dev; do
pascal@492 443 grep -qs 1 /sys/block/$dev/ro && continue
pascal@492 444 [ -d /sys/block/$dev/device/scsi_disk ] || continue
pascal@454 445 echo -n "<option value=\"/dev/$dev\">/dev/$dev "
pascal@459 446 echo "$(blk2h < /sys/block/$dev/size) $(cat \
al@456 447 /sys/block/$i/device/model 2>/dev/null)</option>"
pascal@454 448 done
pascal@454 449 cat <<EOT
al@456 450 </select></td></tr>
al@456 451 </table>
pascal@454 452 <footer>
pascal@454 453 EOT
al@456 454
pascal@454 455 if [ "$iso" ]; then
pascal@454 456 cat <<EOT
pascal@454 457 <select name="action">
pascal@454 458 <option value="nop">Choose an action</option>
al@456 459 $(taziso $iso list | sed -e \
al@456 460 's/"\(.*\)"[\t ]*"\(.*\)"/<option value="\1\">\2<\/option>/' -e \
al@456 461 "s|value=\"$action\"|& selected|")
pascal@454 462 </select>
pascal@454 463 EOT
pascal@454 464 elif [ "$action" ]; then
pascal@454 465 cat <<EOT
pascal@454 466 <input type="hidden" name="action" value="$action" />
pascal@454 467 EOT
pascal@454 468 fi
al@456 469
pascal@454 470 cat <<EOT
pascal@454 471 <button data-icon="cd" name="mine">Mine</button>
pascal@454 472 </footer>
pascal@454 473 </form>
pascal@454 474 </section>
pascal@454 475 EOT
pascal@454 476 ;;
al@456 477
al@456 478
pankso@50 479 *)
pankso@50 480 #
pankso@51 481 # Default content with summary
pankso@50 482 #
pankso@50 483 . /etc/rcS.conf
pankso@50 484 xhtml_header
al@419 485 cat <<EOT
al@443 486 <h2>$(_ 'Boot &amp; Start services')</h2>
pankso@51 487
al@443 488 <p>$(_ 'Everything that happens before user login')</p>
pankso@57 489
al@419 490 <form>
al@443 491 <button name="log" data-icon="logs" >$(_ 'Boot logs')</button>
pascal@451 492 <button name="syslog" data-icon="logs" >$(_ 'System logs')</button>
al@443 493 <button name="daemons" data-icon="daemons" data-root>$(_ 'Manage daemons')</button>
pascal@434 494 EOT
pascal@454 495 [ "$REMOTE_USER" == "root" -a -x /usr/bin/taziso ] && cat <<EOT
pascal@454 496 <button name="iso" data-icon="cd" >$(_ 'ISO mine')</button>
pascal@454 497 EOT
pascal@434 498 [ -w /boot/grub/menu.lst ] && cat <<EOT
al@443 499 <button name="grub" data-icon="grub" >$(_ 'Boot loader')</button>
pascal@434 500 EOT
pascal@434 501 cat <<EOT
al@419 502 </form>
al@303 503
al@303 504
al@419 505 <section>
al@443 506 <header>$(_ 'Configuration files')</header>
al@419 507 <form action="index.cgi" class="wide">
al@419 508 <table>
al@443 509 <tr><td>$(_ 'Main configuration file:') <b>rcS.conf</b></td>
al@443 510 <td><button name="file" value="/etc/rcS.conf" data-icon="view">$(_ 'View')</button></td></tr>
al@443 511 <tr><td>$(_ 'Login manager settings:') <b>slim.conf</b></td>
al@443 512 <td><button name="file" value="/etc/slim.conf" data-icon="view">$(_ 'View')</button></td></tr>
al@419 513 </table>
al@419 514 </form>
al@419 515 </section>
al@303 516
al@303 517
pascal@430 518 <section style="overflow-x: auto">
al@443 519 <header>$(_ 'Kernel cmdline')</header>
al@426 520 <pre>$(cat /proc/cmdline)</pre>
al@419 521 </section>
al@419 522
al@419 523
al@419 524 <section>
al@426 525 <header>
al@443 526 $(_ 'Local startup commands')
al@419 527 <form action="index.cgi">
al@419 528 <input type="hidden" name="file" value="/etc/init.d/local.sh"/>
pascal@434 529 EOT
pascal@434 530 [ -w /etc/init.d/local.sh ] && cat <<EOT
al@443 531 <button name="action" value="edit" data-icon="edit">$(_ 'Edit')</button>
pascal@434 532 EOT
pascal@434 533 cat <<EOT
al@419 534 </form>
al@426 535 </header>
al@472 536 <pre><code class="language-bash">$(cat /etc/init.d/local.sh | htmlize)</code></pre>
al@419 537 </section>
pankso@50 538 EOT
pankso@50 539 ;;
pankso@50 540 esac
pankso@50 541
pankso@50 542 xhtml_footer
pankso@50 543 exit 0