Boot poster challenge

Karl Vogel karl.vogel at telenet.be
Thu Nov 18 16:04:19 UTC 2004


FWIW.. my bootlog (no flashy graphs though):

   http://users.telenet.be/kvogel/boot.html


Created by following ugly hackish scripting:


--- rc.sysinit.orig     2004-11-18 16:49:52.624083048 +0100
+++ /etc/rc.sysinit     2004-11-18 03:24:43.000000000 +0100
@@ -29,6 +29,11 @@

 . /etc/init.d/functions

+cmdline=$(cat /proc/cmdline)
+if strstr "$cmdline" trace; then
+  nohup </dev/null >/dev/null 2>&1 /bin/bash /etc/rc.tracer &
+fi
+
 # Check SELinux status
 selinuxfs=`awk '/ selinuxfs / { print $2 }' /proc/mounts`
 SELINUX=


----------- /etc/rc.tracer
#!/bin/bash --login
mount -t tmpfs none /mnt/f
(
/sbin/hwclock --hctosys --localtime
while true
do
        echo ============================== $(date)
        ps -eHwwo ppid,pid,fname:20,stat,wchan:16,ni,cp,start,cputime,maj_flt,min_flt,rss,sz,vsz,cmd
        vmstat -d |sed -e '/hda/p' -e '3,$d'
        sleep 0.5
done
) >/mnt/f/boot.stats 2>&1
------------


And I put the following in /etc/rc.local  :

--------------
. /etc/init.d/functions
cmdline=$(cat /proc/cmdline)
if strstr "$cmdline" trace; then
   echo Stopping tracer
   pkill rc.tracer
   egrep -v 'ps -eHwwo|bash --login' /mnt/f/boot.stats >/var/log/boot.stats
   date >>/var/log/boot.stats
   echo -n Unmounting tmpfs:
   umount /mnt/f
   if [ $? -eq 0 ]; then
      success
   else
      failure
      sleep 8
   fi
fi
---------------


Some caveats:
- at the end of rc.sysinit (just after turning the swap on), init
  waits for a key. Pressing CTRL+C makes it continue.
  (I thought the nohup would help, but it doesn't)
- my /usr and /var are in the same partition as my root, so the script
  needs some work when using separate partitions.
- the tmpfs is mounted on /mnt/f
- umount fails, haven't looked why yet


Usage:
- boot with 'trace' on the kernel commandline. After bootup there will
  be a /var/log/boot.stats file.


Use the following perl script to generate the html output:

--- boot2html ---
#!/usr/bin/perl
open(IN, "</var/log/boot.stats") or die;
open(OUT, ">boot.html");
print OUT "<HTML><BODY><PRE>";
while(<IN>) {
        s/</</g;
        s/>/>/g;
        @arg= split;
        if (/=======/) {
                print OUT "<HR><FONT SIZE=+2>$_</FONT><HR>";
        } elsif ( $arg[3] =~ /R/) {
                print OUT "<FONT COLOR=red>$_</FONT>";
        } elsif ( $arg[3] =~ /D/) {
                print OUT "<FONT COLOR=blue>$_</FONT>";
        } else {
                print OUT $_;
        }
}

print OUT "</PRE></BODY></HTML>";
close(OUT);
close(IN);
--------------

Feel free to add some GD.pm lovin' to the script :-)




More information about the fedora-devel-list mailing list