[Soc-coordination] Weekly report (3rd week) - Debian GNU/Hurd Debianish initialization

4winter at informatik.uni-hamburg.de 4winter at informatik.uni-hamburg.de
Fri Jul 5 11:37:40 UTC 2013


.. link: 
.. description: 
.. tags: gsoc, debian, hurd
.. date: 2013/07/05 13:32:52
.. title: mount, umount and mtab
.. slug: mount-umount-and-mtab

This week was all about getting `mount` into shape, addind `umount`
and hacking up a prototype for the `mtab` issue. With all my patches
to `mount` the boot log looks like this::

    INIT: version 2.88 booting
    Using makefile-style concurrent boot in runlevel S.
    Activating swap...done.
    Checking root file system...fsck from util-linux 2.20.1
    hd2 : tray open or drive not ready
    hd2 : tray open or drive not ready
    hd2 : tray open or drive not ready
    hd2 : tray open or drive not ready
    end_request: I/O error, dev 02:00, sector 0
    ext2fs_check_if_mount: Can't check if filesystem is mounted due to missing mtab file while determining whether /dev/hd0s1 is mounted.
    /dev/hd0s1: clean, 44101/181056 files, 283413/723200 blocks
    done.
    Cleaning up temporary files... /tmp.
    /etc/rcS.d/S06mtab.sh: 48: /etc/rcS.d/S06mtab.sh: cannot open /proc/mounts: No such file
    Activating lvm and md swap...(default pager): Already paging to partition hd0s5!
    done.
    Checking file systems...fsck from util-linux 2.20.1
    hd2 : tray open or drive not ready
    hd2 : tray open or drive not ready
    end_request: I/O error, dev 02:00, sector 0
    done.
    Mounting local filesystems...done.
    Activating swapfile swap...(default pager): Already paging to partition hd0s5!
    done.
    df: Warning: cannot read table of mounted file systems: No such file or directory
    Cleaning up temporary files....
    Configuring network interfaces...inetutils-ifconfig: invalid arguments
    ifup: failed to open pid file /run/network/ifup-/dev/eth0.pid: No such file or directory
    Internet Systems Consortium DHCP Client 4.2.2
    Copyright 2004-2011 Internet Systems Consortium.
    All rights reserved.
    For info, please visit https://www.isc.org/software/dhcp/
    
    can't create /var/lib/dhcp/dhclient./dev/eth0.leases: No such file or directory
    Listening on Socket//dev/eth0
    Sending on   Socket//dev/eth0
    DHCPDISCOVER on /dev/eth0 to 255.255.255.255 port 67 interval 7
    DHCPREQUEST on /dev/eth0 to 255.255.255.255 port 67
    DHCPOFFER from 10.0.2.2
    DHCPACK from 10.0.2.2
    can't create /var/lib/dhcp/dhclient./dev/eth0.leases: No such file or directory
    bound to 10.0.2.15 -- renewal in 42107 seconds.
    done.
    Cleaning up temporary files....
    Setting up X socket directories... /tmp/.X11-unix /tmp/.ICE-unix.
    INIT: Entering runlevel: 2
    Using makefile-style concurrent boot in runlevel 2.
    Starting enhanced syslogd: rsyslogd.
    Starting deferred execution scheduler: atd.
    Starting periodic command scheduler: cron.
    Starting system message bus: dbusFailed to set socket option"/var/run/dbus/system_bus_socket": Protocol not available.
    Starting OpenBSD Secure Shell server: sshd.
    
    
    GNU 0.3 (debian) (console)
    
    login:

As you can see, `mountall.sh` works fine now (it's the line about
mounting local filesystems). This is a list of issues I tackled this
week:

* Hurds `mount` lacks some command line flags:

  * `-O`, `--test-opts`

  * `-t`, `--types`: semantic difference to what Linux' and FreeBSDs
    mount does.

* Hurds `mount -t auto` does not work.

  * needed for fstab entries with fstype=auto

  * needed for d-i

* The `hurd` package does not provide an `umount` helper, needed for d-i.

  * also needed for `umountfs`, `umountnfs.sh`

  * required arguments `-f`, `-v`, `-r`, `-d`

* Patch series for all the issues above posted: http://lists.gnu.org/archive/html/bug-hurd/2013-07/msg00031.html

* Hurds `swapon/swapoff` lacks some command line flags:

  * `-v`, `--verbose`: set if `VERBOSE=yes` is given in `/etc/default/rcS`.

  * Patch posted: http://lists.gnu.org/archive/html/bug-hurd/2013-07/msg00055.html

Note that even though I've implemented `umount`, it doesn't actually
work yet. That is because `umount` needs a `mtab` file or
`/proc/mounts` to do anything, because you can either invoke `umount`
with the mount point *or* the device and `umount` needs an `mtab`
style file to figure out whether the argument is referring to the
former or the latter.

So the next big issue is the `mtab` issue. There is some information
about that in the Hurd wiki, it even is a gsoc project idea of its
own:
http://www.gnu.org/software/hurd/community/gsoc/project_ideas/mtab.html

But I need this now, this cannot wait for another gsoc. The
implementation outlined by that page consists roughly of:

* In every translator, keep a list of translators (active and passive)
  being bound to nodes of the translator. Think of this as keeping a
  list of child-translators.

* Add a RPC procedure to query this list.

* Creating a `mtab`-translator that recursively queries translators
  starting from a given translator and collects all the information
  required for an `mtab` file.

If this hypothetical `mtab` translator is bound to say `/proc/mounts`
this would solve all our problems::

  % settrans -ca /proc/mounts /hurd/mtab /

As this involves adding a RPC procedure and keeping a list of passive
and active translators, this involves some design decisions. As
discussed in #hurd I hacked up a prototype and post it for review:
http://lists.gnu.org/archive/html/bug-hurd/2013-07/msg00022.html

As soon as I get the necessary feedback on this issue, I will get the
implementation up to speed. Until then, I will pick another item from
my `status </gsoc>`_ list, most probably the `ifupdown` issue.

Speaking of feedback, all of my patches I sent last week were merged
at the appropriate locations. That was really quick, many thanks for
that :)

While working on the `mount` issues, I frequently looked at the
implementation of Linux' and FreeBSD's `mount` to see how `--types` is
handled there. I must admit that I was not to keen about the idea of
writing `c` again, but I was positively surprised by the code I've
seen from Hurd so far. As Hurd is the operating system of the GNU
system, its code is free to use any GNU extension to libc and gcc
including nice stuff like nested functions. If you look at the
different `mount` implementations, you'll find the Hurd version to be
the most modern and clean one imho:

Linux
  http://sources.debian.net/src/util-linux/2.20.1-5.4/mount/mount.c

FreeBSD
  http://sources.debian.net/src/freebsd-utils/9.0%2Bds1-11/sbin/mount/mount.c

Hurd
  http://sources.debian.net/src/hurd/20130620-1/utils/mount.c

See you next week :)



More information about the Soc-coordination mailing list