tazpanel annotate boot.cgi @ rev 419

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