If /var or /var/log is a separate filesystem, the udev rule for this can often run before that filesystem is mounted, causing the /var/log/uvcdynctrl-udev.log file to be "hidden" under the mountpoint - where it is also unreachable by logrotate and similar tools, and thus might grow forever until the root filesystem is full.

One way to remove the unreachable file would be to reboot into single user mode - but there is an easier way: bind mount the root filesystem to some other location. Bind mounts ignore submounts, and thus make the files stuck under mount points accessible.

Here's an example from my system:

# ls -l /var/log/uvcdynctrl-udev.log
-rw-r--r-- 1 root root 0 Nov 6 12:28 /var/log/uvcdynctrl-udev.log

# mount --bind / /mnt

# ls -l /mnt/var/log/uvcdynctrl-udev.log
-rw-r--r-- 1 root root 97805 Nov 4 21:15 /mnt/var/log/uvcdynctrl-udev.log

Apparently /lib/udev/uvcdynctrl and /lib/udev/rules.d/80-uvcdynctrl.rules are not marked as conffiles, so updates will overwrite any manual edits.

A permanent workaround can be achieved by also overriding the udev rule to make it read the script from elsewhere, so the modified script won't be overwritten on updates:

# sed -e '/^debug=/s/1/0/' < /lib/udev/uvcdynctrl >/etc/udev/uvcdynctrl
# sed -e 's|/lib/udev/uvcdynctrl|/etc/udev/uvcdynctrl|' \
< /lib/udev/rules.d/80-uvcdynctrl.rules \
/etc/udev/rules.d/80-uvcdynctrl.rules

A minimal patch would be to add a configuration file to the package, e.g. /etc/default/uvcdynctrl, and have the /lib/udev/uvcdynctrl read the value of the "debug" variable from there.


--
Matti.Kurkela (at) iki.fi (or welho.com)

Reply via email to