reassign 608428 freebsd-utils severity 608428 serious thanks On Thu, Dec 30, 2010 at 10:18:27PM +0000, Roger Leigh wrote: > On Thu, Dec 30, 2010 at 09:06:28PM +0100, Jakub Wilk wrote: > > Hi Jakub, > > > On kfreebsd-*, schroot is not able to unmount everything if chroot name > > is longer than 13 characters: > > > > # schroot -c 123456789abcde echo Hello world > > Hello world > > E: 10mount: umount: unmount of /var/lib/schroot/mount/123456789abcde-e7de3ef4-e02c-430c-b9d9-0e4eb34f3bd0/dev/f failed: Invalid argument > > > > If the name is longer than 18 characters, it cannot even run a command: > > > > # schroot -c 123456789abcdefghij echo Hello world > > E: 10mount: mount: dev : File name too long > > E: 10mount: umount: unmount of /var/lib/schroot/mount/123456789abcdefghij-cf720545-3204-4bda-93a8-82bbd3ac46ca/ failed: Invalid argument > > > > Given that e.g. sbuild-createchroot creates chroot named > > "$SUITE-kfreebsd-$CPU-sbuild" (which is >= 23 characters), this is quite > > an unfortunate limitation. > > Yes, it is. Given that schroot only runs the system's standard > "mount" and "umount" commands, is this an underlying limitation in > either those commands or in the system calls? Or in the shell? I've created a kfreebsd install using kvm, and installed sbuild and schroot in it, and I have reproduced the problem. The bug is not in sbuild; it's reproducible with schroot alone as you saw. The bug is not in schroot; it's reproducible with the plain mount/umount commands and long paths, shown below. root@kfreebsd:~# for c in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do cs="$cs$c"; mkdir /tmp/$cs; mount -v -t linprocfs linprocfs /tmp/$cs; done linprocfs on /tmp/0 (linprocfs, local) linprocfs on /tmp/01 (linprocfs, local) linprocfs on /tmp/012 (linprocfs, local) linprocfs on /tmp/0123 (linprocfs, local) linprocfs on /tmp/01234 (linprocfs, local) linprocfs on /tmp/012345 (linprocfs, local) linprocfs on /tmp/0123456 (linprocfs, local) linprocfs on /tmp/01234567 (linprocfs, local) linprocfs on /tmp/012345678 (linprocfs, local) linprocfs on /tmp/0123456789 (linprocfs, local) linprocfs on /tmp/0123456789a (linprocfs, local) linprocfs on /tmp/0123456789ab (linprocfs, local) linprocfs on /tmp/0123456789abc (linprocfs, local) linprocfs on /tmp/0123456789abcd (linprocfs, local) linprocfs on /tmp/0123456789abcde (linprocfs, local) linprocfs on /tmp/0123456789abcdef (linprocfs, local) root@kfreebsd:~# for c in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do cs="$cs$c"; mkdir /tmp/$cs; mount -v -t linprocfs linprocfs /tmp/$cs; done linprocfs on /tmp/0123456789abcdef0 (linprocfs, local) linprocfs on /tmp/0123456789abcdef01 (linprocfs, local) linprocfs on /tmp/0123456789abcdef012 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123 (linprocfs, local) linprocfs on /tmp/0123456789abcdef01234 (linprocfs, local) linprocfs on /tmp/0123456789abcdef012345 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456 (linprocfs, local) linprocfs on /tmp/0123456789abcdef01234567 (linprocfs, local) linprocfs on /tmp/0123456789abcdef012345678 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789a (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789ab (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abc (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcd (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcde (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef (linprocfs, local) root@kfreebsd:~# for c in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do cs="$cs$c"; mkdir /tmp/$cs; mount -v -t linprocfs linprocfs /tmp/$cs; done linprocfs on /tmp/0123456789abcdef0123456789abcdef0 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef01 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef012 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef01234 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef012345 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef01234567 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef012345678 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789a (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789ab (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abc (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcd (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcde (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef (linprocfs, local) root@kfreebsd:~# for c in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do cs="$cs$c"; mkdir /tmp/$cs; mount -v -t linprocfs linprocfs /tmp/$cs; done linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef01 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef012 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef01234 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef012345 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef01234567 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef012345678 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789a (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789ab (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abc (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcd (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef (linprocfs, local) root@kfreebsd:~# for c in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do cs="$cs$c"; mkdir /tmp/$cs; mount -v -t linprocfs linprocfs /tmp/$cs; done linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef012 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01234 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef012345 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01234567 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef012345678 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789 (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789a (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789a (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789a (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789a (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789a (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789a (linprocfs, local) Notice here that the paths start getting clipped at the 80 character path length. Note that although the displayed path is clipped, and it's reported in clipped form by mount, it's actually correctly mounted (see below). If we increase the path length yet further (>85 chars), it then fails with ENAMETOOLONG: root@kfreebsd:~# for c in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do cs="$cs$c"; mkdir /tmp/$cs; mount -v -t linprocfs linprocfs /tmp/$cs; done mount: linprocfs : File name too long mount: linprocfs : File name too long mount: linprocfs : File name too long mount: linprocfs : File name too long mount: linprocfs : File name too long mount: linprocfs : File name too long mount: linprocfs : File name too long mount: linprocfs : File name too long mount: linprocfs : File name too long mount: linprocfs : File name too long mount: linprocfs : File name too long mount: linprocfs : File name too long mount: linprocfs : File name too long mount: linprocfs : File name too long mount: linprocfs : File name too long mount: linprocfs : File name too long Unmounting is broken as well: root@kfreebsd:~# for c in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do cs="$cs$c"; umount -v /tmp/$cs; done linprocfs: unmount from /tmp/0 linprocfs: unmount from /tmp/01 linprocfs: unmount from /tmp/012 linprocfs: unmount from /tmp/0123 linprocfs: unmount from /tmp/01234 linprocfs: unmount from /tmp/012345 linprocfs: unmount from /tmp/0123456 linprocfs: unmount from /tmp/01234567 linprocfs: unmount from /tmp/012345678 linprocfs: unmount from /tmp/0123456789 linprocfs: unmount from /tmp/0123456789a linprocfs: unmount from /tmp/0123456789ab linprocfs: unmount from /tmp/0123456789abc linprocfs: unmount from /tmp/0123456789abcd linprocfs: unmount from /tmp/0123456789abcde linprocfs: unmount from /tmp/0123456789abcdef root@kfreebsd:~# for c in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do cs="$cs$c"; umount -v /tmp/$cs; done linprocfs: unmount from /tmp/0123456789abcdef0 linprocfs: unmount from /tmp/0123456789abcdef01 linprocfs: unmount from /tmp/0123456789abcdef012 linprocfs: unmount from /tmp/0123456789abcdef0123 linprocfs: unmount from /tmp/0123456789abcdef01234 linprocfs: unmount from /tmp/0123456789abcdef012345 linprocfs: unmount from /tmp/0123456789abcdef0123456 linprocfs: unmount from /tmp/0123456789abcdef01234567 linprocfs: unmount from /tmp/0123456789abcdef012345678 linprocfs: unmount from /tmp/0123456789abcdef0123456789 linprocfs: unmount from /tmp/0123456789abcdef0123456789a linprocfs: unmount from /tmp/0123456789abcdef0123456789ab linprocfs: unmount from /tmp/0123456789abcdef0123456789abc linprocfs: unmount from /tmp/0123456789abcdef0123456789abcd linprocfs: unmount from /tmp/0123456789abcdef0123456789abcde linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef root@kfreebsd:~# for c in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do cs="$cs$c"; umount -v /tmp/$cs; done linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef01 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef012 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef01234 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef012345 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef01234567 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef012345678 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789a linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789ab linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abc linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcd linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcde linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef root@kfreebsd:~# for c in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do cs="$cs$c"; umount -v /tmp/$cs; done linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef01 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef012 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef01234 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef012345 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef01234567 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef012345678 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789a linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789ab linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abc linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcd linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef root@kfreebsd:~# for c in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do cs="$cs$c"; umount -v /tmp/$cs; done linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef012 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01234 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef012345 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01234567 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef012345678 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789 linprocfs: unmount from /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789a umount: unmount of /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789a failed: Invalid argument umount: unmount of /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789a failed: Invalid argument umount: unmount of /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789a failed: Invalid argument umount: unmount of /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789a failed: Invalid argument umount: unmount of /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789a failed: Invalid argument As before, the path gets clipped at 80 chars, and umount fails to umount the truncated path. Again, as we get to >85 chars, it fails outright: root@kfreebsd:~# for c in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do cs="$cs$c"; umount -v /tmp/$cs; done umount: /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0: not a file system root directory umount: /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01: not a file system root directory umount: /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef012: not a file system root directory umount: /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123: not a file system root directory umount: /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01234: not a file system root directory umount: /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef012345: not a file system root directory umount: /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456: not a file system root directory umount: /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01234567: not a file system root directory umount: /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef012345678: not a file system root directory umount: /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789: not a file system root directory umount: /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789a: not a file system root directory umount: /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789ab: not a file system root directory umount: /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abc: not a file system root directory umount: /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcd: not a file system root directory umount: /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde: not a file system root directory umount: /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef: not a file system root directory Mount reports truncated paths. These are the remaining mounts after running the above commands. These are paths from 80-85 chars since <80 mount/umount OK, and >85 fail. 80-85 lengths mount OK even though reported incorrectly, but fail to umount: root@kfreebsd:~# mount | grep /tmp linprocfs on /tmp/var/lib/schroot/mount/kfreebsd-amd64-sbuild-xxxxxxxx0xxxx0xxxx0xxxx0xxxxxxx (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789a (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789a (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789a (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789a (linprocfs, local) linprocfs on /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789a (linprocfs, local) But, if we look at /proc/mounts in linprocfs, we do see the full non-clipped path! root@kfreebsd:~# cat /proc/mounts | grep /tmp linprocfs /tmp/var/lib/schroot/mount/kfreebsd-amd64-sbuild-xxxxxxxx0xxxx0xxxx0xxxx0xxxxxxx/proc linprocfs rw 0 0 linprocfs /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789ab linprocfs rw 0 0 linprocfs /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abc linprocfs rw 0 0 linprocfs /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcd linprocfs rw 0 0 linprocfs /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde linprocfs rw 0 0 linprocfs /tmp/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef linprocfs rw 0 0 So, this looks like a bug in the mount/umount utilities and/or the kfreebsd mount/nmount/umount system calls. Possible explanation: there's an 80 char buffer being used which causes the truncation. The syscall manual pages tell us that there's a 1023 character restriction with 255 chars per path component. We're nowhere near that documented limit, so there's a serious bug somewhere. I'm not a freebsd user or developer. I've identified the cause of the problem, and it's not in schroot. This really needs the attention of some freebsd people who can fix the length restrictions, I've realistically done all I am able. I've reassigned this to freebsd-utils, which is the most likely place for the bug to be. I've also put the severity to serious, since this is a fundamental and dangerous flaw in a key system component which can and is causing breakage. It would be good if this could be fixed for squeeze. Regards, Roger -- .''`. Roger Leigh : :' : Debian GNU/Linux http://people.debian.org/~rleigh/ `. `' Printing on GNU/Linux? http://gutenprint.sourceforge.net/ `- GPG Public Key: 0x25BFB848 Please GPG sign your mail.
Attachment:
signature.asc
Description: Digital signature