The QNAP TS-XXX NAS boxes are nice little systems but one thing I really miss is a console. Martin Michlmayr has some instructions (TS-119, TS-219, TS-41x) on his excellent Debian On QNAP pages on how to build a suitable adaptor but sadly even though I've managed to get all the parts I've been too lazy to actually solder the thing together (it doesn't help that I nearly always burn myself when I use a soldering iron!).
This became more pressing when someone reported that Debian bug #693263 in qcontrol was not fixed in Wheezy since the issue appeared to be in the initramfs hook. Worse it seemed like something in my proposed fix was causing the system to not boot at all!
Having finally found the hardware needed to reproduce the issue my
first thought was to try netconsole. To do this I edited
/etc/initramfs-tools/modules
to add:
mv643xx_eth
netconsole netconsole=@<IP>/eth0,@<DST-IP>/<DST-MAC>
The option syntax is described in
netconsole.txt
but briefly: <IP>
is the address of the TS-419P II I'm debugging on,
and <DST-IP>
and <DST-MAC>
are the IP and MAC address of another
machine on the network.
Having done that, running update-initramfs -u
and rebooting I can
use netcat -u -l -p 6666
on the other machine to see all the kernel
messages.
So far so good but this doesn't get me any debugging from the
userspace portions of the initramfs. To get those we have to
get a bit hacky by editing /usr/share/initramfs-tools/init
, first to
change:
# Parse command line options
-for x in $(cat /proc/cmdline); do
+for x in $(cat /proc/cmdline) debug; do
case $x in
and secondly:
debug)
debug=y
quiet=n
- exec >/run/initramfs/initramfs.debug 2>&1
+ exec >/dev/kmsg 2>&1
set -x
;;
The first of these simulates adding debug
to the kernel command line
(which can't otherwise easily be edited on these systems) and the
second redirects the initramfs process's output to the kernel log. The
overall effect is that the output of the initramfs processes appears
over netcat.