tazpanel annotate boot.cgi @ rev 451

boot.cgi: add system logs
author Pascal Bellard <pascal.bellard@slitaz.org>
date Fri Apr 10 12:13:52 2015 +0200 (2015-04-10)
parents 169f1ccfb613
children 61395bbfe889
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@451 39 [ "$logtype" == "syslog" ] && logtype=messages
pascal@451 40 xhtml_header
pascal@451 41 cat <<EOT
pascal@451 42 <h2>$(_ 'System logs')</h2>
pascal@451 43
pascal@451 44 <ul id="tabs">
pascal@451 45 EOT
pascal@451 46 for i in $(sed '/var\/log/!d;s|.*/log/||' /etc/syslog.conf); do
pascal@451 47 unset act
pascal@451 48 [ "$i" == "$logtype" ] && act=' class="active"'
pascal@451 49 cat <<EOT
pascal@451 50 <li$act><a href="?syslog=$i" title="$(sed "/$i$/!d;s/[\t ].*//" /etc/syslog.conf)">$i</a></li>
pascal@451 51 EOT
pascal@451 52 done
pascal@451 53 cat <<EOT
pascal@451 54 </ul>
pascal@451 55
pascal@451 56 <section>
pascal@451 57 <div>
pascal@451 58 <pre>$(syntax_highlighter kernel < /var/log/$logtype | \
pascal@451 59 loghead /var/log/$logtype)</pre>
pascal@451 60 </div>
pascal@451 61 </section>
pascal@451 62 EOT
pascal@451 63 ;;
pascal@130 64 *\ log\ *)
al@419 65 unset actboot actslim actxlog actkernel colors
pascal@411 66 case "$(GET log)" in
al@419 67 boot)
al@419 68 actboot=' class="active"'
al@419 69 output="$(filter_taztools_msgs < /var/log/boot.log)"
al@419 70 colors=' class="term log"';;
al@419 71 slim)
al@419 72 actslim=' class="active"'
al@419 73 output="$(loghead /var/log/slim.log htmlize)" ;;
al@419 74 xlog)
al@419 75 actxlog=' class="active"'
al@419 76 output="$(syntax_highlighter xlog < /var/log/Xorg.0.log | loghead /var/log/Xorg.0.log)" ;;
al@419 77 *)
al@419 78 actkernel=' class="active"'
al@419 79 output="$(syntax_highlighter kernel < /var/log/dmesg.log | loghead /var/log/dmesg.log)" ;;
pascal@411 80 esac
pascal@130 81 xhtml_header
al@419 82 cat <<EOT
al@443 83 <h2>$(_ 'Boot log files')</h2>
al@419 84
pascal@411 85 <ul id="tabs">
al@443 86 <li$actkernel><a href="?log=kernel">$(_ 'Kernel messages')</a></li>
al@443 87 <li$actboot ><a href="?log=boot" >$(_ 'Boot scripts' )</a></li>
al@443 88 <li$actxlog ><a href="?log=xlog" >$(_ 'X server' )</a></li>
al@443 89 <li$actslim ><a href="?log=slim" >$(_ 'X session' )</a></li>
pascal@411 90 </ul>
al@419 91
al@419 92 <section>
al@419 93 <div>
al@419 94 <pre$colors>$output</pre>
al@419 95 </div>
al@419 96 </section>
pascal@130 97 EOT
pascal@130 98 ;;
al@419 99
al@419 100
pascal@81 101 *\ daemons\ *)
pankso@51 102 #
pankso@51 103 # Everything until user login
pankso@51 104 #
al@419 105 # Start and stop a daemon.
al@419 106 # (I think we don't need a 'restart' since 2 clicks and you are done)
pankso@51 107 . /etc/rcS.conf
pankso@51 108 xhtml_header
al@292 109
al@419 110 cat <<EOT
al@443 111 <h2>$(_ 'Manage daemons')</h2>
al@419 112
al@443 113 <p>$(_ 'Check, start and stop daemons on SliTaz')</p>
pankso@51 114 EOT
pascal@143 115 daemon=$(GET daemons)
pascal@143 116 case "$daemon" in
pascal@143 117 start=*)
pascal@143 118 sleep 1
pascal@143 119 /etc/init.d/${daemon#start=} start | log ;;
pascal@143 120 stop=*)
pascal@143 121 /etc/init.d/${daemon#stop=} stop | log ;;
pascal@143 122 pid=*)
pascal@143 123 echo "<pre>"
pascal@383 124 ps ww | sed 1q
pascal@383 125 for i in $(echo ${daemon#pid=} | sed 's/%20/ /g'); do
pascal@383 126 ps ww | sed "/^ $i /!d"
pascal@383 127 done
pascal@143 128 echo "</pre>" ;;
pascal@143 129 esac
al@419 130
paul@205 131 # Daemon list
al@419 132 cat <<EOT
al@419 133 <section>
al@419 134 <table class="zebra wide daemons">
al@419 135 <thead>
al@419 136 <tr>
al@443 137 <td>$(_ 'Name')</td>
al@443 138 <td>$(_ 'Description')</td>
al@443 139 <td>$(_ 'Configuration')</td>
al@443 140 <td>$(_ 'Status')</td>
al@443 141 <td>$(_ 'Action')</td>
al@443 142 <td>$(_ 'PID')</td>
al@419 143 </tr>
al@419 144 </thead>
al@419 145 <tbody>
pankso@51 146 EOT
pankso@51 147 cd /etc/init.d
al@419 148 list="$(ls | sed -e /.sh/d -e /rc./d -e /RE/d -e /daemon/d -e /firewall/d)"
al@419 149 for name in $list; do
al@419 150 unset pkg pid status SHORT_DESC boot cfg
pankso@51 151 echo '<tr>'
pankso@51 152 # Name
pankso@51 153 echo "<td>$name</td>"
al@419 154 # First check if daemon is started at boottime
pankso@51 155 [ echo "RUN_DAEMONS" | fgrep $name ] && boot="on boot"
paul@52 156 # Standard SliTaz busybox daemons and firewall
al@303 157 echo -n "<td>"
pascal@364 158 grep -qi "^${name}_OPTIONS=" /etc/daemons.conf && cfg="options|$cfg"
pascal@373 159 for i in /etc/slitaz /etc /etc/$name ; do
pascal@373 160 [ -s $i/$name.conf ] && cfg="edit::$i/$name.conf|$cfg"
pascal@373 161 done
pascal@364 162 [ -n "$(which $name)" ] && cfg="man|help|$cfg"
pankso@51 163 case "$name" in
pankso@51 164 firewall)
al@443 165 _ 'SliTaz Firewall with iptable rules' ;;
pankso@51 166 httpd)
al@443 167 _ 'Small and fast web server with CGI support' ;;
pankso@51 168 ntpd)
al@443 169 _ 'Network time protocol daemon' ;;
pankso@51 170 ftpd)
pascal@364 171 cfg="man|help|edit::/etc/inetd.conf"
al@443 172 _ 'Anonymous FTP server' ;;
pankso@51 173 udhcpd)
al@443 174 _ 'Busybox DHCP server' ;;
pankso@51 175 syslogd|klogd)
al@443 176 _ 'Linux Kernel log daemon' ;;
pankso@76 177 crond)
pascal@364 178 # FIXME crontab
al@443 179 _ 'Execute scheduled commands' ;;
pankso@76 180 dnsd)
pascal@364 181 cfg="man|help|edit|options::-d"
al@443 182 _ 'Small static DNS server daemon' ;;
pankso@76 183 tftpd)
pascal@364 184 cfg="man|help|edit::/etc/inetd.conf"
al@443 185 _ 'Transfer a file on tftp request' ;;
pankso@76 186 inetd)
al@443 187 _ 'Listen for network connections and launch programs' ;;
pankso@76 188 zcip)
pascal@364 189 cfg="man|help|edit:Script:/etc/zcip.script|options::eth0 /etc/zcip.script"
al@443 190 _ 'Manage a ZeroConf IPv4 link-local address' ;;
pankso@51 191 *)
paul@205 192 # Description from receipt
pankso@51 193 [ -d "$LOCALSTATE/installed/$name" ] && pkg=$name
pankso@51 194 [ -d "$LOCALSTATE/installed/${name%d}" ] && pkg=${name%d}
pankso@51 195 [ -d "$LOCALSTATE/installed/${name}-pam" ] && pkg=${name}-pam
pankso@51 196 if [ "$pkg" ]; then
pascal@364 197 unset SHORT_DESC TAZPANEL_DAEMON
al@419 198 #FIXME $PKGS_DB
pankso@51 199 . $LOCALSTATE/installed/$pkg/receipt
al@303 200 echo -n "$SHORT_DESC"
pascal@366 201 cfg="${TAZPANEL_DAEMON:-$cfg|web::$WEB_SITE}"
pankso@51 202 else
al@303 203 echo -n "----"
pankso@51 204 fi ;;
pankso@51 205 esac
al@303 206 echo "</td>"
paul@205 207 # Attempt to get daemon status
al@303 208 pidfile=$(find /var/run -name *$name*.pid)
al@303 209 [ "$pidfile" ] && pid=$(cat $pidfile)
al@419 210 # Dbus
al@303 211 [ -f /var/run/${name}/pid ] && pid=$(cat /var/run/${name}/pid)
al@419 212 # Apache
al@303 213 [ "$name" = "apache" ] && pid=$(cat /var/run/$name/httpd.pid)
paul@205 214 # Pidof works for many daemons
al@303 215 [ "$pid" ] || pid=$(pidof $name)
al@419 216
al@419 217 echo -n "<td style='white-space: nowrap'>"
al@419 218 if [ -n "$cfg" ]; then
pascal@364 219 IFS="|"
pascal@364 220 for i in $cfg ; do
pascal@364 221 IFS=":"
pascal@364 222 set -- $i
pascal@364 223 case "$1" in
al@419 224 edit)
al@419 225 cat <<EOT
al@419 226 <a href="index.cgi?file=${3:-/etc/$name.conf}&amp;action=edit" title="${2:-$name Configuration}" data-img="conf"></a>
pascal@364 227 EOT
pascal@364 228 ;;
pascal@364 229 options)
al@419 230 key=$(echo -n $name | tr [a-z] [A-Z])_OPTIONS
pascal@364 231 cat <<EOT
al@419 232 <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 233 EOT
pascal@364 234 ;;
al@419 235 man)
al@419 236 cat <<EOT
al@419 237 <a href="index.cgi?exec=man ${3:-$name}&amp;back=boot.cgi%3Fdaemons" title="${2:-$name Manual}" data-img="man"></a>
pascal@364 238 EOT
pascal@364 239 ;;
al@419 240 help)
al@419 241 help='--help'
al@419 242 case $name in
al@419 243 cupsd|dropbear|gpm|slim|wpa_supplicant) help='-h'
al@419 244 esac
al@419 245 cat <<EOT
al@419 246 <a href="index.cgi?exec=$(which ${3:-$name}) $help&amp;back=boot.cgi%3Fdaemons" title="${2:-$name Help}" data-img="help"></a>
pascal@364 247 EOT
pascal@364 248 ;;
pascal@364 249 web) cat <<EOT
al@419 250 <a href="${i#$1:$2:}" title="${2:-$name website:} ${i#$1:$2:}" target="_blank" data-img="web"></a>
pascal@364 251 EOT
pascal@364 252 ;;
pascal@364 253 esac
pascal@364 254 done
pascal@364 255 fi
pascal@364 256 echo "</td>"
pankso@51 257 if [ "$pid" ]; then
al@419 258 cat <<EOT
al@443 259 <td><span title="$(_ 'Started')" data-img="on"></span></td>
al@443 260 <td><a href="?daemons=stop=$name" title="$(_ 'Stop')" data-img="stop"></a></td>
pascal@143 261 <td>
pascal@143 262 EOT
pascal@143 263 for i in $pid; do
al@419 264 cat <<EOT
al@406 265 <a href="?daemons=pid=$i">$i</a>
pascal@143 266 EOT
pascal@143 267 done
pankso@51 268 else
al@419 269 cat <<EOT
al@443 270 <td><span title="$(_ 'Stopped')" data-img="off"></span></td>
al@443 271 <td><a href="?daemons=start=$name" title="$(_ 'Start')" data-img="start"></a></td>
pascal@143 272 <td>-----
pascal@143 273 EOT
pankso@51 274 fi
pascal@143 275 echo '</td></tr>'
pankso@51 276 done
al@419 277 echo '</thead></table></section>' ;;
al@419 278
al@303 279
pankso@151 280 *\ grub\ *)
al@303 281 GRUBMENU="/boot/grub/menu.lst"
pankso@151 282 if [ "$(GET splash)" ]; then
pankso@151 283 default=$(GET default)
pankso@151 284 timeout=$(GET timeout)
pankso@151 285 splash=$(GET splash)
pankso@151 286 sed -i \
al@303 287 -e s"|default .*|default $default # new|" \
al@303 288 -e s"|timeout .*|timeout $timeout|" \
al@303 289 -e s"|splashimage=.*|splashimage=$splash|" \
al@303 290 $GRUBMENU
pankso@151 291 fi
al@419 292 default=$(cat $GRUBMENU | grep ^default | cut -d' ' -f2)
al@419 293 timeout=$(cat $GRUBMENU | grep ^timeout | cut -d' ' -f2)
al@419 294 splash=$(cat $GRUBMENU | grep ^splashimage | cut -d' ' -f2)
pankso@151 295 xhtml_header
al@419 296 cat <<EOT
al@443 297 <h2>$(_ 'GRUB Boot loader')</h2>
al@303 298
al@443 299 <p>$(_ 'The first application started when the computer powers on')</p>
pankso@151 300
al@419 301 <form class="wide">
al@419 302 <section>
al@419 303 <div>
al@419 304 <input type="hidden" name="grub"/>
al@419 305 <table>
al@443 306 <tr><td>$(_ 'Default entry:')</td>
al@419 307 <td><input type="text" name="default" value="${default##*=}"/></td></tr>
al@443 308 <tr><td>$(_ 'Timeout:')</td>
al@419 309 <td><input type="text" name="timeout" value="${timeout##*=}"/></td></tr>
al@443 310 <tr><td>$(_ 'Splash image:')</td>
al@419 311 <td><input type="text" name="splash" value="${splash##*=}" size="40"/></td></tr>
al@419 312 </table>
al@419 313 </div>
al@419 314 <footer>
al@443 315 <button type="submit" data-icon="ok">$(_ 'Change')</button>
al@419 316 </footer>
al@419 317 </section>
pankso@151 318 </form>
pankso@151 319
al@419 320 <form action="index.cgi">
al@419 321 <input type="hidden" name="file" value="$GRUBMENU"/>
al@443 322 <button data-icon="text">$(_ 'View or edit menu.lst')</button>
al@419 323 </form>
al@419 324
al@419 325
al@419 326 <section>
al@443 327 <header>$(_ 'Boot entries')</header>
al@419 328 <div>
pankso@151 329 EOT
al@303 330
al@303 331
al@419 332 menu=$(tail -q -n +$(grep -n ^title $GRUBMENU | head -n1 | cut -d: -f1) $GRUBMENU | \
al@419 333 sed -e "s|^$||g" | \
al@443 334 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 335 sed '/^[ \t]*$/d' | \
al@419 336 tail -q -n +2)"</pre>"
al@303 337
pankso@151 338 entry='-1'
al@303 339 echo "$menu" | while read line
pankso@151 340 do
al@419 341 if [ -n "$(echo $line | grep '#</header>')" ]; then
al@303 342 entry=$(($entry + 1))
al@303 343 fi
al@419 344 echo $line | sed "s|#</header>|$entry</header>|"
pankso@151 345 done
al@303 346
al@419 347 echo '</section>'
al@419 348
al@419 349
pankso@151 350 # Here we could check if an entry for gpxe is present if not
pankso@151 351 # display a form to add it.
al@419 352 [ -f "/boot/gpxe" ] && cat <<EOT
al@419 353 <section>
al@419 354 <header>gPXE</header>
al@443 355 <div>$(_ 'Web boot is available with gPXE')</div>
al@419 356 </section>
al@419 357 EOT
pankso@151 358 ;;
al@419 359
al@419 360
pankso@50 361 *)
pankso@50 362 #
pankso@51 363 # Default content with summary
pankso@50 364 #
pankso@50 365 . /etc/rcS.conf
pankso@50 366 xhtml_header
al@419 367 cat <<EOT
al@443 368 <h2>$(_ 'Boot &amp; Start services')</h2>
pankso@51 369
al@443 370 <p>$(_ 'Everything that happens before user login')</p>
pankso@57 371
al@419 372 <form>
al@443 373 <button name="log" data-icon="logs" >$(_ 'Boot logs')</button>
pascal@451 374 <button name="syslog" data-icon="logs" >$(_ 'System logs')</button>
al@443 375 <button name="daemons" data-icon="daemons" data-root>$(_ 'Manage daemons')</button>
pascal@434 376 EOT
pascal@434 377 [ -w /boot/grub/menu.lst ] && cat <<EOT
al@443 378 <button name="grub" data-icon="grub" >$(_ 'Boot loader')</button>
pascal@434 379 EOT
pascal@434 380 cat <<EOT
al@419 381 </form>
al@303 382
al@303 383
al@419 384 <section>
al@443 385 <header>$(_ 'Configuration files')</header>
al@419 386 <form action="index.cgi" class="wide">
al@419 387 <table>
al@443 388 <tr><td>$(_ 'Main configuration file:') <b>rcS.conf</b></td>
al@443 389 <td><button name="file" value="/etc/rcS.conf" data-icon="view">$(_ 'View')</button></td></tr>
al@443 390 <tr><td>$(_ 'Login manager settings:') <b>slim.conf</b></td>
al@443 391 <td><button name="file" value="/etc/slim.conf" data-icon="view">$(_ 'View')</button></td></tr>
al@419 392 </table>
al@419 393 </form>
al@419 394 </section>
al@303 395
al@303 396
pascal@430 397 <section style="overflow-x: auto">
al@443 398 <header>$(_ 'Kernel cmdline')</header>
al@426 399 <pre>$(cat /proc/cmdline)</pre>
al@419 400 </section>
al@419 401
al@419 402
al@419 403 <section>
al@426 404 <header>
al@443 405 $(_ 'Local startup commands')
al@419 406 <form action="index.cgi">
al@419 407 <input type="hidden" name="file" value="/etc/init.d/local.sh"/>
pascal@434 408 EOT
pascal@434 409 [ -w /etc/init.d/local.sh ] && cat <<EOT
al@443 410 <button name="action" value="edit" data-icon="edit">$(_ 'Edit')</button>
pascal@434 411 EOT
pascal@434 412 cat <<EOT
al@419 413 </form>
al@426 414 </header>
al@426 415 <pre>$(cat /etc/init.d/local.sh | syntax_highlighter sh)</pre>
al@419 416 </section>
pankso@50 417 EOT
pankso@50 418 ;;
pankso@50 419 esac
pankso@50 420
pankso@50 421 xhtml_footer
pankso@50 422 exit 0