tazpanel annotate boot.cgi @ rev 443

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