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}&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&action=setvar&var=$key&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}&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&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 & 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 |