On Friday 23 February 2007 00:14, Bruce Dubbs wrote: > Vladimir A. Pavlov wrote: > > 2. May be it would be better if /etc/rc.d/rc (I mean the main rc > > script. I don't remember how it's called in LFS) will run each > > bootscript using > > > > script_name 2>&1 |tee -a /var/log/bootlog > > > > rather then simply > > > > script_name > > I thought about this, but it is possible that /var is not mounted early > in the boot process, however using my script to buffer messages might work: > > script_name 2>&1 |tee /dev/bootlog
I missed that. Though, if a system hangs between the filesystems needed for logging messages (/var) have been mounted R/W, and login prompt I'd like to be able to boot, for example, from LiveCD and look through the bootlog to determine the failure reason. That means we must flush write buffer to a disk as soon as possible. IOW we cannot make two loops in the bootlog.sh, the first being for "collecting" boot messages while the second being for actual writing them to a file (as you suggested). In this case if the system hangs when the first loop is in action we will see no messages in the bootlog. > The only minor problem I see is that tee would need to be moved from > /usr/bin to /bin. FHS says "The contents of the root filesystem must be adequate to _boot_, restore, recover, and/or repair the system." so I see no problem with moving tee to /bin if we need it during system boot. > > Though, I don't know if this will work as expected if using C-s/C-q > > during system boot to stop/continue service starting (using these is > > very useful for viewing messages "on-line" if something goes wrong > > upon boot). In general, I don't know what if a user need to interact > > with a system (for example, operate with fsck in case of a > > filesystem crash) when bootscripts use tee. > > don't know either. It would require testing. However, we are not > changing input at all, so C-s/C-q should stop the process. I've just tried this, the problem actually exists. If we run something like "./script.sh |tee file" then pressing C-s stops tee, not ./scirpt.sh. A user presses C-s and messages stop. He/she thinks ./script.sh is stopped but actually the stopped program is tee. While ./script.sh is running and printing messages tee is stopped and unable to read and write these messages. When the user presses C-q he/she will see _all_ the messages ./script.sh has been printing since pressing C-s. So, using tee in the way I suggested is a bad solution. Using your daemon-like bootlog.sh is much better. > Actually I was thinking about removing /dev/bootlog as the last step of > the boot.sh script. I don't see it needed after a login prompt. In this case if we have to start/stop any service on a _running_ system all the messages the corresponding script outputs won't go to the bootlog. Well, since it is _boot_ log you're probably right, but I think it would be useful to log somewhere all the messages of bootscripts even if they are run _after_ boot. -- Nothing but perfection Vladimir A. Pavlov -- http://linuxfromscratch.org/mailman/listinfo/lfs-dev FAQ: http://www.linuxfromscratch.org/faq/ Unsubscribe: See the above information page