Of course, your first task is to [get the source of the Hurd](http://www.gnu.org/software/hurd/download.html). `gcc-3.3` requires CVS snapshot from 2003-05-08 or later. The unpacked source tree is around 20M, and the build tree (configured with `--disable-profile`) is around 200M.

Building the Hurd requires `gcc`, `libc-dev` and `mig` packages:

    # apt-get install gcc-3.3 make libc-dev mig

The reason for installing `gcc-3.3` but not just `gcc` is that currently `gcc` package doesn't exist in Debian GNU/Hurd archives. When this changes, so will this page.

`libc-dev` will install `libc0.3-dev`, which depends on `gnumach-dev` and `hurd-dev`.

The Hurd can be compiled in its directory, like this:

    $ CC=gcc-3.3 ./configure
    $ make

but it's recommended to build it in separate directory because there are too many generated files and it becomes too crowdy in the source directories:

    $ mkdir build
    $ cd build
    $ ../configure --disable-profile
    $ make
    $ make install

Notice that `make install` will install the Hurd in `/`, not in `/usr/local` or `/local`, so your current Hurd servers will be replaced. This is generally a good idea because Hurd's development is concetrated on fixing bugs right now, not on introducing ground-breaking features (but it has a lot of them).

By default profiling versions of all the libraries and code are generated but this is useless in most of the cases, so we disable them.

As an alternative, you can build and install the Hurd in the Debian way (from CVS snapshot):

    # apt-get build-dep hurd
    # cd hurd
    # dpkg-buildpackage
    # cd ..
    # dpkg -i hurd_*.deb hurd-dev_*.deb

Notice that the `kbd` and `mouse` translators are only available in the Debian `diff.gz` patch. If you want this patch applied, here is one easy way:

    $ apt-get source hurd       # Unpacks in hurd-YYYYMMDD
    $ cd hurd                   # This is taken from CVS
    $ gzip -cd ../hurd_YYYYMMDD-1.diff.gz | patch -p1

Now you can continue with `apt-get build-dep`, etc.

If you just want to build a specific server or library, you can pass its name to `make`:

    $ make ext2fs
    $ make libtrivfs

This will automatically build all libraries that are required to build the requested server or library.

If you want to trace the RPC calls made by some process by using `rpctrace` command, you will also want some more human-readable output of this command. This is achieved by generating `hurd.msgids` file that includes the mapping between the number of the RPC call and its name:

    $ cd build/hurd
    $ make hurd.msgids
    $ cp hurd.msgids ~

Now you can use this file by the following way:

    $ rpctrace -I ~/hurd.msgids ls

-- [[Main/OgnyanKulev]] - 08 Apr 2003