I did some more investigation, and after reading /sbin/bootchartd came up with a simpler hook that's 90% right:
#!/bin/sh
# Absolute barebones setup for rdinit=/sbin/bootchartd.
# Does not support /etc/bootchartd.conf magic,
# which in the ramdisk is only the sample rate (default 50Hz).
set -e
case $1 in (prereqs) echo busybox; exit;; esac
. /usr/share/initramfs-tools/hook-functions
copy_exec /lib/bootchart/bootchart-collector
printf '#!/bin/sh\n/lib/bootchart/bootchart-collector -c &\nexec /init
"$@"\n' >"$DESTDIR"/sbin/bootchartd
chmod +x "$DESTDIR"/sbin/bootchartd
# bootchart-collector mounts a tmpfs here.
mkdir -p "$DESTDIR"/lib/bootchart/tmpfs
Now when I boot with "break rdinit=/sbin/bootchartd", I get
/sbin/bootchartd: line 2: can't open '/dev/null'
Loading, please wait...
Begin: Loading essential drivers ... done.
[...]
and if I run "ps | grep [b]ootchart" from the break (ramdisk shell),
I can see bootchart-collector isn't running.
If I then run "/lib/bootchart/bootchart-collector -c &" it falsely claims
bootchart-collector run outside initrd
It's whinging about /dev/null because sh implicitly redirects stdin of
backgrounded children there. Explicitly closing stdin first didn't work:
printf '#!/bin/sh\n/lib/bootchart/bootchart-collector -c <&- & exec /init
"$@"\n' >"$DESTDIR"/sbin/bootchartd
But creating /dev/null does!
printf '#!/bin/sh\nmknod /dev/null c 1 3; ls -ld /dev/null;
/lib/bootchart/bootchart-collector -c & exec /init "$@"\n'
>"$DESTDIR"/sbin/bootchartd
That successfully starts a bootchart-collector which is still running
when I get to the "break" shell, though it is also complaining about
"run outside initrd".
OK, so after I confirmed bootchart-collector is running there,
I let boot proceed. But when I let that proceed to the desktop,
there's no /var/log/bootchart*.
I'll have to leave it here for now.
signature.asc
Description: Digital signature

